optimize QuickStartAppView
remove method: setFloatingButtonCoordinate
use startActivityFromRecents to start activity in recents list
Signed-off-by: cjybyjk <cjybyjk@gmail.com>
diff --git a/app/src/main/java/org/exthmui/game/services/OverlayService.java b/app/src/main/java/org/exthmui/game/services/OverlayService.java
index 1bab742..8e5f570 100644
--- a/app/src/main/java/org/exthmui/game/services/OverlayService.java
+++ b/app/src/main/java/org/exthmui/game/services/OverlayService.java
@@ -144,7 +144,6 @@
if (mWindowManager != null) {
mWindowManager.updateViewLayout(mGamingFloatingButton, mGamingFBLayoutParams);
}
- mQSAppView.setFloatingButtonCoordinate(mGamingFBLayoutParams.x, mGamingFBLayoutParams.y);
}
// 弹幕设置
@@ -240,9 +239,6 @@
.putInt(Constants.LocalConfigKeys.FLOATING_BUTTON_COORDINATE_HORIZONTAL_Y, mGamingFBLayoutParams.y)
.apply();
}
- if (mQSAppView != null) {
- mQSAppView.setFloatingButtonCoordinate(mGamingFBLayoutParams.x, mGamingFBLayoutParams.y);
- }
}
isMoved = false;
break;
diff --git a/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java b/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
index 7f3933c..8439485 100644
--- a/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
+++ b/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
@@ -16,6 +16,7 @@
package org.exthmui.game.ui;
+import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.WindowConfiguration;
import android.content.Context;
@@ -24,12 +25,15 @@
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
+import android.os.RemoteException;
import android.os.UserHandle;
+import android.util.ArrayMap;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.LinearLayout;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
@@ -37,13 +41,15 @@
import org.exthmui.game.misc.Constants;
import org.exthmui.game.qs.AppTile;
+import java.util.List;
+
public class QuickStartAppView extends LinearLayout implements View.OnClickListener {
private Context mContext;
private PackageManager mPackageManager;
+ private ActivityManager mActivityManager;
private ActivityOptions mActivityOptions;
private Intent mHideMenuIntent = new Intent(Constants.Broadcasts.BROADCAST_GAMING_MENU_CONTROL).putExtra("cmd", "hide");
- int left, right, top, bottom;
public QuickStartAppView(Context context) {
this(context, null);
@@ -61,6 +67,7 @@
super(context, attrs, defStyleAttr, defStyleRes);
mContext = context;
+ mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
mPackageManager = mContext.getPackageManager();
this.setDividerDrawable(context.getDrawable(R.drawable.qs_divider));
@@ -87,7 +94,7 @@
}
}
- public void setFloatingButtonCoordinate(int x, int y) {
+ private void startActivity(@NonNull String packageName) {
DisplayMetrics m = mContext.getResources().getDisplayMetrics();
int width, height;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
@@ -99,10 +106,29 @@
height = m.heightPixels - 200;
width = height * 4 / 3;
}
- left = 100;
- right = left + width;
- top = 150;
- bottom = top + height;
+ int left = 100;
+ int right = left + width;
+ int top = 100;
+ int bottom = top + height;
+ mActivityOptions.setLaunchBounds(new Rect(left, top, right, bottom));
+
+ try {
+ List<ActivityManager.RecentTaskInfo> recentTaskInfoList = mActivityManager.getRecentTasks(100, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+ for (ActivityManager.RecentTaskInfo info : recentTaskInfoList) {
+ if (info.isRunning && info.topActivity != null && packageName.equals(info.topActivity.getPackageName())) {
+ mActivityManager.getService().startActivityFromRecents(info.taskId, mActivityOptions.toBundle());
+ return;
+ }
+ }
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(packageName);
+ startAppIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+ startAppIntent.setPackage(null);
+ mContext.startActivityAsUser(startAppIntent, mActivityOptions.toBundle(), UserHandle.CURRENT);
+
}
@Override
@@ -110,13 +136,7 @@
if (v instanceof AppTile) {
AppTile appTile = (AppTile) v;
LocalBroadcastManager.getInstance(mContext).sendBroadcastSync(mHideMenuIntent);
- Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(appTile.getKey());
- startAppIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
- startAppIntent.setPackage(null);
- Rect appWindowRect = new Rect(left, top, right, bottom);
- mActivityOptions.setLaunchBounds(appWindowRect);
- mContext.startActivityAsUser(startAppIntent, mActivityOptions.toBundle(), UserHandle.CURRENT);
-
+ startActivity(appTile.getKey());
}
}
}