From efd5391ef89e37f520a8c8c4f816f7be31dc9f0c Mon Sep 17 00:00:00 2001 From: androidacy-user Date: Tue, 27 Dec 2022 20:11:48 -0500 Subject: [PATCH] add zip handler to start install from a diff app Signed-off-by: androidacy-user --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 29 +++++-- .../com/fox2code/mmm/NotificationType.java | 2 +- .../mmm/androidacy/AndroidacyRepoData.java | 1 - .../mmm/installer/InstallerActivity.java | 10 ++- .../com/fox2code/mmm/utils/ZipFileOpener.java | 75 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 +- 7 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/fox2code/mmm/utils/ZipFileOpener.java diff --git a/app/build.gradle b/app/build.gradle index f75e916..c2c107b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -250,6 +250,7 @@ configurations { dependencies { // UI implementation 'androidx.appcompat:appcompat:1.5.1' + implementation "androidx.activity:activity:1.7.0-alpha02" implementation 'androidx.emoji2:emoji2:1.2.0' implementation 'androidx.emoji2:emoji2-views-helper:1.2.0' implementation 'androidx.preference:preference:1.2.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 134a051..dfa3971 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,8 @@ - + @@ -12,7 +13,8 @@ - + @@ -23,9 +25,7 @@ - + @@ -83,6 +83,19 @@ --> + + + + + + + + + + diff --git a/app/src/main/java/com/fox2code/mmm/NotificationType.java b/app/src/main/java/com/fox2code/mmm/NotificationType.java index 51b0de9..3d0017a 100644 --- a/app/src/main/java/com/fox2code/mmm/NotificationType.java +++ b/app/src/main/java/com/fox2code/mmm/NotificationType.java @@ -149,7 +149,7 @@ public enum NotificationType implements NotificationTypeCst { } }; - private static boolean needPatch(File target) throws IOException { + public static boolean needPatch(File target) throws IOException { try (ZipFile zipFile = new ZipFile(target)) { return zipFile.getEntry("module.prop") == null && zipFile.getEntry("anykernel.sh") == null && diff --git a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java index 0564ed4..2116f09 100644 --- a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java +++ b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyRepoData.java @@ -182,7 +182,6 @@ public final class AndroidacyRepoData extends RepoData { try { HttpURLConnection connection = (HttpURLConnection) new URL("https://" + this.host + "/ping").openConnection(); connection.setRequestMethod("GET"); - connection.setConnectTimeout(5000); connection.setReadTimeout(5000); connection.connect(); if (connection.getResponseCode() != 200 && connection.getResponseCode() != 204) { diff --git a/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java b/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java index 09bf325..0eb3143 100644 --- a/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java +++ b/app/src/main/java/com/fox2code/mmm/installer/InstallerActivity.java @@ -1,5 +1,6 @@ package com.fox2code.mmm.installer; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Color; @@ -21,6 +22,7 @@ import com.fox2code.foxcompat.FoxActivity; import com.fox2code.mmm.AppUpdateManager; import com.fox2code.mmm.BuildConfig; import com.fox2code.mmm.Constants; +import com.fox2code.mmm.MainActivity; import com.fox2code.mmm.MainApplication; import com.fox2code.mmm.R; import com.fox2code.mmm.XHooks; @@ -744,6 +746,7 @@ public class InstallerActivity extends FoxActivity { return compatInstallScript; } + @SuppressLint("RestrictedApi") @SuppressWarnings("SameParameterValue") private void setInstallStateFinished(boolean success, String message, String optionalLink) { this.installerTerminal.disableAnsi(); @@ -755,7 +758,12 @@ public class InstallerActivity extends FoxActivity { } else toDelete = null; this.runOnUiThread(() -> { this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 0); - this.setOnBackPressedCallback(null); + // Set the back press to finish the activity and return to the main activity + this.setOnBackPressedCallback(a -> { + this.finishAndRemoveTask(); + startActivity(new Intent(this, MainActivity.class)); + return true; + }); this.setDisplayHomeAsUpEnabled(true); this.progressIndicator.setVisibility(View.GONE); diff --git a/app/src/main/java/com/fox2code/mmm/utils/ZipFileOpener.java b/app/src/main/java/com/fox2code/mmm/utils/ZipFileOpener.java new file mode 100644 index 0000000..c6a0791 --- /dev/null +++ b/app/src/main/java/com/fox2code/mmm/utils/ZipFileOpener.java @@ -0,0 +1,75 @@ +package com.fox2code.mmm.utils; + +import static androidx.fragment.app.FragmentManager.TAG; + +import android.annotation.SuppressLint; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.widget.Toast; + +import com.fox2code.foxcompat.FoxActivity; +import com.fox2code.mmm.BuildConfig; +import com.fox2code.mmm.R; +import com.fox2code.mmm.installer.InstallerInitializer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; + +public class ZipFileOpener extends FoxActivity { + // Adds us as a handler for zip files, so we can pass them to the installer + // We should have a content uri provided to us. + @SuppressLint("RestrictedApi") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (BuildConfig.DEBUG) { + Log.d("ZipFileOpener", "onCreate: " + getIntent()); + } + File zipFile; + Uri uri = getIntent().getData(); + if (uri == null) { + Toast.makeText(this, R.string.zip_load_failed, Toast.LENGTH_LONG).show(); + finish(); + return; + } + // Try to copy the file to our cache + try { + zipFile = File.createTempFile("module", ".zip", getCacheDir()); + try (InputStream inputStream = getContentResolver().openInputStream(uri); FileOutputStream outputStream = new FileOutputStream(zipFile)) { + if (inputStream == null) { + Log.e(TAG, "onCreate: Failed to open input stream"); + Toast.makeText(this, R.string.zip_load_failed, Toast.LENGTH_LONG).show(); + finishAndRemoveTask(); + return; + } + byte[] buffer = new byte[4096]; + int read; + while ((read = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, read); + } + } + } catch ( + Exception e) { + Log.e(TAG, "onCreate: Failed to copy zip file", e); + Toast.makeText(this, R.string.zip_load_failed, Toast.LENGTH_LONG).show(); + finishAndRemoveTask(); + return; + } + // Ensure zip is not empty + if (zipFile.length() == 0) { + Log.e(TAG, "onCreate: Zip file is empty"); + Toast.makeText(this, R.string.zip_load_failed, Toast.LENGTH_LONG).show(); + finishAndRemoveTask(); + return; + } + // Pass the file to the installer + FoxActivity compatActivity = FoxActivity.getFoxActivity(this); + IntentHelper.openInstaller(compatActivity, zipFile.getAbsolutePath(), + compatActivity.getString( + R.string.local_install_title), null, null, false, + BuildConfig.DEBUG && // Use debug mode if no root + InstallerInitializer.peekMagiskPath() == null); + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2210bba..8aaf1fc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -267,5 +267,5 @@ This app is outdated. Please update the app to the latest version. Your webview is outdated! Please update it.Don\'t see your language?Help us by translating it! Tap here to find out more. - Commit %1$s @ %2$s + Commit %1$s @ %2$sNo file was provided when trying to open zip.Could not load the zip file