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

Commit 94f8d9f2 authored by Fan Zhang's avatar Fan Zhang
Browse files

NPE Guard lifecycle in preference controllers

Bug: 65492237
Test: robotests
Change-Id: I8a83da46e038e8d99870b2bf4b640d734fd4d1f6
parent 32f38bde
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -43,19 +43,21 @@ public abstract class AbstractConnectivityPreferenceController
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ArrayUtils.contains(getConnectivityIntents(), action)) {
                mHandler.sendEmptyMessage(EVENT_UPDATE_CONNECTIVITY);
                getHandler().sendEmptyMessage(EVENT_UPDATE_CONNECTIVITY);
            }
        }
    };

    private static final int EVENT_UPDATE_CONNECTIVITY = 600;

    private final Handler mHandler = new ConnectivityEventHandler(this);
    private Handler mHandler;

    public AbstractConnectivityPreferenceController(Context context, Lifecycle lifecycle) {
        super(context);
        if (lifecycle != null) {
            lifecycle.addObserver(this);
        }
    }

    @Override
    public void onStop() {
@@ -78,6 +80,13 @@ public abstract class AbstractConnectivityPreferenceController

    protected abstract void updateConnectivity();

    private Handler getHandler() {
        if (mHandler == null) {
            mHandler = new ConnectivityEventHandler(this);
        }
        return mHandler;
    }

    private static class ConnectivityEventHandler extends Handler {
        private WeakReference<AbstractConnectivityPreferenceController> mPreferenceController;

+13 −4
Original line number Diff line number Diff line
@@ -44,21 +44,23 @@ public abstract class AbstractUptimePreferenceController extends AbstractPrefere
    private static final int EVENT_UPDATE_STATS = 500;

    private Preference mUptime;
    private final Handler mHandler = new MyHandler(this);
    private Handler mHandler;

    public AbstractUptimePreferenceController(Context context, Lifecycle lifecycle) {
        super(context);
        if (lifecycle != null) {
            lifecycle.addObserver(this);
        }
    }

    @Override
    public void onStart() {
        mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
        getHandler().sendEmptyMessage(EVENT_UPDATE_STATS);
    }

    @Override
    public void onStop() {
        mHandler.removeMessages(EVENT_UPDATE_STATS);
        getHandler().removeMessages(EVENT_UPDATE_STATS);
    }

    @Override
@@ -78,6 +80,13 @@ public abstract class AbstractUptimePreferenceController extends AbstractPrefere
        updateTimes();
    }

    private Handler getHandler() {
        if (mHandler == null) {
            mHandler = new MyHandler(this);
        }
        return mHandler;
    }

    private void updateTimes() {
        mUptime.setSummary(DateUtils.formatDuration(SystemClock.elapsedRealtime()));
    }
+2 −3
Original line number Diff line number Diff line
@@ -31,14 +31,13 @@ import com.android.settingslib.SettingsLibRobolectricTestRunner;
import com.android.settingslib.TestConfig;
import com.android.settingslib.core.lifecycle.Lifecycle;

import org.robolectric.shadows.ShadowLooper;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowLooper;

@RunWith(SettingsLibRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -73,7 +72,7 @@ public class UptimePreferenceControllerTest {
    @Test
    public void testUptimeTick() {
        final AbstractUptimePreferenceController uptimePreferenceController =
                new ConcreteUptimePreferenceController(mContext, mLifecycle);
                new ConcreteUptimePreferenceController(mContext, null /* lifecycle */);

        uptimePreferenceController.displayPreference(mScreen);