Merge "Moved TISBinder lifecycle handling to TISBinderHelper" into udc-qpr-dev am: 9c9764c28b

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/23588722

Change-Id: I6e9d2af467c915b50ed2974958d06d2e7fefb969
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-06-07 20:09:07 +00:00
committed by Automerger Merge Worker
6 changed files with 85 additions and 60 deletions
@@ -29,6 +29,7 @@ import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange; import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.ComponentCallbacks; import android.content.ComponentCallbacks;
import android.content.Context; import android.content.Context;
@@ -56,6 +57,7 @@ import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.taskbar.unfold.NonDestroyableScopedUnfoldTransitionProgressProvider; import com.android.launcher3.taskbar.unfold.NonDestroyableScopedUnfoldTransitionProgressProvider;
import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.launcher3.uioverrides.QuickstepLauncher;
import com.android.launcher3.util.ActivityLifecycleCallbacksAdapter;
import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.NavigationMode; import com.android.launcher3.util.NavigationMode;
import com.android.launcher3.util.SettingsCache; import com.android.launcher3.util.SettingsCache;
@@ -144,6 +146,25 @@ public class TaskbarManager {
} }
}; };
private final ActivityLifecycleCallbacksAdapter mLifecycleCallbacks =
new ActivityLifecycleCallbacksAdapter() {
@Override
public void onActivityDestroyed(Activity activity) {
if (mActivity != activity) return;
if (mActivity != null) {
mActivity.removeOnDeviceProfileChangeListener(
mDebugActivityDeviceProfileChanged);
mActivity.unregisterActivityLifecycleCallbacks(this);
}
mActivity = null;
debugWhyTaskbarNotDestroyed("clearActivity");
if (mTaskbarActivityContext != null) {
mTaskbarActivityContext.setUIController(TaskbarUIController.DEFAULT);
}
mUnfoldProgressProvider.setSourceProvider(null);
}
};
@SuppressLint("WrongConstant") @SuppressLint("WrongConstant")
public TaskbarManager(TouchInteractionService service) { public TaskbarManager(TouchInteractionService service) {
mDisplayController = DisplayController.INSTANCE.get(service); mDisplayController = DisplayController.INSTANCE.get(service);
@@ -306,10 +327,12 @@ public class TaskbarManager {
} }
if (mActivity != null) { if (mActivity != null) {
mActivity.removeOnDeviceProfileChangeListener(mDebugActivityDeviceProfileChanged); mActivity.removeOnDeviceProfileChangeListener(mDebugActivityDeviceProfileChanged);
mActivity.unregisterActivityLifecycleCallbacks(mLifecycleCallbacks);
} }
mActivity = activity; mActivity = activity;
debugWhyTaskbarNotDestroyed("Set mActivity=" + mActivity); debugWhyTaskbarNotDestroyed("Set mActivity=" + mActivity);
mActivity.addOnDeviceProfileChangeListener(mDebugActivityDeviceProfileChanged); mActivity.addOnDeviceProfileChangeListener(mDebugActivityDeviceProfileChanged);
mActivity.registerActivityLifecycleCallbacks(mLifecycleCallbacks);
UnfoldTransitionProgressProvider unfoldTransitionProgressProvider = UnfoldTransitionProgressProvider unfoldTransitionProgressProvider =
getUnfoldTransitionProgressProviderForActivity(activity); getUnfoldTransitionProgressProviderForActivity(activity);
mUnfoldProgressProvider.setSourceProvider(unfoldTransitionProgressProvider); mUnfoldProgressProvider.setSourceProvider(unfoldTransitionProgressProvider);
@@ -348,21 +371,6 @@ public class TaskbarManager {
return TaskbarUIController.DEFAULT; return TaskbarUIController.DEFAULT;
} }
/**
* Clears a previously set {@link StatefulActivity}
*/
public void clearActivity(@NonNull StatefulActivity activity) {
if (mActivity == activity) {
mActivity.removeOnDeviceProfileChangeListener(mDebugActivityDeviceProfileChanged);
mActivity = null;
debugWhyTaskbarNotDestroyed("clearActivity");
if (mTaskbarActivityContext != null) {
mTaskbarActivityContext.setUIController(TaskbarUIController.DEFAULT);
}
mUnfoldProgressProvider.setSourceProvider(null);
}
}
/** /**
* This method is called multiple times (ex. initial init, then when user unlocks) in which case * This method is called multiple times (ex. initial init, then when user unlocks) in which case
* we fully want to destroy an existing taskbar and create a new one. * we fully want to destroy an existing taskbar and create a new one.
@@ -210,8 +210,6 @@ public class QuickstepLauncher extends Launcher {
private QuickstepTransitionManager mAppTransitionManager; private QuickstepTransitionManager mAppTransitionManager;
private OverviewActionsView mActionsView; private OverviewActionsView mActionsView;
private TISBindHelper mTISBindHelper; private TISBindHelper mTISBindHelper;
private @Nullable TaskbarManager mTaskbarManager;
private @Nullable OverviewCommandHelper mOverviewCommandHelper;
private @Nullable LauncherTaskbarUIController mTaskbarUIController; private @Nullable LauncherTaskbarUIController mTaskbarUIController;
// Will be updated when dragging from taskbar. // Will be updated when dragging from taskbar.
private @Nullable DragOptions mNextWorkspaceDragOptions = null; private @Nullable DragOptions mNextWorkspaceDragOptions = null;
@@ -479,9 +477,6 @@ public class QuickstepLauncher extends Launcher {
} }
mTISBindHelper.onDestroy(); mTISBindHelper.onDestroy();
if (mTaskbarManager != null) {
mTaskbarManager.clearActivity(this);
}
if (mLauncherUnfoldAnimationController != null) { if (mLauncherUnfoldAnimationController != null) {
mLauncherUnfoldAnimationController.onDestroy(); mLauncherUnfoldAnimationController.onDestroy();
@@ -690,9 +685,9 @@ public class QuickstepLauncher extends Launcher {
@Override @Override
protected void onNewIntent(Intent intent) { protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); super.onNewIntent(intent);
OverviewCommandHelper overviewCommandHelper = mTISBindHelper.getOverviewCommandHelper();
if (mOverviewCommandHelper != null) { if (overviewCommandHelper != null) {
mOverviewCommandHelper.clearPendingCommands(); overviewCommandHelper.clearPendingCommands();
} }
} }
@@ -815,8 +810,9 @@ public class QuickstepLauncher extends Launcher {
} }
private void onTaskbarInAppDisplayProgressUpdate(float progress, int flag) { private void onTaskbarInAppDisplayProgressUpdate(float progress, int flag) {
if (mTaskbarManager == null TaskbarManager taskbarManager = mTISBindHelper.getTaskbarManager();
|| mTaskbarManager.getCurrentActivityContext() == null if (taskbarManager == null
|| taskbarManager.getCurrentActivityContext() == null
|| mTaskbarUIController == null) { || mTaskbarUIController == null) {
return; return;
} }
@@ -888,11 +884,10 @@ public class QuickstepLauncher extends Launcher {
} }
private void onTISConnected(TISBinder binder) { private void onTISConnected(TISBinder binder) {
mTaskbarManager = binder.getTaskbarManager(); TaskbarManager taskbarManager = mTISBindHelper.getTaskbarManager();
if (mTaskbarManager != null) { if (taskbarManager != null) {
mTaskbarManager.setActivity(this); taskbarManager.setActivity(this);
} }
mOverviewCommandHelper = binder.getOverviewCommandHelper();
} }
@Override @Override
@@ -1276,8 +1271,9 @@ public class QuickstepLauncher extends Launcher {
Trace.instantForTrack(TRACE_TAG_APP, "QuickstepLauncher#DeviceProfileChanged", Trace.instantForTrack(TRACE_TAG_APP, "QuickstepLauncher#DeviceProfileChanged",
getDeviceProfile().toSmallString()); getDeviceProfile().toSmallString());
SystemUiProxy.INSTANCE.get(this).setLauncherAppIconSize(mDeviceProfile.iconSizePx); SystemUiProxy.INSTANCE.get(this).setLauncherAppIconSize(mDeviceProfile.iconSizePx);
if (mTaskbarManager != null) { TaskbarManager taskbarManager = mTISBindHelper.getTaskbarManager();
mTaskbarManager.debugWhyTaskbarNotDestroyed("QuickstepLauncher#onDeviceProfileChanged"); if (taskbarManager != null) {
taskbarManager.debugWhyTaskbarNotDestroyed("QuickstepLauncher#onDeviceProfileChanged");
} }
} }
@@ -106,7 +106,6 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
private FallbackRecentsView mFallbackRecentsView; private FallbackRecentsView mFallbackRecentsView;
private OverviewActionsView mActionsView; private OverviewActionsView mActionsView;
private TISBindHelper mTISBindHelper; private TISBindHelper mTISBindHelper;
private @Nullable TaskbarManager mTaskbarManager;
private @Nullable FallbackTaskbarUIController mTaskbarUIController; private @Nullable FallbackTaskbarUIController mTaskbarUIController;
private StateManager<RecentsState> mStateManager; private StateManager<RecentsState> mStateManager;
@@ -142,9 +141,9 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
} }
private void onTISConnected(TouchInteractionService.TISBinder binder) { private void onTISConnected(TouchInteractionService.TISBinder binder) {
mTaskbarManager = binder.getTaskbarManager(); TaskbarManager taskbarManager = binder.getTaskbarManager();
if (mTaskbarManager != null) { if (taskbarManager != null) {
mTaskbarManager.setActivity(this); taskbarManager.setActivity(this);
} }
} }
@@ -385,9 +384,6 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
mActivityLaunchAnimationRunner = null; mActivityLaunchAnimationRunner = null;
mTISBindHelper.onDestroy(); mTISBindHelper.onDestroy();
if (mTaskbarManager != null) {
mTaskbarManager.clearActivity(this);
}
} }
@Override @Override
@@ -100,8 +100,6 @@ public class AllSetActivity extends Activity {
private final Rect mTempExclusionBounds = new Rect(); private final Rect mTempExclusionBounds = new Rect();
private TISBindHelper mTISBindHelper; private TISBindHelper mTISBindHelper;
private TISBinder mBinder;
@Nullable private TaskbarManager mTaskbarManager = null;
private final AnimatedFloat mSwipeProgress = new AnimatedFloat(this::onSwipeProgressUpdate); private final AnimatedFloat mSwipeProgress = new AnimatedFloat(this::onSwipeProgressUpdate);
private BgDrawable mBackground; private BgDrawable mBackground;
@@ -265,27 +263,27 @@ public class AllSetActivity extends Activity {
} }
private void setSetupUIVisible(boolean visible) { private void setSetupUIVisible(boolean visible) {
if (mBinder == null || mTaskbarManager == null) return; TaskbarManager taskbarManager = mTISBindHelper.getTaskbarManager();
mTaskbarManager.setSetupUIVisible(visible); if (taskbarManager == null) return;
taskbarManager.setSetupUIVisible(visible);
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
maybeResumeOrPauseBackgroundAnimation(); maybeResumeOrPauseBackgroundAnimation();
if (mBinder != null) { TISBinder binder = mTISBindHelper.getBinder();
if (binder != null) {
setSetupUIVisible(true); setSetupUIVisible(true);
mBinder.setSwipeUpProxy(this::createSwipeUpProxy); binder.setSwipeUpProxy(this::createSwipeUpProxy);
} }
} }
private void onTISConnected(TISBinder binder) { private void onTISConnected(TISBinder binder) {
mBinder = binder;
mTaskbarManager = mBinder.getTaskbarManager();
setSetupUIVisible(isResumed()); setSetupUIVisible(isResumed());
mBinder.setSwipeUpProxy(isResumed() ? this::createSwipeUpProxy : null); binder.setSwipeUpProxy(isResumed() ? this::createSwipeUpProxy : null);
mBinder.setOverviewTargetChangeListener(mBinder::preloadOverviewForSUWAllSet); binder.setOverviewTargetChangeListener(binder::preloadOverviewForSUWAllSet);
mBinder.preloadOverviewForSUWAllSet(); binder.preloadOverviewForSUWAllSet();
} }
@Override @Override
@@ -300,10 +298,11 @@ public class AllSetActivity extends Activity {
} }
private void clearBinderOverride() { private void clearBinderOverride() {
if (mBinder != null) { TISBinder binder = mTISBindHelper.getBinder();
if (binder != null) {
setSetupUIVisible(false); setSetupUIVisible(false);
mBinder.setSwipeUpProxy(null); binder.setSwipeUpProxy(null);
mBinder.setOverviewTargetChangeListener(null); binder.setOverviewTargetChangeListener(null);
} }
} }
@@ -360,8 +359,9 @@ public class AllSetActivity extends Activity {
mContentView.setAlpha(alpha); mContentView.setAlpha(alpha);
mContentView.setTranslationY((alpha - 1) * mSwipeUpShift); mContentView.setTranslationY((alpha - 1) * mSwipeUpShift);
if (mLauncherStartAnim == null && mTaskbarManager != null) { TaskbarManager taskbarManager = mTISBindHelper.getTaskbarManager();
mLauncherStartAnim = mTaskbarManager.createLauncherStartFromSuwAnim(MAX_SWIPE_DURATION); if (mLauncherStartAnim == null && taskbarManager != null) {
mLauncherStartAnim = taskbarManager.createLauncherStartFromSuwAnim(MAX_SWIPE_DURATION);
} }
if (mLauncherStartAnim != null) { if (mLauncherStartAnim != null) {
mLauncherStartAnim.setPlayFraction(Utilities.mapBoundToRange( mLauncherStartAnim.setPlayFraction(Utilities.mapBoundToRange(
@@ -58,7 +58,6 @@ public class GestureSandboxActivity extends FragmentActivity {
private StatsLogManager mStatsLogManager; private StatsLogManager mStatsLogManager;
private TISBindHelper mTISBindHelper; private TISBindHelper mTISBindHelper;
private TISBinder mBinder;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -271,7 +270,6 @@ public class GestureSandboxActivity extends FragmentActivity {
} }
private void onTISConnected(TISBinder binder) { private void onTISConnected(TISBinder binder) {
mBinder = binder;
updateServiceState(isResumed()); updateServiceState(isResumed());
} }
@@ -282,8 +280,9 @@ public class GestureSandboxActivity extends FragmentActivity {
} }
private void updateServiceState(boolean isEnabled) { private void updateServiceState(boolean isEnabled) {
if (mBinder != null) { TISBinder binder = mTISBindHelper.getBinder();
mBinder.setGestureBlockedTaskId(isEnabled ? getTaskId() : -1); if (binder != null) {
binder.setGestureBlockedTaskId(isEnabled ? getTaskId() : -1);
} }
} }
@@ -23,6 +23,10 @@ import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log; import android.util.Log;
import androidx.annotation.Nullable;
import com.android.launcher3.taskbar.TaskbarManager;
import com.android.quickstep.OverviewCommandHelper;
import com.android.quickstep.TouchInteractionService; import com.android.quickstep.TouchInteractionService;
import com.android.quickstep.TouchInteractionService.TISBinder; import com.android.quickstep.TouchInteractionService.TISBinder;
@@ -50,6 +54,7 @@ public class TISBindHelper implements ServiceConnection {
private short mConnectionAttempts; private short mConnectionAttempts;
private boolean mTisServiceBound; private boolean mTisServiceBound;
private boolean mIsConnected; private boolean mIsConnected;
@Nullable private TISBinder mBinder;
public TISBindHelper(Context context, Consumer<TISBinder> connectionCallback) { public TISBindHelper(Context context, Consumer<TISBinder> connectionCallback) {
mContext = context; mContext = context;
@@ -70,7 +75,8 @@ public class TISBindHelper implements ServiceConnection {
Log.d(TAG, "TIS service connected"); Log.d(TAG, "TIS service connected");
mIsConnected = true; mIsConnected = true;
mConnectionCallback.accept((TISBinder) iBinder); mBinder = (TISBinder) iBinder;
mConnectionCallback.accept(mBinder);
// Flush the pending callbacks // Flush the pending callbacks
for (Runnable r : mPendingConnectedCallbacks) { for (Runnable r : mPendingConnectedCallbacks) {
r.run(); r.run();
@@ -80,7 +86,11 @@ public class TISBindHelper implements ServiceConnection {
} }
@Override @Override
public void onServiceDisconnected(ComponentName componentName) { } public void onServiceDisconnected(ComponentName componentName) {
Log.d(TAG, "TIS service disconnected");
mBinder = null;
mIsConnected = false;
}
@Override @Override
public void onBindingDied(ComponentName name) { public void onBindingDied(ComponentName name) {
@@ -88,6 +98,21 @@ public class TISBindHelper implements ServiceConnection {
internalBindToTIS(); internalBindToTIS();
} }
@Nullable
public TISBinder getBinder() {
return mBinder;
}
@Nullable
public TaskbarManager getTaskbarManager() {
return mBinder == null ? null : mBinder.getTaskbarManager();
}
@Nullable
public OverviewCommandHelper getOverviewCommandHelper() {
return mBinder == null ? null : mBinder.getOverviewCommandHelper();
}
/** /**
* Runs the given {@param r} runnable when the service is connected. * Runs the given {@param r} runnable when the service is connected.
*/ */
@@ -139,6 +164,7 @@ public class TISBindHelper implements ServiceConnection {
public void onDestroy() { public void onDestroy() {
internalUnbindToTIS(); internalUnbindToTIS();
resetServiceBindRetryState(); resetServiceBindRetryState();
mBinder = null;
mIsConnected = false; mIsConnected = false;
mPendingConnectedCallbacks.clear(); mPendingConnectedCallbacks.clear();
} }