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 17a5902524d4403885eb4c50360bf3465c6be796efJoe Onoratopackage com.android.launcher2; 1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 19df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohenimport java.util.ArrayList; 20df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 21df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohenimport android.content.ContentValues; 22374753cabf05cde1ad669d07bde47e34fdcbe499Amith Yamasaniimport android.content.Context; 2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/** 2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents a folder containing shortcuts or apps. 2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectclass FolderInfo extends ItemInfo { 28df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Whether this folder has been opened 3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project boolean opened; 3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 35df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * The apps and shortcuts 36df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 37df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>(); 38df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 39a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen ArrayList<FolderListener> listeners = new ArrayList<FolderListener>(); 40a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 41c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka FolderInfo() { 42df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER; 43df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 44df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 45df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 46df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * Add an app or shortcut 47df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * 48df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * @param item 49df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 50df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen public void add(ShortcutInfo item) { 51df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen contents.add(item); 52a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen for (int i = 0; i < listeners.size(); i++) { 53a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.get(i).onAdd(item); 54a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 55ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen itemsChanged(); 56df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 57df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 58df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 59df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * Remove an app or shortcut. Does not change the DB. 60df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * 61df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * @param item 62df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 63df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen public void remove(ShortcutInfo item) { 64df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen contents.remove(item); 65a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen for (int i = 0; i < listeners.size(); i++) { 66a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.get(i).onRemove(item); 67a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 68ac56cff1860b71d3f164aedd268703936e08fdc0Adam Cohen itemsChanged(); 69df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 70df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 7176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen public void setTitle(CharSequence title) { 7276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen this.title = title; 7376fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen for (int i = 0; i < listeners.size(); i++) { 7476fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen listeners.get(i).onTitleChanged(title); 7576fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 7676fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 7776fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 78df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen @Override 79374753cabf05cde1ad669d07bde47e34fdcbe499Amith Yamasani void onAddToDatabase(Context context, ContentValues values) { 80374753cabf05cde1ad669d07bde47e34fdcbe499Amith Yamasani super.onAddToDatabase(context, values); 81df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen values.put(LauncherSettings.Favorites.TITLE, title.toString()); 82df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen } 83a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 84a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen void addListener(FolderListener listener) { 85a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.add(listener); 86a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 87a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 88a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen void removeListener(FolderListener listener) { 89a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen if (listeners.contains(listener)) { 90a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen listeners.remove(listener); 91a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 92a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 93a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 9476078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen void itemsChanged() { 9576078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen for (int i = 0; i < listeners.size(); i++) { 9676078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen listeners.get(i).onItemsChanged(); 9776078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen } 9876078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen } 9976078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen 1004eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen @Override 1014eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen void unbind() { 1024eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen super.unbind(); 1034eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen listeners.clear(); 1044eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen } 1054eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen 106a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen interface FolderListener { 107a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen public void onAdd(ShortcutInfo item); 108a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen public void onRemove(ShortcutInfo item); 10976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen public void onTitleChanged(CharSequence title); 11076078c4ef35b6e95fb6d8129a32cf52a36625e28Adam Cohen public void onItemsChanged(); 111a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen } 11231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 113