From b6a9620f5512b2caa1fa360e053ac06edcbecfeb Mon Sep 17 00:00:00 2001
From: duanchao <11104346@bbktel.com>
Date: Thu, 29 Feb 2024 15:52:51 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BA=91=E7=9C=9F=E6=9C=BAad?=
 =?UTF-8?q?b=20push=E5=90=8E=E6=9C=AC=E5=9C=B0=E5=AE=89=E8=A3=85=E5=BF=AB?=
 =?UTF-8?q?=E5=BA=94=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../hapjs/debugger/debug/AppDebugManager.java | 53 +++++++++++++++++--
 .../debugger/fragment/DebugFragment.java      | 14 ++++-
 2 files changed, 60 insertions(+), 7 deletions(-)

diff --git a/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/debug/AppDebugManager.java b/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/debug/AppDebugManager.java
index b92d1b8e..f347926b 100644
--- a/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/debug/AppDebugManager.java
+++ b/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/debug/AppDebugManager.java
@@ -26,6 +26,7 @@
 import android.widget.Toast;
 import androidx.core.content.FileProvider;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -178,7 +179,15 @@ public void updateOnline(String url) {
     }
 
     public void installLocally(Uri uri) {
-        mHandler.obtainMessage(MSG_INSTALL_LOCALLY, uri).sendToTarget();
+        Message message = mHandler.obtainMessage(MSG_INSTALL_LOCALLY, uri);
+        message.arg1 = 0;
+        mHandler.sendMessage(message);
+    }
+
+    public void installLocallyFromAdb(String rpkPath) {
+        Message message = mHandler.obtainMessage(MSG_INSTALL_LOCALLY, rpkPath);
+        message.arg1 = 1;
+        mHandler.sendMessage(message);
     }
 
     public void startDebugging(String pkg, String server, String target) {
@@ -297,6 +306,35 @@ private void onInstallLocally(Uri uri) {
         }
     }
 
+    private void onInstallLocallyFromAdb(String rpkPath) {
+        Log.e(TAG, "rpkPath: " + rpkPath);
+        if (TextUtils.isEmpty(rpkPath)) {
+            return;
+        }
+        File tempFile = createTempFile();
+        if (tempFile != null) {
+            Log.e(TAG, "tempFile: " + tempFile.getAbsolutePath());
+            InputStream in = null;
+            try {
+                in = new FileInputStream(rpkPath);
+                boolean success = FileUtils.saveToFile(in, tempFile);
+                if (success) {
+                    mRetryRpkFile = tempFile;
+                    installPackageInPlatform(tempFile);
+                    return;
+                }
+            } catch (FileNotFoundException e) {
+                Log.e(TAG, "Fail to save local file", e);
+                onError(ERROR_CODE_FAIL_TO_SAVE_LOCAL_FILE);
+            } finally {
+                FileUtils.closeQuietly(in);
+            }
+            tempFile.delete();
+        } else {
+            onError(ERROR_CODE_FAIL_TO_CREATE_TEMP_FILE);
+        }
+    }
+
     private boolean isOtherFileExceptRpk(Uri uri) {
         if (mActivityRf != null) {
             final Activity activity = mActivityRf.get();
@@ -653,9 +691,14 @@ public void handleMessage(Message msg) {
                         getServer();
                         break;
                     }
-
-                    Uri uri = (Uri) msg.obj;
-                    onInstallLocally(uri);
+                    boolean isFromAdb = msg.arg1 == 1;
+                    if (isFromAdb) {
+                        String rpkPath = (String) msg.obj;
+                        onInstallLocallyFromAdb(rpkPath);
+                    } else {
+                        Uri uri = (Uri) msg.obj;
+                        onInstallLocally(uri);
+                    }
                     break;
                 }
                 case MSG_START_DEBUGGING: {
@@ -734,4 +777,4 @@ public void handleMessage(Message msg) {
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/fragment/DebugFragment.java b/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/fragment/DebugFragment.java
index a34a3348..794f5c6e 100644
--- a/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/fragment/DebugFragment.java
+++ b/debug/shell/android/app-impl/src/main/java/org/hapjs/debugger/fragment/DebugFragment.java
@@ -81,6 +81,7 @@ public abstract class DebugFragment extends Fragment implements AdapterView.OnIt
     private static final String EXTRA_IDE_PATH = "path";
     private static final String EXTRA_IDE_DEBUG = "debug";
     private static final String EXTRA_IDE_IS_ADJUSTED = "isAdjustedIde";
+    private static final String EXTRA_RPK_ADDRESS = "rpk_address";
     private static final String SCAN_PARAMS_TARGET = "target";
     private static final String SCAN_TARGET_VALUE_SKELETON = "skeleton";
     protected boolean mIsIdeDebug;
@@ -208,8 +209,17 @@ protected void handleIDERequest(Intent intent) {
             String path = intent.getStringExtra(EXTRA_IDE_PATH);
             mIsIdeDebug = intent.getBooleanExtra(EXTRA_IDE_DEBUG, false);
             boolean isAdjustedIde = intent.getBooleanExtra(EXTRA_IDE_IS_ADJUSTED, false);
+            String rpk_address = intent.getStringExtra(EXTRA_RPK_ADDRESS);
 
-            if (!TextUtils.isEmpty(path)) {
+            if (!TextUtils.isEmpty(rpk_address)) {
+                getActivity().setIntent(null);
+                Log.i(TAG, "handleIDERequest() -- rpk_address:" + rpk_address);
+                if (!rpk_address.toLowerCase().startsWith("http")
+                        && !rpk_address.toLowerCase().startsWith("https")) {
+                    Log.e(TAG, "handleIDERequest() -- installLocallyFromAdb");
+                    AppDebugManager.getInstance(getActivity()).installLocallyFromAdb(rpk_address);
+                }
+            } else if (!TextUtils.isEmpty(path)) {
                 getActivity().setIntent(null);
                 PreferenceUtils.setServer(getActivity(), path);
                 PreferenceUtils.setUniversalScan(getActivity(), false);
@@ -689,4 +699,4 @@ public void run() {
             });
         }
     }
-}
+}
\ No newline at end of file