Disable features for Svelte
Disable following features for svelte (low memory devices):
- Sender images in conversation list always off and hidden in settings
- Attachment previews in conversation list always off and hidden in settings
- Auto-download attachments over wifi default to false, but still show in settings
- Conversation cursor precaching
Bug 10708266, 9325806, 9325758
Change-Id: I9d6ed9414467041f77c2895de7a71040b9a8b32a
diff --git a/src/com/android/mail/browse/ConversationCursor.java b/src/com/android/mail/browse/ConversationCursor.java
index 6df2d18..7a3ca0f 100644
--- a/src/com/android/mail/browse/ConversationCursor.java
+++ b/src/com/android/mail/browse/ConversationCursor.java
@@ -165,6 +165,8 @@
private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
+ private final boolean mCachingEnabled;
+
private void setCursor(UnderlyingCursorWrapper cursor) {
// If we have an existing underlying cursor, make sure it's closed
if (mUnderlyingCursor != null) {
@@ -193,6 +195,9 @@
mName = name;
qProjection = UIProvider.CONVERSATION_PROJECTION;
mCursorObserver = new CursorObserver(new Handler(Looper.getMainLooper()));
+
+ // Disable caching on low memory devices
+ mCachingEnabled = !Utils.isLowRamDevice(activity);
}
/**
@@ -357,7 +362,7 @@
* notes on thread safety.
*/
private int mCachePos;
- private boolean mCachingEnabled = true;
+ private boolean mCachingEnabled;
private final NewCursorUpdateObserver mCursorUpdateObserver;
private boolean mUpdateObserverRegistered = false;
@@ -370,9 +375,11 @@
private boolean mCursorUpdated = false;
- public UnderlyingCursorWrapper(Cursor result) {
+ public UnderlyingCursorWrapper(Cursor result, boolean cachingEnabled) {
super(result);
+ mCachingEnabled = cachingEnabled;
+
// Register the content observer immediately, as we want to make sure that we don't miss
// any updates
mCursorUpdateObserver =
@@ -639,7 +646,8 @@
uri, time, result.getCount());
}
System.gc();
- return new UnderlyingCursorWrapper(result);
+
+ return new UnderlyingCursorWrapper(result, mCachingEnabled);
}
static boolean offUiThread() {
diff --git a/src/com/android/mail/preferences/MailPrefs.java b/src/com/android/mail/preferences/MailPrefs.java
index c6146c8..3791055 100644
--- a/src/com/android/mail/preferences/MailPrefs.java
+++ b/src/com/android/mail/preferences/MailPrefs.java
@@ -23,6 +23,7 @@
import com.android.mail.providers.Account;
import com.android.mail.providers.UIProvider;
import com.android.mail.utils.LogUtils;
+import com.android.mail.utils.Utils;
import com.android.mail.widget.BaseWidgetProvider;
import com.google.common.collect.ImmutableSet;
@@ -396,6 +397,11 @@
}
public boolean getShowSenderImages() {
+ if (Utils.isLowRamDevice(getContext())) {
+ // Do not show sender images in conversation list on low memory devices since they are
+ // expensive to render.
+ return false;
+ }
final SharedPreferences sharedPreferences = getSharedPreferences();
return sharedPreferences.getBoolean(PreferenceKeys.SHOW_SENDER_IMAGES, true);
}
@@ -406,6 +412,9 @@
}
public boolean getShowAttachmentPreviews() {
+ if (Utils.isLowRamDevice(getContext())) {
+ return false;
+ }
final SharedPreferences sharedPreferences = getSharedPreferences();
return sharedPreferences.getBoolean(PreferenceKeys.SHOW_ATTACHMENT_PREVIEWS, true);
}
diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java
index f3fd875..4390132 100644
--- a/src/com/android/mail/utils/Utils.java
+++ b/src/com/android/mail/utils/Utils.java
@@ -22,6 +22,7 @@
import com.google.android.mail.common.html.parser.HtmlTreeBuilder;
import com.google.common.collect.Maps;
+import android.app.ActivityManager;
import android.app.Fragment;
import android.app.SearchManager;
import android.content.Context;
@@ -141,6 +142,21 @@
}
/**
+ * @return Whether we are running on a low memory device. This is used to disable certain
+ * memory intensive features in the app.
+ */
+ public static boolean isLowRamDevice(Context context) {
+ // TODO: use SDK_INT to check if device is KitKat or greater.
+ if (Build.VERSION.CODENAME.startsWith("K")) {
+ final ActivityManager am = (ActivityManager) context.getSystemService(
+ Context.ACTIVITY_SERVICE);
+ return am.isLowRamDevice();
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Sets WebView in a restricted mode suitable for email use.
*
* @param webView The WebView to restrict