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

Commit d8602c88 authored by Jason Monk's avatar Jason Monk Committed by The Android Automerger
Browse files

QS Tiles: Fix some problems with connecting through intent

 - Don't send Tile through intent, it can cause crashes
 - Clean up other issues surrounding this

Change-Id: I08c626cf39b36d349592c1e0b81627b9bc7eeeb3
Fixes: 29519485
parent 4299710f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.service.quicksettings.Tile;
 * @hide
 */
interface IQSService {
    Tile getTile(in ComponentName component);
    void updateQsTile(in Tile tile);
    void updateStatusIcon(in Tile tile, in Icon icon,
            String contentDescription);
+16 −7
Original line number Diff line number Diff line
@@ -120,11 +120,6 @@ public class TileService extends Service {
     */
    public static final String EXTRA_SERVICE = "service";

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

    /**
     * @hide
     */
@@ -315,9 +310,16 @@ public class TileService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        mTile = intent.getParcelableExtra(EXTRA_TILE);
        mService = IQSService.Stub.asInterface(intent.getIBinderExtra(EXTRA_SERVICE));
        try {
            mTile = mService.getTile(new ComponentName(getPackageName(), getClass().getName()));
        } catch (RemoteException e) {
            throw new RuntimeException("Unable to reach IQSService", e);
        }
        if (mTile != null) {
            mTile.setService(mService);
            mHandler.sendEmptyMessage(H.MSG_START_SUCCESS);
        }
        return new IQSTileService.Stub() {
            @Override
            public void onTileRemoved() throws RemoteException {
@@ -358,6 +360,7 @@ public class TileService extends Service {
        private static final int MSG_TILE_REMOVED = 4;
        private static final int MSG_TILE_CLICKED = 5;
        private static final int MSG_UNLOCK_COMPLETE = 6;
        private static final int MSG_START_SUCCESS = 7;

        public H(Looper looper) {
            super(looper);
@@ -397,6 +400,12 @@ public class TileService extends Service {
                        mUnlockRunnable.run();
                    }
                    break;
                case MSG_START_SUCCESS:
                    try {
                        mService.onStartSuccessful(mTile);
                    } catch (RemoteException e) {
                    }
                    break;
            }
        }
    }
+0 −1
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ public class TileLifecycleManager extends BroadcastReceiver implements
        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);
    }
+10 −0
Original line number Diff line number Diff line
@@ -262,6 +262,16 @@ public class TileServices extends IQSService.Stub {
        }
    }

    @Override
    public Tile getTile(ComponentName componentName) {
        verifyCaller(componentName.getPackageName());
        CustomTile customTile = getTileForComponent(componentName);
        if (customTile != null) {
            return customTile.getQsTile();
        }
        return null;
    }

    @Override
    public void startUnlockAndRun(Tile tile) {
        ComponentName componentName = tile.getComponentName();