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 26ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerottimport com.android.contacts.model.account.AccountInfo; 2769c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountWithDataSet; 2869c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.util.AccountsListAdapter; 2920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 30ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerottimport java.util.List; 31ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott 32fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerottpublic class DefaultAccountPreference extends DialogPreference { 3320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private ContactsPreferences mPreferences; 34fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai private AccountsListAdapter mListAdapter; 35ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott private List<AccountInfo> mAccounts; 36fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott private int mChosenIndex = -1; 3720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 3820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public DefaultAccountPreference(Context context) { 3920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super(context); 4020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang prepare(); 4120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 4220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 4320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public DefaultAccountPreference(Context context, AttributeSet attrs) { 4420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super(context, attrs); 4520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang prepare(); 4620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 4720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 48ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott public void setAccounts(List<AccountInfo> accounts) { 49ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mAccounts = accounts; 50ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott if (mListAdapter != null) { 51ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mListAdapter.setAccounts(accounts, null); 52614d81204436ca60e3b0a4c5cd0be92fb7e8213eMarcus Hagerott notifyChanged(); 53ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott } 54ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott } 55ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott 566d29c04a52500466bb06138d63220b28cd8df40dyaolu @Override 576d29c04a52500466bb06138d63220b28cd8df40dyaolu protected View onCreateDialogView() { 586d29c04a52500466bb06138d63220b28cd8df40dyaolu prepare(); 596d29c04a52500466bb06138d63220b28cd8df40dyaolu return super.onCreateDialogView(); 606d29c04a52500466bb06138d63220b28cd8df40dyaolu } 616d29c04a52500466bb06138d63220b28cd8df40dyaolu 6220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang private void prepare() { 6320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang mPreferences = new ContactsPreferences(getContext()); 64ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mListAdapter = new AccountsListAdapter(getContext()); 65ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott if (mAccounts != null) { 66ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott mListAdapter.setAccounts(mAccounts, null); 67ee3d3a503553de2699285d98bc6fe7d34699a8b0Marcus Hagerott } 6820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 6920c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 7020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 7120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected boolean shouldPersist() { 7220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang return false; // This preference takes care of its own storage 7320c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 7420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 7520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 7620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang public CharSequence getSummary() { 77fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott final AccountWithDataSet defaultAccount = mPreferences.getDefaultAccount(); 78614d81204436ca60e3b0a4c5cd0be92fb7e8213eMarcus Hagerott if (defaultAccount == null || mAccounts == null || 79614d81204436ca60e3b0a4c5cd0be92fb7e8213eMarcus Hagerott !AccountInfo.contains(mAccounts, defaultAccount)) { 80949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott return null; 81949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott } else { 82614d81204436ca60e3b0a4c5cd0be92fb7e8213eMarcus Hagerott return AccountInfo.getAccount(mAccounts, defaultAccount).getNameLabel(); 83949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott } 8420c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 8520c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang 8620c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang @Override 8720c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 8820c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang super.onPrepareDialogBuilder(builder); 89fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott // UX recommendation is not to show buttons on such lists. 9020c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang builder.setNegativeButton(null, null); 91fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott builder.setPositiveButton(null, null); 92fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai builder.setAdapter(mListAdapter, new DialogInterface.OnClickListener() { 93fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai @Override 94fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai public void onClick(DialogInterface dialog, int which) { 95fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott mChosenIndex = which; 96fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai } 97fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai }); 98fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai } 99fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai 100fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai @Override 101fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai protected void onDialogClosed(boolean positiveResult) { 102fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott final AccountWithDataSet currentDefault = mPreferences.getDefaultAccount(); 103fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott 104949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott if (mChosenIndex != -1) { 105fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott final AccountWithDataSet chosenAccount = mListAdapter.getItem(mChosenIndex); 106fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott if (!chosenAccount.equals(currentDefault)) { 107fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott mPreferences.setDefaultAccount(chosenAccount); 108fac695a36b227f5591eac064ded8e8dad3398400Marcus Hagerott notifyChanged(); 109fd866c064feab57fcd13f4fd7b99e3bc1cc013ffGary Mai } 110949d4e88400761dac02992978f6b79997b5f0055Marcus Hagerott } // else the user dismissed this dialog so leave the preference unchanged. 11120c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang } 11220c6ec57df86ac67a6c555caac25993502fe66aaTingting Wang} 113