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