/* * Copyright (C) 2014 AChep@xda <artemchep@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package com.achep.base.dashboard; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.content.res.TypedArray; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; import com.achep.acdisplay.R; /** * Description of a single dashboard tile that the user can select. */ public class DashboardTile implements Parcelable { /** * Default value for {@link com.achep.base.dashboard.DashboardTile#id DashboardTile.id} * indicating that no identifier value is set. All other values (including those below -1) * are valid. */ public static final int TILE_ID_UNDEFINED = -1; /** * Identifier for this tile, to correlate with a new list when * it is updated. The default value is * {@link #TILE_ID_UNDEFINED}, meaning no id. */ public long id = TILE_ID_UNDEFINED; /** * Resource ID of title of the tile that is shown to the user. */ public int titleRes; /** * Title of the tile that is shown to the user. */ public CharSequence title; /** * Resource ID of optional summary describing what this tile controls. */ public int summaryRes; /** * Optional summary describing what this tile controls. */ public CharSequence summary; /** * Optional icon resource to show for this tile. */ public final int iconRes; /** * Full class name of the fragment to display when this tile is * selected. */ public final String fragment; /** * Optional arguments to supply to the fragment when it is * instantiated. */ public Bundle fragmentArguments; /** * Intent to launch when the preference is selected. */ public Intent intent; /** * Optional additional data for use by subclasses of the activity */ public Bundle extras; public DashboardTile(Context context, AttributeSet attrs) { TypedArray sa = context.obtainStyledAttributes(attrs, R.styleable.DashboardTile); TypedValue tv; id = sa.getResourceId(R.styleable.DashboardTile_dashboard_id, TILE_ID_UNDEFINED); iconRes = sa.getResourceId(R.styleable.DashboardTile_dashboard_icon, 0); fragment = sa.getString(R.styleable.DashboardTile_dashboard_fragment); tv = sa.peekValue(R.styleable.DashboardTile_dashboard_title); if (tv != null && tv.type == TypedValue.TYPE_STRING) { if (tv.resourceId != 0) { titleRes = tv.resourceId; } else { title = tv.string; } } tv = sa.peekValue(R.styleable.DashboardTile_dashboard_summary); if (tv != null && tv.type == TypedValue.TYPE_STRING) { if (tv.resourceId != 0) { summaryRes = tv.resourceId; } else { summary = tv.string; } } sa.recycle(); } /** * Return the currently set title. If {@link #titleRes} is set, * this resource is loaded from <var>res</var> and returned. Otherwise * {@link #title} is returned. */ public CharSequence getTitle(Resources res) { return titleRes != 0 ? res.getText(titleRes) : title; } /** * Return the currently set summary. If {@link #summaryRes} is set, * this resource is loaded from <var>res</var> and returned. Otherwise * {@link #summary} is returned. */ public CharSequence getSummary(Resources res) { return summaryRes != 0 ? res.getText(summaryRes) : summary; } //-- PARCELABLE IMPLEMENTATION -------------------------------------------- public static final Creator<DashboardTile> CREATOR = new Creator<DashboardTile>() { public DashboardTile createFromParcel(Parcel source) { return new DashboardTile(source); } public DashboardTile[] newArray(int size) { return new DashboardTile[size]; } }; private DashboardTile(Parcel in) { id = in.readLong(); titleRes = in.readInt(); title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); summaryRes = in.readInt(); summary = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); iconRes = in.readInt(); fragment = in.readString(); fragmentArguments = in.readBundle(); if (in.readInt() != 0) { intent = Intent.CREATOR.createFromParcel(in); } extras = in.readBundle(); } /** * {@inheritDoc} */ @Override public int describeContents() { return 0; } /** * {@inheritDoc} */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(id); dest.writeInt(titleRes); TextUtils.writeToParcel(title, dest, flags); dest.writeInt(summaryRes); TextUtils.writeToParcel(summary, dest, flags); dest.writeInt(iconRes); dest.writeString(fragment); dest.writeBundle(fragmentArguments); if (intent != null) { dest.writeInt(1); intent.writeToParcel(dest, flags); } else { dest.writeInt(0); } dest.writeBundle(extras); } }