Skip to content

Commit c292b81

Browse files
authored
Merge pull request #21 from Javernaut/refactoring/activity-result-api
Single Activity approach
2 parents 4dd6cbf + b6e5d12 commit c292b81

File tree

15 files changed

+246
-322
lines changed

15 files changed

+246
-322
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ dependencies {
141141
implementation(libs.androidx.window)
142142
implementation(libs.androidx.datastore.preferences)
143143
implementation(libs.androidx.navigation.compose)
144+
implementation(libs.androidx.hilt.navigation.compose)
144145

145146
implementation(libs.mediafile)
146147
}

app/src/debug/AndroidManifest.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
43

54
<application>
65
<activity
76
android:name="com.javernaut.whatthecodec.compose.playground.ComposePlaygroundActivity"
87
android:exported="true"
98
android:windowSoftInputMode="adjustResize" />
10-
<activity
11-
android:name=".settings.SettingsActivity"
12-
android:exported="true"
13-
tools:replace="android:exported" />
149
</application>
1510

1611
</manifest>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.javernaut.whatthecodec.compose.playground
2+
3+
import android.os.Bundle
4+
import androidx.activity.ComponentActivity
5+
import androidx.activity.compose.setContent
6+
import androidx.activity.enableEdgeToEdge
7+
import androidx.hilt.navigation.compose.hiltViewModel
8+
import com.javernaut.whatthecodec.compose.theme.WhatTheCodecTheme
9+
import com.javernaut.whatthecodec.home.presentation.MediaFileArgument
10+
import com.javernaut.whatthecodec.home.presentation.MediaFileViewModel
11+
import com.javernaut.whatthecodec.home.ui.screen.EmptyHomeScreen
12+
import com.javernaut.whatthecodec.home.ui.screen.pickAudioFile
13+
import com.javernaut.whatthecodec.home.ui.screen.pickVideoFile
14+
import dagger.hilt.android.AndroidEntryPoint
15+
import io.github.javernaut.mediafile.creator.MediaType
16+
import kotlinx.coroutines.flow.emptyFlow
17+
18+
@AndroidEntryPoint
19+
class ComposePlaygroundActivity : ComponentActivity() {
20+
21+
override fun onCreate(savedInstanceState: Bundle?) {
22+
enableEdgeToEdge()
23+
super.onCreate(savedInstanceState)
24+
25+
setContent {
26+
WhatTheCodecTheme.Dynamic {
27+
val viewModel = hiltViewModel<MediaFileViewModel>()
28+
29+
val onAudioIconClick = pickAudioFile(
30+
permissionDenied = viewModel::onPermissionDenied
31+
) {
32+
viewModel.openMediaFile(
33+
MediaFileArgument(
34+
it.toString(),
35+
MediaType.AUDIO
36+
)
37+
)
38+
}
39+
40+
val onVideoIconClick = pickVideoFile(
41+
permissionDenied = viewModel::onPermissionDenied
42+
) {
43+
viewModel.openMediaFile(
44+
MediaFileArgument(
45+
it.toString(),
46+
MediaType.VIDEO
47+
)
48+
)
49+
}
50+
51+
EmptyHomeScreen(
52+
onVideoIconClick = onVideoIconClick,
53+
onAudioIconClick = onAudioIconClick,
54+
onSettingsClicked = {
55+
56+
}, emptyFlow()
57+
)
58+
}
59+
}
60+
}
61+
}

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
<activity
1919
android:name="com.javernaut.whatthecodec.home.ui.RootActivity"
2020
android:exported="true"
21-
android:launchMode="singleTop"
2221
android:windowSoftInputMode="adjustResize">
2322
<intent-filter>
2423
<action android:name="android.intent.action.MAIN" />
@@ -32,12 +31,6 @@
3231
<data android:mimeType="audio/*" />
3332
</intent-filter>
3433
</activity>
35-
<activity
36-
android:name="com.javernaut.whatthecodec.settings.SettingsActivity"
37-
android:exported="false"
38-
android:label="@string/settings_title"
39-
android:parentActivityName="com.javernaut.whatthecodec.settings.SettingsActivity"
40-
android:windowSoftInputMode="adjustResize" />
4134
</application>
4235

