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 ee450e696d.

Revert "Reformat"

This reverts commit 38c8f21ed3.

* 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

View File

@@ -3,38 +3,63 @@ package app.lawnchair.compatlib;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.view.IRecentsAnimationController;
import android.window.TaskSnapshot;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import java.util.List;
public abstract class ActivityManagerCompat {
public interface ActivityManagerCompat {
int NUM_RECENT_ACTIVITIES_REQUEST = 3;
public static final int NUM_RECENT_ACTIVITIES_REQUEST = 3;
void invalidateHomeTaskSnapshot(final Activity homeActivity);
public abstract void invalidateHomeTaskSnapshot(final Activity homeActivity);
void startRecentsActivity(
Intent intent, long eventTime, RecentsAnimationRunnerCompat runnerCompat);
/**
* Called only in S+ platform
*
* @param taskId
* @param isLowResolution
* @param takeSnapshotIfNeeded
* @return
*/
@Nullable
public TaskSnapshot getTaskSnapshot(
@RequiresApi(31)
default TaskSnapshot getTaskSnapshot(
int taskId, boolean isLowResolution, boolean takeSnapshotIfNeeded) {
return null;
}
public abstract void startRecentsActivity(
Intent intent, long eventTime, RecentsAnimationRunnerCompat runnerCompat);
default ThumbnailData getTaskThumbnail(int taskId, boolean isLowResolution) {
return null;
}
public abstract ActivityManager.RunningTaskInfo getRunningTask(
boolean filterOnlyVisibleRecents);
default ThumbnailData takeScreenshot(
IRecentsAnimationController animationController, int taskId) {
return null;
}
public abstract List<ActivityManager.RecentTaskInfo> getRecentTasks(int numTasks, int userId);
default ThumbnailData convertTaskSnapshotToThumbnailData(Object taskSnapshot) {
return null;
}
public abstract ActivityManager.RunningTaskInfo[] getRunningTasks(
boolean filterOnlyVisibleRecents);
@Nullable
ActivityManager.RunningTaskInfo getRunningTask(boolean filterOnlyVisibleRecents);
@NonNull
List<ActivityManager.RunningTaskInfo> getRunningTasks(boolean filterOnlyVisibleRecents);
@NonNull
List<ActivityManager.RecentTaskInfo> getRecentTasks(int numTasks, int userId);
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;
}
}

View File

@@ -4,17 +4,23 @@ import android.app.ActivityOptions;
import android.content.Context;
import android.os.Handler;
import android.view.RemoteAnimationAdapter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public abstract class ActivityOptionsCompat {
public abstract ActivityOptions makeCustomAnimation(
Context context,
public interface ActivityOptionsCompat {
@NonNull
ActivityOptions makeCustomAnimation(
@NonNull Context context,
int enterResId,
int exitResId,
final Runnable callback,
final Handler callbackHandler);
@NonNull final Handler callbackHandler,
@Nullable final Runnable startedListener,
@Nullable final Runnable finishedListener);
public abstract ActivityOptions makeRemoteAnimation(
RemoteAnimationAdapter remoteAnimationAdapter,
Object remoteTransition,
String debugName);
@NonNull
ActivityOptions makeRemoteAnimation(
@Nullable RemoteAnimationAdapter remoteAnimationAdapter,
@Nullable Object remoteTransition,
@Nullable String debugName);
}

View File

@@ -2,14 +2,14 @@ package app.lawnchair.compatlib;
import androidx.annotation.NonNull;
public abstract class QuickstepCompatFactory {
public interface QuickstepCompatFactory {
@NonNull
public abstract ActivityManagerCompat getActivityManagerCompat();
ActivityManagerCompat getActivityManagerCompat();
@NonNull
public abstract ActivityOptionsCompat getActivityOptionsCompat();
ActivityOptionsCompat getActivityOptionsCompat();
@NonNull
public abstract RemoteTransitionCompat getRemoteTransitionCompat();
RemoteTransitionCompat getRemoteTransitionCompat();
}

View File

@@ -1,14 +1,14 @@
package app.lawnchair.compatlib;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.IApplicationThread;
import android.window.IRemoteTransition;
import android.window.RemoteTransition;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public abstract class RemoteTransitionCompat {
public interface RemoteTransitionCompat {
public abstract RemoteTransition getRemoteTransition(
RemoteTransition getRemoteTransition(
@NonNull IRemoteTransition remoteTransition,
@Nullable IApplicationThread appThread,
@Nullable String debugName);