0
0
mirror of https://github.com/florisboard/florisboard.git synced 2024-09-19 19:42:20 +02:00

Remove material2 dependency (#2500)

* remove material2

* fix icon rotation in smartbar

* add FB icon for Android Studio's NewUI

* Add new button styling option for clipboard history view
replace one hand mode icon

* apply review suggestions

* ah yes, the trailing commas
This commit is contained in:
Lars Mühlbauer 2024-07-08 01:54:29 +02:00 committed by GitHub
parent 5b7727b884
commit d86fc13cff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 357 additions and 109 deletions

226
.idea/icon.svg Normal file
View File

@ -0,0 +1,226 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="vector"
width="108"
height="108"
viewBox="0 0 108 108"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs10">
<radialGradient
gradientUnits="userSpaceOnUse"
r="20.594"
cx="54.141998"
cy="48.769001"
id="gradient_0"
gradientTransform="matrix(2.193116,0,0,2.193116,-64.427669,-59.442216)">
<stop
offset="0"
stop-color="#55E032FF"
id="stop1" />
<stop
offset="1"
stop-color="#227C53FF"
id="stop2" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
r="20.594"
cx="54.141998"
cy="48.769001"
id="gradient_1"
gradientTransform="matrix(2.193116,0,0,2.193116,-64.427669,-59.442216)">
<stop
offset="0"
stop-color="#55E032FF"
id="stop3" />
<stop
offset="1"
stop-color="#227C53FF"
id="stop4" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
r="12.849"
cx="54.029999"
cy="39.144001"
id="gradient_2"
gradientTransform="matrix(2.193116,0,0,2.193116,-64.427669,-59.442216)">
<stop
offset="0"
stop-color="#FE7901FF"
id="stop5" />
<stop
offset="1"
stop-color="#FEBE01FF"
id="stop6" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
r="20.594"
cx="54.141998"
cy="48.769001"
id="gradient_3"
gradientTransform="matrix(2.193116,0,0,2.193116,-64.427669,-59.442216)">
<stop
offset="0"
stop-color="#55E032FF"
id="stop7" />
<stop
offset="1"
stop-color="#227C53FF"
id="stop8" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
r="17.913"
cx="54.131001"
cy="49.819"
id="gradient_4"
gradientTransform="matrix(2.193116,0,0,2.193116,-64.427669,-59.442216)">
<stop
offset="0"
stop-color="#FE7901FF"
id="stop9" />
<stop
offset="1"
stop-color="#FEBE01FF"
id="stop10" />
</radialGradient>
</defs>
<path
fill="url(#gradient_0)"
d="m 12.291915,34.438502 0.434238,0.0066 c 20.014377,0.256595 36.184221,16.58873 36.184221,36.666707 v 6.504782 C 46.434346,77.090222 43.999987,76.362108 41.642388,75.436613 27.045007,69.710386 16.044337,56.538532 13.081437,41.131892 12.655973,38.923423 12.392799,36.686445 12.289722,34.440694 Z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_0"
style="fill:url(#gradient_0);stroke-width:2.19311" />
<path
fill="url(#gradient_1)"
d="m 41.438428,33.83978 c 1.451843,-7.875479 5.219616,-15.404446 11.305513,-21.490344 0.497838,-0.497837 1.004447,-0.980322 1.524216,-1.449649 0.517575,0.469327 1.026378,0.951812 1.526409,1.449649 6.074931,6.077125 9.842705,13.595127 11.29674,21.459641 -5.296375,4.153762 -9.689186,9.412854 -12.829729,15.428571 -3.136156,-5.974047 -7.53774,-11.23314 -12.823149,-15.395674 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_1"
style="fill:url(#gradient_1);stroke-width:2.19311" />
<path
fill="url(#gradient_2)"
d="M 33.758135,28.900884 C 35.892037,20.613098 40.199317,12.774901 46.684361,6.2876637 48.478331,4.4936948 50.377569,2.8642095 52.362338,1.4035943 L 54.268157,0 56.176168,1.4035943 c 1.984769,1.4628084 3.884009,3.0901005 5.677977,4.8840694 6.480658,6.4806583 10.790132,14.3210483 12.924033,22.6022543 -2.015473,1.030764 -3.949802,2.199695 -5.783247,3.49802 C 67.332549,24.486141 63.437574,16.961559 57.307815,10.833993 56.548998,10.072982 55.768249,9.3492537 54.965567,8.6584222 L 54.265964,8.0553153 53.56636,8.6584222 C 52.765872,9.3492537 51.985123,10.072982 51.226304,10.833993 45.089966,16.970332 41.190606,24.503686 39.53261,32.414255 37.694779,31.111545 35.764837,29.933841 33.753749,28.900884 Z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_2"
style="fill:url(#gradient_2);stroke-width:2.19311" />
<path
fill="url(#gradient_3)"
d="m 96.244398,34.438502 -0.434237,0.0066 c -20.01657,0.256595 -36.186415,16.58873 -36.186415,36.666707 v 6.506976 C 79.890332,73.322449 95.279427,55.74901 96.244398,34.440694 Z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_3"
style="fill:url(#gradient_3);stroke-width:2.19311" />
<path
fill="url(#gradient_4)"
d="m 12.68887,25.874383 0.149132,0.0022 c 4.506853,0.05702 8.996162,0.787328 13.290282,2.168991 11.959063,3.851112 21.891685,12.759549 27.168322,24.058483 l 0.973744,2.083461 0.969357,-2.085654 C 62.347596,36.789522 77.776168,26.104661 95.702698,25.876577 l 0.149133,-0.0022 c 0.291684,2.098811 0.443009,4.241486 0.445201,6.421443 l -0.510995,0.0066 C 74.600536,32.576546 57.485458,49.860493 57.485458,71.111788 v 6.917088 c -1.048309,0.155711 -2.046178,0.188608 -3.079135,0.192995 h -0.13378 c -1.068047,0 -2.144867,-0.07238 -3.212915,-0.219313 v -6.89077 c 0,-21.251295 -17.117271,-38.535242 -38.300578,-38.809382 l -0.510997,-0.0066 c 0,-2.147061 0.149133,-4.296315 0.445203,-6.421443 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_4"
style="fill:url(#gradient_4);stroke-width:2.19311" />
<path
fill="#53cd53"
d="m 101.9772,99.716601 c 0,-2.46287 -1.997925,-4.462992 -4.460795,-4.462992 H 85.243728 c -2.460676,0 -4.460798,1.997929 -4.460798,4.462992 v 3.822599 c 0,2.46068 1.997928,4.4608 4.460798,4.4608 h 12.272677 c 2.460676,0 4.460795,-1.99793 4.460795,-4.4608 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_5"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 78.620517,84.818763 c 0,-2.460676 -1.997928,-4.460798 -4.460797,-4.460798 h -6.096864 c -2.460676,0 -4.460798,1.997929 -4.460798,4.460798 v 3.824795 c 0,2.460676 1.997929,4.460798 4.460798,4.460798 h 6.096864 c 2.460676,0 4.460797,-1.997929 4.460797,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_6"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 61.450612,84.818763 c 0,-2.460676 -1.997929,-4.460798 -4.460798,-4.460798 h -6.09467 c -2.460676,0 -4.460798,1.997929 -4.460798,4.460798 v 3.824795 c 0,2.460676 1.997929,4.460798 4.460798,4.460798 h 6.09467 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_7"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 27.11738,84.818763 c 0,-2.460676 -1.997929,-4.460798 -4.460798,-4.460798 h -6.096863 c -2.460676,0 -4.460798,1.997929 -4.460798,4.460798 v 3.824795 c 0,2.460676 1.997929,4.460798 4.460798,4.460798 h 6.096863 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_8"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 95.78823,84.818763 c 0,-2.460676 -1.997929,-4.460798 -4.460798,-4.460798 h -6.09467 c -2.462869,0 -4.462991,1.997929 -4.462991,4.460798 v 3.824795 c 0,2.460676 1.997928,4.460798 4.462991,4.460798 h 6.09467 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_9"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 21.038062,69.923119 c 0,-2.46287 -1.997928,-4.462991 -4.460797,-4.462991 h -6.09467 c -2.4606765,0 -4.4607984,1.997929 -4.4607984,4.462991 v 3.822601 c 0,2.460676 1.9979288,4.460798 4.4607984,4.460798 h 6.09467 c 2.460676,0 4.460797,-1.997928 4.460797,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_10"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 101.9772,69.923119 c 0,-2.46287 -1.997925,-4.462991 -4.460795,-4.462991 h -6.09467 c -2.460676,0 -4.460797,1.997929 -4.460797,4.462991 v 3.822601 c 0,2.460676 1.997928,4.460798 4.460797,4.460798 h 6.09467 c 2.460676,0 4.460795,-1.997928 4.460795,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_11"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 44.282899,84.818763 c 0,-2.460676 -1.997928,-4.460798 -4.460798,-4.460798 h -6.09467 c -2.462869,0 -4.462991,1.997929 -4.462991,4.460798 v 3.824795 c 0,2.460676 1.99793,4.460798 4.462991,4.460798 h 6.09467 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_12"
style="stroke-width:2.19311" />
<path
fill="#fe9801"
d="m 27.21607,99.716601 c 0,-2.46287 -1.997928,-4.462992 -4.460798,-4.462992 H 10.482595 c -2.4606765,0 -4.4607984,1.997929 -4.4607984,4.462992 v 3.822599 c 0,2.46068 1.9979288,4.4608 4.4607984,4.4608 h 12.272677 c 2.460676,0 4.460798,-1.99793 4.460798,-4.4608 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_13"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 83.756795,67.041365 c 0.655742,0.776363 1.054889,1.783003 1.054889,2.881754 v 3.822601 c 0,2.460676 -1.997928,4.460798 -4.460798,4.460798 h -6.096863 c -1.557112,0 -2.927809,-0.798293 -3.723911,-2.006701 4.91258,-2.307158 9.377765,-5.414803 13.226683,-9.158452 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_14"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 24.529503,66.738714 c 3.796284,3.76558 8.20664,6.919282 13.066585,9.263722 -0.774169,1.320257 -2.210661,2.204082 -3.848919,2.204082 h -6.096862 c -2.460676,0 -4.460798,-1.997928 -4.460798,-4.460798 v -3.822601 c 0,-1.247883 0.510996,-2.375144 1.337801,-3.186598 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_15"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 14.015705,51.362778 c 1.868535,4.322632 4.359915,8.346999 7.366677,11.950289 h -4.822663 c -2.460676,0 -4.460798,-1.997928 -4.460798,-4.460797 v -3.824795 c 0,-1.517637 0.758819,-2.85763 1.916784,-3.664697 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_16"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 94.369284,51.764118 c 0.87286,0.813646 1.418946,1.975997 1.418946,3.263357 v 3.824795 c 0,2.460676 -1.997929,4.460797 -4.460798,4.460797 h -4.116479 c 2.897106,-3.471703 5.313921,-7.355711 7.156137,-11.548949 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_17"
style="stroke-width:2.19311" />
<path
fill="#ffffff"
d="m 78.782808,99.819677 c 0,-2.432165 -1.971611,-4.40597 -4.403777,-4.40597 H 33.738397 c -2.432166,0 -4.405969,1.973805 -4.405969,4.40597 v 3.774353 c 0,2.43217 1.973803,4.40378 4.405969,4.40378 h 40.640634 c 2.432166,0 4.403777,-1.97161 4.403777,-4.40378 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_18"
style="stroke-width:2.19311" />
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -180,7 +180,6 @@ dependencies {
implementation(libs.androidx.activity.ktx) implementation(libs.androidx.activity.ktx)
implementation(libs.androidx.autofill) implementation(libs.androidx.autofill)
implementation(libs.androidx.collection.ktx) implementation(libs.androidx.collection.ktx)
implementation(libs.androidx.compose.material)
implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.runtime.livedata) implementation(libs.androidx.compose.runtime.livedata)
implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui)

