Merge "Revert "Cancel gestures on launcher destroy"" into tm-qpr-dev
diff --git a/quickstep/src/com/android/launcher3/LauncherLifecycleListener.java b/quickstep/src/com/android/launcher3/LauncherInitListener.java
similarity index 78%
rename from quickstep/src/com/android/launcher3/LauncherLifecycleListener.java
rename to quickstep/src/com/android/launcher3/LauncherInitListener.java
index 82c646d..28bd701 100644
--- a/quickstep/src/com/android/launcher3/LauncherLifecycleListener.java
+++ b/quickstep/src/com/android/launcher3/LauncherInitListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2022 The Android Open Source Project
+ * Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,23 +16,19 @@
package com.android.launcher3;
import android.animation.AnimatorSet;
-import android.annotation.Nullable;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.CancellationSignal;
import android.view.RemoteAnimationTarget;
import com.android.launcher3.uioverrides.QuickstepLauncher;
-import com.android.quickstep.util.ActivityLifecycleListener;
+import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.RemoteAnimationProvider;
import java.util.function.BiPredicate;
-/**
- * {@link ActivityLifecycleListener} for the in-launcher recents.
- */
@TargetApi(Build.VERSION_CODES.P)
-public class LauncherLifecycleListener extends ActivityLifecycleListener<Launcher> {
+public class LauncherInitListener extends ActivityInitListener<Launcher> {
private RemoteAnimationProvider mRemoteAnimationProvider;
@@ -40,16 +36,13 @@
* @param onInitListener a callback made when the activity is initialized. The callback should
* return true to continue receiving callbacks (ie. for if the activity is
* recreated).
- * @param onDestroyListener a callback made when the activity is destroyed.
*/
- public LauncherLifecycleListener(
- @Nullable BiPredicate<Launcher, Boolean> onInitListener,
- @Nullable Runnable onDestroyListener) {
- super(onInitListener, onDestroyListener, Launcher.ACTIVITY_TRACKER);
+ public LauncherInitListener(BiPredicate<Launcher, Boolean> onInitListener) {
+ super(onInitListener, Launcher.ACTIVITY_TRACKER);
}
@Override
- public boolean handleActivityReady(Launcher launcher, boolean alreadyOnHome) {
+ public boolean handleInit(Launcher launcher, boolean alreadyOnHome) {
if (mRemoteAnimationProvider != null) {
QuickstepTransitionManager appTransitionManager =
((QuickstepLauncher) launcher).getAppTransitionManager();
@@ -75,7 +68,7 @@
}, cancellationSignal);
}
launcher.deferOverlayCallbacksUntilNextResumeOrStop();
- return super.handleActivityReady(launcher, alreadyOnHome);
+ return super.handleInit(launcher, alreadyOnHome);
}
@Override
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index e41841a..3d8ffc4 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -50,7 +50,6 @@
import static com.android.quickstep.MultiStateCallback.DEBUG_STATES;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.CANCEL_RECENTS_ANIMATION;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.EXPECTING_TASK_APPEARED;
-import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.LAUNCHER_DESTROYED;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.ON_SETTLED_ON_END_TARGET;
import static com.android.quickstep.util.VibratorWrapper.OVERVIEW_HAPTIC;
import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;
@@ -114,7 +113,7 @@
import com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle;
import com.android.quickstep.util.ActiveGestureErrorDetector;
import com.android.quickstep.util.ActiveGestureLog;
-import com.android.quickstep.util.ActivityLifecycleListener;
+import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.AnimatorControllerWithResistance;
import com.android.quickstep.util.InputConsumerProxy;
import com.android.quickstep.util.InputProxyHandlerFactory;
@@ -160,7 +159,7 @@
protected final BaseActivityInterface<S, T> mActivityInterface;
protected final InputConsumerProxy mInputConsumerProxy;
- protected final ActivityLifecycleListener mActivityInitListener;
+ protected final ActivityInitListener mActivityInitListener;
// Callbacks to be made once the recents animation starts
private final ArrayList<Runnable> mRecentsAnimationStartCallbacks = new ArrayList<>();
private final OnScrollChangedListener mOnRecentsScrollListener = this::onRecentsViewScroll;
@@ -330,8 +329,7 @@
InputConsumerController inputConsumer) {
super(context, deviceState, gestureState);
mActivityInterface = gestureState.getActivityInterface();
- mActivityInitListener = mActivityInterface.createActivityLifecycleListener(
- this::onActivityInit, this::onActivityDestroy);
+ mActivityInitListener = mActivityInterface.createActivityInitListener(this::onActivityInit);
mInputConsumerProxy =
new InputConsumerProxy(context, /* rotationSupplier = */ () -> {
if (mRecentsView == null) {
@@ -522,11 +520,6 @@
return true;
}
- private void onActivityDestroy() {
- ActiveGestureLog.INSTANCE.addLog("Launcher activity destroyed", LAUNCHER_DESTROYED);
- onGestureCancelled();
- }
-
/**
* Return true if the window should be translated horizontally if the recents view scrolls
*/
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index 5523518..274b686 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -60,7 +60,7 @@
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.NavigationMode;
import com.android.launcher3.views.ScrimView;
-import com.android.quickstep.util.ActivityLifecycleListener;
+import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.AnimatorControllerWithResistance;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.recents.model.ThumbnailData;
@@ -123,17 +123,8 @@
public abstract AnimationFactory prepareRecentsUI(RecentsAnimationDeviceState deviceState,
boolean activityVisible, Consumer<AnimatorControllerWithResistance> callback);
- /**
- * Creates a activity listener for activity initialized and/or destroyed. One or both of these
- * listeners must be provided.
- *
- * @param onInitListener a callback made when the activity is initialized. The callback should
- * return true to continue receiving callbacks (ie. for if the activity is
- * recreated).
- * @param onDestroyListener a callback made when the activity is destroyed.
- */
- public abstract ActivityLifecycleListener createActivityLifecycleListener(
- @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener);
+ public abstract ActivityInitListener createActivityInitListener(
+ Predicate<Boolean> onInitListener);
/**
* Sets a callback to be run when an activity launch happens while launcher is not yet resumed.
diff --git a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
index a658566..ae9fb0b 100644
--- a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
@@ -36,7 +36,7 @@
import com.android.launcher3.util.DisplayController;
import com.android.quickstep.GestureState.GestureEndTarget;
import com.android.quickstep.fallback.RecentsState;
-import com.android.quickstep.util.ActivityLifecycleListener;
+import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.AnimatorControllerWithResistance;
import com.android.quickstep.views.RecentsView;
@@ -88,12 +88,10 @@
}
@Override
- public ActivityLifecycleListener createActivityLifecycleListener(
- @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener) {
- return new ActivityLifecycleListener<>(
- (activity, alreadyOnHome) -> onInitListener.test(alreadyOnHome),
- onDestroyListener,
- RecentsActivity.ACTIVITY_TRACKER);
+ public ActivityInitListener createActivityInitListener(
+ Predicate<Boolean> onInitListener) {
+ return new ActivityInitListener<>((activity, alreadyOnHome) ->
+ onInitListener.test(alreadyOnHome), RecentsActivity.ACTIVITY_TRACKER);
}
@Nullable
diff --git a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
index cb54d2e..9ff9416 100644
--- a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
@@ -37,7 +37,7 @@
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAnimUtils;
-import com.android.launcher3.LauncherLifecycleListener;
+import com.android.launcher3.LauncherInitListener;
import com.android.launcher3.LauncherState;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.statehandlers.DepthController;
@@ -49,7 +49,7 @@
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.NavigationMode;
import com.android.quickstep.GestureState.GestureEndTarget;
-import com.android.quickstep.util.ActivityLifecycleListener;
+import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.AnimatorControllerWithResistance;
import com.android.quickstep.util.LayoutUtils;
import com.android.quickstep.views.RecentsView;
@@ -136,10 +136,9 @@
}
@Override
- public ActivityLifecycleListener createActivityLifecycleListener(
- @Nullable Predicate<Boolean> onInitListener, @Nullable Runnable onDestroyListener) {
- return new LauncherLifecycleListener((activity, alreadyOnHome) ->
- onInitListener.test(alreadyOnHome), onDestroyListener);
+ public ActivityInitListener createActivityInitListener(Predicate<Boolean> onInitListener) {
+ return new LauncherInitListener((activity, alreadyOnHome) ->
+ onInitListener.test(alreadyOnHome));
}
@Override
diff --git a/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java b/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
index 0fdd8b5..60065fb 100644
--- a/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
+++ b/quickstep/src/com/android/quickstep/util/ActiveGestureErrorDetector.java
@@ -37,7 +37,7 @@
ON_SETTLED_ON_END_TARGET, START_RECENTS_ANIMATION, FINISH_RECENTS_ANIMATION,
CANCEL_RECENTS_ANIMATION, SET_ON_PAGE_TRANSITION_END_CALLBACK, CANCEL_CURRENT_ANIMATION,
CLEANUP_SCREENSHOT, SCROLLER_ANIMATION_ABORTED, TASK_APPEARED, EXPECTING_TASK_APPEARED,
- FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER, LAUNCHER_DESTROYED,
+ FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER,
/**
* These GestureEvents are specifically associated to state flags that get set in
@@ -162,13 +162,6 @@
+ "before/without setting end target to new task",
writer);
break;
- case LAUNCHER_DESTROYED:
- errorDetected |= printErrorIfTrue(
- true,
- prefix,
- /* errorMessage= */ "Launcher destroyed mid-gesture",
- writer);
- break;
case STATE_GESTURE_COMPLETED:
errorDetected |= printErrorIfTrue(
!encounteredEvents.contains(GestureEvent.MOTION_UP),
diff --git a/quickstep/src/com/android/quickstep/util/ActivityInitListener.java b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java
new file mode 100644
index 0000000..aeec36f
--- /dev/null
+++ b/quickstep/src/com/android/quickstep/util/ActivityInitListener.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.quickstep.util;
+
+import com.android.launcher3.BaseActivity;
+import com.android.launcher3.util.ActivityTracker;
+import com.android.launcher3.util.ActivityTracker.SchedulerCallback;
+
+import java.util.function.BiPredicate;
+
+public class ActivityInitListener<T extends BaseActivity> implements
+ SchedulerCallback<T> {
+
+ private BiPredicate<T, Boolean> mOnInitListener;
+ private final ActivityTracker<T> mActivityTracker;
+
+ private boolean mIsRegistered = false;
+
+ /**
+ * @param onInitListener a callback made when the activity is initialized. The callback should
+ * return true to continue receiving callbacks (ie. for if the activity is
+ * recreated).
+ */
+ public ActivityInitListener(BiPredicate<T, Boolean> onInitListener,
+ ActivityTracker<T> tracker) {
+ mOnInitListener = onInitListener;
+ mActivityTracker = tracker;
+ }
+
+ @Override
+ public final boolean init(T activity, boolean alreadyOnHome) {
+ if (!mIsRegistered) {
+ // Don't receive any more updates
+ return false;
+ }
+ return handleInit(activity, alreadyOnHome);
+ }
+
+ protected boolean handleInit(T activity, boolean alreadyOnHome) {
+ return mOnInitListener.test(activity, alreadyOnHome);
+ }
+
+ /**
+ * Registers the activity-created listener. If the activity is already created, then the
+ * callback provided in the constructor will be called synchronously.
+ */
+ public void register() {
+ mIsRegistered = true;
+ mActivityTracker.registerCallback(this);
+ }
+
+ /**
+ * After calling this, we won't {@link #init} even when the activity is ready.
+ */
+ public void unregister() {
+ mActivityTracker.unregisterCallback(this);
+ mIsRegistered = false;
+ mOnInitListener = null;
+ }
+}
diff --git a/quickstep/src/com/android/quickstep/util/ActivityLifecycleListener.java b/quickstep/src/com/android/quickstep/util/ActivityLifecycleListener.java
deleted file mode 100644
index 1edf188..0000000
--- a/quickstep/src/com/android/quickstep/util/ActivityLifecycleListener.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.quickstep.util;
-
-import android.util.Log;
-
-import androidx.annotation.Nullable;
-
-import com.android.launcher3.BaseActivity;
-import com.android.launcher3.util.ActivityTracker;
-import com.android.launcher3.util.ActivityTracker.SchedulerCallback;
-
-import java.util.function.BiPredicate;
-
-/**
- * Listener for activity initialized and/or destroyed.
- */
-public class ActivityLifecycleListener<T extends BaseActivity> implements
- SchedulerCallback<T> {
-
- private static final String TAG = "ActivityLifecycleListener";
-
- @Nullable private final BiPredicate<T, Boolean> mOnInitListener;
- @Nullable private final Runnable mOnDestroyListener;
- private final ActivityTracker<T> mActivityTracker;
-
- private boolean mIsRegistered = false;
-
- /**
- * One or both of {@code onInitListener} and {@code onInitListener} must be provided, otherwise
- * the created instance will effectively be a no-op.
- *
- * @param onInitListener a callback made when the activity is initialized. The callback should
- * return true to continue receiving callbacks (ie. for if the activity is
- * recreated).
- * @param onDestroyListener a callback made when the activity is destroyed.
- */
- public ActivityLifecycleListener(
- @Nullable BiPredicate<T, Boolean> onInitListener,
- @Nullable Runnable onDestroyListener,
- ActivityTracker<T> tracker) {
- if (onInitListener == null && onDestroyListener == null) {
- throw new IllegalArgumentException("Both listeners cannot be null");
- }
- mOnInitListener = onInitListener;
- mOnDestroyListener = onDestroyListener;
- mActivityTracker = tracker;
- }
-
- @Override
- public final boolean onActivityReady(T activity, boolean alreadyOnHome) {
- if (!mIsRegistered) {
- // Don't receive any more updates
- return false;
- }
- return handleActivityReady(activity, alreadyOnHome);
- }
-
- protected boolean handleActivityReady(T activity, boolean alreadyOnHome) {
- if (mOnInitListener == null) {
- Log.e(TAG, "Cannot handle init: init listener is null", new Exception());
- return false;
- }
- return mOnInitListener.test(activity, alreadyOnHome);
- }
-
- @Override
- public void onActivityDestroyed() {
- if (mOnDestroyListener == null) {
- Log.e(TAG, "Cannot clean up: destroy listener is null", new Exception());
- return;
- }
- mOnDestroyListener.run();
- }
-
- /**
- * Registers the activity-created listener. If the activity is already created, then the
- * callback provided in the constructor will be called synchronously.
- */
- public void register() {
- mIsRegistered = true;
- mActivityTracker.registerCallback(this, getType());
- }
-
- /**
- * After calling this, we won't call {@link #onActivityReady} even when the activity is ready.
- */
- public void unregister() {
- mActivityTracker.unregisterCallback(this, getType());
- mIsRegistered = false;
- }
-
- private int getType() {
- return mOnInitListener != null && mOnDestroyListener != null
- ? ActivityTracker.TYPE_BOTH
- : (mOnInitListener != null
- ? ActivityTracker.TYPE_INIT
- : ActivityTracker.TYPE_DESTROY);
- }
-}
diff --git a/src/com/android/launcher3/dragndrop/BaseItemDragListener.java b/src/com/android/launcher3/dragndrop/BaseItemDragListener.java
index 6d127b3..981e3a6 100644
--- a/src/com/android/launcher3/dragndrop/BaseItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/BaseItemDragListener.java
@@ -74,7 +74,7 @@
}
@Override
- public boolean onActivityReady(Launcher launcher, boolean alreadyOnHome) {
+ public boolean init(Launcher launcher, boolean alreadyOnHome) {
AbstractFloatingView.closeAllOpenViews(launcher, alreadyOnHome);
launcher.getStateManager().goToState(NORMAL, alreadyOnHome /* animated */);
launcher.getDragLayer().setOnDragListener(this);
diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
index fb924c1..af43ae8 100644
--- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
@@ -72,8 +72,8 @@
}
@Override
- public boolean onActivityReady(Launcher launcher, boolean alreadyOnHome) {
- super.onActivityReady(launcher, alreadyOnHome);
+ public boolean init(Launcher launcher, boolean alreadyOnHome) {
+ super.init(launcher, alreadyOnHome);
if (!alreadyOnHome) {
launcher.useFadeOutAnimationForLauncherStart(mCancelSignal);
}
diff --git a/src/com/android/launcher3/util/ActivityTracker.java b/src/com/android/launcher3/util/ActivityTracker.java
index 5f93a66..7af1a13 100644
--- a/src/com/android/launcher3/util/ActivityTracker.java
+++ b/src/com/android/launcher3/util/ActivityTracker.java
@@ -20,6 +20,8 @@
import com.android.launcher3.BaseActivity;
import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -28,15 +30,8 @@
*/
public final class ActivityTracker<T extends BaseActivity> {
- public static final int TYPE_INIT = 0;
- public static final int TYPE_DESTROY = 1;
- public static final int TYPE_BOTH = 2;
-
private WeakReference<T> mCurrentActivity = new WeakReference<>(null);
- private CopyOnWriteArrayList<SchedulerCallback<T>> mActivityReadyCallbacks =
- new CopyOnWriteArrayList<>();
- private CopyOnWriteArrayList<SchedulerCallback<T>> mActivityDestroyedCallbacks =
- new CopyOnWriteArrayList<>();
+ private CopyOnWriteArrayList<SchedulerCallback<T>> mCallbacks = new CopyOnWriteArrayList<>();
@Nullable
public <R extends T> R getCreatedActivity() {
@@ -47,74 +42,32 @@
if (mCurrentActivity.get() == activity) {
mCurrentActivity.clear();
}
- for (SchedulerCallback<T> cb : mActivityDestroyedCallbacks) {
- cb.onActivityDestroyed();
- unregisterCallback(cb, TYPE_DESTROY);
- }
}
- /** Registers an activity create callback. */
+ /**
+ * Call {@link SchedulerCallback#init(BaseActivity, boolean)} when the
+ * activity is ready. If the activity is already created, this is called immediately.
+ *
+ * The tracker maintains a strong ref to the callback, so it is up to the caller to return
+ * {@code false} in the callback OR to unregister the callback explicitly.
+ *
+ * @param callback The callback to call init() on when the activity is ready.
+ */
public void registerCallback(SchedulerCallback<T> callback) {
- registerCallback(callback, TYPE_INIT);
- }
-
- /**
- * Call {@link SchedulerCallback#onActivityReady(BaseActivity, boolean)} when the
- * activity is ready and/or {@link SchedulerCallback#onActivityDestroyed()} when the activity
- * is destroyed.
- *
- * If type is {@link ActivityTracker#TYPE_INIT} TYPE_INIT or
- * {@link ActivityTracker#TYPE_BOTH} and the activity is already created, this
- * {@link SchedulerCallback#onActivityReady(BaseActivity, boolean)} is called immediately.
- *
- * If type is {@link ActivityTracker#TYPE_DESTROY} or
- * {@link ActivityTracker#TYPE_BOTH} and the activity is already destroyed,
- * {@link SchedulerCallback#onActivityDestroyed()} is called immediately.
- *
- * The tracker maintains a strong ref to the callbacks, so it is up to the caller to return
- * {@code false} in {@link SchedulerCallback#onActivityReady(BaseActivity, boolean)} OR to
- * unregister the callback explicitly.
- *
- * @param callback The callback to call init() or cleanUp() on when the activity is ready or
- * destroyed.
- * @param type whether to use this callback on activity create, destroy or both.
- */
- public void registerCallback(SchedulerCallback<T> callback, int type) {
T activity = mCurrentActivity.get();
- if (type == TYPE_INIT || type == TYPE_BOTH) {
- mActivityReadyCallbacks.add(callback);
- if (activity != null) {
- if (!callback.onActivityReady(activity, activity.isStarted())) {
- unregisterCallback(callback, TYPE_INIT);
- }
+ mCallbacks.add(callback);
+ if (activity != null) {
+ if (!callback.init(activity, activity.isStarted())) {
+ unregisterCallback(callback);
}
}
- if (type == TYPE_DESTROY || type == TYPE_BOTH) {
- mActivityDestroyedCallbacks.add(callback);
- if (activity == null) {
- callback.onActivityDestroyed();
- unregisterCallback(callback, TYPE_DESTROY);
- }
- }
- }
-
- /**
- * Unregisters a registered activity create callback.
- */
- public void unregisterCallback(SchedulerCallback<T> callback) {
- unregisterCallback(callback, TYPE_INIT);
}
/**
* Unregisters a registered callback.
*/
- public void unregisterCallback(SchedulerCallback<T> callback, int type) {
- if (type == TYPE_INIT || type == TYPE_BOTH) {
- mActivityReadyCallbacks.remove(callback);
- }
- if (type == TYPE_DESTROY || type == TYPE_BOTH) {
- mActivityDestroyedCallbacks.remove(callback);
- }
+ public void unregisterCallback(SchedulerCallback<T> callback) {
+ mCallbacks.remove(callback);
}
public boolean handleCreate(T activity) {
@@ -128,8 +81,8 @@
private boolean handleIntent(T activity, boolean alreadyOnHome) {
boolean handled = false;
- for (SchedulerCallback<T> cb : mActivityReadyCallbacks) {
- if (!cb.onActivityReady(activity, alreadyOnHome)) {
+ for (SchedulerCallback<T> cb : mCallbacks) {
+ if (!cb.init(activity, alreadyOnHome)) {
// Callback doesn't want any more updates
unregisterCallback(cb);
}
@@ -145,11 +98,6 @@
* @param alreadyOnHome Whether the activity is already started.
* @return Whether to continue receiving callbacks (i.e. if the activity is recreated).
*/
- boolean onActivityReady(T activity, boolean alreadyOnHome);
-
- /**
- * Called then the activity gets destroyed.
- */
- default void onActivityDestroyed() { }
+ boolean init(T activity, boolean alreadyOnHome);
}
}