Loading java-overridable/src/com/android/inputmethod/latin/utils/LoginAccountUtils.java→java-overridable/src/com/android/inputmethod/latin/accounts/LoginAccountUtils.java +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.inputmethod.latin.utils; package com.android.inputmethod.latin.accounts; import android.content.Context; Loading java/AndroidManifest.xml +51 −39 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ android:supportsRtl="true" android:allowBackup="true"> <!-- Services --> <service android:name="LatinIME" android:label="@string/english_ime_name" android:permission="android.permission.BIND_INPUT_METHOD"> Loading @@ -56,6 +57,11 @@ android:resource="@xml/spellchecker" /> </service> <service android:name="com.android.inputmethod.dictionarypack.DictionaryService" android:label="@string/dictionary_service_name"> </service> <!-- Activities --> <activity android:name=".setup.SetupActivity" android:theme="@style/platformActivityTheme" android:label="@string/english_ime_name" Loading @@ -77,15 +83,6 @@ </intent-filter> </activity> <receiver android:name="SystemBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_INITIALIZE" /> <action android:name="android.intent.action.LOCALE_CHANGED" /> </intent-filter> </receiver> <activity android:name=".settings.SettingsActivity" android:theme="@style/platformSettingsTheme" android:label="@string/english_ime_settings" Loading @@ -103,9 +100,34 @@ </intent-filter> </activity> <receiver android:name="SuggestionSpanPickedNotificationReceiver" android:enabled="true"> <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity" android:theme="@style/platformSettingsTheme" android:label="@string/dictionary_settings_title" android:uiOptions="splitActionBarWhenNarrow"> <intent-filter> <action android:name="android.text.style.SUGGESTION_PICKED" /> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> <activity android:name="com.android.inputmethod.dictionarypack.DownloadOverMeteredDialog" android:theme="@style/platformActivityTheme" android:label="@string/dictionary_install_over_metered_network_prompt"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> <!-- Unexported activity used for tests. --> <activity android:name=".settings.TestFragmentActivity" android:exported="false" /> <!-- Broadcast receivers --> <receiver android:name="SystemBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_INITIALIZE" /> <action android:name="android.intent.action.LOCALE_CHANGED" /> </intent-filter> </receiver> Loading @@ -122,17 +144,11 @@ </intent-filter> </receiver> <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider" android:grantUriPermissions="true" android:exported="false" android:authorities="@string/authority" android:multiprocess="false" android:label="@string/dictionary_provider_name"> </provider> <service android:name="com.android.inputmethod.dictionarypack.DictionaryService" android:label="@string/dictionary_service_name"> </service> <receiver android:name="SuggestionSpanPickedNotificationReceiver" android:enabled="true"> <intent-filter> <action android:name="android.text.style.SUGGESTION_PICKED" /> </intent-filter> </receiver> <receiver android:name="com.android.inputmethod.dictionarypack.EventHandler"> <intent-filter> Loading @@ -142,25 +158,21 @@ </intent-filter> </receiver> <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity" android:theme="@style/platformSettingsTheme" android:label="@string/dictionary_settings_title" android:uiOptions="splitActionBarWhenNarrow"> <!-- Broadcast receiver for AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION. --> <receiver android:name=".accounts.AccountsChangedReceiver"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> </intent-filter> </activity> <activity android:name="com.android.inputmethod.dictionarypack.DownloadOverMeteredDialog" android:theme="@style/platformActivityTheme" android:label="@string/dictionary_install_over_metered_network_prompt"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> </receiver> <!-- Unexported activity used for tests. --> <activity android:name=".settings.TestFragmentActivity" android:exported="false" /> <!-- Content providers --> <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider" android:grantUriPermissions="true" android:exported="false" android:authorities="@string/authority" android:multiprocess="false" android:label="@string/dictionary_provider_name"> </provider> </application> </manifest> java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 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.latin.accounts; import android.accounts.AccountManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.TextUtils; import android.util.Log; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.latin.settings.Settings; /** * {@link BroadcastReceiver} for {@link AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION}. */ public class AccountsChangedReceiver extends BroadcastReceiver { static final String TAG = "AccountsChangedReceiver"; @Override public void onReceive(Context context, Intent intent) { if (!AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION.equals(intent.getAction())) { Log.w(TAG, "Received unknown broadcast: " + intent); return; } final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); final String currentAccount = prefs.getString(Settings.PREF_ACCOUNT_NAME, null); if (currentAccount != null) { final String[] accounts = getAccountsForLogin(context); boolean accountFound = false; for (String account : accounts) { if (TextUtils.equals(currentAccount, account)) { accountFound = true; break; } } // The current account was not found in the list of accounts, remove it. if (!accountFound) { Log.i(TAG, "The current account was removed from the system: " + currentAccount); prefs.edit() .remove(Settings.PREF_ACCOUNT_NAME) .apply(); } } } /** * Helper method to help test this receiver. */ @UsedForTesting protected String[] getAccountsForLogin(Context context) { return LoginAccountUtils.getAccountsForLogin(context); } } java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ import android.widget.Toast; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.SubtypeSwitcher; import com.android.inputmethod.latin.accounts.LoginAccountUtils; import com.android.inputmethod.latin.define.ProductionFlags; import com.android.inputmethod.latin.utils.LoginAccountUtils; import javax.annotation.Nullable; Loading java/src/com/android/inputmethod/latin/settings/SettingsValues.java +4 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ public class SettingsValues { public final boolean mSoundOn; public final boolean mKeyPreviewPopupOn; public final boolean mShowsVoiceInputKey; public final String mAccountName; public final boolean mIncludesOtherImesInLanguageSwitchList; public final boolean mShowsLanguageSwitchKey; public final boolean mUseContactsDict; Loading Loading @@ -140,6 +141,7 @@ public class SettingsValues { mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) && mInputAttributes.mShouldShowVoiceInputKey && SubtypeSwitcher.getInstance().isShortcutImeEnabled(); mAccountName = prefs.getString(Settings.PREF_ACCOUNT_NAME, null); final String autoCorrectionThresholdRawValue = prefs.getString( Settings.PREF_AUTO_CORRECTION_THRESHOLD, res.getString(R.string.auto_correction_threshold_mode_index_modest)); Loading Loading @@ -383,6 +385,8 @@ public class SettingsValues { sb.append("" + mKeyPreviewPopupOn); sb.append("\n mShowsVoiceInputKey = "); sb.append("" + mShowsVoiceInputKey); sb.append("\n mAccountName = "); sb.append("" + mAccountName); sb.append("\n mIncludesOtherImesInLanguageSwitchList = "); sb.append("" + mIncludesOtherImesInLanguageSwitchList); sb.append("\n mShowsLanguageSwitchKey = "); Loading Loading
java-overridable/src/com/android/inputmethod/latin/utils/LoginAccountUtils.java→java-overridable/src/com/android/inputmethod/latin/accounts/LoginAccountUtils.java +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.inputmethod.latin.utils; package com.android.inputmethod.latin.accounts; import android.content.Context; Loading
java/AndroidManifest.xml +51 −39 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ android:supportsRtl="true" android:allowBackup="true"> <!-- Services --> <service android:name="LatinIME" android:label="@string/english_ime_name" android:permission="android.permission.BIND_INPUT_METHOD"> Loading @@ -56,6 +57,11 @@ android:resource="@xml/spellchecker" /> </service> <service android:name="com.android.inputmethod.dictionarypack.DictionaryService" android:label="@string/dictionary_service_name"> </service> <!-- Activities --> <activity android:name=".setup.SetupActivity" android:theme="@style/platformActivityTheme" android:label="@string/english_ime_name" Loading @@ -77,15 +83,6 @@ </intent-filter> </activity> <receiver android:name="SystemBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_INITIALIZE" /> <action android:name="android.intent.action.LOCALE_CHANGED" /> </intent-filter> </receiver> <activity android:name=".settings.SettingsActivity" android:theme="@style/platformSettingsTheme" android:label="@string/english_ime_settings" Loading @@ -103,9 +100,34 @@ </intent-filter> </activity> <receiver android:name="SuggestionSpanPickedNotificationReceiver" android:enabled="true"> <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity" android:theme="@style/platformSettingsTheme" android:label="@string/dictionary_settings_title" android:uiOptions="splitActionBarWhenNarrow"> <intent-filter> <action android:name="android.text.style.SUGGESTION_PICKED" /> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> <activity android:name="com.android.inputmethod.dictionarypack.DownloadOverMeteredDialog" android:theme="@style/platformActivityTheme" android:label="@string/dictionary_install_over_metered_network_prompt"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> <!-- Unexported activity used for tests. --> <activity android:name=".settings.TestFragmentActivity" android:exported="false" /> <!-- Broadcast receivers --> <receiver android:name="SystemBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_INITIALIZE" /> <action android:name="android.intent.action.LOCALE_CHANGED" /> </intent-filter> </receiver> Loading @@ -122,17 +144,11 @@ </intent-filter> </receiver> <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider" android:grantUriPermissions="true" android:exported="false" android:authorities="@string/authority" android:multiprocess="false" android:label="@string/dictionary_provider_name"> </provider> <service android:name="com.android.inputmethod.dictionarypack.DictionaryService" android:label="@string/dictionary_service_name"> </service> <receiver android:name="SuggestionSpanPickedNotificationReceiver" android:enabled="true"> <intent-filter> <action android:name="android.text.style.SUGGESTION_PICKED" /> </intent-filter> </receiver> <receiver android:name="com.android.inputmethod.dictionarypack.EventHandler"> <intent-filter> Loading @@ -142,25 +158,21 @@ </intent-filter> </receiver> <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity" android:theme="@style/platformSettingsTheme" android:label="@string/dictionary_settings_title" android:uiOptions="splitActionBarWhenNarrow"> <!-- Broadcast receiver for AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION. --> <receiver android:name=".accounts.AccountsChangedReceiver"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> </intent-filter> </activity> <activity android:name="com.android.inputmethod.dictionarypack.DownloadOverMeteredDialog" android:theme="@style/platformActivityTheme" android:label="@string/dictionary_install_over_metered_network_prompt"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> </receiver> <!-- Unexported activity used for tests. --> <activity android:name=".settings.TestFragmentActivity" android:exported="false" /> <!-- Content providers --> <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider" android:grantUriPermissions="true" android:exported="false" android:authorities="@string/authority" android:multiprocess="false" android:label="@string/dictionary_provider_name"> </provider> </application> </manifest>
java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 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.latin.accounts; import android.accounts.AccountManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.TextUtils; import android.util.Log; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.latin.settings.Settings; /** * {@link BroadcastReceiver} for {@link AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION}. */ public class AccountsChangedReceiver extends BroadcastReceiver { static final String TAG = "AccountsChangedReceiver"; @Override public void onReceive(Context context, Intent intent) { if (!AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION.equals(intent.getAction())) { Log.w(TAG, "Received unknown broadcast: " + intent); return; } final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); final String currentAccount = prefs.getString(Settings.PREF_ACCOUNT_NAME, null); if (currentAccount != null) { final String[] accounts = getAccountsForLogin(context); boolean accountFound = false; for (String account : accounts) { if (TextUtils.equals(currentAccount, account)) { accountFound = true; break; } } // The current account was not found in the list of accounts, remove it. if (!accountFound) { Log.i(TAG, "The current account was removed from the system: " + currentAccount); prefs.edit() .remove(Settings.PREF_ACCOUNT_NAME) .apply(); } } } /** * Helper method to help test this receiver. */ @UsedForTesting protected String[] getAccountsForLogin(Context context) { return LoginAccountUtils.getAccountsForLogin(context); } }
java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ import android.widget.Toast; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.SubtypeSwitcher; import com.android.inputmethod.latin.accounts.LoginAccountUtils; import com.android.inputmethod.latin.define.ProductionFlags; import com.android.inputmethod.latin.utils.LoginAccountUtils; import javax.annotation.Nullable; Loading
java/src/com/android/inputmethod/latin/settings/SettingsValues.java +4 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ public class SettingsValues { public final boolean mSoundOn; public final boolean mKeyPreviewPopupOn; public final boolean mShowsVoiceInputKey; public final String mAccountName; public final boolean mIncludesOtherImesInLanguageSwitchList; public final boolean mShowsLanguageSwitchKey; public final boolean mUseContactsDict; Loading Loading @@ -140,6 +141,7 @@ public class SettingsValues { mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) && mInputAttributes.mShouldShowVoiceInputKey && SubtypeSwitcher.getInstance().isShortcutImeEnabled(); mAccountName = prefs.getString(Settings.PREF_ACCOUNT_NAME, null); final String autoCorrectionThresholdRawValue = prefs.getString( Settings.PREF_AUTO_CORRECTION_THRESHOLD, res.getString(R.string.auto_correction_threshold_mode_index_modest)); Loading Loading @@ -383,6 +385,8 @@ public class SettingsValues { sb.append("" + mKeyPreviewPopupOn); sb.append("\n mShowsVoiceInputKey = "); sb.append("" + mShowsVoiceInputKey); sb.append("\n mAccountName = "); sb.append("" + mAccountName); sb.append("\n mIncludesOtherImesInLanguageSwitchList = "); sb.append("" + mIncludesOtherImesInLanguageSwitchList); sb.append("\n mShowsLanguageSwitchKey = "); Loading