DefaultAccountPreference.java revision 6d29c04a52500466bb06138d63220b28cd8df40d
120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang/* 220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * Copyright (C) 2015 The Android Open Source Project 320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * 420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * Licensed under the Apache License, Version 2.0 (the "License"); 520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * you may not use this file except in compliance with the License. 620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * You may obtain a copy of the License at 720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * 820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * http://www.apache.org/licenses/LICENSE-2.0 920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * 1020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * Unless required by applicable law or agreed to in writing, software 1120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * distributed under the License is distributed on an "AS IS" BASIS, 1220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * See the License for the specific language governing permissions and 1420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang * limitations under the License 1520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang */ 1620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 1720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangpackage com.android.contacts.common.preference; 1820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 1920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.app.AlertDialog; 2020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.content.Context; 2120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.preference.ListPreference; 2220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.util.AttributeSet; 236d29c04a52500466bb06138d63220b28cd8df40dyaoluimport android.view.View; 2420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 2520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport com.android.contacts.common.model.AccountTypeManager; 2620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport com.android.contacts.common.model.account.AccountType; 2720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport com.android.contacts.common.model.account.AccountTypeWithDataSet; 2820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport com.android.contacts.common.model.account.AccountWithDataSet; 2920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 3020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport java.util.HashMap; 3120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport java.util.List; 3220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport java.util.Map; 3320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport java.util.Set; 3420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 3520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangpublic class DefaultAccountPreference extends ListPreference { 3620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private ContactsPreferences mPreferences; 3720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private Map<String, AccountWithDataSet> mAccountMap; 3820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 3920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public DefaultAccountPreference(Context context) { 4020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super(context); 4120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang prepare(); 4220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 4320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 4420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public DefaultAccountPreference(Context context, AttributeSet attrs) { 4520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super(context, attrs); 4620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang prepare(); 4720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 4820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 496d29c04a52500466bb06138d63220b28cd8df40dyaolu @Override 506d29c04a52500466bb06138d63220b28cd8df40dyaolu protected View onCreateDialogView() { 516d29c04a52500466bb06138d63220b28cd8df40dyaolu prepare(); 526d29c04a52500466bb06138d63220b28cd8df40dyaolu return super.onCreateDialogView(); 536d29c04a52500466bb06138d63220b28cd8df40dyaolu } 546d29c04a52500466bb06138d63220b28cd8df40dyaolu 5520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private void prepare() { 5620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang mPreferences = new ContactsPreferences(getContext()); 5720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang mAccountMap = new HashMap<>(); 5820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext()); 5920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(true); 6020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang for (AccountWithDataSet account : accounts) { 6120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang mAccountMap.put(account.name, account); 6220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 6320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang final Set<String> accountNames = mAccountMap.keySet(); 6420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang final String[] accountNamesArray = accountNames.toArray(new String[accountNames.size()]); 6520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang setEntries(accountNamesArray); 6620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang setEntryValues(accountNamesArray); 6720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang final String defaultAccount = String.valueOf(mPreferences.getDefaultAccount()); 68c0e44e15ca44b9e5a01db695635b8f5c4af3945dTingting Wang if (accounts.size() == 1) { 69c0e44e15ca44b9e5a01db695635b8f5c4af3945dTingting Wang setValue(accounts.get(0).name); 70c0e44e15ca44b9e5a01db695635b8f5c4af3945dTingting Wang } else if (accountNames.contains(defaultAccount)) { 71c0e44e15ca44b9e5a01db695635b8f5c4af3945dTingting Wang setValue(defaultAccount); 7220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } else { 7320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang setValue(null); 7420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 7520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 7620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 7720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 7820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected boolean shouldPersist() { 7920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang return false; // This preference takes care of its own storage 8020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 8120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 8220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 8320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public CharSequence getSummary() { 8420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang return mPreferences.getDefaultAccount(); 8520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 8620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 8720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 8820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected boolean persistString(String value) { 8920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang if (value == null && mPreferences.getDefaultAccount() == null) { 9020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang return true; 9120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 9220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang if (value == null || mPreferences.getDefaultAccount() == null 9320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang || !value.equals(mPreferences.getDefaultAccount())) { 9420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang mPreferences.setDefaultAccount(mAccountMap.get(value)); 9520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang notifyChanged(); 9620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 9720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang return true; 9820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 9920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 10020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 10120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang // UX recommendation is not to show cancel button on such lists. 10220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 10320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super.onPrepareDialogBuilder(builder); 10420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang builder.setNegativeButton(null, null); 10520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 10620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang} 107