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

Commit 123c4a38 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Fix BroadcastReceiver leakage in SubtypeSwitcher

Bug: 3345931
Change-Id: If31a6e803ea7e1a857085ced354722c484fda075
parent 5cd87e1b
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.inputmethodservice.InputMethodService;
import android.media.AudioManager;
import android.net.ConnectivityManager;
import android.os.Debug;
import android.os.Handler;
import android.os.Message;
@@ -388,8 +389,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        mOrientation = res.getConfiguration().orientation;
        initSuggestPuncList();

        // register to receive ringer mode changes for silent mode
        IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
        // register to receive ringer mode change and network state change.
        final IntentFilter filter = new IntentFilter();
        filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mReceiver, filter);
        mVoiceConnector = VoiceIMEConnector.init(this, prefs, mHandler);
        prefs.registerOnSharedPreferenceChangeListener(this);
@@ -1986,11 +1989,16 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    }


    // receive ringer mode changes to detect silent mode
    // receive ringer mode change and network state change.
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
                updateRingerMode();
            } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                mSubtypeSwitcher.onNetworkStateChanged(intent);
            }
        }
    };

+4 −14
Original line number Diff line number Diff line
@@ -23,10 +23,8 @@ import com.android.inputmethod.voice.SettingsUtil;
import com.android.inputmethod.voice.VoiceIMEConnector;
import com.android.inputmethod.voice.VoiceInput;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
@@ -91,8 +89,7 @@ public class SubtypeSwitcher {
    }

    public static void init(LatinIME service, SharedPreferences prefs) {
        sInstance.mPrefs = prefs;
        sInstance.resetParams(service);
        sInstance.initialize(service, prefs);
        sInstance.updateAllParameters();

        SubtypeLocale.init(service);
@@ -102,8 +99,9 @@ public class SubtypeSwitcher {
        // Intentional empty constructor for singleton.
    }

    private void resetParams(LatinIME service) {
    private void initialize(LatinIME service, SharedPreferences prefs) {
        mService = service;
        mPrefs = prefs;
        mResources = service.getResources();
        mImm = (InputMethodManager) service.getSystemService(Context.INPUT_METHOD_SERVICE);
        mConnectivityManager = (ConnectivityManager) service.getSystemService(
@@ -125,14 +123,6 @@ public class SubtypeSwitcher {

        final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
        mIsNetworkConnected = (info != null && info.isConnected());
        final BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                onNetworkStateChanged(intent);
            }
        };
        service.registerReceiver(receiver,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }

    // Update all parameters stored in SubtypeSwitcher.
@@ -376,7 +366,7 @@ public class SubtypeSwitcher {
        return true;
    }

    private void onNetworkStateChanged(Intent intent) {
    public void onNetworkStateChanged(Intent intent) {
        final boolean noConnection = intent.getBooleanExtra(
                ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
        mIsNetworkConnected = !noConnection;