Merge "Register binder-depth per remote animation" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
859ef211a6
@@ -56,14 +56,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
private final ArrayList<Pair<TransitionFilter, IRemoteTransition>> mFilters =
|
private final ArrayList<Pair<TransitionFilter, IRemoteTransition>> mFilters =
|
||||||
new ArrayList<>();
|
new ArrayList<>();
|
||||||
|
|
||||||
private final IBinder.DeathRecipient mTransitionDeathRecipient =
|
private final ArrayMap<IBinder, RemoteDeathHandler> mDeathHandlers = new ArrayMap<>();
|
||||||
new IBinder.DeathRecipient() {
|
|
||||||
@Override
|
|
||||||
@BinderThread
|
|
||||||
public void binderDied() {
|
|
||||||
mMainExecutor.execute(() -> mFilters.clear());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
RemoteTransitionHandler(@NonNull ShellExecutor mainExecutor) {
|
RemoteTransitionHandler(@NonNull ShellExecutor mainExecutor) {
|
||||||
mMainExecutor = mainExecutor;
|
mMainExecutor = mainExecutor;
|
||||||
@@ -71,7 +64,9 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
|
|
||||||
void addFiltered(TransitionFilter filter, IRemoteTransition remote) {
|
void addFiltered(TransitionFilter filter, IRemoteTransition remote) {
|
||||||
try {
|
try {
|
||||||
remote.asBinder().linkToDeath(mTransitionDeathRecipient, 0 /* flags */);
|
RemoteDeathHandler handler = new RemoteDeathHandler(remote.asBinder());
|
||||||
|
remote.asBinder().linkToDeath(handler, 0 /* flags */);
|
||||||
|
mDeathHandlers.put(remote.asBinder(), handler);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Slog.e(TAG, "Failed to link to death");
|
Slog.e(TAG, "Failed to link to death");
|
||||||
return;
|
return;
|
||||||
@@ -88,7 +83,8 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (removed) {
|
if (removed) {
|
||||||
remote.asBinder().unlinkToDeath(mTransitionDeathRecipient, 0 /* flags */);
|
RemoteDeathHandler handler = mDeathHandlers.remove(remote.asBinder());
|
||||||
|
remote.asBinder().unlinkToDeath(handler, 0 /* flags */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,4 +202,25 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
+ " for %s: %s", transition, remote);
|
+ " for %s: %s", transition, remote);
|
||||||
return new WindowContainerTransaction();
|
return new WindowContainerTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** NOTE: binder deaths can alter the filter order */
|
||||||
|
private class RemoteDeathHandler implements IBinder.DeathRecipient {
|
||||||
|
private final IBinder mRemote;
|
||||||
|
|
||||||
|
RemoteDeathHandler(IBinder remote) {
|
||||||
|
mRemote = remote;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@BinderThread
|
||||||
|
public void binderDied() {
|
||||||
|
mMainExecutor.execute(() -> {
|
||||||
|
for (int i = mFilters.size() - 1; i >= 0; --i) {
|
||||||
|
if (mRemote.equals(mFilters.get(i).second.asBinder())) {
|
||||||
|
mFilters.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user