Support Rootless Pixel Bridge v3

This commit is contained in:
Amir Zaidi
2019-05-09 23:29:22 +02:00
committed by Kshitij Gupta
parent c6c8673b41
commit d479735f3f
6 changed files with 39 additions and 32 deletions
@@ -1,7 +0,0 @@
package amirz.aidlbridge;
import amirz.aidlbridge.BridgeCallback;
interface Bridge {
oneway void setCallback(in int index, in BridgeCallback cb);
}
@@ -1,7 +0,0 @@
package amirz.aidlbridge;
interface BridgeCallback {
oneway void onBridgeConnected(in IBinder service);
oneway void onBridgeDisconnected();
}
@@ -0,0 +1,7 @@
package amirz.aidlbridge;
import amirz.aidlbridge.IBridgeCallback;
interface IBridge {
oneway void bindService(in IBridgeCallback cb, in int flags);
}
@@ -0,0 +1,7 @@
package amirz.aidlbridge;
interface IBridgeCallback {
oneway void onServiceConnected(in ComponentName name, in IBinder service);
oneway void onServiceDisconnected(in ComponentName name);
}
@@ -17,7 +17,7 @@ public class BaseClientService implements ServiceConnection {
mContext = context;
mFlags = flags;
mBridge = FeedBridge.getUseBridge()
? new LauncherClientBridge(this)
? new LauncherClientBridge(this, flags)
: this;
}
@@ -5,38 +5,45 @@ import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import amirz.aidlbridge.Bridge;
import amirz.aidlbridge.BridgeCallback;
import amirz.aidlbridge.IBridge;
import amirz.aidlbridge.IBridgeCallback;
public class LauncherClientBridge extends IBridgeCallback.Stub implements ServiceConnection {
private static final String INTERFACE_DESCRIPTOR = "amirz.aidlbridge.IBridge";
public class LauncherClientBridge extends BridgeCallback.Stub implements ServiceConnection {
private final BaseClientService mClientService;
private final int mFlags;
private ComponentName mConnectionName;
public LauncherClientBridge(BaseClientService launcherClientService) {
public LauncherClientBridge(BaseClientService launcherClientService, int flags) {
mClientService = launcherClientService;
mFlags = flags;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Bridge bridge = Bridge.Stub.asInterface(service);
try {
bridge.setCallback(mClientService instanceof LauncherClientService ? 1 : 0, this);
if (INTERFACE_DESCRIPTOR.equals(service.getInterfaceDescriptor())) {
IBridge bridge = IBridge.Stub.asInterface(service);
try {
bridge.bindService(this, mFlags);
} catch (RemoteException e) {
e.printStackTrace();
}
} else {
mClientService.onServiceConnected(name, service);
mConnectionName = name;
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onBridgeConnected(IBinder service) {
mClientService.onServiceConnected(null, service);
}
@Override
public void onBridgeDisconnected() {
mClientService.onServiceDisconnected(null);
}
@Override
public void onServiceDisconnected(ComponentName name) {
onBridgeDisconnected();
if (mConnectionName != null) {
mClientService.onServiceDisconnected(mConnectionName);
mConnectionName = null;
}
}
}