mirror of https://github.com/tasks/tasks
Add TasksMenu composable
parent
b2efb42d55
commit
d686b8c7e0
@ -0,0 +1,133 @@
|
||||
package org.tasks.compose.drawer
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.todoroo.astrid.api.Filter
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import org.tasks.R
|
||||
import org.tasks.Tasks
|
||||
import org.tasks.activities.NavigationDrawerCustomization
|
||||
import org.tasks.billing.PurchaseActivity
|
||||
import org.tasks.extensions.Context.findActivity
|
||||
import org.tasks.extensions.Context.openUri
|
||||
import org.tasks.filters.NavigationDrawerSubheader
|
||||
import org.tasks.preferences.HelpAndFeedback
|
||||
import org.tasks.preferences.MainPreferences
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TasksMenu(
|
||||
bottomPadding: Dp = 0.dp,
|
||||
items: ImmutableList<DrawerItem>,
|
||||
isTopAppBar: Boolean,
|
||||
begForMoney: Boolean,
|
||||
setFilter: (Filter) -> Unit,
|
||||
toggleCollapsed: (NavigationDrawerSubheader) -> Unit,
|
||||
addFilter: (NavigationDrawerSubheader) -> Unit,
|
||||
dismiss: () -> Unit,
|
||||
) {
|
||||
var expanded by remember { mutableStateOf(false) }
|
||||
val skipPartiallyExpanded = remember(expanded) {
|
||||
expanded || isTopAppBar
|
||||
}
|
||||
val density = LocalDensity.current
|
||||
val sheetState = rememberSaveable(
|
||||
skipPartiallyExpanded,
|
||||
saver = SheetState.Saver(
|
||||
skipPartiallyExpanded = skipPartiallyExpanded,
|
||||
confirmValueChange = { true },
|
||||
density = density,
|
||||
)
|
||||
) {
|
||||
SheetState(
|
||||
skipPartiallyExpanded = skipPartiallyExpanded,
|
||||
initialValue = if (skipPartiallyExpanded) SheetValue.Expanded else SheetValue.PartiallyExpanded,
|
||||
confirmValueChange = { true },
|
||||
skipHiddenState = false,
|
||||
density = density,
|
||||
)
|
||||
}
|
||||
LaunchedEffect(sheetState.currentValue) {
|
||||
if (sheetState.currentValue == SheetValue.Expanded) {
|
||||
expanded = true
|
||||
}
|
||||
}
|
||||
val context = LocalContext.current
|
||||
val settingsRequest = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
context.findActivity()?.recreate()
|
||||
}
|
||||
ModalBottomSheet(
|
||||
sheetState = sheetState,
|
||||
containerColor = MaterialTheme.colors.surface,
|
||||
onDismissRequest = { dismiss() }
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
TaskListDrawer(
|
||||
bottomPadding = bottomPadding,
|
||||
begForMoney = begForMoney,
|
||||
filters = items,
|
||||
onClick = {
|
||||
when (it) {
|
||||
is DrawerItem.Filter -> {
|
||||
setFilter(it.type())
|
||||
scope.launch(Dispatchers.Default) {
|
||||
sheetState.hide()
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
is DrawerItem.Header -> {
|
||||
toggleCollapsed(it.type())
|
||||
}
|
||||
}
|
||||
},
|
||||
onAddClick = {
|
||||
scope.launch(Dispatchers.Default) {
|
||||
sheetState.hide()
|
||||
dismiss()
|
||||
addFilter(it.type())
|
||||
}
|
||||
},
|
||||
onDrawerAction = {
|
||||
dismiss()
|
||||
when (it) {
|
||||
DrawerAction.PURCHASE ->
|
||||
if (Tasks.IS_GENERIC)
|
||||
context.openUri(R.string.url_donate)
|
||||
else
|
||||
context.startActivity(Intent(context, PurchaseActivity::class.java))
|
||||
|
||||
DrawerAction.CUSTOMIZE_DRAWER ->
|
||||
context.startActivity(
|
||||
Intent(context, NavigationDrawerCustomization::class.java)
|
||||
)
|
||||
|
||||
DrawerAction.SETTINGS ->
|
||||
settingsRequest.launch(Intent(context, MainPreferences::class.java))
|
||||
|
||||
DrawerAction.HELP_AND_FEEDBACK ->
|
||||
context.startActivity(Intent(context, HelpAndFeedback::class.java))
|
||||
}
|
||||
},
|
||||
onErrorClick = {
|
||||
context.startActivity(Intent(context, MainPreferences::class.java))
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue