Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/DocumentModeManager.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/DocumentModeManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/DocumentModeManager.java |
| index 1b56ea65829ec20ea703fe0c82b05f0fd3f0293a..7772446a07301d1d4e762ba30654e2e73fe625b5 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/DocumentModeManager.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/DocumentModeManager.java |
| @@ -6,10 +6,13 @@ package org.chromium.chrome.browser.preferences; |
| import android.content.Context; |
| import android.content.SharedPreferences; |
| +import android.os.Build; |
| import android.preference.PreferenceManager; |
| import org.chromium.base.ThreadUtils; |
| +import java.util.Locale; |
| + |
| /** |
| * Tracks opt out status for document mode |
| */ |
| @@ -20,7 +23,129 @@ public class DocumentModeManager { |
| public static final int OPTED_OUT_OF_DOCUMENT_MODE = 2; |
| public static final String OPT_OUT_SHOWN_COUNT = "opt_out_shown_count"; |
| public static final String OPT_OUT_CLEAN_UP_PENDING = "opt_out_clean_up_pending"; |
| - public static final String OPT_OUT_PREVIOUS_STATE = "opt_out_previous_state"; |
| + |
| + private static final int OPT_OUT_STATE_UNSET = -1; |
| + private static final int OPT_IN_TO_DOCUMENT_MODE = 0; |
| + |
| + // Taken from https://support.google.com/googleplay/answer/1727131?hl=en-GB |
| + private static final String[] DEFAULT_TABBED_MODE_DEVICES = { |
| + "GT-I9505G", // Galaxy S4 Google Play Edition |
| + "SC-04E", // Galaxy S4 |
| + "GT-I9500", // Galaxy S4 |
| + "SCH-I959", // Galaxy S4 |
| + "SHV-E300K", // Galaxy S4 |
| + "SHV-E300L", // Galaxy S4 |
| + "SHV-E300S", // Galaxy S4 |
| + "GT-I9505", // Galaxy S4 |
| + "GT-I9508", // Galaxy S4 |
| + "GT-I9508C", // Galaxy S4 |
| + "SAMSUNG-SGH-I337Z", // Galaxy S4 |
| + "SAMSUNG-SGH-I337", // Galaxy S4 |
| + "SGH-I337M", // Galaxy S4 |
| + "SGH-M919V", // Galaxy S4 |
| + "SCH-R970C", // Galaxy S4 |
| + "SCH-R970X", // Galaxy S4 |
| + "SCH-I545L", // Galaxy S4 |
| + "SPH-L720T", // Galaxy S4 |
| + "SPH-L720", // Galaxy S4 |
| + "SM-S975L", // Galaxy S4 |
| + "SGH-S970G", // Galaxy S4 |
| + "SGH-M919", // Galaxy S4 |
| + "SCH-R970", // Galaxy S4 |
| + "SCH-I545", // Galaxy S4 |
| + "GT-I9507", // Galaxy S4 |
| + "GT-I9507V", // Galaxy S4 |
| + "GT-I9515", // Galaxy S4 |
| + "GT-I9515L", // Galaxy S4 |
| + "GT-I9505X", // Galaxy S4 |
| + "GT-I9506", // Galaxy S4 |
| + "SHV-E330K", // Galaxy S4 |
| + "SHV-E330L", // Galaxy S4 |
| + "GT-I9295", // Galaxy S4 Active |
| + "SAMSUNG-SGH-I537", // Galaxy S4 Active |
| + "SGH-I537", // Galaxy S4 Active |
| + "SHV-E470S", // Galaxy S4 Active |
| + "GT-I9502", // Galaxy S4 Duos |
| + "SHV-E330S", // Galaxy S4 LTE-A |
| + "GT-I9190", // Galaxy S4 Mini |
| + "GT-I9192", // Galaxy S4 Mini |
| + "GT-I9195", // Galaxy S4 Mini |
| + "GT-I9195L", // Galaxy S4 Mini |
| + "GT-I9195T", // Galaxy S4 Mini |
| + "GT-I9195X", // Galaxy S4 Mini |
| + "GT-I9197", // Galaxy S4 Mini |
| + "SGH-I257M", // Galaxy S4 Mini |
| + "SHV-E370K", // Galaxy S4 Mini |
| + "SHV-E370D", // Galaxy S4 Mini |
| + "SCH-I435L", // Galaxy S4 Mini |
| + "SPH-L520", // Galaxy S4 Mini |
| + "SCH-R890", // Galaxy S4 Mini |
| + "SCH-I435", // Galaxy S4 Mini |
| + "GT-I9192I", // Galaxy S4 Mini |
| + "GT-I9195I", // Galaxy S4 Mini |
| + "SAMSUNG-SGH-I257", // Galaxy S4 Mini |
| + "SM-C101", // Galaxy S4 Zoom |
| + "SAMSUNG-SM-C105A", // Galaxy S4 Zoom |
| + "SM-C105L", // Galaxy S4 Zoom |
| + "SM-C105S", // Galaxy S4 Zoom |
| + "SM-C105", // Galaxy S4 Zoom |
|
newt (away)
2015/09/15 00:29:42
This line looks *very* suspicious.
|
| + "SC-02E", // Galaxy Note2 |
| + "GT-N7100", // Galaxy Note2 |
| + "GT-N7100T", // Galaxy Note2 |
| + "GT-N7100", // Galaxy Note2 |
| + "GT-N7102", // Galaxy Note2 |
| + "GT-N7102i", // Galaxy Note2 |
| + "GT-N7108", // Galaxy Note2 |
| + "SCH-N719", // Galaxy Note2 |
| + "GT-N7102", // Galaxy Note2 |
| + "GT-N7102i", // Galaxy Note2 |
| + "GT-N7105", // Galaxy Note2 |
| + "GT-N7105T", // Galaxy Note2 |
| + "SAMSUNG-SGH-I317", // Galaxy Note2 |
| + "SGH-I317M", // Galaxy Note2 |
| + "SGH-T889V", // Galaxy Note2 |
| + "GT-N7108D", // Galaxy Note2 |
| + "SC-02E", // Galaxy Note2 |
| + "SHV-E250K", // Galaxy Note2 |
| + "SHV-E250L", // Galaxy Note2 |
| + "SHV-E250S", // Galaxy Note2 |
| + "SPH-L900", // Galaxy Note2 |
| + "SGH-T889", // Galaxy Note2 |
| + "SCH-R950", // Galaxy Note2 |
| + "SCH-I605", // Galaxy Note2 |
| + "SAMSUNG-SGH-I317", // Galaxy Note2 |
| + "SC-02F", // Galaxy Note3 |
| + "SCL22", // Galaxy Note3 |
| + "SM-N900", // Galaxy Note3 |
| + "SM-N9000Q", // Galaxy Note3 |
| + "SM-N9005", // Galaxy Note3 |
| + "SM-N9006", // Galaxy Note3 |
| + "SM-N9007", // Galaxy Note3 |
| + "SM-N9008V", // Galaxy Note3 |
| + "SM-N9009", // Galaxy Note3 |
| + "SM-N900U", // Galaxy Note3 |
| + "SAMSUNG-SM-N900A", // Galaxy Note3 |
| + "SM-N900W8", // Galaxy Note3 |
| + "SM-N900K", // Galaxy Note3 |
| + "SM-N900L", // Galaxy Note3 |
| + "SM-N900S", // Galaxy Note3 |
| + "SM-N900P", // Galaxy Note3 |
| + "SM-N900T", // Galaxy Note3 |
| + "SM-N900R4", // Galaxy Note3 |
| + "SM-N900V", // Galaxy Note3 |
| + "SM-N9007", // Galaxy Note3 |
| + "SM-N9002", // Galaxy Note3 Duos |
| + "SM-N9008", // Galaxy Note3 Duos |
| + "SM-N750K", // Galaxy Note3 Neo |
| + "SM-N750L", // Galaxy Note3 Neo |
| + "SM-N750S", // Galaxy Note3 Neo |
| + "SM-N750", // Galaxy Note3 Neo |
| + "SM-N7500Q", // Galaxy Note3 Neo |
| + "SM-N7502", // Galaxy Note3 Neo |
| + "SM-N7505", // Galaxy Note3 Neo |
| + "SM-N7505L", // Galaxy Note3 Neo |
| + "SM-N7507", // Galaxy Note3 Neo |
| + }; |
| private static DocumentModeManager sManager; |
| @@ -47,14 +172,14 @@ public class DocumentModeManager { |
| * @return Whether the user set a preference to not use the document mode. |
| */ |
| public boolean isOptedOutOfDocumentMode() { |
| - return mSharedPreferences.getInt(OPT_OUT_STATE, 0) == OPTED_OUT_OF_DOCUMENT_MODE; |
| + return getOptOutState() == OPTED_OUT_OF_DOCUMENT_MODE; |
| } |
| /** |
| * @return Whether the user dismissed the opt out promo. |
| */ |
| public boolean isOptOutPromoDismissed() { |
| - return mSharedPreferences.getInt(OPT_OUT_STATE, 0) == OPT_OUT_PROMO_DISMISSED; |
| + return getOptOutState() == OPT_OUT_PROMO_DISMISSED; |
| } |
| /** |
| @@ -62,32 +187,12 @@ public class DocumentModeManager { |
| * @param state One of OPTED_OUT_OF_DOCUMENT_MODE or OPT_OUT_PROMO_DISMISSED. |
| */ |
| public void setOptedOutState(int state) { |
| - final int previousState = mSharedPreferences.getInt(OPT_OUT_STATE, 0); |
| SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit(); |
| - sharedPreferencesEditor.putInt(OPT_OUT_PREVIOUS_STATE, previousState); |
| sharedPreferencesEditor.putInt(OPT_OUT_STATE, state); |
| sharedPreferencesEditor.apply(); |
| } |
| /** |
| - * Saves the current state of the opt out preference to later match against it. |
| - */ |
| - public void savePreviousOptOutState() { |
| - final int previousState = mSharedPreferences.getInt(OPT_OUT_STATE, 0); |
| - SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit(); |
| - sharedPreferencesEditor.putInt(OPT_OUT_PREVIOUS_STATE, previousState); |
| - sharedPreferencesEditor.apply(); |
| - } |
| - |
| - /** |
| - * @return Whether the opt out state has changed since the last savePreviousOptOutState. |
| - */ |
| - public boolean didOptOutStateChange() { |
| - return mSharedPreferences.getInt(OPT_OUT_STATE, 0) |
| - != mSharedPreferences.getInt(OPT_OUT_PREVIOUS_STATE, 0); |
| - } |
| - |
| - /** |
| * Increments a preference that keeps track of how many times the opt out message has been |
| * shown on home screen. |
| */ |
| @@ -121,4 +226,25 @@ public class DocumentModeManager { |
| sharedPreferencesEditor.putBoolean(OPT_OUT_CLEAN_UP_PENDING, pending); |
| sharedPreferencesEditor.apply(); |
| } |
| + |
| + private static boolean isDeviceTabbedModeByDefault() { |
| + String model = Build.MODEL.toUpperCase(Locale.US); |
| + for (String device : DEFAULT_TABBED_MODE_DEVICES) { |
| + if (model.contains(device)) return true; |
| + } |
| + return false; |
| + } |
| + |
| + private int getOptOutState() { |
| + int optOutState = mSharedPreferences.getInt(OPT_OUT_STATE, OPT_OUT_STATE_UNSET); |
| + if (optOutState == OPT_OUT_STATE_UNSET) { |
| + if (isDeviceTabbedModeByDefault()) { |
| + optOutState = OPTED_OUT_OF_DOCUMENT_MODE; |
| + } else { |
| + optOutState = OPT_IN_TO_DOCUMENT_MODE; |
| + } |
| + setOptedOutState(optOutState); |
| + } |
| + return optOutState; |
| + } |
| } |