297 lines
8.6 KiB
Java
297 lines
8.6 KiB
Java
/**
|
|
* Copyright (c) 2015, The CyanogenMod Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package cyanogenmod.app;
|
|
|
|
import android.app.PendingIntent;
|
|
import android.content.Context;
|
|
import android.net.Uri;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import android.text.TextUtils;
|
|
|
|
/**
|
|
* A class that represents a quick settings tile
|
|
*
|
|
* <p>The {@link cyanogenmod.app.CustomTile.Builder} has been added to make it
|
|
* easier to construct CustomTiles.</p>
|
|
*/
|
|
public class CustomTile implements Parcelable {
|
|
|
|
/**
|
|
* An optional intent to execute when the custom tile entry is clicked. If
|
|
* this is an activity, it must include the
|
|
* {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag, which requires
|
|
* that you take care of task management
|
|
**/
|
|
public PendingIntent onClick;
|
|
|
|
/**
|
|
* An optional Uri to be parsed and broadcast on tile click
|
|
**/
|
|
public Uri onClickUri;
|
|
|
|
/**
|
|
* A label specific to the quick settings tile to be created
|
|
*/
|
|
public String label;
|
|
|
|
/**
|
|
* A content description for the custom tile state
|
|
*/
|
|
public String contentDescription;
|
|
|
|
/**
|
|
* An icon to represent the custom tile
|
|
*/
|
|
public int icon;
|
|
|
|
/**
|
|
* Unflatten the CustomTile from a parcel.
|
|
*/
|
|
public CustomTile(Parcel parcel)
|
|
{
|
|
if (parcel.readInt() != 0) {
|
|
this.onClick = PendingIntent.CREATOR.createFromParcel(parcel);
|
|
}
|
|
if (parcel.readInt() != 0) {
|
|
this.onClickUri = Uri.CREATOR.createFromParcel(parcel);
|
|
}
|
|
if (parcel.readInt() != 0) {
|
|
this.label = parcel.readString();
|
|
}
|
|
|
|
if (parcel.readInt() != 0) {
|
|
this.contentDescription = parcel.readString();
|
|
}
|
|
this.icon = parcel.readInt();
|
|
}
|
|
|
|
/**
|
|
* Constructs a CustomTile object with default values.
|
|
* You might want to consider using {@link cyanogenmod.app.CustomTile.Builder} instead.
|
|
*/
|
|
public CustomTile()
|
|
{
|
|
// Empty constructor
|
|
}
|
|
|
|
@Override
|
|
public CustomTile clone() {
|
|
CustomTile that = new CustomTile();
|
|
cloneInto(that);
|
|
return that;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
StringBuilder b = new StringBuilder();
|
|
String NEW_LINE = System.getProperty("line.separator");
|
|
if (onClickUri != null) {
|
|
b.append("onClickUri=" + onClickUri.toString() + NEW_LINE);
|
|
}
|
|
if (onClick != null) {
|
|
b.append("onClick=" + onClick.toString() + NEW_LINE);
|
|
}
|
|
if (!TextUtils.isEmpty(label)) {
|
|
b.append("label=" + label + NEW_LINE);
|
|
}
|
|
if (!TextUtils.isEmpty(contentDescription)) {
|
|
b.append("contentDescription=" + contentDescription + NEW_LINE);
|
|
}
|
|
b.append("icon=" + icon + NEW_LINE);
|
|
return b.toString();
|
|
}
|
|
|
|
/**
|
|
* Copy all of this into that
|
|
* @hide
|
|
*/
|
|
public void cloneInto(CustomTile that) {
|
|
that.onClick = this.onClick;
|
|
that.onClickUri = this.onClickUri;
|
|
that.label = this.label;
|
|
that.contentDescription = this.contentDescription;
|
|
that.icon = this.icon;
|
|
}
|
|
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel out, int flags) {
|
|
if (onClick != null) {
|
|
out.writeInt(1);
|
|
onClick.writeToParcel(out, 0);
|
|
} else {
|
|
out.writeInt(0);
|
|
}
|
|
if (onClickUri != null) {
|
|
out.writeInt(1);
|
|
onClickUri.writeToParcel(out, 0);
|
|
} else {
|
|
out.writeInt(0);
|
|
}
|
|
if (label != null) {
|
|
out.writeInt(1);
|
|
out.writeString(label);
|
|
} else {
|
|
out.writeInt(0);
|
|
}
|
|
if (contentDescription != null) {
|
|
out.writeInt(1);
|
|
out.writeString(contentDescription);
|
|
} else {
|
|
out.writeInt(0);
|
|
}
|
|
out.writeInt(icon);
|
|
}
|
|
|
|
/**
|
|
* Parcelable.Creator that instantiates CustomTile objects
|
|
*/
|
|
public static final Creator<CustomTile> CREATOR =
|
|
new Creator<CustomTile>() {
|
|
public CustomTile createFromParcel(Parcel in) {
|
|
return new CustomTile(in);
|
|
}
|
|
|
|
@Override
|
|
public CustomTile[] newArray(int size) {
|
|
return new CustomTile[size];
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Builder class for {@link cyanogenmod.app.CustomTile} objects.
|
|
*
|
|
* Provides a convenient way to set the various fields of a {@link cyanogenmod.app.CustomTile}
|
|
*
|
|
* <p>Example:
|
|
*
|
|
* <pre class="prettyprint">
|
|
* CustomTile customTile = new CustomTile.Builder(mContext)
|
|
* .setLabel("custom label")
|
|
* .setContentDescription("custom description")
|
|
* .setOnClickIntent(pendingIntent)
|
|
* .setOnClickUri(Uri.parse("custom uri"))
|
|
* .setIcon(R.drawable.ic_launcher)
|
|
* .build();
|
|
* </pre>
|
|
*/
|
|
public static class Builder {
|
|
private PendingIntent mOnClick;
|
|
private Uri mOnClickUri;
|
|
private String mLabel;
|
|
private String mContentDescription;
|
|
private int mIcon;
|
|
private Context mContext;
|
|
|
|
/**
|
|
* Constructs a new Builder with the defaults:
|
|
*/
|
|
public Builder(Context context) {
|
|
mContext = context;
|
|
}
|
|
|
|
/**
|
|
* Set the label for the custom tile
|
|
* @param label a string to be used for the custom tile label
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setLabel(String label) {
|
|
mLabel = label;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Set the label for the custom tile
|
|
* @param id a string resource id to be used for the custom tile label
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setLabel(int id) {
|
|
mLabel = mContext.getString(id);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Set the content description for the custom tile
|
|
* @param contentDescription a string to explain content
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setContentDescription(String contentDescription) {
|
|
mContentDescription = contentDescription;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Set the content description for the custom tile
|
|
* @param id a string resource id to explain content
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setContentDescription(int id) {
|
|
mContentDescription = mContext.getString(id);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Set a {@link android.app.PendingIntent} to be fired on custom tile click
|
|
* @param intent
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setOnClickIntent(PendingIntent intent) {
|
|
mOnClick = intent;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Set a {@link android.net.Uri} to be broadcasted in an intent on custom tile click
|
|
* @param uri
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setOnClickUri(Uri uri) {
|
|
mOnClickUri = uri;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Set an icon for the custom tile to be presented to the user
|
|
* @param drawableId
|
|
* @return {@link cyanogenmod.app.CustomTile.Builder}
|
|
*/
|
|
public Builder setIcon(int drawableId) {
|
|
mIcon = drawableId;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Create a {@link cyanogenmod.app.CustomTile} object
|
|
* @return {@link cyanogenmod.app.CustomTile}
|
|
*/
|
|
public CustomTile build() {
|
|
CustomTile tile = new CustomTile();
|
|
tile.onClick = mOnClick;
|
|
tile.onClickUri = mOnClickUri;
|
|
tile.label = mLabel;
|
|
tile.contentDescription = mContentDescription;
|
|
tile.icon = mIcon;
|
|
return tile;
|
|
}
|
|
}
|
|
}
|