| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.settings.accounts; |
| |
| import android.accounts.Account; |
| import android.accounts.AccountManager; |
| import android.accounts.OnAccountsUpdateListener; |
| import android.app.Activity; |
| import android.app.ActivityManager; |
| import android.content.ContentResolver; |
| import android.content.Intent; |
| import android.graphics.drawable.Drawable; |
| import android.os.Bundle; |
| import android.preference.CheckBoxPreference; |
| import android.preference.Preference; |
| import android.preference.Preference.OnPreferenceChangeListener; |
| import android.preference.PreferenceScreen; |
| import android.util.Log; |
| |
| import com.android.settings.AccountPreference; |
| import com.android.settings.DialogCreatable; |
| import com.android.settings.R; |
| |
| import java.util.ArrayList; |
| |
| public class SyncSettings extends AccountPreferenceBase |
| implements OnAccountsUpdateListener, DialogCreatable { |
| |
| private static final String KEY_SYNC_SWITCH = "sync_switch"; |
| |
| private String[] mAuthorities; |
| |
| private SettingsDialogFragment mDialogFragment; |
| private CheckBoxPreference mAutoSyncPreference; |
| |
| @Override |
| public void onCreate(Bundle icicle) { |
| super.onCreate(icicle); |
| |
| addPreferencesFromResource(R.xml.sync_settings); |
| mAutoSyncPreference = |
| (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_SYNC_SWITCH); |
| mAutoSyncPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { |
| @Override |
| public boolean onPreferenceChange(Preference preference, Object newValue) { |
| if (ActivityManager.isUserAMonkey()) { |
| Log.d("SyncSettings", "ignoring monkey's attempt to flip sync state"); |
| } else { |
| ContentResolver.setMasterSyncAutomatically((Boolean) newValue); |
| } |
| return true; |
| } |
| }); |
| |
| setHasOptionsMenu(true); |
| } |
| |
| @Override |
| public void onStart() { |
| super.onStart(); |
| Activity activity = getActivity(); |
| AccountManager.get(activity).addOnAccountsUpdatedListener(this, null, true); |
| } |
| |
| @Override |
| public void onActivityCreated(Bundle savedInstanceState) { |
| super.onActivityCreated(savedInstanceState); |
| |
| final Activity activity = getActivity(); |
| mAutoSyncPreference.setChecked(ContentResolver.getMasterSyncAutomatically()); |
| mAuthorities = activity.getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY); |
| |
| updateAuthDescriptions(); |
| } |
| |
| @Override |
| public void onStop() { |
| super.onStop(); |
| final Activity activity = getActivity(); |
| AccountManager.get(activity).removeOnAccountsUpdatedListener(this); |
| } |
| |
| @Override |
| public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) { |
| if (preference instanceof AccountPreference) { |
| startAccountSettings((AccountPreference) preference); |
| } else { |
| return false; |
| } |
| return true; |
| } |
| |
| private void startAccountSettings(AccountPreference acctPref) { |
| Intent intent = new Intent("android.settings.ACCOUNT_SYNC_SETTINGS"); |
| intent.putExtra(AccountSyncSettings.ACCOUNT_KEY, acctPref.getAccount()); |
| intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| startActivity(intent); |
| finish(); |
| } |
| |
| @Override |
| public void showDialog(int dialogId) { |
| if (mDialogFragment != null) { |
| Log.e(TAG, "Old dialog fragment not null!"); |
| } |
| mDialogFragment = new SettingsDialogFragment(this, dialogId); |
| mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId)); |
| } |
| |
| private void removeAccountPreferences() { |
| PreferenceScreen parent = getPreferenceScreen(); |
| for (int i = 0; i < parent.getPreferenceCount(); ) { |
| if (parent.getPreference(i) instanceof AccountPreference) { |
| parent.removePreference(parent.getPreference(i)); |
| } else { |
| i++; |
| } |
| } |
| } |
| |
| @Override |
| public void onAccountsUpdated(Account[] accounts) { |
| if (getActivity() == null) return; |
| |
| removeAccountPreferences(); |
| for (int i = 0, n = accounts.length; i < n; i++) { |
| final Account account = accounts[i]; |
| final ArrayList<String> auths = getAuthoritiesForAccountType(account.type); |
| |
| boolean showAccount = true; |
| if (mAuthorities != null && auths != null) { |
| showAccount = false; |
| for (String requestedAuthority : mAuthorities) { |
| if (auths.contains(requestedAuthority)) { |
| showAccount = true; |
| break; |
| } |
| } |
| } |
| |
| if (showAccount) { |
| final Drawable icon = getDrawableForType(account.type); |
| final AccountPreference preference = |
| new AccountPreference(getActivity(), account, icon, auths, true); |
| getPreferenceScreen().addPreference(preference); |
| preference.setSummary(getLabelForType(account.type)); |
| } |
| } |
| onSyncStateUpdated(); |
| } |
| |
| @Override |
| protected void onAuthDescriptionsUpdated() { |
| // Update account icons for all account preference items |
| for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { |
| Preference pref = getPreferenceScreen().getPreference(i); |
| if (pref instanceof AccountPreference) { |
| AccountPreference accPref = (AccountPreference) |
| getPreferenceScreen().getPreference(i); |
| accPref.setIcon(getDrawableForType(accPref.getAccount().type)); |
| accPref.setSummary(getLabelForType(accPref.getAccount().type)); |
| } |
| } |
| } |
| } |