blob: 54e03e0193f17ea60985c30f564eaa07a71b0859 [file] [log] [blame]
/*
* Copyright 2012 The Android Open Source 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 com.android.notificationstudio.model;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.android.notificationstudio.R;
public enum EditableItem implements EditableItemConstants {
PRESET(R.string.preset, TYPE_DROP_DOWN, CATEGORY_MAIN,
PRESET_BASIC, PRESET_EMAIL, PRESET_PHOTO, PRESET_CUSTOM),
SMALL_ICON(R.string.small_icon, TYPE_RESOURCE_ID, CATEGORY_MAIN,
SMALL_ICONS),
CONTENT_TITLE(R.string.content_title, TYPE_TEXT, CATEGORY_MAIN),
CONTENT_TEXT(R.string.content_text, TYPE_TEXT, CATEGORY_MAIN),
SUB_TEXT(R.string.sub_text, TYPE_TEXT, CATEGORY_MAIN),
LARGE_ICON(R.string.large_icon, TYPE_BITMAP, CATEGORY_MAIN),
CONTENT_INFO(R.string.content_info, TYPE_TEXT, CATEGORY_MAIN),
NUMBER(R.string.number, TYPE_INT, CATEGORY_MAIN),
WHEN(R.string.when, TYPE_DATETIME, CATEGORY_MAIN),
PROGRESS(R.string.progress, TYPE_BOOLEAN, CATEGORY_MAIN),
USES_CHRON(R.string.uses_chron, TYPE_BOOLEAN, CATEGORY_MAIN),
STYLE(R.string.style, TYPE_DROP_DOWN, CATEGORY_STYLE,
STYLE_NONE, STYLE_BIG_PICTURE, STYLE_BIG_TEXT, STYLE_INBOX),
PICTURE(R.string.picture, TYPE_BITMAP, CATEGORY_STYLE),
BIG_TEXT(R.string.big_text, TYPE_TEXT, CATEGORY_STYLE),
LINES(R.string.lines, TYPE_TEXT_LINES, CATEGORY_STYLE),
BIG_CONTENT_TITLE(R.string.big_content_title, TYPE_TEXT, CATEGORY_STYLE),
SUMMARY_TEXT(R.string.summary_text, TYPE_TEXT, CATEGORY_STYLE),
ACTION1_ICON(R.string.icon, TYPE_RESOURCE_ID, CATEGORY_ACTION1,
ACTION_ICONS),
ACTION1_TEXT(R.string.text, TYPE_TEXT, CATEGORY_ACTION1),
ACTION2_ICON(R.string.icon, TYPE_RESOURCE_ID, CATEGORY_ACTION2,
ACTION_ICONS),
ACTION2_TEXT(R.string.text, TYPE_TEXT, CATEGORY_ACTION2),
ACTION3_ICON(R.string.icon, TYPE_RESOURCE_ID, CATEGORY_ACTION3,
ACTION_ICONS),
ACTION3_TEXT(R.string.text, TYPE_TEXT, CATEGORY_ACTION3),
;
private final int mCaptionId;
private final int mType;
private final int mCategoryId;
private Object[] mAvailableValues;
private Object mValue;
private boolean mVisible = true;
private Runnable mVisibilityListener;
private EditableItem(int captionId, int type, int categoryId, Object... availableValues) {
mCaptionId = captionId;
mType = type;
mCategoryId = categoryId;
mAvailableValues = availableValues;
}
// init
public static void initIfNecessary(Context context) {
if (PRESET.hasValue())
return;
loadBitmaps(context, LARGE_ICON, LARGE_ICONS);
loadBitmaps(context, PICTURE, PICTURES);
PRESET.setValue(PRESET_BASIC);
}
private static void loadBitmaps(Context context, EditableItem item, int[] bitmapResIds) {
Object[] largeIconBitmaps = new Object[bitmapResIds.length];
Resources res = context.getResources();
for (int i = 0; i < bitmapResIds.length; i++)
largeIconBitmaps[i] = BitmapFactory.decodeResource(res, bitmapResIds[i]);
item.setAvailableValues(largeIconBitmaps);
}
// visibility
public boolean isVisible() {
return mVisible;
}
public void setVisible(boolean visible) {
if (mVisible == visible)
return;
mVisible = visible;
if (mVisibilityListener != null)
mVisibilityListener.run();
}
public void setVisibilityListener(Runnable listener) {
mVisibilityListener = listener;
}
// value
public boolean hasValue() {
return mValue != null;
}
public void setValue(Object value) {
if (mValue == value)
return;
mValue = value;
if (this == STYLE)
applyStyle();
if (this == PRESET && !PRESET_CUSTOM.equals(value))
applyPreset();
}
private void applyStyle() {
PICTURE.setVisible(STYLE_BIG_PICTURE.equals(mValue));
BIG_TEXT.setVisible(STYLE_BIG_TEXT.equals(mValue));
LINES.setVisible(STYLE_INBOX.equals(mValue));
BIG_CONTENT_TITLE.setVisible(!STYLE_NONE.equals(mValue));
SUMMARY_TEXT.setVisible(!STYLE_NONE.equals(mValue));
}
private void applyPreset() {
for (EditableItem item : values())
if (item != PRESET)
item.setValue(null);
STYLE.setValue(STYLE_NONE);
if (PRESET_BASIC.equals(mValue)) {
SMALL_ICON.setValue(android.R.drawable.stat_notify_chat);
CONTENT_TITLE.setValue("Basic title");
CONTENT_TEXT.setValue("Basic text");
} else if (PRESET_EMAIL.equals(mValue)) {
SMALL_ICON.setValue(R.drawable.ic_notification_multiple_mail_holo_dark);
LARGE_ICON.setValue(LARGE_ICON.getAvailableValues()[3]);
CONTENT_TITLE.setValue("3 new messages");
CONTENT_TEXT.setValue("Alice, Bob, Chuck");
STYLE.setValue(STYLE_INBOX);
LINES.setValue("Alice: Re: Something\n" +
"Bob: Did you get the memo?\n" +
"Chuck: Limited time offer!");
} else if (PRESET_PHOTO.equals(mValue)) {
SMALL_ICON.setValue(android.R.drawable.ic_menu_camera);
LARGE_ICON.setValue(LARGE_ICON.getAvailableValues()[2]);
CONTENT_TITLE.setValue("Sunset on the rocks");
CONTENT_TEXT.setValue("800x534 | 405.1K");
SUMMARY_TEXT.setValue(CONTENT_TEXT.getValueString());
STYLE.setValue(STYLE_BIG_PICTURE);
PICTURE.setValue(PICTURE.getAvailableValues()[0]);
ACTION1_ICON.setValue(android.R.drawable.ic_menu_share);
ACTION1_TEXT.setValue("Share");
}
}
public Object getValue() {
return mValue;
}
public String getValueString() {
return (String) mValue;
}
public int getValueInt() {
return (Integer) mValue;
}
public long getValueLong() {
return (Long) mValue;
}
public boolean getValueBool() {
return (Boolean) mValue;
}
public Bitmap getValueBitmap() {
return (Bitmap) mValue;
}
// available values
public Object[] getAvailableValues() {
return mAvailableValues;
}
public Integer[] getAvailableValuesInteger() {
Integer[] integers = new Integer[mAvailableValues.length];
System.arraycopy(mAvailableValues, 0, integers, 0, integers.length);
return integers;
}
public <T> void setAvailableValues(T... values) {
mAvailableValues = values;
}
public String getCaption(Context context) {
return context.getString(mCaptionId);
}
public String getCategory(Context context) {
return context.getString(mCategoryId);
}
public int getType() {
return mType;
}
}