View File

@ -17,13 +17,11 @@
package dev.patrickgold.florisboard.app.ext package dev.patrickgold.florisboard.app.ext
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.patrickgold.florisboard.lib.compose.FlorisChip import dev.patrickgold.florisboard.lib.compose.FlorisChip
@OptIn(ExperimentalMaterialApi::class)
@Composable @Composable
fun ExtensionKeywordChip( fun ExtensionKeywordChip(
keyword: String, keyword: String,

View File

@ -24,7 +24,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.LocalContentAlpha
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Code import androidx.compose.material.icons.filled.Code
import androidx.compose.material.icons.filled.Schedule 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 org.florisboard.lib.kotlin.io.subFile
import java.io.FileNotFoundException import java.io.FileNotFoundException
import java.text.DateFormat import java.text.DateFormat
import java.util.Calendar import java.util.*
import java.util.TimeZone
object Restore { object Restore {
const val MIN_VERSION_CODE = 64 const val MIN_VERSION_CODE = 64
@ -337,12 +335,12 @@ fun RestoreScreen() = FlorisScreen {
.fillMaxWidth() .fillMaxWidth()
.height(9.dp) .height(9.dp)
.padding(bottom = 8.dp) .padding(bottom = 8.dp)
.background(LocalContentColor.current.copy(alpha = LocalContentAlpha.current)) .background(LocalContentColor.current)
) )
Text( Text(
text = stringRes(workspace.restoreWarningId!!), text = stringRes(workspace.restoreWarningId!!),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = LocalContentColor.current.copy(alpha = LocalContentAlpha.current), color = LocalContentColor.current,
fontStyle = FontStyle.Italic, fontStyle = FontStyle.Italic,
) )
} }

View File

@ -54,10 +54,8 @@ import androidx.compose.material.icons.filled.ToggleOff
import androidx.compose.material.icons.filled.ToggleOn import androidx.compose.material.icons.filled.ToggleOn
import androidx.compose.material.icons.filled.Videocam import androidx.compose.material.icons.filled.Videocam
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue 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.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager 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.FlorisIconButtonWithInnerPadding
import dev.patrickgold.florisboard.lib.compose.FlorisStaggeredVerticalGrid import dev.patrickgold.florisboard.lib.compose.FlorisStaggeredVerticalGrid
import dev.patrickgold.florisboard.lib.compose.FlorisTextButton 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.safeTimes
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.observeAsNonNullState 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.SnyggPropertySet
import org.florisboard.lib.snygg.ui.SnyggButton
import org.florisboard.lib.snygg.ui.SnyggSurface import org.florisboard.lib.snygg.ui.SnyggSurface
import org.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import org.florisboard.lib.snygg.ui.snyggBorder 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.snyggShadow
import org.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import org.florisboard.lib.snygg.ui.spSize 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 ContentPadding = PaddingValues(horizontal = 4.dp)
private val ItemMargin = PaddingValues(all = 6.dp) private val ItemMargin = PaddingValues(all = 6.dp)
@ -144,6 +143,7 @@ fun ClipboardInputLayout(
val headerStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardHeader) val headerStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardHeader)
val itemStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardItem) val itemStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardItem)
val popupStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardItemPopup) val popupStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardItemPopup)
val enableHistoryButtonStyle = FlorisImeTheme.style.get(FlorisImeUi.ClipboardEnableHistoryButton)
fun isPopupSurfaceActive() = popupItem != null || showClearAllHistory fun isPopupSurfaceActive() = popupItem != null || showClearAllHistory
@ -536,21 +536,14 @@ fun ClipboardInputLayout(
color = itemStyle.foreground.solidColor(context), color = itemStyle.foreground.solidColor(context),
fontSize = itemStyle.fontSize.spSize(), fontSize = itemStyle.fontSize.spSize(),
) )
Button( SnyggButton(
modifier = Modifier modifier = Modifier
.padding(top = 8.dp) .padding(top = 8.dp)
.align(Alignment.End), .align(Alignment.End),
onClick = { prefs.clipboard.historyEnabled.set(true) }, onClick = { prefs.clipboard.historyEnabled.set(true) },
colors = ButtonDefaults.buttonColors( style = enableHistoryButtonStyle,
containerColor = MaterialTheme.colorScheme.primary, text = stringRes(R.string.clipboard__disabled__enable_button)
contentColor = Color.White, )
),
) {
Text(
text = stringRes(R.string.clipboard__disabled__enable_button),
fontSize = itemStyle.fontSize.spSize(),
)
}
} }
} }
} }

