Reimplement QuickSwitch compat libs (#4084)

* Reimplement makeDefaultActivityOptions

* No need to post again

* Cleanups

* Tweak LawnchairQuickstepCompat

* Let compatLibVR depend on compatLibVQ

* Let compatLibVS depend on compatLibVR

* Cleanup compatLibVT

* Let compatLibVU depend on compatLibVT

* Add ActivityManagerCompatVS.getRunningTasks back

* Fix ActivityManagerCompatVS

* Don't return null running tasks

* Annotate getTaskSnapshot

* Fix style

* Retrun list from getRunningTasks

* Tweaks

* Cleanups

* null check

* Add ActivityManagerCompatVS.invalidateHomeTaskSnapshot back

* Move ThumbnailData

* Fixed err

* Cleanup

* Add RequiresApi

* Make RemoteTransitionCompat as an interface

* Annotate ActivityOptionsCompat

* More interfaces

* Replace aidl files with generated sources

* Reformat

* Revert "Replace aidl files with generated sources"

This reverts commit ee450e696d93bce5361224710d225b13c5a3127a.

Revert "Reformat"

This reverts commit 38c8f21ed3cd016e5bf58973483555bd44b3ef18.

* Use launcherNullable

* Fixes more crashes

---------

Co-authored-by: MrSluffy <werdna.jac@gmail.com>
This commit is contained in:
Zongle Wang
2024-03-10 11:24:14 +08:00
committed by GitHub
parent 0ca884dc25
commit bfb4ddfa48
34 changed files with 377 additions and 476 deletions
@@ -1,6 +1,5 @@
package app.lawnchair.compatlib.eleven;
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
import static android.app.ActivityTaskManager.getService;
import static android.graphics.Bitmap.Config.ARGB_8888;
@@ -19,20 +18,23 @@ import android.util.Log;
import android.view.IRecentsAnimationController;
import android.view.IRecentsAnimationRunner;
import android.view.RemoteAnimationTarget;
import app.lawnchair.compatlib.ActivityManagerCompat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.lawnchair.compatlib.RecentsAnimationRunnerCompat;
import java.util.ArrayList;
import app.lawnchair.compatlib.ten.ActivityManagerCompatVQ;
import java.util.Collections;
import java.util.List;
public class ActivityManagerCompatVR extends ActivityManagerCompat {
private static final String TAG = "ActivityManagerCompatVR";
@RequiresApi(30)
public class ActivityManagerCompatVR extends ActivityManagerCompatVQ {
@Override
public void invalidateHomeTaskSnapshot(Activity homeActivity) {
try {
ActivityTaskManager.getService()
.invalidateHomeTaskSnapshot(homeActivity.getActivityToken());
.invalidateHomeTaskSnapshot(
homeActivity == null ? null : homeActivity.getActivityToken());
} catch (RemoteException e) {
Log.w(TAG, "Failed to invalidate home snapshot", e);
}
@@ -78,6 +80,7 @@ public class ActivityManagerCompatVR extends ActivityManagerCompat {
}
}
@Nullable
@Override
public ActivityManager.RunningTaskInfo getRunningTask(boolean filterOnlyVisibleRecents) {
// Note: The set of running tasks from the system is ordered by recency
@@ -93,59 +96,18 @@ public class ActivityManagerCompatVR extends ActivityManagerCompat {
}
}
@NonNull
@Override
public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numTasks, int userId) {
public List<ActivityManager.RunningTaskInfo> getRunningTasks(boolean filterOnlyVisibleRecents) {
try {
return ActivityTaskManager.getService()
.getRecentTasks(numTasks, RECENT_IGNORE_UNAVAILABLE, userId)
.getList();
.getFilteredTasks(NUM_RECENT_ACTIVITIES_REQUEST, filterOnlyVisibleRecents);
} catch (RemoteException e) {
Log.e(TAG, "Failed to get recent tasks", e);
return new ArrayList<>();
return Collections.emptyList();
}
}
@Override
public ActivityManager.RunningTaskInfo[] getRunningTasks(boolean filterOnlyVisibleRecents) {
try {
List<ActivityManager.RunningTaskInfo> tasks =
ActivityTaskManager.getService()
.getFilteredTasks(
NUM_RECENT_ACTIVITIES_REQUEST, filterOnlyVisibleRecents);
if (tasks.isEmpty()) {
return null;
}
return tasks.toArray(new ActivityManager.RunningTaskInfo[tasks.size()]);
} catch (RemoteException e) {
return null;
}
}
public ThumbnailData getTaskThumbnail(int taskId, boolean isLowResolution) {
ActivityManager.TaskSnapshot snapshot = null;
try {
snapshot = ActivityTaskManager.getService().getTaskSnapshot(taskId, isLowResolution);
} catch (RemoteException e) {
Log.w(TAG, "Failed to retrieve task snapshot", e);
}
if (snapshot != null) {
return makeThumbnailData(snapshot);
} else {
return null;
}
}
public ThumbnailData takeScreenshot(
IRecentsAnimationController animationController, int taskId) {
try {
ActivityManager.TaskSnapshot snapshot = animationController.screenshotTask(taskId);
return snapshot != null ? makeThumbnailData(snapshot) : new ThumbnailData();
} catch (RemoteException e) {
Log.e(TAG, "Failed to screenshot task", e);
return new ThumbnailData();
}
}
public ThumbnailData makeThumbnailData(ActivityManager.TaskSnapshot snapshot) {
ThumbnailData data = new ThumbnailData();
final GraphicBuffer buffer = snapshot.getSnapshot();
@@ -174,27 +136,4 @@ public class ActivityManagerCompatVR extends ActivityManagerCompat {
data.snapshotId = snapshot.getId();
return data;
}
public ThumbnailData convertTaskSnapshotToThumbnailData(Object taskSnapshot) {
if (taskSnapshot != null) {
return makeThumbnailData((ActivityManager.TaskSnapshot) taskSnapshot);
} else {
return null;
}
}
public static class ThumbnailData {
public Bitmap thumbnail;
public int orientation;
public int rotation;
public Rect insets;
public boolean reducedResolution;
public boolean isRealSnapshot;
public boolean isTranslucent;
public int windowingMode;
public int systemUiVisibility;
public float scale;
public long snapshotId;
}
}
@@ -3,20 +3,23 @@ package app.lawnchair.compatlib.eleven;
import android.app.ActivityOptions;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.RemoteAnimationAdapter;
import app.lawnchair.compatlib.ActivityOptionsCompat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.lawnchair.compatlib.ten.ActivityOptionsCompatVQ;
public class ActivityOptionsCompatVR extends ActivityOptionsCompat {
private static final String TAG = "ActivityOptionsCompatVR";
@RequiresApi(30)
public class ActivityOptionsCompatVR extends ActivityOptionsCompatVQ {
@NonNull
@Override
public ActivityOptions makeCustomAnimation(
Context context,
@NonNull Context context,
int enterResId,
int exitResId,
Runnable callback,
Handler callbackHandler) {
@NonNull final Handler callbackHandler,
@Nullable final Runnable startedListener,
@Nullable final Runnable finishedListener) {
return ActivityOptions.makeCustomAnimation(
context,
enterResId,
@@ -25,20 +28,18 @@ public class ActivityOptionsCompatVR extends ActivityOptionsCompat {
new ActivityOptions.OnAnimationStartedListener() {
@Override
public void onAnimationStarted() {
if (callback != null) {
callbackHandler.post(callback);
if (startedListener != null) {
startedListener.run();
}
}
},
null /* finishedListener */);
}
@Override
public ActivityOptions makeRemoteAnimation(
RemoteAnimationAdapter remoteAnimationAdapter,
Object remoteTransition,
String debugName) {
Log.e(TAG, "makeRemoteAnimation: " + debugName);
return ActivityOptions.makeRemoteAnimation(remoteAnimationAdapter);
new ActivityOptions.OnAnimationFinishedListener() {
@Override
public void onAnimationFinished() {
if (finishedListener != null) {
finishedListener.run();
}
}
});
}
}
@@ -1,16 +1,13 @@
package app.lawnchair.compatlib.eleven;
import android.app.IApplicationThread;
import android.window.IRemoteTransition;
import android.window.RemoteTransition;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.lawnchair.compatlib.ActivityManagerCompat;
import app.lawnchair.compatlib.ActivityOptionsCompat;
import app.lawnchair.compatlib.QuickstepCompatFactory;
import app.lawnchair.compatlib.RemoteTransitionCompat;
import app.lawnchair.compatlib.ten.QuickstepCompatFactoryVQ;
public class QuickstepCompatFactoryVR extends QuickstepCompatFactory {
@RequiresApi(30)
public class QuickstepCompatFactoryVR extends QuickstepCompatFactoryVQ {
@NonNull
@Override
@@ -23,18 +20,4 @@ public class QuickstepCompatFactoryVR extends QuickstepCompatFactory {
public ActivityOptionsCompat getActivityOptionsCompat() {
return new ActivityOptionsCompatVR();
}
@NonNull
@Override
public RemoteTransitionCompat getRemoteTransitionCompat() {
return new RemoteTransitionCompat() {
@Override
public RemoteTransition getRemoteTransition(
@NonNull IRemoteTransition remoteTransition,
@Nullable IApplicationThread appThread,
@Nullable String debugName) {
return new RemoteTransition(remoteTransition, appThread, debugName);
}
};
}
}
@@ -9,7 +9,9 @@ import android.app.WindowConfiguration;
import android.os.RemoteException;
import android.util.Log;
import android.view.WindowManagerGlobal;
import androidx.annotation.RequiresApi;
@RequiresApi(30)
public class WindowManagerCompatVR {
public static final int NAV_BAR_POS_INVALID = NAV_BAR_INVALID;
public static final int NAV_BAR_POS_LEFT = NAV_BAR_LEFT;