From 49f7d56fdde518829b0c8902e80319bbc8b37d46 Mon Sep 17 00:00:00 2001 From: tiann Date: Fri, 3 Feb 2023 18:14:42 +0800 Subject: [PATCH] manager: Add send log --- manager/app/src/main/AndroidManifest.xml | 10 +++ .../me/weishu/kernelsu/ui/screen/Settings.kt | 30 ++++++-- .../me/weishu/kernelsu/ui/util/LogEvent.kt | 69 +++++++++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 1 + manager/app/src/main/res/values/strings.xml | 1 + manager/app/src/main/res/xml/filepaths.xml | 6 ++ 6 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt create mode 100644 manager/app/src/main/res/xml/filepaths.xml diff --git a/manager/app/src/main/AndroidManifest.xml b/manager/app/src/main/AndroidManifest.xml index 06567350..7794d8e9 100644 --- a/manager/app/src/main/AndroidManifest.xml +++ b/manager/app/src/main/AndroidManifest.xml @@ -32,6 +32,16 @@ android:name="android.app.lib_name" android:value="" /> + + + + diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt index b55ec3ec..df43e4f4 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt @@ -1,25 +1,27 @@ package me.weishu.kernelsu.ui.screen +import android.content.Intent +import android.net.Uri import android.widget.Toast import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Info import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.alorma.compose.settings.storage.base.SettingValueState +import androidx.core.content.FileProvider import com.alorma.compose.settings.ui.* import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import me.weishu.kernelsu.ui.util.getBugreportFile +import me.weishu.kernelsu.BuildConfig import me.weishu.kernelsu.R import me.weishu.kernelsu.ui.util.LinkifyText + /** * @author weishu * @date 2023/1/1. @@ -76,6 +78,26 @@ fun SettingScreen(navigator: DestinationsNavigator) { Toast.makeText(context, "coming soon", Toast.LENGTH_SHORT).show() } ) + SettingsMenuLink(title = { + Text(stringResource(id = R.string.send_log)) + }, + onClick = { + val bugreport = getBugreportFile(context) + val uri: Uri = FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.fileprovider", bugreport) + + val shareIntent = Intent(Intent.ACTION_SEND) + shareIntent.putExtra(Intent.EXTRA_STREAM, uri) + shareIntent.setDataAndType(uri, "application/zip") + shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + + context.startActivity( + Intent.createChooser( + shareIntent, + context.getString(R.string.send_log) + ) + ) + } + ) SettingsMenuLink(title = { Text(stringResource(id = R.string.about)) }, diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt new file mode 100644 index 00000000..6c49dc38 --- /dev/null +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt @@ -0,0 +1,69 @@ +package me.weishu.kernelsu.ui.util + +import android.content.Context +import android.os.Build +import android.system.Os +import java.io.File +import java.io.FileWriter +import java.io.PrintWriter +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +fun getBugreportFile(context: Context): File { + + val bugreportDir = File(context.cacheDir, "bugreport") + bugreportDir.mkdirs() + + val dmesgFile = File(bugreportDir, "dmesg.txt") + val logcatFile = File(bugreportDir, "logcat.txt") + val tombstonesFile = File(bugreportDir, "tombstones.tar.gz") + val dropboxFile = File(bugreportDir, "dropbox.tar.gz") + + val shell = createRootShell() + + shell.newJob().add("dmesg > ${dmesgFile.absolutePath}").exec() + shell.newJob().add("logcat -d > ${logcatFile.absolutePath}").exec() + shell.newJob().add("tar -czf ${tombstonesFile.absolutePath} /data/tombstones").exec() + shell.newJob().add("tar -czf ${dropboxFile.absolutePath} /data/system/dropbox").exec() + + // build.prop + val buildInfo = File(bugreportDir, "basic.txt") + PrintWriter(FileWriter(buildInfo)).use { pw -> + pw.println("Kernel: ${System.getProperty("os.version")}") + pw.println("BRAND: " + Build.BRAND) + pw.println("MODEL: " + Build.MODEL) + pw.println("PRODUCT: " + Build.PRODUCT) + pw.println("MANUFACTURER: " + Build.MANUFACTURER) + pw.println("SDK: " + Build.VERSION.SDK_INT) + pw.println("PREVIEW_SDK: " + Build.VERSION.PREVIEW_SDK_INT) + pw.println("FINGERPRINT: " + Build.FINGERPRINT) + pw.println("DEVICE: " + Build.DEVICE) + val packageInfo = + context.packageManager.getPackageInfo(context.packageName, 0) + pw.println("PACKAGE: " + packageInfo.packageName) + pw.println("VERSION: " + packageInfo.versionName) + + val uname = Os.uname() + pw.println("KernelRelease: ${uname.release}") + pw.println("KernelVersion: ${uname.version}") + pw.println("Mahcine: ${uname.machine}") + pw.println("Nodename: ${uname.nodename}") + pw.println("Sysname: ${uname.sysname}") + + } + + // modules + val modulesFile = File(bugreportDir, "modules.json") + modulesFile.writeText(listModules()) + + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH_mm") + val current = LocalDateTime.now().format(formatter) + + val targetFile = File(context.cacheDir, "KernelSU_bugreport_${current}.tar.gz") + + shell.newJob().add("tar czf ${targetFile.absolutePath} -C ${bugreportDir.absolutePath} .").exec() + shell.newJob().add("rm -rf ${bugreportDir.absolutePath}").exec() + shell.newJob().add("chmod 0644 ${targetFile.absolutePath}").exec() + + return targetFile; +} \ No newline at end of file diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml index 0fa11f69..3dd542f5 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -49,4 +49,5 @@ 刷新 显示系统应用 隐藏系统应用 + 发送日志 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 474a010f..d19ce355 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -53,5 +53,6 @@ Refresh Show system apps Hide system apps + Send Log diff --git a/manager/app/src/main/res/xml/filepaths.xml b/manager/app/src/main/res/xml/filepaths.xml new file mode 100644 index 00000000..f8a9a5c5 --- /dev/null +++ b/manager/app/src/main/res/xml/filepaths.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file