DashboardTile.java revision 63bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51b
163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio/*
263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * Copyright (C) 2014 The Android Open Source Project
363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio *
463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License");
563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * you may not use this file except in compliance with the License.
663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * You may obtain a copy of the License at
763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio *
863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio *      http://www.apache.org/licenses/LICENSE-2.0
963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio *
1063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * Unless required by applicable law or agreed to in writing, software
1163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS,
1263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * See the License for the specific language governing permissions and
1463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * limitations under the License.
1563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio */
1663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
1763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Megliopackage com.android.settings.dashboard;
1863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
1963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglioimport android.content.Intent;
2063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglioimport android.content.res.Resources;
2163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglioimport android.os.Bundle;
2263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglioimport android.os.Parcel;
2363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglioimport android.os.Parcelable;
2463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglioimport android.text.TextUtils;
2563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
2663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio/**
2763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio * Description of a single dashboard tile that the user can select.
2863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio */
2963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Megliopublic class DashboardTile implements Parcelable {
3063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
3163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Default value for {@link com.android.settings.dashboard.DashboardTile#id DashboardTile.id}
3263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * indicating that no identifier value is set.  All other values (including those below -1)
3363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * are valid.
3463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
3563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public static final long TILE_ID_UNDEFINED = -1;
3663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
3763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
3863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Identifier for this tile, to correlate with a new list when
3963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * it is updated.  The default value is
4063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * {@link com.android.settings.dashboard.DashboardTile#TILE_ID_UNDEFINED}, meaning no id.
4163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_id
4263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
4363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public long id = TILE_ID_UNDEFINED;
4463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
4563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
4663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Resource ID of title of the tile that is shown to the user.
4763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_title
4863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
4963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public int titleRes;
5063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
5163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
5263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Title of the tile that is shown to the user.
5363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_title
5463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
5563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public CharSequence title;
5663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
5763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
5863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Resource ID of optional summary describing what this tile controls.
5963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_summary
6063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
6163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public int summaryRes;
6263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
6363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
6463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Optional summary describing what this tile controls.
6563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_summary
6663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
6763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public CharSequence summary;
6863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
6963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
7063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Optional icon resource to show for this tile.
7163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_icon
7263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
7363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public int iconRes;
7463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
7563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
7663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Full class name of the fragment to display when this tile is
7763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * selected.
7863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * @attr ref android.R.styleable#PreferenceHeader_fragment
7963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
8063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public String fragment;
8163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
8263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
8363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Optional arguments to supply to the fragment when it is
8463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * instantiated.
8563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
8663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public Bundle fragmentArguments;
8763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
8863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
8963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Intent to launch when the preference is selected.
9063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
9163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public Intent intent;
9263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
9363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
9463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Optional additional data for use by subclasses of the activity
9563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
9663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public Bundle extras;
9763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
9863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public DashboardTile() {
9963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        // Empty
10063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
10163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
10263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
10363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Return the currently set title.  If {@link #titleRes} is set,
10463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * this resource is loaded from <var>res</var> and returned.  Otherwise
10563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * {@link #title} is returned.
10663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
10763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public CharSequence getTitle(Resources res) {
10863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        if (titleRes != 0) {
10963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            return res.getText(titleRes);
11063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        }
11163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        return title;
11263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
11363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
11463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    /**
11563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * Return the currently set summary.  If {@link #summaryRes} is set,
11663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * this resource is loaded from <var>res</var> and returned.  Otherwise
11763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     * {@link #summary} is returned.
11863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio     */
11963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public CharSequence getSummary(Resources res) {
12063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        if (summaryRes != 0) {
12163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            return res.getText(summaryRes);
12263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        }
12363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        return summary;
12463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
12563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
12663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    @Override
12763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public int describeContents() {
12863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        return 0;
12963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
13063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
13163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    @Override
13263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public void writeToParcel(Parcel dest, int flags) {
13363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeLong(id);
13463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeInt(titleRes);
13563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        TextUtils.writeToParcel(title, dest, flags);
13663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeInt(summaryRes);
13763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        TextUtils.writeToParcel(summary, dest, flags);
13863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeInt(iconRes);
13963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeString(fragment);
14063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeBundle(fragmentArguments);
14163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        if (intent != null) {
14263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            dest.writeInt(1);
14363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            intent.writeToParcel(dest, flags);
14463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        } else {
14563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            dest.writeInt(0);
14663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        }
14763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        dest.writeBundle(extras);
14863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
14963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
15063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public void readFromParcel(Parcel in) {
15163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        id = in.readLong();
15263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        titleRes = in.readInt();
15363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
15463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        summaryRes = in.readInt();
15563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        summary = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
15663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        iconRes = in.readInt();
15763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        fragment = in.readString();
15863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        fragmentArguments = in.readBundle();
15963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        if (in.readInt() != 0) {
16063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            intent = Intent.CREATOR.createFromParcel(in);
16163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        }
16263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        extras = in.readBundle();
16363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
16463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
16563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    DashboardTile(Parcel in) {
16663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        readFromParcel(in);
16763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    }
16863bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio
16963bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    public static final Creator<DashboardTile> CREATOR = new Creator<DashboardTile>() {
17063bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        public DashboardTile createFromParcel(Parcel source) {
17163bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            return new DashboardTile(source);
17263bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        }
17363bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        public DashboardTile[] newArray(int size) {
17463bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio            return new DashboardTile[size];
17563bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio        }
17663bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio    };
17763bbb8e4fef5d0d0a5fa9c7656daa7ea160fd51bFabrice Di Meglio}
178