From 2f4ee61ebf1be9ddca8d4ccb12dfbeacaeed9436 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Fri, 16 Sep 2022 04:53:42 +0200 Subject: [PATCH] Update: Use fully composables for Main --- .../fdroid/ui/activities/MainActivityX.kt | 81 ++++++++++++++++--- 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/activities/MainActivityX.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/activities/MainActivityX.kt index cf3f10df..f49f0993 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/activities/MainActivityX.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/ui/activities/MainActivityX.kt @@ -4,29 +4,48 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.os.PowerManager -import android.view.Menu -import android.view.inputmethod.InputMethodManager -import androidx.activity.viewModels +import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.MutableLiveData +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Settings +import androidx.compose.material.icons.rounded.Sync +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController import androidx.navigation.fragment.NavHostFragment -import androidx.navigation.ui.setupWithNavController +import com.google.accompanist.navigation.animation.rememberAnimatedNavController import com.machiav3lli.fdroid.BuildConfig import com.machiav3lli.fdroid.ContextWrapperX import com.machiav3lli.fdroid.MainApplication +import com.machiav3lli.fdroid.NAV_MAIN import com.machiav3lli.fdroid.R import com.machiav3lli.fdroid.content.Preferences import com.machiav3lli.fdroid.databinding.ActivityMainXBinding import com.machiav3lli.fdroid.installer.AppInstaller import com.machiav3lli.fdroid.service.Connection import com.machiav3lli.fdroid.service.SyncService +import com.machiav3lli.fdroid.ui.compose.components.ExpandableSearchAction +import com.machiav3lli.fdroid.ui.compose.components.TopBar +import com.machiav3lli.fdroid.ui.compose.components.TopBarAction +import com.machiav3lli.fdroid.ui.compose.theme.AppTheme import com.machiav3lli.fdroid.ui.fragments.AppSheetX -import com.machiav3lli.fdroid.ui.fragments.MainNavFragmentX -import com.machiav3lli.fdroid.ui.fragments.Source -import com.machiav3lli.fdroid.ui.viewmodels.MainActivityViewModelX +import com.machiav3lli.fdroid.ui.navigation.BottomNavBar +import com.machiav3lli.fdroid.ui.navigation.MainNavHost +import com.machiav3lli.fdroid.ui.navigation.NavItem import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty +import com.machiav3lli.fdroid.utility.isDarkTheme import com.machiav3lli.fdroid.utility.setCustomTheme import com.machiav3lli.fdroid.utility.showBatteryOptimizationDialog import kotlinx.coroutines.launch @@ -76,7 +95,6 @@ class MainActivityX : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivityMainXBinding.inflate(layoutInflater) - setContentView(binding.root) binding.lifecycleOwner = this val navHostFragment = @@ -90,6 +108,51 @@ class MainActivityX : AppCompatActivity() { if (savedInstanceState == null && (intent.flags and Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { handleIntent(intent) } + + setContent { + AppTheme( + darkTheme = when (Preferences[Preferences.Key.Theme]) { + is Preferences.Theme.System -> isSystemInDarkTheme() + is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme() + else -> isDarkTheme + } + ) { + var searchQuery by remember() { mutableStateOf("") } // TODO link query to the current Page/VM + val navController = rememberAnimatedNavController() + + Scaffold( + containerColor = Color.Transparent, + contentColor = MaterialTheme.colorScheme.onBackground, + bottomBar = { BottomNavBar(page = NAV_MAIN, navController = navController) }, + topBar = { + TopBar( + title = stringResource(id = R.string.application_name), + ) { + ExpandableSearchAction( + query = searchQuery, + onClose = { + searchQuery = "" + }, + onQueryChanged = { query -> + if (query != searchQuery) searchQuery = query + } + ) + TopBarAction(icon = Icons.Rounded.Sync) { + syncConnection.binder?.sync(SyncService.SyncRequest.MANUAL) + } + TopBarAction(icon = Icons.Rounded.Settings) { + navController.navigate(NavItem.Prefs.destination) + } + } + } + ) { paddingValues -> + MainNavHost( + modifier = Modifier.padding(paddingValues), + navController = navController + ) + } + } + } } override fun onStart() {