mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
fix(shared): align action icons and storage refresh
This commit is contained in:
@@ -3700,10 +3700,10 @@
|
|||||||
"storage_delete_transfers_caption": {
|
"storage_delete_transfers_caption": {
|
||||||
"context": "Settings > Storage: caption under the destructive delete-all button.",
|
"context": "Settings > Storage: caption under the destructive delete-all button.",
|
||||||
"translations": {
|
"translations": {
|
||||||
"en": "Clears your send and receive history and the app's cached share content. Received files on disk are kept.",
|
"en": "Clears your send and receive history and the app’s cached share content. Received files on disk are kept.",
|
||||||
"fr": "Efface votre historique d'envois et de réceptions ainsi que le contenu de partage mis en cache par l'app. Les fichiers reçus sur le disque sont conservés.",
|
"fr": "Efface votre historique d’envois et de réceptions ainsi que le contenu de partage mis en cache par l’app. Les fichiers reçus sur le disque sont conservés.",
|
||||||
"es": "Borra tu historial de envíos y recepciones y el contenido compartido en caché de la app. Los archivos recibidos en el disco se conservan.",
|
"es": "Borra tu historial de envíos y recepciones y el contenido compartido en caché de la app. Los archivos recibidos en el disco se conservan.",
|
||||||
"it": "Cancella la cronologia di invii e ricezioni e i contenuti di condivisione memorizzati dall'app. I file ricevuti sul disco vengono mantenuti.",
|
"it": "Cancella la cronologia di invii e ricezioni e i contenuti di condivisione memorizzati dall’app. I file ricevuti sul disco vengono mantenuti.",
|
||||||
"de": "Löscht deinen Sende- und Empfangsverlauf sowie die zwischengespeicherten Freigabeinhalte der App. Empfangene Dateien auf dem Datenträger bleiben erhalten.",
|
"de": "Löscht deinen Sende- und Empfangsverlauf sowie die zwischengespeicherten Freigabeinhalte der App. Empfangene Dateien auf dem Datenträger bleiben erhalten.",
|
||||||
"pt": "Limpa o teu histórico de envios e receções e o conteúdo de partilha em cache da app. Os ficheiros recebidos no disco são mantidos.",
|
"pt": "Limpa o teu histórico de envios e receções e o conteúdo de partilha em cache da app. Os ficheiros recebidos no disco são mantidos.",
|
||||||
"pl": "Czyści historię wysyłania i odbierania oraz zapisane w pamięci podręcznej udostępniane treści. Odebrane pliki na dysku zostają zachowane.",
|
"pl": "Czyści historię wysyłania i odbierania oraz zapisane w pamięci podręcznej udostępniane treści. Odebrane pliki na dysku zostają zachowane.",
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- fluent icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M12 7.75C11.0335 7.75 10.25 6.9665 10.25 6C10.25 5.0335 11.0335 4.25 12 4.25C12.9665 4.25 13.75 5.0335 13.75 6C13.75 6.9665 12.9665 7.75 12 7.75ZM12 13.75C11.0335 13.75 10.25 12.9665 10.25 12C10.25 11.0335 11.0335 10.25 12 10.25C12.9665 10.25 13.75 11.0335 13.75 12C13.75 12.9665 12.9665 13.75 12 13.75ZM10.25 18C10.25 18.9665 11.0335 19.75 12 19.75C12.9665 19.75 13.75 18.9665 13.75 18C13.75 17.0335 12.9665 16.25 12 16.25C11.0335 16.25 10.25 17.0335 10.25 18Z" android:fillColor="#FF000000" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- fluent icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M10.2499 2.99985C10.6641 2.99985 10.9999 3.33571 10.9999 3.74985C10.9999 4.16407 10.6642 4.49985 10.2499 4.49985H6.74994C5.50735 4.49985 4.50002 5.50728 4.49994 6.74985V17.2499L4.51166 17.4803C4.62708 18.6147 5.58511 19.4999 6.74994 19.4999H17.2499C18.4926 19.4999 19.4999 18.4925 19.4999 17.2499V15.2499C19.5 14.8357 19.8358 14.4999 20.2499 14.4999C20.6641 14.4999 20.9999 14.8357 20.9999 15.2499V17.2499C20.9999 19.3209 19.321 20.9999 17.2499 20.9999H6.74994C4.74372 20.9999 3.10545 19.4244 3.00482 17.4432L2.99994 17.2499V6.74985C3.00002 4.67885 4.67892 2.99985 6.74994 2.99985H10.2499ZM14.9365 2.06821C15.2025 1.94588 15.5159 1.98997 15.7382 2.18052L22.7382 8.18052C22.8985 8.31798 22.9937 8.5173 22.9999 8.72837C23.006 8.93935 22.9224 9.14336 22.7704 9.28989L15.7704 16.0399C15.554 16.2486 15.2337 16.3077 14.957 16.1903C14.6801 16.0726 14.4999 15.8007 14.4999 15.4999V12.5243C13.4856 12.5878 12.5295 12.7971 11.5605 13.2928C10.4241 13.8742 9.21636 14.8744 7.87103 16.5956L7.59955 16.9501C7.40582 17.2081 7.06877 17.3138 6.76263 17.2118C6.4564 17.1097 6.24994 16.8227 6.24994 16.4999C6.24996 13.6426 6.93653 10.9108 8.41791 8.87192C9.79374 6.97863 11.8288 5.72528 14.4999 5.52817V2.74985L14.5078 2.64146C14.5441 2.39271 14.7037 2.17528 14.9365 2.06821ZM15.9999 6.24985C15.9999 6.66407 15.6642 6.99985 15.2499 6.99985C12.6932 6.99985 10.8549 8.06982 9.63177 9.75278C8.75381 10.961 8.17788 12.5099 7.91498 14.2459C8.91528 13.1985 9.89191 12.4608 10.8769 11.9569C12.3601 11.1981 13.8009 10.9999 15.2499 10.9999C15.4488 10.9999 15.6396 11.079 15.7802 11.2196C15.9208 11.3602 15.9999 11.551 15.9999 11.7499V13.7342L21.1347 8.78208L15.9999 4.37974V6.24985Z" android:fillColor="#FF000000" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- fluent icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M8.66535 15.7345C8.90969 15.9075 9.20192 15.9999 9.50129 15.9989V15.9949C9.78358 15.9955 10.0598 15.9132 10.2957 15.7582C10.5316 15.6031 10.7168 15.3822 10.8283 15.1229L11.4413 13.2589C11.5829 12.8366 11.8207 12.4531 12.1361 12.1386C12.4514 11.8241 12.8356 11.5873 13.2583 11.4469L15.0363 10.8689C15.3227 10.7683 15.5701 10.5799 15.7432 10.3305C15.9164 10.0812 16.0065 9.7836 16.0007 9.48009C15.9949 9.17659 15.8936 8.88262 15.7111 8.64003C15.5286 8.39744 15.2743 8.21858 14.9843 8.12889L13.2293 7.55889C12.8048 7.41763 12.419 7.1793 12.1027 6.86283C11.7864 6.54637 11.5483 6.1605 11.4073 5.73589L10.8293 3.95889C10.7285 3.67586 10.542 3.43127 10.2958 3.25908C10.0496 3.0869 9.7559 2.99567 9.45547 2.99809C9.15504 3.00051 8.86282 3.09645 8.61942 3.27258C8.37602 3.44871 8.19353 3.69628 8.09729 3.98089L7.51429 5.77289C7.37371 6.18515 7.14135 6.56012 6.83474 6.8695C6.52813 7.17888 6.15528 7.4146 5.74429 7.55889L3.96729 8.12989C3.75592 8.20382 3.56463 8.32589 3.40855 8.48647C3.25247 8.64704 3.13587 8.84172 3.06798 9.05511C3.00008 9.2685 2.98274 9.49475 3.01733 9.716C3.05193 9.93724 3.1375 10.1474 3.26729 10.3299C3.44418 10.5789 3.69508 10.7657 3.98429 10.8639L5.73829 11.4329C6.16392 11.5753 6.55049 11.815 6.86729 12.1329C6.95236 12.2173 7.03186 12.3072 7.10529 12.4019C7.30447 12.6597 7.45833 12.9495 7.56029 13.2589L8.13829 15.0339C8.23676 15.3166 8.42102 15.5615 8.66535 15.7345ZM8.29129 11.4849C8.17979 11.3392 8.05851 11.2012 7.92829 11.0719H7.93129C7.44841 10.5886 6.85948 10.2247 6.21129 10.0089L4.61129 9.50089L6.22229 8.97689C6.85983 8.75615 7.43806 8.39176 7.91229 7.91189C8.38447 7.42897 8.74047 6.84487 8.95329 6.20389L9.46829 4.62189L9.98429 6.20889C10.1997 6.85585 10.5633 7.44351 11.0462 7.92497C11.529 8.40643 12.1177 8.76837 12.7653 8.98189L14.3843 9.50389L12.7953 10.0189C12.1489 10.2338 11.5616 10.5965 11.08 11.0782C10.5984 11.56 10.2359 12.1474 10.0213 12.7939L9.50629 14.3759L8.99129 12.7909C8.83406 12.3189 8.59732 11.8772 8.29129 11.4849ZM16.332 20.7819C16.1415 20.6461 15.9981 20.4541 15.922 20.2329L15.594 19.2259C15.5302 19.0344 15.4231 18.8602 15.281 18.7169C15.1385 18.574 14.9645 18.4664 14.773 18.4029L13.782 18.0799C13.5516 18.0026 13.3516 17.8541 13.211 17.6559C13.0737 17.4636 13.0002 17.2331 13.001 16.9969C13.0013 16.7591 13.0757 16.5274 13.214 16.3339C13.3512 16.1394 13.5466 15.9934 13.772 15.9169L14.778 15.5909C14.965 15.5245 15.1343 15.4162 15.273 15.2742C15.4117 15.1322 15.516 14.9604 15.578 14.7719L15.902 13.7799C15.9782 13.5557 16.1222 13.3606 16.3141 13.2218C16.5059 13.0829 16.7362 13.0071 16.973 13.0048C17.2099 13.0025 17.4416 13.0738 17.6361 13.2089C17.8306 13.344 17.9784 13.5362 18.059 13.7589L18.388 14.7729C18.4524 14.963 18.5599 15.1356 18.7022 15.2771C18.8445 15.4187 19.0176 15.5254 19.208 15.5889L20.2 15.9119C20.4287 15.9834 20.629 16.1251 20.7727 16.3169C20.9163 16.5086 20.9959 16.7408 21.0002 16.9803C21.0045 17.2199 20.9333 17.4547 20.7967 17.6516C20.6601 17.8484 20.4649 17.9972 20.239 18.0769L19.225 18.4059C19.0349 18.4707 18.8622 18.5781 18.72 18.7199C18.5777 18.8627 18.4705 19.0366 18.407 19.2279L18.085 20.2169C18.0075 20.4472 17.8586 20.6469 17.66 20.7869C17.468 20.9249 17.2375 20.9991 17.001 20.9989C16.7607 20.9989 16.5265 20.9229 16.332 20.7819ZM15.3014 16.999C15.6943 17.1386 16.051 17.3646 16.3452 17.6602C16.6394 17.956 16.8635 18.314 17.001 18.7079C17.1399 18.3158 17.3646 17.9597 17.6587 17.6656C17.9528 17.3715 18.3089 17.1468 18.701 17.0079C18.3026 16.8685 17.9406 16.6412 17.642 16.3429C17.3469 16.049 17.1217 15.6926 16.983 15.2999C16.8449 15.6898 16.6223 16.0444 16.3312 16.3383C16.0407 16.6316 15.689 16.8572 15.3014 16.999Z" android:fillColor="#FF000000" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- fluent icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M19.25 4.5C19.3881 4.5 19.5 4.61193 19.5 4.75V19.25C19.5 19.3881 19.3881 19.5 19.25 19.5H4.75C4.61193 19.5 4.5 19.3881 4.5 19.25V4.75C4.5 4.61193 4.61193 4.5 4.75 4.5H19.25ZM4.75 3C3.7835 3 3 3.7835 3 4.75V19.25C3 20.2165 3.7835 21 4.75 21H19.25C20.2165 21 21 20.2165 21 19.25V4.75C21 3.7835 20.2165 3 19.25 3H4.75Z" android:fillColor="#FF000000" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- lucide icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M 13 12 A 1 1 0 1 0 11 12 A 1 1 0 1 0 13 12" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 13 5 A 1 1 0 1 0 11 5 A 1 1 0 1 0 13 5" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 13 19 A 1 1 0 1 0 11 19 A 1 1 0 1 0 13 19" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- lucide icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M 21 5 A 3 3 0 1 0 15 5 A 3 3 0 1 0 21 5" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 9 12 A 3 3 0 1 0 3 12 A 3 3 0 1 0 9 12" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 21 19 A 3 3 0 1 0 15 19 A 3 3 0 1 0 21 19" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 8.59 13.51 L 15.42 17.49" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 15.41 6.51 L 8.59 10.49" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- lucide icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M20 2v4" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M22 4h-4" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 6 20 A 2 2 0 1 0 2 20 A 2 2 0 1 0 6 20" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- lucide icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:pathData="M 22 12 A 10 10 0 1 0 2 12 A 10 10 0 1 0 22 12" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M 10 9 H 14 A 1 1 0 0 1 15 10 V 14 A 1 1 0 0 1 14 15 H 10 A 1 1 0 0 1 9 14 V 10 A 1 1 0 0 1 10 9 Z" android:fillColor="#00000000" android:strokeColor="#FF000000" android:strokeWidth="2" android:strokeLineCap="round" android:strokeLineJoin="round" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960">
|
||||||
|
<!-- material icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:fillColor="#FF000000" android:pathData="M480,800Q447,800 423.5,776.5Q400,753 400,720Q400,687 423.5,663.5Q447,640 480,640Q513,640 536.5,663.5Q560,687 560,720Q560,753 536.5,776.5Q513,800 480,800ZM480,560Q447,560 423.5,536.5Q400,513 400,480Q400,447 423.5,423.5Q447,400 480,400Q513,400 536.5,423.5Q560,447 560,480Q560,513 536.5,536.5Q513,560 480,560ZM480,320Q447,320 423.5,296.5Q400,273 400,240Q400,207 423.5,183.5Q447,160 480,160Q513,160 536.5,183.5Q560,207 560,240Q560,273 536.5,296.5Q513,320 480,320Z" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960">
|
||||||
|
<!-- material icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:fillColor="#FF000000" android:pathData="M720,880Q670,880 635,845Q600,810 600,760Q600,753 601,745.5Q602,738 604,732L322,568Q305,583 284,591.5Q263,600 240,600Q190,600 155,565Q120,530 120,480Q120,430 155,395Q190,360 240,360Q263,360 284,368.5Q305,377 322,392L604,228Q602,222 601,214.5Q600,207 600,200Q600,150 635,115Q670,80 720,80Q770,80 805,115Q840,150 840,200Q840,250 805,285Q770,320 720,320Q697,320 676,311.5Q655,303 638,288L356,452Q358,458 359,465.5Q360,473 360,480Q360,487 359,494.5Q358,502 356,508L638,672Q655,657 676,648.5Q697,640 720,640Q770,640 805,675Q840,710 840,760Q840,810 805,845Q770,880 720,880ZM720,240Q737,240 748.5,228.5Q760,217 760,200Q760,183 748.5,171.5Q737,160 720,160Q703,160 691.5,171.5Q680,183 680,200Q680,217 691.5,228.5Q703,240 720,240ZM240,520Q257,520 268.5,508.5Q280,497 280,480Q280,463 268.5,451.5Q257,440 240,440Q223,440 211.5,451.5Q200,463 200,480Q200,497 211.5,508.5Q223,520 240,520ZM720,800Q737,800 748.5,788.5Q760,777 760,760Q760,743 748.5,731.5Q737,720 720,720Q703,720 691.5,731.5Q680,743 680,760Q680,777 691.5,788.5Q703,800 720,800ZM720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200Q720,200 720,200ZM240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480Q240,480 240,480ZM720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Q720,760 720,760Z" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<!-- material icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:fillColor="#FF000000" android:pathData="M19,8.3Q18.875,8.3 18.738,8.225Q18.6,8.15 18.55,8L17.75,6.25L16,5.45Q15.85,5.4 15.775,5.262Q15.7,5.125 15.7,5Q15.7,4.875 15.775,4.737Q15.85,4.6 16,4.55L17.75,3.75L18.55,2Q18.6,1.85 18.738,1.775Q18.875,1.7 19,1.7Q19.125,1.7 19.263,1.775Q19.4,1.85 19.45,2L20.25,3.75L22,4.55Q22.15,4.6 22.225,4.737Q22.3,4.875 22.3,5Q22.3,5.125 22.225,5.262Q22.15,5.4 22,5.45L20.25,6.25L19.45,8Q19.4,8.15 19.263,8.225Q19.125,8.3 19,8.3ZM19,22.3Q18.875,22.3 18.738,22.225Q18.6,22.15 18.55,22L17.75,20.25L16,19.45Q15.85,19.4 15.775,19.262Q15.7,19.125 15.7,19Q15.7,18.875 15.775,18.738Q15.85,18.6 16,18.55L17.75,17.75L18.55,16Q18.6,15.85 18.738,15.775Q18.875,15.7 19,15.7Q19.125,15.7 19.263,15.775Q19.4,15.85 19.45,16L20.25,17.75L22,18.55Q22.15,18.6 22.225,18.738Q22.3,18.875 22.3,19Q22.3,19.125 22.225,19.262Q22.15,19.4 22,19.45L20.25,20.25L19.45,22Q19.4,22.15 19.263,22.225Q19.125,22.3 19,22.3ZM9,18.575Q8.725,18.575 8.475,18.425Q8.225,18.275 8.1,18L6.5,14.5L3,12.9Q2.725,12.775 2.575,12.525Q2.425,12.275 2.425,12Q2.425,11.725 2.575,11.475Q2.725,11.225 3,11.1L6.5,9.5L8.1,6Q8.225,5.725 8.475,5.575Q8.725,5.425 9,5.425Q9.275,5.425 9.525,5.575Q9.775,5.725 9.9,6L11.5,9.5L15,11.1Q15.275,11.225 15.425,11.475Q15.575,11.725 15.575,12Q15.575,12.275 15.425,12.525Q15.275,12.775 15,12.9L11.5,14.5L9.9,18Q9.775,18.275 9.525,18.425Q9.275,18.575 9,18.575ZM9,15.15 L10,13 12.15,12 10,11 9,8.85 8,11 5.85,12 8,13ZM9,12Z" />
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960">
|
||||||
|
<!-- material icon imported by shared/tools/import_platform_icons.py. -->
|
||||||
|
<path android:fillColor="#FF000000" android:pathData="M360,640L600,640Q617,640 628.5,628.5Q640,617 640,600L640,360Q640,343 628.5,331.5Q617,320 600,320L360,320Q343,320 331.5,331.5Q320,343 320,360L320,600Q320,617 331.5,628.5Q343,640 360,640ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
|
||||||
|
</vector>
|
||||||
@@ -249,7 +249,7 @@
|
|||||||
<string name="storage_clear_transfer_cache">Vider le cache des transferts</string>
|
<string name="storage_clear_transfer_cache">Vider le cache des transferts</string>
|
||||||
<string name="storage_clear_transfer_cache_description">Supprime le contenu de transfert en cache qui n’est pas utilisé par une réception en cours ou un partage actif. Les fichiers reçus et l’historique ne sont pas supprimés.</string>
|
<string name="storage_clear_transfer_cache_description">Supprime le contenu de transfert en cache qui n’est pas utilisé par une réception en cours ou un partage actif. Les fichiers reçus et l’historique ne sont pas supprimés.</string>
|
||||||
<string name="storage_clearing_transfer_cache">Vidage du cache…</string>
|
<string name="storage_clearing_transfer_cache">Vidage du cache…</string>
|
||||||
<string name="storage_delete_transfers_caption">Efface votre historique d\'envois et de réceptions ainsi que le contenu de partage mis en cache par l\'app. Les fichiers reçus sur le disque sont conservés.</string>
|
<string name="storage_delete_transfers_caption">Efface votre historique d’envois et de réceptions ainsi que le contenu de partage mis en cache par l’app. Les fichiers reçus sur le disque sont conservés.</string>
|
||||||
<string name="storage_free_up_space_caption">Supprime les fichiers temporaires et les résidus des transferts précédents. Vos transferts et fichiers reçus sont conservés.</string>
|
<string name="storage_free_up_space_caption">Supprime les fichiers temporaires et les résidus des transferts précédents. Vos transferts et fichiers reçus sont conservés.</string>
|
||||||
<string name="storage_refresh">Actualiser</string>
|
<string name="storage_refresh">Actualiser</string>
|
||||||
<string name="storage_transfer_cache_cleared">Cache des transferts vidé</string>
|
<string name="storage_transfer_cache_cleared">Cache des transferts vidé</string>
|
||||||
|
|||||||
@@ -249,7 +249,7 @@
|
|||||||
<string name="storage_clear_transfer_cache">Svuota cache trasferimenti</string>
|
<string name="storage_clear_transfer_cache">Svuota cache trasferimenti</string>
|
||||||
<string name="storage_clear_transfer_cache_description">Rimuove il contenuto dei trasferimenti memorizzato nella cache che non è usato da una ricezione in corso o da una condivisione attiva. I file ricevuti e la cronologia non vengono eliminati.</string>
|
<string name="storage_clear_transfer_cache_description">Rimuove il contenuto dei trasferimenti memorizzato nella cache che non è usato da una ricezione in corso o da una condivisione attiva. I file ricevuti e la cronologia non vengono eliminati.</string>
|
||||||
<string name="storage_clearing_transfer_cache">Svuotamento cache…</string>
|
<string name="storage_clearing_transfer_cache">Svuotamento cache…</string>
|
||||||
<string name="storage_delete_transfers_caption">Cancella la cronologia di invii e ricezioni e i contenuti di condivisione memorizzati dall\'app. I file ricevuti sul disco vengono mantenuti.</string>
|
<string name="storage_delete_transfers_caption">Cancella la cronologia di invii e ricezioni e i contenuti di condivisione memorizzati dall’app. I file ricevuti sul disco vengono mantenuti.</string>
|
||||||
<string name="storage_free_up_space_caption">Rimuove i file temporanei e i residui dei trasferimenti precedenti. I tuoi trasferimenti e i file ricevuti vengono mantenuti.</string>
|
<string name="storage_free_up_space_caption">Rimuove i file temporanei e i residui dei trasferimenti precedenti. I tuoi trasferimenti e i file ricevuti vengono mantenuti.</string>
|
||||||
<string name="storage_refresh">Aggiorna</string>
|
<string name="storage_refresh">Aggiorna</string>
|
||||||
<string name="storage_transfer_cache_cleared">Cache trasferimenti svuotata</string>
|
<string name="storage_transfer_cache_cleared">Cache trasferimenti svuotata</string>
|
||||||
|
|||||||
@@ -249,7 +249,7 @@
|
|||||||
<string name="storage_clear_transfer_cache">Clear transfer cache</string>
|
<string name="storage_clear_transfer_cache">Clear transfer cache</string>
|
||||||
<string name="storage_clear_transfer_cache_description">Removes cached transfer content after briefly restarting VniDrop. Finish ongoing transfers and stop active shares first. Received files and transfer history are not deleted.</string>
|
<string name="storage_clear_transfer_cache_description">Removes cached transfer content after briefly restarting VniDrop. Finish ongoing transfers and stop active shares first. Received files and transfer history are not deleted.</string>
|
||||||
<string name="storage_clearing_transfer_cache">Clearing cache…</string>
|
<string name="storage_clearing_transfer_cache">Clearing cache…</string>
|
||||||
<string name="storage_delete_transfers_caption">Clears your send and receive history and the app\'s cached share content. Received files on disk are kept.</string>
|
<string name="storage_delete_transfers_caption">Clears your send and receive history and the app’s cached share content. Received files on disk are kept.</string>
|
||||||
<string name="storage_free_up_space_caption">Removes temporary files and leftover trash from earlier transfers. Your transfers and received files are kept.</string>
|
<string name="storage_free_up_space_caption">Removes temporary files and leftover trash from earlier transfers. Your transfers and received files are kept.</string>
|
||||||
<string name="storage_refresh">Refresh</string>
|
<string name="storage_refresh">Refresh</string>
|
||||||
<string name="storage_transfer_cache_cleared">Transfer cache cleared</string>
|
<string name="storage_transfer_cache_cleared">Transfer cache cleared</string>
|
||||||
|
|||||||
@@ -269,10 +269,10 @@ private fun TransferActionsMenu(
|
|||||||
contentDescription = moreActionsLabel
|
contentDescription = moreActionsLabel
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(
|
PlatformIcon(
|
||||||
"⋮",
|
AppIcon.MoreVertical,
|
||||||
style = MaterialTheme.typography.headlineSmall,
|
contentDescription = null,
|
||||||
color = LocalVniDropColors.current.foregroundLighter,
|
tint = LocalVniDropColors.current.foregroundLighter,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
||||||
@@ -283,7 +283,7 @@ private fun TransferActionsMenu(
|
|||||||
expanded = false
|
expanded = false
|
||||||
onShare()
|
onShare()
|
||||||
},
|
},
|
||||||
leadingIcon = { PlatformIcon(AppIcon.Send, contentDescription = null) },
|
leadingIcon = { PlatformIcon(AppIcon.Share, contentDescription = null) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (transfer.status == TransferStatus.Sharing) {
|
if (transfer.status == TransferStatus.Sharing) {
|
||||||
@@ -293,7 +293,7 @@ private fun TransferActionsMenu(
|
|||||||
expanded = false
|
expanded = false
|
||||||
onStopSharing()
|
onStopSharing()
|
||||||
},
|
},
|
||||||
leadingIcon = { PlatformIcon(AppIcon.Close, contentDescription = null) },
|
leadingIcon = { PlatformIcon(AppIcon.StopCircle, contentDescription = null) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ internal fun TransferDetails(
|
|||||||
if (transfer.status in setOf(TransferStatus.Importing, TransferStatus.Sharing)) {
|
if (transfer.status in setOf(TransferStatus.Importing, TransferStatus.Sharing)) {
|
||||||
IconButton(onClick = onShare) {
|
IconButton(onClick = onShare) {
|
||||||
PlatformIcon(
|
PlatformIcon(
|
||||||
AppIcon.Send,
|
AppIcon.Share,
|
||||||
stringResource(Res.string.transfer_share_title),
|
stringResource(Res.string.transfer_share_title),
|
||||||
tint = LocalVniDropColors.current.brandLink,
|
tint = LocalVniDropColors.current.brandLink,
|
||||||
)
|
)
|
||||||
@@ -147,12 +147,18 @@ internal fun TransferDetails(
|
|||||||
stringResource(Res.string.send_stop_sharing),
|
stringResource(Res.string.send_stop_sharing),
|
||||||
onClick = onStopSharing,
|
onClick = onStopSharing,
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
leadingIcon = {
|
||||||
|
PlatformIcon(AppIcon.StopCircle, null, modifier = Modifier.size(18.dp))
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
DestructiveButton(
|
DestructiveButton(
|
||||||
stringResource(Res.string.button_delete_transfer),
|
stringResource(Res.string.button_delete_transfer),
|
||||||
onClick = onDelete,
|
onClick = onDelete,
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
leadingIcon = {
|
||||||
|
PlatformIcon(AppIcon.Delete, null, modifier = Modifier.size(18.dp))
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||||||
import androidx.compose.foundation.layout.heightIn
|
import androidx.compose.foundation.layout.heightIn
|
||||||
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.material3.Button
|
|
||||||
import androidx.compose.material3.ButtonDefaults
|
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
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
|
||||||
@@ -25,6 +24,8 @@ import androidx.compose.ui.unit.dp
|
|||||||
import com.vnidrop.app.ui.components.AdaptiveDrawer
|
import com.vnidrop.app.ui.components.AdaptiveDrawer
|
||||||
import com.vnidrop.app.ui.components.DestructiveButton
|
import com.vnidrop.app.ui.components.DestructiveButton
|
||||||
import com.vnidrop.app.ui.components.SecondaryButton
|
import com.vnidrop.app.ui.components.SecondaryButton
|
||||||
|
import com.vnidrop.app.ui.icons.AppIcon
|
||||||
|
import com.vnidrop.app.ui.icons.PlatformIcon
|
||||||
import com.vnidrop.app.ui.state.formatBytes
|
import com.vnidrop.app.ui.state.formatBytes
|
||||||
import com.vnidrop.app.ui.state.WindowClass
|
import com.vnidrop.app.ui.state.WindowClass
|
||||||
import com.vnidrop.app.ui.theme.LocalVniDropColors
|
import com.vnidrop.app.ui.theme.LocalVniDropColors
|
||||||
@@ -75,14 +76,18 @@ internal fun StorageSettings(
|
|||||||
style = MaterialTheme.typography.titleMedium,
|
style = MaterialTheme.typography.titleMedium,
|
||||||
fontWeight = FontWeight.SemiBold,
|
fontWeight = FontWeight.SemiBold,
|
||||||
)
|
)
|
||||||
SecondaryButton(
|
if (state.isCalculatingStorage) {
|
||||||
stringResource(Res.string.storage_refresh),
|
CircularProgressIndicator(Modifier.size(20.dp), strokeWidth = 2.dp)
|
||||||
|
} else {
|
||||||
|
IconButton(
|
||||||
onClick = onRefreshStorage,
|
onClick = onRefreshStorage,
|
||||||
enabled = !state.isCalculatingStorage &&
|
enabled = !state.isCleaningStorage &&
|
||||||
!state.isCleaningStorage &&
|
|
||||||
!state.isDeletingTransfers &&
|
!state.isDeletingTransfers &&
|
||||||
!state.isClearingTransferCache,
|
!state.isClearingTransferCache,
|
||||||
)
|
) {
|
||||||
|
PlatformIcon(AppIcon.Sync, stringResource(Res.string.storage_refresh))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val storage = state.storage
|
val storage = state.storage
|
||||||
if (storage == null && state.storageLoadFailed && !state.isCalculatingStorage) {
|
if (storage == null && state.storageLoadFailed && !state.isCalculatingStorage) {
|
||||||
@@ -90,8 +95,11 @@ internal fun StorageSettings(
|
|||||||
stringResource(Res.string.storage_unavailable),
|
stringResource(Res.string.storage_unavailable),
|
||||||
onClick = onRefreshStorage,
|
onClick = onRefreshStorage,
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
leadingIcon = {
|
||||||
|
PlatformIcon(AppIcon.Sync, null, modifier = Modifier.size(18.dp))
|
||||||
|
},
|
||||||
)
|
)
|
||||||
} else if (storage == null || state.isCalculatingStorage) {
|
} else if (storage == null) {
|
||||||
SettingsGroup {
|
SettingsGroup {
|
||||||
StorageRow(
|
StorageRow(
|
||||||
title = stringResource(Res.string.storage_calculating),
|
title = stringResource(Res.string.storage_calculating),
|
||||||
@@ -126,6 +134,13 @@ internal fun StorageSettings(
|
|||||||
!state.isClearingTransferCache &&
|
!state.isClearingTransferCache &&
|
||||||
!state.isCalculatingStorage &&
|
!state.isCalculatingStorage &&
|
||||||
!state.hasActiveNetworkWork,
|
!state.hasActiveNetworkWork,
|
||||||
|
leadingIcon = {
|
||||||
|
if (state.isCleaningStorage) {
|
||||||
|
CircularProgressIndicator(Modifier.size(18.dp), strokeWidth = 2.dp)
|
||||||
|
} else {
|
||||||
|
PlatformIcon(AppIcon.Sparkles, null, modifier = Modifier.size(18.dp))
|
||||||
|
}
|
||||||
|
},
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
stringResource(Res.string.storage_free_up_space_caption),
|
stringResource(Res.string.storage_free_up_space_caption),
|
||||||
@@ -145,16 +160,22 @@ internal fun StorageSettings(
|
|||||||
!state.isClearingTransferCache &&
|
!state.isClearingTransferCache &&
|
||||||
!state.isCalculatingStorage &&
|
!state.isCalculatingStorage &&
|
||||||
!state.hasActiveNetworkWork,
|
!state.hasActiveNetworkWork,
|
||||||
|
leadingIcon = {
|
||||||
|
PlatformIcon(AppIcon.Storage, null, modifier = Modifier.size(18.dp))
|
||||||
|
},
|
||||||
)
|
)
|
||||||
Button(
|
DestructiveButton(
|
||||||
|
text = stringResource(
|
||||||
|
if (state.isDeletingTransfers) Res.string.storage_deleting else Res.string.storage_delete_transfers,
|
||||||
|
),
|
||||||
onClick = { showDeleteConfirmation = true },
|
onClick = { showDeleteConfirmation = true },
|
||||||
enabled = !state.isDeletingTransfers &&
|
enabled = !state.isDeletingTransfers &&
|
||||||
!state.isClearingTransferCache &&
|
!state.isClearingTransferCache &&
|
||||||
!state.isCalculatingStorage,
|
!state.isCalculatingStorage,
|
||||||
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.error),
|
leadingIcon = {
|
||||||
) {
|
PlatformIcon(AppIcon.Delete, null, modifier = Modifier.size(18.dp))
|
||||||
Text(stringResource(if (state.isDeletingTransfers) Res.string.storage_deleting else Res.string.storage_delete_transfers))
|
},
|
||||||
}
|
)
|
||||||
Text(
|
Text(
|
||||||
stringResource(Res.string.storage_delete_transfers_caption),
|
stringResource(Res.string.storage_delete_transfers_caption),
|
||||||
style = MaterialTheme.typography.bodySmall,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.vnidrop.app.ui.components
|
package com.vnidrop.app.ui.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.heightIn
|
import androidx.compose.foundation.layout.heightIn
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ButtonDefaults
|
import androidx.compose.material3.ButtonDefaults
|
||||||
@@ -17,7 +19,13 @@ import com.vnidrop.app.ui.platform.LocalUiPlatform
|
|||||||
import com.vnidrop.app.ui.theme.LocalVniDropColors
|
import com.vnidrop.app.ui.theme.LocalVniDropColors
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun PrimaryButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true) {
|
fun PrimaryButton(
|
||||||
|
text: String,
|
||||||
|
onClick: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
enabled: Boolean = true,
|
||||||
|
leadingIcon: @Composable (() -> Unit)? = null,
|
||||||
|
) {
|
||||||
val desktop = LocalUiPlatform.current.isDesktop
|
val desktop = LocalUiPlatform.current.isDesktop
|
||||||
Button(
|
Button(
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
@@ -26,12 +34,22 @@ fun PrimaryButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifi
|
|||||||
shape = RoundedCornerShape(if (desktop) 6.dp else 8.dp),
|
shape = RoundedCornerShape(if (desktop) 6.dp else 8.dp),
|
||||||
colors = ButtonDefaults.buttonColors(containerColor = LocalVniDropColors.current.brandButton, contentColor = Color.White),
|
colors = ButtonDefaults.buttonColors(containerColor = LocalVniDropColors.current.brandButton, contentColor = Color.White),
|
||||||
) {
|
) {
|
||||||
|
leadingIcon?.let {
|
||||||
|
it()
|
||||||
|
Spacer(Modifier.width(8.dp))
|
||||||
|
}
|
||||||
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SecondaryButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true) {
|
fun SecondaryButton(
|
||||||
|
text: String,
|
||||||
|
onClick: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
enabled: Boolean = true,
|
||||||
|
leadingIcon: @Composable (() -> Unit)? = null,
|
||||||
|
) {
|
||||||
val desktop = LocalUiPlatform.current.isDesktop
|
val desktop = LocalUiPlatform.current.isDesktop
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
@@ -39,6 +57,10 @@ fun SecondaryButton(text: String, onClick: () -> Unit, modifier: Modifier = Modi
|
|||||||
modifier = modifier.heightIn(min = if (desktop) 36.dp else 44.dp),
|
modifier = modifier.heightIn(min = if (desktop) 36.dp else 44.dp),
|
||||||
shape = RoundedCornerShape(if (desktop) 6.dp else 8.dp),
|
shape = RoundedCornerShape(if (desktop) 6.dp else 8.dp),
|
||||||
) {
|
) {
|
||||||
|
leadingIcon?.let {
|
||||||
|
it()
|
||||||
|
Spacer(Modifier.width(8.dp))
|
||||||
|
}
|
||||||
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +87,13 @@ fun DestructiveQuietButton(text: String, onClick: () -> Unit, modifier: Modifier
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DestructiveButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true) {
|
fun DestructiveButton(
|
||||||
|
text: String,
|
||||||
|
onClick: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
enabled: Boolean = true,
|
||||||
|
leadingIcon: @Composable (() -> Unit)? = null,
|
||||||
|
) {
|
||||||
val desktop = LocalUiPlatform.current.isDesktop
|
val desktop = LocalUiPlatform.current.isDesktop
|
||||||
Button(
|
Button(
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
@@ -77,6 +105,10 @@ fun DestructiveButton(text: String, onClick: () -> Unit, modifier: Modifier = Mo
|
|||||||
contentColor = Color.White,
|
contentColor = Color.White,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
|
leadingIcon?.let {
|
||||||
|
it()
|
||||||
|
Spacer(Modifier.width(8.dp))
|
||||||
|
}
|
||||||
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,12 +39,19 @@ internal enum class AppIcon(
|
|||||||
Info(Res.drawable.icon_material_info, Res.drawable.icon_fluent_info, Res.drawable.icon_lucide_info),
|
Info(Res.drawable.icon_material_info, Res.drawable.icon_fluent_info, Res.drawable.icon_lucide_info),
|
||||||
Lock(Res.drawable.icon_material_lock, Res.drawable.icon_fluent_lock, Res.drawable.icon_lucide_lock),
|
Lock(Res.drawable.icon_material_lock, Res.drawable.icon_fluent_lock, Res.drawable.icon_lucide_lock),
|
||||||
Megaphone(Res.drawable.icon_material_megaphone, Res.drawable.icon_fluent_megaphone, Res.drawable.icon_lucide_megaphone),
|
Megaphone(Res.drawable.icon_material_megaphone, Res.drawable.icon_fluent_megaphone, Res.drawable.icon_lucide_megaphone),
|
||||||
|
MoreVertical(
|
||||||
|
Res.drawable.icon_material_more_vertical,
|
||||||
|
Res.drawable.icon_fluent_more_vertical,
|
||||||
|
Res.drawable.icon_lucide_more_vertical,
|
||||||
|
),
|
||||||
Moon(Res.drawable.icon_material_moon, Res.drawable.icon_fluent_moon, Res.drawable.icon_lucide_moon),
|
Moon(Res.drawable.icon_material_moon, Res.drawable.icon_fluent_moon, Res.drawable.icon_lucide_moon),
|
||||||
Nfc(Res.drawable.icon_material_nfc, Res.drawable.icon_fluent_nfc, Res.drawable.icon_lucide_nfc),
|
Nfc(Res.drawable.icon_material_nfc, Res.drawable.icon_fluent_nfc, Res.drawable.icon_lucide_nfc),
|
||||||
QrCode(Res.drawable.icon_material_qr_code, Res.drawable.icon_fluent_qr_code, Res.drawable.icon_lucide_qr_code),
|
QrCode(Res.drawable.icon_material_qr_code, Res.drawable.icon_fluent_qr_code, Res.drawable.icon_lucide_qr_code),
|
||||||
Radio(Res.drawable.icon_material_radio, Res.drawable.icon_fluent_radio, Res.drawable.icon_lucide_radio),
|
Radio(Res.drawable.icon_material_radio, Res.drawable.icon_fluent_radio, Res.drawable.icon_lucide_radio),
|
||||||
Scan(Res.drawable.icon_material_scan, Res.drawable.icon_fluent_scan, Res.drawable.icon_lucide_scan),
|
Scan(Res.drawable.icon_material_scan, Res.drawable.icon_fluent_scan, Res.drawable.icon_lucide_scan),
|
||||||
Send(Res.drawable.icon_material_send, Res.drawable.icon_fluent_send, Res.drawable.icon_lucide_send),
|
Send(Res.drawable.icon_material_send, Res.drawable.icon_fluent_send, Res.drawable.icon_lucide_send),
|
||||||
|
Share(Res.drawable.icon_material_share, Res.drawable.icon_fluent_share, Res.drawable.icon_lucide_share),
|
||||||
|
Sparkles(Res.drawable.icon_material_sparkles, Res.drawable.icon_fluent_sparkles, Res.drawable.icon_lucide_sparkles),
|
||||||
Settings(Res.drawable.icon_material_settings, Res.drawable.icon_fluent_settings, Res.drawable.icon_lucide_settings),
|
Settings(Res.drawable.icon_material_settings, Res.drawable.icon_fluent_settings, Res.drawable.icon_lucide_settings),
|
||||||
Shield(Res.drawable.icon_material_shield, Res.drawable.icon_fluent_shield, Res.drawable.icon_lucide_shield),
|
Shield(Res.drawable.icon_material_shield, Res.drawable.icon_fluent_shield, Res.drawable.icon_lucide_shield),
|
||||||
ShieldCheck(
|
ShieldCheck(
|
||||||
@@ -52,6 +59,11 @@ internal enum class AppIcon(
|
|||||||
Res.drawable.icon_fluent_shield_check,
|
Res.drawable.icon_fluent_shield_check,
|
||||||
Res.drawable.icon_lucide_shield_check,
|
Res.drawable.icon_lucide_shield_check,
|
||||||
),
|
),
|
||||||
|
StopCircle(
|
||||||
|
Res.drawable.icon_material_stop_circle,
|
||||||
|
Res.drawable.icon_fluent_stop_circle,
|
||||||
|
Res.drawable.icon_lucide_stop_circle,
|
||||||
|
),
|
||||||
Storage(Res.drawable.icon_material_storage, Res.drawable.icon_fluent_storage, Res.drawable.icon_lucide_storage),
|
Storage(Res.drawable.icon_material_storage, Res.drawable.icon_fluent_storage, Res.drawable.icon_lucide_storage),
|
||||||
Sun(Res.drawable.icon_material_sun, Res.drawable.icon_fluent_sun, Res.drawable.icon_lucide_sun),
|
Sun(Res.drawable.icon_material_sun, Res.drawable.icon_fluent_sun, Res.drawable.icon_lucide_sun),
|
||||||
Sync(Res.drawable.icon_material_sync, Res.drawable.icon_fluent_sync, Res.drawable.icon_lucide_sync),
|
Sync(Res.drawable.icon_material_sync, Res.drawable.icon_fluent_sync, Res.drawable.icon_lucide_sync),
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import com.vnidrop.app.feature.receive.ReceiveState
|
|||||||
import com.vnidrop.app.feature.settings.SettingsScreen
|
import com.vnidrop.app.feature.settings.SettingsScreen
|
||||||
import com.vnidrop.app.feature.settings.SettingsSection
|
import com.vnidrop.app.feature.settings.SettingsSection
|
||||||
import com.vnidrop.app.feature.settings.SettingsState
|
import com.vnidrop.app.feature.settings.SettingsState
|
||||||
|
import com.vnidrop.app.feature.settings.StorageBreakdown
|
||||||
import com.vnidrop.app.feature.settings.SettingsOverview
|
import com.vnidrop.app.feature.settings.SettingsOverview
|
||||||
import com.vnidrop.app.feature.send.SendScreen
|
import com.vnidrop.app.feature.send.SendScreen
|
||||||
import com.vnidrop.app.feature.send.SendState
|
import com.vnidrop.app.feature.send.SendState
|
||||||
@@ -223,6 +224,48 @@ class FoundationComposeTest {
|
|||||||
runOnIdle { assertTrue(deleteRequested) }
|
runOnIdle { assertTrue(deleteRequested) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun storageKeepsCurrentUsageVisibleWhileRefreshing() = runComposeUiTest {
|
||||||
|
setContent {
|
||||||
|
VniDropTheme(isDarkTheme = false) {
|
||||||
|
SettingsScreen(
|
||||||
|
state = SettingsState(
|
||||||
|
selectedSection = SettingsSection.Storage,
|
||||||
|
isCalculatingStorage = true,
|
||||||
|
storage = StorageBreakdown(
|
||||||
|
transferCacheBytes = 1UL,
|
||||||
|
appDataBytes = 2UL,
|
||||||
|
temporaryBytes = 3UL,
|
||||||
|
receivedBytes = 4UL,
|
||||||
|
receivedFileCount = 1,
|
||||||
|
missingReceivedFileCount = 0,
|
||||||
|
inaccessibleReceivedFileCount = 0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
windowClass = WindowClass.Desktop,
|
||||||
|
onSectionSelected = {},
|
||||||
|
onUsernameChanged = {},
|
||||||
|
onThemeModeChanged = {},
|
||||||
|
onChooseFolder = {},
|
||||||
|
onResetFolder = {},
|
||||||
|
onNotificationsChanged = {},
|
||||||
|
onOpenNotificationSettings = {},
|
||||||
|
onDiagnosticsChanged = {},
|
||||||
|
onBugWhatChanged = {},
|
||||||
|
onBugExpectedChanged = {},
|
||||||
|
onBugStepsChanged = {},
|
||||||
|
onBugContactChanged = {},
|
||||||
|
onBugIncludeLogsChanged = {},
|
||||||
|
onSubmitBugReport = {},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onNodeWithText("Received files").assertIsDisplayed()
|
||||||
|
onNodeWithText("Transfer data").assertIsDisplayed()
|
||||||
|
onAllNodesWithText("Calculating storage usage…").assertCountEquals(0)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun aboutSettingsShowsTheSharedProductAndPrivacyContent() = runComposeUiTest {
|
fun aboutSettingsShowsTheSharedProductAndPrivacyContent() = runComposeUiTest {
|
||||||
setContent {
|
setContent {
|
||||||
|
|||||||
@@ -48,15 +48,19 @@ ICONS = (
|
|||||||
IconSource("info", "info", "Info", "info", "info"),
|
IconSource("info", "info", "Info", "info", "info"),
|
||||||
IconSource("lock", "lock", "Lock Closed", "lock_closed", "lock"),
|
IconSource("lock", "lock", "Lock Closed", "lock_closed", "lock"),
|
||||||
IconSource("megaphone", "campaign", "Megaphone", "megaphone", "megaphone"),
|
IconSource("megaphone", "campaign", "Megaphone", "megaphone", "megaphone"),
|
||||||
|
IconSource("more_vertical", "more_vert", "More Vertical", "more_vertical", "ellipsis-vertical"),
|
||||||
IconSource("moon", "dark_mode", "Weather Moon", "weather_moon", "moon"),
|
IconSource("moon", "dark_mode", "Weather Moon", "weather_moon", "moon"),
|
||||||
IconSource("nfc", "nfc", "Tap Double", "tap_double", "nfc"),
|
IconSource("nfc", "nfc", "Tap Double", "tap_double", "nfc"),
|
||||||
IconSource("qr_code", "qr_code_scanner", "QR Code", "qr_code", "qr-code"),
|
IconSource("qr_code", "qr_code_scanner", "QR Code", "qr_code", "qr-code"),
|
||||||
IconSource("radio", "cell_tower", "Cellular Data 1", "cellular_data_1", "radio-tower"),
|
IconSource("radio", "cell_tower", "Cellular Data 1", "cellular_data_1", "radio-tower"),
|
||||||
IconSource("scan", "document_scanner", "Scan Type", "scan_type", "scan-line"),
|
IconSource("scan", "document_scanner", "Scan Type", "scan_type", "scan-line"),
|
||||||
IconSource("send", "send", "Send", "send", "send"),
|
IconSource("send", "send", "Send", "send", "send"),
|
||||||
|
IconSource("share", "share", "Share", "share", "share-2"),
|
||||||
|
IconSource("sparkles", "auto_awesome", "Sparkle", "sparkle", "sparkles"),
|
||||||
IconSource("settings", "settings", "Settings", "settings", "settings"),
|
IconSource("settings", "settings", "Settings", "settings", "settings"),
|
||||||
IconSource("shield", "shield", "Shield", "shield", "shield"),
|
IconSource("shield", "shield", "Shield", "shield", "shield"),
|
||||||
IconSource("shield_check", "verified_user", "Shield Checkmark", "shield_checkmark", "shield-check"),
|
IconSource("shield_check", "verified_user", "Shield Checkmark", "shield_checkmark", "shield-check"),
|
||||||
|
IconSource("stop_circle", "stop_circle", "Stop", "stop", "circle-stop"),
|
||||||
IconSource("storage", "database", "Database", "database", "database"),
|
IconSource("storage", "database", "Database", "database", "database"),
|
||||||
IconSource("sun", "light_mode", "Weather Sunny", "weather_sunny", "sun"),
|
IconSource("sun", "light_mode", "Weather Sunny", "weather_sunny", "sun"),
|
||||||
IconSource("sync", "sync", "Arrow Sync", "arrow_sync", "refresh-cw"),
|
IconSource("sync", "sync", "Arrow Sync", "arrow_sync", "refresh-cw"),
|
||||||
|
|||||||
Reference in New Issue
Block a user