131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/* 231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License. 631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at 731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and 1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License. 1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 17325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerpackage com.android.launcher3; 1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 1972b520c956a4bf11f6dbbac7eb5e18001b7a11cbWinson Chungimport android.content.ContentValues; 20ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.content.Context; 21ed13187a745866483139e2878037e1f8427ce567Kenny Guy 22ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.UserHandleCompat; 2372b520c956a4bf11f6dbbac7eb5e18001b7a11cbWinson Chung 2433231f587e1a6f716af68e6198df774d2847a8e5Winson Chungimport java.util.ArrayList; 25be3e410b7a62fa64ffda825b824862eb9d0c98c5Sameer Padalaimport java.util.Arrays; 2633231f587e1a6f716af68e6198df774d2847a8e5Winson Chung 2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/** 2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents a folder containing shortcuts or apps. 2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 307b168a1bb94044d9ae11004bae18beba9eed46fdAnjali Koppalpublic class FolderInfo extends ItemInfo { 31df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Whether this folder has been opened 3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project boolean opened; 3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 38df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * The apps and shortcuts 39df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 40df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>(); 41df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 42a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen ArrayList<FolderListener> listeners = new ArrayList<FolderListener>(); 43a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 44c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka FolderInfo() { 45df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER; 46ed13187a745866483139e2878037e1f8427ce567Kenny Guy user = UserHandleCompat.myUserHandle(); 47df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 48df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 49df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 50df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * Add an app or shortcut 51df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * 52df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * @param item 53df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 54df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen public void add(ShortcutInfo item) { 55df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen contents.add(item); 56a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen for (int i = 0; i < listeners.size(); i++) { 57a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.get(i).onAdd(item); 58a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 59ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen itemsChanged(); 60df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 61df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 62df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 63df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * Remove an app or shortcut. Does not change the DB. 64df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * 65df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * @param item 66df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 67df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen public void remove(ShortcutInfo item) { 68df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen contents.remove(item); 69a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen for (int i = 0; i < listeners.size(); i++) { 70a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.get(i).onRemove(item); 71a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 72ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen itemsChanged(); 73df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 74df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 7576fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen public void setTitle(CharSequence title) { 7676fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen this.title = title; 7776fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen for (int i = 0; i < listeners.size(); i++) { 7876fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen listeners.get(i).onTitleChanged(title); 7976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 8076fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 8176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 82df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen @Override 83ed13187a745866483139e2878037e1f8427ce567Kenny Guy void onAddToDatabase(Context context, ContentValues values) { 84ed13187a745866483139e2878037e1f8427ce567Kenny Guy super.onAddToDatabase(context, values); 85df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen values.put(LauncherSettings.Favorites.TITLE, title.toString()); 86df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 87a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 88a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen void addListener(FolderListener listener) { 89a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.add(listener); 90a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 91a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 92a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen void removeListener(FolderListener listener) { 93a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen if (listeners.contains(listener)) { 94a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.remove(listener); 95a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 96a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 97a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 9876078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen void itemsChanged() { 9976078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen for (int i = 0; i < listeners.size(); i++) { 10076078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen listeners.get(i).onItemsChanged(); 10176078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen } 10276078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen } 10376078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen 1044eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen @Override 1054eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen void unbind() { 1064eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen super.unbind(); 1074eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen listeners.clear(); 1084eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen } 1094eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen 110a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen interface FolderListener { 111a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen public void onAdd(ShortcutInfo item); 112a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen public void onRemove(ShortcutInfo item); 11376fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen public void onTitleChanged(CharSequence title); 11476078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen public void onItemsChanged(); 115a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 11664359a53dc827797917a8d9a0697a91996789801Winson Chung 11764359a53dc827797917a8d9a0697a91996789801Winson Chung @Override 11864359a53dc827797917a8d9a0697a91996789801Winson Chung public String toString() { 11964359a53dc827797917a8d9a0697a91996789801Winson Chung return "FolderInfo(id=" + this.id + " type=" + this.itemType 12064359a53dc827797917a8d9a0697a91996789801Winson Chung + " container=" + this.container + " screen=" + screenId 12164359a53dc827797917a8d9a0697a91996789801Winson Chung + " cellX=" + cellX + " cellY=" + cellY + " spanX=" + spanX 122be3e410b7a62fa64ffda825b824862eb9d0c98c5Sameer Padala + " spanY=" + spanY + " dropPos=" + Arrays.toString(dropPos) + ")"; 12364359a53dc827797917a8d9a0697a91996789801Winson Chung } 12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 125