Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desktop popup #212

Merged
merged 4 commits into from
Dec 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package com.andannn.melodify

import android.Manifest
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.rememberLauncherForActivityResult
Expand All @@ -29,7 +27,7 @@ import com.andannn.melodify.ui.common.theme.MelodifyTheme
import android.graphics.Color
import com.andannn.melodify.core.syncer.MediaLibrarySyncer
import com.andannn.melodify.core.syncer.SyncJobService
import com.andannn.melodify.ui.components.drawer.DrawerController
import com.andannn.melodify.ui.components.popup.PopupController
import io.github.aakira.napier.Napier
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
Expand All @@ -39,7 +37,6 @@ import org.koin.androidx.scope.activityRetainedScope
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.parameter.parametersOf
import org.koin.core.scope.Scope
import org.koin.core.scope.ScopeCallback

private const val TAG = "MainActivity"

Expand All @@ -55,7 +52,7 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
override val scope: Scope by activityRetainedScope()

private val mainViewModel: MainActivityViewModel by viewModel {
parametersOf(scope.get<DrawerController>())
parametersOf(scope.get<PopupController>())
}

private lateinit var intentSenderLauncher: ActivityResultLauncher<IntentSenderRequest>
Expand All @@ -69,12 +66,6 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
// initialize koin activity retained scope.
checkNotNull(scope)

scope.registerCallback(object : ScopeCallback {
override fun onScopeClose(scope: Scope) {
scope.get<DrawerController>().close()
}
})

enableEdgeToEdge(
statusBarStyle = SystemBarStyle.dark(
scrim = Color.TRANSPARENT,
Expand All @@ -87,24 +78,6 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
Napier.d(tag = TAG) { "activity result: $result" }
}

lifecycleScope.launch {
val deleteMediaItemEventFlow = scope.get<DrawerController>().deleteMediaItemEventFlow
deleteMediaItemEventFlow.collect { uris ->
Napier.d(tag = TAG) { "Requesting delete media items: $uris" }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val editPendingIntent = MediaStore.createTrashRequest(
/* resolver = */ contentResolver,
/* uris = */ uris.map { Uri.parse(it) },
/* value = */ true,
)
val request =
IntentSenderRequest.Builder(editPendingIntent.intentSender).build()

intentSenderLauncher.launch(request)
}
}
}

var uiState by mutableStateOf<MainUiState>(MainUiState.Init)

// Update the uiState
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.andannn.melodify

