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