View File

@ -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.KeyCode
import dev.patrickgold.florisboard.ime.text.key.KeyType import dev.patrickgold.florisboard.ime.text.key.KeyType
import dev.patrickgold.florisboard.lib.FlorisLocale import dev.patrickgold.florisboard.lib.FlorisLocale
import org.florisboard.lib.android.AndroidInternalR
import dev.patrickgold.jetpref.datastore.ui.vectorResource import dev.patrickgold.jetpref.datastore.ui.vectorResource
interface ComputingEvaluator { interface ComputingEvaluator {
@ -208,7 +207,7 @@ fun ComputingEvaluator.computeImageVector(data: KeyData): ImageVector? {
} }
KeyCode.COMPACT_LAYOUT_TO_LEFT, KeyCode.COMPACT_LAYOUT_TO_LEFT,
KeyCode.COMPACT_LAYOUT_TO_RIGHT -> { 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 -> { KeyCode.VOICE_INPUT -> {
Icons.Default.KeyboardVoice Icons.Default.KeyboardVoice

View File

@ -28,10 +28,10 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding 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.Icons
import androidx.compose.material.icons.outlined.Backspace 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.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect

View File

@ -39,16 +39,14 @@ import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.GenericShape import androidx.compose.foundation.shape.GenericShape
import androidx.compose.material.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.LocalContentColor import androidx.compose.material3.Tab
import androidx.compose.material.Tab import androidx.compose.material3.TabRow
import androidx.compose.material.TabRow import androidx.compose.material3.TabRowDefaults
import androidx.compose.material.TabRowDefaults import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material.TabRowDefaults.tabIndicatorOffset import androidx.compose.material3.Text
import androidx.compose.material.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState 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.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager 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.florisScrollbar
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.compose.stringRes 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.snyggBackground
import org.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import org.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import org.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import org.florisboard.lib.snygg.ui.spSize 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 import kotlin.math.ceil
private val EmojiCategoryValues = EmojiCategory.entries private val EmojiCategoryValues = EmojiCategory.entries
@ -279,15 +277,13 @@ private fun EmojiCategoriesTabRow(
.fillMaxWidth() .fillMaxWidth()
.height(FlorisImeSizing.smartbarHeight), .height(FlorisImeSizing.smartbarHeight),
selectedTabIndex = selectedTabIndex, selectedTabIndex = selectedTabIndex,
backgroundColor = Color.Transparent, containerColor = Color.Transparent,
contentColor = selectedContentColor, contentColor = selectedContentColor,
indicator = { tabPositions -> indicator = { tabPositions ->
Box( TabRowDefaults.PrimaryIndicator(
modifier = Modifier Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]),
.tabIndicatorOffset(tabPositions[selectedTabIndex]) color = selectedContentColor,
.padding(horizontal = 8.dp) height = 4.dp
.height(TabRowDefaults.IndicatorHeight)
.background(LocalContentColor.current, CircleShape),
) )
}, },
) { ) {

View File

@ -21,17 +21,16 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height 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.Icons
import androidx.compose.material.icons.filled.KeyboardArrowLeft import androidx.compose.material.icons.filled.KeyboardArrowLeft
import androidx.compose.material.icons.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.material.icons.filled.ZoomOutMap 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.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.app.florisPreferenceModel import dev.patrickgold.florisboard.app.florisPreferenceModel
import dev.patrickgold.florisboard.ime.input.LocalInputFeedbackController import dev.patrickgold.florisboard.ime.input.LocalInputFeedbackController

View File

@ -25,19 +25,16 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.size 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.Icons
import androidx.compose.material.icons.filled.MoreHoriz 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.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.ime.keyboard.Key import dev.patrickgold.florisboard.ime.keyboard.Key
import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme

View File

@ -30,8 +30,8 @@ import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue 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.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow 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.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import org.florisboard.lib.android.AndroidVersion
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.observeAsNonNullState 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.nlpManager
import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.florisboard.subtypeManager
import dev.patrickgold.jetpref.datastore.model.observeAsState 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 private val CandidatesRowScrollbarHeight = 2.dp

View File

@ -20,7 +20,6 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.EnterTransition import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition import androidx.compose.animation.ExitTransition
import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.core.updateTransition import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.background 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.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding 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.Icons
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
import androidx.compose.material.icons.filled.UnfoldLess import androidx.compose.material.icons.filled.UnfoldLess
import androidx.compose.material.icons.filled.UnfoldMore 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.Composable
import androidx.compose.runtime.SideEffect import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.collectAsState 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.keyboardManager
import dev.patrickgold.florisboard.lib.compose.horizontalTween import dev.patrickgold.florisboard.lib.compose.horizontalTween
import dev.patrickgold.florisboard.lib.compose.verticalTween 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.snyggBackground
import org.florisboard.lib.snygg.ui.snyggBorder import org.florisboard.lib.snygg.ui.snyggBorder
import org.florisboard.lib.snygg.ui.snyggShadow import org.florisboard.lib.snygg.ui.snyggShadow
import org.florisboard.lib.snygg.ui.solidColor 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 private const val AnimationDuration = 200
@ -171,10 +170,15 @@ private fun SmartbarMainRow(modifier: Modifier = Modifier) {
.snyggBackground(context, primaryActionsToggleStyle), .snyggBackground(context, primaryActionsToggleStyle),
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
val rotation by animateFloatAsState( val transition = updateTransition(sharedActionsExpanded, label = "sharedActionsExpandedToggleBtn")
animationSpec = if (shouldAnimate) AnimationTween else NoAnimationTween, val rotation by transition.animateFloat(
targetValue = if (sharedActionsExpanded) 180f else 0f, label = "Icon rotation", transitionSpec = {
) if (shouldAnimate) AnimationTween else NoAnimationTween
},
label = "rotation",
) {
if (it) 180f else 0f
}
val arrowIcon = if (flipToggles) { val arrowIcon = if (flipToggles) {
Icons.AutoMirrored.Default.KeyboardArrowLeft Icons.AutoMirrored.Default.KeyboardArrowLeft
} else { } else {
@ -192,11 +196,7 @@ private fun SmartbarMainRow(modifier: Modifier = Modifier) {
arrowIcon arrowIcon
} }
Icon( Icon(
modifier = Modifier.apply { modifier = Modifier.rotate(if (incognitoDisplayMode.value == IncognitoDisplayMode.DISPLAY_BEHIND_KEYBOARD) rotation else 0f),
if (isIncognitoMode && incognitoDisplayMode.value == IncognitoDisplayMode.REPLACE_SHARED_ACTIONS_TOGGLE) {
this.rotate(rotation)
}
},
imageVector = icon, imageVector = icon,
contentDescription = null, contentDescription = null,
tint = primaryActionsToggleStyle.foreground.solidColor( tint = primaryActionsToggleStyle.foreground.solidColor(

View File

@ -35,8 +35,8 @@ import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue 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.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext 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.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp

View File

@ -32,9 +32,9 @@ import androidx.compose.foundation.lazy.grid.LazyGridItemInfo
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.foundation.lazy.grid.itemsIndexed
import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowLeft import androidx.compose.material.icons.filled.KeyboardArrowLeft
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.collectAsState 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.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.IntOffset 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.FlorisIconButton
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.toIntOffset
import org.florisboard.lib.snygg.SnyggPropertySet import org.florisboard.lib.snygg.SnyggPropertySet
import org.florisboard.lib.snygg.ui.snyggBackground import org.florisboard.lib.snygg.ui.snyggBackground
import org.florisboard.lib.snygg.ui.snyggClip import org.florisboard.lib.snygg.ui.snyggClip
import org.florisboard.lib.snygg.ui.solidColor import org.florisboard.lib.snygg.ui.solidColor
import org.florisboard.lib.snygg.ui.spSize import org.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.lib.toIntOffset
private const val ItemNotFound = -1 private const val ItemNotFound = -1
private val NoopAction = QuickAction.InsertKey(TextKeyData(code = KeyCode.NOOP)) private val NoopAction = QuickAction.InsertKey(TextKeyData(code = KeyCode.NOOP))

View File

@ -21,7 +21,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.wrapContentHeight 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.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState 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.FlorisImeTheme
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import org.florisboard.lib.snygg.ui.solidColor
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import org.florisboard.lib.snygg.ui.solidColor
@Composable @Composable
fun TextInputLayout( fun TextInputLayout(

View File

@ -30,8 +30,8 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.Icon import androidx.compose.material3.Icon
import androidx.compose.material.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect 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.LocalConfiguration
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp 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.FlorisRect
import dev.patrickgold.florisboard.lib.Pointer import dev.patrickgold.florisboard.lib.Pointer
import dev.patrickgold.florisboard.lib.PointerMap 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.DisposableLifecycleEffect
import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.safeTimes
import dev.patrickgold.florisboard.lib.devtools.LogTopic import dev.patrickgold.florisboard.lib.devtools.LogTopic
import dev.patrickgold.florisboard.lib.devtools.flogDebug import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.observeAsTransformingState 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.florisboard.lib.toIntOffset
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.onFailure import kotlinx.coroutines.channels.onFailure
import kotlinx.coroutines.isActive 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.abs
import kotlin.math.sqrt import kotlin.math.sqrt

View File

@ -16,10 +16,12 @@
package dev.patrickgold.florisboard.ime.theme package dev.patrickgold.florisboard.ime.theme
import androidx.compose.material.LocalTextStyle import androidx.compose.material3.LocalTextStyle
import androidx.compose.material.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material.darkColors import androidx.compose.material3.darkColorScheme
import androidx.compose.material.lightColors import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.ReadOnlyComposable 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.input.InputShiftState
import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.lib.observeAsNonNullState import dev.patrickgold.florisboard.lib.observeAsNonNullState
import org.florisboard.lib.snygg.SnyggStylesheet
import dev.patrickgold.florisboard.themeManager import dev.patrickgold.florisboard.themeManager
import org.florisboard.lib.android.AndroidVersion
import org.florisboard.lib.snygg.Snygg 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.ProvideSnyggUiDefaults
import org.florisboard.lib.snygg.ui.SnyggUiDefaults import org.florisboard.lib.snygg.ui.SnyggUiDefaults
private val LocalConfig = staticCompositionLocalOf<ThemeExtensionComponent> { error("not init") } private val LocalConfig = staticCompositionLocalOf<ThemeExtensionComponent> { error("not init") }
private val LocalStyle = staticCompositionLocalOf<SnyggStylesheet> { error("not init") } private val LocalStyle = staticCompositionLocalOf<SnyggStylesheet> { error("not init") }
private val MaterialDarkFallbackPalette = darkColors() private val MaterialDarkFallbackPalette = darkColorScheme()
private val MaterialLightFallbackPalette = lightColors() private val MaterialLightFallbackPalette = lightColorScheme()
object FlorisImeTheme { object FlorisImeTheme {
val config: ThemeExtensionComponent val config: ThemeExtensionComponent
@ -113,9 +116,17 @@ fun FlorisImeTheme(content: @Composable () -> Unit) {
val activeConfig = remember(activeThemeInfo) { activeThemeInfo.config } val activeConfig = remember(activeThemeInfo) { activeThemeInfo.config }
val activeStyle = remember(activeThemeInfo) { activeThemeInfo.stylesheet } val activeStyle = remember(activeThemeInfo) { activeThemeInfo.stylesheet }
val materialColors = if (activeConfig.isNightTheme) { val materialColors = if (activeConfig.isNightTheme) {
MaterialDarkFallbackPalette if (AndroidVersion.ATLEAST_API31_S) {
dynamicDarkColorScheme(context)
} else {
MaterialDarkFallbackPalette
}
} else { } else {
MaterialLightFallbackPalette if (AndroidVersion.ATLEAST_API31_S) {
dynamicLightColorScheme(context)
} else {
MaterialLightFallbackPalette
}
} }
MaterialTheme(materialColors) { MaterialTheme(materialColors) {
CompositionLocalProvider( CompositionLocalProvider(

View File

@ -104,6 +104,11 @@ val FlorisImeThemeBaseStyle = SnyggStylesheet {
fontSize = size(14.sp) fontSize = size(14.sp)
shape = roundedCornerShape(12.dp) shape = roundedCornerShape(12.dp)
} }
FlorisImeUi.ClipboardEnableHistoryButton {
background = `var`("primary")
foreground = rgbaColor(0, 0, 0)
shape = roundedCornerShape(12.dp)
}
FlorisImeUi.EmojiKey { FlorisImeUi.EmojiKey {
background = rgbaColor(0, 0, 0, 0f) background = rgbaColor(0, 0, 0, 0f)

View File

@ -25,6 +25,7 @@ object FlorisImeUi {
const val ClipboardHeader = "clipboard-header" const val ClipboardHeader = "clipboard-header"
const val ClipboardItem = "clipboard-item" const val ClipboardItem = "clipboard-item"
const val ClipboardItemPopup = "clipboard-item-popup" const val ClipboardItemPopup = "clipboard-item-popup"
const val ClipboardEnableHistoryButton = "clipboard-enable-history-button"
const val EmojiKey = "emoji-key" const val EmojiKey = "emoji-key"
const val EmojiKeyPopup = "emoji-key-popup" const val EmojiKeyPopup = "emoji-key-popup"

View File

@ -217,6 +217,11 @@ object FlorisImeUiSpec : SnyggSpec({
shadow() shadow()
border() border()
} }
element(FlorisImeUi.ClipboardEnableHistoryButton) {
background()
foreground()
shape()
}
element(FlorisImeUi.EmojiKey) { element(FlorisImeUi.EmojiKey) {
background() background()

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2021 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000000"
android:pathData="M4.64169 3C3.88567 3 3.27271 3.61296 3.27271 4.36898V18.4011C3.27271 19.154 3.88875 19.7701 4.64169 19.7701H12.5339C12.5339 19.7701 12.5425 18.0588 11.2324 18.0588H6.01067C5.44597 18.0588 4.98393 17.5968 4.98393 17.0321V5.73797C4.98393 5.17326 5.44597 4.71123 6.01067 4.71123H15.9358C16.5005 4.71123 16.9625 5.17326 16.9625 5.73797V9.84492C16.9625 10.9651 16.4899 12.5952 15.5936 13.2674L9.77538 9.16043C8.58505 10.425 8.88177 11.705 10.1176 12.9251L13.1978 16.0053C13.1978 16.0053 13.3231 17.4572 13.5401 18.0588C14.2034 19.8984 16.2781 20.7968 16.2781 20.7968H19.231H19.2967C20.0835 20.7968 20.7273 20.153 20.7273 19.3662V12.2543L18.9441 4.06781C18.7662 3.23718 18.4068 3 17.8729 3H4.64169Z"/>
</vector>

View File

@ -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-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity" }
androidx-autofill = { module = "androidx.autofill:autofill", version.ref = "androidx-autofill" } androidx-autofill = { module = "androidx.autofill:autofill", version.ref = "androidx-autofill" }
androidx-collection-ktx = { module = "androidx.collection:collection-ktx", version.ref = "androidx-collection" } 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-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-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata", version.ref = "androidx-compose" }
androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "androidx-compose" } androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "androidx-compose" }