diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 00000000..18064870 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9f2ce7e2..288464a8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -180,7 +180,6 @@ dependencies { implementation(libs.androidx.activity.ktx) implementation(libs.androidx.autofill) implementation(libs.androidx.collection.ktx) - implementation(libs.androidx.compose.material) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.runtime.livedata) implementation(libs.androidx.compose.ui) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionKeywordChip.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionKeywordChip.kt index 3573669a..815ec662 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionKeywordChip.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionKeywordChip.kt @@ -17,13 +17,11 @@ package dev.patrickgold.florisboard.app.ext import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import dev.patrickgold.florisboard.lib.compose.FlorisChip -@OptIn(ExperimentalMaterialApi::class) @Composable fun ExtensionKeywordChip( keyword: String, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/RestoreScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/RestoreScreen.kt index 4f7ac5ad..c532ffb7 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/RestoreScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/RestoreScreen.kt @@ -24,7 +24,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.material.LocalContentAlpha import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Code import androidx.compose.material.icons.filled.Schedule @@ -74,8 +73,7 @@ import org.florisboard.lib.kotlin.io.subDir import org.florisboard.lib.kotlin.io.subFile import java.io.FileNotFoundException import java.text.DateFormat -import java.util.Calendar -import java.util.TimeZone +import java.util.* object Restore { const val MIN_VERSION_CODE = 64 @@ -337,12 +335,12 @@ fun RestoreScreen() = FlorisScreen { .fillMaxWidth() .height(9.dp) .padding(bottom = 8.dp) - .background(LocalContentColor.current.copy(alpha = LocalContentAlpha.current)) + .background(LocalContentColor.current) ) Text( text = stringRes(workspace.restoreWarningId!!), style = MaterialTheme.typography.bodyMedium, - color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current), + color = LocalContentColor.current, fontStyle = FontStyle.Italic, ) } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt index 3c401888..687e5dba 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt @@ -54,10 +54,8 @@ import androidx.compose.material.icons.filled.ToggleOff import androidx.compose.material.icons.filled.ToggleOn import androidx.compose.material.icons.filled.Videocam import androidx.compose.material.ripple.rememberRipple -import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -92,10 +90,6 @@ import dev.patrickgold.florisboard.ime.keyboard.FlorisImeSizing import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager -import org.florisboard.lib.android.AndroidKeyguardManager -import org.florisboard.lib.android.AndroidVersion -import org.florisboard.lib.android.showShortToast -import org.florisboard.lib.android.systemService import dev.patrickgold.florisboard.lib.compose.FlorisIconButtonWithInnerPadding import dev.patrickgold.florisboard.lib.compose.FlorisStaggeredVerticalGrid import dev.patrickgold.florisboard.lib.compose.FlorisTextButton @@ -105,7 +99,14 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.observeAsNonNullState +import dev.patrickgold.florisboard.lib.util.NetworkUtils +import dev.patrickgold.jetpref.datastore.model.observeAsState +import org.florisboard.lib.android.AndroidKeyguardManager +import org.florisboard.lib.android.AndroidVersion +import org.florisboard.lib.android.showShortToast +import org.florisboard.lib.android.systemService import org.florisboard.lib.snygg.SnyggPropertySet +import org.florisboard.lib.snygg.ui.SnyggButton import org.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBorder @@ -113,8 +114,6 @@ import org.florisboard.lib.snygg.ui.snyggClip import org.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.spSize -import dev.patrickgold.florisboard.lib.util.NetworkUtils -import dev.patrickgold.jetpref.datastore.model.observeAsState private val ContentPadding = PaddingValues(horizontal = 4.dp) private val ItemMargin = PaddingValues(all = 6.dp) @@ -144,6 +143,7 @@ fun ClipboardInputLayout( val headerStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardHeader) val itemStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardItem) val popupStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardItemPopup) + val enableHistoryButtonStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardEnableHistoryButton) fun isPopupSurfaceActive() = popupItem != null || showClearAllHistory @@ -536,21 +536,14 @@ fun ClipboardInputLayout( color = itemStyle.foreground.solidColor(context), fontSize = itemStyle.fontSize.spSize(), ) - Button( + SnyggButton( modifier = Modifier .padding(top = 8.dp) .align(Alignment.End), onClick = { prefs.clipboard.historyEnabled.set(true) }, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.primary, - contentColor = Color.White, - ), - ) { - Text( - text = stringRes(R.string.clipboard__disabled__enable_button), - fontSize = itemStyle.fontSize.spSize(), - ) - } + style = enableHistoryButtonStyle, + text = stringRes(R.string.clipboard__disabled__enable_button) + ) } } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/ComputingEvaluator.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/ComputingEvaluator.kt index a127a3eb..06fe3402 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/ComputingEvaluator.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/ComputingEvaluator.kt @@ -55,7 +55,6 @@ import dev.patrickgold.florisboard.ime.input.InputShiftState import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyType import dev.patrickgold.florisboard.lib.FlorisLocale -import org.florisboard.lib.android.AndroidInternalR import dev.patrickgold.jetpref.datastore.ui.vectorResource interface ComputingEvaluator { @@ -208,7 +207,7 @@ fun ComputingEvaluator.computeImageVector(data: KeyData): ImageVector? { } KeyCode.COMPACT_LAYOUT_TO_LEFT, KeyCode.COMPACT_LAYOUT_TO_RIGHT -> { - context()?.vectorResource(id = AndroidInternalR.drawable.ic_qs_one_handed_mode) + context()?.vectorResource(id = R.drawable.ic_accessibility_one_handed) } KeyCode.VOICE_INPUT -> { Icons.Default.KeyboardVoice diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt index 415e90d5..f328f049 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt @@ -28,10 +28,10 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.material.Icon -import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Backspace +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt index 06318cd3..de2cba9a 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt @@ -39,16 +39,14 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState -import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.GenericShape -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Icon -import androidx.compose.material.LocalContentColor -import androidx.compose.material.Tab -import androidx.compose.material.TabRow -import androidx.compose.material.TabRowDefaults -import androidx.compose.material.TabRowDefaults.tabIndicatorOffset -import androidx.compose.material.Text +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.Tab +import androidx.compose.material3.TabRow +import androidx.compose.material3.TabRowDefaults +import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.collectAsState @@ -86,21 +84,21 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager -import org.florisboard.lib.android.AndroidKeyguardManager -import org.florisboard.lib.android.showShortToast -import org.florisboard.lib.android.systemService import dev.patrickgold.florisboard.lib.compose.florisScrollbar import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.stringRes +import dev.patrickgold.jetpref.datastore.model.observeAsState +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.florisboard.lib.android.AndroidKeyguardManager +import org.florisboard.lib.android.showShortToast +import org.florisboard.lib.android.systemService import org.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.spSize -import dev.patrickgold.jetpref.datastore.model.observeAsState -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import kotlin.math.ceil private val EmojiCategoryValues = EmojiCategory.entries @@ -279,15 +277,13 @@ private fun EmojiCategoriesTabRow( .fillMaxWidth() .height(FlorisImeSizing.smartbarHeight), selectedTabIndex = selectedTabIndex, - backgroundColor = Color.Transparent, + containerColor = Color.Transparent, contentColor = selectedContentColor, indicator = { tabPositions -> - Box( - modifier = Modifier - .tabIndicatorOffset(tabPositions[selectedTabIndex]) - .padding(horizontal = 8.dp) - .height(TabRowDefaults.IndicatorHeight) - .background(LocalContentColor.current, CircleShape), + TabRowDefaults.PrimaryIndicator( + Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]), + color = selectedContentColor, + height = 4.dp ) }, ) { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt index 09240091..92eded04 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt @@ -21,17 +21,16 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.material.Icon -import androidx.compose.material.IconButton import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.KeyboardArrowLeft import androidx.compose.material.icons.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.ZoomOutMap +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.florisPreferenceModel import dev.patrickgold.florisboard.ime.input.LocalInputFeedbackController diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt index 84d2a053..311ab6be 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt @@ -25,19 +25,16 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.size -import androidx.compose.material.Icon -import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.MoreHoriz -import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.Dp -import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.ime.keyboard.Key import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt index 9b755266..1f89a7d3 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt @@ -30,8 +30,8 @@ import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.wrapContentWidth -import androidx.compose.material.Icon -import androidx.compose.material.Text +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -45,7 +45,6 @@ import androidx.compose.ui.input.pointer.PointerInputChange import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -56,16 +55,16 @@ import dev.patrickgold.florisboard.ime.nlp.SuggestionCandidate import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager -import org.florisboard.lib.android.AndroidVersion import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.observeAsNonNullState -import org.florisboard.lib.snygg.ui.snyggBackground -import org.florisboard.lib.snygg.ui.solidColor -import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.nlpManager import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.jetpref.datastore.model.observeAsState +import org.florisboard.lib.android.AndroidVersion +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize private val CandidatesRowScrollbarHeight = 2.dp diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt index cf8e8810..5a90064a 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt @@ -20,7 +20,6 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.core.animateFloat -import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.animation.core.updateTransition import androidx.compose.foundation.background @@ -35,13 +34,13 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.material.Icon -import androidx.compose.material.IconButton import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.UnfoldLess import androidx.compose.material.icons.filled.UnfoldMore +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.runtime.collectAsState @@ -65,12 +64,12 @@ import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.lib.compose.horizontalTween import dev.patrickgold.florisboard.lib.compose.verticalTween +import dev.patrickgold.jetpref.datastore.model.observeAsState +import dev.patrickgold.jetpref.datastore.ui.vectorResource import org.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.jetpref.datastore.model.observeAsState -import dev.patrickgold.jetpref.datastore.ui.vectorResource private const val AnimationDuration = 200 @@ -171,10 +170,15 @@ private fun SmartbarMainRow(modifier: Modifier = Modifier) { .snyggBackground(context, primaryActionsToggleStyle), contentAlignment = Alignment.Center, ) { - val rotation by animateFloatAsState( - animationSpec = if (shouldAnimate) AnimationTween else NoAnimationTween, - targetValue = if (sharedActionsExpanded) 180f else 0f, label = "Icon rotation", - ) + val transition = updateTransition(sharedActionsExpanded, label = "sharedActionsExpandedToggleBtn") + val rotation by transition.animateFloat( + transitionSpec = { + if (shouldAnimate) AnimationTween else NoAnimationTween + }, + label = "rotation", + ) { + if (it) 180f else 0f + } val arrowIcon = if (flipToggles) { Icons.AutoMirrored.Default.KeyboardArrowLeft } else { @@ -192,11 +196,7 @@ private fun SmartbarMainRow(modifier: Modifier = Modifier) { arrowIcon } Icon( - modifier = Modifier.apply { - if (isIncognitoMode && incognitoDisplayMode.value == IncognitoDisplayMode.REPLACE_SHARED_ACTIONS_TOGGLE) { - this.rotate(rotation) - } - }, + modifier = Modifier.rotate(if (incognitoDisplayMode.value == IncognitoDisplayMode.DISPLAY_BEHIND_KEYBOARD) rotation else 0f), imageVector = icon, contentDescription = null, tint = primaryActionsToggleStyle.foreground.solidColor( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt index 34cb3040..1ac2a63f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt @@ -35,8 +35,8 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material.Icon -import androidx.compose.material.Text +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue @@ -47,7 +47,6 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt index acfc6f02..396eaf6f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt @@ -32,9 +32,9 @@ import androidx.compose.foundation.lazy.grid.LazyGridItemInfo import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.foundation.lazy.grid.rememberLazyGridState -import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.KeyboardArrowLeft +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.collectAsState @@ -48,7 +48,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.IntOffset @@ -66,12 +65,12 @@ import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.lib.compose.FlorisIconButton import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.stringRes +import dev.patrickgold.florisboard.lib.toIntOffset import org.florisboard.lib.snygg.SnyggPropertySet import org.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggClip import org.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.spSize -import dev.patrickgold.florisboard.lib.toIntOffset private const val ItemNotFound = -1 private val NoopAction = QuickAction.InsertKey(TextKeyData(code = KeyCode.NOOP)) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt index d5d2448e..5a6bf613 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt @@ -21,7 +21,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.material.Icon +import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.collectAsState @@ -42,8 +42,8 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyboardLayout import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager -import org.florisboard.lib.snygg.ui.solidColor import dev.patrickgold.jetpref.datastore.model.observeAsState +import org.florisboard.lib.snygg.ui.solidColor @Composable fun TextInputLayout( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt index a4c3d685..8b090b7c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt @@ -30,8 +30,8 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material.Icon -import androidx.compose.material.Text +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect @@ -55,7 +55,6 @@ import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp @@ -85,21 +84,21 @@ import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.lib.FlorisRect import dev.patrickgold.florisboard.lib.Pointer import dev.patrickgold.florisboard.lib.PointerMap -import org.florisboard.lib.android.isOrientationLandscape import dev.patrickgold.florisboard.lib.compose.DisposableLifecycleEffect import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.devtools.LogTopic import dev.patrickgold.florisboard.lib.devtools.flogDebug import dev.patrickgold.florisboard.lib.observeAsTransformingState -import org.florisboard.lib.snygg.ui.SnyggSurface -import org.florisboard.lib.snygg.ui.snyggBackground -import org.florisboard.lib.snygg.ui.solidColor -import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.lib.toIntOffset import dev.patrickgold.jetpref.datastore.model.observeAsState import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.onFailure import kotlinx.coroutines.isActive +import org.florisboard.lib.android.isOrientationLandscape +import org.florisboard.lib.snygg.ui.SnyggSurface +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import kotlin.math.abs import kotlin.math.sqrt diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt index a85fe476..9082382a 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt @@ -16,10 +16,12 @@ package dev.patrickgold.florisboard.ime.theme -import androidx.compose.material.LocalTextStyle -import androidx.compose.material.MaterialTheme -import androidx.compose.material.darkColors -import androidx.compose.material.lightColors +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.ReadOnlyComposable @@ -32,17 +34,18 @@ import androidx.compose.ui.text.TextStyle import dev.patrickgold.florisboard.ime.input.InputShiftState import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.lib.observeAsNonNullState -import org.florisboard.lib.snygg.SnyggStylesheet import dev.patrickgold.florisboard.themeManager +import org.florisboard.lib.android.AndroidVersion import org.florisboard.lib.snygg.Snygg +import org.florisboard.lib.snygg.SnyggStylesheet import org.florisboard.lib.snygg.ui.ProvideSnyggUiDefaults import org.florisboard.lib.snygg.ui.SnyggUiDefaults private val LocalConfig = staticCompositionLocalOf { error("not init") } private val LocalStyle = staticCompositionLocalOf { error("not init") } -private val MaterialDarkFallbackPalette = darkColors() -private val MaterialLightFallbackPalette = lightColors() +private val MaterialDarkFallbackPalette = darkColorScheme() +private val MaterialLightFallbackPalette = lightColorScheme() object FlorisImeTheme { val config: ThemeExtensionComponent @@ -113,9 +116,17 @@ fun FlorisImeTheme(content: @Composable () -> Unit) { val activeConfig = remember(activeThemeInfo) { activeThemeInfo.config } val activeStyle = remember(activeThemeInfo) { activeThemeInfo.stylesheet } val materialColors = if (activeConfig.isNightTheme) { - MaterialDarkFallbackPalette + if (AndroidVersion.ATLEAST_API31_S) { + dynamicDarkColorScheme(context) + } else { + MaterialDarkFallbackPalette + } } else { - MaterialLightFallbackPalette + if (AndroidVersion.ATLEAST_API31_S) { + dynamicLightColorScheme(context) + } else { + MaterialLightFallbackPalette + } } MaterialTheme(materialColors) { CompositionLocalProvider( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt index e1f8785c..6be74015 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt @@ -104,6 +104,11 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet { fontSize = size(14.sp) shape = roundedCornerShape(12.dp) } + FlorisImeUi.ClipboardEnableHistoryButton { + background = `var`("primary") + foreground = rgbaColor(0, 0, 0) + shape = roundedCornerShape(12.dp) + } FlorisImeUi.EmojiKey { background = rgbaColor(0, 0, 0, 0f) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUi.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUi.kt index 4714de0a..6b1de32e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUi.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUi.kt @@ -25,6 +25,7 @@ object FlorisImeUi { const val ClipboardHeader = "clipboard-header" const val ClipboardItem = "clipboard-item" const val ClipboardItemPopup = "clipboard-item-popup" + const val ClipboardEnableHistoryButton = "clipboard-enable-history-button" const val EmojiKey = "emoji-key" const val EmojiKeyPopup = "emoji-key-popup" diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt index 908ce2ff..29923778 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt @@ -217,6 +217,11 @@ object FlorisImeUiSpec : SnyggSpec({ shadow() border() } + element(FlorisImeUi.ClipboardEnableHistoryButton) { + background() + foreground() + shape() + } element(FlorisImeUi.EmojiKey) { background() diff --git a/app/src/main/res/drawable/ic_accessibility_one_handed.xml b/app/src/main/res/drawable/ic_accessibility_one_handed.xml new file mode 100644 index 00000000..0f65d663 --- /dev/null +++ b/app/src/main/res/drawable/ic_accessibility_one_handed.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0480ab2b..5b882d3b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,7 +41,6 @@ androidx-activity-compose = { module = "androidx.activity:activity-compose", ver androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity" } androidx-autofill = { module = "androidx.autofill:autofill", version.ref = "androidx-autofill" } androidx-collection-ktx = { module = "androidx.collection:collection-ktx", version.ref = "androidx-collection" } -androidx-compose-material = { module = "androidx.compose.material:material", version.ref = "androidx-compose" } androidx-compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "androidx-compose-material3" } androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata", version.ref = "androidx-compose" } androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "androidx-compose" }