From 89e9e7c176b7dcf1e17aa2fa6bde1ee182472ad7 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Mon, 29 Jun 2020 05:22:16 -0700 Subject: [PATCH] Simplify UI code for Magisk logs We have all texts, no need to go through recyclerview --- .../magisk/data/repository/LogRepository.kt | 18 ++++++++- .../topjohnwu/magisk/ui/log/LogViewModel.kt | 18 +++------ .../main/res/layout/include_log_magisk.xml | 37 ++++++++++--------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/data/repository/LogRepository.kt b/app/src/main/java/com/topjohnwu/magisk/data/repository/LogRepository.kt index 86ce26a30..984f4abe1 100644 --- a/app/src/main/java/com/topjohnwu/magisk/data/repository/LogRepository.kt +++ b/app/src/main/java/com/topjohnwu/magisk/data/repository/LogRepository.kt @@ -15,8 +15,22 @@ class LogRepository( fun fetchLogs() = logDao.fetchAll() fun fetchMagiskLogs() = Single.fromCallable { - Shell.su("tail -n 5000 ${Const.MAGISK_LOG}").exec().out - }.flattenAsFlowable { it }.filter { it.isNotEmpty() } + val list = object : AbstractMutableList() { + val buf = StringBuilder() + override val size get() = 0 + override fun get(index: Int): String = "" + override fun removeAt(index: Int): String = "" + override fun set(index: Int, element: String): String = "" + override fun add(index: Int, element: String) { + if (element.isNotEmpty()) { + buf.append(element) + buf.append('\n') + } + } + } + Shell.su("cat ${Const.MAGISK_LOG}").to(list).exec() + list.buf.toString() + } fun clearLogs() = logDao.deleteAll() diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt index 752589e28..17c9162b0 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt @@ -6,14 +6,13 @@ import com.topjohnwu.magisk.core.Config import com.topjohnwu.magisk.core.Const import com.topjohnwu.magisk.data.repository.LogRepository import com.topjohnwu.magisk.extensions.subscribeK -import com.topjohnwu.magisk.model.binding.BindingAdapter -import com.topjohnwu.magisk.model.entity.recycler.ConsoleItem import com.topjohnwu.magisk.model.entity.recycler.LogItem import com.topjohnwu.magisk.model.entity.recycler.TextItem import com.topjohnwu.magisk.model.events.SnackbarEvent import com.topjohnwu.magisk.ui.base.BaseViewModel import com.topjohnwu.magisk.ui.base.diffListOf import com.topjohnwu.magisk.ui.base.itemBindingOf +import com.topjohnwu.magisk.utils.KObservableField import com.topjohnwu.superuser.Shell import io.reactivex.Completable import io.reactivex.android.schedulers.AndroidSchedulers @@ -32,18 +31,16 @@ class LogViewModel( val itemEmpty = TextItem(R.string.log_data_none) val itemMagiskEmpty = TextItem(R.string.log_data_magisk_none) - // --- main view + // --- su log val items = diffListOf() val itemBinding = itemBindingOf { it.bindExtra(BR.viewModel, this) } - // --- console + // --- magisk log - val consoleAdapter = BindingAdapter() - val itemsConsole = diffListOf() - val itemConsoleBinding = itemBindingOf() + val consoleText = KObservableField(" ") override fun refresh(): Disposable { val logs = repo.fetchLogs() @@ -63,12 +60,7 @@ class LogViewModel( .ignoreElement() val console = repo.fetchMagiskLogs() - .map { ConsoleItem(it) } - .toList() - .observeOn(Schedulers.computation()) - .map { it to itemsConsole.calculateDiff(it) } - .observeOn(AndroidSchedulers.mainThread()) - .doOnSuccess { itemsConsole.update(it.first, it.second) } + .doOnSuccess { consoleText.value = it } .ignoreElement() return Completable.merge(listOf(logs, console)).subscribeK() diff --git a/app/src/main/res/layout/include_log_magisk.xml b/app/src/main/res/layout/include_log_magisk.xml index bca908fdb..e481f314a 100644 --- a/app/src/main/res/layout/include_log_magisk.xml +++ b/app/src/main/res/layout/include_log_magisk.xml @@ -1,6 +1,5 @@ @@ -15,28 +14,32 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + - + + + + +