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