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

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

QS API: Fix mService and mTile being null once and for all

Change-Id: Idd82e4c2f6cfc2b30432e15e23963c1d7a959e43
Fixes: 29121793
parent 02435d24
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -15,15 +15,10 @@
 */
package android.service.quicksettings;

import android.service.quicksettings.Tile;
import android.service.quicksettings.IQSService;

/**
 * @hide
 */
oneway interface IQSTileService {
    void setQSService(in IQSService service);
    void setQSTile(in Tile tile);
    void onTileAdded();
    void onTileRemoved();
    void onStartListening();
+19 −30
Original line number Diff line number Diff line
@@ -115,6 +115,16 @@ public class TileService extends Service {
    public static final String ACTION_REQUEST_LISTENING
            = "android.service.quicksettings.action.REQUEST_LISTENING";

    /**
     * @hide
     */
    public static final String EXTRA_SERVICE = "service";

    /**
     * @hide
     */
    public static final String EXTRA_TILE = "tile";

    /**
     * @hide
     */
@@ -305,17 +315,10 @@ public class TileService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        mTile = intent.getParcelableExtra(EXTRA_TILE);
        mService = IQSService.Stub.asInterface(intent.getIBinderExtra(EXTRA_SERVICE));
        mTile.setService(mService);
        return new IQSTileService.Stub() {
            @Override
            public void setQSService(IQSService service) throws RemoteException {
                mHandler.obtainMessage(H.MSG_SET_SERVICE, service).sendToTarget();
            }

            @Override
            public void setQSTile(Tile tile) throws RemoteException {
                mHandler.obtainMessage(H.MSG_SET_TILE, tile).sendToTarget();
            }

            @Override
            public void onTileRemoved() throws RemoteException {
                mHandler.sendEmptyMessage(H.MSG_TILE_REMOVED);
@@ -349,14 +352,12 @@ public class TileService extends Service {
    }

    private class H extends Handler {
        private static final int MSG_SET_TILE = 1;
        private static final int MSG_START_LISTENING = 2;
        private static final int MSG_STOP_LISTENING = 3;
        private static final int MSG_TILE_ADDED = 4;
        private static final int MSG_TILE_REMOVED = 5;
        private static final int MSG_TILE_CLICKED = 6;
        private static final int MSG_SET_SERVICE = 7;
        private static final int MSG_UNLOCK_COMPLETE = 8;
        private static final int MSG_START_LISTENING = 1;
        private static final int MSG_STOP_LISTENING = 2;
        private static final int MSG_TILE_ADDED = 3;
        private static final int MSG_TILE_REMOVED = 4;
        private static final int MSG_TILE_CLICKED = 5;
        private static final int MSG_UNLOCK_COMPLETE = 6;

        public H(Looper looper) {
            super(looper);
@@ -365,18 +366,6 @@ public class TileService extends Service {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_SET_SERVICE:
                    mService = (IQSService) msg.obj;
                    if (mTile != null) {
                        mTile.setService(mService);
                    }
                    break;
                case MSG_SET_TILE:
                    mTile = (Tile) msg.obj;
                    if (mService != null && mTile != null) {
                        mTile.setService(mService);
                    }
                    break;
                case MSG_TILE_ADDED:
                    TileService.this.onTileAdded();
                    break;
+2 −7
Original line number Diff line number Diff line
@@ -71,17 +71,12 @@ public class CustomTile extends QSTile<QSTile.State> implements TileChangeListen
        super(host);
        mWindowManager = WindowManagerGlobal.getWindowManagerService();
        mComponent = ComponentName.unflattenFromString(action);
        mTile = new Tile(mComponent);
        setTileIcon();
        mServiceManager = host.getTileServices().getTileWrapper(this);
        mService = mServiceManager.getTileService();
        mServiceManager.setTileChangeListener(this);
        mTile = new Tile(mComponent);
        mUser = ActivityManager.getCurrentUser();
        setTileIcon();
        try {
            mService.setQSTile(mTile);
        } catch (RemoteException e) {
            // Called through wrapper, won't happen here.
        }
    }

    private void setTileIcon() {
+0 −20
Original line number Diff line number Diff line
@@ -35,16 +35,6 @@ public class QSTileServiceWrapper {
        return mService.asBinder();
    }

    public boolean setQSTile(Tile tile) {
        try {
            mService.setQSTile(tile);
            return true;
        } catch (Exception e) {
            Log.d(TAG, "Caught exception from TileService", e);
            return false;
        }
    }

    public boolean onTileAdded() {
        try {
            mService.onTileAdded();
@@ -95,16 +85,6 @@ public class QSTileServiceWrapper {
        }
    }

    public boolean setQSService(IQSService service) {
        try {
            mService.setQSService(service);
            return true;
        } catch (Exception e) {
            Log.d(TAG, "Caught exception from TileService", e);
            return false;
        }
    }

    public boolean onUnlockComplete() {
        try {
            mService.onUnlockComplete();
+4 −28
Original line number Diff line number Diff line
@@ -71,23 +71,24 @@ public class TileLifecycleManager extends BroadcastReceiver implements
    private Set<Integer> mQueuedMessages = new ArraySet<>();
    private QSTileServiceWrapper mWrapper;
    private boolean mListening;
    private Tile mTile;
    private IBinder mClickBinder;

    private int mBindTryCount;
    private boolean mBound;
    @VisibleForTesting
    boolean mReceiverRegistered;
    private IQSService mService;
    private boolean mUnbindImmediate;
    private TileChangeListener mChangeListener;
    // Return value from bindServiceAsUser, determines whether safe to call unbind.
    private boolean mIsBound;

    public TileLifecycleManager(Handler handler, Context context, Intent intent, UserHandle user) {
    public TileLifecycleManager(Handler handler, Context context, IQSService service,
            Tile tile, Intent intent, UserHandle user) {
        mContext = context;
        mHandler = handler;
        mIntent = intent;
        mIntent.putExtra(TileService.EXTRA_SERVICE, service.asBinder());
        mIntent.putExtra(TileService.EXTRA_TILE, tile);
        mUser = user;
        if (DEBUG) Log.d(TAG, "Creating " + mIntent + " " + mUser);
    }
@@ -164,14 +165,6 @@ public class TileLifecycleManager extends BroadcastReceiver implements
            service.linkToDeath(this, 0);
        } catch (RemoteException e) {
        }
        if (!wrapper.setQSService(mService)) {
            handleDeath();
            return;
        }
        if (!wrapper.setQSTile(mTile)) {
            handleDeath();
            return;
        }
        mWrapper = wrapper;
        handlePendingMessages();
    }
@@ -255,15 +248,6 @@ public class TileLifecycleManager extends BroadcastReceiver implements
        }
    }

    @Override
    public void setQSTile(Tile tile) {
        if (DEBUG) Log.d(TAG, "setQSTile " + tile);
        mTile = tile;
        if (mWrapper != null && !mWrapper.setQSTile(tile)) {
            handleDeath();
        }
    }

    private boolean checkComponentState() {
        PackageManager pm = mContext.getPackageManager();
        if (!isPackageAvailable(pm) || !isComponentAvailable(pm)) {
@@ -346,14 +330,6 @@ public class TileLifecycleManager extends BroadcastReceiver implements
        }
    }

    @Override
    public void setQSService(IQSService service) {
        mService = service;
        if (mWrapper == null || !mWrapper.setQSService(service)) {
            handleDeath();
        }
    }

    @Override
    public void onTileAdded() {
        if (DEBUG) Log.d(TAG, "onTileAdded");
Loading