Skip to content

Commit bab0b21

Browse files
added error logs
1 parent 349e50d commit bab0b21

23 files changed

+487
-71
lines changed

app/build.gradle

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ android {
2929
kotlinOptions {
3030
jvmTarget = '1.8'
3131
}
32+
buildFeatures {
33+
viewBinding true
34+
}
3235
}
3336

3437
dependencies {
@@ -40,6 +43,8 @@ dependencies {
4043
implementation 'com.google.android.material:material:1.12.0'
4144
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
4245
implementation 'androidx.activity:activity-ktx:1.9.0'
46+
implementation 'androidx.navigation:navigation-fragment:2.8.1'
47+
implementation 'androidx.navigation:navigation-ui:2.8.1'
4348

4449
testImplementation 'junit:junit:4.13.2'
4550
androidTestImplementation 'androidx.test.ext:junit:1.1.5'

app/release/app-release.apk

530 KB
Binary file not shown.

app/src/main/AndroidManifest.xml

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
android:supportsRtl="true"
3030
android:theme="@style/Theme.AdbTools"
3131
tools:targetApi="31">
32+
<activity
33+
android:name=".ExceptionActivity"
34+
android:exported="false"
35+
android:theme="@style/Theme.AdbTools" />
36+
3237
<receiver
3338
android:name=".receivers.PipReceiver"
3439
android:enabled="true"

app/src/main/java/com/legendsayantan/adbtools/DebloatActivity.kt

+84-37
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.google.gson.reflect.TypeToken
2828
import com.legendsayantan.adbtools.adapters.DebloatAdapter
2929
import com.legendsayantan.adbtools.adapters.SimpleAdapter
3030
import com.legendsayantan.adbtools.data.AppData
31+
import com.legendsayantan.adbtools.lib.Logger.Companion.log
3132
import com.legendsayantan.adbtools.lib.ShizukuRunner
3233
import com.legendsayantan.adbtools.lib.Utils.Companion.extractUrls
3334
import com.legendsayantan.adbtools.lib.Utils.Companion.getAllInstalledApps
@@ -78,6 +79,9 @@ class DebloatActivity : AppCompatActivity() {
7879
ShizukuRunner.command("pm grant $packageName android.permission.QUERY_ALL_PACKAGES",
7980
object : ShizukuRunner.CommandResultListener {
8081
override fun onCommandResult(output: String, done: Boolean) {}
82+
override fun onCommandError(error: String) {
83+
applicationContext.log(error)
84+
}
8185
})
8286
val setListListener = {
8387
list.setOnItemClickListener { _, _, position, _ ->
@@ -96,44 +100,66 @@ class DebloatActivity : AppCompatActivity() {
96100
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(listOfLinks[linkPosition])))
97101
}
98102
val disableBtn = MaterialButton(this)
99-
ShizukuRunner.command("pm list packages -d",object : ShizukuRunner.CommandResultListener{
100-
override fun onCommandResult(output: String, done: Boolean) {
101-
if (done){
102-
val isDisabled = output.contains(id)
103-
disableBtn.text = if(isDisabled) getString(R.string.confirm_to_enable) else getString(R.string.confirm_to_disable)
104-
disableBtn.setOnClickListener {
105-
//disable app
106-
ShizukuRunner.command("cmd package ${if(isDisabled)"enable" else "disable"} -k --user 0 $id",
107-
object : ShizukuRunner.CommandResultListener {
108-
override fun onCommandResult(output: String, done: Boolean) {
109-
if (done) {
110-
runOnUiThread {
111-
if (output.contains("Success", true)) {
112-
list.adapter =
113-
DebloatAdapter(this@DebloatActivity, apps)
114-
Toast.makeText(
115-
applicationContext,
116-
"Success for ${app.name}",
117-
Toast.LENGTH_LONG
118-
).show()
119-
} else {
120-
Toast.makeText(
121-
applicationContext,
122-
"Failed,\n$output",
123-
Toast.LENGTH_LONG
124-
).show()
103+
ShizukuRunner.command("pm list packages -d",
104+
object : ShizukuRunner.CommandResultListener {
105+
override fun onCommandResult(output: String, done: Boolean) {
106+
if (done) {
107+
val isDisabled = output.contains(id)
108+
disableBtn.text =
109+
if (isDisabled) getString(R.string.confirm_to_enable) else getString(
110+
R.string.confirm_to_disable
111+
)
112+
disableBtn.setOnClickListener {
113+
//disable app
114+
ShizukuRunner.command("cmd package ${if (isDisabled) "enable" else "disable"} -k --user 0 $id",
115+
object : ShizukuRunner.CommandResultListener {
116+
override fun onCommandResult(
117+
output: String,
118+
done: Boolean
119+
) {
120+
if (done) {
121+
runOnUiThread {
122+
if (output.contains("Success", true)) {
123+
list.adapter =
124+
DebloatAdapter(
125+
this@DebloatActivity,
126+
apps
127+
)
128+
Toast.makeText(
129+
applicationContext,
130+
"Success for ${app.name}",
131+
Toast.LENGTH_LONG
132+
).show()
133+
} else {
134+
Toast.makeText(
135+
applicationContext,
136+
"Failed,\n$output",
137+
Toast.LENGTH_LONG
138+
).show()
139+
applicationContext.log(output)
140+
}
141+
dialog?.dismiss()
125142
}
126-
dialog?.dismiss()
127143
}
128144
}
129-
}
130-
})
145+
146+
override fun onCommandError(error: String) {
147+
applicationContext.log(error)
148+
}
149+
})
150+
}
131151
}
132152
}
133-
}
134-
})
135-
disableBtn.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
136-
setMargins(0,0,25,0)
153+
154+
override fun onCommandError(error: String) {
155+
applicationContext.log(error)
156+
}
157+
})
158+
disableBtn.layoutParams = LinearLayout.LayoutParams(
159+
LinearLayout.LayoutParams.WRAP_CONTENT,
160+
LinearLayout.LayoutParams.WRAP_CONTENT
161+
).apply {
162+
setMargins(0, 0, 25, 0)
137163
}
138164
val uninstallBtn = MaterialButton(this)
139165
uninstallBtn.text = getString(R.string.confirm_to_uninstall)
@@ -161,11 +187,16 @@ class DebloatActivity : AppCompatActivity() {
161187
"Failed to uninstall ${app.name},\n$output",
162188
Toast.LENGTH_LONG
163189
).show()
190+
applicationContext.log(output)
164191
}
165192
dialog?.dismiss()
166193
}
167194
}
168195
}
196+
197+
override fun onCommandError(error: String) {
198+
applicationContext.log(error)
199+
}
169200
})
170201
}
171202
val btnContainer = LinearLayout(this)
@@ -270,6 +301,8 @@ class DebloatActivity : AppCompatActivity() {
270301
}
271302
}
272303
} catch (e: Exception) {
304+
applicationContext.log(e.stackTraceToString(), true)
305+
273306
if (database.isNullOrBlank()) {
274307
onFailure()
275308
} else {
@@ -339,14 +372,14 @@ class DebloatActivity : AppCompatActivity() {
339372
.show()
340373
}
341374

342-
fun restoreMode() {
375+
private fun restoreMode() {
343376
val activityContext = this
344377
ShizukuRunner.command("cmd package list packages -u",
345378
object : ShizukuRunner.CommandResultListener {
346379
override fun onCommandResult(output: String, done: Boolean) {
347380
if (done) {
348381
val allApps = output.replace("package:", "").split("\n")
349-
loadApps { installed ->
382+
loadApps({ installed ->
350383
val uninstalled = allApps.filter { !installed.contains(it) }
351384
runOnUiThread {
352385
val appsView = RecyclerView(activityContext)
@@ -379,18 +412,32 @@ class DebloatActivity : AppCompatActivity() {
379412
}
380413
}
381414
}
415+
override fun onCommandError(error: String) {
416+
applicationContext.log(error)
417+
}
382418
})
383419
dialog.dismiss()
384420
}
385421
}
386422

387-
}
423+
}, {
424+
runOnUiThread {
425+
Toast.makeText(
426+
activityContext,
427+
"Error loading apps : $it",
428+
Toast.LENGTH_LONG
429+
).show()
430+
}
431+
})
388432
}
389433
}
434+
override fun onCommandError(error: String) {
435+
applicationContext.log(error)
436+
}
390437
})
391438
}
392439

