1c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov/*
2c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
3c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov *
4c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * you may not use this file except in compliance with the License.
6c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * You may obtain a copy of the License at
7c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov *
8c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov *
10c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * See the License for the specific language governing permissions and
14c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * limitations under the License.
15c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov */
16c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
17c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovpackage com.android.contacts.preference;
18c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
1923effa9798361d38dcdca668309cbb4c5b09b037Josh Gargusimport android.app.AlertDialog.Builder;
20c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport android.content.Context;
21c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport android.preference.ListPreference;
22c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport android.provider.ContactsContract;
23c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport android.util.AttributeSet;
24c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R;
26a0233a048858f1593ea4924e9c5036f39aedbcddChiao Chengimport com.android.contacts.common.preference.ContactsPreferences;
27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
28c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov/**
29c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov * Custom preference: view-name-as (first name first or last name first).
30c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov */
31c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovpublic final class DisplayOrderPreference extends ListPreference {
32c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
33c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    private ContactsPreferences mPreferences;
34c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    private Context mContext;
35c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
36c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    public DisplayOrderPreference(Context context) {
37c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        super(context);
38c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        prepare();
39c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    }
40c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
41c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    public DisplayOrderPreference(Context context, AttributeSet attrs) {
42c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        super(context, attrs);
43c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        prepare();
44c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    }
45c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
46c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    private void prepare() {
47c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        mContext = getContext();
48c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        mPreferences = new ContactsPreferences(mContext);
49c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        setEntries(new String[]{
50c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                mContext.getString(R.string.display_options_view_given_name_first),
51c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                mContext.getString(R.string.display_options_view_family_name_first),
52c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        });
53c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        setEntryValues(new String[]{
54c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                String.valueOf(ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY),
55c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                String.valueOf(ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE),
56c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        });
57c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        setValue(String.valueOf(mPreferences.getDisplayOrder()));
58c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    }
59c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
60c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    @Override
61c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    protected boolean shouldPersist() {
62c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        return false;   // This preference takes care of its own storage
63c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    }
64c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
65c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    @Override
66c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    public CharSequence getSummary() {
67bc1216eee75576cd03dd58865a333da784b339d2Dmitri Plotnikov        switch (mPreferences.getDisplayOrder()) {
68c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov            case ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY:
69c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                return mContext.getString(R.string.display_options_view_given_name_first);
70c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov            case ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE:
71c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                return mContext.getString(R.string.display_options_view_family_name_first);
72c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        }
73c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        return null;
74c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    }
75c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov
76c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    @Override
77c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    protected boolean persistString(String value) {
78c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        int newValue = Integer.parseInt(value);
79bc1216eee75576cd03dd58865a333da784b339d2Dmitri Plotnikov        if (newValue != mPreferences.getDisplayOrder()) {
80c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov            mPreferences.setDisplayOrder(newValue);
81c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov            notifyChanged();
82c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        }
83c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov        return true;
84c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov    }
8523effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus
8623effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus    @Override
8723effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus    // UX recommendation is not to show cancel button on such lists.
8823effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus    protected void onPrepareDialogBuilder(Builder builder) {
8923effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus        super.onPrepareDialogBuilder(builder);
9023effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus        builder.setNegativeButton(null, null);
9123effa9798361d38dcdca668309cbb4c5b09b037Josh Gargus    }
92c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov}
93