diff options
| author | JosJuice <josjuice@gmail.com> | 2025-04-12 14:27:09 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2025-04-19 14:34:49 +0200 |
| commit | b8e70df413ddd4663aa8e65a6f9d8a1e059c64c7 (patch) | |
| tree | b537d6552b2383bed599fad32f46efe8d7156122 /Source/Android/app/src/main/java | |
| parent | 3eee52cb6bbebfc6b44b43aa85cd22b17b27aca5 (diff) | |
Android: Show time played in game details
Unlike in DolphinQt, there isn't much space to show playtimes directly in
the game list, so I've put it in the game details dialog instead.
Diffstat (limited to 'Source/Android/app/src/main/java')
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.kt | 31 | ||||
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.kt | 11 |
2 files changed, 42 insertions, 0 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.kt index 53b1467bbc..0384da89c0 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameDetailsDialog.kt @@ -19,6 +19,7 @@ import kotlinx.coroutines.launch import org.dolphinemu.dolphinemu.NativeLibrary import org.dolphinemu.dolphinemu.databinding.DialogGameDetailsBinding import org.dolphinemu.dolphinemu.databinding.DialogGameDetailsTvBinding +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting import org.dolphinemu.dolphinemu.model.GameFile class GameDetailsDialog : DialogFragment() { @@ -35,6 +36,21 @@ class GameDetailsDialog : DialogFragment() { if (requireActivity() is AppCompatActivity) { binding = DialogGameDetailsBinding.inflate(layoutInflater) binding.apply { + if (BooleanSetting.MAIN_TIME_TRACKING.boolean) { + lifecycleScope.launch { + val totalMs = gameFile.getTimePlayedMs() + val totalMinutes = totalMs / 60000 + val totalHours = totalMinutes / 60 + textTimePlayed.text = resources.getString( + R.string.game_details_time_played, + totalHours, + totalMinutes % 60 + ) + } + } else { + textTimePlayed.visibility = View.GONE + } + textGameTitle.text = gameFile.getTitle() textDescription.text = gameFile.getDescription() if (gameFile.getDescription().isEmpty()) { @@ -87,6 +103,21 @@ class GameDetailsDialog : DialogFragment() { } else { tvBinding = DialogGameDetailsTvBinding.inflate(layoutInflater) tvBinding.apply { + if (BooleanSetting.MAIN_TIME_TRACKING.boolean) { + lifecycleScope.launch { + val totalMs = gameFile.getTimePlayedMs() + val totalMinutes = totalMs / 60000 + val totalHours = totalMinutes / 60 + textTimePlayed.text = resources.getString( + R.string.game_details_time_played, + totalHours, + totalMinutes % 60 + ) + } + } else { + textTimePlayed.visibility = View.GONE + } + textGameTitle.text = gameFile.getTitle() textDescription.text = gameFile.getDescription() if (gameFile.getDescription().isEmpty()) { diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.kt index 347433f552..26da174285 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFile.kt @@ -3,6 +3,8 @@ package org.dolphinemu.dolphinemu.model import androidx.annotation.Keep +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext @Keep class GameFile private constructor(private val pointer: Long) { @@ -54,6 +56,15 @@ class GameFile private constructor(private val pointer: Long) { external fun getBannerHeight(): Int + suspend fun getTimePlayedMs(): Long { + // getTimePlayedMsInternal reads from disk, so let's use coroutines. + return withContext(Dispatchers.IO) { + getTimePlayedMsInternal() + } + } + + external private fun getTimePlayedMsInternal(): Long + val customCoverPath: String get() = "${getPath().substring(0, getPath().lastIndexOf("."))}.cover.png" |
