Tile.java revision e79790b26803ee338b2fdc3404344094d7f94476
1744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk/**
2744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * Copyright (C) 2015 The Android Open Source Project
3744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk *
4744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * Licensed under the Apache License, Version 2.0 (the "License");
5744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * you may not use this file except in compliance with the License.
6744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * You may obtain a copy of the License at
7744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk *
8744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
9744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk *
10744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * Unless required by applicable law or agreed to in writing, software
11744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * distributed under the License is distributed on an "AS IS" BASIS,
12744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * See the License for the specific language governing permissions and
14744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * limitations under the License.
15744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk */
16744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
17744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkpackage com.android.settingslib.drawer;
18744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
19744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.content.Intent;
20744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.graphics.drawable.Icon;
21744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.os.Bundle;
22744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.os.Parcel;
23744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.os.Parcelable;
24744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.os.UserHandle;
25744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport android.text.TextUtils;
26744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
27744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkimport java.util.ArrayList;
28744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
29744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk/**
30744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk * Description of a single dashboard tile that the user can select.
31744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk */
32744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monkpublic class DashboardTile implements Parcelable {
33744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
34744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
35744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Title of the tile that is shown to the user.
36744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * @attr ref android.R.styleable#PreferenceHeader_title
37744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
38744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public CharSequence title;
39744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
40744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
41744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Optional summary describing what this tile controls.
42744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * @attr ref android.R.styleable#PreferenceHeader_summary
43744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
44744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public CharSequence summary;
45744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
46744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
47744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Optional icon to show for this tile.
48744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * @attr ref android.R.styleable#PreferenceHeader_icon
49744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
50744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public Icon icon;
51744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
52744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
53744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Intent to launch when the preference is selected.
54744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
55744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public Intent intent;
56744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
57744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
58744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Optional list of user handles which the intent should be launched on.
59744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
60744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public ArrayList<UserHandle> userHandle = new ArrayList<>();
61744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
62744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
63744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Optional additional data for use by subclasses of the activity
64744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
65744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public Bundle extras;
66744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
67744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
68744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Category in which the tile should be placed.
69744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
70744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public String category;
71744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
72744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    /**
73744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     * Priority of the intent filter that created this tile, used for display ordering.
74744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk     */
75744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public int priority;
76744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
77e79790b26803ee338b2fdc3404344094d7f94476Jason Monk    /**
78e79790b26803ee338b2fdc3404344094d7f94476Jason Monk     * The metaData from the activity that defines this tile.
79e79790b26803ee338b2fdc3404344094d7f94476Jason Monk     */
80e79790b26803ee338b2fdc3404344094d7f94476Jason Monk    public Bundle metaData;
81e79790b26803ee338b2fdc3404344094d7f94476Jason Monk
82744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public DashboardTile() {
83744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        // Empty
84744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    }
85744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
86744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    @Override
87744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public int describeContents() {
88744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        return 0;
89744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    }
90744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
91744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    @Override
92744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public void writeToParcel(Parcel dest, int flags) {
93744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        TextUtils.writeToParcel(title, dest, flags);
94744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        TextUtils.writeToParcel(summary, dest, flags);
95744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        if (icon != null) {
96744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            dest.writeByte((byte) 1);
97744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            icon.writeToParcel(dest, flags);
98744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        } else {
99744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            dest.writeByte((byte) 0);
100744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
101744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        if (intent != null) {
102744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            dest.writeByte((byte) 1);
103744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            intent.writeToParcel(dest, flags);
104744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        } else {
105744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            dest.writeByte((byte) 0);
106744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
107744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        final int N = userHandle.size();
108744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        dest.writeInt(N);
109744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        for (int i = 0; i < N; i++) {
110744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            userHandle.get(i).writeToParcel(dest, flags);
111744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
112744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        dest.writeBundle(extras);
113744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        dest.writeString(category);
114744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        dest.writeInt(priority);
115e79790b26803ee338b2fdc3404344094d7f94476Jason Monk        dest.writeBundle(metaData);
116744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    }
117744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
118744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public void readFromParcel(Parcel in) {
119744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
120744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        summary = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
121744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        if (in.readByte() != 0) {
122744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            icon = Icon.CREATOR.createFromParcel(in);
123744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
124744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        if (in.readByte() != 0) {
125744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            intent = Intent.CREATOR.createFromParcel(in);
126744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
127744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        final int N = in.readInt();
128744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        for (int i = 0; i < N; i++) {
129744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            userHandle.add(UserHandle.CREATOR.createFromParcel(in));
130744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
131744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        extras = in.readBundle();
132744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        category = in.readString();
133744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        priority = in.readInt();
134e79790b26803ee338b2fdc3404344094d7f94476Jason Monk        metaData = in.readBundle();
135744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    }
136744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
137744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    DashboardTile(Parcel in) {
138744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        readFromParcel(in);
139744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    }
140744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk
141744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    public static final Creator<DashboardTile> CREATOR = new Creator<DashboardTile>() {
142744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        public DashboardTile createFromParcel(Parcel source) {
143744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            return new DashboardTile(source);
144744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
145744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        public DashboardTile[] newArray(int size) {
146744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk            return new DashboardTile[size];
147744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk        }
148744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk    };
149744b63632a0d41eabf60e95a7b61e235e43f6d07Jason Monk}
150