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