MailPreferenceActivity.java revision e01cc8d461dd0cc3dae8b2f03235c32a0b7f865c
17da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler/******************************************************************************* 27da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * Copyright (C) 2014 Google Inc. 37da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * Licensed to The Android Open Source Project. 47da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * 57da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 67da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * you may not use this file except in compliance with the License. 77da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * You may obtain a copy of the License at 87da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * 97da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * http://www.apache.org/licenses/LICENSE-2.0 107da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * 117da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * Unless required by applicable law or agreed to in writing, software 127da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 137da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 147da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * See the License for the specific language governing permissions and 157da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler * limitations under the License. 167da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler *******************************************************************************/ 177da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 187da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerpackage com.android.mail.ui.settings; 197da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 207da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport android.app.Fragment; 21e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport android.app.LoaderManager.LoaderCallbacks; 22e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport android.content.CursorLoader; 23e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport android.content.Loader; 24e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport android.database.Cursor; 257da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport android.os.Bundle; 267da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport android.preference.PreferenceActivity; 27e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport android.text.TextUtils; 287da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 297da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport com.android.mail.R; 30e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport com.android.mail.providers.Account; 31e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport com.android.mail.providers.MailAppProvider; 32e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantlerimport com.android.mail.providers.UIProvider; 337da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport com.google.common.annotations.VisibleForTesting; 347da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 357da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport java.lang.ref.WeakReference; 367da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerimport java.util.List; 377da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 387da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantlerpublic class MailPreferenceActivity extends PreferenceActivity { 397da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 40dc24fceb82fa01f7c58abd2a1191f0b2cc64c6faTony Mantler public static final String PREFERENCE_FRAGMENT_ID = "preference_fragment_id"; 41dc24fceb82fa01f7c58abd2a1191f0b2cc64c6faTony Mantler 42e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler private static final int ACCOUNT_LOADER_ID = 0; 43e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 447da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler private WeakReference<GeneralPrefsFragment> mGeneralPrefsFragmentRef; 457da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 46e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler private Cursor mAccountsCursor; 47e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 487da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler @Override 497da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler protected void onCreate(Bundle savedInstanceState) { 507da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler super.onCreate(savedInstanceState); 51e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 52e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler getLoaderManager().initLoader(ACCOUNT_LOADER_ID, null, new AccountLoaderCallbacks()); 53e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 54e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 55e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler private class AccountLoaderCallbacks implements LoaderCallbacks<Cursor> { 56e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler @Override 57e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler public Loader<Cursor> onCreateLoader(int id, Bundle args) { 58e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler return new CursorLoader(MailPreferenceActivity.this, 59e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler MailAppProvider.getAccountsUri(), UIProvider.ACCOUNTS_PROJECTION, 60e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler null, null, null); 61e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 62e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 63e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler @Override 64e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 65e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler mAccountsCursor = data; 66e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler invalidateHeaders(); 67e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 68e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 69e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler @Override 70e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler public void onLoaderReset(Loader<Cursor> loader) { 71e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler mAccountsCursor = null; 72e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler invalidateHeaders(); 73e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 747da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler } 757da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 767da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler @VisibleForTesting 777da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler GeneralPrefsFragment getGeneralPrefsFragment() { 787da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler return mGeneralPrefsFragmentRef != null ? mGeneralPrefsFragmentRef.get() : null; 797da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler } 807da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 817da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler @Override 827da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler public void onAttachFragment(Fragment fragment) { 837da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler super.onAttachFragment(fragment); 847da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler if (fragment instanceof GeneralPrefsFragment) { 857da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler mGeneralPrefsFragmentRef = 867da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler new WeakReference<GeneralPrefsFragment>((GeneralPrefsFragment) fragment); 877da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler } 887da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler } 897da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 907da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler @Override 917da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler protected boolean isValidFragment(String fragmentName) { 92e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler // TODO: STOPSHIP fix Email to use the PublicPreferenceActivity trampoline 93e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler return true; 947da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler } 957da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler 967da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler @Override 977da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler public void onBuildHeaders(List<Header> target) { 987da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler loadHeadersFromResource(R.xml.preference_headers, target); 99e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler if (mAccountsCursor != null && mAccountsCursor.moveToFirst()) { 100e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler do { 101e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler final Account account = new Account(mAccountsCursor); 102e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler if (!TextUtils.isEmpty(account.getEmailAddress())) { 103e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler final Header header = new Header(); 104e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler if (TextUtils.isEmpty(account.getDisplayName()) || 105e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler TextUtils.equals(account.getDisplayName(), account.getEmailAddress())) { 106e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler // No (useful) display name, just use the email address 107e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler header.title = account.getEmailAddress(); 108e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } else { 109e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler header.title = account.getDisplayName(); 110e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler header.summary = account.getEmailAddress(); 111e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 112e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler header.fragment = account.settingsFragmentClass; 113e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler final Bundle accountBundle = new Bundle(1); 114e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler accountBundle.putString(MailAccountPrefsFragment.ARG_ACCOUNT_EMAIL, 115e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler account.getEmailAddress()); 116e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler header.fragmentArguments = accountBundle; 117e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 118e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler target.add(header); 119e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 120e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } while (mAccountsCursor.moveToNext()); 121e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 122e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler onBuildExtraHeaders(target); 123e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler } 124e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler 125e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler /** 126e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler * Override this in a subclass to add extra headers besides "General Settings" and accounts 127e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler * @param target List of headers to mutate 128e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler */ 129e01cc8d461dd0cc3dae8b2f03235c32a0b7f865cTony Mantler public void onBuildExtraHeaders(List<Header> target) { 1307da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler } 1317da3422697f511ed4aa8aa73462917fbd0cffabfTony Mantler} 132