diff --git a/README.md b/README.md index 12658f0..8d4209e 100644 --- a/README.md +++ b/README.md @@ -9,24 +9,17 @@ Contains some easy-to-use tools to go beyond the level of control allowed by And ⚠ SoundMaster may not work on apps with strong copyright protection, like Spotify. In case SoundMaster crashes and some apps lose sound output, use MixedAudio to unmute them. -- [x] **LookBack** - Allows downgrade of apps, without uninstallation. +- [x] **LookBack** - Allows downgrade of apps, without uninstallation. *Not an entirely stable feature.* +- [x] **UniversalPip** - Enforces Picture-in-Picture mode for all apps, even if they don't allow it. - [x] **ADB Shell** - Manually execute other raw ADB commands. -- [x] **Intent Shell** - Allows other apps (Tasker,MacroDroid,etc) to run ADB commands via intent requests. - - Intent action - `com.legendsayantan.adbtools.execute` - - Intent package - `com.legendsayantan.adbtools` - - Intent extras - - - i. `command` - The adb command to execute. - - ii. `key` - The access key generated by ShizuTools. +- [x] **Intent Shell** - Allows other apps (Tasker,MacroDroid,etc) to run ADB commands via intent requests. [How to use](https://github.com/legendsayantan/ShizuTools/wiki/IntentShell) #### This app is still on development phase, and not everything is always reliable. Feel free to suggest new features, report bugs or contribute to the project. ### Installation -Download the latest apk from [here](https://github.com/legendsayantan/ShizuTools/releases/latest). +Install the Latest Release Build from [here](https://github.com/legendsayantan/ShizuTools/releases/latest). + +Install the Latest Dev Build from [here](https://github.com/legendsayantan/ShizuTools/blob/master/app/release/app-release.apk) ### License This project is licensed under GNU General Public License v3.0. diff --git a/app/build.gradle b/app/build.gradle index 7b2e161..c54a942 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { minSdk 27 targetSdk 34 versionCode 1 - versionName "1.4.2" + versionName "1.4.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 3334ef2..af92463 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 784175a..19867b6 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -12,7 +12,7 @@ "filters": [], "attributes": [], "versionCode": 1, - "versionName": "1.4.2", + "versionName": "1.4.3", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/com/legendsayantan/adbtools/PipStarterActivity.kt b/app/src/main/java/com/legendsayantan/adbtools/PipStarterActivity.kt index 4a5925b..0edb448 100644 --- a/app/src/main/java/com/legendsayantan/adbtools/PipStarterActivity.kt +++ b/app/src/main/java/com/legendsayantan/adbtools/PipStarterActivity.kt @@ -2,6 +2,7 @@ package com.legendsayantan.adbtools import android.content.Context import android.os.Bundle +import android.os.Handler import android.view.KeyEvent import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity @@ -33,12 +34,16 @@ class PipStarterActivity : AppCompatActivity() { arrayOf(KeyEvent.KEYCODE_MEDIA_FAST_FORWARD,KeyEvent.KEYCODE_DPAD_RIGHT), arrayOf(KeyEvent.KEYCODE_MEDIA_NEXT) ) - controls.forEachIndexed { index, materialCardView -> - materialCardView.setOnClickListener { - keys[index].forEach { key -> - getExternalWindowId { window-> ShizukuRunner.runAdbCommand("input -d $window keyevent $key", - object : ShizukuRunner.CommandResultListener {}) } - interacted() + getExternalDisplayId { display-> + Handler(mainLooper).post { + controls.forEachIndexed { index, materialCardView -> + materialCardView.setOnClickListener { + keys[index].forEach { key -> + ShizukuRunner.runAdbCommand("input -d $display keyevent $key", + object : ShizukuRunner.CommandResultListener {}) + interacted() + } + } } } } @@ -49,7 +54,7 @@ class PipStarterActivity : AppCompatActivity() { extraBtns[0].setOnClickListener { interacted() val metrics = getWindowParams() - getExternalWindowId { + getExternalDisplayId { ShizukuRunner.runAdbCommand("input -d $it tap ${(metrics.first * 0.95).toInt()} ${(metrics.second*0.86).toInt()}", object : ShizukuRunner.CommandResultListener {}) } @@ -95,7 +100,7 @@ class PipStarterActivity : AppCompatActivity() { val metrics = resources.displayMetrics return Pair(metrics.widthPixels,((metrics.widthPixels / (metrics.heightPixels.toFloat() / metrics.widthPixels)) + 100).toInt()) } - fun getExternalWindowId(callback:(Int)->Unit){ + fun getExternalDisplayId(callback:(Int)->Unit){ ShizukuRunner.runAdbCommand("dumpsys display | grep 'Display [0-9][0-9]*'", object : ShizukuRunner.CommandResultListener { @@ -160,7 +165,7 @@ class PipStarterActivity : AppCompatActivity() { ) { if (done) { Timer().schedule(timerTask { - getExternalWindowId { newDisplayId-> + getExternalDisplayId { newDisplayId-> val command = "am start -n $packageName/${PipStarterActivity::class.java.canonicalName} --es package $pipPackage --display $newDisplayId" ShizukuRunner.runAdbCommand( diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b42942a..97fa210 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -429,6 +429,10 @@ + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5bdf3a0..2f3fd80 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -59,5 +59,5 @@ Permission error! Open the shizuku app to learn more. Shizuku Error! UniversalPip beta - Switch apps to picture-in-picture mode forcefully. + Switch apps to picture-in-picture mode even if they don\'t allow it. \ No newline at end of file