393-
companion object{
440+
companion object {
394441
const val FILENAME_DATABASE: String = "debloat-list.json"
395442
}
396443
}

app/src/main/java/com/legendsayantan/adbtools/InitialActivity.kt

+7-9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.os.Bundle
77
import android.widget.TextView
88
import androidx.appcompat.app.AppCompatActivity
99
import com.legendsayantan.adbtools.lib.GradleUpdate
10+
import com.legendsayantan.adbtools.lib.Logger.Companion.log
1011
import com.legendsayantan.adbtools.lib.Utils.Companion.initialiseNotiChannel
1112
import com.legendsayantan.adbtools.lib.Utils.Companion.initialiseStatusBar
1213
import rikka.shizuku.Shizuku
@@ -33,7 +34,9 @@ class InitialActivity : AppCompatActivity() {
3334
Shizuku.addRequestPermissionResultListener(requestPermissionResultListener)
3435
try {
3536
if(!checkPermission()) Shizuku.requestPermission(REQUEST_CODE)
36-
}catch (_:Exception){}
37+
}catch (e:Exception){
38+
log(e.stackTraceToString(),true)
39+
}
3740

3841
findViewById<TextView>(R.id.textView).setOnClickListener {
3942
val shizukuUrl = "https://shizuku.rikka.app/"
@@ -51,7 +54,9 @@ class InitialActivity : AppCompatActivity() {
5154
super.onResume()
5255
try {
5356
if(checkPermission()) onGranted()
54-
}catch (_:Exception){}
57+
}catch (e:Exception){
58+
log(e.stackTraceToString(),true)
59+
}
5560
}
5661
private fun onRequestPermissionsResult(requestCode: Int, grantResult: Int) {
5762
val granted = grantResult == PackageManager.PERMISSION_GRANTED
@@ -86,11 +91,4 @@ class InitialActivity : AppCompatActivity() {
8691
finish()
8792
}
8893
}
89-
90-
private fun startOnPip(intent:Intent){
91-
val pipFlag = intent.getBooleanExtra("pip", false)
92-
if(pipFlag){
93-
startActivity(Intent(this, PipStarterActivity::class.java))
94-
}
95-
}
9694
}

