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: sort-by. 30c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov */ 31c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovpublic final class SortOrderPreference extends ListPreference { 32c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov 33c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov private ContactsPreferences mPreferences; 34c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov private Context mContext; 35c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov 36c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov public SortOrderPreference(Context context) { 37c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov super(context); 38c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov prepare(); 39c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov } 40c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov 41c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov public SortOrderPreference(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_sort_by_given_name), 51c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov mContext.getString(R.string.display_options_sort_by_family_name), 52c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov }); 53c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov setEntryValues(new String[]{ 54c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov String.valueOf(ContactsContract.Preferences.SORT_ORDER_PRIMARY), 55c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov String.valueOf(ContactsContract.Preferences.SORT_ORDER_ALTERNATIVE), 56c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov }); 57c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov setValue(String.valueOf(mPreferences.getSortOrder())); 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() { 67c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov switch (mPreferences.getSortOrder()) { 68c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov case ContactsContract.Preferences.SORT_ORDER_PRIMARY: 69c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov return mContext.getString(R.string.display_options_sort_by_given_name); 70c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov case ContactsContract.Preferences.SORT_ORDER_ALTERNATIVE: 71c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov return mContext.getString(R.string.display_options_sort_by_family_name); 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); 79c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov if (newValue != mPreferences.getSortOrder()) { 80c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov mPreferences.setSortOrder(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