4336
</manifest>

app/src/main/java/com/javernaut/whatthecodec/compose/playground/ComposePlaygroundActivity.kt

Lines changed: 0 additions & 95 deletions
This file was deleted.

app/src/main/java/com/javernaut/whatthecodec/compose/theme/WhatTheCodecTheme.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import androidx.compose.ui.platform.LocalContext
1616
import androidx.compose.ui.platform.LocalView
1717
import androidx.core.content.getSystemService
1818
import androidx.core.view.WindowCompat
19-
import androidx.lifecycle.viewmodel.compose.viewModel
19+
import androidx.hilt.navigation.compose.hiltViewModel
2020
import com.javernaut.whatthecodec.compose.common.SystemBroadcastReceiver
2121
import com.javernaut.whatthecodec.compose.theme.dynamic.AppTheme
2222
import com.javernaut.whatthecodec.compose.theme.dynamic.ThemeViewModel
@@ -36,7 +36,7 @@ object WhatTheCodecTheme {
3636

3737
@Composable
3838
fun Dynamic(
39-
themeViewModel: ThemeViewModel = viewModel(),
39+
themeViewModel: ThemeViewModel = hiltViewModel(),
4040
content: @Composable () -> Unit
4141
) {
4242
val appTheme by themeViewModel.appTheme.collectAsState()

app/src/main/java/com/javernaut/whatthecodec/home/presentation/MediaFileViewModel.kt

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ class MediaFileViewModel @Inject constructor(
3434
private val savedStateHandle: SavedStateHandle
3535
) : ViewModel() {
3636

37-
private var pendingMediaFileArgument: MediaFileArgument? = null
38-
3937
private var _preview = MutableStateFlow<Preview>(NotYetEvaluated)
4038
private var _mediaFile = MutableStateFlow<MediaFile?>(null)
4139
private var _screenState = MutableStateFlow<ScreenState?>(null)
@@ -44,8 +42,6 @@ class MediaFileViewModel @Inject constructor(
4442
private val _screenMessageChannel = Channel<ScreenMessage>()
4543

4644
init {
47-
pendingMediaFileArgument = savedStateHandle[KEY_MEDIA_FILE_ARGUMENT]
48-
4945
viewModelScope.launch {
5046
combine(
5147
_mediaFile.onEach {
@@ -70,6 +66,10 @@ class MediaFileViewModel @Inject constructor(
7066
}
7167
}.collect(_screenState)
7268
}
69+
70+
savedStateHandle.get<MediaFileArgument>(KEY_MEDIA_FILE_ARGUMENT)?.let {
71+
openMediaFile(it)
72+
}
7373
}
7474

7575
/**
@@ -91,15 +91,7 @@ class MediaFileViewModel @Inject constructor(
9191
}
9292
}
9393

94-
fun applyPendingMediaFileIfNeeded() {
95-
if (pendingMediaFileArgument != null) {
96-
openMediaFile(pendingMediaFileArgument!!)
97-
}
98-
}
99-
10094
fun openMediaFile(argument: MediaFileArgument) {
101-
clearPendingUri()
102-
10395
val newMediaFile = mediaFileProvider.obtainMediaFile(argument)
10496
if (newMediaFile != null) {
10597
savedStateHandle.set(KEY_MEDIA_FILE_ARGUMENT, argument)
@@ -160,10 +152,6 @@ class MediaFileViewModel @Inject constructor(
160152
_preview.value = preview
161153
}
162154

163-
private fun clearPendingUri() {
164-
pendingMediaFileArgument = null
165-
}
166-
167155
private fun computeFrameMetrics(): FrameMetrics? {
168156
val videoStream = _mediaFile.value?.videoStream
169157

0 commit comments

Comments
 (0)