app/src/main/java/com/legendsayantan/adbtools/LookbackActivity.kt

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.os.Handler
88
import android.widget.Toast
99
import androidx.appcompat.app.AppCompatActivity
1010
import com.google.android.material.button.MaterialButton
11+
import com.legendsayantan.adbtools.lib.Logger.Companion.log
1112
import com.legendsayantan.adbtools.lib.ShizukuRunner
1213
import com.legendsayantan.adbtools.lib.Utils.Companion.initialiseStatusBar
1314
import java.io.File
@@ -73,6 +74,7 @@ class LookbackActivity : AppCompatActivity() {
7374
Toast.LENGTH_SHORT
7475
).show()
7576
}
77+
applicationContext.log(error)
7678
}
7779
})
7880

@@ -101,6 +103,7 @@ class LookbackActivity : AppCompatActivity() {
101103
}
102104
callback(true)
103105
} catch (e: IOException) {
106+
applicationContext.log(e.stackTraceToString()?:"",true)
104107
callback(false)
105108
}
106109
}

app/src/main/java/com/legendsayantan/adbtools/MainActivity.kt

+27-6
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
2727
import com.google.android.material.switchmaterial.SwitchMaterial
2828
import com.google.android.material.textfield.TextInputEditText
2929
import com.google.android.material.textfield.TextInputLayout
30+
import com.legendsayantan.adbtools.dialog.LogBottomSheetDialog
31+
import com.legendsayantan.adbtools.lib.Logger.Companion.log
3032
import com.legendsayantan.adbtools.lib.ShizukuRunner
3133
import com.legendsayantan.adbtools.lib.Utils.Companion.getNotiPerms
3234
import com.legendsayantan.adbtools.lib.Utils.Companion.initialiseStatusBar
3335
import com.legendsayantan.adbtools.receivers.PipReceiver
3436
import com.legendsayantan.adbtools.services.SoundMasterService
3537
import java.util.UUID
38+
import kotlin.system.exitProcess
39+
3640
/**
3741
* @author legendsayantan
3842
*/
@@ -43,14 +47,22 @@ class MainActivity : AppCompatActivity() {
4347
setContentView(R.layout.activity_main)
4448
initialiseStatusBar()
4549
getNotiPerms()
50+
registerGlobalExceptionLogger()
51+
findViewById<ImageView>(R.id.logs).setOnClickListener {
52+
LogBottomSheetDialog(this).show()
53+
}
4654
findViewById<ImageView>(R.id.github).setOnClickListener {
4755
val shizukuUrl = "https://github.com/legendsayantan/shizutools"
48-
startActivity(
49-
Intent(
50-
Intent.ACTION_VIEW,
51-
Uri.parse(shizukuUrl)
52-
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
53-
)
56+
try {
57+
startActivity(
58+
Intent(
59+
Intent.ACTION_VIEW,
60+
Uri.parse(shizukuUrl)
61+
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
62+
)
63+
}catch (e:Exception){
64+
log(e.stackTraceToString(),true)
65+
}
5466
}
5567
val cardDebloat = findViewById<MaterialCardView>(R.id.cardDebloat)
5668
val cardThemePatcher = findViewById<MaterialCardView>(R.id.cardThemePatcher)
@@ -195,6 +207,7 @@ class MainActivity : AppCompatActivity() {
195207
runOnUiThread {
196208
commandOut.text = "ERROR:\n$error"
197209
}
210+
applicationContext.log(error)
198211
}
199212
})
200213
editText.selectAll()
@@ -247,4 +260,12 @@ class MainActivity : AppCompatActivity() {
247260
.setPositiveButton(getString(R.string.ok)) { _, _ -> }
248261
.create().show()
249262
}
263+
264+
private fun registerGlobalExceptionLogger(){
265+
Thread.setDefaultUncaughtExceptionHandler { _, e ->
266+
e.printStackTrace()
267+
applicationContext.log(e.stackTraceToString(),true)
268+
exitProcess(0)
269+
}
270+
}
250271
}

0 commit comments

Comments
 (0)