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; 2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 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 /** 3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * The folder name. 3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project CharSequence title; 37df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 38df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen /** 39df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen * The apps and shortcuts 40df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen */ 41df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>(); 42df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen 43a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen ArrayList<FolderListener> listeners = new ArrayList<FolderListener>(); 44a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen 45c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka FolderInfo() { 46df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER; 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 83df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen void onAddToDatabase(ContentValues values) { 84df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen super.onAddToDatabase(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 } 11631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 117