Read settings and keep them up to date.
Change-Id: I8d41e460b2c0c462edc6a877edc4189c675cef1f
diff --git a/src/com/android/mail/providers/Account.java b/src/com/android/mail/providers/Account.java
index 0e99fab..50170bb 100644
--- a/src/com/android/mail/providers/Account.java
+++ b/src/com/android/mail/providers/Account.java
@@ -92,12 +92,12 @@
* Uri for EDIT intent that will cause the settings screens for this account type to be
* shown.
*/
- public final Uri settingIntentUri;
+ public final Uri settingsIntentUri;
/**
* The content provider uri that can be used to query user settings/preferences
*/
- public final Uri settingQueryUri;
+ public final Uri settingsQueryUri;
/**
* Uri for VIEW intent that will cause the help screens for this account type to be
@@ -154,8 +154,8 @@
out.append(sendMessageUri).append(ACCOUNT_COMPONENT_SEPARATOR);
out.append(expungeMessageUri).append(ACCOUNT_COMPONENT_SEPARATOR);
out.append(undoUri).append(ACCOUNT_COMPONENT_SEPARATOR);
- out.append(settingIntentUri).append(ACCOUNT_COMPONENT_SEPARATOR);
- out.append(settingQueryUri).append(ACCOUNT_COMPONENT_SEPARATOR);
+ out.append(settingsIntentUri).append(ACCOUNT_COMPONENT_SEPARATOR);
+ out.append(settingsQueryUri).append(ACCOUNT_COMPONENT_SEPARATOR);
out.append(helpIntentUri).append(ACCOUNT_COMPONENT_SEPARATOR);
out.append(syncStatus).append(ACCOUNT_COMPONENT_SEPARATOR);
out.append(composeIntentUri);
@@ -185,8 +185,8 @@
sendMessageUri = Uri.parse(accountMembers[9]);
expungeMessageUri = Uri.parse(accountMembers[10]);
undoUri = Uri.parse(accountMembers[11]);
- settingIntentUri = Uri.parse(accountMembers[12]);
- settingQueryUri = Uri.parse(accountMembers[13]);
+ settingsIntentUri = Uri.parse(accountMembers[12]);
+ settingsQueryUri = Uri.parse(accountMembers[13]);
helpIntentUri = Uri.parse(accountMembers[14]);
syncStatus = Integer.valueOf(accountMembers[15]);
composeIntentUri = Uri.parse(accountMembers[16]);
@@ -204,8 +204,8 @@
sendMessageUri = in.readParcelable(null);
expungeMessageUri = in.readParcelable(null);
undoUri = in.readParcelable(null);
- settingIntentUri = in.readParcelable(null);
- settingQueryUri = in.readParcelable(null);
+ settingsIntentUri = in.readParcelable(null);
+ settingsQueryUri = in.readParcelable(null);
helpIntentUri = in.readParcelable(null);
syncStatus = in.readInt();
composeIntentUri = in.readParcelable(null);
@@ -230,9 +230,9 @@
final String undo = cursor.getString(UIProvider.ACCOUNT_UNDO_URI_COLUMN);
undoUri = !TextUtils.isEmpty(undo) ? Uri.parse(undo) : null;
final String settings = cursor.getString(UIProvider.ACCOUNT_SETTINGS_INTENT_URI_COLUMN);
- settingIntentUri = !TextUtils.isEmpty(settings) ? Uri.parse(settings) : null;
+ settingsIntentUri = !TextUtils.isEmpty(settings) ? Uri.parse(settings) : null;
final String settingsQuery = cursor.getString(UIProvider.ACCOUNT_SETTINGS_QUERY_URI_COLUMN);
- settingQueryUri = !TextUtils.isEmpty(settingsQuery) ? Uri.parse(settingsQuery) : null;
+ settingsQueryUri = !TextUtils.isEmpty(settingsQuery) ? Uri.parse(settingsQuery) : null;
final String help = cursor.getString(UIProvider.ACCOUNT_HELP_INTENT_URI_COLUMN);
helpIntentUri = !TextUtils.isEmpty(help) ? Uri.parse(help) : null;
syncStatus = cursor.getInt(UIProvider.ACCOUNT_SYNC_STATUS_COLUMN);
@@ -281,8 +281,8 @@
dest.writeParcelable(sendMessageUri, 0);
dest.writeParcelable(expungeMessageUri, 0);
dest.writeParcelable(undoUri, 0);
- dest.writeParcelable(settingIntentUri, 0);
- dest.writeParcelable(settingQueryUri, 0);
+ dest.writeParcelable(settingsIntentUri, 0);
+ dest.writeParcelable(settingsQueryUri, 0);
dest.writeParcelable(helpIntentUri, 0);
dest.writeInt(syncStatus);
dest.writeParcelable(composeIntentUri, 0);
diff --git a/src/com/android/mail/providers/AccountCacheProvider.java b/src/com/android/mail/providers/AccountCacheProvider.java
index 7fbc6de..84754d5 100644
--- a/src/com/android/mail/providers/AccountCacheProvider.java
+++ b/src/com/android/mail/providers/AccountCacheProvider.java
@@ -276,8 +276,8 @@
mSendMailUri = acct.sendMessageUri;
mExpungeMessageUri = acct.expungeMessageUri;
mUndoUri = acct.undoUri;
- mSettingsIntentUri = acct.settingIntentUri;
- mSettingsQueryUri = acct.settingQueryUri;
+ mSettingsIntentUri = acct.settingsIntentUri;
+ mSettingsQueryUri = acct.settingsQueryUri;
mHelpIntentUri = acct.helpIntentUri;
mSyncStatus = acct.syncStatus;
mComposeIntentUri = acct.composeIntentUri;
diff --git a/src/com/android/mail/providers/Settings.java b/src/com/android/mail/providers/Settings.java
index de7dfa7..2b581c8 100644
--- a/src/com/android/mail/providers/Settings.java
+++ b/src/com/android/mail/providers/Settings.java
@@ -17,8 +17,10 @@
package com.android.mail.providers;
import android.database.Cursor;
+import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
+import android.text.TextUtils;
/**
* Model to hold Settings for an account.
@@ -33,7 +35,7 @@
public boolean confirmDelete;
public boolean confirmArchive;
public boolean confirmSend;
- public Folder defaultInbox;
+ public Uri defaultInbox;
public Settings(Parcel inParcel) {
signature = inParcel.readString();
@@ -45,7 +47,8 @@
confirmDelete = inParcel.readInt() != 0;
confirmArchive = inParcel.readInt() != 0;
confirmSend = inParcel.readInt() != 0;
- defaultInbox = new Folder(inParcel.readString());
+ final String inbox = inParcel.readString();
+ defaultInbox = !TextUtils.isEmpty(inbox) ? Uri.parse(inbox) : null;
}
public Settings(Cursor cursor) {
@@ -58,7 +61,8 @@
confirmDelete = cursor.getInt(UIProvider.SETTINGS_CONFIRM_DELETE_COLUMN) != 0;
confirmArchive = cursor.getInt(UIProvider.SETTINGS_CONFIRM_ARCHIVE_COLUMN) != 0;
confirmSend = cursor.getInt(UIProvider.SETTINGS_CONFIRM_SEND_COLUMN) != 0;
- defaultInbox = new Folder(cursor.getString(UIProvider.SETTINGS_DEFAULT_INBOX_COLUMN));
+ final String inbox = cursor.getString(UIProvider.SETTINGS_DEFAULT_INBOX_COLUMN);
+ defaultInbox = !TextUtils.isEmpty(inbox) ? Uri.parse(inbox) : null;
}
@Override
@@ -77,7 +81,7 @@
dest.writeInt(confirmDelete ? 1 : 0);
dest.writeInt(confirmArchive? 1 : 0);
dest.writeInt(confirmSend? 1 : 0);
- dest.writeString(defaultInbox.serialize());
+ dest.writeString(defaultInbox.toString());
}
@SuppressWarnings("hiding")
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 01ef42b..66f6be9 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -49,6 +49,7 @@
import com.android.mail.providers.AccountCacheProvider;
import com.android.mail.providers.Conversation;
import com.android.mail.providers.Folder;
+import com.android.mail.providers.Settings;
import com.android.mail.providers.UIProvider;
import com.android.mail.providers.UIProvider.AccountCapabilities;
import com.android.mail.providers.UIProvider.LastSyncResult;
@@ -123,9 +124,12 @@
}
};
private final Set<Uri> mCurrentAccountUris = Sets.newHashSet();
+ private Settings mCachedSettings;
+
protected static final String LOG_TAG = new LogUtils().getLogTag();
private static final int ACCOUNT_CURSOR_LOADER = 0;
- private static final int FOLDER_CURSOR_LOADER = 1;
+ private static final int ACCOUNT_SETTINGS_LOADER = 1;
+ private static final int FOLDER_CURSOR_LOADER = 2;
public AbstractActivityController(MailActivity activity, ViewMode viewMode) {
mActivity = activity;
@@ -249,6 +253,8 @@
public void onAccountChanged(Account account) {
if (!account.equals(mAccount)) {
mAccount = account;
+ onSettingsChanged(null);
+ restartSettingsLoader();
mActionBarView.setAccount(mAccount);
// Account changed; existing folder is invalid.
mFolder = null;
@@ -257,6 +263,17 @@
}
}
+
+ private void restartSettingsLoader() {
+ if (mAccount.settingsQueryUri != null) {
+ mActivity.getLoaderManager().restartLoader(ACCOUNT_SETTINGS_LOADER, null, this);
+ }
+ }
+
+ public void onSettingsChanged(Settings settings) {
+ mCachedSettings = settings;
+ }
+
private void fetchAccountFolderInfo() {
if (mFetchAccountFolderTask != null) {
mFetchAccountFolderTask.cancel(true);
@@ -486,7 +503,7 @@
@Override
public void showPreferences() {
- final Intent preferenceIntent = new Intent(Intent.ACTION_EDIT, mAccount.settingIntentUri);
+ final Intent preferenceIntent = new Intent(Intent.ACTION_EDIT, mAccount.settingsIntentUri);
mActivity.startActivity(preferenceIntent);
}
@@ -558,6 +575,7 @@
Bundle listContextBundle = savedState.getBundle(SAVED_LIST_CONTEXT);
if (listContextBundle != null) {
mConvListContext = ConversationListContext.forBundle(listContextBundle);
+ mFolder = mConvListContext.folder;
}
}
@@ -571,13 +589,14 @@
protected void restoreState(Bundle savedState) {
if (savedState != null) {
restoreListContext(savedState);
- mViewMode.handleRestore(savedState);
mAccount = savedState.getParcelable(SAVED_ACCOUNT);
+ restartSettingsLoader();
} else {
final Intent intent = mActivity.getIntent();
if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
if (intent.hasExtra(Utils.EXTRA_ACCOUNT)) {
mAccount = ((Account) intent.getParcelableExtra(Utils.EXTRA_ACCOUNT));
+ mActivity.getLoaderManager().restartLoader(ACCOUNT_SETTINGS_LOADER, null, this);
updateHelpMenuItem();
}
if (intent.hasExtra(Utils.EXTRA_FOLDER)) {
@@ -639,6 +658,11 @@
} else if (id == FOLDER_CURSOR_LOADER) {
return new CursorLoader(mActivity.getActivityContext(), mFolder.uri,
UIProvider.FOLDERS_PROJECTION, null, null, null);
+ } else if (id == ACCOUNT_SETTINGS_LOADER) {
+ if (mAccount.settingsQueryUri != null) {
+ return new CursorLoader(mActivity.getActivityContext(), mAccount.settingsQueryUri,
+ UIProvider.SETTINGS_PROJECTION, null, null, null);
+ }
}
return null;
}
@@ -742,6 +766,11 @@
}
LogUtils.v(LOG_TAG, "FOLDER STATUS = " + folder.syncStatus);
}
+ } else if (id == ACCOUNT_SETTINGS_LOADER) {
+ if (data != null) {
+ data.moveToFirst();
+ onSettingsChanged(new Settings(data));
+ }
}
}