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