Merge "Unlink to death before removing the callback wrapper in SmartspaceService/AppPredictionServic3e" into tm-dev

This commit is contained in:
Shashwat Razdan
2022-05-23 17:56:46 +00:00
committed by Android (Google) Code Review
2 changed files with 41 additions and 23 deletions

View File

@@ -224,17 +224,16 @@ public abstract class AppPredictionService extends Service {
}
final CallbackWrapper wrapper = findCallbackWrapper(callbacks, callback);
if (wrapper != null) {
removeCallbackWrapper(callbacks, wrapper);
}
removeCallbackWrapper(callbacks, wrapper);
}
private void removeCallbackWrapper(
ArrayList<CallbackWrapper> callbacks, CallbackWrapper wrapper) {
if (callbacks == null) {
private void removeCallbackWrapper(@Nullable ArrayList<CallbackWrapper> callbacks,
@Nullable CallbackWrapper wrapper) {
if (callbacks == null || wrapper == null) {
return;
}
callbacks.remove(wrapper);
wrapper.destroy();
if (callbacks.isEmpty()) {
onStopPredictionUpdates();
}
@@ -264,7 +263,8 @@ public abstract class AppPredictionService extends Service {
public abstract void onRequestPredictionUpdate(@NonNull AppPredictionSessionId sessionId);
private void doDestroyPredictionSession(@NonNull AppPredictionSessionId sessionId) {
mSessionCallbacks.remove(sessionId);
final ArrayList<CallbackWrapper> callbacks = mSessionCallbacks.remove(sessionId);
if (callbacks != null) callbacks.forEach(CallbackWrapper::destroy);
onDestroyPredictionSession(sessionId);
}
@@ -314,10 +314,12 @@ public abstract class AppPredictionService extends Service {
@Nullable Consumer<CallbackWrapper> onBinderDied) {
mCallback = callback;
mOnBinderDied = onBinderDied;
try {
mCallback.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to link to death: " + e);
if (mOnBinderDied != null) {
try {
mCallback.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to link to death: " + e);
}
}
}
@@ -329,6 +331,12 @@ public abstract class AppPredictionService extends Service {
return mCallback.equals(callback);
}
public void destroy() {
if (mCallback != null && mOnBinderDied != null) {
mCallback.asBinder().unlinkToDeath(this, 0);
}
}
@Override
public void accept(List<AppTarget> ts) {
try {
@@ -342,6 +350,7 @@ public abstract class AppPredictionService extends Service {
@Override
public void binderDied() {
destroy();
mCallback = null;
if (mOnBinderDied != null) {
mOnBinderDied.accept(this);

View File

@@ -202,9 +202,7 @@ public abstract class SmartspaceService extends Service {
}
final CallbackWrapper wrapper = findCallbackWrapper(callbacks, callback);
if (wrapper != null) {
removeCallbackWrapper(callbacks, wrapper);
}
removeCallbackWrapper(callbacks, wrapper);
}
private void doRequestPredictionUpdate(@NonNull SmartspaceSessionId sessionId) {
@@ -231,12 +229,13 @@ public abstract class SmartspaceService extends Service {
return null;
}
private void removeCallbackWrapper(
ArrayList<CallbackWrapper> callbacks, CallbackWrapper wrapper) {
if (callbacks == null) {
private void removeCallbackWrapper(@Nullable ArrayList<CallbackWrapper> callbacks,
@Nullable CallbackWrapper wrapper) {
if (callbacks == null || wrapper == null) {
return;
}
callbacks.remove(wrapper);
wrapper.destroy();
}
/**
@@ -249,7 +248,9 @@ public abstract class SmartspaceService extends Service {
Log.d(TAG, "doDestroy mSessionCallbacks: " + mSessionCallbacks);
}
super.onDestroy();
mSessionCallbacks.remove(sessionId);
final ArrayList<CallbackWrapper> callbacks = mSessionCallbacks.remove(sessionId);
if (callbacks != null) callbacks.forEach(CallbackWrapper::destroy);
onDestroySmartspaceSession(sessionId);
}
@@ -287,10 +288,12 @@ public abstract class SmartspaceService extends Service {
@Nullable Consumer<CallbackWrapper> onBinderDied) {
mCallback = callback;
mOnBinderDied = onBinderDied;
try {
mCallback.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to link to death: " + e);
if (mOnBinderDied != null) {
try {
mCallback.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to link to death: " + e);
}
}
}
@@ -317,9 +320,15 @@ public abstract class SmartspaceService extends Service {
}
}
public void destroy() {
if (mCallback != null && mOnBinderDied != null) {
mCallback.asBinder().unlinkToDeath(this, 0);
}
}
@Override
public void binderDied() {
mCallback.asBinder().unlinkToDeath(this, 0);
destroy();
mCallback = null;
if (mOnBinderDied != null) {
mOnBinderDied.accept(this);