1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings.quicklaunch; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.settings.R; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.ColorStateList; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.TypedValue; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TextView; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Preference type for a shortcut in {@link QuickLaunchSettings}. 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class ShortcutPreference extends Preference implements Comparable<Preference> { 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static Object sStaticVarsLock = new Object(); 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // These static fields are used across all instances of ShortcutPreference. 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // There will be many ShortcutPreference instances (~36 for US). 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static String STRING_ASSIGN_APPLICATION; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static String STRING_NO_SHORTCUT; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static int sDimAlpha; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static ColorStateList sRegularTitleColor; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static ColorStateList sDimTitleColor; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static ColorStateList sRegularSummaryColor; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static ColorStateList sDimSummaryColor; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private char mShortcut; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean mHasBookmark; 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public ShortcutPreference(Context context, char shortcut) { 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super(context); 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project synchronized (sStaticVarsLock) { 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Init statics. This should only happen for the first ShortcutPreference created, 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // the rest will already have them initialized. 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (STRING_ASSIGN_APPLICATION == null) { 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project STRING_ASSIGN_APPLICATION = context.getString(R.string.quick_launch_assign_application); 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project STRING_NO_SHORTCUT = context.getString(R.string.quick_launch_no_shortcut); 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TypedValue outValue = new TypedValue(); 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, outValue, true); 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sDimAlpha = (int) (outValue.getFloat() * 255); 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShortcut = shortcut; 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project setWidgetLayoutResource(R.layout.preference_widget_shortcut); 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public char getShortcut() { 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return mShortcut; 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void setShortcut(char shortcut) { 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (shortcut != mShortcut) { 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShortcut = shortcut; 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project notifyChanged(); 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean hasBookmark() { 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return mHasBookmark; 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void setHasBookmark(boolean hasBookmark) { 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (hasBookmark != mHasBookmark) { 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mHasBookmark = hasBookmark; 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project notifyChanged(); 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public CharSequence getTitle() { 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return mHasBookmark ? super.getTitle() : STRING_ASSIGN_APPLICATION; 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public CharSequence getSummary() { 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return mHasBookmark ? super.getSummary() : STRING_NO_SHORTCUT; 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onBindView(View view) { 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onBindView(view); 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TextView shortcutView = (TextView) view.findViewById(R.id.shortcut); 107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (shortcutView != null) { 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project shortcutView.setText(String.valueOf(mShortcut)); 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TextView titleView = (TextView) view.findViewById(android.R.id.title); 112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project synchronized (sStaticVarsLock) { 114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (sRegularTitleColor == null) { 115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sRegularTitleColor = titleView.getTextColors(); 116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sDimTitleColor = sRegularTitleColor.withAlpha(sDimAlpha); 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ColorStateList color = mHasBookmark ? sRegularTitleColor : sDimTitleColor; 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (color != null) { 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project titleView.setTextColor(color); 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TextView summaryView = (TextView) view.findViewById(android.R.id.summary); 126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project synchronized (sStaticVarsLock) { 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (sRegularSummaryColor == null) { 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sRegularSummaryColor = summaryView.getTextColors(); 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project sDimSummaryColor = sRegularSummaryColor.withAlpha(sDimAlpha); 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project color = mHasBookmark ? sRegularSummaryColor : sDimSummaryColor; 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (color != null) { 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project summaryView.setTextColor(color); 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public int compareTo(Preference another) { 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (!(another instanceof ShortcutPreference)) return super.compareTo(another); 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Letters before digits 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project char other = ((ShortcutPreference) another).mShortcut; 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (Character.isDigit(mShortcut) && Character.isLetter(other)) return 1; 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project else if (Character.isDigit(other) && Character.isLetter(mShortcut)) return -1; 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project else return mShortcut - other; 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 152