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());
         }
     }
 }