Skip to content

Commit

Permalink
Debug: Show detailed version information when long pressing the chang…
Browse files Browse the repository at this point in the history
…elog settings entry

Implements #939
  • Loading branch information
d4rken committed Jan 20, 2024
1 parent bfc8bea commit dd55ee0
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import android.util.AttributeSet
import android.widget.Toast
import androidx.annotation.AttrRes
import androidx.annotation.StyleRes
import androidx.preference.Preference
import eu.darken.sdmse.common.debug.logging.Logging.Priority.ERROR
import eu.darken.sdmse.common.debug.logging.log
import eu.darken.sdmse.common.debug.logging.logTag
Expand All @@ -18,7 +17,7 @@ class IntentPreference @JvmOverloads constructor(
attrs: AttributeSet? = null,
@AttrRes defStyleAttr: Int = androidx.preference.R.attr.preferenceStyle,
@StyleRes defStyleRes: Int = 0,
) : Preference(context, attrs, defStyleAttr, defStyleRes) {
) : Preference2(context, attrs, defStyleAttr, defStyleRes) {

override fun setIntent(_intent: Intent?) {
super.setIntent(_intent)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package eu.darken.sdmse.common.preferences

import android.content.Context
import android.util.AttributeSet
import android.view.View
import androidx.annotation.AttrRes
import androidx.annotation.StyleRes
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
import eu.darken.sdmse.common.debug.logging.logTag


open class Preference2 @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
@AttrRes defStyleAttr: Int = androidx.preference.R.attr.preferenceStyle,
@StyleRes defStyleRes: Int = 0,
) : Preference(context, attrs, defStyleAttr, defStyleRes) {

private var longClickListener: View.OnLongClickListener? = null

override fun onBindViewHolder(holder: PreferenceViewHolder) {
super.onBindViewHolder(holder)

holder.itemView.setOnLongClickListener(longClickListener)
}

fun setOnLongClickListener(action: View.OnLongClickListener?) {
longClickListener = action
}

companion object {
private val TAG = logTag("Preference2")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ class CurriculumVitae @Inject constructor(
_launchedCountBeta.value(newLaunchCount)
}

val history = _updateHistory.flow

private suspend fun updateVersionHistory() {
val history = _updateHistory.value()
log(TAG) { "Current version history is $history" }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package eu.darken.sdmse.main.ui.settings

sealed class SettingEvents {
data class ShowVersionInfo(val info: String) : SettingEvents()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.view.View
import androidx.fragment.app.viewModels
import androidx.preference.Preference
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
import eu.darken.sdmse.MainDirections
import eu.darken.sdmse.R
Expand All @@ -13,6 +14,7 @@ import eu.darken.sdmse.common.SdmSeLinks
import eu.darken.sdmse.common.datastore.PreferenceScreenData
import eu.darken.sdmse.common.getColorForAttr
import eu.darken.sdmse.common.observe2
import eu.darken.sdmse.common.preferences.Preference2
import eu.darken.sdmse.common.preferences.tintIcon
import eu.darken.sdmse.common.uix.PreferenceFragment2
import eu.darken.sdmse.main.core.GeneralSettings
Expand All @@ -33,6 +35,8 @@ class SettingsIndexFragment : PreferenceFragment2() {
get() = findPreference("core.sponsor.development")!!
private val setupPref: Preference
get() = findPreference("setup.show.forced")!!
private val changelogPref: Preference2
get() = findPreference("core.changelog")!!

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setupMenu(R.menu.menu_settings_index) { item ->
Expand All @@ -42,6 +46,7 @@ class SettingsIndexFragment : PreferenceFragment2() {
}
}
}

vm.state.observe2(this) { state ->
sponsorPref.isVisible = BuildConfigWrap.FLAVOR == BuildConfigWrap.Flavor.FOSS && !state.isPro
setupPref.tintIcon(
Expand All @@ -51,6 +56,15 @@ class SettingsIndexFragment : PreferenceFragment2() {
)
)
}

vm.events.observe2(this) { event ->
when (event) {
is SettingEvents.ShowVersionInfo -> Snackbar.make(requireView(), event.info, Snackbar.LENGTH_INDEFINITE)
.setAction(eu.darken.sdmse.common.R.string.general_copy_action) { vm.copyVersionInfos() }
.setTextMaxLines(20)
.show()
}
}
super.onViewCreated(view, savedInstanceState)
}

Expand All @@ -60,12 +74,19 @@ class SettingsIndexFragment : PreferenceFragment2() {
true
}

findPreference<Preference>("setup.show.forced")!!.setOnPreferenceClickListener {
setupPref.setOnPreferenceClickListener {
MainDirections.goToSetup(options = SetupScreenOptions(showCompleted = true)).navigate()
true
}

findPreference<Preference>("core.changelog")!!.summary = BuildConfigWrap.VERSION_DESCRIPTION
changelogPref.apply {
summary = BuildConfigWrap.VERSION_DESCRIPTION
this.setOnLongClickListener {
vm.showVersionInfos()
Snackbar.make(requireView(), R.string.general_copied_to_clipboard_msg, Snackbar.LENGTH_SHORT).show()
true
}
}
findPreference<Preference>("core.privacy")!!.setOnPreferenceClickListener {
vm.openWebsite(SdmSeLinks.PRIVACY_POLICY)
true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package eu.darken.sdmse.main.ui.settings

import android.os.Build
import androidx.lifecycle.SavedStateHandle
import dagger.hilt.android.lifecycle.HiltViewModel
import eu.darken.sdmse.common.BuildConfigWrap
import eu.darken.sdmse.common.ClipboardHelper
import eu.darken.sdmse.common.SingleLiveEvent
import eu.darken.sdmse.common.WebpageTool
import eu.darken.sdmse.common.coroutine.DispatcherProvider
import eu.darken.sdmse.common.uix.ViewModel2
import eu.darken.sdmse.common.upgrade.UpgradeRepo
import eu.darken.sdmse.main.core.CurriculumVitae
import eu.darken.sdmse.setup.SetupManager
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import javax.inject.Inject

Expand All @@ -18,8 +24,12 @@ class SettingsViewModel @Inject constructor(
private val upgradeRepo: UpgradeRepo,
private val setupManager: SetupManager,
private val webpageTool: WebpageTool,
private val clipboardHelper: ClipboardHelper,
private val curriculumVitae: CurriculumVitae,
) : ViewModel2(dispatcherProvider) {

val events = SingleLiveEvent<SettingEvents>()

val state = combine(
upgradeRepo.upgradeInfo.map { it.isPro },
setupManager.state.map { it.isComplete },
Expand All @@ -38,6 +48,20 @@ class SettingsViewModel @Inject constructor(
webpageTool.open(upgradeRepo.mainWebsite)
}

private suspend fun getVersionText() = """
Build:`${BuildConfigWrap.VERSION_DESCRIPTION}`
Update history: `${curriculumVitae.history.first()}`
ROM: `${Build.FINGERPRINT}`
""".trimIndent()

fun showVersionInfos() = launch {
events.postValue(SettingEvents.ShowVersionInfo(getVersionText()))
}

fun copyVersionInfos() = launch {
clipboardHelper.copyToClipboard(getVersionText())
}

data class State(
val isPro: Boolean,
val setupDone: Boolean,
Expand Down

0 comments on commit dd55ee0

Please sign in to comment.