186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani/* 286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * Copyright (C) 2008 The Android Open Source Project 386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * 486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * you may not use this file except in compliance with the License. 686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * You may obtain a copy of the License at 786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * 886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * 1086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * Unless required by applicable law or agreed to in writing, software 1186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 1286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * See the License for the specific language governing permissions and 1486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani * limitations under the License. 1586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani */ 1686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 1786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasanipackage com.android.settings.accounts; 1886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 1986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.accounts.Account; 2086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.accounts.AccountManager; 2186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.accounts.OnAccountsUpdateListener; 2286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.app.Activity; 2386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.content.ContentResolver; 2486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.content.Intent; 2586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.graphics.drawable.Drawable; 2686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.os.Bundle; 2786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.preference.CheckBoxPreference; 2886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.preference.Preference; 2986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.preference.Preference.OnPreferenceChangeListener; 3086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.preference.PreferenceScreen; 3186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport android.util.Log; 3286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 3386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport com.android.settings.AccountPreference; 3486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport com.android.settings.DialogCreatable; 3586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport com.android.settings.R; 3686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 3786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasaniimport java.util.ArrayList; 3886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 3986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasanipublic class SyncSettings extends AccountPreferenceBase 4086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani implements OnAccountsUpdateListener, DialogCreatable { 4186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 4286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private static final String KEY_SYNC_SWITCH = "sync_switch"; 4386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 4486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private String[] mAuthorities; 4586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 4686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private SettingsDialogFragment mDialogFragment; 4786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private CheckBoxPreference mAutoSyncPreference; 4886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 4986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 5086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void onCreate(Bundle icicle) { 5186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani super.onCreate(icicle); 5286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 5386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani addPreferencesFromResource(R.xml.sync_settings); 5486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mAutoSyncPreference = 5586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_SYNC_SWITCH); 5686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mAutoSyncPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 5786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 5886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public boolean onPreferenceChange(Preference preference, Object newValue) { 5986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani ContentResolver.setMasterSyncAutomatically((Boolean) newValue); 6086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani return true; 6186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 6286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani }); 6386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 6486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani setHasOptionsMenu(true); 6586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 6686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 6786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 6886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void onStart() { 6986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani super.onStart(); 7086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani Activity activity = getActivity(); 7186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani AccountManager.get(activity).addOnAccountsUpdatedListener(this, null, true); 7286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 7386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 7486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 7586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void onActivityCreated(Bundle savedInstanceState) { 7686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani super.onActivityCreated(savedInstanceState); 7786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 7886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani final Activity activity = getActivity(); 7986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mAutoSyncPreference.setChecked(ContentResolver.getMasterSyncAutomatically()); 8086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mAuthorities = activity.getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY); 8186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 8286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani updateAuthDescriptions(); 8386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 8486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 8586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 8686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void onStop() { 8786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani super.onStop(); 8886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani final Activity activity = getActivity(); 8986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani AccountManager.get(activity).removeOnAccountsUpdatedListener(this); 9086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 9186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 9286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 9386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) { 9486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (preference instanceof AccountPreference) { 9586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani startAccountSettings((AccountPreference) preference); 9686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } else { 9786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani return false; 9886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 9986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani return true; 10086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 10186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 10286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private void startAccountSettings(AccountPreference acctPref) { 10386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani Intent intent = new Intent("android.settings.ACCOUNT_SYNC_SETTINGS"); 10486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani intent.putExtra(AccountSyncSettings.ACCOUNT_KEY, acctPref.getAccount()); 10586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 10686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani startActivity(intent); 10786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani finish(); 10886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 10986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 11086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 11186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void showDialog(int dialogId) { 11286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (mDialogFragment != null) { 11386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani Log.e(TAG, "Old dialog fragment not null!"); 11486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 11586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mDialogFragment = new SettingsDialogFragment(this, dialogId); 11686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId)); 11786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 11886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 11986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private void removeAccountPreferences() { 12086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani PreferenceScreen parent = getPreferenceScreen(); 12186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani for (int i = 0; i < parent.getPreferenceCount(); ) { 12286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (parent.getPreference(i) instanceof AccountPreference) { 12386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani parent.removePreference(parent.getPreference(i)); 12486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } else { 12586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani i++; 12686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 12786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 12886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 12986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 13086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 13186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void onAccountsUpdated(Account[] accounts) { 13286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (getActivity() == null) return; 13386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 13486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani removeAccountPreferences(); 13586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani for (int i = 0, n = accounts.length; i < n; i++) { 13686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani final Account account = accounts[i]; 13786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani final ArrayList<String> auths = getAuthoritiesForAccountType(account.type); 13886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 13986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani boolean showAccount = true; 14086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (mAuthorities != null && auths != null) { 14186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani showAccount = false; 14286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani for (String requestedAuthority : mAuthorities) { 14386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (auths.contains(requestedAuthority)) { 14486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani showAccount = true; 14586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani break; 14686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 14786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 14886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 14986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 15086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (showAccount) { 15186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani final Drawable icon = getDrawableForType(account.type); 15286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani final AccountPreference preference = 15386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani new AccountPreference(getActivity(), account, icon, auths, true); 15486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani getPreferenceScreen().addPreference(preference); 15586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani preference.setSummary(getLabelForType(account.type)); 15686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 15786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 15886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani onSyncStateUpdated(); 15986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 16086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani 16186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani @Override 16286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani protected void onAuthDescriptionsUpdated() { 16386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani // Update account icons for all account preference items 16486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { 16586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani Preference pref = getPreferenceScreen().getPreference(i); 16686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (pref instanceof AccountPreference) { 16786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani AccountPreference accPref = (AccountPreference) 16886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani getPreferenceScreen().getPreference(i); 16986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani accPref.setIcon(getDrawableForType(accPref.getAccount().type)); 17086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani accPref.setSummary(getLabelForType(accPref.getAccount().type)); 17186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 17286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 17386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 17486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani} 175