Skip to content

Commit

Permalink
Merge pull request #540 from andy-ife/pin-notes-feature
Browse files Browse the repository at this point in the history
[feature/pinning-notes]
  • Loading branch information
aritra-tech authored Nov 2, 2024
2 parents a441d83 + f31f3ea commit e687462
Show file tree
Hide file tree
Showing 22 changed files with 499 additions and 76 deletions.
4 changes: 2 additions & 2 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/ktlint-plugin.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

95 changes: 86 additions & 9 deletions .idea/other.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.PushPin
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
Expand Down Expand Up @@ -39,12 +41,16 @@ fun AddEditTopBar(
title: String,
description: String,
isNew: Boolean,
isPinned: Boolean,
onBackPress: () -> Unit,
pinNote: () -> Unit,
unpinNote: () -> Unit,
saveNote: () -> Unit,
deleteNote: (() -> Unit) -> Unit,
) {
val context = LocalContext.current
val deleteDialogVisible = remember { mutableStateOf(false) }
var pinned by remember { mutableStateOf(isPinned) }

val onBack = remember(description) {
{
Expand Down Expand Up @@ -82,6 +88,32 @@ fun AddEditTopBar(
},
actions = {
if (!isNew) {
if (!pinned) {
IconButton(
onClick = {
pinned = true
pinNote()
}
) {
Icon(
imageVector = Icons.Outlined.PushPin,
contentDescription = stringResource(R.string.pin_note)
)
}
} else {
IconButton(
onClick = {
pinned = false
unpinNote()
}
) {
Icon(
painter = painterResource(R.drawable.unpin_icon),
contentDescription = stringResource(R.string.unpin_note)
)
}
}

IconButton(
onClick = {
deleteDialogVisible.value = true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package com.aritra.notify.components.appbar

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.offset
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.DeleteOutline
import androidx.compose.material.icons.outlined.PushPin
import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.aritra.notify.R

@Composable
fun SelectionModeBottomBar(
modifier: Modifier = Modifier,
shouldShowPinIcon: Boolean = true,
onPinClick: () -> Unit,
onUnpinClick: () -> Unit,
onDeleteClick: () -> Unit,
) {
val items = listOf(
if (shouldShowPinIcon) {
SelectionModeBottomBarItem(
name = stringResource(id = R.string.pin_note),
icon = Icons.Outlined.PushPin,
onClick = onPinClick
)
} else {
SelectionModeBottomBarItem(
name = stringResource(id = R.string.unpin_note),
icon = ImageVector.vectorResource(R.drawable.unpin_icon),
onClick = onUnpinClick
)
},
SelectionModeBottomBarItem(
name = stringResource(id = R.string.trash),
icon = Icons.Outlined.DeleteOutline,
onClick = onDeleteClick
)
)

BottomAppBar(
modifier = modifier
.navigationBarsPadding()
.imePadding(),
containerColor = Color.Transparent
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceAround
) {
items.forEach {
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
IconButton(onClick = { it.onClick() }) {
Icon(
imageVector = it.icon,
contentDescription = it.name
)
}
Text(
text = it.name,
modifier = Modifier.offset(y = -(10.dp)),
fontSize = 12.sp,
fontFamily = FontFamily(Font(R.font.poppins_medium))
)
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.aritra.notify.components.appbar

import androidx.compose.ui.graphics.vector.ImageVector

data class SelectionModeBottomBarItem(
val name: String,
val icon: ImageVector,
val onClick: () -> Unit,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.aritra.notify.components.appbar

import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Checklist
import androidx.compose.material.icons.outlined.Close
import androidx.compose.material.icons.outlined.DeleteOutline
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
Expand All @@ -19,7 +19,13 @@ import com.aritra.notify.R

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SelectionModeTopAppBar(selectedItems: List<Int>, onDeleteClick: () -> Unit, resetSelectionMode: () -> Unit) {
fun SelectionModeTopAppBar(selectedItems: List<Int>, onSelectAllClick: () -> Unit, resetSelectionMode: () -> Unit) {
val text = if (selectedItems.size == 1) {
"${selectedItems.size} item selected"
} else {
"${selectedItems.size} items selected"
}

TopAppBar(navigationIcon = {
IconButton(
onClick = resetSelectionMode
Expand All @@ -33,16 +39,16 @@ fun SelectionModeTopAppBar(selectedItems: List<Int>, onDeleteClick: () -> Unit,
}, title = {
Text(
modifier = Modifier.padding(start = 80.dp),
text = "${selectedItems.size} item selected",
text = text,
style = MaterialTheme.typography.titleMedium.copy(
color = MaterialTheme.colorScheme.onBackground,
fontFamily = FontFamily(Font(R.font.poppins_medium))
)
)
}, actions = {
IconButton(onDeleteClick) {
IconButton(onSelectAllClick) {
Icon(
imageVector = Icons.Outlined.DeleteOutline,
imageVector = Icons.Outlined.Checklist,
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground
)
Expand Down
Loading

0 comments on commit e687462

Please sign in to comment.