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;
20ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.content.Context;
21ed13187a745866483139e2878037e1f8427ce567Kenny Guy
22ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.UserHandleCompat;
2372b520c956a4bf11f6dbbac7eb5e18001b7a11cbWinson Chung
2433231f587e1a6f716af68e6198df774d2847a8e5Winson Chungimport java.util.ArrayList;
25be3e410b7a62fa64ffda825b824862eb9d0c98c5Sameer Padalaimport java.util.Arrays;
2633231f587e1a6f716af68e6198df774d2847a8e5Winson Chung
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/**
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents a folder containing shortcuts or apps.
2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
307b168a1bb94044d9ae11004bae18beba9eed46fdAnjali Koppalpublic class FolderInfo extends ItemInfo {
31df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen
3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Whether this folder has been opened
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    boolean opened;
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
38df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen     * The apps and shortcuts
39df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen     */
40df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen    ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>();
41df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen
42a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen    ArrayList<FolderListener> listeners = new ArrayList<FolderListener>();
43a9cf38f533d1e86269868f1e6a806ccffd4a78fcAdam Cohen
44c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka    FolderInfo() {
45df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen        itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER;
46ed13187a745866483139e2878037e1f8427ce567Kenny Guy        user = UserHandleCompat.myUserHandle();
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
83ed13187a745866483139e2878037e1f8427ce567Kenny Guy    void onAddToDatabase(Context context, ContentValues values) {
84ed13187a745866483139e2878037e1f8427ce567Kenny Guy        super.onAddToDatabase(context, 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    }
11664359a53dc827797917a8d9a0697a91996789801Winson Chung
11764359a53dc827797917a8d9a0697a91996789801Winson Chung    @Override
11864359a53dc827797917a8d9a0697a91996789801Winson Chung    public String toString() {
11964359a53dc827797917a8d9a0697a91996789801Winson Chung        return "FolderInfo(id=" + this.id + " type=" + this.itemType
12064359a53dc827797917a8d9a0697a91996789801Winson Chung                + " container=" + this.container + " screen=" + screenId
12164359a53dc827797917a8d9a0697a91996789801Winson Chung                + " cellX=" + cellX + " cellY=" + cellY + " spanX=" + spanX
122be3e410b7a62fa64ffda825b824862eb9d0c98c5Sameer Padala                + " spanY=" + spanY + " dropPos=" + Arrays.toString(dropPos) + ")";
12364359a53dc827797917a8d9a0697a91996789801Winson Chung    }
12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
125