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; 2072b520c956a4bf11f6dbbac7eb5e18001b7a11cbWinson Chung 2133231f587e1a6f716af68e6198df774d2847a8e5Winson Chungimport java.util.ArrayList; 2233231f587e1a6f716af68e6198df774d2847a8e5Winson Chung 2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/** 2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents a folder containing shortcuts or apps. 2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectclass FolderInfo extends ItemInfo { 27df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Whether this folder has been opened 3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project boolean opened; 3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 34df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * The apps and shortcuts 35df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 36df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>(); 37df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 38a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen ArrayList<FolderListener> listeners = new ArrayList<FolderListener>(); 39a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 40c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka FolderInfo() { 41df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER; 42df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 43df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 44df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 45df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * Add an app or shortcut 46df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * 47df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * @param item 48df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 49df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen public void add(ShortcutInfo item) { 50df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen contents.add(item); 51a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen for (int i = 0; i < listeners.size(); i++) { 52a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.get(i).onAdd(item); 53a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 54ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen itemsChanged(); 55df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 56df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 57df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 58df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * Remove an app or shortcut. Does not change the DB. 59df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * 60df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * @param item 61df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 62df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen public void remove(ShortcutInfo item) { 63df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen contents.remove(item); 64a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen for (int i = 0; i < listeners.size(); i++) { 65a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.get(i).onRemove(item); 66a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 67ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen itemsChanged(); 68df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 69df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 7076fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen public void setTitle(CharSequence title) { 7176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen this.title = title; 7276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen for (int i = 0; i < listeners.size(); i++) { 7376fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen listeners.get(i).onTitleChanged(title); 7476fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 7576fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 7676fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 77df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen @Override 78df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen void onAddToDatabase(ContentValues values) { 79df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen super.onAddToDatabase(values); 80df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen values.put(LauncherSettings.Favorites.TITLE, title.toString()); 81df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 82a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 83a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen void addListener(FolderListener listener) { 84a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.add(listener); 85a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 86a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 87a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen void removeListener(FolderListener listener) { 88a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen if (listeners.contains(listener)) { 89a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.remove(listener); 90a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 91a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 92a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 9376078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen void itemsChanged() { 9476078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen for (int i = 0; i < listeners.size(); i++) { 9576078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen listeners.get(i).onItemsChanged(); 9676078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen } 9776078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen } 9876078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen 994eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen @Override 1004eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen void unbind() { 1014eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen super.unbind(); 1024eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen listeners.clear(); 1034eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen } 1044eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen 105a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen interface FolderListener { 106a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen public void onAdd(ShortcutInfo item); 107a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen public void onRemove(ShortcutInfo item); 10876fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen public void onTitleChanged(CharSequence title); 10976078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen public void onItemsChanged(); 110a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 11164359a53dc827797917a8d9a0697a91996789801Winson Chung 11264359a53dc827797917a8d9a0697a91996789801Winson Chung @Override 11364359a53dc827797917a8d9a0697a91996789801Winson Chung public String toString() { 11464359a53dc827797917a8d9a0697a91996789801Winson Chung return "FolderInfo(id=" + this.id + " type=" + this.itemType 11564359a53dc827797917a8d9a0697a91996789801Winson Chung + " container=" + this.container + " screen=" + screenId 11664359a53dc827797917a8d9a0697a91996789801Winson Chung + " cellX=" + cellX + " cellY=" + cellY + " spanX=" + spanX 11764359a53dc827797917a8d9a0697a91996789801Winson Chung + " spanY=" + spanY + " dropPos=" + dropPos + ")"; 11864359a53dc827797917a8d9a0697a91996789801Winson Chung } 11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 120