From 9cb2024334401a04edb578ab33f09061e22cce4e Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Tue, 23 Jan 2024 12:43:20 -0500 Subject: [PATCH] Option to persist task in video sample app. --- .../thoughtcrime/video/app/MainActivity.kt | 112 ++++++++++++++++-- video/app/src/main/res/values/strings.xml | 2 + 2 files changed, 101 insertions(+), 13 deletions(-) diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/MainActivity.kt b/video/app/src/main/java/org/thoughtcrime/video/app/MainActivity.kt index 44841805e0..807e97effe 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/MainActivity.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/MainActivity.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.video.app import android.content.Context import android.content.Intent +import android.content.SharedPreferences import android.media.MediaScannerConnection import android.os.Bundle import android.os.Environment @@ -14,11 +15,20 @@ import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Checkbox import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import org.signal.core.util.logging.Log import org.thoughtcrime.video.app.playback.PlaybackTestActivity import org.thoughtcrime.video.app.transcode.TranscodeTestActivity @@ -29,30 +39,85 @@ import org.thoughtcrime.video.app.ui.theme.SignalTheme * Main activity for this sample app. */ class MainActivity : AppCompatActivity() { - private val TAG = Log.tag(MainActivity::class.java) + companion object { + private val TAG = Log.tag(MainActivity::class.java) + private var appLaunch = true + } + + private val sharedPref: SharedPreferences by lazy { + getSharedPreferences( + getString(R.string.preference_file_key), + Context.MODE_PRIVATE + ) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val startPlaybackScreen = Intent(this, PlaybackTestActivity::class.java) - val startTranscodeScreen = Intent(this, TranscodeTestActivity::class.java) + val startPlaybackScreen = { saveChoice: Boolean -> proceed(Screen.TEST_PLAYBACK, saveChoice) } + val startTranscodeScreen = { saveChoice: Boolean -> proceed(Screen.TEST_TRANSCODE, saveChoice) } setContent { - SignalTheme { - Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { - Column( - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally + Body(startPlaybackScreen, startTranscodeScreen) + } + refreshMediaProviderForExternalStorage(this, arrayOf("video/*")) + if (appLaunch) { + appLaunch = false + getLaunchChoice()?.let { + proceed(it, false) + } + } + } + + @Composable + private fun Body(startPlaybackScreen: (Boolean) -> Unit, startTranscodeScreen: (Boolean) -> Unit) { + var rememberChoice by remember { mutableStateOf(getLaunchChoice() != null) } + SignalTheme { + Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { + Column( + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + LabeledButton("Test Playback") { + startPlaybackScreen(rememberChoice) + } + LabeledButton("Test Transcode") { + startTranscodeScreen(rememberChoice) + } + Row( + verticalAlignment = Alignment.CenterVertically ) { - LabeledButton("Test Playback") { startActivity(startPlaybackScreen) } - LabeledButton("Test Transcode") { startActivity(startTranscodeScreen) } + Checkbox( + checked = rememberChoice, + onCheckedChange = { isChecked -> + rememberChoice = isChecked + if (!isChecked) { + clearLaunchChoice() + } + } + ) + Text(text = "Remember & Skip This Screen", style = MaterialTheme.typography.labelLarge) } } } } } - override fun onStart() { - super.onStart() - refreshMediaProviderForExternalStorage(this, arrayOf("video/*")) + private fun getLaunchChoice(): Screen? { + val screenName = sharedPref.getString(getString(R.string.preference_activity_shortcut_key), null) ?: return null + return Screen.valueOf(screenName) + } + + private fun clearLaunchChoice() { + with(sharedPref.edit()) { + remove(getString(R.string.preference_activity_shortcut_key)) + apply() + } + } + + private fun saveLaunchChoice(choice: Screen) { + with(sharedPref.edit()) { + putString(getString(R.string.preference_activity_shortcut_key), choice.name) + apply() + } } private fun refreshMediaProviderForExternalStorage(context: Context, mimeTypes: Array) { @@ -65,4 +130,25 @@ class MainActivity : AppCompatActivity() { Log.i(TAG, "Re-scan of external storage for media completed.") } } + + private fun proceed(screen: Screen, saveChoice: Boolean) { + if (saveChoice) { + saveLaunchChoice(screen) + } + when (screen) { + Screen.TEST_PLAYBACK -> startActivity(Intent(this, PlaybackTestActivity::class.java)) + Screen.TEST_TRANSCODE -> startActivity(Intent(this, TranscodeTestActivity::class.java)) + } + } + + private enum class Screen { + TEST_PLAYBACK, + TEST_TRANSCODE + } + + @Preview + @Composable + private fun PreviewBody() { + Body({}, {}) + } } diff --git a/video/app/src/main/res/values/strings.xml b/video/app/src/main/res/values/strings.xml index 6534313baf..789bee530b 100644 --- a/video/app/src/main/res/values/strings.xml +++ b/video/app/src/main/res/values/strings.xml @@ -10,4 +10,6 @@ Cancel Transcoding progress updates. Persistent notifications that allow the transcode job to complete when the app is in the background. + settings + activity_shortcut \ No newline at end of file