Update: Use fully composables for Main

This commit is contained in:
machiav3lli 2022-09-16 04:53:42 +02:00
parent 4c4c6cc51e
commit 2f4ee61ebf

View File

@ -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() {