Fixes the connection listener wrong thread crash for overview proxy

Sending connection callbacks from binder thread crashes any layouts
called from the listener. Use the original handler to post connections
to fix this crash.

Bug: 67957962
Test: manual, reinstall launcher to re-establish the connection
Change-Id: I958d86346c41cbf1e9a0dc8bdeae957ec64f8a55
This commit is contained in:
Matthew Ng
2017-11-10 11:27:29 -08:00
parent 885738ffbe
commit fac8783159

View File

@@ -25,6 +25,7 @@ import android.graphics.Rect;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
@@ -49,7 +50,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
private final Context mContext;
private final Handler mHandler;
private final Runnable mConnectionRunnable = this::startConnectionToCurrentUser;
private final Runnable mConnectionRunnable = this::internalConnectToCurrentUser;
private final DeviceProvisionedController mDeviceProvisionedController
= Dependency.get(DeviceProvisionedController.class);
private final List<OverviewProxyListener> mConnectionCallbacks = new ArrayList<>();
@@ -102,14 +103,14 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
@Override
public void onUserSetupChanged() {
if (mDeviceProvisionedController.isCurrentUserSetup()) {
startConnectionToCurrentUser();
internalConnectToCurrentUser();
}
}
@Override
public void onUserSwitched() {
mConnectionBackoffAttempts = 0;
startConnectionToCurrentUser();
internalConnectToCurrentUser();
}
};
@@ -129,6 +130,14 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
}
public void startConnectionToCurrentUser() {
if (mHandler.getLooper() != Looper.myLooper()) {
mHandler.post(mConnectionRunnable);
} else {
internalConnectToCurrentUser();
}
}
private void internalConnectToCurrentUser() {
disconnectFromLauncherService();
// If user has not setup yet or already connected, do not try to connect