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