Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 145f05d6 authored by Sandeep Siddhartha's avatar Sandeep Siddhartha Committed by Android (Google) Code Review
Browse files

Merge "Add account change receiver to handle account removal"

parents ed77b37e d4aec65f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.inputmethod.latin.utils;
package com.android.inputmethod.latin.accounts;

import android.content.Context;

+51 −39
Original line number Diff line number Diff line
@@ -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">
@@ -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"
@@ -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"
@@ -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>

@@ -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>
@@ -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>
+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);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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;

+4 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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));
@@ -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