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

Commit fa452ef8 authored by Jason Monk's avatar Jason Monk
Browse files

Make QSTileImpl a LifecycleOwner and make use of it

Test: existing tests pass
Change-Id: I6ac1fd46b74d8eb48c83af3883c7fdcd2cb0f628
parent c0e0e2b8
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -14,6 +14,9 @@

package com.android.systemui.qs.tileimpl;

import static androidx.lifecycle.Lifecycle.State.DESTROYED;
import static androidx.lifecycle.Lifecycle.State.RESUMED;

import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_CLICK;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_LONG_PRESS;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_SECONDARY_CLICK;
@@ -38,6 +41,11 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;

import androidx.annotation.NonNull;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.settingslib.RestrictedLockUtils;
@@ -66,7 +74,7 @@ import java.util.ArrayList;
 *
 * @param <TState> see above
 */
public abstract class QSTileImpl<TState extends State> implements QSTile {
public abstract class QSTileImpl<TState extends State> implements QSTile, LifecycleOwner {
    protected final String TAG = "Tile." + getClass().getSimpleName();
    protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG);

@@ -94,6 +102,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
    private boolean mShowingDetail;
    private int mIsFullQs;

    private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);

    public abstract TState newTileState();

    abstract protected void handleClick();
@@ -113,6 +123,12 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
        mContext = host.getContext();
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycle;
    }

    /**
     * Adds or removes a listening client for the tile. If the tile has one or more
     * listening client it will go into the listening state.
@@ -341,12 +357,14 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
        if (listening) {
            if (mListeners.add(listener) && mListeners.size() == 1) {
                if (DEBUG) Log.d(TAG, "handleSetListening true");
                mLifecycle.markState(RESUMED);
                handleSetListening(listening);
                refreshState(); // Ensure we get at least one refresh after listening.
            }
        } else {
            if (mListeners.remove(listener) && mListeners.size() == 0) {
                if (DEBUG) Log.d(TAG, "handleSetListening false");
                mLifecycle.markState(DESTROYED);
                handleSetListening(listening);
            }
        }
+1 −5
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements
    public BatterySaverTile(QSHost host, BatteryController batteryController) {
        super(host);
        mBatteryController = batteryController;
        mBatteryController.observe(getLifecycle(), this);
    }

    @Override
@@ -59,11 +60,6 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements

    @Override
    public void handleSetListening(boolean listening) {
        if (listening) {
            mBatteryController.addCallback(this);
        } else {
            mBatteryController.removeCallback(this);
        }
    }

    @Override
+1 −5
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
        mController = bluetoothController;
        mActivityStarter = activityStarter;
        mDetailAdapter = (BluetoothDetailAdapter) createDetailAdapter();
        mController.observe(getLifecycle(), mCallback);
    }

    @Override
@@ -82,11 +83,6 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {

    @Override
    public void handleSetListening(boolean listening) {
        if (listening) {
            mController.addCallback(mCallback);
        } else {
            mController.removeCallback(mCallback);
        }
    }

    @Override
+4 −8
Original line number Diff line number Diff line
@@ -75,6 +75,9 @@ public class CastTile extends QSTileImpl<BooleanState> {
        mKeyguard = keyguardMonitor;
        mNetworkController = networkController;
        mActivityStarter = activityStarter;
        mController.observe(this, mCallback);
        mKeyguard.observe(this, mCallback);
        mNetworkController.observe(this, mSignalCallback);
    }

    @Override
@@ -90,15 +93,8 @@ public class CastTile extends QSTileImpl<BooleanState> {
    @Override
    public void handleSetListening(boolean listening) {
        if (DEBUG) Log.d(TAG, "handleSetListening " + listening);
        if (listening) {
            mController.addCallback(mCallback);
            mKeyguard.addCallback(mCallback);
            mNetworkController.addCallback(mSignalCallback);
        } else {
        if (!listening) {
            mController.setDiscovering(false);
            mController.removeCallback(mCallback);
            mKeyguard.removeCallback(mCallback);
            mNetworkController.removeCallback(mSignalCallback);
        }
    }

+1 −5
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ public class CellularTile extends QSTileImpl<SignalState> {
        mKeyguardMonitor = keyguardMonitor;
        mDataController = mController.getMobileDataController();
        mDetailAdapter = new CellularDetailAdapter();
        mController.observe(getLifecycle(), mSignalCallback);
    }

    @Override
@@ -87,11 +88,6 @@ public class CellularTile extends QSTileImpl<SignalState> {

    @Override
    public void handleSetListening(boolean listening) {
        if (listening) {
            mController.addCallback(mSignalCallback);
        } else {
            mController.removeCallback(mSignalCallback);
        }
    }

    @Override
Loading