/* * 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; } }