DefaultAccountPreference.java revision ee3d3a503553de2699285d98bc6fe7d34699a8b0
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 1769c182afb0e6d82a341a28b4317aa703af768906Gary Maipackage com.android.contacts.preference; 1820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 1920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.app.AlertDialog; 2020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.content.Context; 21fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Maiimport android.content.DialogInterface; 22fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerottimport android.preference.DialogPreference; 2320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wangimport android.util.AttributeSet; 246d29c04a52500466bb06138d63220b28cd8df40dyaoluimport android.view.View; 2520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 2669c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.AccountTypeManager; 27ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerottimport com.android.contacts.model.account.AccountInfo; 2869c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountWithDataSet; 2969c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.util.AccountsListAdapter; 3020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 31ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerottimport java.util.List; 32ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott 33fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerottpublic class DefaultAccountPreference extends DialogPreference { 3420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private ContactsPreferences mPreferences; 35fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai private AccountsListAdapter mListAdapter; 36949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott private AccountTypeManager mAccountTypeManager; 37ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott private List<AccountInfo> mAccounts; 38fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott private int mChosenIndex = -1; 3920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 4020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public DefaultAccountPreference(Context context) { 4120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super(context); 4220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang prepare(); 4320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 4420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 4520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public DefaultAccountPreference(Context context, AttributeSet attrs) { 4620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super(context, attrs); 4720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang prepare(); 4820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 4920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 50ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott public void setAccounts(List<AccountInfo> accounts) { 51ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mAccounts = accounts; 52ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott if (mListAdapter != null) { 53ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mListAdapter.setAccounts(accounts, null); 54ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott } 55ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott } 56ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott 576d29c04a52500466bb06138d63220b28cd8df40dyaolu @Override 586d29c04a52500466bb06138d63220b28cd8df40dyaolu protected View onCreateDialogView() { 596d29c04a52500466bb06138d63220b28cd8df40dyaolu prepare(); 606d29c04a52500466bb06138d63220b28cd8df40dyaolu return super.onCreateDialogView(); 616d29c04a52500466bb06138d63220b28cd8df40dyaolu } 626d29c04a52500466bb06138d63220b28cd8df40dyaolu 6320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private void prepare() { 6420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang mPreferences = new ContactsPreferences(getContext()); 65ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mListAdapter = new AccountsListAdapter(getContext()); 66ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott if (mAccounts != null) { 67ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mListAdapter.setAccounts(mAccounts, null); 68ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott } 69949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott mAccountTypeManager = AccountTypeManager.getInstance(getContext()); 7020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 7120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 7220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 7320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected boolean shouldPersist() { 7420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang return false; // This preference takes care of its own storage 7520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 7620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 7720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 7820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public CharSequence getSummary() { 79fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott final AccountWithDataSet defaultAccount = mPreferences.getDefaultAccount(); 80949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott if (defaultAccount == null || 81a181ca6021333cbb96ff9a6abeec9e64ea19c7f9Marcus Hagerott !mAccountTypeManager.exists(defaultAccount)) { 82949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott return null; 83949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott } else { 84a181ca6021333cbb96ff9a6abeec9e64ea19c7f9Marcus Hagerott return mAccountTypeManager.getAccountInfoForAccount(defaultAccount).getNameLabel(); 85949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott } 8620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 8720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 8820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 8920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 9020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super.onPrepareDialogBuilder(builder); 91fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott // UX recommendation is not to show buttons on such lists. 9220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang builder.setNegativeButton(null, null); 93fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott builder.setPositiveButton(null, null); 94fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai builder.setAdapter(mListAdapter, new DialogInterface.OnClickListener() { 95fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai @Override 96fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai public void onClick(DialogInterface dialog, int which) { 97fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott mChosenIndex = which; 98fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai } 99fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai }); 100fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai } 101fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai 102fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai @Override 103fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai protected void onDialogClosed(boolean positiveResult) { 104fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott final AccountWithDataSet currentDefault = mPreferences.getDefaultAccount(); 105fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott 106949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott if (mChosenIndex != -1) { 107fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott final AccountWithDataSet chosenAccount = mListAdapter.getItem(mChosenIndex); 108fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott if (!chosenAccount.equals(currentDefault)) { 109fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott mPreferences.setDefaultAccount(chosenAccount); 110fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott notifyChanged(); 111fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai } 112949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott } // else the user dismissed this dialog so leave the preference unchanged. 11320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 11420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang} 115