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