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