QuickSwitch Compat Q to U (#3948)

Initial support quickstep, Android versions from Q to U, ensuring a smooth and efficient user experience. Enjoy effortless navigation and swift app switching on your Android device with QuickSwitch's compatibility across the Q, R, S, T, and U.


Co-authored-by: Goooler <wangzongler@gmail.com>
Co-authored-by: 无言 <57122860+liu-wanshun@users.noreply.github.com>
This commit is contained in:
John Andrew Camu
2024-01-26 05:59:47 +08:00
committed by GitHub
parent f63aa1e315
commit c31b41ae73
111 changed files with 4549 additions and 604 deletions
@@ -0,0 +1,78 @@
package app.lawnchair.compatlib.thirteen;
import static android.app.ActivityTaskManager.getService;
import android.app.ActivityTaskManager;
import android.content.Intent;
import android.graphics.Rect;
import android.os.RemoteException;
import android.util.Log;
import android.view.IRecentsAnimationController;
import android.view.IRecentsAnimationRunner;
import android.view.RemoteAnimationTarget;
import android.window.TaskSnapshot;
import app.lawnchair.compatlib.RecentsAnimationRunnerCompat;
import app.lawnchair.compatlib.twelve.ActivityManagerCompatVS;
public class ActivityManagerCompatVT extends ActivityManagerCompatVS {
private static final String TAG = "ActivityManagerCompatVT";
private final ActivityTaskManager mAtm = ActivityTaskManager.getInstance();
@Override
public void startRecentsActivity(
Intent intent, long eventTime, RecentsAnimationRunnerCompat runnerCompat) {
IRecentsAnimationRunner runner = null;
if (runnerCompat != null) {
runner =
new IRecentsAnimationRunner.Stub() {
@Override
public void onAnimationStart(
IRecentsAnimationController controller,
RemoteAnimationTarget[] apps,
RemoteAnimationTarget[] wallpapers,
Rect homeContentInsets,
Rect minimizedHomeBounds) {
runnerCompat.onAnimationStart(
controller,
apps,
wallpapers,
homeContentInsets,
minimizedHomeBounds);
}
@Override
public void onAnimationCanceled(
int[] taskIds, TaskSnapshot[] taskSnapshots) {
runnerCompat.onAnimationCanceled(taskIds, taskSnapshots);
}
@Override
public void onTasksAppeared(RemoteAnimationTarget[] apps) {
runnerCompat.onTasksAppeared(apps);
}
};
}
try {
getService().startRecentsActivity(intent, eventTime, runner);
} catch (RemoteException e) {
Log.e(TAG, "Failed to cancel recents animation", e);
}
}
@Override
public TaskSnapshot getTaskSnapshot(
int taskId, boolean isLowResolution, boolean takeSnapshotIfNeeded) {
try {
// android13 qpr1
return getService()
.getTaskSnapshot(taskId, isLowResolution, true /* takeSnapshotIfNeeded */);
} catch (RemoteException e) {
Log.e(TAG, "Failed to getTaskSnapshot", e);
return null;
} catch (NoSuchMethodError e) {
// android13/12
return super.getTaskSnapshot(taskId, isLowResolution, takeSnapshotIfNeeded);
}
}
}
@@ -0,0 +1,34 @@
package app.lawnchair.compatlib.thirteen;
import android.app.ActivityOptions;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.RemoteAnimationAdapter;
import android.window.RemoteTransition;
import app.lawnchair.compatlib.twelve.ActivityOptionsCompatVS;
public class ActivityOptionsCompatVT extends ActivityOptionsCompatVS {
private static final String TAG = "ActivityOptionsCompatVT";
@Override
public ActivityOptions makeCustomAnimation(
Context context,
int enterResId,
int exitResId,
Runnable callback,
Handler callbackHandler) {
return super.makeCustomAnimation(context, enterResId, exitResId, callback, callbackHandler);
}
@Override
public ActivityOptions makeRemoteAnimation(
RemoteAnimationAdapter remoteAnimationAdapter,
Object remoteTransition,
String debugName) {
Log.e(TAG, "makeRemoteAnimation: " + debugName);
return ActivityOptions.makeRemoteAnimation(
remoteAnimationAdapter, (RemoteTransition) remoteTransition);
}
}
@@ -0,0 +1,40 @@
package app.lawnchair.compatlib.thirteen;
import android.app.IApplicationThread;
import android.window.IRemoteTransition;
import android.window.RemoteTransition;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.lawnchair.compatlib.ActivityManagerCompat;
import app.lawnchair.compatlib.ActivityOptionsCompat;
import app.lawnchair.compatlib.RemoteTransitionCompat;
import app.lawnchair.compatlib.twelve.QuickstepCompatFactoryVS;
public class QuickstepCompatFactoryVT extends QuickstepCompatFactoryVS {
@NonNull
@Override
public ActivityManagerCompat getActivityManagerCompat() {
return new ActivityManagerCompatVT();
}
@NonNull
@Override
public ActivityOptionsCompat getActivityOptionsCompat() {
return new ActivityOptionsCompatVT();
}
@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);
}
};
}
}