import com.andannn.melodify.ui.components.drawer.DrawerController
import com.andannn.melodify.ui.components.drawer.DrawerControllerImpl
import com.andannn.melodify.ui.components.message.MessageController
import com.andannn.melodify.ui.components.message.MessageControllerImpl
import com.andannn.melodify.ui.components.popup.PopupController
import com.andannn.melodify.ui.components.popup.PopupControllerImpl
import org.koin.core.module.Module
import org.koin.core.module.dsl.scopedOf
import org.koin.dsl.bind
Expand All @@ -14,9 +12,6 @@ import org.koin.dsl.module
*/
actual val uiScopedModule: Module = module {
scope<MainActivity> {
scopedOf(::DrawerControllerImpl).bind(DrawerController::class)
}
scope<MainActivity> {
scopedOf(::MessageControllerImpl).bind(MessageController::class)
scopedOf(::PopupControllerImpl).bind(PopupController::class)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,45 +10,33 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.andannn.melodify.ui.components.drawer.DrawerController
import com.andannn.melodify.ui.components.message.MessageController
import com.andannn.melodify.ui.components.message.dialog.Dialog
import com.andannn.melodify.ui.components.message.dialog.InteractionResult
import com.andannn.melodify.navigation.routes.navigateToDialog
import com.andannn.melodify.ui.common.util.getUiRetainedScope
import com.andannn.melodify.ui.components.popup.PopupController
import io.github.aakira.napier.Napier
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.koin.compose.getKoin
import org.koin.core.scope.Scope
import kotlin.coroutines.cancellation.CancellationException

@Composable
fun rememberAppState(
navController: NavHostController = rememberNavController(),
scope: CoroutineScope = rememberCoroutineScope(),
retainedScope: Scope? = getUiRetainedScope(),
drawerController: DrawerController = retainedScope?.get<DrawerController>()
?: getKoin().get<DrawerController>(),
messageController: MessageController = retainedScope?.get<MessageController>()
?: getKoin().get<MessageController>(),
snackBarHostState: SnackbarHostState = remember { SnackbarHostState() },
popupController: PopupController = getUiRetainedScope()?.get() ?: getKoin().get(),
drawerState: DrawerState = rememberDrawerState(DrawerValue.Closed),
) = remember(
navController,
drawerController,
scope,
messageController,
snackBarHostState,
drawerState,
drawerState
) {
MelodifyAppState(
scope = scope,
drawerState = drawerState,
navController = navController,
drawerController = drawerController,
messageController = messageController,
snackBarHostState = snackBarHostState
snackBarHostState = snackBarHostState,
popupController = popupController,
drawerState = drawerState,
)
}

Expand All @@ -57,20 +45,13 @@ private const val TAG = "MelodifyAppState"
class MelodifyAppState(
val scope: CoroutineScope,
val navController: NavHostController,
val drawerController: DrawerController,
val snackBarHostState: SnackbarHostState,
val drawerState: DrawerState,
private val messageController: MessageController,
val popupController: PopupController,
val drawerState: DrawerState
) {
init {
scope.launch {
for (dialog in messageController.sendDialogChannel) {
navController.navigateToDialog(dialog)
}
}

scope.launch {
for (message in messageController.snackBarMessageChannel) {
for (message in popupController.snackBarMessageChannel) {
Napier.d(tag = TAG) { "show snackbar: $message" }
var result: SnackbarResult? = null
try {
Expand All @@ -79,14 +60,10 @@ class MelodifyAppState(
result = SnackbarResult.Dismissed
throw e
} finally {
messageController.snackBarResultChannel.send(result!!)
popupController.snackBarResultChannel.send(result!!)
Napier.d(tag = TAG) { "show snackbar dismiss $result" }
}
}
}
}

fun onDialogResult(dialog: Dialog, interactionResult: InteractionResult) {
messageController.onResult(dialog, interactionResult)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,10 @@ import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.Text
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.andannn.melodify.navigation.MelodifyNavHost
import com.andannn.melodify.ui.components.drawer.BottomDrawerContainer
import com.andannn.melodify.ui.components.popup.dialog.ActionDialogContainer
import com.andannn.melodify.ui.components.tabselector.CustomTabSelector
import com.andannn.melodify.ui.components.playcontrol.ui.PlayerAreaView
import melodify.ui.common.generated.resources.Res
Expand Down Expand Up @@ -47,19 +45,11 @@ fun MelodifyMobileApp(
navHostController = navController,
modifier = Modifier.fillMaxWidth(),
onBackPressed = navController::popBackStack,
onDialogResult = appState::onDialogResult,
)

PlayerAreaView()

val drawerController = appState.drawerController
val bottomSheetModel by drawerController.bottomSheetModel.collectAsState(null)
BottomDrawerContainer(
bottomSheet = bottomSheetModel,
onEvent = { event ->
drawerController.onEvent(event)
}
)
ActionDialogContainer()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import com.andannn.melodify.ui.components.message.dialog.Dialog
import com.andannn.melodify.ui.components.message.dialog.InteractionResult
import com.andannn.melodify.navigation.routes.melodifyDialog
import com.andannn.melodify.navigation.routes.HOME_ROUTE
import com.andannn.melodify.navigation.routes.customTabSetting
import com.andannn.melodify.navigation.routes.homeScreen
Expand All @@ -17,7 +14,6 @@ fun MelodifyNavHost(
navHostController: NavHostController,
modifier: Modifier = Modifier,
onBackPressed: () -> Unit,
onDialogResult: (Dialog, InteractionResult) -> Unit,
) {
NavHost(
navController = navHostController,
Expand All @@ -30,14 +26,5 @@ fun MelodifyNavHost(
customTabSetting(
onBackPressed = onBackPressed
)

Dialog.getAllDialogs().forEach {
melodifyDialog(
navHostController = navHostController,
dialog = it,
onRequestDismiss = onBackPressed,
onResult = onDialogResult
)
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -88,31 +88,18 @@ private fun HomeScreen(
)
},
) { padding ->
TabWithContent(
Column(
modifier = Modifier.padding(padding)
.nestedScroll(scrollBehavior.nestedScrollConnection)
.fillMaxSize(),
tabUiStateHolder = tabUiStateHolder,
tabContentStateHolder = tabContentStateHolder
)
}
}

@Composable
fun TabWithContent(
modifier: Modifier = Modifier,
tabUiStateHolder: TabUiStateHolder,
tabContentStateHolder: TabContentStateHolder,
) {
Column(
modifier = modifier
) {
ReactiveTab(
stateHolder = tabUiStateHolder
)
.fillMaxSize()
) {
ReactiveTab(
stateHolder = tabUiStateHolder
)

TabContent(
stateHolder = tabContentStateHolder
)
TabContent(
stateHolder = tabContentStateHolder
)
}
}
}
Loading
Loading