aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/compat/CompatUtils.java8
-rw-r--r--java/src/com/android/inputmethod/latin/DebugSettings.java2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinImeLogger.java4
-rw-r--r--java/src/com/android/inputmethod/latin/Settings.java14
-rw-r--r--java/src/com/android/inputmethod/latin/SettingsFragment.java7
-rw-r--r--java/src/com/android/inputmethod/latin/setup/LauncherIconVisibilityManager.java59
-rw-r--r--java/src/com/android/inputmethod/research/MainLogBuffer.java8
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogger.java75
-rw-r--r--java/src/com/android/inputmethod/research/ResearchSettings.java61
10 files changed, 146 insertions, 94 deletions
diff --git a/java/src/com/android/inputmethod/compat/CompatUtils.java b/java/src/com/android/inputmethod/compat/CompatUtils.java
index 5a2b6bd2b..660029baf 100644
--- a/java/src/com/android/inputmethod/compat/CompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/CompatUtils.java
@@ -81,7 +81,7 @@ public final class CompatUtils {
try {
return constructor.newInstance(args);
} catch (Exception e) {
- Log.e(TAG, "Exception in newInstance: " + e.getClass().getSimpleName());
+ Log.e(TAG, "Exception in newInstance", e);
}
return null;
}
@@ -92,7 +92,7 @@ public final class CompatUtils {
try {
return method.invoke(receiver, args);
} catch (Exception e) {
- Log.e(TAG, "Exception in invoke: " + e.getClass().getSimpleName());
+ Log.e(TAG, "Exception in invoke", e);
}
return defaultValue;
}
@@ -103,7 +103,7 @@ public final class CompatUtils {
try {
return field.get(receiver);
} catch (Exception e) {
- Log.e(TAG, "Exception in getFieldValue: " + e.getClass().getSimpleName());
+ Log.e(TAG, "Exception in getFieldValue", e);
}
return defaultValue;
}
@@ -113,7 +113,7 @@ public final class CompatUtils {
try {
field.set(receiver, value);
} catch (Exception e) {
- Log.e(TAG, "Exception in setFieldValue: " + e.getClass().getSimpleName());
+ Log.e(TAG, "Exception in setFieldValue", e);
}
}
}
diff --git a/java/src/com/android/inputmethod/latin/DebugSettings.java b/java/src/com/android/inputmethod/latin/DebugSettings.java
index 7df266ef2..c2aade64d 100644
--- a/java/src/com/android/inputmethod/latin/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/DebugSettings.java
@@ -57,7 +57,7 @@ public final class DebugSettings extends PreferenceFragment
if (usabilityStudyPref instanceof CheckBoxPreference) {
final CheckBoxPreference checkbox = (CheckBoxPreference)usabilityStudyPref;
checkbox.setChecked(prefs.getBoolean(PREF_USABILITY_STUDY_MODE,
- ResearchLogger.DEFAULT_USABILITY_STUDY_MODE));
+ LatinImeLogger.getUsabilityStudyMode(prefs)));
checkbox.setSummary(R.string.settings_warning_researcher_mode);
}
final Preference statisticsLoggingPref = findPreference(PREF_STATISTICS_LOGGING);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 79a05ceae..af494c4f4 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -428,7 +428,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
initSuggest();
if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.getInstance().init(this, mKeyboardSwitcher);
+ ResearchLogger.getInstance().init(this, mKeyboardSwitcher, mSuggest);
}
mDisplayOrientation = getResources().getConfiguration().orientation;
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index e4e8b94b2..3f2b0a3f4 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -37,6 +37,10 @@ public final class LatinImeLogger implements SharedPreferences.OnSharedPreferenc
public static void commit() {
}
+ public static boolean getUsabilityStudyMode(final SharedPreferences prefs) {
+ return false;
+ }
+
public static void onDestroy() {
}
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 02b44c7f6..435074bdb 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
import android.preference.PreferenceManager;
@@ -64,6 +65,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_GESTURE_PREVIEW_TRAIL = "pref_gesture_preview_trail";
public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT =
"pref_gesture_floating_preview_text";
+ public static final String PREF_SHOW_SETUP_WIZARD_ICON = "pref_show_setup_wizard_icon";
public static final String PREF_INPUT_LANGUAGE = "input_language";
public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
@@ -260,4 +262,16 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static boolean readUseFullscreenMode(final Resources res) {
return res.getBoolean(R.bool.config_use_fullscreen_mode);
}
+
+ public static boolean readShowSetupWizardIcon(final SharedPreferences prefs,
+ final Context context) {
+ if (!prefs.contains(Settings.PREF_SHOW_SETUP_WIZARD_ICON)) {
+ final ApplicationInfo appInfo = context.getApplicationInfo();
+ final boolean isApplicationInSystemImage =
+ (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
+ // Default value
+ return !isApplicationInSystemImage;
+ }
+ return prefs.getBoolean(Settings.PREF_SHOW_SETUP_WIZARD_ICON, false);
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/SettingsFragment.java b/java/src/com/android/inputmethod/latin/SettingsFragment.java
index edd064c0b..4c90e485a 100644
--- a/java/src/com/android/inputmethod/latin/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/SettingsFragment.java
@@ -31,6 +31,7 @@ import android.preference.PreferenceScreen;
import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.latin.define.ProductionFlag;
+import com.android.inputmethod.latin.setup.LauncherIconVisibilityManager;
import com.android.inputmethodcommon.InputMethodSettingsFragment;
public final class SettingsFragment extends InputMethodSettingsFragment
@@ -155,6 +156,10 @@ public final class SettingsFragment extends InputMethodSettingsFragment
removePreference(Settings.PREF_GESTURE_SETTINGS, getPreferenceScreen());
}
+ final CheckBoxPreference showSetupWizardIcon =
+ (CheckBoxPreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
+ showSetupWizardIcon.setChecked(Settings.readShowSetupWizardIcon(prefs, context));
+
setupKeyLongpressTimeoutSettings(prefs, res);
setupKeypressVibrationDurationSettings(prefs, res);
setupKeypressSoundVolumeSettings(prefs, res);
@@ -196,6 +201,8 @@ public final class SettingsFragment extends InputMethodSettingsFragment
final boolean gestureInputEnabled = Settings.readGestureInputEnabled(prefs, res);
setPreferenceEnabled(Settings.PREF_GESTURE_PREVIEW_TRAIL, gestureInputEnabled);
setPreferenceEnabled(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, gestureInputEnabled);
+ } else if (key.equals(Settings.PREF_SHOW_SETUP_WIZARD_ICON)) {
+ LauncherIconVisibilityManager.updateSetupWizardIconVisibility(getActivity());
}
ensureConsistencyOfAutoCorrectionSettings();
updateVoiceModeSummary();
diff --git a/java/src/com/android/inputmethod/latin/setup/LauncherIconVisibilityManager.java b/java/src/com/android/inputmethod/latin/setup/LauncherIconVisibilityManager.java
index ad34011ea..1b893a65d 100644
--- a/java/src/com/android/inputmethod/latin/setup/LauncherIconVisibilityManager.java
+++ b/java/src/com/android/inputmethod/latin/setup/LauncherIconVisibilityManager.java
@@ -16,18 +16,19 @@
package com.android.inputmethod.latin.setup;
-import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.ApplicationInfo;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Process;
+import android.preference.PreferenceManager;
import android.util.Log;
import com.android.inputmethod.compat.IntentCompatUtils;
import com.android.inputmethod.latin.RichInputMethodManager;
+import com.android.inputmethod.latin.Settings;
/**
* This class detects the {@link Intent#ACTION_MY_PACKAGE_REPLACED} broadcast intent when this IME
@@ -60,11 +61,7 @@ public final class LauncherIconVisibilityManager extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if (shouldHandleThisIntent(intent, context)) {
- if (isInSystemImage(context)) {
- disableActivity(context, SetupActivity.class);
- } else {
- Log.i(TAG, "This package isn't in system image: " + context.getPackageName());
- }
+ updateSetupWizardIconVisibility(context);
}
// The process that hosts this broadcast receiver is invoked and remains alive even after
@@ -94,32 +91,32 @@ public final class LauncherIconVisibilityManager extends BroadcastReceiver {
return false;
}
- /**
- * Disable an activity of the specified package. Disabling an activity will also hide its
- * icon from the launcher.
- *
- * @param context package context of an activity to be disabled
- * @param activityClass activity class to be disabled
- */
- private static void disableActivity(final Context context,
- final Class<? extends Activity> activityClass) {
- final ComponentName activityComponent = new ComponentName(context, activityClass);
- final PackageManager pm = context.getPackageManager();
- final int activityComponentState = pm.getComponentEnabledSetting(activityComponent);
- if (activityComponentState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
- // This activity is already disabled.
- Log.i(TAG, "Activity has already been disabled: " + activityComponent);
- return;
+ public static void updateSetupWizardIconVisibility(final Context context) {
+ final ComponentName setupWizardActivity = new ComponentName(context, SetupActivity.class);
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final boolean stateHasSet;
+ if (Settings.readShowSetupWizardIcon(prefs, context)) {
+ stateHasSet = setActivityState(context, setupWizardActivity,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
+ Log.i(TAG, (stateHasSet ? "Enable activity: " : "Activity has already been enabled: ")
+ + setupWizardActivity);
+ } else {
+ stateHasSet = setActivityState(context, setupWizardActivity,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
+ Log.i(TAG, (stateHasSet ? "Disable activity: " : "Activity has already been disabled: ")
+ + setupWizardActivity);
}
- // Disabling an activity will also hide its icon from the launcher.
- pm.setComponentEnabledSetting(activityComponent,
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
- PackageManager.DONT_KILL_APP);
- Log.i(TAG, "Disable activity: " + activityComponent);
}
- private static boolean isInSystemImage(final Context context) {
- final ApplicationInfo appInfo = context.getApplicationInfo();
- return (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
+ private static boolean setActivityState(final Context context,
+ final ComponentName activityComponent, final int activityState) {
+ final PackageManager pm = context.getPackageManager();
+ final int activityComponentState = pm.getComponentEnabledSetting(activityComponent);
+ if (activityComponentState == activityState) {
+ return false;
+ }
+ pm.setComponentEnabledSetting(
+ activityComponent, activityState, PackageManager.DONT_KILL_APP);
+ return true;
}
}
diff --git a/java/src/com/android/inputmethod/research/MainLogBuffer.java b/java/src/com/android/inputmethod/research/MainLogBuffer.java
index 9e77a1a38..9aa60f859 100644
--- a/java/src/com/android/inputmethod/research/MainLogBuffer.java
+++ b/java/src/com/android/inputmethod/research/MainLogBuffer.java
@@ -67,7 +67,7 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
// TODO: Remove dependence on Suggest, and pass in Dictionary as a parameter to an appropriate
// method.
- private Suggest mSuggest;
+ private final Suggest mSuggest;
@UsedForTesting
private Dictionary mDictionaryForTesting;
private boolean mIsStopping = false;
@@ -78,13 +78,11 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
// after a sample is taken.
/* package for test */ int mNumWordsUntilSafeToSample;
- public MainLogBuffer(final int wordsBetweenSamples, final int numInitialWordsToIgnore) {
+ public MainLogBuffer(final int wordsBetweenSamples, final int numInitialWordsToIgnore,
+ final Suggest suggest) {
super(N_GRAM_SIZE + wordsBetweenSamples);
mNumWordsBetweenNGrams = wordsBetweenSamples;
mNumWordsUntilSafeToSample = DEBUG ? 0 : numInitialWordsToIgnore;
- }
-
- public void setSuggest(final Suggest suggest) {
mSuggest = suggest;
}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index d9f37804d..061ae3810 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -122,11 +122,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// field holds a channel name, the developer does not have to re-enter it when using the
// feedback mechanism to generate multiple tests.
private static final boolean FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD = false;
- public static final boolean DEFAULT_USABILITY_STUDY_MODE = false;
/* package */ static boolean sIsLogging = false;
private static final int OUTPUT_FORMAT_VERSION = 5;
private static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
- private static final String PREF_RESEARCH_HAS_SEEN_SPLASH = "pref_research_has_seen_splash";
/* package */ static final String LOG_FILENAME_PREFIX = "researchLog";
private static final String LOG_FILENAME_SUFFIX = ".txt";
/* package */ static final String USER_RECORDING_FILENAME_PREFIX = "recording";
@@ -154,7 +152,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// constants related to specific log points
private static final String WHITESPACE_SEPARATORS = " \t\n\r";
private static final int MAX_INPUTVIEW_LENGTH_TO_CAPTURE = 8192; // must be >=1
- private static final String PREF_RESEARCH_LOGGER_UUID_STRING = "pref_research_logger_uuid";
private static final String PREF_RESEARCH_SAVED_CHANNEL = "pref_research_saved_channel";
private static final ResearchLogger sInstance = new ResearchLogger();
@@ -162,7 +159,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private static String sAllowedAccountDomain = null;
// to write to a different filename, e.g., for testing, set mFile before calling start()
/* package */ File mFilesDir;
- /* package */ String mUUIDString;
/* package */ ResearchLog mMainResearchLog;
// mFeedbackLog records all events for the session, private or not (excepting
// passwords). It is written to permanent storage only if the user explicitly commands
@@ -237,7 +233,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
return sInstance;
}
- public void init(final LatinIME latinIME, final KeyboardSwitcher keyboardSwitcher) {
+ public void init(final LatinIME latinIME, final KeyboardSwitcher keyboardSwitcher,
+ final Suggest suggest) {
assert latinIME != null;
if (latinIME == null) {
Log.w(TAG, "IMS is null; logging is off");
@@ -247,15 +244,10 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
Log.w(TAG, "IME storage directory does not exist.");
}
}
+ mSuggest = suggest;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(latinIME);
if (prefs != null) {
- mUUIDString = getUUID(prefs);
- if (!prefs.contains(PREF_USABILITY_STUDY_MODE)) {
- Editor e = prefs.edit();
- e.putBoolean(PREF_USABILITY_STUDY_MODE, DEFAULT_USABILITY_STUDY_MODE);
- e.apply();
- }
- sIsLogging = prefs.getBoolean(PREF_USABILITY_STUDY_MODE, false);
+ sIsLogging = ResearchSettings.readResearchLoggerEnabledFlag(prefs);
prefs.registerOnSharedPreferenceChangeListener(this);
final long lastCleanupTime = prefs.getLong(PREF_LAST_CLEANUP_TIME, 0L);
@@ -328,14 +320,10 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- private boolean hasSeenSplash() {
- return mPrefs.getBoolean(PREF_RESEARCH_HAS_SEEN_SPLASH, false);
- }
-
private Dialog mSplashDialog = null;
private void maybeShowSplashScreen() {
- if (hasSeenSplash()) {
+ if (ResearchSettings.readHasSeenSplash(mPrefs)) {
return;
}
if (mSplashDialog != null && mSplashDialog.isShowing()) {
@@ -388,32 +376,23 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
public void onUserLoggingConsent() {
- setLoggingAllowed(true);
if (mPrefs == null) {
- return;
+ mPrefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
+ if (mPrefs == null) return;
}
- final Editor e = mPrefs.edit();
- e.putBoolean(PREF_RESEARCH_HAS_SEEN_SPLASH, true);
- e.apply();
+ sIsLogging = true;
+ ResearchSettings.writeResearchLoggerEnabledFlag(mPrefs, true);
+ ResearchSettings.writeHasSeenSplash(mPrefs, true);
restart();
}
- private void setLoggingAllowed(boolean enableLogging) {
- if (mPrefs == null) {
- return;
- }
- Editor e = mPrefs.edit();
- e.putBoolean(PREF_USABILITY_STUDY_MODE, enableLogging);
- e.apply();
- sIsLogging = enableLogging;
- }
-
private static int sLogFileCounter = 0;
private File createLogFile(final File filesDir) {
final StringBuilder sb = new StringBuilder();
sb.append(LOG_FILENAME_PREFIX).append('-');
- sb.append(mUUIDString).append('-');
+ final String uuid = ResearchSettings.readResearchLoggerUuid(mPrefs);
+ sb.append(uuid).append('-');
sb.append(TIMESTAMP_DATEFORMAT.format(new Date())).append('-');
// Sometimes logFiles are created within milliseconds of each other. Append a counter to
// separate these.
@@ -431,7 +410,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private File createUserRecordingFile(final File filesDir) {
final StringBuilder sb = new StringBuilder();
sb.append(USER_RECORDING_FILENAME_PREFIX).append('-');
- sb.append(mUUIDString).append('-');
+ final String uuid = ResearchSettings.readResearchLoggerUuid(mPrefs);
+ sb.append(uuid).append('-');
sb.append(TIMESTAMP_DATEFORMAT.format(new Date()));
sb.append(USER_RECORDING_FILENAME_SUFFIX);
return new File(filesDir, sb.toString());
@@ -480,7 +460,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
if (mMainLogBuffer == null) {
mMainResearchLog = new ResearchLog(createLogFile(mFilesDir), mLatinIME);
final int numWordsToIgnore = new Random().nextInt(NUMBER_OF_WORDS_BETWEEN_SAMPLES + 1);
- mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore) {
+ mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore,
+ mSuggest) {
@Override
protected void publish(final ArrayList<LogUnit> logUnits,
boolean canIncludePrivateData) {
@@ -503,7 +484,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
};
- mMainLogBuffer.setSuggest(mSuggest);
}
if (mFeedbackLogBuffer == null) {
resetFeedbackLogging();
@@ -851,10 +831,13 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mInFeedbackDialog = false;
}
- public void initSuggest(Suggest suggest) {
+ public void initSuggest(final Suggest suggest) {
mSuggest = suggest;
+ // MainLogBuffer has out-of-date Suggest object. Need to close it down and create a new
+ // one.
if (mMainLogBuffer != null) {
- mMainLogBuffer.setSuggest(mSuggest);
+ stop();
+ start();
}
}
@@ -1143,18 +1126,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- private static String getUUID(final SharedPreferences prefs) {
- String uuidString = prefs.getString(PREF_RESEARCH_LOGGER_UUID_STRING, null);
- if (null == uuidString) {
- UUID uuid = UUID.randomUUID();
- uuidString = uuid.toString();
- Editor editor = prefs.edit();
- editor.putString(PREF_RESEARCH_LOGGER_UUID_STRING, uuidString);
- editor.apply();
- }
- return uuidString;
- }
-
private String scrubWord(String word) {
final Dictionary dictionary = getDictionary();
if (dictionary == null) {
@@ -1201,9 +1172,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
0);
final Integer versionCode = packageInfo.versionCode;
final String versionName = packageInfo.versionName;
+ final String uuid = ResearchSettings.readResearchLoggerUuid(researchLogger.mPrefs);
researchLogger.enqueueEvent(LOGSTATEMENT_LATIN_IME_ON_START_INPUT_VIEW_INTERNAL,
- researchLogger.mUUIDString, editorInfo.packageName,
- Integer.toHexString(editorInfo.inputType),
+ uuid, editorInfo.packageName, Integer.toHexString(editorInfo.inputType),
Integer.toHexString(editorInfo.imeOptions), editorInfo.fieldId,
Build.DISPLAY, Build.MODEL, prefs, versionCode, versionName,
OUTPUT_FORMAT_VERSION, IS_LOGGING_EVERYTHING,
diff --git a/java/src/com/android/inputmethod/research/ResearchSettings.java b/java/src/com/android/inputmethod/research/ResearchSettings.java
new file mode 100644
index 000000000..11e9ac77a
--- /dev/null
+++ b/java/src/com/android/inputmethod/research/ResearchSettings.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2013 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.inputmethod.research;
+
+import android.content.SharedPreferences;
+
+import java.util.UUID;
+
+public final class ResearchSettings {
+ public static final String PREF_RESEARCH_LOGGER_UUID = "pref_research_logger_uuid";
+ public static final String PREF_RESEARCH_LOGGER_ENABLED_FLAG =
+ "pref_research_logger_enabled_flag";
+ public static final String PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH =
+ "pref_research_logger_has_seen_splash";
+
+ private ResearchSettings() {
+ // Intentional empty constructor for singleton.
+ }
+
+ public static String readResearchLoggerUuid(final SharedPreferences prefs) {
+ if (prefs.contains(PREF_RESEARCH_LOGGER_UUID)) {
+ return prefs.getString(PREF_RESEARCH_LOGGER_UUID, null);
+ }
+ // Generate a random string as uuid if not yet set
+ final String newUuid = UUID.randomUUID().toString();
+ prefs.edit().putString(PREF_RESEARCH_LOGGER_UUID, newUuid).apply();
+ return newUuid;
+ }
+
+ public static boolean readResearchLoggerEnabledFlag(final SharedPreferences prefs) {
+ return prefs.getBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, false);
+ }
+
+ public static void writeResearchLoggerEnabledFlag(final SharedPreferences prefs,
+ final boolean isEnabled) {
+ prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, isEnabled).apply();
+ }
+
+ public static boolean readHasSeenSplash(final SharedPreferences prefs) {
+ return prefs.getBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, false);
+ }
+
+ public static void writeHasSeenSplash(final SharedPreferences prefs,
+ final boolean hasSeenSplash) {
+ prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, hasSeenSplash).apply();
+ }
+}