From f92a1dcd6f30a8e981a7b00087241b0fb874f4ce Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:02:16 +0300 Subject: [PATCH 001/527] Added a warning about using the sort command in icontool.py (#2019) At the moment, 4 contributors have encountered errors when sorting through icontool.py, as a result, they needed to fix appfilter.xml to remove duplicates or pass a style check. I added a warning about the current state of the command so that people avoid unnecessary work. --- docs/icontool_guide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/icontool_guide.md b/docs/icontool_guide.md index 675b4e5d8ae..681b0341b0f 100644 --- a/docs/icontool_guide.md +++ b/docs/icontool_guide.md @@ -62,6 +62,8 @@ Note that the SVG file's name is based on the `drawable` attribute of the first Some common utilities are described below. ### Sorting appfilter.xml +> [!WARNING] +> At the moment, the sorting works with errors: duplicates and extra spaces are added. It is recommended not to use it. ```console python3 ./icontool.py sort ``` From c539e4ed908707d8c7b899721471c862fcdc4511 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 19 Apr 2024 06:25:05 +0800 Subject: [PATCH 002/527] `icontool.py` - disable sorting temporarily --- icontool.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/icontool.py b/icontool.py index c59429d0154..47e2edd8821 100755 --- a/icontool.py +++ b/icontool.py @@ -116,12 +116,14 @@ def find_unused_icons(): print_error("you must specify a mode {duplicates,unused}") def sort_logic(): - print("sorting icons...") - xml_file = open(APPFILTER_PATH, "r", encoding="utf-8").read() - sorted_data = sort_components(xml_file) + # print("sorting icons...") + print("due to several issues, sorting icons manually is temporalily disabled. an alternative is to add an icon first to automatically sort appfilter.xml") + exit() + # xml_file = open(APPFILTER_PATH, "r", encoding="utf-8").read() + # sorted_data = sort_components(xml_file) - with open(APPFILTER_PATH, "w", encoding="utf-8") as f: - f.write(sorted_data) + # with open(APPFILTER_PATH, "w", encoding="utf-8") as f: + # f.write(sorted_data) def parse_component(link_mode, svg, component, name, show_message): # From 47ff08a999616cf002088233e811c76e6e6b2e6e Mon Sep 17 00:00:00 2001 From: Airon <122789671+airon-main@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:03:30 +0700 Subject: [PATCH 003/527] Style:[AS]+18 icons (#2017) * Style:[AS]+18 icons * Fix:[AS]requested_changes * Update lighttube.svg * Update blood_strike.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 18 ++++++++++++++++++ svgs/animeindo.svg | 4 ++++ svgs/blood_strike.svg | 1 + svgs/concepts.svg | 4 ++++ svgs/insync.svg | 3 +++ svgs/islamqa.svg | 5 +++++ svgs/lena_adaptive_icons.svg | 3 +++ svgs/lighttube.svg | 1 + svgs/lux_icons_free.svg | 10 ++++++++++ svgs/material_you_dynamic_icons.svg | 3 +++ svgs/my_health.svg | 5 +++++ svgs/no_thanks.svg | 4 ++++ svgs/routine_tracker.svg | 6 ++++++ svgs/tomtom_go_navigation.svg | 8 ++++++++ svgs/wezone.svg | 6 ++++++ svgs/widgeet.svg | 6 ++++++ svgs/xclub.svg | 3 +++ svgs/xos_launcher.svg | 3 +++ svgs/xshare.svg | 4 ++++ 19 files changed, 97 insertions(+) create mode 100644 svgs/animeindo.svg create mode 100644 svgs/blood_strike.svg create mode 100644 svgs/concepts.svg create mode 100644 svgs/insync.svg create mode 100644 svgs/islamqa.svg create mode 100644 svgs/lena_adaptive_icons.svg create mode 100644 svgs/lighttube.svg create mode 100644 svgs/lux_icons_free.svg create mode 100644 svgs/material_you_dynamic_icons.svg create mode 100644 svgs/my_health.svg create mode 100644 svgs/no_thanks.svg create mode 100644 svgs/routine_tracker.svg create mode 100644 svgs/tomtom_go_navigation.svg create mode 100644 svgs/wezone.svg create mode 100644 svgs/widgeet.svg create mode 100644 svgs/xclub.svg create mode 100644 svgs/xos_launcher.svg create mode 100644 svgs/xshare.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 25ec180fdbc..68fa466eb26 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -410,6 +410,7 @@ + @@ -997,6 +998,7 @@ + @@ -1891,6 +1893,7 @@ + @@ -2563,6 +2566,7 @@ + @@ -4075,6 +4079,7 @@ + @@ -4119,6 +4124,7 @@ + @@ -4590,6 +4596,7 @@ + @@ -4670,6 +4677,7 @@ + @@ -4778,6 +4786,7 @@ + @@ -5381,6 +5390,7 @@ + @@ -5897,6 +5907,7 @@ + @@ -7556,6 +7567,7 @@ + @@ -9363,6 +9375,7 @@ + @@ -10040,6 +10053,7 @@ + @@ -10194,6 +10208,7 @@ + @@ -10305,6 +10320,7 @@ + @@ -10332,6 +10348,7 @@ + @@ -10339,6 +10356,7 @@ + diff --git a/svgs/animeindo.svg b/svgs/animeindo.svg new file mode 100644 index 00000000000..dcbc8eb775b --- /dev/null +++ b/svgs/animeindo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/blood_strike.svg b/svgs/blood_strike.svg new file mode 100644 index 00000000000..d1f78c62dcc --- /dev/null +++ b/svgs/blood_strike.svg @@ -0,0 +1 @@ + diff --git a/svgs/concepts.svg b/svgs/concepts.svg new file mode 100644 index 00000000000..120ea6e2af6 --- /dev/null +++ b/svgs/concepts.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/insync.svg b/svgs/insync.svg new file mode 100644 index 00000000000..7dda91d125a --- /dev/null +++ b/svgs/insync.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/islamqa.svg b/svgs/islamqa.svg new file mode 100644 index 00000000000..531060180a8 --- /dev/null +++ b/svgs/islamqa.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svgs/lena_adaptive_icons.svg b/svgs/lena_adaptive_icons.svg new file mode 100644 index 00000000000..f73af80a2e0 --- /dev/null +++ b/svgs/lena_adaptive_icons.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/lighttube.svg b/svgs/lighttube.svg new file mode 100644 index 00000000000..75ba129fd48 --- /dev/null +++ b/svgs/lighttube.svg @@ -0,0 +1 @@ + diff --git a/svgs/lux_icons_free.svg b/svgs/lux_icons_free.svg new file mode 100644 index 00000000000..752154d634e --- /dev/null +++ b/svgs/lux_icons_free.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/svgs/material_you_dynamic_icons.svg b/svgs/material_you_dynamic_icons.svg new file mode 100644 index 00000000000..53239188dce --- /dev/null +++ b/svgs/material_you_dynamic_icons.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/my_health.svg b/svgs/my_health.svg new file mode 100644 index 00000000000..d9f1908e673 --- /dev/null +++ b/svgs/my_health.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svgs/no_thanks.svg b/svgs/no_thanks.svg new file mode 100644 index 00000000000..3b249232c2f --- /dev/null +++ b/svgs/no_thanks.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/routine_tracker.svg b/svgs/routine_tracker.svg new file mode 100644 index 00000000000..e2c844ce7da --- /dev/null +++ b/svgs/routine_tracker.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/tomtom_go_navigation.svg b/svgs/tomtom_go_navigation.svg new file mode 100644 index 00000000000..64f4ad151f0 --- /dev/null +++ b/svgs/tomtom_go_navigation.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/svgs/wezone.svg b/svgs/wezone.svg new file mode 100644 index 00000000000..082fa9f2c1a --- /dev/null +++ b/svgs/wezone.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/widgeet.svg b/svgs/widgeet.svg new file mode 100644 index 00000000000..c3ec822da97 --- /dev/null +++ b/svgs/widgeet.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/xclub.svg b/svgs/xclub.svg new file mode 100644 index 00000000000..5e7a6483e33 --- /dev/null +++ b/svgs/xclub.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/xos_launcher.svg b/svgs/xos_launcher.svg new file mode 100644 index 00000000000..18aecae8e95 --- /dev/null +++ b/svgs/xos_launcher.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/xshare.svg b/svgs/xshare.svg new file mode 100644 index 00000000000..e003926745d --- /dev/null +++ b/svgs/xshare.svg @@ -0,0 +1,4 @@ + + + + From d6bed93439dd2ae250cc74590e6438175c85743d Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 19 Apr 2024 12:02:59 +0300 Subject: [PATCH 004/527] Optimized the wording in the description and added an invitation for devs (#2020) * Optimized the wording and added an invitation for developers to the description * Update README.md --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1b1959b2a44..41949f18ed4 100644 --- a/README.md +++ b/README.md @@ -5,21 +5,23 @@ [![Discord](https://img.shields.io/discord/803299970169700402?label=server&logo=discord)](https://discord.gg/lawnchair-803299970169700402) [![License is Apache 2](https://img.shields.io/github/license/LawnchairLauncher/lawnicons)](LICENSE) -**Lawnicons** is an icon pack developed by the Lawnchair team. -Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. Some launchers may also support Lawnicons for themed icons. +**Lawnicons** is an icon pack developed by the Lawnchair team and supported by our community. +Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. -Lawnicons is best used on [Lawnchair 12.1](https://github.com/LawnchairLauncher/lawnchair). You can enable themed icons on Lawnchair by going to `Home Settings > General > Icon Style > Themed Icons`, choosing "Home Screen" or "Home Screen and App Drawer". - -This project is mostly supported by our community. If you wish to contribute, check out the Contributing section below. +Lawnicons is best used [on Lawnchair 12.1 or Lawnchair 14 Beta 2](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style → Themed Icons → "Home screen" or "Home screen and App Drawer"`. ## Download See [the Releases section](https://github.com/LawnchairLauncher/lawnicons/releases) for the latest stable build. For development builds with new icons, go to [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK). ## Contributing -Please see [the contributing guide](CONTRIBUTING.md) for info on adding icons or contributing code. It will help you avoid mistakes and save time. Detailed examples are available [in Figma](https://www.figma.com/community/file/1227718471680779613). If you still have questions, join [Lawnchair on Discord](https://discord.gg/3x8qNWxgGZ). +Please see [the guide](CONTRIBUTING.md) for info on contributing icons or code, it will save you time. If you have questions, join [Lawnchair on Discord](https://discord.gg/3x8qNWxgGZ). + +We keep [a list of popular requests for icons](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). If you are interested in making icons or want some icons to appear quickly in Lawnicons, then we invite you to contribute. Detailed examples are available [in Figma](https://www.figma.com/community/file/1227718471680779613). -We keep [a list of popular requests for icons](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). If you are interested in making icons or want some icons to appear quickly in Lawnicons, then we invite you to contribute. +If you are interested in mobile development, then pay attention [to our issues](https://github.com/LawnchairLauncher/lawnicons/issues). ## Requesting icons Please use the [icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create an [issue](https://github.com/LawnchairLauncher/lawnicons/issues). + + From d7e4c85a610d34186b47f49a4786a3f391cade86 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:37:02 +0300 Subject: [PATCH 005/527] Minor changes in TL;DR section of the Lawnicons guidelines (#2021) --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf02af40d3d..feb5fe347dd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,9 +11,9 @@ For additional information on designing icons and samples, see [the Lawnicons Fi Need help? [Join Lawnchair on Discord](https://discord.com/invite/3x8qNWxgGZ). ### TL;DR on icon design -The canvas is `192×192px`. The content area for most icons is `160×160px`, meaning the long side of an icon should be `160px`. Square icons should be `154×154px`. No fill, the stroke width is `12px`. All shapes should be black `#000` with rounded ends and joins. Round 90° angles by `6-32px`. Avoid blackness, close distances between shapes, and drastic changes in stroke widths. Simplify details, but don't lose recognizability. Provide original and localized names, so the icons can be found. +The canvas is `192×192px`. The content area for most icons is `160×160px`, meaning the long side of an icon should be `160px`. Square icons should be `154×154px`. No fill, the stroke width is `12px`. All shapes should be black `#000` with rounded ends and joins. Round 90° angles by `6-32px`. Avoid blackness, close distances between strokes, and drastic changes in stroke widths. Simplify details, but don't lose recognizability. Provide original and localized names, so the icons can be found. -To avoid rework, save time and understand the limitations of the guidelines, it is worth reading reviews of [the latest merged pull requests](https://github.com/LawnchairLauncher/lawnicons/pulls?q=is%3Apr+is%3Aclosed+label%3Aicons) (e.g., [+8 icons, +1 link, +4 updates](https://github.com/LawnchairLauncher/lawnicons/pull/1865)) and creating no more than 5 icons in the first attempt. +To avoid rework, save time and understand the limitations of the guidelines, it is worth reading reviews (e.g., [+8 icons, +1 link, +4 updates](https://github.com/LawnchairLauncher/lawnicons/pull/1865)) and creating 5-10 icons in the first contribution. ### Canvas & Sizes From 6b3da23e49e83b5ccf20dc8e9abcca07ada8d2fe Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:21:45 +0300 Subject: [PATCH 006/527] Edited the wording of the description to make it shorter (#2022) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 41949f18ed4..adcb2ae8630 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,17 @@ **Lawnicons** is an icon pack developed by the Lawnchair team and supported by our community. Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. -Lawnicons is best used [on Lawnchair 12.1 or Lawnchair 14 Beta 2](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style → Themed Icons → "Home screen" or "Home screen and App Drawer"`. +Lawnicons is best used [on Lawnchair 12.1 or Lawnchair 14 Beta 2](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style → Themed Icons → "Home screen" or "Home screen and App Drawer"`. ## Download See [the Releases section](https://github.com/LawnchairLauncher/lawnicons/releases) for the latest stable build. For development builds with new icons, go to [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK). ## Contributing -Please see [the guide](CONTRIBUTING.md) for info on contributing icons or code, it will save you time. If you have questions, join [Lawnchair on Discord](https://discord.gg/3x8qNWxgGZ). +Please see [the Lawnicons guidelines](CONTRIBUTING.md) for info on contributing icons or code, it will save you time. Android devs can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). -We keep [a list of popular requests for icons](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). If you are interested in making icons or want some icons to appear quickly in Lawnicons, then we invite you to contribute. Detailed examples are available [in Figma](https://www.figma.com/community/file/1227718471680779613). +If you are interested in creating icons or want some icons to appear rapidly in Lawnicons, then we invite you to fulfill [popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). -If you are interested in mobile development, then pay attention [to our issues](https://github.com/LawnchairLauncher/lawnicons/issues). +Need help? [Join us on Discord](https://discord.gg/3x8qNWxgGZ). ## Requesting icons Please use the [icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create an [issue](https://github.com/LawnchairLauncher/lawnicons/issues). From 10b6135766d689084a495b7934c4afc62956290c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 20 Apr 2024 13:54:08 +0300 Subject: [PATCH 007/527] Moved the phrase about self-fulfilling a request from the Contributing to the Requesting icons (#2023) * Moved the phrase about self-fulfilling a request from the Contributing to the Requesting icons It's more relevant that way. * Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index adcb2ae8630..062326210b0 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,12 @@ See [the Releases section](https://github.com/LawnchairLauncher/lawnicons/releas ## Contributing Please see [the Lawnicons guidelines](CONTRIBUTING.md) for info on contributing icons or code, it will save you time. Android devs can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). -If you are interested in creating icons or want some icons to appear rapidly in Lawnicons, then we invite you to fulfill [popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). +If you are interested in creating icons, then we invite you to fulfill [popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). Need help? [Join us on Discord](https://discord.gg/3x8qNWxgGZ). ## Requesting icons -Please use the [icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create an [issue](https://github.com/LawnchairLauncher/lawnicons/issues). +Please use the [icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). To wait for icons much less, you can take into account our guidelines and make the icons you need yourself. If a previously added icon has a design change, create an [issue](https://github.com/LawnchairLauncher/lawnicons/issues). From 44e53f8d3c0427a4c0fc301560bcf5ae5171b6f5 Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Sun, 21 Apr 2024 15:18:38 +0700 Subject: [PATCH 008/527] Enable automatic per-app language support (#2024) Signed-off-by: Pun Butrach Co-authored-by: Goooler --- app/build.gradle.kts | 12 ++++++++---- app/src/main/res/resources.properties | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/resources.properties diff --git a/app/build.gradle.kts b/app/build.gradle.kts index df6a36f5db5..e9809fdbb9f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -55,15 +55,19 @@ android { signingConfigs["debug"] } + androidResources { + generateLocaleConfig = true + } + buildTypes { + all { + signingConfig = releaseSigning + isPseudoLocalesEnabled = true + } release { isMinifyEnabled = true - signingConfig = releaseSigning proguardFiles("proguard-rules.pro") } - debug { - signingConfig = releaseSigning - } } flavorDimensions += "product" diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties new file mode 100644 index 00000000000..467b3efec9f --- /dev/null +++ b/app/src/main/res/resources.properties @@ -0,0 +1 @@ +unqualifiedResLocale=en-US From 04d2237697c5f26a984d9364f5307480250ab21a Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 21 Apr 2024 12:09:55 +0300 Subject: [PATCH 009/527] Updated the video guide on how to request icons (#2025) * Updated the video guide on how to request icons The IconRequest app has been updated a bit, so the past video has become irrelevant. * Minor update README.md --- CONTRIBUTING.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index feb5fe347dd..2065b9424ce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -164,7 +164,7 @@ Please check the [icon tool guide](/docs/icontool_guide.md) for more information 1. Download IconRequest: [Google Play](https://play.google.com/store/apps/details?id=de.kaiserdragon.iconrequest) • [GitHub](https://github.com/Kaiserdragon2/IconRequest/releases). 2. Launch IconRequest and tap one of the options: -- UPDATE EXISTING — to copy packages with activities. [How to request icons](https://kappa.lol/FL_Oh), 25s video. +- UPDATE EXISTING — to copy packages with activities. [How to request icons](https://kappa.lol/u_MBz), 22s video. - REQUEST NEW — to save icon images and packages with activities. This option is better if you are creating icons. 3. Select the apps for which youʼd like to request or make icons. 4. Copy, save or share. diff --git a/README.md b/README.md index 062326210b0..b127351827d 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ If you are interested in creating icons, then we invite you to fulfill [popular Need help? [Join us on Discord](https://discord.gg/3x8qNWxgGZ). ## Requesting icons -Please use the [icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). To wait for icons much less, you can take into account our guidelines and make the icons you need yourself. If a previously added icon has a design change, create an [issue](https://github.com/LawnchairLauncher/lawnicons/issues). +Please use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). To wait for icons much less, you can take into account our guidelines and make the icons you need yourself. If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues). From 009854e8ca578c33450b645c067cbedf3679ebc1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 21 Apr 2024 17:04:00 +0800 Subject: [PATCH 010/527] Allow picking icons through the app When the `com.novalauncher.category.CUSTOM_ICON_PICKER` intent is recieved, Lawnicons should now support picking inside the app. --- .../app/lawnchair/lawnicons/MainActivity.kt | 41 ++++++++++++++++++- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 10 ++++- .../ui/components/home/IconPreview.kt | 15 ++++++- .../ui/components/home/IconPreviewGrid.kt | 7 ++++ .../lawnicons/ui/components/home/SearchBar.kt | 34 ++++++++++----- .../lawnicons/ui/destination/Home.kt | 20 ++++++++- app/src/main/res/values/strings.xml | 2 + 7 files changed, 114 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index dd3e8f5ef75..21dfa1b79f9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -1,6 +1,8 @@ package app.lawnchair.lawnicons +import android.content.Intent import android.os.Bundle +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge @@ -8,6 +10,9 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.core.graphics.drawable.toBitmap import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import app.lawnchair.lawnicons.ui.Lawnicons import dagger.hilt.android.AndroidEntryPoint @@ -21,9 +26,43 @@ class MainActivity : ComponentActivity() { installSplashScreen() super.onCreate(savedInstanceState) enableEdgeToEdge() + + val isIconPicker = intent?.action == "com.novalauncher.THEME" + setContent { + val context = LocalContext.current val windowSizeClass = calculateWindowSizeClass(this) - Lawnicons(windowSizeClass) + Lawnicons( + windowSizeClass, + @Suppress("DEPRECATION") { + iconInfo -> + val intent = Intent() + + val bitmap = context.resources.getDrawable(iconInfo.id).toBitmap() + + if (bitmap != null) { + try { + intent.putExtra( + "icon", + if (bitmap.isRecycled) { + bitmap + } else { + bitmap.copy(bitmap.config, false) + }, + ) + } catch (e: Exception) { + Log.d("ERROR", e.toString()) + } + intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconInfo.id) + setResult(RESULT_OK, intent) + } else { + setResult(RESULT_CANCELED, intent) + } + finish() + }, + Modifier, + isIconPicker, + ) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 2a024e32786..9d310280776 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -15,6 +15,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements @@ -30,7 +31,9 @@ import soup.compose.material.motion.animation.rememberSlideDistance @ExperimentalFoundationApi fun Lawnicons( windowSizeClass: WindowSizeClass, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, + isIconPicker: Boolean = false, ) { val navController = rememberNavController() val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl @@ -51,7 +54,12 @@ fun Lawnicons( popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, ) { composable(route = Destinations.HOME) { - Home(onNavigate = navController::navigate, isExpandedScreen = isExpandedScreen) + Home( + onNavigate = navController::navigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) } composable(route = Destinations.ACKNOWLEDGEMENTS) { Acknowledgements(onBack = navController::popBackStack, onNavigate = navController::navigate, isExpandedScreen = isExpandedScreen) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index bc16c124f14..d0bb6404ca4 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp @@ -41,9 +42,12 @@ private fun ColorScheme.iconColor(): Color { @Composable fun IconPreview( iconInfo: IconInfo, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, iconBackground: Color? = null, + isIconPicker: Boolean = false, ) { + val context = LocalContext.current val isIconInfoShown = remember { mutableStateOf(false) } Box( @@ -52,7 +56,15 @@ fun IconPreview( .padding(all = 8.dp) .aspectRatio(ratio = 1F) .clip(shape = CircleShape) - .clickable(onClick = { isIconInfoShown.value = true }) + .clickable( + onClick = { + if (isIconPicker) { + onSendResult(iconInfo) + } else { + isIconInfoShown.value = true + } + }, + ) .background( color = iconBackground ?: if (isIconInfoShown.value) { MaterialTheme.colorScheme.surfaceVariant @@ -106,6 +118,7 @@ private fun IconPreviewComposablePreview() { LawniconsTheme { IconPreview( iconInfo = SampleData.iconInfoSample, + {}, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index b3ec5510044..bec1f32de67 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -24,6 +24,8 @@ fun IconPreviewGrid( iconInfo: ImmutableList, isExpandedScreen: Boolean, modifier: Modifier = Modifier, + onSendResult: (IconInfo) -> Unit, + isIconPicker: Boolean = false, ) { LazyVerticalGrid( modifier = modifier @@ -48,6 +50,8 @@ fun IconPreviewGrid( items(items = iconInfo) { iconInfo -> IconPreview( iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, ) } } @@ -61,6 +65,9 @@ private fun IconGridPreview() { IconPreviewGrid( SampleData.iconInfoList, true, + Modifier, + { }, + false ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt index c66ca7d8baa..c753a133038 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt @@ -19,7 +19,7 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.ArrowBack +import androidx.compose.material.icons.automirrored.rounded.ArrowBack import androidx.compose.material.icons.rounded.Close import androidx.compose.material.icons.rounded.Search import androidx.compose.material3.DockedSearchBar @@ -65,7 +65,9 @@ fun LawniconsSearchBar( iconInfoModel: IconInfoModel, onNavigate: (String) -> Unit, modifier: Modifier = Modifier, + onSendResult: (IconInfo) -> Unit = {}, isExpandedScreen: Boolean = false, + isIconPicker: Boolean = false, ) { LawniconsSearchBar( query = query, @@ -75,8 +77,10 @@ fun LawniconsSearchBar( iconCount = iconInfoModel.iconCount, iconInfo = iconInfoModel.iconInfo, onNavigate = onNavigate, - isExpandedScreen = isExpandedScreen, modifier = modifier, + onSendResult = onSendResult, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, ) } @@ -90,7 +94,9 @@ fun LawniconsSearchBar( iconInfo: ImmutableList, onNavigate: (String) -> Unit, modifier: Modifier = Modifier, + onSendResult: (IconInfo) -> Unit = {}, isExpandedScreen: Boolean = false, + isIconPicker: Boolean = false, ) { var active by rememberSaveable { mutableStateOf(false) } @@ -125,7 +131,11 @@ fun LawniconsSearchBar( placeholder = { Text( stringResource( - id = R.string.search_bar_hint, + id = if (isIconPicker) { + R.string.search_bar_choose_icon + } else { + R.string.search_bar_hint + }, iconCount, ), ) @@ -140,15 +150,17 @@ fun LawniconsSearchBar( ) }, trailingIcon = { - SearchMenu( - isQueryEmpty = isQueryEmpty, - onNavigate = onNavigate, - onClearAndBackClick = onClearAndBackClick, - ) + if (!isIconPicker) { + SearchMenu( + isQueryEmpty = isQueryEmpty, + onNavigate = onNavigate, + onClearAndBackClick = onClearAndBackClick, + ) + } }, isExpandedScreen = isExpandedScreen, ) { - SearchContents(iconInfo) + SearchContents(iconInfo, onSendResult) } } } @@ -208,7 +220,7 @@ private fun SearchIcon( ) { if (active) { ClickableIcon( - imageVector = Icons.Rounded.ArrowBack, + imageVector = Icons.AutoMirrored.Rounded.ArrowBack, onClick = onButtonClick, ) } else { @@ -256,6 +268,7 @@ private fun SearchMenu( @Composable private fun SearchContents( iconInfo: ImmutableList, + onSendResult: (IconInfo) -> Unit = {}, ) { when (iconInfo.size) { 1 -> { @@ -320,6 +333,7 @@ private fun SearchContents( IconPreview( iconInfo = it, iconBackground = Color.Transparent, + onSendResult = onSendResult, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index f5728eafc58..57054cbafb2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -11,6 +11,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.LawniconsSearchBar import app.lawnchair.lawnicons.ui.components.home.PlaceholderSearchBar @@ -23,8 +24,10 @@ import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel @Composable fun Home( onNavigate: (String) -> Unit, + onSendResult: (IconInfo) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, + isIconPicker: Boolean = false, lawniconsViewModel: LawniconsViewModel = hiltViewModel(), ) { val iconInfoModel by lawniconsViewModel.iconInfoModel.collectAsState() @@ -52,10 +55,17 @@ fun Home( iconInfoModel = it, onNavigate = onNavigate, isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, ) } iconInfoModel?.let { - IconPreviewGrid(iconInfo = it.iconInfo, isExpandedScreen = isExpandedScreen) + IconPreviewGrid( + iconInfo = it.iconInfo, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) } } else { PlaceholderSearchBar() @@ -86,6 +96,12 @@ private fun HomePreview() { onNavigate = {}, isExpandedScreen = true, ) - IconPreviewGrid(iconInfo = iconInfo, isExpandedScreen = false) + IconPreviewGrid( + iconInfo = iconInfo, + isExpandedScreen = false, + Modifier, + {}, + false + ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9d4caaf9d87..b760149d027 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,6 +12,8 @@ Search through %d icons + Pick an icon + No icons found From 95f398662eb08920a7207b57f3f275c6eafe35dc Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 21 Apr 2024 17:04:48 +0800 Subject: [PATCH 011/527] Fix website intent on Android R+ --- app/src/main/AndroidManifest.xml | 5 +++++ .../app/lawnchair/lawnicons/ui/components/IconLink.kt | 10 ++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c3b740be09c..721deec8edd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -129,5 +129,10 @@ + + + + + diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt index 6c4693aced5..594e96dff7e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt @@ -47,12 +47,10 @@ fun IconLink( .height(64.dp) .clip(MaterialTheme.shapes.medium) .clickable { - if (!inPreviewMode) { - val webpage = Uri.parse(url) - val intent = Intent(Intent.ACTION_VIEW, webpage) - if (intent.resolveActivity(context.packageManager) != null) { - context.startActivity(intent) - } + val webpage = Uri.parse(url) + val intent = Intent(Intent.ACTION_VIEW, webpage) + if (intent.resolveActivity(context.packageManager) != null) { + context.startActivity(intent) } }, ) { From 7e8cd7eafa34ef4e0aca9534e796d5f9f252c396 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 21 Apr 2024 17:05:38 +0800 Subject: [PATCH 012/527] Support material you icon pack standard --- app/src/main/AndroidManifest.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 721deec8edd..4ab282ab9f2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,6 +36,9 @@ + + + From ad1cb56793bbd69f70ab3131776e49397b193161 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:36:30 +0800 Subject: [PATCH 013/527] Support predictive back --- app/build.gradle.kts | 2 +- app/src/main/AndroidManifest.xml | 3 ++- app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e9809fdbb9f..ebf491f791c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -150,7 +150,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.6") implementation("androidx.compose.material3:material3:1.3.0-alpha05") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.7.7") + implementation("androidx.navigation:navigation-compose:2.8.0-alpha07") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4ab282ab9f2..f7757956d42 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Lawnicons.SplashScreen" - android:name=".LawniconsApplication"> + android:name=".LawniconsApplication" + android:enableOnBackInvokedCallback="true"> Date: Sun, 21 Apr 2024 19:14:07 +0800 Subject: [PATCH 014/527] Limit width of icon grid on expanded devices --- .../ui/components/core/LawniconsScaffold.kt | 4 +- .../ui/components/home/IconInfoPopup.kt | 2 +- .../ui/components/home/IconPreviewGrid.kt | 67 ++++++++++------- .../lawnicons/ui/components/home/SearchBar.kt | 2 + .../lawnicons/ui/destination/Home.kt | 75 ++++++++++++------- 5 files changed, 97 insertions(+), 53 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt index 37304b68302..fef3a4c2e6e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt @@ -65,7 +65,9 @@ fun LawniconsScaffold( Modifier }, ), - ) { content(it) } + ) { + content(it) + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 3e78cdf7c95..b3d17f61aa5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -53,7 +53,7 @@ fun IconInfoPopup( }, sheetState = sheetState, windowInsets = WindowInsets(0.dp), - modifier = Modifier + modifier = modifier .navigationBarsPadding(), ) { Column( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index bec1f32de67..83577c4ec8c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -1,14 +1,21 @@ package app.lawnchair.lawnicons.ui.components.home import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.model.IconInfo @@ -26,33 +33,43 @@ fun IconPreviewGrid( modifier: Modifier = Modifier, onSendResult: (IconInfo) -> Unit, isIconPicker: Boolean = false, + contentPadding: PaddingValues? = null, ) { - LazyVerticalGrid( - modifier = modifier - .statusBarsPadding() - .padding(top = 26.dp), - columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = if (!isExpandedScreen) { - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 8.dp, - additionalTop = 42.dp, - additionalEnd = 8.dp, - ) - } else { - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 32.dp, - additionalTop = 42.dp, - additionalEnd = 32.dp, - ) - }, - + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxWidth() ) { - items(items = iconInfo) { iconInfo -> - IconPreview( - iconInfo = iconInfo, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) + LazyVerticalGrid( + modifier = modifier + .then( + if (isExpandedScreen) Modifier.width(640.dp) else Modifier, + ) + .statusBarsPadding() + .padding(top = 26.dp), + columns = GridCells.Adaptive(minSize = 80.dp), + contentPadding = contentPadding ?: if (!isExpandedScreen) { + WindowInsets.navigationBars.toPaddingValues( + additionalStart = 8.dp, + additionalTop = 42.dp, + additionalEnd = 8.dp, + ) + } else { + WindowInsets.navigationBars.toPaddingValues( + additionalStart = 32.dp, + additionalTop = 42.dp, + additionalEnd = 32.dp, + ) + }, + + ) { + items(items = iconInfo) { iconInfo -> + IconPreview( + iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + } } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt index c753a133038..30ac4c58a1e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt @@ -121,6 +121,7 @@ fun LawniconsSearchBar( } .zIndex(1f) .fillMaxSize(), + contentAlignment = Alignment.TopCenter, ) { ResponsiveSearchBar( query = query, @@ -182,6 +183,7 @@ private fun ResponsiveSearchBar( if (isExpandedScreen) { Row( verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, ) { DockedSearchBar( query = query, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 57054cbafb2..29ac8dbc4ba 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -2,6 +2,14 @@ package app.lawnchair.lawnicons.ui.destination import androidx.compose.animation.Crossfade import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.calculateEndPadding +import androidx.compose.foundation.layout.calculateStartPadding +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -9,7 +17,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid @@ -40,32 +51,44 @@ fun Home( label = "", ) { targetState -> if (targetState) { - searchedIconInfoModel?.let { - LawniconsSearchBar( - query = searchTerm, - isQueryEmpty = searchTerm == "", - onClearAndBackClick = { - searchTerm = "" - lawniconsViewModel.searchIcons("") - }, - onQueryChange = { newValue -> - searchTerm = newValue - lawniconsViewModel.searchIcons(newValue) - }, - iconInfoModel = it, - onNavigate = onNavigate, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) - } - iconInfoModel?.let { - IconPreviewGrid( - iconInfo = it.iconInfo, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) + Scaffold( + topBar = { + searchedIconInfoModel?.let { + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + LawniconsSearchBar( + query = searchTerm, + isQueryEmpty = searchTerm == "", + onClearAndBackClick = { + searchTerm = "" + lawniconsViewModel.searchIcons("") + }, + onQueryChange = { newValue -> + searchTerm = newValue + lawniconsViewModel.searchIcons(newValue) + }, + iconInfoModel = it, + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + } + } + }, + ) { contentPadding -> + iconInfoModel?.let { + val padding = contentPadding + IconPreviewGrid( + iconInfo = it.iconInfo, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + } } } else { PlaceholderSearchBar() From 5871d98c44059acd73aa2f71c590f876cabed07b Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 21 Apr 2024 19:14:15 +0800 Subject: [PATCH 015/527] Fix padding --- .../kotlin/app/lawnchair/lawnicons/ui/destination/About.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index e55c0f734a9..3baacf1c7c7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -5,9 +5,11 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -37,6 +39,7 @@ import app.lawnchair.lawnicons.ui.util.Contributor import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.ui.util.ExternalLink import app.lawnchair.lawnicons.ui.util.PreviewLawnicons +import app.lawnchair.lawnicons.ui.util.toPaddingValues import app.lawnchair.lawnicons.util.appIcon private val externalLinks = listOf( From 3feed213cc1c76caa6dab8fae5a308ad29cb8ea8 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 21 Apr 2024 19:18:35 +0800 Subject: [PATCH 016/527] Apply spotless Apply spotless --- .../kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt | 2 +- .../lawnicons/ui/components/home/IconPreviewGrid.kt | 13 ++++++------- .../app/lawnchair/lawnicons/ui/destination/About.kt | 3 --- .../app/lawnchair/lawnicons/ui/destination/Home.kt | 12 +++--------- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 37353153a05..729037ef911 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -53,7 +53,7 @@ fun Lawnicons( exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, - sizeTransform = { SizeTransform() } + sizeTransform = { SizeTransform() }, ) { composable(route = Destinations.HOME) { Home( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 83577c4ec8c..9aeb5774a65 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars @@ -30,18 +29,18 @@ import kotlinx.collections.immutable.ImmutableList fun IconPreviewGrid( iconInfo: ImmutableList, isExpandedScreen: Boolean, - modifier: Modifier = Modifier, onSendResult: (IconInfo) -> Unit, + modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, - modifier = Modifier.fillMaxWidth() + modifier = modifier.fillMaxWidth(), ) { LazyVerticalGrid( - modifier = modifier + modifier = Modifier .then( if (isExpandedScreen) Modifier.width(640.dp) else Modifier, ) @@ -62,7 +61,7 @@ fun IconPreviewGrid( ) }, - ) { + ) { items(items = iconInfo) { iconInfo -> IconPreview( iconInfo = iconInfo, @@ -82,9 +81,9 @@ private fun IconGridPreview() { IconPreviewGrid( SampleData.iconInfoList, true, + {}, Modifier, - { }, - false + false, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 3baacf1c7c7..e55c0f734a9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -5,11 +5,9 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -39,7 +37,6 @@ import app.lawnchair.lawnicons.ui.util.Contributor import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.ui.util.ExternalLink import app.lawnchair.lawnicons.ui.util.PreviewLawnicons -import app.lawnchair.lawnicons.ui.util.toPaddingValues import app.lawnchair.lawnicons.util.appIcon private val externalLinks = listOf( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 29ac8dbc4ba..6e14b9288da 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -4,10 +4,6 @@ import androidx.compose.animation.Crossfade import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.calculateEndPadding -import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable @@ -19,8 +15,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid @@ -57,7 +51,7 @@ fun Home( Column( modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { LawniconsSearchBar( query = searchTerm, @@ -122,9 +116,9 @@ private fun HomePreview() { IconPreviewGrid( iconInfo = iconInfo, isExpandedScreen = false, - Modifier, {}, - false + Modifier, + false, ) } } From 36497416c2b303632e80ce5c314b560f0e56cc91 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:44:31 +0300 Subject: [PATCH 017/527] +6 links (#2026) --- app/assets/appfilter.xml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 68fa466eb26..9a7c12e3f9d 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -410,6 +410,7 @@ + @@ -557,6 +558,7 @@ + @@ -1142,6 +1144,7 @@ + @@ -1893,8 +1896,8 @@ - + @@ -2037,6 +2040,7 @@ + @@ -2566,7 +2570,6 @@ - @@ -2723,6 +2726,7 @@ + @@ -3065,6 +3069,7 @@ + @@ -4900,6 +4905,7 @@ + @@ -5390,7 +5396,6 @@ - @@ -5588,6 +5593,7 @@ + From 80a91c89ab8fffffc0427161ecafebfb97fe6fcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 19:46:12 +0800 Subject: [PATCH 018/527] Update dependency io.nlopez.compose.rules:ktlint to v0.3.16 (#2028) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c65404f1a1f..857ce2a1ff4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,7 +29,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.15", + "io.nlopez.compose.rules:ktlint:0.3.16", ), ).editorConfigOverride( mapOf( From 175e0162910650a495ff422cdcce691b222627ea Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:01:12 +0300 Subject: [PATCH 019/527] Fix for a dialer + 3 links (#2029) --- app/assets/appfilter.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9a7c12e3f9d..2a67cd21651 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1144,6 +1144,7 @@ + @@ -1938,8 +1939,6 @@ - - @@ -2260,6 +2259,7 @@ + @@ -3995,6 +3995,7 @@ + @@ -10454,6 +10455,7 @@ + From 9d79e91cc08e516853fb4fa0aa2692bbb078c204 Mon Sep 17 00:00:00 2001 From: Alexandre Paradis Date: Mon, 22 Apr 2024 12:29:14 -0400 Subject: [PATCH 020/527] Add icon for VeWorld (#2030) --- app/assets/appfilter.xml | 1 + svgs/veworld.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/veworld.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 2a67cd21651..27740f341b7 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -9771,6 +9771,7 @@ + diff --git a/svgs/veworld.svg b/svgs/veworld.svg new file mode 100644 index 00000000000..d93c2205259 --- /dev/null +++ b/svgs/veworld.svg @@ -0,0 +1 @@ + From 672e206fc0e03df8d5ec76e091d005a5701ea533 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 23 Apr 2024 22:29:52 +0300 Subject: [PATCH 021/527] +46 links (#2032) --- app/assets/appfilter.xml | 55 ++++++++++++++++++++++++++--- svgs/{myedenred.svg => edenred.svg} | 0 svgs/ticket_restaurant.svg | 1 - svgs/{webex_meet.svg => webex.svg} | 0 4 files changed, 50 insertions(+), 6 deletions(-) rename svgs/{myedenred.svg => edenred.svg} (100%) delete mode 100644 svgs/ticket_restaurant.svg rename svgs/{webex_meet.svg => webex.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 27740f341b7..21de32f3d89 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -52,12 +52,16 @@ + + + + @@ -75,6 +79,7 @@ + @@ -456,6 +461,7 @@ + @@ -586,6 +592,7 @@ + @@ -722,6 +729,7 @@ + @@ -1004,6 +1012,7 @@ + @@ -1145,7 +1154,6 @@ - @@ -1261,6 +1269,8 @@ + + @@ -1733,6 +1743,7 @@ + @@ -2097,6 +2108,7 @@ + @@ -2179,6 +2191,8 @@ + + @@ -2624,6 +2638,7 @@ + @@ -2706,6 +2721,7 @@ + @@ -2873,6 +2889,9 @@ + + + @@ -3215,6 +3234,7 @@ + @@ -3757,6 +3777,7 @@ + @@ -3832,6 +3853,7 @@ + @@ -3936,6 +3958,7 @@ + @@ -4479,6 +4502,7 @@ + @@ -4674,6 +4698,7 @@ + @@ -4857,6 +4882,7 @@ + @@ -5673,8 +5699,8 @@ - - + + @@ -5938,6 +5964,7 @@ + @@ -6054,6 +6081,7 @@ + @@ -6230,6 +6258,7 @@ + @@ -6255,6 +6284,7 @@ + @@ -6454,6 +6484,7 @@ + @@ -8326,6 +8357,7 @@ + @@ -8740,6 +8772,7 @@ + @@ -9281,7 +9314,7 @@ - + @@ -9645,6 +9678,7 @@ + @@ -9715,6 +9749,8 @@ + + @@ -9864,6 +9900,7 @@ + @@ -9881,6 +9918,7 @@ + @@ -10030,7 +10068,8 @@ - + + @@ -10336,6 +10375,7 @@ + @@ -10363,6 +10403,7 @@ + @@ -10378,6 +10419,7 @@ + @@ -10534,6 +10576,7 @@ + @@ -10626,6 +10669,7 @@ + @@ -10762,6 +10806,7 @@ + diff --git a/svgs/myedenred.svg b/svgs/edenred.svg similarity index 100% rename from svgs/myedenred.svg rename to svgs/edenred.svg diff --git a/svgs/ticket_restaurant.svg b/svgs/ticket_restaurant.svg deleted file mode 100644 index 3bff0c7ec80..00000000000 --- a/svgs/ticket_restaurant.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/webex_meet.svg b/svgs/webex.svg similarity index 100% rename from svgs/webex_meet.svg rename to svgs/webex.svg From c336e87c93b4f789f8f6b5a853ec7398249a28f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Apr 2024 08:42:26 +0800 Subject: [PATCH 022/527] Update dependency io.nlopez.compose.rules:ktlint to v0.3.17 (#2031) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 857ce2a1ff4..24a88115c6b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,7 +29,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.16", + "io.nlopez.compose.rules:ktlint:0.3.17", ), ).editorConfigOverride( mapOf( From 5f2f0645d7ba6ed01d6744561d3066b64db3bd3f Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:44:24 +0300 Subject: [PATCH 023/527] +3 links (#2034) --- app/assets/appfilter.xml | 3 +++ svgs/yandex_market.svg | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 21de32f3d89..e27da95f5bb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -9650,6 +9650,7 @@ + @@ -10617,6 +10618,8 @@ + + diff --git a/svgs/yandex_market.svg b/svgs/yandex_market.svg index aa746517a8f..cb13b1b186a 100644 --- a/svgs/yandex_market.svg +++ b/svgs/yandex_market.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 4ca882de17fb6485fbd48b91ef72d7cfcc2c412b Mon Sep 17 00:00:00 2001 From: Patryk Radziszewski <100310118+Chefski@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:40:00 +0100 Subject: [PATCH 024/527] Bump `version` and `versionCode` --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ebf491f791c..42fe7fa80fd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -25,7 +25,7 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.8.0" +val version = "2.9.0" val versionDisplayName = "$version ${if (isReleaseBuild) "" else devReleaseName}" android { @@ -36,7 +36,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = 34 - versionCode = 11 + versionCode = 12 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From 0e2bf566691fa31790d7708cddbcc72e8041ac27 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:36:35 +0800 Subject: [PATCH 025/527] Update dependency io.nlopez.compose.rules:ktlint to v0.3.18 (#2035) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 24a88115c6b..c48841042dd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,7 +29,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.17", + "io.nlopez.compose.rules:ktlint:0.3.18", ), ).editorConfigOverride( mapOf( From 02b7617a0f9f3839ceb53d8ba81500abfa8e17d7 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 25 Apr 2024 20:37:25 +0300 Subject: [PATCH 026/527] +12 links (#2037) --- app/assets/appfilter.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index e27da95f5bb..8dfc032f574 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -617,6 +617,7 @@ + @@ -672,6 +673,7 @@ + @@ -1048,6 +1050,7 @@ + @@ -1081,6 +1084,7 @@ + @@ -1267,6 +1271,7 @@ + @@ -2676,6 +2681,7 @@ + @@ -3051,6 +3057,7 @@ + @@ -4497,6 +4504,7 @@ + @@ -7180,6 +7188,7 @@ + @@ -8419,6 +8428,7 @@ + @@ -10251,6 +10261,7 @@ + @@ -10502,6 +10513,7 @@ + From 976b19f899b289bd2134043930990efddeb2f8ca Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:00:23 +0300 Subject: [PATCH 027/527] +6 links (#2038) --- app/assets/appfilter.xml | 30 +++++++++++-------- svgs/{myairtel.svg => airtel.svg} | 0 ...gricole_italia.svg => credit_agricole.svg} | 0 3 files changed, 18 insertions(+), 12 deletions(-) rename svgs/{myairtel.svg => airtel.svg} (100%) rename svgs/{credit_agricole_italia.svg => credit_agricole.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8dfc032f574..2bdbf1c1bed 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -249,14 +249,18 @@ - - - - - - - - + + + + + + + + + + + + @@ -1150,6 +1154,7 @@ + @@ -1929,6 +1934,7 @@ + @@ -2089,7 +2095,8 @@ - + + @@ -2528,6 +2535,7 @@ + @@ -5612,9 +5620,6 @@ - - - @@ -8452,6 +8457,7 @@ + diff --git a/svgs/myairtel.svg b/svgs/airtel.svg similarity index 100% rename from svgs/myairtel.svg rename to svgs/airtel.svg diff --git a/svgs/credit_agricole_italia.svg b/svgs/credit_agricole.svg similarity index 100% rename from svgs/credit_agricole_italia.svg rename to svgs/credit_agricole.svg From 6670771cdaff9077c0a2a0a35ee5d88ea59b1d0c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 26 Apr 2024 20:37:38 +0300 Subject: [PATCH 028/527] +1 link and updating names (#2039) * +1 link and updating names * Minor fix --- app/assets/appfilter.xml | 153 +++++++++--------- svgs/{a101_kapida.svg => a101_yeni.svg} | 0 svgs/{abvbg.svg => abv_mail.svg} | 0 ...nt_access.svg => adobe_account_access.svg} | 0 svgs/{afwall.svg => afwall_plus.svg} | 0 svgs/{alert.svg => air_alarm.svg} | 0 svgs/{airselangor.svg => air_selangor.svg} | 0 ...svg => alarm_clock_for_heavy_sleepers.svg} | 0 svgs/{alto.svg => altos_adventure.svg} | 0 svgs/{amaze.svg => amaze_file_manager.svg} | 0 svgs/{apus.svg => apus_launcher.svg} | 0 ...cons_dark.svg => arcticons_line_icons.svg} | 0 ...u.svg => arcticons_material_you_icons.svg} | 0 svgs/{audubon.svg => audubon_bird_guide.svg} | 0 svgs/{ausweisapp2.svg => ausweisapp.svg} | 0 ...automatag.svg => automatic_tag_editor.svg} | 0 ...obile_security.svg => avast_antivirus.svg} | 0 ...{avee_player.svg => avee_music_player.svg} | 0 ...kku_alarm.svg => battery_notification.svg} | 0 svgs/{b_maniac.svg => beta_maniac.svg} | 0 svgs/{auth.svg => ente_auth.svg} | 0 svgs/{airtel.svg => my_airtel.svg} | 0 .../{automatic_clicker.svg => quicktouch.svg} | 0 ...thy.svg => twilio_authy_authenticator.svg} | 0 24 files changed, 77 insertions(+), 76 deletions(-) rename svgs/{a101_kapida.svg => a101_yeni.svg} (100%) rename svgs/{abvbg.svg => abv_mail.svg} (100%) rename svgs/{account_access.svg => adobe_account_access.svg} (100%) rename svgs/{afwall.svg => afwall_plus.svg} (100%) rename svgs/{alert.svg => air_alarm.svg} (100%) rename svgs/{airselangor.svg => air_selangor.svg} (100%) rename svgs/{amdroid.svg => alarm_clock_for_heavy_sleepers.svg} (100%) rename svgs/{alto.svg => altos_adventure.svg} (100%) rename svgs/{amaze.svg => amaze_file_manager.svg} (100%) rename svgs/{apus.svg => apus_launcher.svg} (100%) rename svgs/{arcticons_dark.svg => arcticons_line_icons.svg} (100%) rename svgs/{arcticons_material_you.svg => arcticons_material_you_icons.svg} (100%) rename svgs/{audubon.svg => audubon_bird_guide.svg} (100%) rename svgs/{ausweisapp2.svg => ausweisapp.svg} (100%) rename svgs/{automatag.svg => automatic_tag_editor.svg} (100%) rename svgs/{avast_mobile_security.svg => avast_antivirus.svg} (100%) rename svgs/{avee_player.svg => avee_music_player.svg} (100%) rename svgs/{akku_alarm.svg => battery_notification.svg} (100%) rename svgs/{b_maniac.svg => beta_maniac.svg} (100%) rename svgs/{auth.svg => ente_auth.svg} (100%) rename svgs/{airtel.svg => my_airtel.svg} (100%) rename svgs/{automatic_clicker.svg => quicktouch.svg} (100%) rename svgs/{authy.svg => twilio_authy_authenticator.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 2bdbf1c1bed..db701ff7ac5 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -65,9 +65,9 @@ - - - + + + @@ -105,21 +105,19 @@ - + - - - + + - @@ -175,9 +173,10 @@ + - + @@ -203,11 +202,11 @@ - + - + @@ -217,17 +216,17 @@ + - - + @@ -246,37 +245,24 @@ - - - - - - - - - - - - - - - - + + + - + - + @@ -284,7 +270,6 @@ - @@ -300,7 +285,7 @@ - + @@ -337,17 +322,16 @@ - - + + - - - - + + + @@ -367,7 +351,6 @@ - @@ -436,7 +419,7 @@ - + @@ -465,8 +448,8 @@ - - + + @@ -488,6 +471,8 @@ + + @@ -533,8 +518,6 @@ - - @@ -558,7 +541,7 @@ - + @@ -568,12 +551,12 @@ - - - - - - + + + + + + @@ -594,7 +577,7 @@ - + @@ -608,13 +591,11 @@ - + - - @@ -633,7 +614,7 @@ - + @@ -641,18 +622,17 @@ - - + + - - + + + + - - - @@ -664,11 +644,10 @@ - - + @@ -681,13 +660,13 @@ + + + - - - - - + + @@ -695,9 +674,6 @@ - - - @@ -713,8 +689,6 @@ - - @@ -795,6 +769,7 @@ + @@ -874,6 +849,8 @@ + + @@ -2708,6 +2685,7 @@ + @@ -5620,6 +5598,18 @@ + + + + + + + + + + + + @@ -7268,6 +7258,7 @@ + @@ -9621,6 +9612,8 @@ + + @@ -9935,6 +9928,7 @@ + @@ -10651,6 +10645,9 @@ + + + @@ -10701,6 +10698,7 @@ + @@ -10758,6 +10756,7 @@ + @@ -10800,6 +10799,7 @@ + @@ -10831,6 +10831,7 @@ + diff --git a/svgs/a101_kapida.svg b/svgs/a101_yeni.svg similarity index 100% rename from svgs/a101_kapida.svg rename to svgs/a101_yeni.svg diff --git a/svgs/abvbg.svg b/svgs/abv_mail.svg similarity index 100% rename from svgs/abvbg.svg rename to svgs/abv_mail.svg diff --git a/svgs/account_access.svg b/svgs/adobe_account_access.svg similarity index 100% rename from svgs/account_access.svg rename to svgs/adobe_account_access.svg diff --git a/svgs/afwall.svg b/svgs/afwall_plus.svg similarity index 100% rename from svgs/afwall.svg rename to svgs/afwall_plus.svg diff --git a/svgs/alert.svg b/svgs/air_alarm.svg similarity index 100% rename from svgs/alert.svg rename to svgs/air_alarm.svg diff --git a/svgs/airselangor.svg b/svgs/air_selangor.svg similarity index 100% rename from svgs/airselangor.svg rename to svgs/air_selangor.svg diff --git a/svgs/amdroid.svg b/svgs/alarm_clock_for_heavy_sleepers.svg similarity index 100% rename from svgs/amdroid.svg rename to svgs/alarm_clock_for_heavy_sleepers.svg diff --git a/svgs/alto.svg b/svgs/altos_adventure.svg similarity index 100% rename from svgs/alto.svg rename to svgs/altos_adventure.svg diff --git a/svgs/amaze.svg b/svgs/amaze_file_manager.svg similarity index 100% rename from svgs/amaze.svg rename to svgs/amaze_file_manager.svg diff --git a/svgs/apus.svg b/svgs/apus_launcher.svg similarity index 100% rename from svgs/apus.svg rename to svgs/apus_launcher.svg diff --git a/svgs/arcticons_dark.svg b/svgs/arcticons_line_icons.svg similarity index 100% rename from svgs/arcticons_dark.svg rename to svgs/arcticons_line_icons.svg diff --git a/svgs/arcticons_material_you.svg b/svgs/arcticons_material_you_icons.svg similarity index 100% rename from svgs/arcticons_material_you.svg rename to svgs/arcticons_material_you_icons.svg diff --git a/svgs/audubon.svg b/svgs/audubon_bird_guide.svg similarity index 100% rename from svgs/audubon.svg rename to svgs/audubon_bird_guide.svg diff --git a/svgs/ausweisapp2.svg b/svgs/ausweisapp.svg similarity index 100% rename from svgs/ausweisapp2.svg rename to svgs/ausweisapp.svg diff --git a/svgs/automatag.svg b/svgs/automatic_tag_editor.svg similarity index 100% rename from svgs/automatag.svg rename to svgs/automatic_tag_editor.svg diff --git a/svgs/avast_mobile_security.svg b/svgs/avast_antivirus.svg similarity index 100% rename from svgs/avast_mobile_security.svg rename to svgs/avast_antivirus.svg diff --git a/svgs/avee_player.svg b/svgs/avee_music_player.svg similarity index 100% rename from svgs/avee_player.svg rename to svgs/avee_music_player.svg diff --git a/svgs/akku_alarm.svg b/svgs/battery_notification.svg similarity index 100% rename from svgs/akku_alarm.svg rename to svgs/battery_notification.svg diff --git a/svgs/b_maniac.svg b/svgs/beta_maniac.svg similarity index 100% rename from svgs/b_maniac.svg rename to svgs/beta_maniac.svg diff --git a/svgs/auth.svg b/svgs/ente_auth.svg similarity index 100% rename from svgs/auth.svg rename to svgs/ente_auth.svg diff --git a/svgs/airtel.svg b/svgs/my_airtel.svg similarity index 100% rename from svgs/airtel.svg rename to svgs/my_airtel.svg diff --git a/svgs/automatic_clicker.svg b/svgs/quicktouch.svg similarity index 100% rename from svgs/automatic_clicker.svg rename to svgs/quicktouch.svg diff --git a/svgs/authy.svg b/svgs/twilio_authy_authenticator.svg similarity index 100% rename from svgs/authy.svg rename to svgs/twilio_authy_authenticator.svg From cffd9c5022f5b91fd5ea89260625c63391ab4ccb Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:15:50 +0800 Subject: [PATCH 029/527] Update search bar * Remove kebab menu and replace with direct link to About * Update implementations to remove deprecated functions --- .../components/home/{ => search}/SearchBar.kt | 213 ++++++------------ .../components/home/search/SearchContents.kt | 110 +++++++++ .../lawnicons/ui/destination/About.kt | 9 + .../lawnicons/ui/destination/Home.kt | 17 +- 4 files changed, 200 insertions(+), 149 deletions(-) rename app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/{ => search}/SearchBar.kt (59%) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt similarity index 59% rename from app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt rename to app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 30ac4c58a1e..c2a0555a196 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -1,11 +1,10 @@ -package app.lawnchair.lawnicons.ui.components.home +package app.lawnchair.lawnicons.ui.components.home.search import androidx.compose.animation.Crossfade -import androidx.compose.foundation.clickable +import androidx.compose.animation.animateContentSize import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -14,20 +13,17 @@ import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items -import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.rounded.ArrowBack import androidx.compose.material.icons.rounded.Close import androidx.compose.material.icons.rounded.Search import androidx.compose.material3.DockedSearchBar -import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.ListItem +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SearchBar +import androidx.compose.material3.SearchBarDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -37,24 +33,21 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource +import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource import androidx.compose.ui.semantics.isTraversalGroup import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.ui.components.home.ClickableIcon import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues -import kotlinx.collections.immutable.ImmutableList @Composable fun LawniconsSearchBar( @@ -64,8 +57,8 @@ fun LawniconsSearchBar( onQueryChange: (String) -> Unit, iconInfoModel: IconInfoModel, onNavigate: (String) -> Unit, + content: @Composable (() -> Unit), modifier: Modifier = Modifier, - onSendResult: (IconInfo) -> Unit = {}, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, ) { @@ -75,10 +68,9 @@ fun LawniconsSearchBar( onClearAndBackClick = onClearAndBackClick, onQueryChange = onQueryChange, iconCount = iconInfoModel.iconCount, - iconInfo = iconInfoModel.iconInfo, onNavigate = onNavigate, + content = content, modifier = modifier, - onSendResult = onSendResult, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, ) @@ -91,10 +83,9 @@ fun LawniconsSearchBar( onClearAndBackClick: () -> Unit, onQueryChange: (String) -> Unit, iconCount: Int, - iconInfo: ImmutableList, onNavigate: (String) -> Unit, + content: @Composable (() -> Unit), modifier: Modifier = Modifier, - onSendResult: (IconInfo) -> Unit = {}, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, ) { @@ -102,6 +93,7 @@ fun LawniconsSearchBar( Box( modifier = modifier + .animateContentSize() .then( if (!active || isExpandedScreen) { Modifier @@ -152,7 +144,7 @@ fun LawniconsSearchBar( }, trailingIcon = { if (!isIconPicker) { - SearchMenu( + SearchActionButton( isQueryEmpty = isQueryEmpty, onNavigate = onNavigate, onClearAndBackClick = onClearAndBackClick, @@ -161,7 +153,7 @@ fun LawniconsSearchBar( }, isExpandedScreen = isExpandedScreen, ) { - SearchContents(iconInfo, onSendResult) + content() } } } @@ -186,37 +178,53 @@ private fun ResponsiveSearchBar( horizontalArrangement = Arrangement.Center, ) { DockedSearchBar( - query = query, - onQueryChange = onQueryChange, - onSearch = onSearch, - active = active, - onActiveChange = onActiveChange, - placeholder = placeholder, - leadingIcon = leadingIcon, - trailingIcon = trailingIcon, - ) { - content() - } + inputField = { + SearchBarDefaults.InputField( + query = query, + onQueryChange = onQueryChange, + onSearch = onSearch, + expanded = active, + onExpandedChange = onActiveChange, + placeholder = placeholder, + leadingIcon = leadingIcon, + trailingIcon = trailingIcon, + ) + }, + expanded = active, + onExpandedChange = onActiveChange, + content = { + content() + }, + ) } } else { SearchBar( - query = query, - onQueryChange = onQueryChange, - onSearch = onSearch, - active = active, - onActiveChange = onActiveChange, - placeholder = placeholder, - leadingIcon = leadingIcon, - trailingIcon = trailingIcon, + inputField = { + SearchBarDefaults.InputField( + query = query, + onQueryChange = onQueryChange, + onSearch = onSearch, + expanded = active, + onExpandedChange = onActiveChange, + placeholder = placeholder, + leadingIcon = leadingIcon, + trailingIcon = trailingIcon, + ) + }, + expanded = active, + onExpandedChange = onActiveChange, modifier = Modifier.fillMaxWidth(), - ) { - content() - } + content = { + content() + }, + ) } } + + @Composable -private fun SearchIcon( +internal fun SearchIcon( active: Boolean, onButtonClick: () -> Unit, ) { @@ -231,31 +239,22 @@ private fun SearchIcon( } @Composable -private fun SearchMenu( +internal fun SearchActionButton( isQueryEmpty: Boolean, onNavigate: (String) -> Unit, onClearAndBackClick: () -> Unit, ) { Crossfade(isQueryEmpty, label = "") { if (it) { - OverflowMenu { - DropdownMenuItem( - onClick = { - hideMenu() - onNavigate(Destinations.ACKNOWLEDGEMENTS) - }, - text = { - Text(text = stringResource(id = R.string.acknowledgements)) - }, - ) - DropdownMenuItem( - onClick = { - hideMenu() - onNavigate(Destinations.ABOUT) - }, - text = { - Text(text = stringResource(id = R.string.about)) - }, + IconButton( + onClick = { onNavigate(Destinations.ABOUT) } + ) { + Icon( + imageVector = ImageVector.vectorResource(id = R.drawable.lawnicons_foreground), + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .size(24.dp) ) } } else { @@ -267,82 +266,6 @@ private fun SearchMenu( } } -@Composable -private fun SearchContents( - iconInfo: ImmutableList, - onSendResult: (IconInfo) -> Unit = {}, -) { - when (iconInfo.size) { - 1 -> { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(PaddingValues(16.dp)), - verticalArrangement = Arrangement.spacedBy(4.dp), - ) { - val it = iconInfo[0] - val isIconInfoShown = remember { mutableStateOf(false) } - - ListItem( - headlineContent = { Text(it.name) }, - supportingContent = { Text(it.packageName) }, - leadingContent = { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .padding(all = 8.dp) - .clip(shape = CircleShape) - .size(48.dp), - ) { - Icon( - painter = painterResource(id = it.id), - contentDescription = null, - modifier = Modifier.fillMaxSize(0.6f), - ) - } - }, - modifier = Modifier - .clickable(onClick = { isIconInfoShown.value = true }), - ) - if (isIconInfoShown.value) { - IconInfoPopup( - iconInfo = it, - ) { - isIconInfoShown.value = it - } - } - } - } - 0 -> { - Box( - modifier = Modifier - .fillMaxWidth() - .padding(PaddingValues(16.dp)), - contentAlignment = Alignment.Center, - ) { - Text( - textAlign = TextAlign.Center, - text = stringResource(R.string.no_items_found), - ) - } - } - else -> { - LazyVerticalGrid( - columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = PaddingValues(16.dp), - ) { - items(items = iconInfo) { - IconPreview( - iconInfo = it, - iconBackground = Color.Transparent, - onSendResult = onSendResult, - ) - } - } - } - } -} - @PreviewLawnicons @Composable private fun SearchBarPreview() { @@ -358,9 +281,11 @@ private fun SearchBarPreview() { searchTerm = newValue }, iconCount = 2, - iconInfo = iconInfo, onNavigate = {}, isExpandedScreen = true, + content = { + SearchContents(iconInfo) + }, ) } } @@ -378,11 +303,11 @@ private fun SearchIconPreview() { @PreviewLawnicons @Composable -private fun SearchMenuPreview() { +private fun SearchActionButtonPreview() { LawniconsTheme { Column { - SearchMenu(isQueryEmpty = false, {}, {}) - SearchMenu(isQueryEmpty = true, {}, {}) + SearchActionButton(isQueryEmpty = false, {}, {}) + SearchActionButton(isQueryEmpty = true, {}, {}) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt new file mode 100644 index 00000000000..fe996601cd4 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -0,0 +1,110 @@ +package app.lawnchair.lawnicons.ui.components.home.search + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.ListItem +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup +import app.lawnchair.lawnicons.ui.components.home.IconPreview +import kotlinx.collections.immutable.ImmutableList + +@Composable +fun SearchContents( + iconInfo: ImmutableList, + onSendResult: (IconInfo) -> Unit = {}, +) { + when (iconInfo.size) { + 1 -> { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(PaddingValues(16.dp)), + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + val it = iconInfo[0] + val isIconInfoShown = remember { mutableStateOf(false) } + + ListItem( + headlineContent = { Text(it.name) }, + supportingContent = { Text(it.packageName) }, + leadingContent = { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(all = 8.dp) + .clip(shape = CircleShape) + .size(48.dp), + ) { + Icon( + painter = painterResource(id = it.id), + contentDescription = null, + modifier = Modifier.fillMaxSize(0.6f), + ) + } + }, + modifier = Modifier + .clickable(onClick = { isIconInfoShown.value = true }), + ) + if (isIconInfoShown.value) { + IconInfoPopup( + iconInfo = it, + ) { + isIconInfoShown.value = it + } + } + } + } + 0 -> { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(PaddingValues(16.dp)), + contentAlignment = Alignment.Center, + ) { + Text( + textAlign = TextAlign.Center, + text = stringResource(R.string.no_items_found), + ) + } + } + else -> { + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = 80.dp), + contentPadding = PaddingValues(16.dp), + ) { + items(items = iconInfo) { + IconPreview( + iconInfo = it, + iconBackground = Color.Transparent, + onSendResult = onSendResult, + ) + } + } + } + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index e55c0f734a9..202029faca3 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -187,6 +187,15 @@ fun About( } } } + item { + Card(modifier = Modifier.padding(top = 16.dp)) { + SimpleListRow( + onClick = { onNavigate(Destinations.ACKNOWLEDGEMENTS) }, + label = stringResource(id = R.string.acknowledgements), + divider = false, + ) + } + } } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 6e14b9288da..1f5f394d37e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -18,8 +18,9 @@ import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid -import app.lawnchair.lawnicons.ui.components.home.LawniconsSearchBar -import app.lawnchair.lawnicons.ui.components.home.PlaceholderSearchBar +import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar +import app.lawnchair.lawnicons.ui.components.home.search.PlaceholderSearchBar +import app.lawnchair.lawnicons.ui.components.home.search.SearchContents import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -68,7 +69,9 @@ fun Home( onNavigate = onNavigate, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, - onSendResult = onSendResult, + content = { + SearchContents(it.iconInfo, onSendResult) + } ) } } @@ -85,7 +88,9 @@ fun Home( } } } else { - PlaceholderSearchBar() + PlaceholderSearchBar( + isExpandedScreen = isExpandedScreen + ) } } } @@ -109,9 +114,11 @@ private fun HomePreview() { // No actual searching, this is just a preview }, iconCount = 3, - iconInfo = iconInfo, onNavigate = {}, isExpandedScreen = true, + content = { + SearchContents(iconInfo = iconInfo) + }, ) IconPreviewGrid( iconInfo = iconInfo, From 34f2dc9668a510434962eafa871583005512a1dc Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:16:06 +0800 Subject: [PATCH 030/527] Fix PlaceholderSearchBar width on large devices --- .../components/home/PlaceholderSearchBar.kt | 46 ------------- .../home/search/PlaceholderSearchBar.kt | 65 +++++++++++++++++++ 2 files changed, 65 insertions(+), 46 deletions(-) delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderSearchBar.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderSearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderSearchBar.kt deleted file mode 100644 index e34ed0aba0e..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderSearchBar.kt +++ /dev/null @@ -1,46 +0,0 @@ -package app.lawnchair.lawnicons.ui.components.home - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import androidx.compose.ui.zIndex -import app.lawnchair.lawnicons.ui.theme.LawniconsTheme -import app.lawnchair.lawnicons.ui.util.PreviewLawnicons - -@Composable -fun PlaceholderSearchBar( - modifier: Modifier = Modifier, -) { - Row( - content = {}, - verticalAlignment = Alignment.CenterVertically, - modifier = modifier - .zIndex(1f) - .statusBarsPadding() - .padding(top = 8.dp) - .padding(horizontal = 16.dp) - .fillMaxWidth() - .height(56.dp) - .background( - color = MaterialTheme.colorScheme.surfaceContainerHigh, - shape = RoundedCornerShape(100), - ), - ) -} - -@PreviewLawnicons -@Composable -private fun PlaceholderSearchBarPreview() { - LawniconsTheme { - PlaceholderSearchBar() - } -} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt new file mode 100644 index 00000000000..e1754940634 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt @@ -0,0 +1,65 @@ +package app.lawnchair.lawnicons.ui.components.home.search + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex +import app.lawnchair.lawnicons.ui.theme.LawniconsTheme +import app.lawnchair.lawnicons.ui.util.PreviewLawnicons + +@Composable +fun PlaceholderSearchBar( + isExpandedScreen: Boolean, + modifier: Modifier = Modifier, +) { + Column( + modifier = modifier.fillMaxWidth(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + Box( + content = {}, + contentAlignment = Alignment.TopCenter, + modifier = Modifier + .then( + if (isExpandedScreen) Modifier.width(360.dp) else Modifier + ) + .zIndex(1f) + .statusBarsPadding() + .padding(top = 8.dp) + .padding(horizontal = 16.dp) + .fillMaxWidth() + .height(56.dp) + .background( + color = MaterialTheme.colorScheme.surfaceContainerHigh, + shape = RoundedCornerShape(100), + ), + ) + } + } +} + +@PreviewLawnicons +@Composable +private fun PlaceholderSearchBarPreview() { + LawniconsTheme { + PlaceholderSearchBar(false) + } +} From 67a0d565a28b44edf3dc183fc27aaa64e288f34a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:19:09 +0800 Subject: [PATCH 031/527] Extract string resource --- .../app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt | 2 +- app/src/main/res/values/strings.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index b3d17f61aa5..f7b40b291d0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -107,7 +107,7 @@ fun IconInfoPopup( ) { SimpleListRow( label = githubName, - description = "If the icon is outdated due to rebranding, create an issue on GitHub.", + description = stringResource(R.string.icon_info_outdated_warning), divider = false, ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b760149d027..bbd2b3afc9c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -56,4 +56,5 @@ Package About + If the icon is outdated due to rebranding, create an issue on GitHub. From 35e88c9e58ec6ff3c0c6e574cb468914427ec58a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Apr 2024 13:48:55 +0800 Subject: [PATCH 032/527] Update icon request icon --- .../app/lawnchair/lawnicons/ui/destination/About.kt | 2 +- app/src/main/res/drawable/request_icons_icon.xml | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/request_icons_icon.xml diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 202029faca3..6df25f080d2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -46,7 +46,7 @@ private val externalLinks = listOf( url = "https://github.com/LawnchairLauncher/lawnicons", ), ExternalLink( - iconResId = R.drawable.oxygen_updater_foreground, + iconResId = R.drawable.request_icons_icon, name = R.string.request_form, url = "https://forms.gle/xt7sJhgWEasuo9TR9", ), diff --git a/app/src/main/res/drawable/request_icons_icon.xml b/app/src/main/res/drawable/request_icons_icon.xml new file mode 100644 index 00000000000..f794a7ee324 --- /dev/null +++ b/app/src/main/res/drawable/request_icons_icon.xml @@ -0,0 +1,13 @@ + + + From 0f66d86629fb47e54ae51818162e53bb07f3a5b2 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:05:54 +0800 Subject: [PATCH 033/527] Allow searching in icon names, package names, or drawables --- .../lawnchair/lawnicons/model/SearchInfo.kt | 6 + .../lawnicons/repository/IconRepository.kt | 16 +- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 1 - .../ui/components/home/search/SearchBar.kt | 8 +- .../components/home/search/SearchContents.kt | 191 +++++++++++++----- .../lawnicons/ui/destination/Home.kt | 21 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 12 +- app/src/main/res/values/strings.xml | 5 +- 8 files changed, 201 insertions(+), 59 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt index 650a78d2320..58c2a63ae1e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt @@ -5,3 +5,9 @@ data class SearchInfo( val indexOfMatch: Int, val matchAtWordStart: Boolean, ) + +enum class SearchMode { + NAME, + PACKAGE_NAME, + DRAWABLE +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 9c5bc6ed4f9..350f5cf7b1a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -4,6 +4,7 @@ import android.app.Application import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.SearchInfo +import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.util.getIconInfo import javax.inject.Inject import kotlinx.collections.immutable.toPersistentList @@ -38,14 +39,23 @@ class IconRepository @Inject constructor(application: Application) { } } - suspend fun search(query: String) = withContext(Dispatchers.Default) { + suspend fun search( + mode: SearchMode, + query: String + ) = withContext(Dispatchers.Default) { searchedIconInfoModel.value = iconInfo?.let { val filtered = it.mapNotNull { candidate -> + val searchIn = + when (mode) { + SearchMode.NAME -> candidate.name + SearchMode.PACKAGE_NAME -> candidate.packageName + SearchMode.DRAWABLE -> candidate.drawableName + } val indexOfMatch = - candidate.name.indexOf(string = query, ignoreCase = true).also { index -> + searchIn.indexOf(string = query, ignoreCase = true).also { index -> if (index == -1) return@mapNotNull null } - val matchAtWordStart = indexOfMatch == 0 || candidate.name[indexOfMatch - 1] == ' ' + val matchAtWordStart = indexOfMatch == 0 || searchIn[indexOfMatch - 1] == ' ' SearchInfo( iconInfo = candidate, indexOfMatch = indexOfMatch, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 729037ef911..40ab1dabd29 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -53,7 +53,6 @@ fun Lawnicons( exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, - sizeTransform = { SizeTransform() }, ) { composable(route = Destinations.HOME) { Home( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index c2a0555a196..3fda46f8cf8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -42,6 +42,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.ClickableIcon import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.Destinations @@ -284,7 +285,12 @@ private fun SearchBarPreview() { onNavigate = {}, isExpandedScreen = true, content = { - SearchContents(iconInfo) + SearchContents( + "", + SearchMode.NAME, + {}, + iconInfo + ) }, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index fe996601cd4..54c00bac224 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -1,10 +1,13 @@ package app.lawnchair.lawnicons.ui.components.home.search +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -13,6 +16,11 @@ import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Check +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.FilterChip import androidx.compose.material3.Icon import androidx.compose.material3.ListItem import androidx.compose.material3.Text @@ -29,57 +37,152 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup import app.lawnchair.lawnicons.ui.components.home.IconPreview import kotlinx.collections.immutable.ImmutableList +@OptIn(ExperimentalMaterial3Api::class) @Composable fun SearchContents( + searchTerm: String, + searchMode: SearchMode, + onModeChange: (SearchMode) -> Unit, iconInfo: ImmutableList, onSendResult: (IconInfo) -> Unit = {}, ) { - when (iconInfo.size) { - 1 -> { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(PaddingValues(16.dp)), - verticalArrangement = Arrangement.spacedBy(4.dp), - ) { - val it = iconInfo[0] - val isIconInfoShown = remember { mutableStateOf(false) } + Row ( + horizontalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.padding(start = 16.dp) + ) { + FilterChip( + leadingIcon = { + AnimatedVisibility(searchMode == SearchMode.NAME) { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + ) + } + }, + selected = searchMode == SearchMode.NAME, + onClick = { + onModeChange(SearchMode.NAME) + }, + label = { + Text(text = stringResource(R.string.name)) + }, + ) + FilterChip( + leadingIcon = { + AnimatedVisibility(searchMode == SearchMode.PACKAGE_NAME) { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + ) + } + }, + selected = searchMode == SearchMode.PACKAGE_NAME, + onClick = { + onModeChange(SearchMode.PACKAGE_NAME) + }, + label = { + Text(text = stringResource(id = R.string.package_prefix)) + }, + ) + FilterChip( + leadingIcon = { + AnimatedVisibility(searchMode == SearchMode.DRAWABLE) { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + ) + } + }, + selected = searchMode == SearchMode.DRAWABLE, + onClick = { + onModeChange(SearchMode.DRAWABLE) + }, + label = { + Text(text = stringResource(id = R.string.drawable)) + }, + ) + } + Crossfade( + targetState = searchTerm, + label = "on item searched" + ) { term -> + if (term != "") { + when (iconInfo.size) { + 1 -> { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(PaddingValues(16.dp)), + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + val it = iconInfo[0] + val isIconInfoShown = remember { mutableStateOf(false) } - ListItem( - headlineContent = { Text(it.name) }, - supportingContent = { Text(it.packageName) }, - leadingContent = { - Box( - contentAlignment = Alignment.Center, + ListItem( + headlineContent = { Text(it.name) }, + supportingContent = { Text(it.packageName) }, + leadingContent = { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(all = 8.dp) + .clip(shape = CircleShape) + .size(48.dp), + ) { + Icon( + painter = painterResource(id = it.id), + contentDescription = null, + modifier = Modifier.fillMaxSize(0.6f), + ) + } + }, modifier = Modifier - .padding(all = 8.dp) - .clip(shape = CircleShape) - .size(48.dp), - ) { - Icon( - painter = painterResource(id = it.id), - contentDescription = null, - modifier = Modifier.fillMaxSize(0.6f), - ) + .clip(RoundedCornerShape(16.dp)) + .clickable(onClick = { isIconInfoShown.value = true }), + ) + if (isIconInfoShown.value) { + IconInfoPopup( + iconInfo = it, + ) { + isIconInfoShown.value = it + } } - }, - modifier = Modifier - .clickable(onClick = { isIconInfoShown.value = true }), - ) - if (isIconInfoShown.value) { - IconInfoPopup( - iconInfo = it, + } + } + 0 -> { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(PaddingValues(16.dp)), + contentAlignment = Alignment.Center, ) { - isIconInfoShown.value = it + Text( + textAlign = TextAlign.Center, + text = stringResource(R.string.no_items_found), + ) + } + } + else -> { + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = 80.dp), + contentPadding = PaddingValues(16.dp), + ) { + items(items = iconInfo) { + IconPreview( + iconInfo = it, + iconBackground = Color.Transparent, + onSendResult = onSendResult, + ) + } } } } - } - 0 -> { + } else { Box( modifier = Modifier .fillMaxWidth() @@ -88,23 +191,11 @@ fun SearchContents( ) { Text( textAlign = TextAlign.Center, - text = stringResource(R.string.no_items_found), + text = "", ) } } - else -> { - LazyVerticalGrid( - columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = PaddingValues(16.dp), - ) { - items(items = iconInfo) { - IconPreview( - iconInfo = it, - iconBackground = Color.Transparent, - onSendResult = onSendResult, - ) - } - } - } } + + } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 1f5f394d37e..c3e250c3a5b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar import app.lawnchair.lawnicons.ui.components.home.search.PlaceholderSearchBar @@ -38,6 +39,7 @@ fun Home( ) { val iconInfoModel by lawniconsViewModel.iconInfoModel.collectAsState() val searchedIconInfoModel by lawniconsViewModel.searchedIconInfoModel.collectAsState() + val searchMode = lawniconsViewModel.searchMode var searchTerm by rememberSaveable { mutableStateOf(value = "") } Crossfade( @@ -70,7 +72,17 @@ fun Home( isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, content = { - SearchContents(it.iconInfo, onSendResult) + SearchContents( + searchTerm = searchTerm, + searchMode = searchMode, + onModeChange = { + lawniconsViewModel.changeMode(it) + // Refresh search results + lawniconsViewModel.searchIcons(searchTerm) + }, + iconInfo = it.iconInfo, + onSendResult = onSendResult + ) } ) } @@ -117,7 +129,12 @@ private fun HomePreview() { onNavigate = {}, isExpandedScreen = true, content = { - SearchContents(iconInfo = iconInfo) + SearchContents( + "", + SearchMode.NAME, + {}, + iconInfo = iconInfo, + ) }, ) IconPreviewGrid( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index c7bca50b315..cd59972859a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -1,7 +1,11 @@ package app.lawnchair.lawnicons.viewmodel +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.repository.IconRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -13,10 +17,16 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep val iconInfoModel = iconRepository.iconInfoModel val searchedIconInfoModel = iconRepository.searchedIconInfoModel + var searchMode by mutableStateOf(SearchMode.NAME) + private set fun searchIcons(query: String) { viewModelScope.launch { - iconRepository.search(query) + iconRepository.search(searchMode, query) } } + + fun changeMode(mode: SearchMode) { + this.searchMode = mode + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bbd2b3afc9c..f6f817706c8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,10 +51,13 @@ + + Name Drawable - Package + Package name + About If the icon is outdated due to rebranding, create an issue on GitHub. From 6f2285d8021d89da40c559170ca78c1362616a37 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:28:45 +0800 Subject: [PATCH 034/527] Cleanup UI and code --- .../lawnchair/lawnicons/model/SearchInfo.kt | 2 +- .../lawnicons/repository/IconRepository.kt | 2 +- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 1 - .../home/search/PlaceholderSearchBar.kt | 2 +- .../ui/components/home/search/SearchBar.kt | 8 +- .../components/home/search/SearchContents.kt | 172 +++++++++--------- .../lawnicons/ui/destination/Home.kt | 6 +- app/src/main/res/values/strings.xml | 2 +- 8 files changed, 94 insertions(+), 101 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt index 58c2a63ae1e..1af94265539 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt @@ -9,5 +9,5 @@ data class SearchInfo( enum class SearchMode { NAME, PACKAGE_NAME, - DRAWABLE + DRAWABLE, } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 350f5cf7b1a..d37bb6a72d9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -41,7 +41,7 @@ class IconRepository @Inject constructor(application: Application) { suspend fun search( mode: SearchMode, - query: String + query: String, ) = withContext(Dispatchers.Default) { searchedIconInfoModel.value = iconInfo?.let { val filtered = it.mapNotNull { candidate -> diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 40ab1dabd29..9d310280776 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -1,6 +1,5 @@ package app.lawnchair.lawnicons.ui -import androidx.compose.animation.SizeTransform import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt index e1754940634..dd2bcfbaf77 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt @@ -39,7 +39,7 @@ fun PlaceholderSearchBar( contentAlignment = Alignment.TopCenter, modifier = Modifier .then( - if (isExpandedScreen) Modifier.width(360.dp) else Modifier + if (isExpandedScreen) Modifier.width(360.dp) else Modifier, ) .zIndex(1f) .statusBarsPadding() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 3fda46f8cf8..d86300e7179 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -222,8 +222,6 @@ private fun ResponsiveSearchBar( } } - - @Composable internal fun SearchIcon( active: Boolean, @@ -248,14 +246,14 @@ internal fun SearchActionButton( Crossfade(isQueryEmpty, label = "") { if (it) { IconButton( - onClick = { onNavigate(Destinations.ABOUT) } + onClick = { onNavigate(Destinations.ABOUT) }, ) { Icon( imageVector = ImageVector.vectorResource(id = R.drawable.lawnicons_foreground), contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier - .size(24.dp) + .size(24.dp), ) } } else { @@ -289,7 +287,7 @@ private fun SearchBarPreview() { "", SearchMode.NAME, {}, - iconInfo + iconInfo, ) }, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 54c00bac224..6c25eb0254d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -2,6 +2,7 @@ package app.lawnchair.lawnicons.ui.components.home.search import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade +import androidx.compose.animation.core.tween import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -19,7 +20,6 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Check -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChip import androidx.compose.material3.Icon import androidx.compose.material3.ListItem @@ -42,77 +42,79 @@ import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup import app.lawnchair.lawnicons.ui.components.home.IconPreview import kotlinx.collections.immutable.ImmutableList -@OptIn(ExperimentalMaterial3Api::class) @Composable fun SearchContents( searchTerm: String, searchMode: SearchMode, onModeChange: (SearchMode) -> Unit, iconInfo: ImmutableList, + modifier: Modifier = Modifier, onSendResult: (IconInfo) -> Unit = {}, ) { - Row ( - horizontalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier.padding(start = 16.dp) + Column( + modifier = modifier, ) { - FilterChip( - leadingIcon = { - AnimatedVisibility(searchMode == SearchMode.NAME) { - Icon( - imageVector = Icons.Rounded.Check, - contentDescription = null, - ) - } - }, - selected = searchMode == SearchMode.NAME, - onClick = { - onModeChange(SearchMode.NAME) - }, - label = { - Text(text = stringResource(R.string.name)) - }, - ) - FilterChip( - leadingIcon = { - AnimatedVisibility(searchMode == SearchMode.PACKAGE_NAME) { - Icon( - imageVector = Icons.Rounded.Check, - contentDescription = null, - ) - } - }, - selected = searchMode == SearchMode.PACKAGE_NAME, - onClick = { - onModeChange(SearchMode.PACKAGE_NAME) - }, - label = { - Text(text = stringResource(id = R.string.package_prefix)) - }, - ) - FilterChip( - leadingIcon = { - AnimatedVisibility(searchMode == SearchMode.DRAWABLE) { - Icon( - imageVector = Icons.Rounded.Check, - contentDescription = null, - ) - } - }, - selected = searchMode == SearchMode.DRAWABLE, - onClick = { - onModeChange(SearchMode.DRAWABLE) - }, - label = { - Text(text = stringResource(id = R.string.drawable)) - }, - ) - } - Crossfade( - targetState = searchTerm, - label = "on item searched" - ) { term -> - if (term != "") { - when (iconInfo.size) { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.padding(start = 16.dp), + ) { + FilterChip( + leadingIcon = { + AnimatedVisibility(searchMode == SearchMode.NAME) { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + ) + } + }, + selected = searchMode == SearchMode.NAME, + onClick = { + onModeChange(SearchMode.NAME) + }, + label = { + Text(text = stringResource(R.string.name)) + }, + ) + FilterChip( + leadingIcon = { + AnimatedVisibility(searchMode == SearchMode.PACKAGE_NAME) { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + ) + } + }, + selected = searchMode == SearchMode.PACKAGE_NAME, + onClick = { + onModeChange(SearchMode.PACKAGE_NAME) + }, + label = { + Text(text = stringResource(id = R.string.package_prefix)) + }, + ) + FilterChip( + leadingIcon = { + AnimatedVisibility(searchMode == SearchMode.DRAWABLE) { + Icon( + imageVector = Icons.Rounded.Check, + contentDescription = null, + ) + } + }, + selected = searchMode == SearchMode.DRAWABLE, + onClick = { + onModeChange(SearchMode.DRAWABLE) + }, + label = { + Text(text = stringResource(id = R.string.drawable)) + }, + ) + } + Crossfade( + targetState = iconInfo.size, + label = "On item count modified", + ) { count -> + when (count) { 1 -> { Column( modifier = Modifier @@ -154,6 +156,7 @@ fun SearchContents( } } } + 0 -> { Box( modifier = Modifier @@ -163,39 +166,32 @@ fun SearchContents( ) { Text( textAlign = TextAlign.Center, - text = stringResource(R.string.no_items_found), + text = stringResource(R.string.no_items_found, searchTerm), ) } } + else -> { - LazyVerticalGrid( - columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = PaddingValues(16.dp), - ) { - items(items = iconInfo) { - IconPreview( - iconInfo = it, - iconBackground = Color.Transparent, - onSendResult = onSendResult, - ) + Crossfade( + targetState = iconInfo, + label = "Item changed", + animationSpec = tween(50), + ) { iconInfo -> + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = 80.dp), + contentPadding = PaddingValues(16.dp), + ) { + items(items = iconInfo) { + IconPreview( + iconInfo = it, + iconBackground = Color.Transparent, + onSendResult = onSendResult, + ) + } } } } } - } else { - Box( - modifier = Modifier - .fillMaxWidth() - .padding(PaddingValues(16.dp)), - contentAlignment = Alignment.Center, - ) { - Text( - textAlign = TextAlign.Center, - text = "", - ) - } } } - - } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index c3e250c3a5b..fbcfa967264 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -81,9 +81,9 @@ fun Home( lawniconsViewModel.searchIcons(searchTerm) }, iconInfo = it.iconInfo, - onSendResult = onSendResult + onSendResult = onSendResult, ) - } + }, ) } } @@ -101,7 +101,7 @@ fun Home( } } else { PlaceholderSearchBar( - isExpandedScreen = isExpandedScreen + isExpandedScreen = isExpandedScreen, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f6f817706c8..10c110a61df 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,7 +15,7 @@ Pick an icon - No icons found + %s not found From 492ca431f27ed95ad588e3c9aa977b3ee46fdb14 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:11:06 +0300 Subject: [PATCH 035/527] +2 links (#2040) --- app/assets/appfilter.xml | 334 +++++++++--------- ...e_policy.svg => android_device_policy.svg} | 0 ...t.svg => auto_clicker_click_assistant.svg} | 0 svgs/{bb.svg => banco_do_brasil.svg} | 0 ...s_instrumental_beats.svg => beatstars.svg} | 0 ...eminder.svg => bill_payment_organizer.svg} | 0 ...ck.svg => building_mods_for_minecraft.svg} | 0 ...raconnect.svg => canon_camera_connect.svg} | 0 svgs/{carx.svg => carx_street.svg} | 0 svgs/{central_bank_of_india.svg => cent.svg} | 0 svgs/{cmb.svg => china_merchants_bank.svg} | 0 svgs/{cleanemail.svg => clean_email.svg} | 0 svgs/{coins_ph.svg => coins.svg} | 0 ...paper.svg => dark_mode_live_wallpaper.svg} | 0 svgs/{dazhongdianping.svg => dianping.svg} | 0 svgs/{dkb_pushtan.svg => dkb_tan2go.svg} | 0 .../{doc_scanner.svg => document_scanner.svg} | 0 ...it_electrique.svg => electric_circuit.svg} | 0 svgs/{bnc.svg => national_bank_of_canada.svg} | 0 ...svg => scientific_calculator_plus_991.svg} | 0 svgs/{boom_and_megaboom.svg => ue_boom.svg} | 0 svgs/{coin.svg => zerodha_coin.svg} | 0 22 files changed, 168 insertions(+), 166 deletions(-) rename svgs/{device_policy.svg => android_device_policy.svg} (100%) rename svgs/{clickassistant.svg => auto_clicker_click_assistant.svg} (100%) rename svgs/{bb.svg => banco_do_brasil.svg} (100%) rename svgs/{beatstars_instrumental_beats.svg => beatstars.svg} (100%) rename svgs/{bills_reminder.svg => bill_payment_organizer.svg} (100%) rename svgs/{buildings_for_minecraft_bedrock.svg => building_mods_for_minecraft.svg} (100%) rename svgs/{cameraconnect.svg => canon_camera_connect.svg} (100%) rename svgs/{carx.svg => carx_street.svg} (100%) rename svgs/{central_bank_of_india.svg => cent.svg} (100%) rename svgs/{cmb.svg => china_merchants_bank.svg} (100%) rename svgs/{cleanemail.svg => clean_email.svg} (100%) rename svgs/{coins_ph.svg => coins.svg} (100%) rename svgs/{darkmodelivewallpaper.svg => dark_mode_live_wallpaper.svg} (100%) rename svgs/{dazhongdianping.svg => dianping.svg} (100%) rename svgs/{dkb_pushtan.svg => dkb_tan2go.svg} (100%) rename svgs/{doc_scanner.svg => document_scanner.svg} (100%) rename svgs/{circuit_electrique.svg => electric_circuit.svg} (100%) rename svgs/{bnc.svg => national_bank_of_canada.svg} (100%) rename svgs/{calces.svg => scientific_calculator_plus_991.svg} (100%) rename svgs/{boom_and_megaboom.svg => ue_boom.svg} (100%) rename svgs/{coin.svg => zerodha_coin.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index db701ff7ac5..cdead9a3980 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -366,6 +366,7 @@ + @@ -376,6 +377,8 @@ + + @@ -586,6 +589,7 @@ + @@ -636,6 +640,8 @@ + + @@ -720,6 +726,8 @@ + + @@ -746,8 +754,8 @@ - - + + @@ -781,8 +789,6 @@ - - @@ -817,13 +823,13 @@ - + - + @@ -851,8 +857,8 @@ - + @@ -865,12 +871,6 @@ - - - - - - @@ -886,13 +886,13 @@ - + - - - - - + + + + + @@ -962,7 +962,7 @@ - + @@ -995,8 +995,6 @@ - - @@ -1006,7 +1004,7 @@ - + @@ -1014,8 +1012,6 @@ - - @@ -1043,22 +1039,21 @@ - - - - - - - - - + + + + + + + + + - - + @@ -1121,8 +1116,8 @@ - - + + @@ -1144,7 +1139,7 @@ - + @@ -1153,75 +1148,75 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1253,9 +1248,7 @@ - - - + @@ -1294,19 +1287,16 @@ - - - - + + + - - - + @@ -1510,8 +1500,6 @@ - - @@ -1534,6 +1522,8 @@ + + @@ -1563,8 +1553,8 @@ - - + + @@ -1602,9 +1592,9 @@ - - - + + + @@ -1635,10 +1625,6 @@ - - - - @@ -1664,7 +1650,6 @@ - @@ -1675,7 +1660,6 @@ - @@ -1706,7 +1690,7 @@ - + @@ -1714,8 +1698,6 @@ - - @@ -1767,7 +1749,6 @@ - @@ -1817,7 +1798,7 @@ - + @@ -1842,7 +1823,6 @@ - @@ -1852,9 +1832,9 @@ - - - + + + @@ -1915,9 +1895,7 @@ - - @@ -2042,7 +2020,6 @@ - @@ -2072,7 +2049,6 @@ - @@ -2084,7 +2060,7 @@ - + @@ -2101,7 +2077,6 @@ - @@ -2136,7 +2111,7 @@ - + @@ -2162,7 +2137,6 @@ - @@ -2203,12 +2177,12 @@ - - - - + + + + @@ -2231,9 +2205,9 @@ - - - + + + @@ -2247,8 +2221,6 @@ - - @@ -2358,13 +2330,13 @@ - + - - + + @@ -2446,9 +2418,9 @@ - - - + + + @@ -2516,10 +2488,8 @@ - - @@ -2536,7 +2506,7 @@ - + @@ -2648,6 +2618,7 @@ + @@ -4825,6 +4796,7 @@ + @@ -5786,6 +5758,8 @@ + + @@ -6261,6 +6235,7 @@ + @@ -7662,6 +7637,8 @@ + + @@ -7798,6 +7775,9 @@ + + + @@ -9660,6 +9640,8 @@ + + @@ -10040,6 +10022,7 @@ + @@ -10525,6 +10508,11 @@ + + + + + @@ -10579,12 +10567,15 @@ + + + @@ -10642,6 +10633,7 @@ + @@ -10760,11 +10752,14 @@ + + + @@ -10779,6 +10774,7 @@ + @@ -10792,6 +10788,12 @@ + + + + + + diff --git a/svgs/device_policy.svg b/svgs/android_device_policy.svg similarity index 100% rename from svgs/device_policy.svg rename to svgs/android_device_policy.svg diff --git a/svgs/clickassistant.svg b/svgs/auto_clicker_click_assistant.svg similarity index 100% rename from svgs/clickassistant.svg rename to svgs/auto_clicker_click_assistant.svg diff --git a/svgs/bb.svg b/svgs/banco_do_brasil.svg similarity index 100% rename from svgs/bb.svg rename to svgs/banco_do_brasil.svg diff --git a/svgs/beatstars_instrumental_beats.svg b/svgs/beatstars.svg similarity index 100% rename from svgs/beatstars_instrumental_beats.svg rename to svgs/beatstars.svg diff --git a/svgs/bills_reminder.svg b/svgs/bill_payment_organizer.svg similarity index 100% rename from svgs/bills_reminder.svg rename to svgs/bill_payment_organizer.svg diff --git a/svgs/buildings_for_minecraft_bedrock.svg b/svgs/building_mods_for_minecraft.svg similarity index 100% rename from svgs/buildings_for_minecraft_bedrock.svg rename to svgs/building_mods_for_minecraft.svg diff --git a/svgs/cameraconnect.svg b/svgs/canon_camera_connect.svg similarity index 100% rename from svgs/cameraconnect.svg rename to svgs/canon_camera_connect.svg diff --git a/svgs/carx.svg b/svgs/carx_street.svg similarity index 100% rename from svgs/carx.svg rename to svgs/carx_street.svg diff --git a/svgs/central_bank_of_india.svg b/svgs/cent.svg similarity index 100% rename from svgs/central_bank_of_india.svg rename to svgs/cent.svg diff --git a/svgs/cmb.svg b/svgs/china_merchants_bank.svg similarity index 100% rename from svgs/cmb.svg rename to svgs/china_merchants_bank.svg diff --git a/svgs/cleanemail.svg b/svgs/clean_email.svg similarity index 100% rename from svgs/cleanemail.svg rename to svgs/clean_email.svg diff --git a/svgs/coins_ph.svg b/svgs/coins.svg similarity index 100% rename from svgs/coins_ph.svg rename to svgs/coins.svg diff --git a/svgs/darkmodelivewallpaper.svg b/svgs/dark_mode_live_wallpaper.svg similarity index 100% rename from svgs/darkmodelivewallpaper.svg rename to svgs/dark_mode_live_wallpaper.svg diff --git a/svgs/dazhongdianping.svg b/svgs/dianping.svg similarity index 100% rename from svgs/dazhongdianping.svg rename to svgs/dianping.svg diff --git a/svgs/dkb_pushtan.svg b/svgs/dkb_tan2go.svg similarity index 100% rename from svgs/dkb_pushtan.svg rename to svgs/dkb_tan2go.svg diff --git a/svgs/doc_scanner.svg b/svgs/document_scanner.svg similarity index 100% rename from svgs/doc_scanner.svg rename to svgs/document_scanner.svg diff --git a/svgs/circuit_electrique.svg b/svgs/electric_circuit.svg similarity index 100% rename from svgs/circuit_electrique.svg rename to svgs/electric_circuit.svg diff --git a/svgs/bnc.svg b/svgs/national_bank_of_canada.svg similarity index 100% rename from svgs/bnc.svg rename to svgs/national_bank_of_canada.svg diff --git a/svgs/calces.svg b/svgs/scientific_calculator_plus_991.svg similarity index 100% rename from svgs/calces.svg rename to svgs/scientific_calculator_plus_991.svg diff --git a/svgs/boom_and_megaboom.svg b/svgs/ue_boom.svg similarity index 100% rename from svgs/boom_and_megaboom.svg rename to svgs/ue_boom.svg diff --git a/svgs/coin.svg b/svgs/zerodha_coin.svg similarity index 100% rename from svgs/coin.svg rename to svgs/zerodha_coin.svg From d7804a69d840ec5c0da9d536d534cd077d8f5c82 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sun, 28 Apr 2024 23:13:41 +1000 Subject: [PATCH 036/527] + 5 icons, + 2 links (#2042) * + 3 icons, + 2 links * + 2 icons * Small update * Changes per review --- app/assets/appfilter.xml | 10 +++++++ svgs/kookong_smart_remote_control.svg | 31 ++++++++++++++++++++ svgs/nav_garmin_connect_iq.svg | 15 ++++++++++ svgs/price_history.svg | 41 +++++++++++++++++++++++++++ svgs/quacker.svg | 30 ++++++++++++++++++++ svgs/wemoney.svg | 15 ++++++++++ 6 files changed, 142 insertions(+) create mode 100644 svgs/kookong_smart_remote_control.svg create mode 100644 svgs/nav_garmin_connect_iq.svg create mode 100644 svgs/price_history.svg create mode 100644 svgs/quacker.svg create mode 100644 svgs/wemoney.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index cdead9a3980..543334455c2 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1297,6 +1297,7 @@ + @@ -5766,6 +5767,7 @@ + @@ -6055,6 +6057,7 @@ + @@ -7057,6 +7060,7 @@ + @@ -7218,6 +7222,8 @@ + + @@ -10081,6 +10087,9 @@ + + + @@ -10828,6 +10837,7 @@ + diff --git a/svgs/kookong_smart_remote_control.svg b/svgs/kookong_smart_remote_control.svg new file mode 100644 index 00000000000..e60998f6307 --- /dev/null +++ b/svgs/kookong_smart_remote_control.svg @@ -0,0 +1,31 @@ + + diff --git a/svgs/nav_garmin_connect_iq.svg b/svgs/nav_garmin_connect_iq.svg new file mode 100644 index 00000000000..57d02d2bf49 --- /dev/null +++ b/svgs/nav_garmin_connect_iq.svg @@ -0,0 +1,15 @@ + + diff --git a/svgs/price_history.svg b/svgs/price_history.svg new file mode 100644 index 00000000000..2e6ab6e2911 --- /dev/null +++ b/svgs/price_history.svg @@ -0,0 +1,41 @@ + + diff --git a/svgs/quacker.svg b/svgs/quacker.svg new file mode 100644 index 00000000000..d88a9d6bd07 --- /dev/null +++ b/svgs/quacker.svg @@ -0,0 +1,30 @@ + + + + + + diff --git a/svgs/wemoney.svg b/svgs/wemoney.svg new file mode 100644 index 00000000000..014055e0494 --- /dev/null +++ b/svgs/wemoney.svg @@ -0,0 +1,15 @@ + + From b7b3d6e66e7c95040cc02b6a5dfb89f5d2ec0283 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 29 Apr 2024 00:10:01 +0300 Subject: [PATCH 037/527] Updating names (#2043) --- app/assets/appfilter.xml | 136 +++++++++--------- svgs/{eddie_airvpn_gui.svg => airvpn.svg} | 0 ...idget_pack.svg => android_widget_pack.svg} | 0 ...data_transfer.svg => asus_phone_clone.svg} | 0 svgs/{blackboard.svg => blackboard_learn.svg} | 0 svgs/{boursorama.svg => boursobank.svg} | 0 svgs/{eljurstudent.svg => eljur_student.svg} | 0 svgs/{exiferaser.svg => exif_eraser.svg} | 0 svgs/{ft.svg => financial_times.svg} | 0 svgs/{connect.svg => garmin_connect.svg} | 0 ...g => greenlight_kids_and_teen_banking.svg} | 0 ...fo_tb.svg => info_transport_bucuresti.svg} | 0 ...edit_karma.svg => intuit_credit_karma.svg} | 0 ...y_portal.svg => intune_company_portal.svg} | 0 ...ic_geeks.svg => league_of_comic_geeks.svg} | 0 svgs/lumi_ai.svg | 1 + svgs/{campfire.svg => niantic_campfire.svg} | 0 svgs/{unrollme.svg => unroll_me.svg} | 0 svgs/vic.svg | 1 - svgs/{xhs.svg => xiaohongshu.svg} | 0 20 files changed, 69 insertions(+), 69 deletions(-) rename svgs/{eddie_airvpn_gui.svg => airvpn.svg} (100%) rename svgs/{android_12_widget_pack.svg => android_widget_pack.svg} (100%) rename svgs/{data_transfer.svg => asus_phone_clone.svg} (100%) rename svgs/{blackboard.svg => blackboard_learn.svg} (100%) rename svgs/{boursorama.svg => boursobank.svg} (100%) rename svgs/{eljurstudent.svg => eljur_student.svg} (100%) rename svgs/{exiferaser.svg => exif_eraser.svg} (100%) rename svgs/{ft.svg => financial_times.svg} (100%) rename svgs/{connect.svg => garmin_connect.svg} (100%) rename svgs/{greenlight_banking.svg => greenlight_kids_and_teen_banking.svg} (100%) rename svgs/{info_tb.svg => info_transport_bucuresti.svg} (100%) rename svgs/{credit_karma.svg => intuit_credit_karma.svg} (100%) rename svgs/{company_portal.svg => intune_company_portal.svg} (100%) rename svgs/{comic_geeks.svg => league_of_comic_geeks.svg} (100%) create mode 100644 svgs/lumi_ai.svg rename svgs/{campfire.svg => niantic_campfire.svg} (100%) rename svgs/{unrollme.svg => unroll_me.svg} (100%) delete mode 100644 svgs/vic.svg rename svgs/{xhs.svg => xiaohongshu.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 543334455c2..afa6e363049 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -372,7 +372,7 @@ - + @@ -954,8 +954,8 @@ - - + + @@ -1069,9 +1069,9 @@ - - - + + + @@ -1128,7 +1128,7 @@ - + @@ -1136,7 +1136,7 @@ - + @@ -1394,7 +1394,7 @@ - + @@ -1437,11 +1437,11 @@ - - - - - + + + + + @@ -1506,7 +1506,7 @@ - + @@ -1800,11 +1800,11 @@ - - - - - + + + + + @@ -1856,13 +1856,13 @@ - + - + @@ -1880,7 +1880,7 @@ - + @@ -2049,10 +2049,10 @@ - + - - + + @@ -2124,7 +2124,7 @@ - + @@ -2202,7 +2202,7 @@ - + @@ -2344,7 +2344,7 @@ - + @@ -2383,15 +2383,15 @@ - - + + - + @@ -2427,8 +2427,8 @@ - - + + @@ -2516,7 +2516,7 @@ - + @@ -2550,9 +2550,9 @@ - - - + + + @@ -2591,13 +2591,13 @@ - - + + - + @@ -2633,7 +2633,7 @@ - + @@ -2652,7 +2652,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -2793,7 +2793,7 @@ - + @@ -3075,8 +3075,8 @@ - - + + @@ -3189,7 +3189,7 @@ - + @@ -3201,9 +3201,9 @@ - - - + + + @@ -3666,8 +3666,8 @@ - - + + @@ -3719,8 +3719,8 @@ - - + + @@ -3887,9 +3887,9 @@ - - - + + + @@ -4015,7 +4015,7 @@ - + @@ -9631,7 +9631,7 @@ - + @@ -9671,9 +9671,9 @@ - - - + + + @@ -9699,7 +9699,7 @@ - + @@ -9827,7 +9827,7 @@ - + @@ -10389,7 +10389,7 @@ - + @@ -10543,7 +10543,7 @@ - + @@ -10588,7 +10588,7 @@ - + diff --git a/svgs/eddie_airvpn_gui.svg b/svgs/airvpn.svg similarity index 100% rename from svgs/eddie_airvpn_gui.svg rename to svgs/airvpn.svg diff --git a/svgs/android_12_widget_pack.svg b/svgs/android_widget_pack.svg similarity index 100% rename from svgs/android_12_widget_pack.svg rename to svgs/android_widget_pack.svg diff --git a/svgs/data_transfer.svg b/svgs/asus_phone_clone.svg similarity index 100% rename from svgs/data_transfer.svg rename to svgs/asus_phone_clone.svg diff --git a/svgs/blackboard.svg b/svgs/blackboard_learn.svg similarity index 100% rename from svgs/blackboard.svg rename to svgs/blackboard_learn.svg diff --git a/svgs/boursorama.svg b/svgs/boursobank.svg similarity index 100% rename from svgs/boursorama.svg rename to svgs/boursobank.svg diff --git a/svgs/eljurstudent.svg b/svgs/eljur_student.svg similarity index 100% rename from svgs/eljurstudent.svg rename to svgs/eljur_student.svg diff --git a/svgs/exiferaser.svg b/svgs/exif_eraser.svg similarity index 100% rename from svgs/exiferaser.svg rename to svgs/exif_eraser.svg diff --git a/svgs/ft.svg b/svgs/financial_times.svg similarity index 100% rename from svgs/ft.svg rename to svgs/financial_times.svg diff --git a/svgs/connect.svg b/svgs/garmin_connect.svg similarity index 100% rename from svgs/connect.svg rename to svgs/garmin_connect.svg diff --git a/svgs/greenlight_banking.svg b/svgs/greenlight_kids_and_teen_banking.svg similarity index 100% rename from svgs/greenlight_banking.svg rename to svgs/greenlight_kids_and_teen_banking.svg diff --git a/svgs/info_tb.svg b/svgs/info_transport_bucuresti.svg similarity index 100% rename from svgs/info_tb.svg rename to svgs/info_transport_bucuresti.svg diff --git a/svgs/credit_karma.svg b/svgs/intuit_credit_karma.svg similarity index 100% rename from svgs/credit_karma.svg rename to svgs/intuit_credit_karma.svg diff --git a/svgs/company_portal.svg b/svgs/intune_company_portal.svg similarity index 100% rename from svgs/company_portal.svg rename to svgs/intune_company_portal.svg diff --git a/svgs/comic_geeks.svg b/svgs/league_of_comic_geeks.svg similarity index 100% rename from svgs/comic_geeks.svg rename to svgs/league_of_comic_geeks.svg diff --git a/svgs/lumi_ai.svg b/svgs/lumi_ai.svg new file mode 100644 index 00000000000..723e3376ef2 --- /dev/null +++ b/svgs/lumi_ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/campfire.svg b/svgs/niantic_campfire.svg similarity index 100% rename from svgs/campfire.svg rename to svgs/niantic_campfire.svg diff --git a/svgs/unrollme.svg b/svgs/unroll_me.svg similarity index 100% rename from svgs/unrollme.svg rename to svgs/unroll_me.svg diff --git a/svgs/vic.svg b/svgs/vic.svg deleted file mode 100644 index c1c5dd28cbe..00000000000 --- a/svgs/vic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/xhs.svg b/svgs/xiaohongshu.svg similarity index 100% rename from svgs/xhs.svg rename to svgs/xiaohongshu.svg From b6544b05bc3b8548b560654a836184496f75afd2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:40:31 +0800 Subject: [PATCH 038/527] Update dependency io.nlopez.compose.rules:ktlint to v0.3.19 (#2046) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c48841042dd..0fcf4241028 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,7 +29,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.18", + "io.nlopez.compose.rules:ktlint:0.3.19", ), ).editorConfigOverride( mapOf( From 56dfd11b0abd5aae8b961dde9ab677bd4d595850 Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Mon, 29 Apr 2024 16:06:07 +0300 Subject: [PATCH 039/527] Add almanea, circlys, clicflyer, hungerstation, mada_pay (#2047) * add 5 icons hungerstation (`com.hungerstation.android.web/com.hungerstation.android.web.hungeractivities.MainActivity`) almanea (`com.almanea.android/com.almanea.android.MainActivity`) circlys (`com.jmeyte.app/com.example.circlys_v2.MainActivity`) clicflyer (`main.ClicFlyer/main.ClicFlyer.Login.Splash`) mada_pay (`com.mada.madapay/com.emcrey.app.activities.SupportActivity`) * Update ciclys.svg * Updating names * Rename ciclys.svg to circlys.svg * Update Circlys drawable name --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 89 +- svgs/almanea.svg | 2207 +++++++++++++++++++++++++++++++++++++ svgs/circlys.svg | 1 + svgs/clicflyer.svg | 2213 ++++++++++++++++++++++++++++++++++++++ svgs/hungerstation.svg | 2208 +++++++++++++++++++++++++++++++++++++ svgs/mada_pay.svg | 2207 +++++++++++++++++++++++++++++++++++++ 6 files changed, 8883 insertions(+), 42 deletions(-) create mode 100644 svgs/almanea.svg create mode 100644 svgs/circlys.svg create mode 100644 svgs/clicflyer.svg create mode 100644 svgs/hungerstation.svg create mode 100644 svgs/mada_pay.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index afa6e363049..6cc25d6c489 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -247,6 +247,7 @@ + @@ -316,6 +317,7 @@ + @@ -372,7 +374,6 @@ - @@ -387,6 +388,7 @@ + @@ -592,6 +594,7 @@ + @@ -1031,6 +1034,7 @@ + @@ -1128,7 +1132,6 @@ - @@ -1136,7 +1139,6 @@ - @@ -1394,7 +1396,6 @@ - @@ -1437,11 +1438,6 @@ - - - - - @@ -1506,7 +1502,6 @@ - @@ -1661,6 +1656,7 @@ + @@ -1699,6 +1695,7 @@ + @@ -1800,11 +1797,6 @@ - - - - - @@ -1856,13 +1848,11 @@ - - @@ -1880,7 +1870,6 @@ - @@ -2051,8 +2040,6 @@ - - @@ -2124,7 +2111,6 @@ - @@ -2202,7 +2188,6 @@ - @@ -2344,10 +2329,10 @@ - + @@ -2383,15 +2368,12 @@ - - - @@ -2427,8 +2409,6 @@ - - @@ -2508,6 +2488,7 @@ + @@ -2516,8 +2497,8 @@ - + @@ -2550,9 +2531,6 @@ - - - @@ -2591,13 +2569,10 @@ - - - @@ -2615,6 +2590,7 @@ + @@ -2934,6 +2910,7 @@ + @@ -3046,6 +3023,8 @@ + + @@ -3075,8 +3054,6 @@ - - @@ -3189,7 +3166,6 @@ - @@ -3315,6 +3291,7 @@ + @@ -3884,6 +3861,7 @@ + @@ -4087,6 +4065,9 @@ + + + @@ -4578,6 +4559,7 @@ + @@ -4777,6 +4759,7 @@ + @@ -4808,6 +4791,7 @@ + @@ -5663,6 +5647,7 @@ + @@ -5897,6 +5882,7 @@ + @@ -6211,6 +6197,8 @@ + + @@ -6285,6 +6273,9 @@ + + + @@ -6818,6 +6809,11 @@ + + + + + @@ -7299,6 +7295,8 @@ + + @@ -7819,6 +7817,7 @@ + @@ -9267,6 +9266,8 @@ + + @@ -9629,9 +9630,9 @@ + - @@ -9827,13 +9828,14 @@ - + + @@ -10389,7 +10391,6 @@ - @@ -10543,7 +10544,6 @@ - @@ -10644,6 +10644,7 @@ + @@ -10755,6 +10756,9 @@ + + + @@ -10790,6 +10794,7 @@ + diff --git a/svgs/almanea.svg b/svgs/almanea.svg new file mode 100644 index 00000000000..a7a497599e8 --- /dev/null +++ b/svgs/almanea.svg @@ -0,0 +1,2207 @@ + + + + diff --git a/svgs/circlys.svg b/svgs/circlys.svg new file mode 100644 index 00000000000..671a6240f5b --- /dev/null +++ b/svgs/circlys.svg @@ -0,0 +1 @@ + diff --git a/svgs/clicflyer.svg b/svgs/clicflyer.svg new file mode 100644 index 00000000000..d247cda0a23 --- /dev/null +++ b/svgs/clicflyer.svg @@ -0,0 +1,2213 @@ + + + + diff --git a/svgs/hungerstation.svg b/svgs/hungerstation.svg new file mode 100644 index 00000000000..35e95367b3e --- /dev/null +++ b/svgs/hungerstation.svg @@ -0,0 +1,2208 @@ + + + + diff --git a/svgs/mada_pay.svg b/svgs/mada_pay.svg new file mode 100644 index 00000000000..6c4ca62858b --- /dev/null +++ b/svgs/mada_pay.svg @@ -0,0 +1,2207 @@ + + + + From a975b6479e9d122756682c1e7edcdd5922c94a64 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:11:28 +0300 Subject: [PATCH 040/527] +1 link (#2048) * +1 link * Minor appfilter.xml fix * Minor fix --- app/assets/appfilter.xml | 171 +++++++++--------- svgs/{solarweb.svg => fronius_solar_web.svg} | 0 svgs/{umniy_dom.svg => home_with_alice.svg} | 0 ...rt_switch.svg => samsung_smart_switch.svg} | 0 svgs/{samsung_pay.svg => samsung_wallet.svg} | 0 svgs/{screen_master.svg => screenmaster.svg} | 0 svgs/{senreta_vortaro.svg => senreta.svg} | 0 svgs/{setup_vpn.svg => setupvpn.svg} | 0 svgs/{simpl_pay.svg => simpl.svg} | 0 svgs/{umniy_dom_ru.svg => smart_dom_ru.svg} | 0 svgs/{spark_email.svg => spark_mail.svg} | 0 .../{spck_code_editor.svg => spck_editor.svg} | 0 svgs/{squircle.svg => squircle_ce.svg} | 0 svgs/stack.svg | 2 +- svgs/stack_for_stack_overflow.svg | 1 + svgs/stack_game.svg | 1 - svgs/{stuff_to_do.svg => stuff.svg} | 0 svgs/{subway_surf.svg => subway_surfers.svg} | 0 svgs/{sushi_myanimelist.svg => sushi.svg} | 0 svgs/{swiss_topo.svg => swisstopo.svg} | 0 svgs/{tapo.svg => tp_link_tapo.svg} | 0 ...ypto_wallet.svg => unstoppable_wallet.svg} | 0 svgs/{smzdm.svg => what_to_buy.svg} | 0 23 files changed, 88 insertions(+), 87 deletions(-) rename svgs/{solarweb.svg => fronius_solar_web.svg} (100%) rename svgs/{umniy_dom.svg => home_with_alice.svg} (100%) rename svgs/{smart_switch.svg => samsung_smart_switch.svg} (100%) rename svgs/{samsung_pay.svg => samsung_wallet.svg} (100%) rename svgs/{screen_master.svg => screenmaster.svg} (100%) rename svgs/{senreta_vortaro.svg => senreta.svg} (100%) rename svgs/{setup_vpn.svg => setupvpn.svg} (100%) rename svgs/{simpl_pay.svg => simpl.svg} (100%) rename svgs/{umniy_dom_ru.svg => smart_dom_ru.svg} (100%) rename svgs/{spark_email.svg => spark_mail.svg} (100%) rename svgs/{spck_code_editor.svg => spck_editor.svg} (100%) rename svgs/{squircle.svg => squircle_ce.svg} (100%) create mode 100644 svgs/stack_for_stack_overflow.svg delete mode 100644 svgs/stack_game.svg rename svgs/{stuff_to_do.svg => stuff.svg} (100%) rename svgs/{subway_surf.svg => subway_surfers.svg} (100%) rename svgs/{sushi_myanimelist.svg => sushi.svg} (100%) rename svgs/{swiss_topo.svg => swisstopo.svg} (100%) rename svgs/{tapo.svg => tp_link_tapo.svg} (100%) rename svgs/{unstoppable_crypto_wallet.svg => unstoppable_wallet.svg} (100%) rename svgs/{smzdm.svg => what_to_buy.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 6cc25d6c489..ceb1c5ded4e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1656,7 +1656,6 @@ - @@ -2656,6 +2655,7 @@ + @@ -3151,6 +3151,8 @@ + + @@ -5231,6 +5233,7 @@ + @@ -7628,7 +7631,6 @@ - @@ -7643,7 +7645,8 @@ - + + @@ -7694,9 +7697,6 @@ - - - @@ -7712,6 +7712,9 @@ + + + @@ -7719,15 +7722,17 @@ + + + - - + @@ -7766,11 +7771,11 @@ - + - - + + @@ -7789,20 +7794,20 @@ - + - - - + + + @@ -7833,7 +7838,6 @@ - @@ -7943,7 +7947,7 @@ - + @@ -7985,7 +7989,6 @@ - @@ -8072,8 +8075,8 @@ - - + + @@ -8399,9 +8402,6 @@ - - - @@ -8409,9 +8409,6 @@ - - - @@ -8439,7 +8436,6 @@ - @@ -8479,38 +8475,37 @@ - - - - + + - - - - - - - - - - - + + + + + + + + + + + + @@ -8521,6 +8516,7 @@ + @@ -8529,8 +8525,6 @@ - - @@ -8550,7 +8544,7 @@ - + @@ -8563,17 +8557,17 @@ - - - + + + - - + + - + @@ -8585,6 +8579,7 @@ + @@ -8594,14 +8589,14 @@ - - + + @@ -8614,14 +8609,14 @@ - - + + - - - + + + @@ -8637,7 +8632,6 @@ - @@ -8683,7 +8677,7 @@ - + @@ -8742,7 +8736,7 @@ - + @@ -8754,15 +8748,15 @@ - + - - - - + + + + @@ -8802,7 +8796,7 @@ - + @@ -8821,7 +8815,7 @@ - + @@ -8890,21 +8884,17 @@ - - + - - - @@ -8915,7 +8905,6 @@ - @@ -8953,8 +8942,7 @@ - - + @@ -9016,15 +9004,15 @@ - - - - - + + + + + @@ -9438,6 +9426,7 @@ + @@ -9701,10 +9690,11 @@ - - - - + + + + + @@ -10673,6 +10663,8 @@ + + @@ -10721,6 +10713,7 @@ + @@ -10759,6 +10752,7 @@ + @@ -10779,6 +10773,7 @@ + @@ -10815,6 +10810,9 @@ + + + @@ -10838,6 +10836,7 @@ + @@ -10852,4 +10851,6 @@ + + diff --git a/svgs/solarweb.svg b/svgs/fronius_solar_web.svg similarity index 100% rename from svgs/solarweb.svg rename to svgs/fronius_solar_web.svg diff --git a/svgs/umniy_dom.svg b/svgs/home_with_alice.svg similarity index 100% rename from svgs/umniy_dom.svg rename to svgs/home_with_alice.svg diff --git a/svgs/smart_switch.svg b/svgs/samsung_smart_switch.svg similarity index 100% rename from svgs/smart_switch.svg rename to svgs/samsung_smart_switch.svg diff --git a/svgs/samsung_pay.svg b/svgs/samsung_wallet.svg similarity index 100% rename from svgs/samsung_pay.svg rename to svgs/samsung_wallet.svg diff --git a/svgs/screen_master.svg b/svgs/screenmaster.svg similarity index 100% rename from svgs/screen_master.svg rename to svgs/screenmaster.svg diff --git a/svgs/senreta_vortaro.svg b/svgs/senreta.svg similarity index 100% rename from svgs/senreta_vortaro.svg rename to svgs/senreta.svg diff --git a/svgs/setup_vpn.svg b/svgs/setupvpn.svg similarity index 100% rename from svgs/setup_vpn.svg rename to svgs/setupvpn.svg diff --git a/svgs/simpl_pay.svg b/svgs/simpl.svg similarity index 100% rename from svgs/simpl_pay.svg rename to svgs/simpl.svg diff --git a/svgs/umniy_dom_ru.svg b/svgs/smart_dom_ru.svg similarity index 100% rename from svgs/umniy_dom_ru.svg rename to svgs/smart_dom_ru.svg diff --git a/svgs/spark_email.svg b/svgs/spark_mail.svg similarity index 100% rename from svgs/spark_email.svg rename to svgs/spark_mail.svg diff --git a/svgs/spck_code_editor.svg b/svgs/spck_editor.svg similarity index 100% rename from svgs/spck_code_editor.svg rename to svgs/spck_editor.svg diff --git a/svgs/squircle.svg b/svgs/squircle_ce.svg similarity index 100% rename from svgs/squircle.svg rename to svgs/squircle_ce.svg diff --git a/svgs/stack.svg b/svgs/stack.svg index 678ac4394d4..604bcb9afa7 100644 --- a/svgs/stack.svg +++ b/svgs/stack.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/stack_for_stack_overflow.svg b/svgs/stack_for_stack_overflow.svg new file mode 100644 index 00000000000..678ac4394d4 --- /dev/null +++ b/svgs/stack_for_stack_overflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stack_game.svg b/svgs/stack_game.svg deleted file mode 100644 index 604bcb9afa7..00000000000 --- a/svgs/stack_game.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/stuff_to_do.svg b/svgs/stuff.svg similarity index 100% rename from svgs/stuff_to_do.svg rename to svgs/stuff.svg diff --git a/svgs/subway_surf.svg b/svgs/subway_surfers.svg similarity index 100% rename from svgs/subway_surf.svg rename to svgs/subway_surfers.svg diff --git a/svgs/sushi_myanimelist.svg b/svgs/sushi.svg similarity index 100% rename from svgs/sushi_myanimelist.svg rename to svgs/sushi.svg diff --git a/svgs/swiss_topo.svg b/svgs/swisstopo.svg similarity index 100% rename from svgs/swiss_topo.svg rename to svgs/swisstopo.svg diff --git a/svgs/tapo.svg b/svgs/tp_link_tapo.svg similarity index 100% rename from svgs/tapo.svg rename to svgs/tp_link_tapo.svg diff --git a/svgs/unstoppable_crypto_wallet.svg b/svgs/unstoppable_wallet.svg similarity index 100% rename from svgs/unstoppable_crypto_wallet.svg rename to svgs/unstoppable_wallet.svg diff --git a/svgs/smzdm.svg b/svgs/what_to_buy.svg similarity index 100% rename from svgs/smzdm.svg rename to svgs/what_to_buy.svg From 7c0caa36488902b88fc10857499802f7e90e521d Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 30 Apr 2024 00:55:21 +0300 Subject: [PATCH 041/527] Updating names (#2049) --- app/assets/appfilter.xml | 414 +++++++++--------- ...compass_rapps.svg => accurate_compass.svg} | 0 svgs/{kindle.svg => amazon_kindle.svg} | 0 ...e.svg => bluetooth_keyboard_and_mouse.svg} | 0 svgs/{cinemark.svg => cinemark_hoyts.svg} | 0 .../{jabra_sound.svg => jabra_sound_plus.svg} | 0 ...v.svg => kamus_besar_bahasa_indonesia.svg} | 0 svgs/{kupi_com.svg => kupibilet.svg} | 0 svgs/{textra.svg => textra_sms.svg} | 0 svgs/{kite.svg => zerodha_kite.svg} | 0 10 files changed, 207 insertions(+), 207 deletions(-) rename svgs/{compass_rapps.svg => accurate_compass.svg} (100%) rename svgs/{kindle.svg => amazon_kindle.svg} (100%) rename svgs/{bluetooth_keyboard_mouse.svg => bluetooth_keyboard_and_mouse.svg} (100%) rename svgs/{cinemark.svg => cinemark_hoyts.svg} (100%) rename svgs/{jabra_sound.svg => jabra_sound_plus.svg} (100%) rename svgs/{kbbi_v.svg => kamus_besar_bahasa_indonesia.svg} (100%) rename svgs/{kupi_com.svg => kupibilet.svg} (100%) rename svgs/{textra.svg => textra_sms.svg} (100%) rename svgs/{kite.svg => zerodha_kite.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ceb1c5ded4e..fda84111f42 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -711,7 +711,7 @@ - + @@ -1004,7 +1004,7 @@ - + @@ -1649,7 +1649,7 @@ - + @@ -1860,8 +1860,8 @@ - - + + @@ -4041,8 +4041,8 @@ - - + + @@ -4054,8 +4054,8 @@ - - + + @@ -4096,7 +4096,7 @@ - + @@ -4114,8 +4114,8 @@ - - + + @@ -4125,7 +4125,7 @@ - + @@ -4218,7 +4218,7 @@ - + @@ -4247,14 +4247,14 @@ - + - + @@ -4320,7 +4320,7 @@ - + @@ -4378,7 +4378,7 @@ - + @@ -4398,10 +4398,10 @@ - - - - + + + + @@ -4410,7 +4410,7 @@ - + @@ -4453,9 +4453,9 @@ - - - + + + @@ -4471,11 +4471,11 @@ - - + + - - + + @@ -8885,7 +8885,7 @@ - + @@ -9034,179 +9034,179 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10466,8 +10466,8 @@ - - + + @@ -10631,7 +10631,7 @@ - + diff --git a/svgs/compass_rapps.svg b/svgs/accurate_compass.svg similarity index 100% rename from svgs/compass_rapps.svg rename to svgs/accurate_compass.svg diff --git a/svgs/kindle.svg b/svgs/amazon_kindle.svg similarity index 100% rename from svgs/kindle.svg rename to svgs/amazon_kindle.svg diff --git a/svgs/bluetooth_keyboard_mouse.svg b/svgs/bluetooth_keyboard_and_mouse.svg similarity index 100% rename from svgs/bluetooth_keyboard_mouse.svg rename to svgs/bluetooth_keyboard_and_mouse.svg diff --git a/svgs/cinemark.svg b/svgs/cinemark_hoyts.svg similarity index 100% rename from svgs/cinemark.svg rename to svgs/cinemark_hoyts.svg diff --git a/svgs/jabra_sound.svg b/svgs/jabra_sound_plus.svg similarity index 100% rename from svgs/jabra_sound.svg rename to svgs/jabra_sound_plus.svg diff --git a/svgs/kbbi_v.svg b/svgs/kamus_besar_bahasa_indonesia.svg similarity index 100% rename from svgs/kbbi_v.svg rename to svgs/kamus_besar_bahasa_indonesia.svg diff --git a/svgs/kupi_com.svg b/svgs/kupibilet.svg similarity index 100% rename from svgs/kupi_com.svg rename to svgs/kupibilet.svg diff --git a/svgs/textra.svg b/svgs/textra_sms.svg similarity index 100% rename from svgs/textra.svg rename to svgs/textra_sms.svg diff --git a/svgs/kite.svg b/svgs/zerodha_kite.svg similarity index 100% rename from svgs/kite.svg rename to svgs/zerodha_kite.svg From e85d1b729af3f7a37f33101ae199a9df8ad15581 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Tue, 30 Apr 2024 10:05:16 +0800 Subject: [PATCH 042/527] Kotlin 2.0.0-RC2 (#2050) --- .gitignore | 1 + app/build.gradle.kts | 5 +---- build.gradle.kts | 7 ++++--- gradle.properties | 1 - 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index c776042511f..2977c070cb3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .gradle local.properties .idea +.kotlin .DS_Store build captures diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 42fe7fa80fd..6ff150381d0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,6 +8,7 @@ import java.util.Properties plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("org.jetbrains.kotlin.plugin.compose") id("org.jetbrains.kotlin.plugin.serialization") id("com.google.devtools.ksp") id("com.google.dagger.hilt.android") @@ -87,10 +88,6 @@ android { resValues = true } - composeOptions { - kotlinCompilerExtensionVersion = "1.5.12" - } - packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" diff --git a/build.gradle.kts b/build.gradle.kts index 0fcf4241028..b2a6cbaacbb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,9 +3,10 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.3.2" apply false - id("org.jetbrains.kotlin.android") version "1.9.23" apply false - id("org.jetbrains.kotlin.plugin.serialization") version "1.9.23" apply false - id("com.google.devtools.ksp") version "1.9.23-1.0.20" apply false + id("org.jetbrains.kotlin.android") version "2.0.0-RC2" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC2" + id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC2" apply false + id("com.google.devtools.ksp") version "2.0.0-RC1-1.0.20" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false diff --git a/gradle.properties b/gradle.properties index 8eaf033810f..b13e7169c13 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,6 @@ android.defaults.buildfeatures.shaders=false android.useAndroidX=true kotlin.code.style=official -kotlin.experimental.tryK2=true org.gradle.caching=true org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 From 753e89d349fb9c49f022f4a30f98e00b717abb62 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:04:11 +0300 Subject: [PATCH 043/527] Updating names (#2051) --- app/assets/appfilter.xml | 74 +++++++++---------- svgs/{baidu_map.svg => baidu_maps.svg} | 0 ...svg => japan_train_card_balance_check.svg} | 0 ...lla_music.svg => vanilla_music_player.svg} | 0 svgs/{vflat.svg => vflat_scan.svg} | 0 svgs/{wework.svg => wecom.svg} | 0 svgs/{wifianalyzer.svg => wifi_analyzer.svg} | 0 svgs/{xumm.svg => xaman_wallet.svg} | 0 svgs/{yandex_taxi.svg => yandex_go.svg} | 0 9 files changed, 37 insertions(+), 37 deletions(-) rename svgs/{baidu_map.svg => baidu_maps.svg} (100%) rename svgs/{digital_card_reader.svg => japan_train_card_balance_check.svg} (100%) rename svgs/{vanilla_music.svg => vanilla_music_player.svg} (100%) rename svgs/{vflat.svg => vflat_scan.svg} (100%) rename svgs/{wework.svg => wecom.svg} (100%) rename svgs/{wifianalyzer.svg => wifi_analyzer.svg} (100%) rename svgs/{xumm.svg => xaman_wallet.svg} (100%) rename svgs/{yandex_taxi.svg => yandex_go.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index fda84111f42..57b96e136fb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -712,8 +712,8 @@ - - + + @@ -4179,8 +4179,8 @@ - - + + @@ -9766,7 +9766,7 @@ - + @@ -9797,7 +9797,7 @@ - + @@ -9939,7 +9939,7 @@ - + @@ -10026,7 +10026,7 @@ - + @@ -10047,8 +10047,8 @@ - - + + @@ -10063,18 +10063,18 @@ - - + + - - - + + + - + @@ -10093,8 +10093,8 @@ - - + + @@ -10234,11 +10234,11 @@ - - - - - + + + + + @@ -10248,7 +10248,7 @@ - + @@ -10259,8 +10259,8 @@ - - + + @@ -10379,8 +10379,8 @@ - - + + @@ -10406,7 +10406,7 @@ - + @@ -10427,10 +10427,10 @@ - - - - + + + + @@ -10584,7 +10584,7 @@ - + @@ -10747,8 +10747,8 @@ - - + + @@ -10809,7 +10809,7 @@ - + diff --git a/svgs/baidu_map.svg b/svgs/baidu_maps.svg similarity index 100% rename from svgs/baidu_map.svg rename to svgs/baidu_maps.svg diff --git a/svgs/digital_card_reader.svg b/svgs/japan_train_card_balance_check.svg similarity index 100% rename from svgs/digital_card_reader.svg rename to svgs/japan_train_card_balance_check.svg diff --git a/svgs/vanilla_music.svg b/svgs/vanilla_music_player.svg similarity index 100% rename from svgs/vanilla_music.svg rename to svgs/vanilla_music_player.svg diff --git a/svgs/vflat.svg b/svgs/vflat_scan.svg similarity index 100% rename from svgs/vflat.svg rename to svgs/vflat_scan.svg diff --git a/svgs/wework.svg b/svgs/wecom.svg similarity index 100% rename from svgs/wework.svg rename to svgs/wecom.svg diff --git a/svgs/wifianalyzer.svg b/svgs/wifi_analyzer.svg similarity index 100% rename from svgs/wifianalyzer.svg rename to svgs/wifi_analyzer.svg diff --git a/svgs/xumm.svg b/svgs/xaman_wallet.svg similarity index 100% rename from svgs/xumm.svg rename to svgs/xaman_wallet.svg diff --git a/svgs/yandex_taxi.svg b/svgs/yandex_go.svg similarity index 100% rename from svgs/yandex_taxi.svg rename to svgs/yandex_go.svg From 56ce2e739366d95b085b9b6caebc86ba6d51e4e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 06:57:03 +0800 Subject: [PATCH 044/527] Update AGP (#2054) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b2a6cbaacbb..1e463f69130 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.3.2" apply false + id("com.android.application") version "8.4.0" apply false id("org.jetbrains.kotlin.android") version "2.0.0-RC2" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC2" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC2" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 206c4354a1b..7c801dea6cc 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.3.2") + implementation("com.android.tools:sdk-common:31.4.0") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From 290c6d5515f69f55557059d0b06f33e9cb017437 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 06:57:11 +0800 Subject: [PATCH 045/527] Update plugin com.google.devtools.ksp to v2.0.0-RC2-1.0.20 (#2053) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1e463f69130..6a914f7a06c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.0-RC2" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC2" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC2" apply false - id("com.google.devtools.ksp") version "2.0.0-RC1-1.0.20" apply false + id("com.google.devtools.ksp") version "2.0.0-RC2-1.0.20" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From a6ed6e3ab28cb8dd0781466f378f33653e51efbe Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 1 May 2024 11:12:26 +0300 Subject: [PATCH 046/527] Updating the icon addition template (#2055) * Updating the icon addition template * Minor fix * Minor fix * Minor fix --- .github/PULL_REQUEST_TEMPLATE/icon_addition.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/icon_addition.md b/.github/PULL_REQUEST_TEMPLATE/icon_addition.md index 39ea6de599c..f0718cb2566 100644 --- a/.github/PULL_REQUEST_TEMPLATE/icon_addition.md +++ b/.github/PULL_REQUEST_TEMPLATE/icon_addition.md @@ -2,19 +2,23 @@ ## Icons addition information - + + ### Added + App Name (`com.package.app`) App Name (`com.package.app`) ### Linked + App Name (`com.package.app` → `drawable.svg`) App Name (`com.package.app` → `drawable.svg`) ### Updated + App Name (`com.package.app`) App Name (`com.package.app`) ## Contributor's checklist - -- [ ] I followed [the Lawnicons Guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) (upd. Jan 2024) and will make changes if someone suggests. I will also make sure that Lawnicons builds correctly. +- [ ] I followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and will make changes if someone suggests. I will also make sure that Lawnicons builds correctly. + From 63ce134a42034ae386e7277edfee249db50e4a62 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 2 May 2024 08:57:22 +0300 Subject: [PATCH 047/527] +13 links (#2061) --- app/assets/appfilter.xml | 548 +++++++++--------- .../{random_video_chat.svg => chatrandom.svg} | 0 svgs/dodo_pizza.svg | 1 + ...human_resources.svg => factory_escape.svg} | 0 svgs/{flashcards.svg => flashcards_world.svg} | 0 ...c.svg => geogebra_graphing_calculator.svg} | 0 svgs/{go_launcher_z.svg => go_launcher.svg} | 0 svgs/{gmm.svg => graspop_metal_meeting.svg} | 0 svgs/{guotai.svg => guotai_junan.svg} | 0 svgs/{healthifyme.svg => healthify.svg} | 0 ...ll_climb_2.svg => hill_climb_racing_2.svg} | 0 svgs/{literal.svg => literal_club.svg} | 0 ...rena.svg => magic_the_gathering_arena.svg} | 0 ....svg => material_you_light_dark_icons.svg} | 0 svgs/{message_plus.svg => mezo.svg} | 0 ...oft_math.svg => microsoft_math_solver.svg} | 0 ...gends.svg => mobile_legends_bang_bang.svg} | 0 svgs/mygate.svg | 2 +- svgs/{mystory.svg => mystory_today.svg} | 0 ...ogramm_katana.svg => nonograms_katana.svg} | 0 .../{notan_grade_calculator.svg => notan.svg} | 0 svgs/{now_tv.svg => now.svg} | 0 svgs/{nyx.svg => nyx_music_player.svg} | 0 svgs/{ola_cabs.svg => ola.svg} | 0 svgs/{opgg.svg => op_gg.svg} | 0 svgs/{pick_hub.svg => pick.svg} | 0 svgs/{bob.svg => radio_bob.svg} | 0 svgs/{riseup_vpn.svg => riseupvpn.svg} | 0 svgs/{rrb_je_app.svg => rrb_je.svg} | 0 svgs/{homeworker.svg => schulplaner.svg} | 0 ...owerful_monitor.svg => system_monitor.svg} | 0 svgs/{tether.svg => tp_link_tether.svg} | 0 .../{true_phone_dialer.svg => true_phone.svg} | 0 svgs/{tutanota.svg => tuta.svg} | 0 svgs/{udictionary.svg => u_dictionary.svg} | 0 svgs/{mobilny_usos_ul.svg => usos.svg} | 0 svgs/{meteored.svg => weather_radar.svg} | 0 ...ealthmate.svg => withings_health_mate.svg} | 0 38 files changed, 283 insertions(+), 268 deletions(-) rename svgs/{random_video_chat.svg => chatrandom.svg} (100%) create mode 100644 svgs/dodo_pizza.svg rename svgs/{human_resources.svg => factory_escape.svg} (100%) rename svgs/{flashcards.svg => flashcards_world.svg} (100%) rename svgs/{graphing_calc.svg => geogebra_graphing_calculator.svg} (100%) rename svgs/{go_launcher_z.svg => go_launcher.svg} (100%) rename svgs/{gmm.svg => graspop_metal_meeting.svg} (100%) rename svgs/{guotai.svg => guotai_junan.svg} (100%) rename svgs/{healthifyme.svg => healthify.svg} (100%) rename svgs/{hill_climb_2.svg => hill_climb_racing_2.svg} (100%) rename svgs/{literal.svg => literal_club.svg} (100%) rename svgs/{magic_arena.svg => magic_the_gathering_arena.svg} (100%) rename svgs/{material_you_light_dark.svg => material_you_light_dark_icons.svg} (100%) rename svgs/{message_plus.svg => mezo.svg} (100%) rename svgs/{microsoft_math.svg => microsoft_math_solver.svg} (100%) rename svgs/{mobile_legends.svg => mobile_legends_bang_bang.svg} (100%) rename svgs/{mystory.svg => mystory_today.svg} (100%) rename svgs/{nonogramm_katana.svg => nonograms_katana.svg} (100%) rename svgs/{notan_grade_calculator.svg => notan.svg} (100%) rename svgs/{now_tv.svg => now.svg} (100%) rename svgs/{nyx.svg => nyx_music_player.svg} (100%) rename svgs/{ola_cabs.svg => ola.svg} (100%) rename svgs/{opgg.svg => op_gg.svg} (100%) rename svgs/{pick_hub.svg => pick.svg} (100%) rename svgs/{bob.svg => radio_bob.svg} (100%) rename svgs/{riseup_vpn.svg => riseupvpn.svg} (100%) rename svgs/{rrb_je_app.svg => rrb_je.svg} (100%) rename svgs/{homeworker.svg => schulplaner.svg} (100%) rename svgs/{powerful_monitor.svg => system_monitor.svg} (100%) rename svgs/{tether.svg => tp_link_tether.svg} (100%) rename svgs/{true_phone_dialer.svg => true_phone.svg} (100%) rename svgs/{tutanota.svg => tuta.svg} (100%) rename svgs/{udictionary.svg => u_dictionary.svg} (100%) rename svgs/{mobilny_usos_ul.svg => usos.svg} (100%) rename svgs/{meteored.svg => weather_radar.svg} (100%) rename svgs/{healthmate.svg => withings_health_mate.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 57b96e136fb..42f24bc958c 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -43,6 +43,7 @@ + @@ -120,6 +121,8 @@ + + @@ -342,6 +345,10 @@ + + + + @@ -711,9 +718,6 @@ - - - @@ -1609,6 +1613,7 @@ + @@ -1824,6 +1829,7 @@ + @@ -1860,8 +1866,6 @@ - - @@ -2322,6 +2326,7 @@ + @@ -2641,6 +2646,7 @@ + @@ -2739,12 +2745,13 @@ - - + + + @@ -2861,10 +2868,6 @@ - - - - @@ -2898,10 +2901,10 @@ - - + + @@ -2967,12 +2970,13 @@ - - + + + @@ -3232,18 +3236,11 @@ - - - - - - - @@ -3282,8 +3279,6 @@ - - @@ -3338,6 +3333,10 @@ + + + + @@ -3414,11 +3413,10 @@ - - + @@ -3606,11 +3604,11 @@ - + @@ -3628,11 +3626,8 @@ - - - - + @@ -3688,13 +3683,12 @@ - - - - - + + + + + - @@ -3709,7 +3703,6 @@ - @@ -3744,7 +3737,7 @@ - + @@ -3783,8 +3776,8 @@ - + @@ -3802,11 +3795,10 @@ - + - @@ -3859,10 +3851,9 @@ - + - @@ -4054,10 +4045,10 @@ - - + + @@ -4096,7 +4087,6 @@ - @@ -4124,6 +4114,7 @@ + @@ -4238,6 +4229,7 @@ + @@ -4254,7 +4246,6 @@ - @@ -4320,7 +4311,6 @@ - @@ -4375,10 +4365,8 @@ - - @@ -4398,10 +4386,6 @@ - - - - @@ -4410,7 +4394,6 @@ - @@ -4493,16 +4476,16 @@ - - + + - - - + + + @@ -4563,10 +4546,10 @@ - - - - + + + + @@ -4698,8 +4681,8 @@ - - + + @@ -4796,15 +4779,15 @@ - + + - @@ -4886,13 +4869,11 @@ - + - - @@ -4905,9 +4886,9 @@ - - - + + + @@ -4982,7 +4963,7 @@ - + @@ -5017,7 +4998,6 @@ - @@ -5063,8 +5043,6 @@ - - @@ -5124,7 +5102,6 @@ - @@ -5138,6 +5115,7 @@ + @@ -5161,6 +5139,12 @@ + + + + + + @@ -5173,8 +5157,8 @@ - - + + @@ -5195,6 +5179,7 @@ + @@ -5210,6 +5195,8 @@ + + @@ -5241,12 +5228,12 @@ - + - + @@ -5341,11 +5328,11 @@ - + - - + + @@ -5354,7 +5341,6 @@ - @@ -5367,6 +5353,8 @@ + + @@ -5391,7 +5379,7 @@ - + @@ -5454,7 +5442,6 @@ - @@ -5476,12 +5463,6 @@ - - - - - - @@ -5583,6 +5564,10 @@ + + + + @@ -5669,7 +5654,7 @@ - + @@ -5705,7 +5690,7 @@ - + @@ -5798,7 +5783,7 @@ - + @@ -5830,6 +5815,7 @@ + @@ -5863,6 +5849,7 @@ + @@ -5915,9 +5902,10 @@ + - + @@ -5925,7 +5913,7 @@ - + @@ -5939,9 +5927,6 @@ - - - @@ -6026,7 +6011,7 @@ - + @@ -6061,17 +6046,17 @@ - - - + + + - - + + @@ -6086,8 +6071,6 @@ - - @@ -6104,83 +6087,83 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6205,10 +6188,24 @@ + + + + + + + + + + + + + + @@ -6219,9 +6216,12 @@ - + + + + @@ -6273,9 +6273,6 @@ - - - @@ -6285,6 +6282,8 @@ + + @@ -6720,10 +6719,6 @@ - - - - @@ -6745,7 +6740,7 @@ - + @@ -6764,7 +6759,7 @@ - + @@ -6968,7 +6963,7 @@ - + @@ -7045,7 +7040,6 @@ - @@ -7071,11 +7065,9 @@ - - @@ -7135,12 +7127,11 @@ - - - + + @@ -7208,7 +7199,7 @@ - + @@ -7224,7 +7215,7 @@ - + @@ -7266,18 +7257,18 @@ - - - + + + - - - - + + + + @@ -7288,8 +7279,6 @@ - - @@ -7317,8 +7306,7 @@ - - + @@ -7326,7 +7314,6 @@ - @@ -7437,8 +7424,8 @@ - - + + @@ -7531,8 +7518,8 @@ - - + + @@ -7558,13 +7545,14 @@ - - + + + @@ -7590,11 +7578,13 @@ + + - + @@ -7784,6 +7774,7 @@ + @@ -8855,6 +8846,7 @@ + @@ -8885,7 +8877,6 @@ - @@ -9026,7 +9017,6 @@ - @@ -9271,8 +9261,8 @@ - - + + @@ -9281,12 +9271,12 @@ - - - + + + @@ -9307,7 +9297,7 @@ - + @@ -9352,7 +9342,7 @@ - + @@ -9371,8 +9361,8 @@ - - + + @@ -9427,6 +9417,7 @@ + @@ -9507,9 +9498,13 @@ - - - + + + + + + + @@ -9572,8 +9567,8 @@ - - + + @@ -9584,7 +9579,6 @@ - @@ -9614,8 +9608,8 @@ - - + + @@ -9686,8 +9680,8 @@ - - + + @@ -9738,6 +9732,7 @@ + @@ -10047,11 +10042,10 @@ - - + @@ -10068,13 +10062,11 @@ + + - - - - @@ -10093,8 +10085,6 @@ - - @@ -10234,11 +10224,6 @@ - - - - - @@ -10252,6 +10237,8 @@ + + @@ -10259,8 +10246,6 @@ - - @@ -10290,6 +10275,7 @@ + @@ -10333,11 +10319,27 @@ + + + + + + + + + + + + + + + + @@ -10349,6 +10351,7 @@ + @@ -10380,7 +10383,6 @@ - @@ -10406,7 +10408,6 @@ - @@ -10466,8 +10467,6 @@ - - @@ -10575,6 +10574,7 @@ + @@ -10584,7 +10584,6 @@ - @@ -10634,6 +10633,8 @@ + + @@ -10720,6 +10721,8 @@ + + @@ -10747,8 +10750,6 @@ - - @@ -10757,6 +10758,7 @@ + @@ -10774,6 +10776,8 @@ + + @@ -10782,6 +10786,7 @@ + @@ -10790,10 +10795,15 @@ + + + + + @@ -10809,7 +10819,6 @@ - @@ -10823,6 +10832,10 @@ + + + + @@ -10847,6 +10860,7 @@ + diff --git a/svgs/random_video_chat.svg b/svgs/chatrandom.svg similarity index 100% rename from svgs/random_video_chat.svg rename to svgs/chatrandom.svg diff --git a/svgs/dodo_pizza.svg b/svgs/dodo_pizza.svg new file mode 100644 index 00000000000..305a74e8bdb --- /dev/null +++ b/svgs/dodo_pizza.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/human_resources.svg b/svgs/factory_escape.svg similarity index 100% rename from svgs/human_resources.svg rename to svgs/factory_escape.svg diff --git a/svgs/flashcards.svg b/svgs/flashcards_world.svg similarity index 100% rename from svgs/flashcards.svg rename to svgs/flashcards_world.svg diff --git a/svgs/graphing_calc.svg b/svgs/geogebra_graphing_calculator.svg similarity index 100% rename from svgs/graphing_calc.svg rename to svgs/geogebra_graphing_calculator.svg diff --git a/svgs/go_launcher_z.svg b/svgs/go_launcher.svg similarity index 100% rename from svgs/go_launcher_z.svg rename to svgs/go_launcher.svg diff --git a/svgs/gmm.svg b/svgs/graspop_metal_meeting.svg similarity index 100% rename from svgs/gmm.svg rename to svgs/graspop_metal_meeting.svg diff --git a/svgs/guotai.svg b/svgs/guotai_junan.svg similarity index 100% rename from svgs/guotai.svg rename to svgs/guotai_junan.svg diff --git a/svgs/healthifyme.svg b/svgs/healthify.svg similarity index 100% rename from svgs/healthifyme.svg rename to svgs/healthify.svg diff --git a/svgs/hill_climb_2.svg b/svgs/hill_climb_racing_2.svg similarity index 100% rename from svgs/hill_climb_2.svg rename to svgs/hill_climb_racing_2.svg diff --git a/svgs/literal.svg b/svgs/literal_club.svg similarity index 100% rename from svgs/literal.svg rename to svgs/literal_club.svg diff --git a/svgs/magic_arena.svg b/svgs/magic_the_gathering_arena.svg similarity index 100% rename from svgs/magic_arena.svg rename to svgs/magic_the_gathering_arena.svg diff --git a/svgs/material_you_light_dark.svg b/svgs/material_you_light_dark_icons.svg similarity index 100% rename from svgs/material_you_light_dark.svg rename to svgs/material_you_light_dark_icons.svg diff --git a/svgs/message_plus.svg b/svgs/mezo.svg similarity index 100% rename from svgs/message_plus.svg rename to svgs/mezo.svg diff --git a/svgs/microsoft_math.svg b/svgs/microsoft_math_solver.svg similarity index 100% rename from svgs/microsoft_math.svg rename to svgs/microsoft_math_solver.svg diff --git a/svgs/mobile_legends.svg b/svgs/mobile_legends_bang_bang.svg similarity index 100% rename from svgs/mobile_legends.svg rename to svgs/mobile_legends_bang_bang.svg diff --git a/svgs/mygate.svg b/svgs/mygate.svg index f7e0422e82f..900dac4810e 100644 --- a/svgs/mygate.svg +++ b/svgs/mygate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/mystory.svg b/svgs/mystory_today.svg similarity index 100% rename from svgs/mystory.svg rename to svgs/mystory_today.svg diff --git a/svgs/nonogramm_katana.svg b/svgs/nonograms_katana.svg similarity index 100% rename from svgs/nonogramm_katana.svg rename to svgs/nonograms_katana.svg diff --git a/svgs/notan_grade_calculator.svg b/svgs/notan.svg similarity index 100% rename from svgs/notan_grade_calculator.svg rename to svgs/notan.svg diff --git a/svgs/now_tv.svg b/svgs/now.svg similarity index 100% rename from svgs/now_tv.svg rename to svgs/now.svg diff --git a/svgs/nyx.svg b/svgs/nyx_music_player.svg similarity index 100% rename from svgs/nyx.svg rename to svgs/nyx_music_player.svg diff --git a/svgs/ola_cabs.svg b/svgs/ola.svg similarity index 100% rename from svgs/ola_cabs.svg rename to svgs/ola.svg diff --git a/svgs/opgg.svg b/svgs/op_gg.svg similarity index 100% rename from svgs/opgg.svg rename to svgs/op_gg.svg diff --git a/svgs/pick_hub.svg b/svgs/pick.svg similarity index 100% rename from svgs/pick_hub.svg rename to svgs/pick.svg diff --git a/svgs/bob.svg b/svgs/radio_bob.svg similarity index 100% rename from svgs/bob.svg rename to svgs/radio_bob.svg diff --git a/svgs/riseup_vpn.svg b/svgs/riseupvpn.svg similarity index 100% rename from svgs/riseup_vpn.svg rename to svgs/riseupvpn.svg diff --git a/svgs/rrb_je_app.svg b/svgs/rrb_je.svg similarity index 100% rename from svgs/rrb_je_app.svg rename to svgs/rrb_je.svg diff --git a/svgs/homeworker.svg b/svgs/schulplaner.svg similarity index 100% rename from svgs/homeworker.svg rename to svgs/schulplaner.svg diff --git a/svgs/powerful_monitor.svg b/svgs/system_monitor.svg similarity index 100% rename from svgs/powerful_monitor.svg rename to svgs/system_monitor.svg diff --git a/svgs/tether.svg b/svgs/tp_link_tether.svg similarity index 100% rename from svgs/tether.svg rename to svgs/tp_link_tether.svg diff --git a/svgs/true_phone_dialer.svg b/svgs/true_phone.svg similarity index 100% rename from svgs/true_phone_dialer.svg rename to svgs/true_phone.svg diff --git a/svgs/tutanota.svg b/svgs/tuta.svg similarity index 100% rename from svgs/tutanota.svg rename to svgs/tuta.svg diff --git a/svgs/udictionary.svg b/svgs/u_dictionary.svg similarity index 100% rename from svgs/udictionary.svg rename to svgs/u_dictionary.svg diff --git a/svgs/mobilny_usos_ul.svg b/svgs/usos.svg similarity index 100% rename from svgs/mobilny_usos_ul.svg rename to svgs/usos.svg diff --git a/svgs/meteored.svg b/svgs/weather_radar.svg similarity index 100% rename from svgs/meteored.svg rename to svgs/weather_radar.svg diff --git a/svgs/healthmate.svg b/svgs/withings_health_mate.svg similarity index 100% rename from svgs/healthmate.svg rename to svgs/withings_health_mate.svg From 87db1dc5325a55c03c1249820eecdbfa0ec5cb32 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 15:15:38 +0800 Subject: [PATCH 048/527] Update dependency androidx.compose:compose-bom to v2024.05.00 (#2060) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6ff150381d0..956de376a73 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -138,7 +138,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("androidx.core:core-ktx:1.13.0") implementation("androidx.activity:activity-compose:1.9.0") - implementation(platform("androidx.compose:compose-bom:2024.04.01")) + implementation(platform("androidx.compose:compose-bom:2024.05.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From eb21b64fd2a4bd6387e8f4256af91f9a28b9142f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 15:15:47 +0800 Subject: [PATCH 049/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-alpha08 (#2059) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 956de376a73..b5f08182b32 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,7 +147,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.6") implementation("androidx.compose.material3:material3:1.3.0-alpha05") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-alpha07") + implementation("androidx.navigation:navigation-compose:2.8.0-alpha08") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") From 5b07153258bbaf7d3b0dfcf77f50d1d607dfff20 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 15:15:54 +0800 Subject: [PATCH 050/527] Update dependency androidx.core:core-ktx to v1.13.1 (#2058) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b5f08182b32..e8daaedbad8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -136,7 +136,7 @@ dependencies { val hiltVersion = "2.51.1" implementation("androidx.appcompat:appcompat:1.6.1") - implementation("androidx.core:core-ktx:1.13.0") + implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.activity:activity-compose:1.9.0") implementation(platform("androidx.compose:compose-bom:2024.05.00")) implementation("androidx.compose.ui:ui") From d839d993ee9a1ef871162f8a7a0488b29b7b18c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 15:16:01 +0800 Subject: [PATCH 051/527] Update dependency androidx.compose.material:material-icons-core-android to v1.6.7 (#2057) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e8daaedbad8..c5c93267769 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -144,7 +144,7 @@ dependencies { implementation("androidx.compose.ui:ui-util") debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") - implementation("androidx.compose.material:material-icons-core-android:1.6.6") + implementation("androidx.compose.material:material-icons-core-android:1.6.7") implementation("androidx.compose.material3:material3:1.3.0-alpha05") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-alpha08") From 5ea3dfa2477b4f1208654267a13c789a982e5328 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 2 May 2024 18:30:25 +0300 Subject: [PATCH 052/527] Updating names (#2062) --- app/assets/appfilter.xml | 158 +++++++++--------- svgs/{mobilempk.svg => busnavi.svg} | 0 svgs/{librera_reader.svg => librera.svg} | 0 svgs/{mindicator.svg => m_indicator.svg} | 0 svgs/{planner.svg => microsoft_planner.svg} | 0 svgs/{more_grocery_delivery.svg => more.svg} | 0 ...sicolet.svg => musicolet_music_player.svg} | 0 ...speed.svg => need_for_speed_no_limits.svg} | 0 ...xt_conta_digital_e_cartao.svg => next.svg} | 0 svgs/{gramotnee.svg => orthography.svg} | 0 svgs/{oscope.svg => oscilloscope.svg} | 0 svgs/{pager_duty.svg => pagerduty.svg} | 0 ...hantom_dark.svg => phantom_dark_icons.svg} | 0 ...ntom_white.svg => phantom_white_icons.svg} | 0 svgs/{pi.svg => pi_network.svg} | 0 .../{phototan.svg => raiffeisen_phototan.svg} | 0 ...randomdice.svg => random_dice_defense.svg} | 0 svgs/{rozkladpkp.svg => rozklad_pkp.svg} | 0 svgs/{mycloud.svg => swisscom_mycloud.svg} | 0 svgs/{nytimes.svg => the_new_york_times.svg} | 0 svgs/{mav.svg => vonatinfo.svg} | 0 ..._chat.svg => workplace_chat_from_meta.svg} | 0 22 files changed, 79 insertions(+), 79 deletions(-) rename svgs/{mobilempk.svg => busnavi.svg} (100%) rename svgs/{librera_reader.svg => librera.svg} (100%) rename svgs/{mindicator.svg => m_indicator.svg} (100%) rename svgs/{planner.svg => microsoft_planner.svg} (100%) rename svgs/{more_grocery_delivery.svg => more.svg} (100%) rename svgs/{musicolet.svg => musicolet_music_player.svg} (100%) rename svgs/{need_for_speed.svg => need_for_speed_no_limits.svg} (100%) rename svgs/{next_conta_digital_e_cartao.svg => next.svg} (100%) rename svgs/{gramotnee.svg => orthography.svg} (100%) rename svgs/{oscope.svg => oscilloscope.svg} (100%) rename svgs/{pager_duty.svg => pagerduty.svg} (100%) rename svgs/{phantom_dark.svg => phantom_dark_icons.svg} (100%) rename svgs/{phantom_white.svg => phantom_white_icons.svg} (100%) rename svgs/{pi.svg => pi_network.svg} (100%) rename svgs/{phototan.svg => raiffeisen_phototan.svg} (100%) rename svgs/{randomdice.svg => random_dice_defense.svg} (100%) rename svgs/{rozkladpkp.svg => rozklad_pkp.svg} (100%) rename svgs/{mycloud.svg => swisscom_mycloud.svg} (100%) rename svgs/{nytimes.svg => the_new_york_times.svg} (100%) rename svgs/{mav.svg => vonatinfo.svg} (100%) rename svgs/{meta_work_chat.svg => workplace_chat_from_meta.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 42f24bc958c..aa05cf35001 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -260,6 +260,7 @@ + @@ -1224,6 +1225,7 @@ + @@ -3820,6 +3822,9 @@ + + + @@ -4434,6 +4439,7 @@ + @@ -4590,9 +4596,9 @@ + - @@ -4613,9 +4619,9 @@ - - - + + + @@ -4733,8 +4739,8 @@ - - + + @@ -4758,6 +4764,7 @@ + @@ -4879,8 +4886,8 @@ + - @@ -4972,7 +4979,6 @@ - @@ -5096,7 +5102,6 @@ - @@ -5206,6 +5211,7 @@ + @@ -5246,7 +5252,6 @@ - @@ -5334,7 +5339,6 @@ - @@ -5352,7 +5356,6 @@ - @@ -5373,8 +5376,8 @@ - - + + @@ -5401,8 +5404,8 @@ - - + + @@ -5416,6 +5419,7 @@ + @@ -5514,7 +5518,7 @@ - + @@ -5640,8 +5644,6 @@ - - @@ -5698,6 +5700,7 @@ + @@ -5705,8 +5708,8 @@ - + @@ -5742,8 +5745,8 @@ - - + + @@ -5762,7 +5765,7 @@ - + @@ -5824,10 +5827,10 @@ + - @@ -5927,7 +5930,6 @@ - @@ -6035,17 +6037,14 @@ - + - - - @@ -6306,9 +6305,8 @@ - - + @@ -6358,11 +6356,11 @@ - - - - - + + + + + @@ -6371,8 +6369,8 @@ - - + + @@ -6461,8 +6459,8 @@ - - + + @@ -6504,8 +6502,8 @@ - - + + @@ -6656,7 +6654,6 @@ - @@ -6747,9 +6744,6 @@ - - - @@ -6757,7 +6751,7 @@ - + @@ -6847,7 +6841,6 @@ - @@ -6875,10 +6868,6 @@ - - - - @@ -6895,7 +6884,6 @@ - @@ -6904,6 +6892,9 @@ + + + @@ -7046,9 +7037,9 @@ - - + + @@ -7057,14 +7048,11 @@ - - - @@ -7117,9 +7105,6 @@ - - - @@ -7249,12 +7234,11 @@ - - - + + @@ -7289,6 +7273,9 @@ + + + @@ -7304,8 +7291,8 @@ - - + + @@ -7417,7 +7404,7 @@ - + @@ -7583,7 +7570,7 @@ - + @@ -8804,6 +8791,8 @@ + + @@ -9246,6 +9235,9 @@ + + + @@ -9254,8 +9246,8 @@ + - @@ -9404,7 +9396,6 @@ - @@ -9413,7 +9404,6 @@ - @@ -9444,10 +9434,10 @@ - - - - + + + + @@ -9517,8 +9507,8 @@ - - + + @@ -9551,7 +9541,7 @@ - + @@ -9578,7 +9568,6 @@ - @@ -9914,6 +9903,7 @@ + @@ -10307,6 +10297,7 @@ + @@ -10692,6 +10683,7 @@ + @@ -10751,6 +10743,7 @@ + @@ -10761,12 +10754,17 @@ + + + + + @@ -10838,6 +10836,7 @@ + @@ -10866,5 +10865,6 @@ + diff --git a/svgs/mobilempk.svg b/svgs/busnavi.svg similarity index 100% rename from svgs/mobilempk.svg rename to svgs/busnavi.svg diff --git a/svgs/librera_reader.svg b/svgs/librera.svg similarity index 100% rename from svgs/librera_reader.svg rename to svgs/librera.svg diff --git a/svgs/mindicator.svg b/svgs/m_indicator.svg similarity index 100% rename from svgs/mindicator.svg rename to svgs/m_indicator.svg diff --git a/svgs/planner.svg b/svgs/microsoft_planner.svg similarity index 100% rename from svgs/planner.svg rename to svgs/microsoft_planner.svg diff --git a/svgs/more_grocery_delivery.svg b/svgs/more.svg similarity index 100% rename from svgs/more_grocery_delivery.svg rename to svgs/more.svg diff --git a/svgs/musicolet.svg b/svgs/musicolet_music_player.svg similarity index 100% rename from svgs/musicolet.svg rename to svgs/musicolet_music_player.svg diff --git a/svgs/need_for_speed.svg b/svgs/need_for_speed_no_limits.svg similarity index 100% rename from svgs/need_for_speed.svg rename to svgs/need_for_speed_no_limits.svg diff --git a/svgs/next_conta_digital_e_cartao.svg b/svgs/next.svg similarity index 100% rename from svgs/next_conta_digital_e_cartao.svg rename to svgs/next.svg diff --git a/svgs/gramotnee.svg b/svgs/orthography.svg similarity index 100% rename from svgs/gramotnee.svg rename to svgs/orthography.svg diff --git a/svgs/oscope.svg b/svgs/oscilloscope.svg similarity index 100% rename from svgs/oscope.svg rename to svgs/oscilloscope.svg diff --git a/svgs/pager_duty.svg b/svgs/pagerduty.svg similarity index 100% rename from svgs/pager_duty.svg rename to svgs/pagerduty.svg diff --git a/svgs/phantom_dark.svg b/svgs/phantom_dark_icons.svg similarity index 100% rename from svgs/phantom_dark.svg rename to svgs/phantom_dark_icons.svg diff --git a/svgs/phantom_white.svg b/svgs/phantom_white_icons.svg similarity index 100% rename from svgs/phantom_white.svg rename to svgs/phantom_white_icons.svg diff --git a/svgs/pi.svg b/svgs/pi_network.svg similarity index 100% rename from svgs/pi.svg rename to svgs/pi_network.svg diff --git a/svgs/phototan.svg b/svgs/raiffeisen_phototan.svg similarity index 100% rename from svgs/phototan.svg rename to svgs/raiffeisen_phototan.svg diff --git a/svgs/randomdice.svg b/svgs/random_dice_defense.svg similarity index 100% rename from svgs/randomdice.svg rename to svgs/random_dice_defense.svg diff --git a/svgs/rozkladpkp.svg b/svgs/rozklad_pkp.svg similarity index 100% rename from svgs/rozkladpkp.svg rename to svgs/rozklad_pkp.svg diff --git a/svgs/mycloud.svg b/svgs/swisscom_mycloud.svg similarity index 100% rename from svgs/mycloud.svg rename to svgs/swisscom_mycloud.svg diff --git a/svgs/nytimes.svg b/svgs/the_new_york_times.svg similarity index 100% rename from svgs/nytimes.svg rename to svgs/the_new_york_times.svg diff --git a/svgs/mav.svg b/svgs/vonatinfo.svg similarity index 100% rename from svgs/mav.svg rename to svgs/vonatinfo.svg diff --git a/svgs/meta_work_chat.svg b/svgs/workplace_chat_from_meta.svg similarity index 100% rename from svgs/meta_work_chat.svg rename to svgs/workplace_chat_from_meta.svg From 0f4a52e8c36595cb0266719e7d36b260afb16ca7 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 3 May 2024 11:45:20 +0300 Subject: [PATCH 053/527] Small change to the hints in the icon addition template (#2065) --- .github/PULL_REQUEST_TEMPLATE/icon_addition.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/icon_addition.md b/.github/PULL_REQUEST_TEMPLATE/icon_addition.md index f0718cb2566..96e084139cb 100644 --- a/.github/PULL_REQUEST_TEMPLATE/icon_addition.md +++ b/.github/PULL_REQUEST_TEMPLATE/icon_addition.md @@ -2,8 +2,7 @@ ## Icons addition information - - + ### Added App Name (`com.package.app`) From 59a44864ac54e70adee04a18155fe2476fcd8c88 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 3 May 2024 17:35:00 +0300 Subject: [PATCH 054/527] Added examples of rounding shapes to the Lawnicons guidelines (#2067) * Added examples of rounding shapes to the Lawnicons guidelines * Minor fix --- CONTRIBUTING.md | 6 ++++-- docs/images/creating-icons-2-foundation.png | Bin 28114 -> 33156 bytes 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2065b9424ce..b19fa9610d7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,10 +30,12 @@ Square icons must fit the `154×154px` content area size. Icons that mostly fit ![](docs/images/creating-icons-2-foundation.png) +#### Color +All shapes must have non-transparent black color `#000000`. #### Stroke widths The stroke should be kept at `12px` in most cases. If an icon is too minimal or dense, you'll need other widths: `14px` for the most minimal, and `8px` for the densest. For fine details, you can use `6px`. For more clarification, please refer to [the visual balance section](https://github.com/x9136/lawnicons/blob/addate/CONTRIBUTING.md#maintaining-visual-balance) down below. -#### Color and end caps -All shapes must have non-transparent black color `#000000`, rounded caps and joins. +#### End caps +All shapes must have rounded caps and joins. #### Corner radius Use `6—32px` for 90° angles. It is allowed to leave `0px` radius in cases when the others spoil the shape: for example, when a right angle is formed of short lines. diff --git a/docs/images/creating-icons-2-foundation.png b/docs/images/creating-icons-2-foundation.png index 5c25c3fcc1a17022d43116404c1cb6742c463d07..eca8d1c21b63fd9e4864083201a1362c5585a9e0 100644 GIT binary patch literal 33156 zcmb5W1zeP0*C;yl&;v+G4UKdoJ%rMYbST{jf^>s43`mCv(kVztD-uI@NlABi-^c&^ ze&?Kf@B5v5F2CVvYH?e3KRrF#{;7PkPz5`HX;0laVQc`~Z{tdjJpPvVYmzS51kB{u^>;R?f>uX?YVqyY-@9pi; z(9jGF3@j}zZEbCxot^dd^{uY1mX(!>h=>FQ1rZSujgOD(=;$;yHnz65rlqCz^z>|O zY<&LwIX*sqYHI2c3YC|afA{X)j~_oyPEL-Fj;gDxp-|}6)in$T^MXCzDm|{Otbl%k zv$L~bzkWS3GSb=ESy));GrW~R3IC(aIwDt&x!&^Q-F3c^znet)j;~Z&zTpWJH51Q~_h#|B7Y+_>a zC@7e{Q2CgYw10be5qaIz)O1(%aAW-NxVrkNsHjkKSfzj0-?;D?9Q>%K_h@BRmW8Yb zCClw`xKV|~ zyIm0W{!O>D6k>Cr!x!5Kdw^bRi+!FRpBY}h*tix4|q2$5X3hRS{_ z!G}nLq`@#S5||c5iwX?|g+c-$$o~NU1L$9P%hu5UJLdmf{y!G~Ptbo+{Lh=f{%hY( z*4emX6!@bL^m=?Z3UPXa3JDYwSB(%OfPs)9fgn^U2nqbZfBS!c@^2ap|0b7(5{c(> zBbg;4Aqzr^cm`)7-d^^fQzc%Zcc&ul+Wr>B%3Ta`izyUaa`!wt{NE(!wD?!WNrRMo}T>b-GWm_;YL1< z>m7S~)}p$s$8rW$Cm#%yhilO&Zu80Ri#|2w$4$O2rM_YtwR1Z{8){LTq*|5U13V6e z7Go4tXcG*}MIzGL|J>k=p^cKC@|()|^ENMy+l<;c?D5X+dhxH5Sc*9qnL;zWA zi)N8*iHF=`YH|0J(T(l5$}ab6ABzT0Pwr}7%_$j(bBbq{x2~_!I>wZX-HNr7R58>>+rdtl87$?VB%#Yv(A zG;Y5#;a|FmZO-2nF}NL<{@H@zCCw#8-0Lm-LIC z8>aEzZg|JOATUfhXaM`#JwW93-ZE82+vLVh`+(d5GmimXW~SPZz#FK-23^kuYb+e&EPzGRD45=U+GezQZKREq5d#u<6s;`*7rdxoSR1AM$eeGd z(3kaF>}Sr3*40)eq)?CxTK=@$c}=lLh|U-jr`#5)m&1*I!j!KFz%p2VQS?S{Pe^7u zqnU6;X~WbkTMf{~JShDcoUs3cg8dzGc`l@{-Bj@CX+P8P0{A$Nrjwf_gPymAUWZ_m-v5H#5S<12BF%~NM(Efs%K2bFWwwdY7u&O>ka~zkVf2T-fz%Xi{@G%D7B<| z-7hi&X{8!9(e0`jr9ZFy*aBfOlToF3=KBKB2Oa|9u`1&a9cN;I5A}N16zDIQ5(4Nb zgvD0e{C+GcqC*SGp8W}XC`=2cM1Ln%*htFkZ{b{NLTna{C*ATFIn(1qTv(7mJ)~Y@ z6buxalT#5F0co`-t>1aKb}W%lp*k?d>+e4i;d`hiAL0~S+D-~9#S~U?prA$!c*31# zw(W$+ZTHkoGsnh`=vQgmkkkmWf97ER^m4Q~IhO=YTjtk0?#8^L{jc{TiD4jD3~26| zrZKL8DeuwBVYAJL#s03y76>E~40sg21&3%(vbABr1F?Zxn7sAH5(U3)iI7GnIvBMlC>Ug9=4&6WM9xwQo~ z$|fEtf7d!lriSuy)Ei1lv#-T)fEqIp*LTDx{~P~JJGusx&BD3r|(_z5NAR>fgoRYffCY$vLd1Q7^^V>#g=SQVO8huZD1c1=qR20nUR$KG_#x0%0AaQi7h%{ zL=-R6!OTw-kg8e?UV-nM^_LQcgPP7qi=jY>Z@?B0Fd|8+x2eTtN?RiJBd0r8=6)1- z+e-t*{T}mbszHxl9Au!>3yZXUZz2bu!lM$pwq=XaQqXgT@X9ZzV8R^5cl@@TCS6TkZ=M z$Bq8dLt${B5v10a82)nWaCxY;vQPPAt!Mj;3YfyQ*zvlpSSGC~E>m-|)0=al0wISb0D)=Z4?(xLZ{PK=8~62G^6P5`ltZb-uV68o1#lh;Xqmz9ejfeA zY}K|2nX2i)=lECbJb(=PTh zF2zicKBsEZc}Kr8(bIG!n19KPjtS5^IsDhfsxZ=Q)2`TQ|DQr}vh~vg!Plkj$hz4( zJv%+|Bt1)mG^`a3QCLtA4~nL#g!~r|Wp2#P@jrUpScx?aAxUI|nZ<_4&iC`k*UQ_z zC!fZj0+`5&5qaDPXEWDu3EX_63u5=|f3db~+nDIZJ4M3U&R zK&Y^ZAd3?y+%@9`UV_4HVT_`J09|SZnDzw(2^?6Avb;?I9eTa!=*xmlt`SY_Tv{(_ zjt2!vgAyrGq_Gns?bJ+NCS8Kh4yP*Q`~cpu;MXqD9a$#n*5s)HqEj82yPF0<|2m&7 zt0Vs)JQN5h7er7LSWJ+6q#np$_E3(SoR%mJ0tc!GJ}(MNk~QEIXcRI&nYmmkMmh$V zV=2?K4toCW=XKLX@6ph8#}_+FjK90n4WrCbQivtc>zW$&h{ADTAXzH;Q9Q)W+2^f8 zsy}IG;U>e^Ctr~1kp2o7V~8@#5_u>_`(ZL8@u=kr|LZX(Y5@~KXQd43S_UH!1SXI_ znFbyIgZ;G~T^{+b{wyA*K|j49fK-29xkx_~3_-LY0>By|*Mp}v|Azl-_WymomI-?O z1p)(vP`5*d@|f{`xbl_-*QgiU+2wJ!6INy&$-V}tDoZI4?l{f`?=hW3Y$r& zV+5mU0nCm4Oqg37rpZ}7p8cGVX+WPG#0#NpM1vs1TMKbR>a$_-@eMTR$43^680H`K zh~<&~G5YMqrc-f1!xIXDpgYgIo{0EtHp%4B&-?g+kRVh6sE41GSG9Qf+=Lkr zd|{4EJM^;)B{1t?7=Q7h@F0Miaq>0M#l=zF+HtR2U@@lDt_Fw}`P#vx!iQs-mSx>@ z5#lv51c|o=KMU&o$AuTs<;C6@$1q%9d`-8sJv`^ZrDcQ*0|KK(G^6uwb@zzK4Sa(S8rcg%!i5Qay+CQ_bmR`K06KOBPk- zG4nxy?#s7`rfa;V z@vUb(q;(L!NNgMdFTcx11_!dBxHR^Y#OO!Dtp_Wln;^7)ajqVJ4JxMKxhe5-pi_|x zz~$}u$I8dS9f#Cl^W8A^O-2*HAf797Fvy>jKN958%F2HNNU8^Nb8;{s3Qa?q;Ew}&A2#S55s`=PyzAp(~M1spgM$go_40*#}F z=UiSgg$*=f1CfBT61K#_00s_dyzLgEWLpG-S}x8)uP7_zkV3(o`WqyK`IOasnRRE! z?*jtpq$k1-o55(hMCmr_=tZ3!d*S+$?}9^Fpk0P>nZ?T_a28F zAMoE|nA5L4Hb(hv^ID8G6MMB*y+1c7pj?#RQ?4ZFt~rf0k*tFJ016~w)ssu0yUs%kJ-!>m zbp5;IhhK3~vkBpMUvBR=MgfjV360L-f z-Y5ZWjVuL1P`aEcf}BP!R5rKWq#qd|hh7s4$;344>ye_h40M>P0St5&GO-cV3s1@}X=VpeqhFB8yFCQzL2@9ygO(IGs)t7B7my$X@K)yQ*`ubWc!IDEt z?3={sx5~j#^uU-k5$STq2p1Z6+825N-(+Z- z+1LtujEEmC@h1fzueWXkChJ6n+twYKvq|BhG(NStk8a%{zls zok~mi=Eur(rkNo{&_X9YnkrD!sjlUxAt#NT7pzq5t70N78{i*?m76vk0cNlO?y*AT~(49lJJ=1j8079xe zFzI7?r-6X8gF0fWX9#uI4mc<@!vkZNstTtJg`^R!Oon2JIs=;J0b3+lR@V`Q6^1(a zT@7Lfm0tc85Y?5@^Ua}h6FIF(>(d`ge%Sv=q1r)Yh-vmxeo#)m?B|Uq1_0E64(Z+U z$>#3Iw?V4fI^p~6NPrsH;m`ZUe6oq%!zO&Mu1|iP0twS9=()+0&U!*w-3Z;K&XRyY zUkO}*DKh!%Q~vsy1!Fn+!5$k8dmbYn5`Y3f{6uDM!xkk+svmLM=?wQn=<0# z4!h;ECGHo*V`l`E{&)bY7^LV=WgTiRR>>{=9Id=t3)qYb6d59~rv%A>RB6a`$BP4J z*<(nMo_@MvgJAX03BUYnUf~PWK#)8sOp$hCAJQkj-6x$PVTaw){3r&1nPL2)>VYf( z$s@IEAQx|g!TR85QWK%IL--&h_)s7`Y$T8ctZ{?{5GIE!Mtn_y?uQj${YAx-uS;Pp zXOuUjb*JePruoYa^0TmVE{cYa(EU*UON{ucLm-X1;de%&oHwzHz)7St&KXDl!OTW3 z*{Sih$8bvb(Mff}Eoy{*PJv&5z2Rk6U5LVXCmnB1s!aQTw z%U)$>Z~%-|25Cp@59kDE5xQ#Kib?wV1GRV!8AhqLu4T+8r3#+)_qSN4v(+WW2ly6; z@5toe^DB`e^lAM~Bqcm=CcuD6aiMW@-Wdhi(9O`K@iN=pcj15t=s{m|p9{`!HM_mY ztPVhHIoih=)KeMJ4_MABJwOr# z6GVI@L9zZ!A9}4p%^BYfUXaU@r@mhNNhK53u-GdBV30>JS5XxSO%rq^n(22Vc3#I~ zj>_#R4p|b?ENbZ<@#s~c19m}$_HIN`>gp8Kf6|F?Fk@Kar(T)))THRI zJblkZ){YJVX`rldj-3xfK9;!>@q_sn)8CJQ^U(pLTJiE=+T!hL_=#M4ESwD=yp_r7X8 z;aWZ3w<|rGa(3WTivDH;oOtD7byA(W?74Ao_zNqoSmJ#@6+DbbQ<}zq(t9l4H5=2G zN_Q;;bW^hA5zQ;)@0!RDCC?Z?Ru6BiJnm)oJFN+lz&0@yaoJQ*!RKEmrfNYYzc|TQ zZ2s`#Oy;52Ww=+JJO=PwCVHpzRGU7UKdwkhz{j1d>Zqk4Ywl7`PX5>2I_Xt?B9A?CI?Lz)unO!t2n7fK zpT9u=KXCs=wS^8rWBP|T02tjpV7K4|8?{0~VC2C6aQSb*0P26j{_nwHy-S0#uL`2=X5;{|y*0(SJk-Nc^u<{xCy2EyMQ{Zv!3` z<&cAMd^gk$-u?EOr8$u;)9o3)F>!7xgP zN}kX}@2|mWJQ^;qf1*iIpYH!U;GAxKA?76_&i!{af4}3K!v@@j!AmJfE14isJ^pt^ zsfW6(t6%S3xx!iNRs@I5V`Wa}BcVRs$dzjF9v<}B{VcF6rAM+9BzBtS3?ul*D=fNi zlCmTivx0G6MDO9uTnNtm{Zro%=-cez2waTnA5`v{5JRW?gdJK`>R3tFg)%`f^7J#r z0emz3*73?+{v%CXyrH;_my~Q8jasav4K3KH2%5Pt`gri`QDo$1S5D}G+9F_tLEIXc zDS_r8e*N0_^*af0U3tG;MM|UEpoN3~HaQq%lmIm~g{+DCVS?$xzucWXa(5A6LS##X z-yj9I@L>JKhryrWG)j)IK2T6$f@{FC{>IW*NdNfoe>rA=k5o}3cf7yryK8yZDON$& z{A8J8lr2kR1$w<)9VIHa-ltTtNSN(p;Aav?my@POdP%`I?{8wx>KN&EgwkF7pQAeG zJKhy6meaMC3z>W8o6K|+*@v0se4<78$SYF_qh3FfboTCXJvD_H%nofu)G>W?vG-oc zQMO*y?myaA;4hedc`G1L7fUftix6eWcpkHu4t-^KrU1!5h<@AL*U_qC_`BZbS8s=v zxoZ}2*NUH4RlGosjJgWK3gt2TM!$E3F@TZX=AWC^=p*OGm|XYtm&+q8~C&Nh;zr@ZTqG(nw}BePWB zau8I0Hjaawjr2yqcJ;+!{p1ZRIPpxT&GFUw{od=wNVig^ z(hmy)7&A%62PE@Kw)r0nl4A49Cznky$CQP4=Go3z&(G~FvGlxZ)QV92vq@HeC3BhJ zKW)p~K7l4YDNOAx^2t}88M_jj*G}1CzP6Gu^?G^8=zn9&$G4wJM<`|Vh3jQ?eaUob zZ_7Uau4h*3y`CtS{O(d!s-O9<9h2d?nhmY0N?#0OtMafEaW_>away`a$IXs%F3abA zBV#($2fs)PE7NR>6Y_mpCkhsYUR@A`Ll2+7(I;oPRE9_zxzp%;QF#u!<*u0$=nG9R z7xgN2>eOh(v<|F%J3gvnJVLIu0~!jpxG{J&b55Z2&P}Bh1D)e*te{NmS(mhRPHdE| z|2BP?>W9Xw<3dqM48~vD8bYibOi2Ze$-l|wl78n|c+Lr$hd4g}X`L`xDj<`|(EEw1 zy70HHbKE)2ZQ)73U(MN!?YpdGZ5wCJMx6hhhyQ~;J zf~R;3agqN}mS(WG$InNc&s~6^)0|W_BOsO?7`dktNM?$7V2xlxoG{#$g0+($y0D}c z6(c0?_$4IG3iJiky18i_=&b3vrxr zaI%B19do8ycsS&2M*A1avHGLFhkeJWn^AJ%A38+CHpP;ZQ^c3LDyy6<2b|WdkLBmV z7PbOdW1+FKs3l{{Xp!!_^8Fg{LKoJE40?S!gijlNI_#WXUd13qsxV+&VaEIYOXSQb;YySatY1WKz9c;+as-!88^p3W@mW zj+`-1!7R?Pr?~%AML5D(EFv6XM6=sLSGX+`6AV2RdBYgRX)!E$+8yf>?M13Ov>ZYF zQm^~7p`3p`jodP^)Ll4xtA_^M;nO5%X+Na1Ty6LpROWc0G;i1p&RsDXGMEm0Vc@pp zi9vq&;M=`YCaIL@ZtURDDw|(;ywd>(6lMMQZZ$@fFEL)#zVx3%6#7|`FsK^zjv?fQ zNrT_wj>(9vp&SXKE+_D_WCWkF=Gz;Pu#yqvx2N;ERm6Mf27l+I?)LrU5qbEh6Pqxs zUz6|-#>D$9(en!Gr4N5wkl-L(neFH%1%IuwYw8?bPd>br=y9zK&-KJT;KI^W6*x`^ z8JZ}7z7iUmu6{A8{?HPFGd`Pg@Ioreg)~j5?tP^ZO|Tn!W;U%t@^>zJJ>TM!!*t?AVgkiy3nY+)$O}y{% z3^%#9*dlA4fCoidDd77gGMqM6O@ZZh%T|WRtbO$N4Rfd0m-~nWj$`lP7ZrO7jK+t! z4WA|FiozaEVcJ=|{u_-r)q+gE1#dPy>U^Vrayhe!aCRN*9NXiN>nfb{2}e*|<@w^# zt$XHCqD>vJD{QtPuBEoV)Gb_&}|s<7D^i)z6zS+n-ln@e?10O1un7yXiD$ zlis`yO2^fHocON(B0KJ2k7b_y;@u+tIthvk<<)jBEpED~y_dgu+?Dk$%UZVo!u_`j znVf3523k-swG<6LTr;3P=)qSU845v#fxxIp5b!^5q2NFm1QY}XAxnW!ga0-0@7sSj z|G%RC2b|A`$ZJ(gDL2@wU?ljLhr2_~05eKj5Hbwd0|woqLF*J3-#2j>bU!F=4K=si8hs4af$=Y z;>EoB`xm>L?5+hh{sFm|i{gx%q^-!u(zB#RzS;wV-Ve)hMGo z8Dw`^SZ(Y&#+;*6gGSxG<-G5>>XitMU6z=l|2ky~7Nkvj%2%9xG z$i+_#5hLL!Kojl#>9NxHGuO63kC~Hc+c&m8mLud(_l3)E&+kX6U!NV7C4I4@hSwW{ zPG$@$skO+!-j|{g`DhGzK{<*9%*P?(51n6SaWZxpFbpJecBm^zn zIg0lASFf%G;DH^f=_T)85F-1fQRdG%U!RISW=+SLkLmBO7RxD$?PcJzZ|?f^(~utY z_Ruh4c<69amG5DuC^d&y*DXj9@qieTJ;OEi2>(2X zg8G;T0gl`LE2eHXKf2xZxIjQ&svgmjKn(s9c>lirKjQD7pn5=GXr!UtGF)q0#DjWB z-rxLEJ2W_4XrtJ>!f!7RXd!?dOfC34vaYtbFWMX(eG>I=co=pBojBcK!X$Kh4*jpM zNkA_4SC}FXOn&$0B%p2o4>_M#opB@{+))C3Q8!Vb-1vdO*%C644nRl%r@#Qf#)EMa zY&{1B0l5EwKqvRv<+9H9CC-IQhb3_;#owm1Up;%+c3aSO&H}%>_7Q&A&h&Yu|9)?y z>**^~=Sq9l-W8}z_S%lffu~+;?yCQL)}5YG|JIr^lZV)|`43GN=xQ;@&{UBU*M#21 zu`#&Xmj$vfL(lH~UpPM^17MXqe;g^?_$i_JI-S_VRa1x|A^}^I5MT%V2 zG$4NYLd6jkwt@1-RmNO#rg^s0sQ%CjsTUQVK_X87sWz$_9{MCCV_v&7Eih@1STk?K zW%!=ga8q9-T6!mW99e#;d`)$&%+2hVkHWBjr>ceO)bzJV?pUQ=Mre!dsW9_TUHT!7 z->>2GZ4RE>T(3~`YfdBVR#DoMva=7`6$-wv76dXKlhCBD;D&k5>+c$yWJPia@hYqS zR__<^oD6SMV4qGJld)qIEzvT?h@dUY(Cm5mKFMpa9+wdtBV~E_T{}pTd9^yyF-@;2 z=YonHR#2C5sZc2E;)wyXnR#xdx6YOv`K7|fewe*Sy4xX1kcTyqQSqCHI>9Cq&&#q{ z9{!9;xGR&vCgY@nHMOLNkVxfK7nUlqXy4nN_)Vgp&jq)UA=&t^biM^BFua)&rE0hQ z$i~xH`|;dYYMpU9!bF+#HSr;OhJ6tsW=f5?cF~U}1`r)%ht0!D@W`BkN+D1nF63VKpPycVhem_KEjkwJ)^;Z;1&ln&cNJah?&^ z7T_1w?uq;BMheR_{rY5#EE~CNtDk?wl}5mut@o!4Y6XrW-t#)>s!&4ezl&64bfN+`TtBG{d7SX`-nCMGO<(a^uPR z(3d4I4P*3J`{vZ73VojgbtYNb#`W8E`IJJrl}?rUlx}0FpGy7_8woMB+qX@WP$P@? z|KZCbJlZ24Msnh&XqA&0k%SBJhzPW3Q;=BG5*IEOvHGky)sueCKPvI$%hSvkJK3k- z>}q~uP_XH1j9b3u!N^ZX$uq;#a>@R7Hl6wzFQu0N!uV$6ojXw1V-psx$*6m;6w8&E z9Xuf`x1F>pr{U@B5Us>Y!FRBm79DK1ZE-Z`lF(Rk=S~L~oKc8bulMjzU*j>BYA#nw z13PBUtnd-~?@j%#lSTga%OzMJM~u+GjLa{)p0kO-hfetd#L~f0(Ap`+swe{Zj0A=1 zn!1FlVNhUJMNIr+qH9|51}@zhV~66UW76qd+BJ=j^)!)aTwsIajK?LZ?G+I*OYUOfhw8NYfjk-^VDz#abKvNh0c#d+FXS2*@F(TK%kg*UPT zYG=GCxKVpvqj6FxRw+>LK^VllQ9`=o^|MQHb=ORHVDG9F+@7JpW$ENL`N1|DS=vz6 z5I3mctSNe==c{<47BYk!Im$`JBsnZ~A#dB;HC{!$r6dveWwJ4azhKMzV?4TOy#O#& zWsQDeYZf+-`a_&ZBmQF>s=Os{l!iAi9AcTtiAt*!s69q5`J{B5t2!cB<;8e+jR`7) z?3q`}(}U+E(cMldCdFW=MNhZ9o)}su*Shc%xUV3W3-^|8?%s$Jx@zAiyiK897nvPq-{hZb zVej$dHOttv_g%N48wGREA|p%KQtqypx#ZAcdF9$9&CVsOjs8T?g}c^Qlrf3M?4kkq z9iwT=2YTqq*-QrBP-BXliJpsRxUkO4+^>17=bZ$g^w1?-{071GwdV<{jjq)08Koa$ z8&-++Ue994%ZY|zv(A>4_GMUqh^f}OeitrmnZ*=U6%K8+np^oXw;39z>ou%0s_)y& z<-8dNBl^a#N4a1W1 zkmGoBE+&+bjUCMGvF1ZhPa?==r!(-u+5G*`jk4270XP4$0A^li_8@(O`EE93fa(Q*k9NElm~wKBg{LjxwLZ+MYARoSn~i z&9WhN177y#>i)U;&qbXsB_G2>p4iyknN4o|cM=ZoZYPS@zf$wnW-9B`U8EJN==i%9 z``B?}ADKE^j;h+#S2)}3MQa82`({xlsmVqc5{r{gCn{2#i0Zc*Eg_+4nX9t9EMA_4 zIkx5*40A4xi^si;0u2$wZ@0KCZLDL~cbYXZ+!{-aLhFyeO9st_7rxuvdOJAj=c)5t z@#%+x%v+0WqWJt`6;4ZanBipWy4YRi*zEPRsC3m`T00@k7cpKSra5eaofOyieY`Bk zj(5k;zSL!)<8^KJ=JLp^t>m+se6G2X=V8Y-OqP2Vc-sc)7I_`6IcELk-%KgsIbVu4 zA0-=Ot+q2YAFiEkyNGhA))(G+?R1IJSi8=5TvLINp#6dTeeF--(!@a1<%CI6sop!FN;ZC7gpL74*{Fy05pwfA0MrT8JicmuqVMWuR7tCl3A zmRl|#6)ua~?=Gqz?e7DG+Wl4h{=_}{-&Dodd~Fkg=6)Cy0(&P5(pbOq2>>4EBGCTT z$Nr}V_W!HF1?EBjn}<+jD8|m(^76yO^0Md$pp#ZRyMH*AKD!E(3I!pI@JWfp%}9el z2<=N!QYb1iH2j#LHWfZs+#F`D+mK2Yuyu-baugaL-Q)MD;Y94-dbDR%*L5Y6g9kq( z#rB@TM(n4!VZlCgAtUYyp`^^WAO(m+{oLNkp2IJiyV>*gCy@5mMW-?1qTID2nUl9f z2V`!Pfnp{tX4vFNjX3@!!iLt%-ae`((_qBxpAW`GW$-)Bg|)RZHf0hw)IfG`JyO!k zTafS^d}d|13i-*V#9X3B8!A*aa0@WFSG0&mG-dn|ly6eHxb8XDpn_gS>n zCj#jH4u-grPjHcs48Lnbs{tkyP1IBRmxtSj`U%mxjPdkEchdpz4C(GWR% z7IKCLt9+(8eDK~3J_ieQU==dQaV0W?k8@=E8dp60aFC**fq&GcKCM44VKoq;YJmqSS1@SibZN%&*E&2IV5mE~qVTF3jti zB8&8NPgChRI^4F%K-Ujg_-u18v#tD_lPT^#Wi93}#bPupe`{ea!VVx$)WWH0Y->}F zuR3O;0v=vc>f!B=*oQpw;h(>tSSlCvm*d{r*)gVK-GOr6 zN$A^ZGl>1nqe7UgMm+4(}vD-cEB>T{$-R$o#?>aw%x5Q87~X=ZAhYcB``hQ z-fU}q96Jh`O0uUutFr*>i#D?Qyh{1iHlf#Bha%6S+^1bRp{-_4p|B8BIP#WfP+cm$ z@4g31^e7J3B8^?m>9`3+v3t{SkU`ep4;NY+Um2 zljl-Ib{8K7tFHCGZA=WRbGmaP^KNXaswfM@E&ndzoUDy2sHnKG%ud}^z%NL1=M$XP z3L=7a>k#w9B+hMhcAvYQ$)ekgA@n^Yg`lxDjlIOUDhZnvx$b%~5qsKYChOwD_uVW+ zu@&5`LIOyd>o1Q{4U-#$EpcC@C#g2{)s~(&2kKecv6kn#PAvy%b-V72;L&KM)Dqjs zT-vCOeE2=3qBH*0JpaSDBB`*j%|3Fw5bLUE{KGgyWTaNC#D*zlb_Sff1~>{&CksmH zp^mIEw@)iu#N4lI#mE<$2H&Zyl1D>MlQh1{q_TW`=5TTU+h2`nLG&9n(tq7Qut_5G>7^pnKh)LtwOQ~VGT zt2#g1vInt1^+VwuN855%K8((Y`|-StX;Ds+Iqn6HnXkLP2OZjLQ$iMge6U)JZ@p}+ zmUKR)C10$QYLcGiGgB3mHYRtgA(20ocvr2>`m(Gqym4UMzdKC7;5#R0L$t0or;xMq zSh1kd1cS_)Ho8C6B;^>q%g}E430%Fhidg?Su3GB&J5}wqxR;3( z;%|rV`0cX0<8KYsiLw&E#Y9HGQaUY>w&NrvOZl$;T5=#8__$`d3m$IQppzZ0+&1iI zR8;(Vy0WY0u%O87!>b) z=o#C;VK)_AJ&^(5@8;YAzrUNPoWFd3$!a2P)eEjE6!C?xFuOfG z{;_;(ukV*Wd{U0iI*4iZ-Q>HLzqqo+(jtxi1utN0-)Rylk>76eoh-p_d`@h7Pys}% z9Q$u93xw=nX(Cv9cc>XSH70hd*daBtu(!Bbl|95Y;a`o5ASBFLPV7H=i zir5QF#i`dzpLl}L)_%leI7h=e9kJ>f+BK|(GC_hogyu7=29b6~J4XifMt9SUzakwu=3_2gO^+3|-bEI5Mbw^QOF&^;nYuP=h$l8ese zq@`<~115~%Tk6G)u|t{C-`_i$o=Chtla}h$gme~=b(RRvcyxKdD83*Gg-uoGucjR( zL34-Eq`Y5@nn1y#o`w*MDuZ?DZny}*)FURp9&{qixgK+8*%;@DPaet6-On5l>uDvPOGW>)F zEQ6nWw?snIoa{9J$Ub8&kZH26Q9t}K{rXGD&TrdBRe17EBx*XbT&4Ds38b?G&6JFO z-QTDREBLD0;ELku4(%7a*K{H1M^9o$L3QL*~>Syrl+vWK=Gb=;)yo)EF*rIN2hOkZ^klXp_w`;mI$AKzM)?1dn81(+O}~) zY8G^{KKfM}_p#)!Q1cM9kbCYf*R&T6{PG38--ASsgvXi*zdd-yP|I!2F$TjJxHnOk zyV4tbbuc?bz*9=IewC?D(V7RQ%^{{!!@ahsE+U6MdXJcG(YTtGjzRhX!d-dNSoez! zW#u|9$(GbpwVr%ekCfz7aHGD1gK7~1qDe+0d>FIw1SnXe*Q2JHpnk{F&|5+vpICE=xrpjP!m}{D`G&7$JYB* zM5%p%Ot%G>{icJJw~DsswJRR>_tp7AB6_Z2SMh};s$Xp?>x$kxo?EL=9yThkc^#=8 zu6#aMp~juNa%JU0V(j7@hV7U2z870L^tB0?kCv=M(gpk^^-%N#H;9R#fY z6txWm`q%#jkU~YKjetQ>3B)+MZJBvG=AaS!(Zf7^?zjydP8nCm3iTR0bf1_FPqf|c z#l@m1n&^`|6ssy6@zE-Lw+o6r6=hb?o9c`$qQVkIQ>)8-M5?gKX1Rf=T2h;U8cQ}Y=u zLLAb0tK;@)`w8G8#7Rgs-y~7O*$k6lnw)e})^3*YA;WsW*bX%|o(a?P`4gNVe6)AV zID14}nGS`RO$=>Q#dew|vga6#A2m<%uew>>j+8w*#ne0)7Troj3D?!F7WMTN^H3W} zMT*exI@s+#eEurG_oU(Vw6s>f`Dk)}jjI?3s+UW7-|-Yk$i{v$WkTTXWwkYaY3kma zhFq(392s5~7^k`YY~m*&k~OaPqIv~KK1PXXJkY(|^Ux*=4NVkDvhdQnY*?y=RPcaQ z5WR6H9n16PH;f+{XcA+6p5K*!?nQc)y%jgJ9ejY$*@`O$)cX8w;+^7B=zc^s*45Lg z55u2@1X+43Vi0JxDl#768(KVE5`GJvir_-9PGszRR?PCRYY~vOE~HFaM3Fqpuf!(w z(o}A#;JF``e70WfxY*gRbMK*s(#~^jX%6})PY8#O@B&>K&@H6}e{Vr7q?wLjA*Kg37z+v)LDlz4FMP9d?t$=?$G|qF2DP#75P}DPw(& z9l~LymOihj$xA2tG;BomnQBaaUrA)qu7 zP&%S0UAhG&NR!?{sx;}n{)_Lu-~DcR{^$8fHte1=GdnvoXJ&SD=ERezQi7?qj6vrk zvBWZ&G(K>HN3+lpiOh%hO3J4{7RC-W5itK^vSq4Gb8Ia$5j1MOJ8Liu5Ghh zmN5vPSlYvd2q5M1FZKP|XF$M*RYdsXA72g~9;x9AL617F_o18{ zYi`QVS3#tvdHag43Co(ZD&j_-$sOb#?;U4Rft4?CB`fC4$!Tjvh&1&j$@_c#k$$&t z;c&XziqrgN&nyM^`;WK{pC_r|ns%05U`yX4mTh30o~44>0Z24>jdT&>O4Xn>%A5$2 zie36P=(2eGD_mLIt(6AmY3$g;Kz>g{F1ffsLi^q;k&;nc;s}Y`qpv&qSCl|GGxrK~ z_vG?LHfLTs6eWH|s=!a+J#V7_J;lYp|2L^p(l_)iM7-V$X)ZW<;_4^POlcl8j(Q{x zLO5BEd^w|Q(aRyqh0YNR4|=_Z<+nwYUUGU1@2wMSFu94lMWdtemAkWr_cDB<_kr|N zC6eMBCP}+C&k%F-OiBkqRKW>tsWF}sY_Fff!f^gEREK>16KI%{!zZ)q7XDjGb1r0I zS}z2%s9>M^ACKi`&%;cw#YuP^Kd^z8z`gF!E-&UX@lhs9T+M&KhQEzKF2>_j-pVe< zud4glmwKsnRhU?6Bg8Am9*KtCro2D)7(h%NFb=)|2pxP~@e^FyVP@^jmtvcXT}72~ zOf8HrDDrwy4lS<}D^9;J3(?vu6E*pB z%WP+%esAK*OMIxpLvHiWbD9Jmc1O`7)kp^Aa==TtsQ3qqQ+k#3w<3q$@=}e0_}=$P z>cX7L+T~H`Qc1C{B~ChiFEuUGfZDKE9O_pfpvTGt{q^kdsxXsA=N*$*z&6&%q1 zG`NGj<4c+;#<_O(B^R@ZJXfmUX4^W53N&|YAp9>7<7tld2X)+;+lRpHz)KW;O9 z?r8o&62F)J*TBg2CnCWk0D@423V;ZM!;}%B7eVSjn=Yc+|A}CKL;ZWxe~`H7{2xsh zB=Dq{6hmklXcdCa=ZkfxSI*xYZ7`pm%ud3$4(6w)vYSKb8i<=h{Cy8jkgD?KRONH7r{<;G(omlQc@>bk+~UI1BNqV-$yXOcG~n>bbBXzB8ZR zJqeKuYwgD|~!p<7e(OW87Z;o@8LHim=}`19Gnl2sTRF zRto1CD5>8e@njsRTqyeWSHRji@t~yo)esm#6v9`r)4)eU{bup$T-9M2SP1|YS3zJz z07RcU;uk}Lo+v-qc9%*eJ%m;7_SJ1WDruTo*HIVG%Bm<{LWF@ckc2~Op*!w-Y&9IE zg+|PGg6Xv0HgnlJA^f!j4hK7O1`MX3zI+*(WU6G!72}tWMcJ51S9;i=sl~$(_zeF@T>HORuY6kh^64E2;H%U{v}+* z3Na5^77nwSHphys*1xX;?Q3pR8~iFpnH@KpZU%u3IN*fo`p^-Atw4&BOA`{=i;6hB znV_O^$P+Lbn<{MoTih2Cw(QHH^4cW9R}nKj!l9frx1c>z$}lnY!ZSdz9)d6^QSwjH zr(iX)v?1n3ELaJQbA*nJ{RW>`!%(jYTC^j;J}ol* zC#!#=>HI;{K*f94ffE#?Ku6$F-c5u7!3~J8;c&1rFr5n5XXzb(0ki~B z*9{fCu&z8Yl#Ci2(?N(YJP$fw=}s|UCr0~I;c3CHrnBIFLx-Pz)~VH#l(-6LuY@wh zo)M)WuVBP>B}ne9!3S9K12jQ;bw`^fLiV$>YoP`(bSpTQ$?vSI$?zk^Y{`zVV!}(TOqi9Tgl%6;}wTvMCt6EGoZeOJg-qkhbTl5Cm9i%f>m0T zbiKI=p`jLVoDR(lJKh_L`bHJuPYzzh+f0((BkIrV~WyR?wUz1 z(b1+=vw!uj?cQed4c|*6z5d0mz}huFQgJwvI3L?N{=fzTSVr8~aF=ObRLhj?Umg-Z zroai)%rIh+i5;s)0C#t!+ubk`Uqrhnn@9bt0uw}ru>h_6Db>|km8+COXp;_pCgawa zj_tr|RD9$Ie8Tgnkq=F~EPy3Ch67W{)e(~*SHhW3;*dzQ0n{RFCFl80_ z>RgjJ-8>l`!;z*vI#P7|`c)79QaRF2<*^SE<+YP>kAN2Sb0;LqiP}z-3dnNA$KtO@ z{!X;7wN$&jQN)xv_ETz!+Y#s}oiCVjzL(rZO5GTSN7j`({0ciTwW5y!dbC1U$=$D? zF_Ypd*Ve7$39*@ymQsJQF(1{B!=hpmW+@|0%ine+6QlAhV=g26|dd8}aG%=us#V52gyb9lXIvQuY{yFL{DlfSH z+T}+Vhffj8>kxy zn|?6uQdd>KUw14fJAsp6wG*h?A6l$YTlmdV6XL5)@sNu?IcCFe%}4slqjQw^uXpU@ zA7zOF#|lfqR)~EEFCll5)-8pY>oRr#rvf{i1&Z^G#ub!u+Z#y zzMltBiz3Z|r}IBUQ7E8w55FL@GpJUmaP*$}AsZkJGQR+wYwd1b52+rP(FZ6AS}wl)aw!e>8kW)c=V8MGAI|sw z#2%$fA=J zUJt!+Oj<1HU%x6DFMKRgiF2?)X4IthdsdYrJ1pe@Zi)xrATmMJUXT2tjH^as3Q92VInRNru`UZwyh6`hB20 zFm?RVdr9Td;|~@NVH>{qie`w1InYIrXBtt-8b18!J7;;(vvQIM*U5+AB+aJ4XQ-%M zDA1Wvo_lyJfDCt+rk4Ot$6Y9f%{T2cRVd=XrRhyQ72ip~+#VcKH|hI2>#1PDHWVR84TkD}e_sKc!8bh^ zXvzLg)WZIN{@wgvpEv=`8>=jtf#Wd-%FX%4u`a7g2u$J%E_K(lMzTIQ*lm=;ShsuS zfoy0#dcQ%716eDO2!JbG zd%Kd)RW3!s%#V2)1=|v5$1z+a001~$8AY|sMthM;l8V7`*5{GS&B3mO5e}i&=Dlsq z$ahnEFBeE*66h)jH<4eFTTO?082zp+Ez*NXWnqu0-goWp%=9L~;eN>N#v#SC5dy5~ z*-Jmy(!sK`F55`XJA37g@4%JpNNJ85p`vpg?0aN(h{sB$#7WkV$Y+-abYSOdwW>CX zb~xlD?x%PDrDA(opy2ntyDTKid6tTrAdeQ5NThLxg(6eAzJq`cxd7@$sLtfDO1WCW zzm6&iH^BnktK06e#Wk6B234GO9~y#R|D&8pmW)d^y8PY^DfOQ@zA63?U#o4uj8|qB9$R5LWps&)F0AI^7sF+ zUl#(#U6_Vi!gy(YP3iu<(Q8U|QV-;w#cN%kzgz z`F9%MWk?n@BS6sso#Rm72N<0^zaH55SLk`!QerVaW|7P%ZNloWUQPIvH)_>qco+1Y?;VFkCEH7X z`isP+-J(M}lRx|k^0HsBLV_@3t3v!P1@H@of#B>eBROzfP+-JMdM_ws=gccW$Uoa< z(B8)!gR3S-DR-{GF!sH>MSS9ujNIAJb8a=)^PO0xlv%fYPVTD~bdquTO*e#*cXny_f}D zOsxL{TuTU2ObpB#pe8{$j~z@N8~W{1G8O)3j=NS}t+c7UFBG-Mg7YHeuU-wJLq%=R z`dc|kYK}8czVL$Jn+UcZhtgNzb}?S@9(GUdtDyKSf~^;!^yRoJjF-j3%{)@bh$bpa z0;kMaPKDT@8FGz;9v;rG3~@%2;{Xi z5k^}pH1{4tdideUAB%Z&9Y?@ePK@(Jl*y$S>Y-qq#%@#yTotkYN993CFELH)<}L{* z*g8dpKsd_-wL&oKmxL(B!vhaY=FXjFqpUvyctPFNyclbgD?WXb7WAhrC=c@sVca_O z9kmwECR@{}OAMW>zK|K&R?k}o!!k?trxf)Yt4sQ{%f4VVqm7KKDEzZH)qsQavcFIH*U9isPF7;>B@x z1%R_OiIl%1`f_x_NqtfQ^PlcEg|e6H)C}mdQd&}eg^=K@q_}i@!o<5=3`F)#I}NKd z&&AyDH<4jEf~#fS1xWDGNM+<3kr4?{{oL)!SIO`ZEm=A1UW{FdREpy7jUnmL`S<4} zR%4-C+@T1Tm3Q{}COjj5K*`Y^uqaW~0hw0Kb&~_E2!z!2Yo-^v#tb9qiU4sZYhm+t>r>cKI{9qqt$fol zs67{siV=5%s~z)$wM&2){Q_aSGWK+>Pdde}O$wpTn8b-Yoa1;RGG?@}7AU5OLeU3o zEYg->uGI9*eoKbhCnEg1L-1+*JMGsH(u_%LILX?@A6g}%257s7Wp3T2ZZNE^;=CS+ zK)KoA{s`j7Jr~#VEBB4%X4yBCzM#D(<^x5HYB-^OAwwYDa}~5_ zAb$|;sVVtp4Iy4=+UEY65HJlxOOfJqe7mUBN=D|tIajG(lb|2t+-Tpm%32OO zC||AOZp+MGBVMwuu|V;OyB1|_zp>L$%#TB2W1Y}~W3h#M#s2NEKl zb*PPCTqO0ZhLy_;P1gK!+X?P@ba@A5H{2QBaTq5Cq6x6fGeQ{&<V&fJPOKRmBCUbKzalI@)Sp0-vk)Ml=zE_B z&;)tyx)Xd*+7woB6)vKdDPIMJHf2?a3WWBQT^-XB{Otyi2)Z+ZqBzY|iuqa^T zw-Faks-?i|^Fzu*Fi4>Xjz|1gcLEu+)U8e8lHX*oLCWu8=&h9kNm1pFdwT)j(~t9? zltJ)oQ2r*<2{^{S8n?c$US~dejU2Pej$lc6X+eN{%;>Q%X)2{z%LEyb2E@E&IiR=> z?D!P#{d{Kvls6^z@$YgeaM;s6ZQjy_0>{L76EeUKq8|^zmqHUOINnpEAZQ6_Vx@5= zJ!(U!Mt~K9Yru4X`XfXM>VBkyl&8y?9>)o5cHND?&X1wc0%(R{m^rFBT@P>yzIshQ zB#d1kglTROS~j;TV%B@j4IsgVlJhYR@ImZn*-Q8xLV7&-$fP)~nUKJjFt|WcMu@2y z?M(Lf*Zcl)^$zcdU=e~>#!@uYsL_ILNv+Y3znZX}^9~Uz;~!Fq7j=wLK>-$?5s|v) z`?1mV?d2z$+;oW7{-J{?1i1Ugy#&W`1vygRj~mH5^+dk-04{L&vzrhVufg`$ z`{D^=R+OL{1aravvq50sq&)}$>R%-ze`fJr%;dv>iP*nwe*>cDp_>h2?*`ff2{0%J z!kjUKJ9a_ZueGtRcbzS(Dq5ceFEb zJLj*0$m7cQwpg*(?ccHQ)^-IWIp^Q)q`j{COj!9Mhjh!JGk3_Q&#dvQW^TT?gv-nP zAA7E&rTM)+(E6zN3J`*1B5Zpv(}XzoRV8*!|F#R`hdXh^f?vPp=#})D^jkiUlopK8 zj$R}?#cFmFKYx$Sy0Pq7eI@t3SS)_Lpj1P#BuOFY(W0~FbR@@7RI+o7eS(q3ik?KG z()<^)x@?cgeW^_`^WWdv34ccukdc#+~-B&)xaJhkYsemGtfv3#62BGasp_BWUms zX5VOj;z^#lKHtbFiy$@1{=OQmcWgrH`Ql0_`P2NDit~~`n5d@j7tE`)Wqqv>?18nv zp=fnC$l7LE;8EVm`%;?h5M~p^pj~Fg9<$jr*n!v^zOD@;24r4tyn$8CYozHKH`jBX-$C13z zygB76ANjt0s}z+d6%;4v#dd}FmCtZa^k+{#OUmt1g^EzjWvffNwFGyN0Xn`CLJp3I zxG?)#xkNg+yVsIl*70uP04&dQi(u2dZtyI{?~Qa${iqqxFTl3Z_pNv2hKMG<}=t!BRgamAj z=5F@@DY?7-DI8VZ6j%<*l@*$x*GAMhrlI$^Ey_9niImUWBd-z%`?S8^J-vUYPcW;a zh&!50{MJ&fEn-D9LTG4}s7EfEfsv~I(&MBeE#?_Md5#E@W4Whfp9!-{(x0cfy4@-s z>Nn$P$r*X>Sd+8or>H`{QbF%+qq+;>dZ#0U{h1_-)hB{LIGa2@8pES_(g z#tV~jmmMTaId_|4))u>y^$gvn@6cb9mqQuc+m2EAVxd4=RhJPunFM{cXRVfExXih6 zbQIz+@U~uN`VOm~c&ALwFHxzU&dIFPU`^tP207VcAFIZQ?>|bWN;MmyrY?auezEdP zdDdnXq}6ALO)&s-U)zsJ4U$Sj_Fm}w*mdvp`(%NHJOwyo1s0?LIH-Ea zeLtE%{&x3Hh*oyOoNfWngM&@&WoosvO3g`!&Y+z%?{DK>pH=GbRhDs_EG@LIiI&HX8koF3eow9@ zzMz~COX7$V9a8KL595r4YyWsBr&iw%1mNj&e3C&nK!Ui5Umc$G9kXhC>^8jcwUk$t zwT;O=x45lrIL&lZ+vF}p^wf4s@utpqHL-8QiV&=C=7W<65EG8j)Zd*?%nUu>>B!8p zpGgRIA_Y!(Q!Z6Zdp?EMmR&{lUTp@*RHFb*&Mm+>_L>byD(3X$T5+W=m#o~- za9e#op-PJH7ZIOhwo2 z<=kk0FfJ;Owt22y)Qw}SOJbd3W_kWwPIfS>*6f;D_0(<88}Vv`x2f0^C}%Pru&3ru z{mfF9AZ+ocLBQ+0PrK`sjezXKWU>)lv3m8%7HigU z>%QOjK9#7}RQuM^=}xz?mt)xY6mvVNkpgSZzGwg> z7xrmf!#-R1K}a3s*L$MbR*{q($+u};730bqkhhgs z@VBvFjo$G+&k)BJ=qhWjN0`VDLKO*9-?LR!R;8TQjKv^T40 z&HXjJL1uUh>EKLfeQQt>2o)Xw{W-;C8>v76|9X>(Qng*-o-n)S?^Gf=iKU&&dUEu1 z!c|m<139w|eS?v26a+7DH7um7yIq@pY_T!yw~Df`+HVE?wawI-_XU>8zI02^V@MoJ zJ{nF3V|gWI-F=h=U6m!P4?jPu9GKjCM|qk?dS|9LM5A-K4)3;ovyK3s?YbAv$t zC&q;b2RZ(82Y7K8_#d~2f0MjG{pU$R*?^=jw##=ys_^&NgrIoG1@Y!LwQ|O&g}9Lk z@b-!Fe@zd4%SRYuk0NU1q7*L=mY1rXVzENn?;<2yD4$=Q3>zD2MZl# z4i1k?6bMmd3XBWy-YNEJX0&?}+8ZTvH4YX!AIC}6~Xe$}qn9&pQ4~-A_fNe_7{UwJkhg?Ydy9GBa9Q>N@t-s^L zF%=Z@wwNu!io%3dBo?;Y})(IW)U4Hr)(-ELB!gk zSV%g~kc9^JR%UrNrKv<}qs%wp>#R)UaIFg!py^H-$FyD|=y&q?;ppqa-Z6j37N0_j z;a9tdwVosFD37ueg{iVzT_V=o6(xRM*{2Oy#;d3kqm>+*TK`94nhNn<4tkp=1K0mL zeSbl(qQ3TUxi7PQJJ4Hdr9!Q(W?X{^UGnV+JLbP@_Q+|_`gy8!LRY@}qLb<70lwCS z9%vs?z9G6|z3UkE?i-}n>GY6(d%3EWZEF@)Ftcd!yv?G2I5ZG%AxVO(ua_2aC&n2j zKkGOo`L%r)+Uw+(O^yzhGVe0Jp7k-;(~6yI_6D>#a=>pzM;aMqoAIP ztJm85AZGKad=!ASG%cg z`|867^uW2@`r~Be*F?w>kxI6^kQ_Gl`jzOHCS9*OJeX%~P3^v=ou4QEUaEaEkp>}S zNZ03Xto*h(Q5tNji`Gc&eIc(%GdGstzv7lH_NM$~&p7!Z{`q{&)uoVZ!BhO|dGOhG zO?T&%qQbsi*Jb=z{$n2exoPmBD|P$+8`G?%_cQAufrrlPXJf6+iuXvZ6{k)Qj&^^& z-``a`Pnu#PT8c*W>{rDUhtk=b-s{|Y);iIA;IGWoiFvO;)QC?0s< zVT|MU&<{}^GP>E&RuRq{HmtLJuhNdQ6+zPeg2?ZZYEqrZyE|G+f5iZLPmgFiD-J(l zfxD*MXk66-^Du%$6DF;vpIz`s1(7RA)1qp28CKRtt3*&Ldi>Y12vrK)qb~1(Pelez z3%4eWR90%Zh^z)~i{lMTV>wu+Raz}m!TlthT3)SPN3^hm5ZMDtA>qBBXqCF2_dhBA z^cWa4;l}2_iPg^J5R5e8Mn5xgme@rh?7(vw841A3zS1fws}0?=)pfcQqa_~&oeuTivoTd6oRDbA2cr(ZtcG5B8BT)CE3IPGBsaT zYo{Fi&hyuFMDP}cUucyoWk}W*I~0pE2jj2epV4Z<9Cwdw6f~V{0>?|`Y5+TZK^ptO zzPQ$>C(o*SN5yi0J7$73D*JnJ%gL1A_gcaXV!$i=5Y&1(Qw=Sy^u6EYt_Zqt!k~7_ z1v|2PH34@&jH0-#!wR>hEq`@A=F>wXrO`PPZoIkuO};0csU~3-Np>-STO#F>Q>3SN zB84H{J2U7Zn$J`Wi{OGIwd7qx`0Zm8ajUD z%-D2xo|!N3kt#(QyrhGY+Me`~AlvtqA=VDUSeg_#cd-9G`L`>6W>=t!h!z4(nBI-6 zANFY1{Y5JB^BtlAVo+n>R+uNgo8MfawBu}A|2@x*c1eNfB=!&NN692)bJDaxG+{mJ z%QM90~xZd#@Oq&i>0 z`y0an=?J6(NI`SimgjkupVDQ2vVlMFi@cBAm*v){Uc8~X0MOG~?k$e~WH)2MjrIZ= zNbAqHaeH*d8L5a3&;LQ9gy_r@rVMa)TOa4GDPzB|FYI0Y)U4g@vt)-zpvROO>!fd< zaEE$5j0E|2x08OH|9Q`f(!=bbzfZ{bXt=qYok$lUZ9-P2f|$q?)_Sq;)(4;i!SiMG z-#w2%X;3`(BcqMv-49>ntD0z*8hK%bqX(DrtAE&Cok}v0@fZKZA6k#gIf|`xodSaY zXzZflH@sS6lRP2!x(N(M;FRdCj9?c*wn*w)WtL`uD&RW#dIC7#wVoTh6i z;da0gve|tWbW`BO$B(||LD*^6AHMP3l{z=4_U#1Dd?=5*sd;acTo5jb>K^McbWG8A-B#uB+3eZtCs$IT14gDFX`raZjP9OVE)N z*_{j9B5CZgqcr2X5HYRy5A$rvnoEiquYfX;nIEpHPpCq+507p0@w7@id_;{yjcBG% z%KjcPpld)F5w|4Nf zb0=YGHtA1*1SRRCBUjn#CL^YVnt5gNtt^Rl7g)?C^QU23+P-On49Lsim0vk}TX?d# zEq439(k0Uh6&y->;(Jf8Uc=4nf_h5d-duRhBB}ZpQoR?)3m3;HFNA+nvsn9Y&$npoV zWf{0@PAQu_REl-}CP>H7qUB!Fq;OnxN>1qTmr^X3bqYwjOl(fRvBhKWEqyB@?@fh6 zdJ!=6l)_KIy0JG6_}bW&?2r>?Vq!cv5PvO@N zBa|RaDJG-!+YbJ)=1(|XeZWaRo+&7TS6nk{k98;yQxUf>8s*6?Z<%P*;ZggI<7)RJ z;$NfLGF2?NyFcdKeoAm_a>!H0v@Rj&fgl~@oSlK=YmB?AS@WiopGcj^D%sYT#4!nh z6m@c2StHibaaZyrHceOzgMf2h8496!;qG;KjTT2pbHM1LHE-}bH$FTcp$RJ!zo*cz zEo!Xf1qw9cV1Lx~d(+K}@PG__R}w6jmSmh$_?3~<{gykRD$`rn06TQo?} z2a(G0nkb%gS3}xv;Q$cle#dV6DI9?$0||@Hxk~P+;e5en6R!-CjWGfxL2&qiqczac z@IZ$ZjC|@>^268~mdI&Sc*B^{#UD6H$!S4FE~*{B;lWp-5G9~J%0Iuio^o|OW(f?S zmt(d@N`_oR0dLT>z2zJ|e@v0XL_5UXmFo0`?D>ci%5P)>mO6rW81py`j~xcTcm-&ZNZ1WWtp2rw88!@5>W{p-KU74hihMb&WX~ammmH|%fFC|H<9+rOVvmZ=(-&1*O z#>pn^rX^M>f6?Z3q=AGYnpyHTM+2mX=$$*#c*D@HxBWYHqpp+oE_Bc;<=H+0%p2Tm zJWf3l@>S(YJMR!p@+%|21qr`dV6-V=hHP6Gju)zFb%f3yDCJi8*xAD$RkY z$KAc}eOQ&EE`|>FCT;kTRe|WAp@#TG`|wwVp3I9|I50c9%Y*O#{_Us4>TW2x1(<-$ zq#7(0K3tJt$|6)$W(T$TK>w7gONjBq8r(J;WRWT$n5dLgX%!r@skw?WtNe@~E}*S$l&#yvoz4EZY%yNVM3r3Jw7$^<5H|(vS1t zu9&*eE!CH^6RGVmm^$eCvB+KDP-kVtQ_wV!#UO>9Khm@1FU}%N_uqE_Wg(hu5K3SS zrWoM(`62nrI+gNwi5bU*bI^BXxKJCoBX7PH(0G8$08&6f(pxl#x(o(I+yM8>^2q2v zn88HB+^J>wsA_KL_aBZ1la@_?zLxO0%poWX6HPJb4%MnUE)NG2fWaiEB9K%57BDsp z`LvQ-T>s-t!qgixmO#{tcBBvdlvwQRg_tgqCE7PrrxUT@Rmnh0y&xc2988!#YWVi=BVSjahL46^ST0ZpFASPP zwMsz7F1%jiB!{>jsA78C7@+s|sgC>=%Yo%T47I3bf|{UJ>HtN*nRi5KpZs0gfJF0x zf})$e#m_nb%L49a8#LdcCRaR-2kwHB3DiF&v(TJKrD>r6lcr(To%-hEoc9_&Abl|W zefhvVB|@fdDfsY-z-G`jVRYt2_}j#OQMVk=+==N*0@lHJhj@}#P4d*qiE``4R_b^+ zI5G_4{n^>}E)~F7auvw!KnMnSQ8V?wb z`^Dq|YDP=6S7ysq5SeehANAW98{meTUy3!3<$z5AU#uLpE{?TbZYF?X5GPXyybCEo zF8t03Yd9hLoy#V}2qvppWL?J?6RaUz&4`$DEs|Ra3zNtEBo( z;t|FkoWP}a6{6Zp8?#(HEOlxPZprU~I7_PRuRd)Kx5Y04sQqkiOuFGKJ!3N*6UCu$ z#t#!P)Xsh6$z$qxz0d!|*~S2u^ZWEHN&R5I)fRNR@4Cz!2Js;Q%e%;caq@~V`uy&? z(x$c$%niY(4EAM0*7p?^nv9M~nvSmSJ7=oKKX0T?tXmcj4xvw3A}d$Su1gns7f{f> z`vZOERQNQ1?1LRWXQ|~YdKwcxL40e&q0CWB{}qSo2E)Duk*4a;%_ELMw-nQiGD6z4 zJLAD~Fe0ZO0w@H55+VY8UZwQE-dtcK9PA?a$LIe8)u<-E_4Mbe!k}?2)&wz z(bKNhVrjUh`n_M8R+E`K-==H-oOs@vr|Jfjt*}8vu6egwR=!-MS_A_jfCJzM76Mhl zz!4}I93X&!zcd5=_YWH2PbWUhTqt#=G#3Ne8VP-~at!{6<2~wJ0Tkr09F?+5#g(A2 z%nM)w-GNT!tUySwU0j{T$(2kG*u90~gG&J~`y**7Q&f68wIo!}7v$8w#JTl+GAD=q5-2 z%t`ix=MgRYP^|fz1iGY;B!J`+Cm%AL8YOeMaeci$qGS62l9x|SO?FJ1^o0Zv3i2Ju zyUe8y%3v@$l_7v;>v{||%ItWfEX=Q2981jvb6B!llwYT(q|H&-n=<@r>JjYZ2uwFmWmUz+BH33EsvUnv`m4& zOoX;889GO`F0Ek#r?rp#Yb_pe5W#S|)JR7Rgc}6`75EQL|55k9bPjg@t#jz#hVZX$ zaPJ=mq4I~s|78++=fphDP&hCaszt&`i1W2H62-howu^(J8&rpsFchjcOQ7h=Z?3{X z0Fj3z`;!R=D6I>jKGkQ4G@C&#r~b?DB`ItvjRcA1>xdw=jwdIN$(7gX9nr(hU+a1Jd0RN;gP13JgQT&<%owNXbyr(nBi}(gGtL z(k*BBz3)Ez+vn_a_ILg`To*j^+-u!yt$X#X=OIc{U4a1qF+LU+7J-tYoHiEL127gA z_9);1W@RgUh6;1Rwv|3KQW8v=jVfiL#r#R3=9mdt!-6R zRepYc;u4Z^ad8kX;Hj;y^A5uU^K-u?_K^6f>2^H;rw$;-!@`s^9LNo|L*#!KErMj!pn^SFc8UH{597`g!hc zQ-j~;5OKrJpFRRN%c#Iq?~UWq_KPm!%IKgSm1`s)0)cZR=)LbF#N)kb4{+mM?;#DZ z1?5pv{at)JUlCI+Z`<2V-hsuc_*t;egyjK%PQF}l0w4sl!pBm_hu!TCv^NLDcY}ao zU@<}{9}xaa4A{v>6}pOny}kobg_`qW_nQOYogmr>FcmKJ4K4gN6|mFoUx0sK{(Ja; zqWyR9`~Mxg|5J{y|7I7wQ(!MK?@o2tVXOE@%7zAbu_Rb@612{@&`b}14~;}P!M=j1 zAa{T6Ltg`cAz(gi`2TRj_rH(&8i4z6s%QbYCr8|^wMtnSm=E0#-0U;I?j89!{-?pO zrlfzwo^WU~VVt);d{fj3BgO?a^wK=GgFJnqRV+drtL2IRE<1Uk6aCp^?WOZq{%j*+ z#~3-UVc?r@w|yOIk!RL2y)RZB^JIJ*B^kXsNU94MBrsA++bRkMw@Qb;HT;|wyfZH4 z?4HkLPMA#nWTBob@uJ#_^(BUi6%z|VLNC>PApx?1g7B$zO-pjHN87@y-@~L8&X>Im zx7hl5IMCOMPaqU9#qG8F38B$r7yZ_lYMH%uN%y}$mITW;=Sl{ojQSRC3KkCKWCEfW zuJR10ct99sqIKY&-AMoDK#SFMuk0G}g6JC)@)qS6U#@EXxceV5{M{>SDnBW>!-T>; zRgxxE9ToHNuCzQw$)}3dd^5%xzT@^XW(q0Q#y`A`? zMiL)>>5FwYtd31sz7mOo?{=E1UoQ=8EeGQ&ncPDYGci<#Ux2WnuTezQBuPKgy-b5s zU6vXrDv9x z_4Hqwh-+i80czadIVXeI6zEX-&azigxD$ z6JdNsWMHI>!!%aW^opg(ZTCv*0piM5)YcIUjw&LPzJ&U0J z#I;mu(a_TNYOdZ(i2@Tflp6?xg;F5M_+5tes|y%YgwWGHeC)EvOhdJpXmW2)(^EmX zl%~g!ag5q3@hi=?g>g)7ed27#1RW~;2Ej?7jfbdA5wWQ)(vA@;9?i+C)*P;a zaxm(}+Jqas^Ir~p@DL_T%o0+pSZoQe$77CpT)=Q2`Zu01F-u_I^VTi-=ec2I(zmr| z+uDj>b`DlNTWY!V(S{fum~?@(#xr;Mlw?>sUWI`J{8OI-Z6`mT+ievbM|L`;$;)7H zN}z!v(t(dJEsM)W#;{tnf$U^66k*U8Bx;#yEzip^xlDVKzwQBxy3f(-Mn!LK6mf@R zL`Jf~AvJ_PQ{RAU400##CAb98M6@l^y^*kOIEepb$I^U^aR6AL*nT;$X3?WpbY~Nj z_fU%}n>hlG4G*1SvJq>%LQSid9@8@MWTqPs)uE_o`ksU=P;jAR~e1{@dHkYntrz6H8@eFFql)35!GOtg#g8rT43GZi>|Dej1qW(d6V znMrUB8Do-^a!2qM(n6{>BJA?I%H?l)%k+#`KL~!!1U1QIbTs+6?)|gARFg4sgBvP* z^uz2u4R`c6q7ZQU2FSH?Tkl<@+vg>1mTS!@J2JN|oicMloBF#9%SOEtE3p6cxsWMO z#2>zAM_a0C@`)9DM3*D`CYma>nDi%J3T*|`$3K>vLs<1E88*pizW6aO6FQlz^?ill z9~P8+EL-Afg|b|siqhil)^tq54~#~+R0Cw59EkxiJ|#|9$WYOp&1m6$k`nx7EQj5~ zMZw><;r0Ie!fjF+mZu}3n2bXPZ4Lgc4jn!@_U?`-CmWcw_ey1|PTk!>)(|E(Q2SqE za6~;7b%~~K1RM%`W%r)k{MnBkA=_=tDSNCkQGRd1Lu{>^>k<4bA`tfR(Pi7b+(8|ij(tM23?yBj+&xM8q@Zh z(7Tx1XOP-Ed zR1T#0%+J6vQjE4=17p>uB=G8pqry3)(!2b33^CK`&uF7fZkP2IgiRV#C}9ZLU=tDi zGyiPC_(;3i``bhyU-MR>>4rCrNx|Am!MM$uc3M^B=XEAv6Aat}*mP;!%_wkpiRAe% z+NkfmT)wDTacsluh1?ktz`e5^Cmk{daWGYXipSXdw;<@9LHFuUhlA5RA!o-`r?pB{+K;5|%fAF~-$iRNw1n2tW3<9_jQbd5 zT4rtM^i)@GlUqM<&iSq~qV#~&9W5h8%~ot>Xar}Qi`R^Gy9!dDMpjIxWWQgJMdu)Q z)x6U1j@^q0&$IF=sza!>-$2Fy@}*8&MylCrGrovhT2p58Kdv+j$n>a~e9>Yt74Tbg zXJH{rXUoFdz=5+ZTOo^liSLPn5g*!tE-6iAc#px5~!TZMrdizN`^BG|7R8NHK&{#Jm%YoAKkv$NbW_D%Kp+p_(PM`hx+?ufe_=>G)htkGuhs^t*LJuSKlSh$)%e%d!nATd;#G5iWB7dv5jkMMo9h_7P%HN&-9ayFKEEN>h zo*M-L?J_ymH1M|j>kbck){@x7r2pmbCBkTvn(k1t|4pmcEFcxVULBh(pA#ew6)$og zN)K1AHk>2*&Dl=?tI0Xv zzzJ>Y`T)OTqnWJ9Dtq>D*rs75Cr7&1f_U~1a`0XG*}Oqc0cLbI^+K%qi3Pce z)(+3yV@g)#Xu-C^HSgj_>x;Kb>ql~Tw2Gm#=eaw|<@FVn$3xSE8&hWL3QHt<4dkzD zSLO)rVFXGBZu&^vWKdae)wPTkEG$nY)$WuvIxLMtvT+idem%lyNt{mLiAP*CxVpIA z=zO+uA+qsM)is`}nzw>7uTBDEvQjFNht6KkV}41eU!Eeok&455#hzfTpH^BE(vdrJ zJ0%(R@Vn&AK{uXo*%fc}@?+rwC3N@C`S5SgPo<`Z1}@wGI#SKFU@nJT4`U>MKq2m| zzpq?DB*%~9krUbYlLt?YRhaL1d7|b8BGqu@i@u2sOGSC1d0mipI}_~vjW$J&I!<>@ ziA{q~-HU8}13QZ19Nl8ssUgz>MHJ_iJA;)+7=6CE>c9MF=*4C`h)F*5qhpZAJ;(?? zr8;kXvtk*!pp=o!9hEiOZaaOI$>#Fl!%ClCkdCsJ|A(=MldFT*$2ZG_W(nVH-eLUW z)#<2RzcVeo5Ftl}AZVfL=G~R9yS+`NVNcd9#?PakQFpPY3poJ{|1{WkK5>ONdZ5N!@sjIA|$td+HxT3X^2(|r_n z8w!D6`J3=z1MQE%=6QAQ=Mx;%Jl#4!Z?S}~cZ zX$DcIsb$xW3vT!C>IqT-uL}6Q22hRnAdImD$gcnz0G7;y;4jx_R07ZL4si%xU176a zIpvbI7%v~c;1#gKhJHmnfvbMVk54Y|I>9EM)o({3tnc5gG6fHw<_bPYbPAV5QT?OUh*8Tm6IkomK zR3w~le?N{2&;1eKGho$9Ox?+8^P7C-*|9sNbRo=j04=j0UNXz3+*d&C#sK@amzEYz z#!hqo%*+1n#2l_SqGESn2Yv1NKmo!DceJM_^y~E+N zihjlbQB65M#;)vidQP|TrfyH_kIIRLh7;Wu zuX&9=6{9{O@PPNAFCDfN7$CC&XKn9@yId?%|JuBI9Hr(Rjquj}-iIK@U_1^~WVonG z=DMZ~3>3N2ECBrQhloT22Fnk@8$c}2`VCNh#6L<_-5f~SN zAKz)}7gVwvw9Lcia!?`?Q}eoS#7qvaRu!9r6B|QZ4i1bZT2Av~m!){y{j?6HueeE8 z@G?JH##aw88u1RyEp7G7!^ppa;Un}>Ne%-=9`zeb9ue(INpPo=+!A%_sxgMIBls5z?WilO@5_O7u@fCT!MfDKN z1stXS>Y6<2X^uc_=!whixHq_y0Pl1Xgh~XbbSTj@D;;;F3$`HH@tf|KQ$}6+12AgO zc^wHdBTkoO;&~|FFqfmUki`CAd>o}q#zVIS#vIsvD&iyPy>=Vl;130YVEOxMJaVUV z94ws}e@EYEC^W(wfa%N_AnMYRCjzcK$9P#!K$vI}Ux%iQe&s?JQh5m$w5n1IO3Eq% zPbXNYFdR)*p}NmH`JQK(G3gG>e8RP-H+BW`h+L9j_@P*(tx(7|7D|3D(GOefTM~pE zX(acxq{$L6!n!-FnG!~QF^(@v;iK`>O6jh{4@GZ^j4MYgNnr;Wy;h7Na!bs`mFx9! z>de(?8aH%jE_xE863DF1a%b8s+YXO~eW#d*2hZ8F@2|WnO=FyEYo~WfA>)Pzi7{Y2 z@DlO&7gVvbJef9xZgC?*CZT*Cm+$ci;A!qO@JB&RpkJbI;;%rAAeXVrWwYG}`}z1y z)l-kQ?pa;TSC2aW z=?@siOlR0^awTuSxzIdCTvL-5D zMvE$tby~wc+G=GNiLRxxA%8M>m+I^}H#h5b`uRN)9NAJCFR7w0XNd8@K2aG@+WK<|S=jUgRt*7Woihp{LBZsbVeMz***GLJp&$?-MR@k^MtulBoADv%P z_}2F9$lIa!w;4}#8?NWSiO8!byQJr{Y z8_bOH3ZdV~Dd+E*tKt8=o? zcraj|HV`vUCSds%6P3C;`C+eGZ}H{s8~@S)xck1_Np0TI4KyP<5WGZwMNlxT*qjlB zACGxb81PRRYnYK~u@+JibWen`ts8_0U=o-Yv4k?uu-U{5R@!Kzj?+mp~{u0crlaG5!y+l~=9jwi71>6^dj)q*0n6tK6w!RYDwTGb*4&mq^hXJpn^91Wi+Q*WldV*ppZWNw z6noiJN?ZheVG{@ zhenw!NZxkUM{B2{;E~#;(pN#BKm`S#*ShToo_Oh60RQ@U)8&_`u$0%p{5p4h_=+YY zFh&vp7L4)166KT=e^G~P>Ul{OMCS8fVRUGVI(H=gP@x|R0CMce6qVLt!zX+bgAl@_ zKkp*)3c)YTG%CiRHL^fhLO7qpbY{tz14*LQYl=I#u@T37*Q0U|1Ea)l&lr%EP@ZB{3?@IRUpXO-|+(Vud~Q3zXi_nkqP9A;W=e8R)VI@Z4?Y zc^#R*=;dXwMUZ%+v$1Qfz)XP$*(KXtmk!0~21nW||Bn~Hz79)3WE;KqDdR4gQ82-s z+l|h zTw{>Hz?wqAu90FYVtV6h0}<>h?`K>?AG43ksB3uN(Orz#VO()KNMU)5L?a9389kGj zhSIwB{wZ1TRt%`bB%$@#A2nsIr-tB+Ze^9Zv!Ol1VO5lvidiE|hHQD6Yks8C%YKSQ zR#{~-zjgY%B!>A?8Jzt{H-}xJm?o{Ry~4^NECl0nDLPhx>(y?UjL`Hoq5_l|BMpn~ z3jz@dx4GKcvH(&c5@}2=#5~M4JeYwBpH*0-Ij4OS+-`HX4bFI9-WzZrbqAq52X*9; zZelh^i#oZPO|81+W-`{WqeSK7CFdsu!Y~4o1N~YLvYr^H`%~9v#te+)u*=Qgs8U43 zSbntB+hX$YovOD(c`ren;gSwg=o_(WMY$dO@2oWAs@1H6n8p=U3z_=Wlgk3wl$KkK zeNH^?UmH0TPsdi-g=tPGFAxDaztu_P#;kYg=Po3o$*y9cNsYlbnji0={Aiacjhk*) z(fV-k_lw8TJ=({VN$?8OKX*;}^f_j)^&fDrc2sXfB*>gYTXLOBlEKn1qMeHmEdf72 z0Lm$zfK&QZaiTJ|!Tp&fO0mBsjxjkT{Q@DZB|!xL)T|5||G>p*6==*(^2IxOH}%e3 z5coU`(i2yAqu5(Ttu2}<9J|wn^OV2Oooc%uv5N*O0zOJvXZwP&SXP$xbaA= z9UtShCIcYKX<{%O+BnOQ9uP3_B(d8u9nW15taJMK&PR%g+_v)xtZO@O`8S2VY-H;~ zn7l)2&(d6&9$o^g$_z_Kv7_SqR=Z6~l`;z5zGo2}NlxKLZT!z*!XU zIK%{@c4u+@v!3Mgb!fR8>8cTHA3o@O#1mwDd>5?laJk0@Q9lV61PI{2+qndE!3 z8L=@rF|a41Vp{B(aLdrrR?+kX2k+y&0+beG3?tW_i)Mk(+|TN;hYIGXGCv?oOepj; zVPerR=+a-V0ep<$RcGKc*c2zRr5cmHrl@Dfv~8VsG&XNhP13i!UJ(O!jUtmMWM7S4 zgMQ@y(5r=h4l-l>gYhkeK$ORIRW8$}>h}U&00A1LgNWiQCqnelgAzpo*^e1R%3JVBGJX)Y zG&b&rg{K@T*yJt0dLTM)p%j>I35w+M&62Xoq^t#`7 zbZ3B%c0{*k^#{r%+@}r{<4;U(Z-PWOZbiN{v z8lG-}U*)r+dhfk7-jnshU}$6vP6N6E0YJaSK-7%i5Ns!=myLGCW({ znl-$;DbNRMk_+`%{Qkh81IW(iU=Z*_YUheqw5kSs#czsG%q-wA=K@hn;h1kFl}T+R zuBqZ2iKK`ztVQ|ZySse}7{u_n;O)0IRd+X$dzpu@+5Nfb7%;3lU2Q0rU(CoBDz`Xx zH!4WB-%AJz)f@zj~{`_!{wxv!VHfs#4{hsyl)@`EFS85Ng#{Te$>JeEsBM zCJlLZab!Cd3P&~rGqfifg?c~hu_#)MOMKHu_gy*~osM;2ij{qVIoES|q`wU4@TNfD zJqWdu7URa6?!jmaH4F}w8^%2Jc(?{GYy+1gc1Jaz{&~PW3neZqhYU59+m8^#Fx%bP zpe{7o0vCt$39wCk*(r`fsm@%Phf0|kt_ed>7@-SIyKupjO#=2J^}gLh`Qg&Z3wZXQ zoT?xHn1u`q0q5-|eiI~nHobktZb5n+c$)Ib`cC2Q2J|Ewa#3snawAmcH1Z^ys}V8} z4+t;1{yA!jy>!TzG3KYMFMn*ORH%`gk;*mHk5Z}+p3J{ykzmjh$;HB`t8on+MX@PG zQA4a*FLp}f%hUM9^ZHtsQ}nN9ds%lTZ4af5k@_7kW~g?Vvxa+wJj^NmISEUQeLt5x zm$c`?;J0U9R4m*5((%vnybyP+9qBC!Jp*h~NPPU{XcFo!E+Yo5CO%sgT)V*=L^bA?v3U-_QJdY*?mPPK4(1UAGpBL{3q>55GQ1 zeEqqtV%b&YM=Pef17`*h&l5@~KbdTstTp-B?;~cK1O#}fgX^sKg3!41UJL#{bZ=Xv zdL5+Ru~!^nVdQHA5?4x_t{+W6_ESUzMEK)O_PrwPZ$@cjaFLFU>Eha4_Qv-x(cuEm zFp<&_0rKu9am&s;9}qcx?!1{xVyW2(<(brZ8CJFKa7T_cf-1(u40qctU!u;Rk{^%! zQakBek@R8Rq_fdbT5Cxz=Ic8EXk-&fP-kLt#MLzQHbqS>7OprPu3IWRc0+!Ay>vGu zMnY9-_$&2f3@g`fFJ_NYiEeR5r5z8dF%O2Vdcn*p?Y9fJf8KuGWTprXQ=c?V$l?Y7f9XaKKFXFgnD<_W$_cpYeYS>)*sMgW!J%Bh$flW|)sG#yl}c zqOAAtLAjtwGJoIWQf%SEul?Xfx>#Nh{>A(_d4d2V8wUBChPLRxwnJo;7XD4~hUFhb zB8(IpY-Ke65~d)($mL&>!-A8V|9zTEB@FF7p9rH6x$?CV5D`g`g3IYiT4xnG9oG|;n59c3`_mWHl(8y zY=CQojO0XCInIW!SkbyVT&fw+Q+mw@cF;`+#%vVR9{TMf5}HipsNNdt*h=_@;@`2JL!<(LY+>S43`MR3GW&y;f3+SPbeRKluoO1x;h=!A|? zw)!`S0U|9;(vjUfieoq;8!f#(X!b%cf2gF!UVe#es|V4rKT^w;r6X5zx%iXQXRNt; zI7wbpTeuBLnAjGzI4rRW(i3WX3~9DuCoN#`P}~wmsXj^aEd8d~Y*#MKJu9>;rhUMF z=}t)OQschgYl%wp>LY1m?(HPg@#-^hX{_MGsdF*59`e}7Q~2P9cSquv4@xydF9Y`# znvk!=jgpg}dzNLdiJ+tCqtj6%p;o4Fq=1N4p(I=_XnOA3@HN%!ZVr^tv|`uAEhVF} z9_goOfD);FI#i{UROooF|D8wzJ+zNV$Q*gd^@Y(61%-n-EFTdQIPt{@cz<+D>BBiH*o4Ukd@@cUvId)eHIl=fDC6cf~r}y6Jcm zx-6sz_w2huV#}BYaj0u36RBp?cQaeo)#NXnNb?8f!{Xa~KC+#fP$9VpyAa^z4hUYLZYX5?<6s-^H;G zYB8M#X8LE(kdsElwj_W0z~H6W`~W<~ti5fSJZ4S8$|+t+HH&<_*1d4G5@6X9Wh^Yo z@G6C@)Tc-+O|+dk-kRyylJEe+Qv8INP<+e7F*f{Lz9%YGo=OrTW+nY?Ma~O`Y1)HI zF4=6$m}yrQj<&atVq)(7j}iUt)<-c5hF_4bnbDpD)nbgW?^X_IZxZB;@Do25*qpTS{(c5^C+!SuG=8(b`0%zfpV# z{T35{z5=2R#ncm7KI{las!%8h*a-%}e}S-}Z|;hW7 z$Zi<-fPc7nN$M&M$h^KjGgr(LKM}3p5_{%XzB!Vd;!@KIo>q>o@Kh`1pEQm3@lpKq zg0SpJvU(-^W&K~9NDtI60@{^CuGMkzBCcYRi1P(kmuq$4z^+Q_f*+EJ&`5uVEzT=) zxDH2ostd8SjPUeC{n1V}ni4C|DE=vLW=?Kv?KR)(Q=@BS7@Q)&Q9;?oG)frarl^^v zMzal?i49mqkU|Sl;&Qt2^ls$x@|H|hU-)K}jAv!)*p~oYuKkF1A%bSqWdpZmqwc0i zgE#x?r`=kM`R2jlL5Y|J`tDovn8R;u=En3dooTh{cci5V#nU}dKZCiHqQ6}CFH*CM z#&c@b@x9PX0}0)azPSbKSyQoXYfwVKR zRPxC+lL{Qj0|JbyRU?Z|2H{J2=*XPaTGbXpqQ#yJDP};62VJiSH5tE#{bAEDC z9go%-vz^_MN+q)A=v_m77SO~SDASpyU+-Xj*~Mf#ebAeHzko}QZaEF1*!$$7;W_kg z5@JAy*H~Wk)846ikn6TPC!0Gx0rh0mI?LF8<{)lR31i`MYmC3DzYm@{V^1B;_y~7U zAHuYK%ra&H_2aT`1q6Uez8Ib#p7;<&l=;ag^Bx{#K=^x{&UpNBK5o4E?Sfu@;Ivi#^a2LeCQ&S?2)T z7Z0}&we_ZUQ$`5%C_ZtWgU&%>UZDGse~A7=`oB>6FWmnTkrDe&!2bua?h#y^0q~0Z z`M4(kzCOQBFSRDn;R0N6!bw(v1b%D~)XZSQfe%3d-6w%uT(|`LbmvlFFdpyeeLt zPj}s%1!)T98jJP*R`3j*!mUFhi-Mv>tPMVVMxYN`g@{u(;EsRpNu%ZQ+$!sTu5q^v zeQs#WbEqO}5w<;6og0oIE;ed;sXyt>W_2w40t%J>iP&+E&co$r4(<7c6gp5Y_1Itk z4oYWT>psa(?f|eJsu1}+HEX#?OfX>dmVv20OsDaQW_z_c9nPcDzx*gR7vAwh=3=k( zRe1F?+wz*x9jHE}tNBr@v#Qqo8PZOwmehij!JUU82*5Ca0}EvAIkAX=AzT!WOY+|M z4CUk_zPJuoKd4wsx9)!5kXT>k$agZ~jI|6u+* zg8m81{~EXF;g2mM1m9*JzH>v-(S>aj$!Ud3Rt%1ijz3n+d4Dt1xe-O96Z9Or!Uy5xLmXVS%`<;{>r^EbrXbi|tJ{&`QzHJ590heqi>F7KoyaL^* zl#j3DEv>|MnTF(*VH|9_`SAS1+kOq4AQggwX0z2>YH(ukUxS4dg!DxnO!slsbZ1aN zID;vDDq``4XrSnaCK6Gu(6N0*)H4UgKZ3uBV8dmsO?$i{G|B!$4|hl`jeZ1}wU|P8 z#%+&T>z!1_XN8U&!g#(#r*;N5sVb!dxN&p&`nz|0*m@M&dPpskN;vxXlw8xoHVu_W zeoJuB#G&^XZ^TWYv4^V%VNd=PS=RRz&%Hp&)x1S|W=4>B>1q+<<2^o%z*{a-8%-vJvJl|<$Ah6ngw_v{ORb}9eseK+7S5B=Ya?7X-UWGF<#8Iy%HfPgVM8ZFGkze_>p&EA*~B)S^&$~tFxcAN z7E#_znT`;h0PzGGJMAPVz>ek8t4>02dVD`jXwsc=4$%r*=|u*7q4H~ZT7IyUFYH$Z zhB$yF9)dexiE!x?G%1!0mH7LqEAG;C@96#vJa%6Aq)1Glffpt1ff$nvJ2ZtdX~E&w z=8&nlMR^i0W|pm~v;!@=@SK9ahM*Is5(6U#ItSA>-zDIqt05JON+kJ|=ZiBiB-CvT zP$S_QzK0Eqy|J;uav$4L${ri@b+X{wgfV`wLjLr(f0CX@LQ*Jq!XKr>Ad>kwh&mrd zD1^QRTbU7j$=Znnt!7a>dA&HADj!D>I^0_BtESM{rm~x)Ve8%Nv8Y4emh%#`3zDQ-C)ItwV^o{N=C<8qfqvCes`gj zOL%Vd#p3Y_$>I7KojKHu5$){lHIqMpUoi#^^!(1DWAi5M?Yf2iMj*RcnvZg-sd?TE z-2LN1n(kBfIv0~loKnUFb#%{g0u|;!XH5ouT8F{Dif1`Q_gsI)#3Bt+b?A}WL|*>UKvYZzAvv9N*g(#jWpNckRG(P9 z@bhHqt zKj^Nzsvb+DhzaS>PZ<9G)dMcLk}MM41LuPZO^=ws=F-Gq-+mBmUXCT9;AV37u7=FgIhoP8m5ae`M#6E-Hex|-#@T;17 z2ij2h)N~Di)YULzUxtjA+z`WZq(GRq^Ih^u8_doFQ^^u^u0ruH%pej04l<8m*XnJV zl&UCEQg;_QOjBCVI5IZ|hJoyz9zovcTgc4zwTditWFz)Q9$RLS4hpTeR_ny9t^DqF zHNWtNP#Fi*qz}#f9alRDS{`$~{L$cAt-jRp9DseZmTL~Wk9mj`in$2^0q%oA*bqhl z>^TS!!uT)1zc2qi{6EqDD|}~icCqjQ807vj*n7W1>^%|YBQMR8fjHm&5QOo?W>9sL zybOfV>c^j8wi9BeX6j*Rt3~CDB`6zfPrD4eq(+bzseQYpRo1U;SzFc~DU!oQ85P=+ zfnG5+9~+x2$xC_(HgNYn#{C1M6?=TNhM(w2{w(O+^cx2tN&zM*$n+^G@rlBV9ve|{ zw=dBIO`q(Oc2~-?257qNp0hFb(BD6lW?(aGEt{gcj5?>v6*IAbq8`Nbpi=J@YJl$N zhJfCxMoOqUmDp1jCM1vN>gjNb^yrGAnu}IqWxwsSvCxsaJ7HZ)ft|f7pBOkPW(eea z^(d`)fIM*_UHstvh^TBS@Z|e*dxvmDO%J;pzMNv8=JVV41opj&EALo}8&)hRAnsr* zZ1A^C0JT{ZRO}e>5PVc5!mGk6N8ww6Bk}q3`Yv)fZO1TxO zr{Tb!mx9st>)>mYW(pOL@Ie)ixwdxz9^v{HoB|Ls3PBZQp9DS~9CdS_nXnWs>zQj_ zMcKlCkMrRIaXd*Ngl~BrpKCxEi$2|sX<1CG+s6~; zvx-|12{Z*$*m@i%*YfEQX6^=T3NjXK&NP0@Y+E2QJR=YDVAkf-kPj9A|3&Py&?H zMGsm34wUgXqm&d%-91eT;#`K+tB6M9ESu=j{yfu`ZG;fBG;i5(D5TB|uf}J6kBDg0 znKC}-VSrp@@XOJ(;(!XzS0TXy{Pk^5Ez6fT=Bxf*#SSggfg5cZF4qzf5rY&E@5awT zZRZuuivtE(2WX<8|z8F`#4FFkK35-XBPz#> zt4}iXJMYV;wx=21fn(_Bu?}H%fc=C+{8eJJYnzduX{9G9_0`M7Lan*`0ycXd>OJyy z#lCx@?g=3j;?(ue2ikt7sEaR*Sfmm(j+eOyVS!({$@TSiH-USa=V>;r1incvTlo5J zMD~ZgcnV)s2!1u)w-LwXAQB(wcaVlUDrQ*~qcZC9hV}f+4uO|%ni?_@>!_dywjgD* z6a1$+)_h@uj;np&&a~`|%lGHSrjv(Ooca3gi*1I<$R2 zulaAwmZ6>1$h?}^n$cw&8R>NKJn2($^+eOB`;Yr!LYz)RB*J=^DWqrhKF&8ab&xm{ zA0@Tx@3B5rWJ84dP_mS&NKY9LB?=gch`76HOw4imvB0AKx>+|;*;E&=oJt!1lN z8nOweH>c2uljdy8x3^uCmzuwf`vV;^%6&yJL<_L=?4~K zlfHM65RWHMGJ?3&f<#7BK}cS!m5clPYWk2+lh1*<^k`)55thOtx zsM&I`(nr)wIFYVl(q>#2ZQnBS%AffeM||5yHrQ}^XHsqZ+R}oV{-AIRUbU;L@PZvL zoo-9VS7dl}u(#DcnXfd%zpua+1}f6eq5<%w~3%p-rXhAmB?AIgD-o4??VeRY_L9C zw6lrB8}@d}hdiu=%j|8uPy2ZYIi`#4qM=!#FZOLfhnL-;X~QI6wS+O~&RXlAKjoim zEGY8j7T|Ba2}+6Z4xT$=hayTy0 z$Sz3j`7+8?O1}oOhH}bG_8AQzPlm^_%G3Y;nYh3A-ob=wl@2_m-P6Tf%puD$&yQn0 zka-qh1a+27O`dM!ifgO5y=qF2-68;oRfswSGxkvMIufKNCuQajB(B|@ISVWiTYRA% zF;=rNf!MUf&4@TUGQK*y--mqoQdOgY2!?H)&b|_faAUSgdoH~QvKVR%!2=g8CibxP zY|hdkgPtqxJ1H*8Z<#4?mK)Jnb(+!i`wSZSH{x&@&5}%gcwDx9iN!Y$V(Qj$ksmrj z6d1PM*7$G_#+CDV!XMkAQ-1^yOD>Kz9Dik_efl~TSy zflw2qsF8Yw;&8RDCO!eLEuTW}pHX06WVP=5+(ze!M<)qIx0+S@N(*~n@+gE^Y06Nd zy;^EZum@Kwj~7m~$PUeSIcu8My5BDz+3}X$MpX^Dk4f!hikz!rU; z3Qrj^o5VujM?+&I9HPGpM1Ta{MS_c6Y|{j78K5Y`Da{|ERF z)_-04zvBOoGz8IF?3Tkf(rqE0DwfSUvZ)`@7fMdJ``hB6_FdS}+-rc@ z7ZkY%sj;O1yLvI7|^LVXrjzY8hd zns%b%Kl-Nlo-^?p-{1Q4ip5s)0o07%O7Y(JUva_Fzjxh3So^(B(L?GoH%yBptn99a zAPNE;^j9d?-x9w%Dvhs*GhPAgt`bU#f{;fvW{!@iM|s_)hU}#L+cZgGAF;Kj|(VQ2R1g3 z#JtrT?rq4OGZ+qrPk~~3-1t2{jh^RaUd9RcST@HS`LV*ofmTMX$6iK>;o!uiWM{2y zWi+1T%UHJ8sO_+pwtzNEF@Ef`s$&D$r-CO+(TX6udi2u zP061+f^*9HGr=l7I+%ZHJ<#nVHDKhfb_C=uTv-pC0jV`QK_@7wlT-9ca|YEAo~P&X znUGA=$D2KSK}sIE)WIan@%D5&v-PtZwS(9Ed7 zVAY=b@N$MNz>mQES`nVZacFEZ!zW9nF@#wCVRTJrf-8vTQ2-wOcaC}>MTMMNNB*6L z>h1kl(tPy;8L1(9x}C(obmL-q-J2eIl3QI{biF*y`r|VDMVH(WTh`Tt;Z1|OG#J`S z0OMW!8-w@OWsY0m+;{|siaB8NXH3WDsHk$@T;sH*QTWVx`KNqJaq#()5XtP;m~iRM zu3vYMa&5NdNx#HJEb!v(s{qc^cKefTdfy0eUvo9TRnsz;-cJK+PAh(K{Z|f^p8Hf*h1t_zH0$%9>`H21`q+}jbLLYQ z4%)9eP2kRbXED(=FD?S}w}os*roc%Z^grQ0fWPCM-0ah${7&W0dRA-~C;$1%K}5xk zzE!BaTA9FWoYaf>Pg7p8KgUF5!odI(!j4tX zFsVZCK>I`JELY^I0Z>UBH=7*hkM)pJvLT_EJGCSU(pQ|vynrOoZnl>W7iOM_v3CA^ z+lA$V&q!lcn%R1Gu3ft}LLgyR*Y{}SKEPo9PpRW#A8h0R7 zy%(#9f+`F4f0J^12&&WYeHdl=Djcq!n{!mkO*mkrE@dL+z!_;r@ooH&EU+gGdh0DM zyAr|6?2!$2>n(FSEi&cTOwSHUeGjG7t;;i@wLH(FYW08}hX!((#rREMqj~7;Y9hC{ zM!UXBp}`lg_Sz%Ue!B&BKX_2XCj{m#un}E*LXQ zYBu;f#Nk-f&y73Li+87mC|2UdMSBx)#Qj3cz=?f~L*Z5fp7DprKVL^fGreu=z^IK9 zWq%Xp#}s|v--%BES0K>AN;Mmzp{lFxE%ENO%>uLI*CXgGpI5Q0v-(9TGfSJe1Pk!( zS82vxDT;#@^L;aqB08i+d-*HLoHfDaClMV%to1)S%pVKfV}eyW+RRiLGQq~Il2z{n z>^t%}?D(lWQp`(!YSAu{X*B00SiFR&jl^mvxp$n>vC6ZaXp=gUnUeRWjLhhvP%DvPPh&d{Zs;c*mWN#c2nzxT-j4pOfZX0xNTHF*7Ez%*H{;4i% zwG&(CEwIm*T#9Y+y4??Qq`*&+wJsjLP8R?lksH4ZKe#MI}o#--xMZB zZLjU*b#W;;fAvD)NXeKN}xrS~g4OD{WjE_5@O^W#r}(miN|Gc45ikgoex1$zbc*(gly4y z^QY0UD%PN$uNP#3?yP3|C(Ty0eizu4fNvEq}91z8>#600GVFjO{#U4UKG+)7Tj}Fc$bXth)St6m^_S5 zC9-`TY72U$2c7MDOzp|#M!G~T@tCa1Na@G2{pKZ@XG<5%L#tk0=xKNxmo+oG8f#D} zEoFZ-0M73qoF~I=O(EJ4@Mx?mtF>CPh&}iK*?{_`!yeS;bz9*Y(D5w=`*IE1ljt-# zE6is=uOsXWX5@v6idH&Ai;mJqiBTyglCrhTHl^xh*qu<|dMLjlZi!O59Y?t&HScn=uvj6Tw0wCOS1&`*?SBw3hA*sNZDC9T>HT%Y8Z@+&*yC zm~Id2NR|k5^jWlKL*64!%|$2Ive$2TVHZuK?U^(Tk@xjV zJ24$Dkb5=8ENG?~T4BFNc%L>esdw;*k1eKNY;-D&KqgCv0A?oEH+vC}_9~ZeNyKFv zNrVu8YG{-kh`Fas2R*N-JWo_GRPvEwPJ?nTu_Sh~ucMqVfY3-r?E8<|TI9d(*=df& z&r#~I81-4X3zy{CN}@>^$52{_;A6T3EN$ez+ir@uFij@0e`ZU1$9MnzHv1PbHe=$w zXQ3tG9Xs=1Q%^Da+YY<}PozRe^|uo=ge}C!EFZ6?hIsR#ywn*yYo~^(En>`MOb6J! zg=}qxKKQq@cco?NrjJ#p`99#Ml(Lj@!ffge_*{(k_sZDhu$P>Yc?XwHt{ac9jWlEh zS+ydq4DS3qJ`}*k|1@G*WID2&c~JEPA?c%^Ry6sfBSWps;AbRD>Uk^KO)Hl-I_w)2 z{vT6up)1y6+?6wfEF4OpCuXS6?l|~2p`ZBKzTv$6p;g9JM~3$=+r`WLaSo#opeoge z`*s%WTHnk@(=5uaugmZ|9UKmv+px|e+NXJI=P|}T9$Qr!U5cT$Io*ua5y=`cL86q|IeP=23tG>4Kwbx) zu4Bk32}%8EM-D7yU5cV6Mmk_woBuNR_U#wwQWkcHDw!-dr(AlO4xMv%8YHW3a@f`V ziJY-q>cL+{rU>wyTM?wYglUaqPxNQSYpUl4gS_9m?-#oBQ1Ofy6)re`q~hvZDVpx9rJA>!K}VgLX(Ns1Db&nmXdfXFY@!&zZ=S1~D=&CdKmS;>z~iI#5bVXT(j^%!LnUf6 zTvMkdI{qlT!npRww53)_0Wo8^3;k7(BUzJrqO!xu`sgC6!>)BuE-PKdc8WFPYCnhK z5Fb03W6yjglcpuA@ke-s*Ph7G6dV0cr?YvGWUDUpSw`NEUx0H*Imto2dhS87R9sPV z{B#dTOTQ^Tj0tMa(B*2I6w)U!r~5)q=P_pymj3reI>P|^r zaJ&=4#_h4BPSKi}t|ggN)||N07pFogndIrsHpt0i&x7gW?lYWflQ()T#gnu`P#niQ zTkAklgjKGUw4pSw@6@i9igPlPvwR}XdIL)G#*+HZ)NNPPnyWdg>fU;M`VZh;;eF(1bYQg=)+e7OuoqaUaSI z5a3$-aV`#-rgDPB;wNF3-Z8})aQbYlHdu<4!;rpKV;bht2IL>bZ78jCy5a^>leE6m z;ldQGcw%?@M(_RHT4;0kYvy40$d^kNwWzYs9?^EXUiW;gc$ix&li-QdW-jR-`)C4H zJRj;wtd1YeM|1*W-xFh=ZPl$r8J#Eyyz^NEeJ(xkj$^lMO$2{sbZ3t=H?aB9T$g{GD0mhFg1n2S?G- z_s_V{!KXcpR0Wgq;%`ro6tW5QuqSig%Ie2VvN(RCuZ8VKiFqo)XavJ*@UL>h5>J^(Zx%wkYMM zfWY*(IUe?@iG8VwB-z6&kCw!D^b?;m6>h@}WZPOSit0T_HuAaHRpS>K=%AL&ggKK@ za!;FoCaDv^n1pD${W%-li86SdEZR+dw}-znoB0K#C%1-gfOyuqZ^Nc~JJSR8Z^JSV zF&Sv_rbWRa^b~z|Ym}2=db~YoKuLGnh&_#<&y0O;vScKFNqsR4JsO7yO`|8!>630v z{Pc@AqxNIAo;(yTK_p#-&!xImz5yD1CS1kUTQjQ{^J=Ok^mP&TW2eiYxPw0(GT5EN zmAgrmqmW3^%O&Vw$0@|@Qbj&)?iX@V3Y80y5Z&hzB_B|1svPF|ezSJ$-H2KhDU9V^ zO~0FLuTc{ky=ZbW`APmVi%-okd7ZD|ts$m$QT=hVH(MEx&+fhM`^Tv_y}y=#&A1#N zdq8cHSgnRvc|e0V`?qq@iQ1~{X^*#4_%&-IV>hkrcEnzwbvcR_YoQtLeEl!W1KnRb zud|XI$8Q67NYsA6ck)~P9_<4M&H$kz>0!4%bD0H4Pn^e8-3#k&5#K=v!KyOO!A(X@ zWb-`o>feNvMb5LHl(1&c#nh?qQ5+Dsvj^Oh1jKXt(hFKKyR zg$|c$Z7-BCl2AlCqN+2U*;|cE8p!KAcy`^q^^>Qq^#;6_fKKeCKe9|H4p+N(CZ* z2-#lXWQ9KGp#$MFtz+LN!J|nACkjN|@8GK|OI%iq4yHiiKTB3${EJex{kEXn2`hBF!adR;J>59lDn9_B`Zv*encUNu-s59-pF{JMt^cDXN{o8 zZP6cixbf3CmRe2l$Y%5gQpu(qJl9Kg%gs*0y!+l5Y*L0soLO?mx5ryiu>&33W?4@V z$ZohR|8Yo*wDHV2=zQ(Ut-TJQ=1LrP1k=_0Y#SfX+^>Ht{1K%!8QA2Ap5f8Ay|n>* z|D$aD0%Z4uXhdhwqZg^G5Au?oBm>_U&=3KW2`x>1^&I^zTRj@_IftpzIbxMau+Au` zsVlZMV7fGC=BT;p_gri1`joK{xTla_3I~@Rx!Qa2J9PaPnVW3`U1zG>p5siT+nbUf z0fJ#FaHdz$-hE3I+AY>n(D-QzW&Ay}TH=y}nRm?gjFOgI zz0>-s8z_Af!zZegmvT<67Y|Jy5L(Z2Q4Yh5R*#l9;E;ol8Sf|H8mGKz^|X##OHzi4 zbDpmtifz9lMFz$sE^4I$vmEyiE;Rflzg$pw`^{!u=(?vzvS9aN+3#|A?uOD$Zkk7z zZ)*iK*}?gU>}i$dB`i7EXPb5jU#2iS7_ZMs#JWDv=%v4Bb}#U*xx*GH;F|kw#bHsa z2y2Xqq%XtdRzIWoXS1F@c)jnmLuu9!kM90u1uM9eB#Xm$nb5*<>!LM71_n8pQovSD z@{HH>G?=H$j`p$PK|77re{`ZmQM*Ra=STX z_!*Y*bK99|_O`o+1M{#X^EQ>?jqVUPH!qYe41W7WVD42Nt7`tmwF<|3Jr577+HVUP z7aa?9CKRfmfZNc#x366-sG}NPKBo^i2xOJ)KF&WvM=ug%d7(KmAm|=zFLSDtA#Xwu z@~+^QLiBwszvjRkYg1S8LKsGBc(6>DD+!oemVRoL&rwm~rq=jHG};6lAtyNZCD*vi zSpBq{%?zZB5g(}aw&JuavN{K^8LH>0nYEa@1+l9r>|!-Y56oGB7OKz|&InSOA*U%` z*Ezy**!PlGA_F0q5YQ;oFdgzGWflasd@t(dWwfey3j)sVI2ZDZC#B>nC-lo@X-7_3 zsp;rm=Mj+wfXN=(CK$_twL%8V4#7a@hp@BYe_`m~c>Vvwcti$z>BqOKoz!5mpRX!~>9G%?MomTzo=RX{LzQnG2@j!EvjnUh+2{M5FpW@pe$7lF0e8wn63 zAGIxYWi*u)kEkMXM6L))w9Cq)X>oFU&n5zmHQJ!L?-u;_=Xvw2c+la9icHngaVt&( zk6cMZMZP1m8Epo40J#GU3|Ofwh+P_Gu8$W9Rs)vVW6*3iz=Rp(Od+=dF|$&K`c!lrwrTonw9jxxqy z;!l!7gX^2fOZEi%#_tjfqVn0jxjdK*t=(P+SUBqwit#!5oojXEKMDPN@|uo_#$uOm%@{qBlUq3dmS=UCoE|;0sTkE+}?m z^^q_eOfVcBKx6BrZ-5l)H-`}8u_5TZleZ9ytQ1H;fW6ZqD)-vS0rvGL z)6%cE5K-+>D>iKtcX2RRWRwM5uF4fy*5F{RxZ~kGDvAX{o_TMG50nIQ>HYO2$ z5Pbxg@I^NEA_M2aOR;B{lSqtpy<-G|wI86eiEz9dn;1;N6KzdE9{L(BC+hDQfi0Z@ z29_lBY8g%PG*;&-+zKr~59)2bg*d+g1lygmU>Ff%{}yf9aTyI0A*CF>qhUt^IE_Wt z-Wi!i!tp&$m61`3(Fn1g=&sfDX(vaPB)2 zeeRP@FxLcd23TC(%ixd&Q>pq8Qg0^$fJN0*Np-ZpTc@7<(j*3Wdfo@C8gbvQb_E>Y zuOdiGjz4826T<%qlpnz6ac6%)^c?+18iqW#5N&@Hz-l0RBv%i68N2wf?@(Z`31fn($tc{w+^rI1S4D_KLn zV-&ht7-nBqi-QC1{PT{0_(ApKah@R}sH0!Ou8nRF7*G%vfWLrp17;W?1W?R>fWrR* z{u}6E0BM?LSAF(8r=c73Z1siU`Il33i9@2ew}Y)~hu^Sy1O)kRIj3og1&rqTi{0Cm z5gZSMj5aaOF>d$M{98+iF`Z;&T1^in(zJe`QU1z2TNh}vgr;2iKwaMHyIZvEM`-a` zgj33#1ZV|V?Ope8kC=;^=Q9Cr7ksMIwWBLX6B!L- z({rg*Eu`IR%-&1%O~T!0i*%>t$&h;I;>?wS)Jr3lWB(U==Wo69E%kyvqy67g-H(64 z%QchrdiFAJHps@lNqEcGB2@r$Io3MjKh`Rc;7GPj%YrR?z%gxpT1z=n(pGdkZDeZ8 zs36sv{s8iEN<*3Pq+*!FUN6=0Q{SwROr0-Nvd!VrszPyB+=H&l&eqW-o#}MRdy-#Y z7XQ|Z+_%1FyH&sTcFfDS=^OFlyWcYjcJFFyz8kcH0tz5agFFK zFkR`y6)FB>LI?NL?`9b?D3jxbbS;j7gkVq-XzQUYCuJkO@p!j%Lx|Qi<+*~%y^mVn zPmDqbWAA#T?M(31SH+vfDL&4-c;J7IG=x&CiR3 zGCQdgHS&FTRH!5ouP`LBo8IEt=8QgK>M_`zDkvAfkWY7Qm>xL#T$+qx1|ji^tp0} zcnzGUX-poyj+eI-Ni6x9`nW3-D^n6vSQbjtUON#umJNEE%{5?3wy<8iZXNO}ID1Hj zdUIpfG80~#v&ctu)XNeFEI~o;GFNVQOwF5Dx%OLHPw(F?H6hr1qnUkaWRkE7op33` zKm2q{Yq&eJUbyo1Sd~irX+e@X2Wjv7hu+0Ud#V;e^DfqmCACLeZ<1VzH3VT=&RlKs zbX%UfE;I+qQxbEUHlLP*Y~$AZGV=yW0*eL4-9i>{y)W;JTHPMrD!oo`Omm)Sjo>)N zzdmhVxmf+QMYxpjwGdksS#ciS$3aSSF#U5Pq4$)?@AR43Yb$#y8rJ6?cA#lvjlR=} z9Z!FK6^@7VRrhcHBm(DOU^-7-?T%${(JAK7;;alpa2|qigz#`^ZsLG%;Gl5+cNLEF z9E$VduU3Da{!8`0clv1~qOzTLhI^C7dx7}SQu*dhA#CP%#9C&vsNvw*Z(N%(^lB<}tQvJd_NI5pJ%iaDgkv*-&I)f!RSDz}6O5NldY#(r zEulZe-W0D& zE6BedUHrKvmJT*^#;w13suVpiJ`)@GcT{pqc2S#&0u`~fg|EV6Sy!BNlq)}Oq|vP$ z*_o!2Hwkn#&Q-r(=6N3$$z>haDBMhqqM)-peMQ09{GpW2_J=THo*qWPaT@MwHfo?U zSgn%pUIZ@GQ*4TtVuXC3-yVtaz5h8=1D6wCf9ZD%4~dw zC+h>`XBleIUmkf$_-M^`kY7M1_vQOhXq&Bed~#m{6l-RlLt~3DI1^bIp4|a1(Sw_2 zQRv%;jY;$_`sn1;o0dtxp}xGAmFlOXJFPKSfN+QrypGE#SlGuut9wsVkb-xWL6?ZO z4=9Or93$C&mr*TM72NlU%6%FNIzzypEt6q|^9m>S0ylp&;GC($?*-}Jx$z~`5fdjv z_}v``zO08Ajzi;JaZ19R*UhMl0}dF(Q3Sq|^G=+f!b0%>rbho%kY9IE8^3aGF8AxK z1MjaMKe%1DWMfKSCx5ZqQ=8uS0?Mr9)TCNJ`kNI8PE*CEQ0bdausNGo9mm@iXedCR z<5S}f{Rt0n-Pb0$^7y4?tMu*zdQ23dCtxFJKrzdZp6nCTeX%RqxbT*L2S2($lcvFm zbVu(D&f6a#f0qdUAx*M(hQ5apBZu&G|AP1MY%1^BBg}RyC|FHko-p*Ke)eRHVn`qT z6LRnkn?5u{PI=!1gB5sT&SJpAi6warkuIU*JDaUs1;rQIXLzSwQxW0Sj4 z)zd+G&K9bfvd3!Qa++x<-Q+dC6i&){W;)Z?W;aoZ%_3~0h~2&w?zY|#!ahPh zrRHRg&7O43Gv0I^`O!cw)-t(}5JprZ5HX|wbU@Yc3IBQePIzf>q2@^#p}@B7kWO2} z4;NqKxI{IJ`KOk~&Go{;+R?XDu|C*?;iM-D6berzkTK%RPp_5QCA(H}4q{DcnPXZAm&lm@8sOX56A^B%U6f8;JL`6@UKP!PD3<+7mln(UE~XK} z3`_Ho{6yK|i=y58AK33A6oT){x}c6quLK_oI|7&LFgat&Gja17G=sj`5*TslKcriE z^F82TH3|0gNt|^hx4LvE*2;sm^;3ft^TvLMV7}!;G2bmQzFlw&%GiZp(J_rTV-q!n zJ99MEOk0BsXL7?ptO&9tlQgwE?Rtz}*yw-qCg8xZz$3IPmSXhDeomunW~^UqkvA_0 z1b%5f|J(v(x6#)w#Ba<)a^U*+!TTdCC+hz2H&?cwizw+&n zp|F0|V}U07#0;jLt{E~|jWB8sVg#SVwTT|lOS8aJzvR5BNNU}$;x}~a8*j;KOoEn8 zS@#SVLzcw9@BoK~=HKs?Mw8@RaD1}p7ZQ2y&-Tcz+F{Jaoj?tK)3GWLd|bBpRO<71 z?4;cB>+#ASv|`xkuR4;U=@T}3W@&nM>X(A;UZtPn!e*pz@ly)l<$oy>Mj7!@v?k&~ zPVr?U;!9&9-RBoElSW(!f7HgCc`^RI3apuG&~9ypiLV$EtFG+kW0pz$sGuh4K%MR`+M0v~g!-Ty;~~R5i_eF$R;E^J2^T_{=pj>o%ICH=8DAwGr5eUGt{Oy@uK{ zw{m$8!CKdV1vA;0Z(#@c@G*b Date: Sat, 4 May 2024 07:52:42 +1000 Subject: [PATCH 055/527] + 4 Icons, + 1 Rename (#2064) * + 4 Icons, + 1 Update * Apply requested changes * Re-run checks * Apply requested changes [2] --- app/assets/appfilter.xml | 6 +++++- svgs/bitwarden_authenticator.svg | 34 +++++++++++++++++++++++++++++++ svgs/blink.svg | 35 +++++++++++++++++++++++++++++++- svgs/blink_home_monitor.svg | 1 + svgs/iconeration.svg | 35 ++++++++++++++++++++++++++++++++ svgs/notisave.svg | 26 ++++++++++++++++++++++++ 6 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 svgs/bitwarden_authenticator.svg create mode 100644 svgs/blink_home_monitor.svg create mode 100644 svgs/iconeration.svg create mode 100644 svgs/notisave.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index aa05cf35001..a82c9555212 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -948,6 +948,7 @@ + @@ -973,7 +974,8 @@ - + + @@ -3899,6 +3901,7 @@ + @@ -5980,6 +5983,7 @@ + diff --git a/svgs/bitwarden_authenticator.svg b/svgs/bitwarden_authenticator.svg new file mode 100644 index 00000000000..2a7fa5d8968 --- /dev/null +++ b/svgs/bitwarden_authenticator.svg @@ -0,0 +1,34 @@ + + diff --git a/svgs/blink.svg b/svgs/blink.svg index a025c247278..39155c065fd 100644 --- a/svgs/blink.svg +++ b/svgs/blink.svg @@ -1 +1,34 @@ - \ No newline at end of file + + diff --git a/svgs/blink_home_monitor.svg b/svgs/blink_home_monitor.svg new file mode 100644 index 00000000000..a025c247278 --- /dev/null +++ b/svgs/blink_home_monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iconeration.svg b/svgs/iconeration.svg new file mode 100644 index 00000000000..7f9f5d4f51f --- /dev/null +++ b/svgs/iconeration.svg @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/svgs/notisave.svg b/svgs/notisave.svg new file mode 100644 index 00000000000..bf28d34a9b7 --- /dev/null +++ b/svgs/notisave.svg @@ -0,0 +1,26 @@ + + From d223a84dd0680357cb2434db788e711784e8098c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 May 2024 03:16:14 +0000 Subject: [PATCH 056/527] Update dependency io.nlopez.compose.rules:ktlint to v0.3.20 (#2066) * Update dependency io.nlopez.compose.rules:ktlint to v0.3.20 * Fix --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Goooler --- .../lawnicons/ui/components/home/search/SearchBar.kt | 4 ++-- build.gradle.kts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index d86300e7179..5007dbe2758 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -58,10 +58,10 @@ fun LawniconsSearchBar( onQueryChange: (String) -> Unit, iconInfoModel: IconInfoModel, onNavigate: (String) -> Unit, - content: @Composable (() -> Unit), modifier: Modifier = Modifier, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, + content: @Composable (() -> Unit), ) { LawniconsSearchBar( query = query, @@ -85,10 +85,10 @@ fun LawniconsSearchBar( onQueryChange: (String) -> Unit, iconCount: Int, onNavigate: (String) -> Unit, - content: @Composable (() -> Unit), modifier: Modifier = Modifier, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, + content: @Composable (() -> Unit), ) { var active by rememberSaveable { mutableStateOf(false) } diff --git a/build.gradle.kts b/build.gradle.kts index 6a914f7a06c..e0ea366b695 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.19", + "io.nlopez.compose.rules:ktlint:0.3.20", ), ).editorConfigOverride( mapOf( From fb7738b4f8d9c610065b694d55462181470a551e Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 4 May 2024 15:13:35 +0300 Subject: [PATCH 057/527] +46 links (#2068) * +46 links * Minor fix --- app/assets/appfilter.xml | 100 ++++++++++++++----- svgs/{antutu.svg => antutu_benchmark.svg} | 0 svgs/{ffreedom_app.svg => ffreedom.svg} | 0 svgs/{malody_v.svg => malodyv.svg} | 0 svgs/{todai_easy_japanese.svg => todaii.svg} | 0 svgs/{vtlite.svg => vtosters_lite.svg} | 0 6 files changed, 73 insertions(+), 27 deletions(-) rename svgs/{antutu.svg => antutu_benchmark.svg} (100%) rename svgs/{ffreedom_app.svg => ffreedom.svg} (100%) rename svgs/{malody_v.svg => malodyv.svg} (100%) rename svgs/{todai_easy_japanese.svg => todaii.svg} (100%) rename svgs/{vtlite.svg => vtosters_lite.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a82c9555212..3a77820c5ef 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -324,6 +324,7 @@ + @@ -331,6 +332,7 @@ + @@ -437,13 +439,14 @@ - - - - - - - + + + + + + + + @@ -539,6 +542,7 @@ + @@ -802,6 +806,7 @@ + @@ -1015,6 +1020,7 @@ + @@ -1069,6 +1075,7 @@ + @@ -2184,6 +2191,7 @@ + @@ -2642,8 +2650,8 @@ - - + + @@ -2825,7 +2833,7 @@ - + @@ -3352,6 +3360,7 @@ + @@ -3591,6 +3600,8 @@ + + @@ -3662,6 +3673,7 @@ + @@ -3748,7 +3760,8 @@ - + + @@ -3803,6 +3816,10 @@ + + + + @@ -3906,6 +3923,7 @@ + @@ -4452,6 +4470,7 @@ + @@ -4545,6 +4564,7 @@ + @@ -4566,6 +4586,7 @@ + @@ -4645,6 +4666,7 @@ + @@ -4723,6 +4745,7 @@ + @@ -4834,8 +4857,9 @@ - - + + + @@ -4917,7 +4941,6 @@ - @@ -5660,6 +5683,7 @@ + @@ -5677,6 +5701,7 @@ + @@ -6431,6 +6456,7 @@ + @@ -6823,12 +6849,13 @@ + - - - + + + @@ -7823,6 +7850,7 @@ + @@ -8748,6 +8776,7 @@ + @@ -8794,6 +8823,7 @@ + @@ -8801,6 +8831,8 @@ + + @@ -9267,12 +9299,12 @@ - - - + + + @@ -9351,7 +9383,7 @@ - + @@ -9397,11 +9429,14 @@ + + + @@ -9442,6 +9477,8 @@ + + @@ -9855,6 +9892,9 @@ + + + @@ -9945,12 +9985,6 @@ - - - - - - @@ -10220,6 +10254,7 @@ + @@ -10306,6 +10341,7 @@ + @@ -10347,6 +10383,7 @@ + @@ -10544,6 +10581,7 @@ + @@ -10651,6 +10689,13 @@ + + + + + + + @@ -10791,6 +10836,7 @@ + diff --git a/svgs/antutu.svg b/svgs/antutu_benchmark.svg similarity index 100% rename from svgs/antutu.svg rename to svgs/antutu_benchmark.svg diff --git a/svgs/ffreedom_app.svg b/svgs/ffreedom.svg similarity index 100% rename from svgs/ffreedom_app.svg rename to svgs/ffreedom.svg diff --git a/svgs/malody_v.svg b/svgs/malodyv.svg similarity index 100% rename from svgs/malody_v.svg rename to svgs/malodyv.svg diff --git a/svgs/todai_easy_japanese.svg b/svgs/todaii.svg similarity index 100% rename from svgs/todai_easy_japanese.svg rename to svgs/todaii.svg diff --git a/svgs/vtlite.svg b/svgs/vtosters_lite.svg similarity index 100% rename from svgs/vtlite.svg rename to svgs/vtosters_lite.svg From a97a19b42934a77fa1a9b980e637da5f013a5f02 Mon Sep 17 00:00:00 2001 From: AetherNo2332 <130164460+AetherNo2332@users.noreply.github.com> Date: Mon, 6 May 2024 00:23:52 +0800 Subject: [PATCH 058/527] Add LOFTER Andpods and NextTransfer logos (#2063) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * commit * new commit * new commit * add LOFTER logo *add LOFTER * add lofter logo * add new logos linked china market wearos appilcation linked cloud HSR icons * newversion * fix errors * adapted wearos app for chinese market * new things * fixed bug * new * fixed a bug * new changes * Updated logos and rename a svg filename *Update LOFTER,Andpods,Next Transfer,HSR cloud **Rename (svgs/hongkai_star_rail_cloud) => (svgs/hongkai_cloud) * Recover scg-process fold *It is an accident* * preparing for PR * FIXED A EXRESSTIONS FAULT hongkai to honkai * Update and recovered some application`s icons Corrected a file name and explanation *updated LOFTER, NextTransfer, Honkai, Star Rail Cloud **Recovered Andpods ***Corrected drawable="honkai_cloud" name="云·星穹铁道 ~~ Honkai:Star rail · Cloud" to drawable="honkai_star_rail_cloud" name="云·星穹铁道 ~~ Honkai:Star rail · Cloud" * Fixed a text error and modified an icon * Honkai_Star_rail_Cloud > Honkai_Star_Rail_Cloud ** Moved LOFTER's logo slightly to the right so that it looks closer to the visual center * # * Minor name fix * lofter.svg color fix --------- Co-authored-by: AetherNo2332 Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 7 +++++++ svgs/and_pods.svg | 1 + svgs/honkai_star_rail_cloud.svg | 1 + svgs/lofter.svg | 1 + svgs/next_transfer.svg | 1 + 5 files changed, 11 insertions(+) create mode 100644 svgs/and_pods.svg create mode 100644 svgs/honkai_star_rail_cloud.svg create mode 100644 svgs/lofter.svg create mode 100644 svgs/next_transfer.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 3a77820c5ef..71039274238 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -10917,4 +10917,11 @@ + + + + + + + diff --git a/svgs/and_pods.svg b/svgs/and_pods.svg new file mode 100644 index 00000000000..d52c90648eb --- /dev/null +++ b/svgs/and_pods.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honkai_star_rail_cloud.svg b/svgs/honkai_star_rail_cloud.svg new file mode 100644 index 00000000000..094a0459741 --- /dev/null +++ b/svgs/honkai_star_rail_cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lofter.svg b/svgs/lofter.svg new file mode 100644 index 00000000000..93a4ba0b3d7 --- /dev/null +++ b/svgs/lofter.svg @@ -0,0 +1 @@ + diff --git a/svgs/next_transfer.svg b/svgs/next_transfer.svg new file mode 100644 index 00000000000..fe43a856055 --- /dev/null +++ b/svgs/next_transfer.svg @@ -0,0 +1 @@ + \ No newline at end of file From 9aea705997d1eab52afbd18122911fa8f349c743 Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Sun, 5 May 2024 20:06:10 +0300 Subject: [PATCH 059/527] Add Alkahraba, Alrajhi Bank, DEXTools, Malaa, SNB Mobile, Tameeni, Tawakkalna Services, Alinma App, ANB Telemoney, BingX, Bouki, Panda, Rabby Wallet, Tamara, Themer (#2052) * add 5 icons hungerstation (`com.hungerstation.android.web/com.hungerstation.android.web.hungeractivities.MainActivity`) almanea (`com.almanea.android/com.almanea.android.MainActivity`) circlys (`com.jmeyte.app/com.example.circlys_v2.MainActivity`) clicflyer (`main.ClicFlyer/main.ClicFlyer.Login.Splash`) mada_pay (`com.mada.madapay/com.emcrey.app.activities.SupportActivity`) * Update ciclys.svg * Updating names * Rename ciclys.svg to circlys.svg * Update Circlys drawable name * Added 15 icons * Alkahraba (`sa.com.se.alkahraba/sa.com.se.alkahraba.MainActivity`) * Alrajhi Bank (`com.alrajhiretailapp/com.alrajhiretailapp.MainActivity`) * DEXTools (`io.dextools.app/io.dextools.app.ui.splash.SplashActivity`) * Malaa (`tech.malaa.personal/tech.malaa.personal.MainActivity`) * SNB Mobile (`com.snb.alahlimobile/com.snb.alahlimobile.MainActivity`) * Tameeni (`tameeni.com/tameeni.com.MainActivity`) * Tawakkalna Services (`sa.gov.nic.twkhayat/com.tawakkalna.twkapp.ui.SplashActivity`) * Alinma App (`com.alinma.retail.mobile.v4/com.alinma.retail.mobile.v4.MainActivity`) * ANB Telemoney (`telemoneyapp.anb.keystore/telemoneyapp.anb.keystore.MainActivity`) * BingX (`pro.bingbon.app/pro.bingintl.ui.activity.MainActivity`) * Bouki (`com.emcrey.riyadbank/com.emcrey.bouki.MainActivity`) * Panda (`com.todoorstep.store/com.todoorstep.store.ui.activities.splash.SplashActivity`) * Rabby Wallet (`com.debank.rabbymobile/com.debank.rabbymobile.MainActivity`) * Tamara (`co.tamara.user/co.tamara.user.MainActivity`) * Themer (`com.therxmv.telegramthemer/com.therxmv.telegramthemer.ui.MainActivity`) * fixing alkahraba.svg not showing properly * I made modifications to icons and app namings Modified alinma_app, alkahraba, alrajhi_bank, anb_telemoney, bouki, rabby_wallet, snb_mobile, tameeni, tawakkalna_services, themer, appfilter.xml * Removed the word (app) I removed the word app from alinma icon name and in appfilter.xml * Update alinma.svg and alkahraba.svg * Update tameeni.svg reworked the icon * Update tawakkalna_services.svg to 12px stroke. themer.svg brush stroke to 10px. Lowered the icon a little bit * Update anb_telemoney.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 15 +++++++++++++ svgs/alinma.svg | 24 ++++++++++++++++++++ svgs/alkahraba.svg | 24 ++++++++++++++++++++ svgs/alrajhi_bank.svg | 28 +++++++++++++++++++++++ svgs/anb_telemoney.svg | 16 ++++++++++++++ svgs/bingx.svg | 22 ++++++++++++++++++ svgs/bouki.svg | 23 +++++++++++++++++++ svgs/dextools.svg | 42 +++++++++++++++++++++++++++++++++++ svgs/malaa.svg | 43 ++++++++++++++++++++++++++++++++++++ svgs/panda.svg | 23 +++++++++++++++++++ svgs/rabby_wallet.svg | 23 +++++++++++++++++++ svgs/snb_mobile.svg | 18 +++++++++++++++ svgs/tamara.svg | 22 ++++++++++++++++++ svgs/tameeni.svg | 22 ++++++++++++++++++ svgs/tawakkalna_services.svg | 23 +++++++++++++++++++ svgs/themer.svg | 29 ++++++++++++++++++++++++ 16 files changed, 397 insertions(+) create mode 100644 svgs/alinma.svg create mode 100644 svgs/alkahraba.svg create mode 100644 svgs/alrajhi_bank.svg create mode 100644 svgs/anb_telemoney.svg create mode 100644 svgs/bingx.svg create mode 100644 svgs/bouki.svg create mode 100644 svgs/dextools.svg create mode 100644 svgs/malaa.svg create mode 100644 svgs/panda.svg create mode 100644 svgs/rabby_wallet.svg create mode 100644 svgs/snb_mobile.svg create mode 100644 svgs/tamara.svg create mode 100644 svgs/tameeni.svg create mode 100644 svgs/tawakkalna_services.svg create mode 100644 svgs/themer.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 71039274238..9d4c21745a3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -293,6 +293,7 @@ + @@ -307,6 +308,7 @@ + @@ -328,6 +330,7 @@ + @@ -378,6 +381,7 @@ + @@ -921,6 +925,7 @@ + @@ -1085,6 +1090,7 @@ + @@ -2227,6 +2233,7 @@ + @@ -4853,6 +4860,7 @@ + @@ -6406,6 +6414,7 @@ + @@ -7271,6 +7280,7 @@ + @@ -8470,6 +8480,7 @@ + @@ -8904,7 +8915,9 @@ + + @@ -8952,6 +8965,7 @@ + @@ -9285,6 +9299,7 @@ + diff --git a/svgs/alinma.svg b/svgs/alinma.svg new file mode 100644 index 00000000000..e7dbaaaff0e --- /dev/null +++ b/svgs/alinma.svg @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/svgs/alkahraba.svg b/svgs/alkahraba.svg new file mode 100644 index 00000000000..2bae296bcbc --- /dev/null +++ b/svgs/alkahraba.svg @@ -0,0 +1,24 @@ + + + + diff --git a/svgs/alrajhi_bank.svg b/svgs/alrajhi_bank.svg new file mode 100644 index 00000000000..06ffd470584 --- /dev/null +++ b/svgs/alrajhi_bank.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/svgs/anb_telemoney.svg b/svgs/anb_telemoney.svg new file mode 100644 index 00000000000..e54d60e41a8 --- /dev/null +++ b/svgs/anb_telemoney.svg @@ -0,0 +1,16 @@ + + + + diff --git a/svgs/bingx.svg b/svgs/bingx.svg new file mode 100644 index 00000000000..cec716978b3 --- /dev/null +++ b/svgs/bingx.svg @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/svgs/bouki.svg b/svgs/bouki.svg new file mode 100644 index 00000000000..1059821f9f6 --- /dev/null +++ b/svgs/bouki.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/svgs/dextools.svg b/svgs/dextools.svg new file mode 100644 index 00000000000..e2916390777 --- /dev/null +++ b/svgs/dextools.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + diff --git a/svgs/malaa.svg b/svgs/malaa.svg new file mode 100644 index 00000000000..ec52a0fc9ab --- /dev/null +++ b/svgs/malaa.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + diff --git a/svgs/panda.svg b/svgs/panda.svg new file mode 100644 index 00000000000..082c22433f2 --- /dev/null +++ b/svgs/panda.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/svgs/rabby_wallet.svg b/svgs/rabby_wallet.svg new file mode 100644 index 00000000000..3fbf7e8a350 --- /dev/null +++ b/svgs/rabby_wallet.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/svgs/snb_mobile.svg b/svgs/snb_mobile.svg new file mode 100644 index 00000000000..44e04436d59 --- /dev/null +++ b/svgs/snb_mobile.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/svgs/tamara.svg b/svgs/tamara.svg new file mode 100644 index 00000000000..8bb3b0dd466 --- /dev/null +++ b/svgs/tamara.svg @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/svgs/tameeni.svg b/svgs/tameeni.svg new file mode 100644 index 00000000000..dc4499932ef --- /dev/null +++ b/svgs/tameeni.svg @@ -0,0 +1,22 @@ + + + + diff --git a/svgs/tawakkalna_services.svg b/svgs/tawakkalna_services.svg new file mode 100644 index 00000000000..9107780ef23 --- /dev/null +++ b/svgs/tawakkalna_services.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/svgs/themer.svg b/svgs/themer.svg new file mode 100644 index 00000000000..ff6686a2517 --- /dev/null +++ b/svgs/themer.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + From 2ae2f70ce9398ed500ea65de357a67b41fc65fa2 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 5 May 2024 23:04:34 +0300 Subject: [PATCH 060/527] +34 links (#2072) * +34 links * Minor fix * Minor svg rename --- app/assets/appfilter.xml | 543 +++++++++--------- svgs/{klooni.svg => _1010_klooni.svg} | 0 ...inute_school.svg => _10_minute_school.svg} | 0 svgs/{onedotonedotonedotone.svg => _1111.svg} | 0 svgs/{twelve_club.svg => _12_club.svg} | 0 svgs/{onegallery.svg => _1gallery.svg} | 0 svgs/{onepassword.svg => _1password.svg} | 0 svgs/{two_zero_four_eight.svg => _2048.svg} | 0 svgs/{twenty_minutes.svg => _20_minutes.svg} | 0 svgs/{twentythreeandme.svg => _23andme.svg} | 0 svgs/{twentyfourpay.svg => _24pay.svg} | 0 svgs/{twofas_auth.svg => _2fas_auth.svg} | 0 svgs/{doublegis.svg => _2gis.svg} | 0 svgs/{three_one_one.svg => _311.svg} | 0 ...o_live.svg => _360_reality_audio_live.svg} | 0 ..._arcore.svg => _3d_scanner_for_arcore.svg} | 0 svgs/{threedmark.svg => _3dmark.svg} | 0 svgs/{fourthreethree.svg => _433.svg} | 0 svgs/{cheburnet_vpn.svg => _4eburnet_vpn.svg} | 0 ...ownloader.svg => _4k_video_downloader.svg} | 0 svgs/{fourpda.svg => _4pda.svg} | 0 svgs/{secure_56.svg => _56_secure.svg} | 0 svgs/{journal.svg => _5_minute_journal.svg} | 0 svgs/{fiveg_tile.svg => _5g_tile.svg} | 0 svgs/{seven_eleven.svg => _7_eleven.svg} | 0 svgs/{sevensleep.svg => _7sleep.svg} | 0 svgs/{seven_zipper.svg => _7zipper.svg} | 0 .../{eight_ball_pool.svg => _8_ball_pool.svg} | 0 ..._bit_photo_lab.svg => _8bit_photo_lab.svg} | 0 svgs/{negentwee.svg => _9292.svg} | 0 svgs/{ninenine.svg => _99.svg} | 0 svgs/{ninegag.svg => _9gag.svg} | 0 ...a.svg => advanced_charging_controller.svg} | 0 svgs/{calyxvpn.svg => calyx_vpn.svg} | 0 ...ge_maker_gridart.svg => collage_maker.svg} | 0 svgs/{fake_messenger.svg => fake_chat.svg} | 0 ...indmydevice.svg => find_my_device_fmd.svg} | 0 svgs/{fizz_messages.svg => fizz.svg} | 0 svgs/google_duo.svg | 1 - ...easure.svg => gps_fields_area_measure.svg} | 0 svgs/{homecentre.svg => home_centre.svg} | 0 ...ue.svg => hot_lap_league_racing_mania.svg} | 0 ....svg => image_compressor_resize_image.svg} | 0 svgs/{imobile.svg => imobile_pay.svg} | 0 svgs/{ingress.svg => ingress_prime.svg} | 0 .../{jira.svg => jira_cloud_by_altassian.svg} | 0 ...pm.svg => lighthouse_power_management.svg} | 0 svgs/{f1_x_motogp.svg => nextgp.svg} | 0 svgs/{nix.svg => nix_on_droid.svg} | 0 ...raffinity.svg => noc_for_fur_affinity.svg} | 0 ...{engangskode.svg => one_time_password.svg} | 0 svgs/{hue.svg => phillips_hue.svg} | 0 ...tracker_control.svg => trackercontrol.svg} | 0 svgs/{hexamove.svg => v_moda.svg} | 0 54 files changed, 287 insertions(+), 257 deletions(-) rename svgs/{klooni.svg => _1010_klooni.svg} (100%) rename svgs/{ten_minute_school.svg => _10_minute_school.svg} (100%) rename svgs/{onedotonedotonedotone.svg => _1111.svg} (100%) rename svgs/{twelve_club.svg => _12_club.svg} (100%) rename svgs/{onegallery.svg => _1gallery.svg} (100%) rename svgs/{onepassword.svg => _1password.svg} (100%) rename svgs/{two_zero_four_eight.svg => _2048.svg} (100%) rename svgs/{twenty_minutes.svg => _20_minutes.svg} (100%) rename svgs/{twentythreeandme.svg => _23andme.svg} (100%) rename svgs/{twentyfourpay.svg => _24pay.svg} (100%) rename svgs/{twofas_auth.svg => _2fas_auth.svg} (100%) rename svgs/{doublegis.svg => _2gis.svg} (100%) rename svgs/{three_one_one.svg => _311.svg} (100%) rename svgs/{threesixzero_reality_audio_live.svg => _360_reality_audio_live.svg} (100%) rename svgs/{threed_scanner_for_arcore.svg => _3d_scanner_for_arcore.svg} (100%) rename svgs/{threedmark.svg => _3dmark.svg} (100%) rename svgs/{fourthreethree.svg => _433.svg} (100%) rename svgs/{cheburnet_vpn.svg => _4eburnet_vpn.svg} (100%) rename svgs/{fourk_video_downloader.svg => _4k_video_downloader.svg} (100%) rename svgs/{fourpda.svg => _4pda.svg} (100%) rename svgs/{secure_56.svg => _56_secure.svg} (100%) rename svgs/{journal.svg => _5_minute_journal.svg} (100%) rename svgs/{fiveg_tile.svg => _5g_tile.svg} (100%) rename svgs/{seven_eleven.svg => _7_eleven.svg} (100%) rename svgs/{sevensleep.svg => _7sleep.svg} (100%) rename svgs/{seven_zipper.svg => _7zipper.svg} (100%) rename svgs/{eight_ball_pool.svg => _8_ball_pool.svg} (100%) rename svgs/{eight_bit_photo_lab.svg => _8bit_photo_lab.svg} (100%) rename svgs/{negentwee.svg => _9292.svg} (100%) rename svgs/{ninenine.svg => _99.svg} (100%) rename svgs/{ninegag.svg => _9gag.svg} (100%) rename svgs/{acca.svg => advanced_charging_controller.svg} (100%) rename svgs/{calyxvpn.svg => calyx_vpn.svg} (100%) rename svgs/{collage_maker_gridart.svg => collage_maker.svg} (100%) rename svgs/{fake_messenger.svg => fake_chat.svg} (100%) rename svgs/{findmydevice.svg => find_my_device_fmd.svg} (100%) rename svgs/{fizz_messages.svg => fizz.svg} (100%) delete mode 100644 svgs/google_duo.svg rename svgs/{fields_area_measure.svg => gps_fields_area_measure.svg} (100%) rename svgs/{homecentre.svg => home_centre.svg} (100%) rename svgs/{hot_lap_league.svg => hot_lap_league_racing_mania.svg} (100%) rename svgs/{image_compressor_and_resizer.svg => image_compressor_resize_image.svg} (100%) rename svgs/{imobile.svg => imobile_pay.svg} (100%) rename svgs/{ingress.svg => ingress_prime.svg} (100%) rename svgs/{jira.svg => jira_cloud_by_altassian.svg} (100%) rename svgs/{lighthouse_pm.svg => lighthouse_power_management.svg} (100%) rename svgs/{f1_x_motogp.svg => nextgp.svg} (100%) rename svgs/{nix.svg => nix_on_droid.svg} (100%) rename svgs/{furaffinity.svg => noc_for_fur_affinity.svg} (100%) rename svgs/{engangskode.svg => one_time_password.svg} (100%) rename svgs/{hue.svg => phillips_hue.svg} (100%) rename svgs/{tracker_control.svg => trackercontrol.svg} (100%) rename svgs/{hexamove.svg => v_moda.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9d4c21745a3..c3ded7e9a7e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -38,71 +38,72 @@ - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -118,7 +119,6 @@ - @@ -178,6 +178,7 @@ + @@ -192,6 +193,7 @@ + @@ -293,12 +295,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + @@ -308,7 +333,6 @@ - @@ -330,7 +354,6 @@ - @@ -347,6 +370,7 @@ + @@ -386,6 +410,7 @@ + @@ -593,6 +618,7 @@ + @@ -692,9 +718,9 @@ - - + + @@ -1090,7 +1116,6 @@ - @@ -1142,9 +1167,6 @@ - - - @@ -1244,7 +1266,6 @@ - @@ -1354,8 +1375,8 @@ - - + + @@ -1509,7 +1530,6 @@ - @@ -1858,7 +1878,7 @@ - + @@ -2650,7 +2670,7 @@ - + @@ -2759,7 +2779,6 @@ - @@ -2772,10 +2791,10 @@ + - @@ -2789,10 +2808,10 @@ - + @@ -2849,7 +2868,6 @@ - @@ -2885,8 +2903,6 @@ - - @@ -2908,18 +2924,6 @@ - - - - - - - - - - - - @@ -2939,8 +2943,8 @@ - - + + @@ -2976,7 +2980,7 @@ - + @@ -3035,15 +3039,15 @@ - - - + + + - + @@ -3094,7 +3098,7 @@ - + @@ -3108,8 +3112,8 @@ - - + + @@ -3119,6 +3123,9 @@ + + + @@ -3196,8 +3203,6 @@ - - @@ -3288,7 +3293,7 @@ - + @@ -3431,7 +3436,7 @@ - + @@ -3462,7 +3467,6 @@ - @@ -3514,8 +3518,6 @@ - - @@ -3523,6 +3525,7 @@ + @@ -3544,9 +3547,11 @@ - - - + + + + + @@ -3613,6 +3618,7 @@ + @@ -3780,7 +3786,6 @@ - @@ -3817,11 +3822,11 @@ + - @@ -3835,7 +3840,7 @@ - + @@ -3879,7 +3884,6 @@ - @@ -3961,8 +3965,8 @@ - - + + @@ -3970,7 +3974,7 @@ - + @@ -3996,9 +4000,9 @@ - - - + + + @@ -4031,15 +4035,15 @@ - - - - + + + + @@ -4199,10 +4203,10 @@ - + - + @@ -4211,7 +4215,6 @@ - @@ -4301,24 +4304,6 @@ - - - - - - - - - - - - - - - - - - @@ -4672,7 +4657,7 @@ - + @@ -4714,6 +4699,7 @@ + @@ -4755,6 +4741,8 @@ + + @@ -4910,16 +4898,18 @@ + + - + @@ -5085,26 +5075,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -5418,8 +5388,8 @@ - - + + @@ -5498,27 +5468,11 @@ - + - - - - - - - - - - - - - - - - @@ -5894,7 +5848,9 @@ + + @@ -5927,7 +5883,7 @@ - + @@ -5935,6 +5891,8 @@ + + @@ -6224,6 +6182,10 @@ + + + + @@ -6259,6 +6221,7 @@ + @@ -6414,7 +6377,6 @@ - @@ -6546,6 +6508,7 @@ + @@ -6712,27 +6675,6 @@ - - - - - - - - - - - - - - - - - - - - - @@ -6813,9 +6755,9 @@ - - - + + + @@ -6937,7 +6879,7 @@ - + @@ -7255,7 +7197,7 @@ - + @@ -7399,26 +7341,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -7705,6 +7627,15 @@ + + + + + + + + + @@ -8208,6 +8139,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -8290,7 +8242,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8318,7 +8304,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8480,7 +8506,6 @@ - @@ -8917,7 +8942,6 @@ - @@ -8965,7 +8989,6 @@ - @@ -9032,11 +9055,11 @@ - + @@ -9464,10 +9487,10 @@ - - + + @@ -9557,8 +9580,6 @@ - - @@ -9624,8 +9645,8 @@ - + @@ -9744,6 +9765,8 @@ + + @@ -9788,6 +9811,7 @@ + @@ -9974,6 +9998,7 @@ + @@ -10076,6 +10101,8 @@ + + @@ -10120,12 +10147,12 @@ - - + + @@ -10669,6 +10696,8 @@ + + @@ -10808,9 +10837,17 @@ + + + + + + + + @@ -10836,6 +10873,7 @@ + @@ -10932,11 +10970,4 @@ - - - - - - - diff --git a/svgs/klooni.svg b/svgs/_1010_klooni.svg similarity index 100% rename from svgs/klooni.svg rename to svgs/_1010_klooni.svg diff --git a/svgs/ten_minute_school.svg b/svgs/_10_minute_school.svg similarity index 100% rename from svgs/ten_minute_school.svg rename to svgs/_10_minute_school.svg diff --git a/svgs/onedotonedotonedotone.svg b/svgs/_1111.svg similarity index 100% rename from svgs/onedotonedotonedotone.svg rename to svgs/_1111.svg diff --git a/svgs/twelve_club.svg b/svgs/_12_club.svg similarity index 100% rename from svgs/twelve_club.svg rename to svgs/_12_club.svg diff --git a/svgs/onegallery.svg b/svgs/_1gallery.svg similarity index 100% rename from svgs/onegallery.svg rename to svgs/_1gallery.svg diff --git a/svgs/onepassword.svg b/svgs/_1password.svg similarity index 100% rename from svgs/onepassword.svg rename to svgs/_1password.svg diff --git a/svgs/two_zero_four_eight.svg b/svgs/_2048.svg similarity index 100% rename from svgs/two_zero_four_eight.svg rename to svgs/_2048.svg diff --git a/svgs/twenty_minutes.svg b/svgs/_20_minutes.svg similarity index 100% rename from svgs/twenty_minutes.svg rename to svgs/_20_minutes.svg diff --git a/svgs/twentythreeandme.svg b/svgs/_23andme.svg similarity index 100% rename from svgs/twentythreeandme.svg rename to svgs/_23andme.svg diff --git a/svgs/twentyfourpay.svg b/svgs/_24pay.svg similarity index 100% rename from svgs/twentyfourpay.svg rename to svgs/_24pay.svg diff --git a/svgs/twofas_auth.svg b/svgs/_2fas_auth.svg similarity index 100% rename from svgs/twofas_auth.svg rename to svgs/_2fas_auth.svg diff --git a/svgs/doublegis.svg b/svgs/_2gis.svg similarity index 100% rename from svgs/doublegis.svg rename to svgs/_2gis.svg diff --git a/svgs/three_one_one.svg b/svgs/_311.svg similarity index 100% rename from svgs/three_one_one.svg rename to svgs/_311.svg diff --git a/svgs/threesixzero_reality_audio_live.svg b/svgs/_360_reality_audio_live.svg similarity index 100% rename from svgs/threesixzero_reality_audio_live.svg rename to svgs/_360_reality_audio_live.svg diff --git a/svgs/threed_scanner_for_arcore.svg b/svgs/_3d_scanner_for_arcore.svg similarity index 100% rename from svgs/threed_scanner_for_arcore.svg rename to svgs/_3d_scanner_for_arcore.svg diff --git a/svgs/threedmark.svg b/svgs/_3dmark.svg similarity index 100% rename from svgs/threedmark.svg rename to svgs/_3dmark.svg diff --git a/svgs/fourthreethree.svg b/svgs/_433.svg similarity index 100% rename from svgs/fourthreethree.svg rename to svgs/_433.svg diff --git a/svgs/cheburnet_vpn.svg b/svgs/_4eburnet_vpn.svg similarity index 100% rename from svgs/cheburnet_vpn.svg rename to svgs/_4eburnet_vpn.svg diff --git a/svgs/fourk_video_downloader.svg b/svgs/_4k_video_downloader.svg similarity index 100% rename from svgs/fourk_video_downloader.svg rename to svgs/_4k_video_downloader.svg diff --git a/svgs/fourpda.svg b/svgs/_4pda.svg similarity index 100% rename from svgs/fourpda.svg rename to svgs/_4pda.svg diff --git a/svgs/secure_56.svg b/svgs/_56_secure.svg similarity index 100% rename from svgs/secure_56.svg rename to svgs/_56_secure.svg diff --git a/svgs/journal.svg b/svgs/_5_minute_journal.svg similarity index 100% rename from svgs/journal.svg rename to svgs/_5_minute_journal.svg diff --git a/svgs/fiveg_tile.svg b/svgs/_5g_tile.svg similarity index 100% rename from svgs/fiveg_tile.svg rename to svgs/_5g_tile.svg diff --git a/svgs/seven_eleven.svg b/svgs/_7_eleven.svg similarity index 100% rename from svgs/seven_eleven.svg rename to svgs/_7_eleven.svg diff --git a/svgs/sevensleep.svg b/svgs/_7sleep.svg similarity index 100% rename from svgs/sevensleep.svg rename to svgs/_7sleep.svg diff --git a/svgs/seven_zipper.svg b/svgs/_7zipper.svg similarity index 100% rename from svgs/seven_zipper.svg rename to svgs/_7zipper.svg diff --git a/svgs/eight_ball_pool.svg b/svgs/_8_ball_pool.svg similarity index 100% rename from svgs/eight_ball_pool.svg rename to svgs/_8_ball_pool.svg diff --git a/svgs/eight_bit_photo_lab.svg b/svgs/_8bit_photo_lab.svg similarity index 100% rename from svgs/eight_bit_photo_lab.svg rename to svgs/_8bit_photo_lab.svg diff --git a/svgs/negentwee.svg b/svgs/_9292.svg similarity index 100% rename from svgs/negentwee.svg rename to svgs/_9292.svg diff --git a/svgs/ninenine.svg b/svgs/_99.svg similarity index 100% rename from svgs/ninenine.svg rename to svgs/_99.svg diff --git a/svgs/ninegag.svg b/svgs/_9gag.svg similarity index 100% rename from svgs/ninegag.svg rename to svgs/_9gag.svg diff --git a/svgs/acca.svg b/svgs/advanced_charging_controller.svg similarity index 100% rename from svgs/acca.svg rename to svgs/advanced_charging_controller.svg diff --git a/svgs/calyxvpn.svg b/svgs/calyx_vpn.svg similarity index 100% rename from svgs/calyxvpn.svg rename to svgs/calyx_vpn.svg diff --git a/svgs/collage_maker_gridart.svg b/svgs/collage_maker.svg similarity index 100% rename from svgs/collage_maker_gridart.svg rename to svgs/collage_maker.svg diff --git a/svgs/fake_messenger.svg b/svgs/fake_chat.svg similarity index 100% rename from svgs/fake_messenger.svg rename to svgs/fake_chat.svg diff --git a/svgs/findmydevice.svg b/svgs/find_my_device_fmd.svg similarity index 100% rename from svgs/findmydevice.svg rename to svgs/find_my_device_fmd.svg diff --git a/svgs/fizz_messages.svg b/svgs/fizz.svg similarity index 100% rename from svgs/fizz_messages.svg rename to svgs/fizz.svg diff --git a/svgs/google_duo.svg b/svgs/google_duo.svg deleted file mode 100644 index 267cd95fc6f..00000000000 --- a/svgs/google_duo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/fields_area_measure.svg b/svgs/gps_fields_area_measure.svg similarity index 100% rename from svgs/fields_area_measure.svg rename to svgs/gps_fields_area_measure.svg diff --git a/svgs/homecentre.svg b/svgs/home_centre.svg similarity index 100% rename from svgs/homecentre.svg rename to svgs/home_centre.svg diff --git a/svgs/hot_lap_league.svg b/svgs/hot_lap_league_racing_mania.svg similarity index 100% rename from svgs/hot_lap_league.svg rename to svgs/hot_lap_league_racing_mania.svg diff --git a/svgs/image_compressor_and_resizer.svg b/svgs/image_compressor_resize_image.svg similarity index 100% rename from svgs/image_compressor_and_resizer.svg rename to svgs/image_compressor_resize_image.svg diff --git a/svgs/imobile.svg b/svgs/imobile_pay.svg similarity index 100% rename from svgs/imobile.svg rename to svgs/imobile_pay.svg diff --git a/svgs/ingress.svg b/svgs/ingress_prime.svg similarity index 100% rename from svgs/ingress.svg rename to svgs/ingress_prime.svg diff --git a/svgs/jira.svg b/svgs/jira_cloud_by_altassian.svg similarity index 100% rename from svgs/jira.svg rename to svgs/jira_cloud_by_altassian.svg diff --git a/svgs/lighthouse_pm.svg b/svgs/lighthouse_power_management.svg similarity index 100% rename from svgs/lighthouse_pm.svg rename to svgs/lighthouse_power_management.svg diff --git a/svgs/f1_x_motogp.svg b/svgs/nextgp.svg similarity index 100% rename from svgs/f1_x_motogp.svg rename to svgs/nextgp.svg diff --git a/svgs/nix.svg b/svgs/nix_on_droid.svg similarity index 100% rename from svgs/nix.svg rename to svgs/nix_on_droid.svg diff --git a/svgs/furaffinity.svg b/svgs/noc_for_fur_affinity.svg similarity index 100% rename from svgs/furaffinity.svg rename to svgs/noc_for_fur_affinity.svg diff --git a/svgs/engangskode.svg b/svgs/one_time_password.svg similarity index 100% rename from svgs/engangskode.svg rename to svgs/one_time_password.svg diff --git a/svgs/hue.svg b/svgs/phillips_hue.svg similarity index 100% rename from svgs/hue.svg rename to svgs/phillips_hue.svg diff --git a/svgs/tracker_control.svg b/svgs/trackercontrol.svg similarity index 100% rename from svgs/tracker_control.svg rename to svgs/trackercontrol.svg diff --git a/svgs/hexamove.svg b/svgs/v_moda.svg similarity index 100% rename from svgs/hexamove.svg rename to svgs/v_moda.svg From e4b874de53a9228b6ef79d72c86237f89d88b294 Mon Sep 17 00:00:00 2001 From: Airon <122789671+airon-main@users.noreply.github.com> Date: Mon, 6 May 2024 13:40:40 +0700 Subject: [PATCH 061/527] +12 icons, +2 links (#2069) * feat:[AS]add 2 link * Revert "feat:[AS]add 2 link" This reverts commit b2da916efa2b386034ed8e66c8bf46cc865f862c. revert * Style:[AS]+12 icons, +2 links * style:[AS]modified 9 icons * fix:[AS]Forest Settings -> Forest Live Wallpaper * style:[AS]modified 4 icons, renamed 1 icon --- app/assets/appfilter.xml | 14 ++++++++++++++ svgs/aha_games.svg | 4 ++++ svgs/bardi_smart_home.svg | 6 ++++++ svgs/basit_icons.svg | 3 +++ svgs/deen.svg | 6 ++++++ svgs/forest_live_wallpaper.svg | 3 +++ svgs/freenet_funk.svg | 3 +++ svgs/icedrive.svg | 6 ++++++ svgs/juno_icons.svg | 3 +++ svgs/quick_tiles.svg | 4 ++++ svgs/traffic_rider.svg | 5 +++++ svgs/vinty_icons.svg | 4 ++++ svgs/zwart_icons.svg | 4 ++++ 13 files changed, 65 insertions(+) create mode 100644 svgs/aha_games.svg create mode 100644 svgs/bardi_smart_home.svg create mode 100644 svgs/basit_icons.svg create mode 100644 svgs/deen.svg create mode 100644 svgs/forest_live_wallpaper.svg create mode 100644 svgs/freenet_funk.svg create mode 100644 svgs/icedrive.svg create mode 100644 svgs/juno_icons.svg create mode 100644 svgs/quick_tiles.svg create mode 100644 svgs/traffic_rider.svg create mode 100644 svgs/vinty_icons.svg create mode 100644 svgs/zwart_icons.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index c3ded7e9a7e..9ace63a7789 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -217,6 +217,7 @@ + @@ -809,6 +810,7 @@ + @@ -817,6 +819,7 @@ + @@ -2187,6 +2190,7 @@ + @@ -3111,6 +3115,7 @@ + @@ -3165,6 +3170,7 @@ + @@ -3923,6 +3929,7 @@ + @@ -4223,6 +4230,7 @@ + @@ -5683,6 +5691,7 @@ + @@ -7196,6 +7205,7 @@ + @@ -7206,6 +7216,7 @@ + @@ -9499,6 +9510,7 @@ + @@ -9919,6 +9931,7 @@ + @@ -10707,6 +10720,7 @@ + diff --git a/svgs/aha_games.svg b/svgs/aha_games.svg new file mode 100644 index 00000000000..06e616761fc --- /dev/null +++ b/svgs/aha_games.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/bardi_smart_home.svg b/svgs/bardi_smart_home.svg new file mode 100644 index 00000000000..2af3b484e91 --- /dev/null +++ b/svgs/bardi_smart_home.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/basit_icons.svg b/svgs/basit_icons.svg new file mode 100644 index 00000000000..a2b370beecb --- /dev/null +++ b/svgs/basit_icons.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/deen.svg b/svgs/deen.svg new file mode 100644 index 00000000000..fbe4d1cdf93 --- /dev/null +++ b/svgs/deen.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/forest_live_wallpaper.svg b/svgs/forest_live_wallpaper.svg new file mode 100644 index 00000000000..fb7c3d8070c --- /dev/null +++ b/svgs/forest_live_wallpaper.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/freenet_funk.svg b/svgs/freenet_funk.svg new file mode 100644 index 00000000000..53a95a76986 --- /dev/null +++ b/svgs/freenet_funk.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/icedrive.svg b/svgs/icedrive.svg new file mode 100644 index 00000000000..ab04aaed438 --- /dev/null +++ b/svgs/icedrive.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/juno_icons.svg b/svgs/juno_icons.svg new file mode 100644 index 00000000000..d111c01779b --- /dev/null +++ b/svgs/juno_icons.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/quick_tiles.svg b/svgs/quick_tiles.svg new file mode 100644 index 00000000000..89607aaa7a0 --- /dev/null +++ b/svgs/quick_tiles.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/traffic_rider.svg b/svgs/traffic_rider.svg new file mode 100644 index 00000000000..f3ab7b10a5c --- /dev/null +++ b/svgs/traffic_rider.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svgs/vinty_icons.svg b/svgs/vinty_icons.svg new file mode 100644 index 00000000000..a73696a6903 --- /dev/null +++ b/svgs/vinty_icons.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/zwart_icons.svg b/svgs/zwart_icons.svg new file mode 100644 index 00000000000..6b80395052c --- /dev/null +++ b/svgs/zwart_icons.svg @@ -0,0 +1,4 @@ + + + + From 37d33f36a99e128c32919e3b07ed7f00f92fc1b8 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 6 May 2024 10:16:24 +0300 Subject: [PATCH 062/527] How to name drawables if the app name starts with a digit (#2073) --- CONTRIBUTING.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b19fa9610d7..6b1947596e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -112,6 +112,15 @@ Wrong Correct ``` +If the app name starts with a digit, then the drawable should start with `_`. +``` +Wrong + +``` +``` +Correct + +``` ## Adding an icon to Lawnicons Here's how to add an icon to Lawnicons: From de39ac9d1854c57adecdd56ee5188c7f0ee19cec Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 6 May 2024 11:36:08 +0300 Subject: [PATCH 063/527] +53 links (#2074) --- app/assets/appfilter.xml | 131 ++++++++++++------ svgs/{idm.svg => _1dm.svg} | 0 svgs/{idm_plus.svg => _1dm_plus.svg} | 0 svgs/{one_more_music.svg => _1more_music.svg} | 0 ...simple_reminder.svg => simplereminder.svg} | 0 svgs/{vinyl.svg => vinyl_music_player.svg} | 0 6 files changed, 92 insertions(+), 39 deletions(-) rename svgs/{idm.svg => _1dm.svg} (100%) rename svgs/{idm_plus.svg => _1dm_plus.svg} (100%) rename svgs/{one_more_music.svg => _1more_music.svg} (100%) rename svgs/{simple_reminder.svg => simplereminder.svg} (100%) rename svgs/{vinyl.svg => vinyl_music_player.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9ace63a7789..786ec4581f3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -42,14 +42,14 @@ - + - - - - + + + + - + @@ -157,7 +157,6 @@ - @@ -967,6 +966,7 @@ + @@ -979,6 +979,7 @@ + @@ -2109,6 +2110,7 @@ + @@ -2138,6 +2140,7 @@ + @@ -2205,6 +2208,8 @@ + + @@ -2313,6 +2318,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -4138,7 +4166,7 @@ - + @@ -4155,7 +4183,7 @@ - + @@ -4503,7 +4531,7 @@ - + @@ -4529,25 +4557,7 @@ - - - - - - - - - - - - - - - - - - @@ -4621,8 +4631,8 @@ - - + + @@ -5398,7 +5408,7 @@ - + @@ -5476,8 +5486,8 @@ - + @@ -5585,6 +5595,7 @@ + @@ -5754,6 +5765,7 @@ + @@ -5819,10 +5831,10 @@ - + @@ -6054,6 +6066,7 @@ + @@ -7037,6 +7050,7 @@ + @@ -7047,11 +7061,9 @@ - - @@ -7792,6 +7804,7 @@ + @@ -8272,6 +8285,24 @@ + + + + + + + + + + + + + + + + + + @@ -8361,7 +8392,8 @@ - + + @@ -8839,8 +8871,8 @@ - - + + @@ -9036,6 +9068,22 @@ + + + + + + + + + + + + + + + + @@ -9932,7 +9980,7 @@ - + @@ -10601,6 +10649,11 @@ + + + + + diff --git a/svgs/idm.svg b/svgs/_1dm.svg similarity index 100% rename from svgs/idm.svg rename to svgs/_1dm.svg diff --git a/svgs/idm_plus.svg b/svgs/_1dm_plus.svg similarity index 100% rename from svgs/idm_plus.svg rename to svgs/_1dm_plus.svg diff --git a/svgs/one_more_music.svg b/svgs/_1more_music.svg similarity index 100% rename from svgs/one_more_music.svg rename to svgs/_1more_music.svg diff --git a/svgs/simple_reminder.svg b/svgs/simplereminder.svg similarity index 100% rename from svgs/simple_reminder.svg rename to svgs/simplereminder.svg diff --git a/svgs/vinyl.svg b/svgs/vinyl_music_player.svg similarity index 100% rename from svgs/vinyl.svg rename to svgs/vinyl_music_player.svg From 2680394183a8b17ce8c71a87a836f59cab3378eb Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 6 May 2024 15:37:12 +0300 Subject: [PATCH 064/527] +150 links (#2075) * +150 links * Minor fix --- app/assets/appfilter.xml | 408 ++++++++++++------ svgs/{rezervio.svg => ailiber.svg} | 0 svgs/{bofa.svg => bank_of_america.svg} | 0 ..._words.svg => brain_test_tricky_words.svg} | 0 svgs/brightspace_pulse.svg | 1 + ...ol.svg => disable_notification_popups.svg} | 0 ...ft.svg => league_of_legends_wild_rift.svg} | 0 svgs/{power_bi.svg => microsoft_power_bi.svg} | 0 ...e_play.svg => playstation_remote_play.svg} | 0 svgs/{pulsar.svg => pulsar_music_player.svg} | 0 svgs/pulse.svg | 2 +- svgs/pulse_ai_wallpapers.svg | 1 - ...{qibla_direction.svg => qibla_compass.svg} | 0 svgs/{qnb_finansbank.svg => qnb.svg} | 0 svgs/{realvnc.svg => realvnc_viewer.svg} | 0 ...{reev_chroma.svg => reev_chroma_icons.svg} | 0 svgs/{reev_dark.svg => reev_dark_icons.svg} | 0 svgs/{reev_pro.svg => reev_pro_icons.svg} | 0 ..._control.svg => remote_control_for_tv.svg} | 0 svgs/{resso.svg => resso_music.svg} | 0 ..._by_image.svg => reverse_image_search.svg} | 0 ...th_player.svg => stealth_audio_player.svg} | 0 svgs/{stickify_store.svg => stickify.svg} | 0 svgs/{tempest.svg => tempest_weather.svg} | 0 ..._idolmaster_million_live_theater_days.svg} | 0 svgs/{toi.svg => times_of_india.svg} | 0 ..._go_ewallet.svg => touch_n_go_ewallet.svg} | 0 ...tutorialspoint.svg => tutorials_point.svg} | 0 svgs/{unit_lab.svg => unit_converter_lab.svg} | 0 svgs/{upwork_talent.svg => upwork.svg} | 0 ...sideview.svg => video_and_tv_sideview.svg} | 0 ...e_maker.svg => video_editor_and_maker.svg} | 0 ..._to_mp3_converter.svg => video_to_mp3.svg} | 0 ...etter_online.svg => weather_and_radar.svg} | 0 34 files changed, 281 insertions(+), 131 deletions(-) rename svgs/{rezervio.svg => ailiber.svg} (100%) rename svgs/{bofa.svg => bank_of_america.svg} (100%) rename svgs/{tricky_words.svg => brain_test_tricky_words.svg} (100%) create mode 100644 svgs/brightspace_pulse.svg rename svgs/{popupcontrol.svg => disable_notification_popups.svg} (100%) rename svgs/{wild_rift.svg => league_of_legends_wild_rift.svg} (100%) rename svgs/{power_bi.svg => microsoft_power_bi.svg} (100%) rename svgs/{ps_remote_play.svg => playstation_remote_play.svg} (100%) rename svgs/{pulsar.svg => pulsar_music_player.svg} (100%) delete mode 100644 svgs/pulse_ai_wallpapers.svg rename svgs/{qibla_direction.svg => qibla_compass.svg} (100%) rename svgs/{qnb_finansbank.svg => qnb.svg} (100%) rename svgs/{realvnc.svg => realvnc_viewer.svg} (100%) rename svgs/{reev_chroma.svg => reev_chroma_icons.svg} (100%) rename svgs/{reev_dark.svg => reev_dark_icons.svg} (100%) rename svgs/{reev_pro.svg => reev_pro_icons.svg} (100%) rename svgs/{tv_remote_control.svg => remote_control_for_tv.svg} (100%) rename svgs/{resso.svg => resso_music.svg} (100%) rename svgs/{search_by_image.svg => reverse_image_search.svg} (100%) rename svgs/{stealth_player.svg => stealth_audio_player.svg} (100%) rename svgs/{stickify_store.svg => stickify.svg} (100%) rename svgs/{tempest.svg => tempest_weather.svg} (100%) rename svgs/{sse.svg => the_idolmaster_million_live_theater_days.svg} (100%) rename svgs/{toi.svg => times_of_india.svg} (100%) rename svgs/{touch_and_go_ewallet.svg => touch_n_go_ewallet.svg} (100%) rename svgs/{tutorialspoint.svg => tutorials_point.svg} (100%) rename svgs/{unit_lab.svg => unit_converter_lab.svg} (100%) rename svgs/{upwork_talent.svg => upwork.svg} (100%) rename svgs/{video_tv_sideview.svg => video_and_tv_sideview.svg} (100%) rename svgs/{video_editor_movie_maker.svg => video_editor_and_maker.svg} (100%) rename svgs/{video_to_mp3_converter.svg => video_to_mp3.svg} (100%) rename svgs/{wetter_online.svg => weather_and_radar.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 786ec4581f3..a9efd944bf4 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -226,6 +226,7 @@ + @@ -263,6 +264,8 @@ + + @@ -490,6 +493,7 @@ + @@ -544,6 +548,7 @@ + @@ -788,10 +793,11 @@ - - - - + + + + + @@ -933,6 +939,7 @@ + @@ -1018,6 +1025,14 @@ + + + + + + + + @@ -1030,6 +1045,7 @@ + @@ -1149,6 +1165,7 @@ + @@ -1163,12 +1180,18 @@ + + + + + + @@ -1296,6 +1319,7 @@ + @@ -1565,13 +1589,18 @@ + + + + + @@ -1659,6 +1688,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2315,6 +2373,7 @@ + @@ -2353,6 +2412,11 @@ + + + + + @@ -2539,7 +2603,9 @@ + + @@ -2593,6 +2659,7 @@ + @@ -2728,6 +2795,7 @@ + @@ -2830,6 +2898,7 @@ + @@ -3043,6 +3112,7 @@ + @@ -3496,9 +3566,12 @@ + + + @@ -3545,10 +3618,12 @@ + + @@ -3595,6 +3670,7 @@ + @@ -3639,6 +3715,7 @@ + @@ -3655,6 +3732,7 @@ + @@ -3706,6 +3784,7 @@ + @@ -3773,6 +3852,7 @@ + @@ -4018,14 +4098,36 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -4033,6 +4135,8 @@ + + @@ -4099,6 +4203,8 @@ + + @@ -4121,6 +4227,7 @@ + @@ -4231,6 +4338,7 @@ + @@ -4584,6 +4692,7 @@ + @@ -4733,6 +4842,7 @@ + @@ -4749,7 +4859,7 @@ - + @@ -4832,6 +4942,7 @@ + @@ -4886,10 +4997,12 @@ + + @@ -5234,7 +5347,12 @@ + + + + + @@ -5398,6 +5516,7 @@ + @@ -5426,6 +5545,9 @@ + + + @@ -5434,6 +5556,9 @@ + + + @@ -5735,6 +5860,20 @@ + + + + + + + + + + + + + + @@ -5779,6 +5918,18 @@ + + + + + + + + + + + + @@ -6048,6 +6199,22 @@ + + + + + + + + + + + + + + + + @@ -6809,6 +6976,7 @@ + @@ -6899,6 +7067,7 @@ + @@ -6987,7 +7156,6 @@ - @@ -7007,26 +7175,8 @@ - - - - - - - - - - - - - - - - - - @@ -7034,9 +7184,24 @@ + + + + + + + + + + + + + + + + + - - @@ -7051,22 +7216,9 @@ - - - - - - - - - - - - - - + @@ -7109,10 +7261,9 @@ - - - - + + + @@ -7123,11 +7274,9 @@ - - - + + - @@ -7136,8 +7285,8 @@ - - + + @@ -7148,7 +7297,7 @@ - + @@ -7171,7 +7320,7 @@ - + @@ -7185,6 +7334,8 @@ + + @@ -7192,8 +7343,6 @@ - - @@ -7209,8 +7358,8 @@ - - + + @@ -7225,8 +7374,8 @@ - - + + @@ -7238,13 +7387,11 @@ - - - + - + @@ -7269,7 +7416,6 @@ - @@ -7282,6 +7428,7 @@ + @@ -7317,7 +7464,6 @@ - @@ -7326,11 +7472,14 @@ + + + @@ -7413,9 +7562,9 @@ - - - + + + @@ -7434,6 +7583,7 @@ + @@ -7453,8 +7603,8 @@ - - + + @@ -7478,6 +7628,8 @@ + + @@ -7493,7 +7645,6 @@ - @@ -7643,6 +7794,8 @@ + + @@ -7670,6 +7823,7 @@ + @@ -7710,8 +7864,6 @@ - - @@ -7790,8 +7942,6 @@ - - @@ -8403,7 +8553,7 @@ - + @@ -8455,18 +8605,19 @@ + + - - + @@ -8565,9 +8716,7 @@ - - - + @@ -8577,7 +8726,6 @@ - @@ -8585,6 +8733,7 @@ + @@ -8630,8 +8779,8 @@ - - + + @@ -8707,7 +8856,7 @@ - + @@ -8770,7 +8919,7 @@ - + @@ -8793,7 +8942,7 @@ - + @@ -8826,13 +8975,13 @@ + - @@ -8842,16 +8991,18 @@ + + - - + + @@ -8874,6 +9025,8 @@ + + @@ -9027,7 +9180,7 @@ - + @@ -9097,8 +9250,8 @@ - - + + @@ -9364,7 +9517,7 @@ - + @@ -9375,8 +9528,7 @@ - - + @@ -9432,9 +9584,9 @@ - - + + @@ -9452,6 +9604,7 @@ + @@ -9477,7 +9630,6 @@ - @@ -9503,7 +9655,6 @@ - @@ -9536,6 +9687,7 @@ + @@ -9605,11 +9757,10 @@ + - - @@ -9620,7 +9771,7 @@ - + @@ -9680,13 +9831,13 @@ - - - - - + + + + + @@ -9696,10 +9847,9 @@ - + - @@ -9788,16 +9938,16 @@ - + + - @@ -9842,8 +9992,8 @@ - - + + @@ -9861,12 +10011,12 @@ - - + + @@ -9874,7 +10024,7 @@ - + @@ -9944,7 +10094,7 @@ - + @@ -9954,10 +10104,10 @@ - + - + @@ -9976,7 +10126,7 @@ - + @@ -10025,8 +10175,6 @@ - - @@ -10062,7 +10210,7 @@ - + @@ -10090,6 +10238,7 @@ + @@ -10176,6 +10325,10 @@ + + + + @@ -10186,7 +10339,7 @@ - + @@ -10208,10 +10361,6 @@ - - - - @@ -10386,7 +10535,6 @@ - @@ -10916,6 +11064,7 @@ + @@ -11019,6 +11168,7 @@ + diff --git a/svgs/rezervio.svg b/svgs/ailiber.svg similarity index 100% rename from svgs/rezervio.svg rename to svgs/ailiber.svg diff --git a/svgs/bofa.svg b/svgs/bank_of_america.svg similarity index 100% rename from svgs/bofa.svg rename to svgs/bank_of_america.svg diff --git a/svgs/tricky_words.svg b/svgs/brain_test_tricky_words.svg similarity index 100% rename from svgs/tricky_words.svg rename to svgs/brain_test_tricky_words.svg diff --git a/svgs/brightspace_pulse.svg b/svgs/brightspace_pulse.svg new file mode 100644 index 00000000000..075e09996ba --- /dev/null +++ b/svgs/brightspace_pulse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/popupcontrol.svg b/svgs/disable_notification_popups.svg similarity index 100% rename from svgs/popupcontrol.svg rename to svgs/disable_notification_popups.svg diff --git a/svgs/wild_rift.svg b/svgs/league_of_legends_wild_rift.svg similarity index 100% rename from svgs/wild_rift.svg rename to svgs/league_of_legends_wild_rift.svg diff --git a/svgs/power_bi.svg b/svgs/microsoft_power_bi.svg similarity index 100% rename from svgs/power_bi.svg rename to svgs/microsoft_power_bi.svg diff --git a/svgs/ps_remote_play.svg b/svgs/playstation_remote_play.svg similarity index 100% rename from svgs/ps_remote_play.svg rename to svgs/playstation_remote_play.svg diff --git a/svgs/pulsar.svg b/svgs/pulsar_music_player.svg similarity index 100% rename from svgs/pulsar.svg rename to svgs/pulsar_music_player.svg diff --git a/svgs/pulse.svg b/svgs/pulse.svg index 075e09996ba..1e0e786c0dd 100644 --- a/svgs/pulse.svg +++ b/svgs/pulse.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pulse_ai_wallpapers.svg b/svgs/pulse_ai_wallpapers.svg deleted file mode 100644 index 1e0e786c0dd..00000000000 --- a/svgs/pulse_ai_wallpapers.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/qibla_direction.svg b/svgs/qibla_compass.svg similarity index 100% rename from svgs/qibla_direction.svg rename to svgs/qibla_compass.svg diff --git a/svgs/qnb_finansbank.svg b/svgs/qnb.svg similarity index 100% rename from svgs/qnb_finansbank.svg rename to svgs/qnb.svg diff --git a/svgs/realvnc.svg b/svgs/realvnc_viewer.svg similarity index 100% rename from svgs/realvnc.svg rename to svgs/realvnc_viewer.svg diff --git a/svgs/reev_chroma.svg b/svgs/reev_chroma_icons.svg similarity index 100% rename from svgs/reev_chroma.svg rename to svgs/reev_chroma_icons.svg diff --git a/svgs/reev_dark.svg b/svgs/reev_dark_icons.svg similarity index 100% rename from svgs/reev_dark.svg rename to svgs/reev_dark_icons.svg diff --git a/svgs/reev_pro.svg b/svgs/reev_pro_icons.svg similarity index 100% rename from svgs/reev_pro.svg rename to svgs/reev_pro_icons.svg diff --git a/svgs/tv_remote_control.svg b/svgs/remote_control_for_tv.svg similarity index 100% rename from svgs/tv_remote_control.svg rename to svgs/remote_control_for_tv.svg diff --git a/svgs/resso.svg b/svgs/resso_music.svg similarity index 100% rename from svgs/resso.svg rename to svgs/resso_music.svg diff --git a/svgs/search_by_image.svg b/svgs/reverse_image_search.svg similarity index 100% rename from svgs/search_by_image.svg rename to svgs/reverse_image_search.svg diff --git a/svgs/stealth_player.svg b/svgs/stealth_audio_player.svg similarity index 100% rename from svgs/stealth_player.svg rename to svgs/stealth_audio_player.svg diff --git a/svgs/stickify_store.svg b/svgs/stickify.svg similarity index 100% rename from svgs/stickify_store.svg rename to svgs/stickify.svg diff --git a/svgs/tempest.svg b/svgs/tempest_weather.svg similarity index 100% rename from svgs/tempest.svg rename to svgs/tempest_weather.svg diff --git a/svgs/sse.svg b/svgs/the_idolmaster_million_live_theater_days.svg similarity index 100% rename from svgs/sse.svg rename to svgs/the_idolmaster_million_live_theater_days.svg diff --git a/svgs/toi.svg b/svgs/times_of_india.svg similarity index 100% rename from svgs/toi.svg rename to svgs/times_of_india.svg diff --git a/svgs/touch_and_go_ewallet.svg b/svgs/touch_n_go_ewallet.svg similarity index 100% rename from svgs/touch_and_go_ewallet.svg rename to svgs/touch_n_go_ewallet.svg diff --git a/svgs/tutorialspoint.svg b/svgs/tutorials_point.svg similarity index 100% rename from svgs/tutorialspoint.svg rename to svgs/tutorials_point.svg diff --git a/svgs/unit_lab.svg b/svgs/unit_converter_lab.svg similarity index 100% rename from svgs/unit_lab.svg rename to svgs/unit_converter_lab.svg diff --git a/svgs/upwork_talent.svg b/svgs/upwork.svg similarity index 100% rename from svgs/upwork_talent.svg rename to svgs/upwork.svg diff --git a/svgs/video_tv_sideview.svg b/svgs/video_and_tv_sideview.svg similarity index 100% rename from svgs/video_tv_sideview.svg rename to svgs/video_and_tv_sideview.svg diff --git a/svgs/video_editor_movie_maker.svg b/svgs/video_editor_and_maker.svg similarity index 100% rename from svgs/video_editor_movie_maker.svg rename to svgs/video_editor_and_maker.svg diff --git a/svgs/video_to_mp3_converter.svg b/svgs/video_to_mp3.svg similarity index 100% rename from svgs/video_to_mp3_converter.svg rename to svgs/video_to_mp3.svg diff --git a/svgs/wetter_online.svg b/svgs/weather_and_radar.svg similarity index 100% rename from svgs/wetter_online.svg rename to svgs/weather_and_radar.svg From 5e6baa7d70b643dc590cc4429591996d0ef1a88a Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 7 May 2024 02:20:37 +0300 Subject: [PATCH 065/527] +101 links (#2076) * +101 links * Minor fix --- app/assets/appfilter.xml | 333 ++++++++++++------ ....svg => always_on_edge_music_lighting.svg} | 0 svgs/{ncalc.svg => calculator_n_plus.svg} | 0 ...y.svg => english_malayalam_dictionary.svg} | 0 svgs/{lena_dark.svg => lena_dark_icons.svg} | 0 svgs/{lux_icons_free.svg => lux_icons.svg} | 0 ....svg => magic_the_gathering_companion.svg} | 0 svgs/{mail_fr.svg => mail_de.svg} | 0 svgs/{manual_cam.svg => manual_camera.svg} | 0 svgs/michelin_guide.svg | 1 - ...microsoft_office.svg => microsoft_365.svg} | 0 ...t365_admin.svg => microsoft_365_admin.svg} | 0 svgs/{onedrive.svg => microsoft_onedrive.svg} | 0 svgs/{milk_choco.svg => milkchoco.svg} | 0 svgs/{mj_pdf_reader.svg => mj_pdf.svg} | 0 svgs/{morsemania.svg => morse_mania.svg} | 0 ...ot.svg => music_player_and_mp3_player.svg} | 0 svgs/{monbell.svg => mybell.svg} | 0 svgs/{naukricom.svg => naukri.svg} | 0 svgs/{papago.svg => naver_papago.svg} | 0 ...{net_analyzer.svg => network_analyzer.svg} | 0 svgs/{niyo_global.svg => niyo.svg} | 0 ...gbutwalls.svg => nothingbutwallpapers.svg} | 0 svgs/{odeabank.svg => odea.svg} | 0 ...k_screen.svg => one_click_lock_screen.svg} | 0 ...{openfoodfacts.svg => open_food_facts.svg} | 0 ...pera_beta_mini.svg => opera_mini_beta.svg} | 0 ...le.svg => oracle_cloud_infrastructure.svg} | 0 svgs/{owletcare.svg => owlet.svg} | 0 ...arcel_tracker.svg => package_tracking.svg} | 0 svgs/{peacock.svg => peacock_tv.svg} | 0 svgs/{my_calendar.svg => period_calendar.svg} | 0 ...ograph.svg => phonograph_music_player.svg} | 0 ...or_pro_polish.svg => photo_editor_pro.svg} | 0 ...ls.svg => pingtools_network_utilities.svg} | 0 svgs/the_michelin_guide.svg | 1 + 36 files changed, 218 insertions(+), 117 deletions(-) rename svgs/{muviz_edge.svg => always_on_edge_music_lighting.svg} (100%) rename svgs/{ncalc.svg => calculator_n_plus.svg} (100%) rename svgs/{malayalam_dictionary.svg => english_malayalam_dictionary.svg} (100%) rename svgs/{lena_dark.svg => lena_dark_icons.svg} (100%) rename svgs/{lux_icons_free.svg => lux_icons.svg} (100%) rename svgs/{magic_companion.svg => magic_the_gathering_companion.svg} (100%) rename svgs/{mail_fr.svg => mail_de.svg} (100%) rename svgs/{manual_cam.svg => manual_camera.svg} (100%) delete mode 100644 svgs/michelin_guide.svg rename svgs/{microsoft_office.svg => microsoft_365.svg} (100%) rename svgs/{microsoft365_admin.svg => microsoft_365_admin.svg} (100%) rename svgs/{onedrive.svg => microsoft_onedrive.svg} (100%) rename svgs/{milk_choco.svg => milkchoco.svg} (100%) rename svgs/{mj_pdf_reader.svg => mj_pdf.svg} (100%) rename svgs/{morsemania.svg => morse_mania.svg} (100%) rename svgs/{music_player_inshot.svg => music_player_and_mp3_player.svg} (100%) rename svgs/{monbell.svg => mybell.svg} (100%) rename svgs/{naukricom.svg => naukri.svg} (100%) rename svgs/{papago.svg => naver_papago.svg} (100%) rename svgs/{net_analyzer.svg => network_analyzer.svg} (100%) rename svgs/{niyo_global.svg => niyo.svg} (100%) rename svgs/{nothingbutwalls.svg => nothingbutwallpapers.svg} (100%) rename svgs/{odeabank.svg => odea.svg} (100%) rename svgs/{lock_screen.svg => one_click_lock_screen.svg} (100%) rename svgs/{openfoodfacts.svg => open_food_facts.svg} (100%) rename svgs/{opera_beta_mini.svg => opera_mini_beta.svg} (100%) rename svgs/{oracle.svg => oracle_cloud_infrastructure.svg} (100%) rename svgs/{owletcare.svg => owlet.svg} (100%) rename svgs/{parcel_tracker.svg => package_tracking.svg} (100%) rename svgs/{peacock.svg => peacock_tv.svg} (100%) rename svgs/{my_calendar.svg => period_calendar.svg} (100%) rename svgs/{phonograph.svg => phonograph_music_player.svg} (100%) rename svgs/{photo_editor_pro_polish.svg => photo_editor_pro.svg} (100%) rename svgs/{pingtools.svg => pingtools_network_utilities.svg} (100%) create mode 100644 svgs/the_michelin_guide.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a9efd944bf4..a23b1cb7ad3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -364,6 +364,7 @@ + @@ -514,6 +515,8 @@ + + @@ -558,6 +561,8 @@ + + @@ -742,6 +747,12 @@ + + + + + + @@ -1367,6 +1378,10 @@ + + + + @@ -1405,6 +1420,7 @@ + @@ -1682,6 +1698,7 @@ + @@ -2772,6 +2789,7 @@ + @@ -2920,6 +2938,7 @@ + @@ -3100,6 +3119,22 @@ + + + + + + + + + + + + + + + + @@ -4220,6 +4255,7 @@ + @@ -4520,7 +4556,6 @@ - @@ -4709,7 +4744,7 @@ - + @@ -4835,7 +4870,7 @@ - + @@ -4859,12 +4894,11 @@ - + - @@ -4906,7 +4940,7 @@ - + @@ -4917,7 +4951,6 @@ - @@ -4935,12 +4968,12 @@ - + @@ -4973,15 +5006,14 @@ - + - - + @@ -4996,7 +5028,7 @@ - + @@ -5025,15 +5057,17 @@ + + + - @@ -5066,6 +5100,8 @@ + + @@ -5090,10 +5126,23 @@ - - - - + + + + + + + + + + + + + + + + + @@ -5120,11 +5169,11 @@ - - - - - + + + + + @@ -5141,7 +5190,7 @@ - + @@ -5299,7 +5348,6 @@ - @@ -5311,10 +5359,10 @@ - - - - + + + + @@ -5337,6 +5385,8 @@ + + @@ -5386,7 +5436,7 @@ - + @@ -5395,6 +5445,9 @@ + + + @@ -5408,8 +5461,8 @@ - + @@ -5470,7 +5523,7 @@ - + @@ -5508,7 +5561,6 @@ - @@ -5553,7 +5605,7 @@ - + @@ -5635,13 +5687,12 @@ - + - @@ -5655,7 +5706,6 @@ - @@ -5667,13 +5717,13 @@ - - - - - - - + + + + + + + @@ -5691,7 +5741,6 @@ - @@ -5716,7 +5765,6 @@ - @@ -5772,6 +5820,7 @@ + @@ -5810,8 +5859,10 @@ + + @@ -5889,21 +5940,19 @@ - - - + + + - + + + - - - - @@ -5957,10 +6006,7 @@ - - - @@ -5975,8 +6021,10 @@ + + - + @@ -6057,7 +6105,7 @@ - + @@ -6128,8 +6176,8 @@ - - + + @@ -6175,10 +6223,10 @@ - - - + + + @@ -6232,7 +6280,7 @@ - + @@ -6249,7 +6297,7 @@ - + @@ -6353,6 +6401,7 @@ + @@ -6360,8 +6409,6 @@ - - @@ -6411,6 +6458,16 @@ + + + + + + + + + + @@ -6420,16 +6477,6 @@ - - - - - - - - - - @@ -6457,9 +6504,9 @@ - + @@ -6473,7 +6520,7 @@ - + @@ -6531,7 +6578,7 @@ - + @@ -6555,6 +6602,7 @@ + @@ -6573,8 +6621,6 @@ - - @@ -6596,7 +6642,6 @@ - @@ -6624,7 +6669,7 @@ - + @@ -6656,11 +6701,10 @@ - - - + + @@ -6674,6 +6718,7 @@ + @@ -6845,22 +6890,6 @@ - - - - - - - - - - - - - - - - @@ -6886,27 +6915,45 @@ + + + + + + + + + + + + + + + + - + - - - + + + - + + - + + @@ -6916,10 +6963,10 @@ - - - - + + + + @@ -6949,7 +6996,7 @@ - + @@ -6988,7 +7035,7 @@ - + @@ -7177,6 +7224,11 @@ + + + + + @@ -7466,6 +7518,8 @@ + + @@ -7512,7 +7566,6 @@ - @@ -7548,6 +7601,11 @@ + + + + + @@ -7848,6 +7906,7 @@ + @@ -7952,6 +8011,7 @@ + @@ -8203,6 +8263,7 @@ + @@ -8223,6 +8284,14 @@ + + + + + + + + @@ -8453,6 +8522,7 @@ + @@ -8665,6 +8735,7 @@ + @@ -8678,6 +8749,20 @@ + + + + + + + + + + + + + + @@ -8930,6 +9015,7 @@ + @@ -9520,6 +9606,7 @@ + @@ -10343,6 +10430,7 @@ + @@ -10839,6 +10927,17 @@ + + + + + + + + + + + @@ -11063,6 +11162,7 @@ + @@ -11160,6 +11260,7 @@ + diff --git a/svgs/muviz_edge.svg b/svgs/always_on_edge_music_lighting.svg similarity index 100% rename from svgs/muviz_edge.svg rename to svgs/always_on_edge_music_lighting.svg diff --git a/svgs/ncalc.svg b/svgs/calculator_n_plus.svg similarity index 100% rename from svgs/ncalc.svg rename to svgs/calculator_n_plus.svg diff --git a/svgs/malayalam_dictionary.svg b/svgs/english_malayalam_dictionary.svg similarity index 100% rename from svgs/malayalam_dictionary.svg rename to svgs/english_malayalam_dictionary.svg diff --git a/svgs/lena_dark.svg b/svgs/lena_dark_icons.svg similarity index 100% rename from svgs/lena_dark.svg rename to svgs/lena_dark_icons.svg diff --git a/svgs/lux_icons_free.svg b/svgs/lux_icons.svg similarity index 100% rename from svgs/lux_icons_free.svg rename to svgs/lux_icons.svg diff --git a/svgs/magic_companion.svg b/svgs/magic_the_gathering_companion.svg similarity index 100% rename from svgs/magic_companion.svg rename to svgs/magic_the_gathering_companion.svg diff --git a/svgs/mail_fr.svg b/svgs/mail_de.svg similarity index 100% rename from svgs/mail_fr.svg rename to svgs/mail_de.svg diff --git a/svgs/manual_cam.svg b/svgs/manual_camera.svg similarity index 100% rename from svgs/manual_cam.svg rename to svgs/manual_camera.svg diff --git a/svgs/michelin_guide.svg b/svgs/michelin_guide.svg deleted file mode 100644 index 8e4b0587d1c..00000000000 --- a/svgs/michelin_guide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/microsoft_office.svg b/svgs/microsoft_365.svg similarity index 100% rename from svgs/microsoft_office.svg rename to svgs/microsoft_365.svg diff --git a/svgs/microsoft365_admin.svg b/svgs/microsoft_365_admin.svg similarity index 100% rename from svgs/microsoft365_admin.svg rename to svgs/microsoft_365_admin.svg diff --git a/svgs/onedrive.svg b/svgs/microsoft_onedrive.svg similarity index 100% rename from svgs/onedrive.svg rename to svgs/microsoft_onedrive.svg diff --git a/svgs/milk_choco.svg b/svgs/milkchoco.svg similarity index 100% rename from svgs/milk_choco.svg rename to svgs/milkchoco.svg diff --git a/svgs/mj_pdf_reader.svg b/svgs/mj_pdf.svg similarity index 100% rename from svgs/mj_pdf_reader.svg rename to svgs/mj_pdf.svg diff --git a/svgs/morsemania.svg b/svgs/morse_mania.svg similarity index 100% rename from svgs/morsemania.svg rename to svgs/morse_mania.svg diff --git a/svgs/music_player_inshot.svg b/svgs/music_player_and_mp3_player.svg similarity index 100% rename from svgs/music_player_inshot.svg rename to svgs/music_player_and_mp3_player.svg diff --git a/svgs/monbell.svg b/svgs/mybell.svg similarity index 100% rename from svgs/monbell.svg rename to svgs/mybell.svg diff --git a/svgs/naukricom.svg b/svgs/naukri.svg similarity index 100% rename from svgs/naukricom.svg rename to svgs/naukri.svg diff --git a/svgs/papago.svg b/svgs/naver_papago.svg similarity index 100% rename from svgs/papago.svg rename to svgs/naver_papago.svg diff --git a/svgs/net_analyzer.svg b/svgs/network_analyzer.svg similarity index 100% rename from svgs/net_analyzer.svg rename to svgs/network_analyzer.svg diff --git a/svgs/niyo_global.svg b/svgs/niyo.svg similarity index 100% rename from svgs/niyo_global.svg rename to svgs/niyo.svg diff --git a/svgs/nothingbutwalls.svg b/svgs/nothingbutwallpapers.svg similarity index 100% rename from svgs/nothingbutwalls.svg rename to svgs/nothingbutwallpapers.svg diff --git a/svgs/odeabank.svg b/svgs/odea.svg similarity index 100% rename from svgs/odeabank.svg rename to svgs/odea.svg diff --git a/svgs/lock_screen.svg b/svgs/one_click_lock_screen.svg similarity index 100% rename from svgs/lock_screen.svg rename to svgs/one_click_lock_screen.svg diff --git a/svgs/openfoodfacts.svg b/svgs/open_food_facts.svg similarity index 100% rename from svgs/openfoodfacts.svg rename to svgs/open_food_facts.svg diff --git a/svgs/opera_beta_mini.svg b/svgs/opera_mini_beta.svg similarity index 100% rename from svgs/opera_beta_mini.svg rename to svgs/opera_mini_beta.svg diff --git a/svgs/oracle.svg b/svgs/oracle_cloud_infrastructure.svg similarity index 100% rename from svgs/oracle.svg rename to svgs/oracle_cloud_infrastructure.svg diff --git a/svgs/owletcare.svg b/svgs/owlet.svg similarity index 100% rename from svgs/owletcare.svg rename to svgs/owlet.svg diff --git a/svgs/parcel_tracker.svg b/svgs/package_tracking.svg similarity index 100% rename from svgs/parcel_tracker.svg rename to svgs/package_tracking.svg diff --git a/svgs/peacock.svg b/svgs/peacock_tv.svg similarity index 100% rename from svgs/peacock.svg rename to svgs/peacock_tv.svg diff --git a/svgs/my_calendar.svg b/svgs/period_calendar.svg similarity index 100% rename from svgs/my_calendar.svg rename to svgs/period_calendar.svg diff --git a/svgs/phonograph.svg b/svgs/phonograph_music_player.svg similarity index 100% rename from svgs/phonograph.svg rename to svgs/phonograph_music_player.svg diff --git a/svgs/photo_editor_pro_polish.svg b/svgs/photo_editor_pro.svg similarity index 100% rename from svgs/photo_editor_pro_polish.svg rename to svgs/photo_editor_pro.svg diff --git a/svgs/pingtools.svg b/svgs/pingtools_network_utilities.svg similarity index 100% rename from svgs/pingtools.svg rename to svgs/pingtools_network_utilities.svg diff --git a/svgs/the_michelin_guide.svg b/svgs/the_michelin_guide.svg new file mode 100644 index 00000000000..8dccc358c6a --- /dev/null +++ b/svgs/the_michelin_guide.svg @@ -0,0 +1 @@ + \ No newline at end of file From ee8621375b59112edf32a06acf105e5ffda2cd10 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 7 May 2024 03:13:33 +0300 Subject: [PATCH 066/527] +103 links (#2077) * +103 links * + missing link --- app/assets/appfilter.xml | 147 +++++++++++++++--- .../{pixel_buds.svg => google_pixel_buds.svg} | 0 ..._dark_icons.svg => pix_you_dark_icons.svg} | 0 ...ixel.svg => pocket_operator_for_pixel.svg} | 0 ...anager_safeincloud.svg => safeincloud.svg} | 0 5 files changed, 124 insertions(+), 23 deletions(-) rename svgs/{pixel_buds.svg => google_pixel_buds.svg} (100%) rename svgs/{pix_you_cornflower_dark_icons.svg => pix_you_dark_icons.svg} (100%) rename svgs/{po_pixel.svg => pocket_operator_for_pixel.svg} (100%) rename svgs/{password_manager_safeincloud.svg => safeincloud.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a23b1cb7ad3..1c545315fcc 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -685,6 +685,7 @@ + @@ -3249,6 +3250,21 @@ + + + + + + + + + + + + + + + @@ -3707,6 +3723,8 @@ + + @@ -3843,11 +3861,13 @@ + + @@ -4728,6 +4748,7 @@ + @@ -5180,7 +5201,6 @@ - @@ -5552,6 +5572,7 @@ + @@ -5780,6 +5801,7 @@ + @@ -6656,7 +6678,6 @@ - @@ -6712,6 +6733,7 @@ + @@ -6793,7 +6815,6 @@ - @@ -6887,7 +6908,6 @@ - @@ -7012,12 +7032,10 @@ - + - - @@ -7129,6 +7147,20 @@ + + + + + + + + + + + + + + @@ -7146,8 +7178,6 @@ - - @@ -7172,6 +7202,8 @@ + + @@ -7801,6 +7833,8 @@ + + @@ -8148,6 +8182,7 @@ + @@ -8190,6 +8225,17 @@ + + + + + + + + + + + @@ -9163,23 +9209,23 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -9270,6 +9316,8 @@ + + @@ -9294,6 +9342,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -9727,6 +9798,7 @@ + @@ -9819,6 +9891,10 @@ + + + + @@ -10098,6 +10174,7 @@ + @@ -10135,6 +10212,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/svgs/pixel_buds.svg b/svgs/google_pixel_buds.svg similarity index 100% rename from svgs/pixel_buds.svg rename to svgs/google_pixel_buds.svg diff --git a/svgs/pix_you_cornflower_dark_icons.svg b/svgs/pix_you_dark_icons.svg similarity index 100% rename from svgs/pix_you_cornflower_dark_icons.svg rename to svgs/pix_you_dark_icons.svg diff --git a/svgs/po_pixel.svg b/svgs/pocket_operator_for_pixel.svg similarity index 100% rename from svgs/po_pixel.svg rename to svgs/pocket_operator_for_pixel.svg diff --git a/svgs/password_manager_safeincloud.svg b/svgs/safeincloud.svg similarity index 100% rename from svgs/password_manager_safeincloud.svg rename to svgs/safeincloud.svg From 0af2fab41419a72cf656a5fac9d4cca297845e2c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 7 May 2024 16:15:22 +0300 Subject: [PATCH 067/527] +35 links (#2078) --- app/assets/appfilter.xml | 157 +++++++++++------- ...revo_shine_ui.svg => revo_shine_icons.svg} | 0 ...canner.svg => scanner_for_coronacheck.svg} | 0 ...tencentmeeting.svg => tencent_meeting.svg} | 0 4 files changed, 96 insertions(+), 61 deletions(-) rename svgs/{revo_shine_ui.svg => revo_shine_icons.svg} (100%) rename svgs/{coronacheck_scanner.svg => scanner_for_coronacheck.svg} (100%) rename svgs/{tencentmeeting.svg => tencent_meeting.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1c545315fcc..953cee7c4e6 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -365,6 +365,7 @@ + @@ -927,6 +928,10 @@ + + + + @@ -939,16 +944,15 @@ - - - - - - - - - - + + + + + + + + + @@ -1966,6 +1970,10 @@ + + + + @@ -2204,6 +2212,7 @@ + @@ -2363,7 +2372,6 @@ - @@ -2955,6 +2963,11 @@ + + + + + @@ -3050,6 +3063,7 @@ + @@ -3197,6 +3211,7 @@ + @@ -3419,15 +3434,6 @@ - - - - - - - - - @@ -3523,6 +3529,7 @@ + @@ -4206,6 +4213,7 @@ + @@ -4724,13 +4732,13 @@ - - + + @@ -4859,6 +4867,8 @@ + + @@ -4905,6 +4915,7 @@ + @@ -5354,7 +5365,11 @@ + + + + @@ -5579,7 +5594,7 @@ - + @@ -5601,6 +5616,7 @@ + @@ -5623,6 +5639,7 @@ + @@ -5646,6 +5663,7 @@ + @@ -5799,6 +5817,7 @@ + @@ -5980,6 +5999,7 @@ + @@ -6162,10 +6182,6 @@ - - - - @@ -6457,6 +6473,10 @@ + + + + @@ -6562,6 +6582,7 @@ + @@ -7026,6 +7047,7 @@ + @@ -7216,6 +7238,7 @@ + @@ -7532,6 +7555,8 @@ + + @@ -7563,6 +7588,7 @@ + @@ -7571,8 +7597,6 @@ - - @@ -7596,8 +7620,6 @@ - - @@ -7619,8 +7641,6 @@ - - @@ -7723,7 +7743,7 @@ - + @@ -7857,6 +7877,7 @@ + @@ -7865,6 +7886,11 @@ + + + + + @@ -7910,6 +7936,7 @@ + @@ -7920,9 +7947,14 @@ + + + + + @@ -7950,7 +7982,6 @@ - @@ -7985,9 +8016,7 @@ - - - + @@ -8041,10 +8070,6 @@ - - - - @@ -8956,6 +8981,7 @@ + @@ -9255,6 +9281,7 @@ + @@ -9368,9 +9395,6 @@ - - - @@ -9378,6 +9402,9 @@ + + + @@ -9413,7 +9440,6 @@ - @@ -9962,7 +9988,7 @@ - + @@ -10049,7 +10075,6 @@ - @@ -10185,6 +10210,7 @@ + @@ -10273,6 +10299,7 @@ + @@ -10326,6 +10353,8 @@ + + @@ -10350,10 +10379,12 @@ + + @@ -10510,13 +10541,12 @@ - - + @@ -10539,7 +10569,6 @@ - @@ -10559,6 +10588,8 @@ + + @@ -10839,14 +10870,14 @@ - - - - - - - + + + + + + + @@ -10859,9 +10890,6 @@ - - - @@ -11303,6 +11331,9 @@ + + + @@ -11322,6 +11353,8 @@ + + @@ -11362,6 +11395,7 @@ + @@ -11376,6 +11410,7 @@ + diff --git a/svgs/revo_shine_ui.svg b/svgs/revo_shine_icons.svg similarity index 100% rename from svgs/revo_shine_ui.svg rename to svgs/revo_shine_icons.svg diff --git a/svgs/coronacheck_scanner.svg b/svgs/scanner_for_coronacheck.svg similarity index 100% rename from svgs/coronacheck_scanner.svg rename to svgs/scanner_for_coronacheck.svg diff --git a/svgs/tencentmeeting.svg b/svgs/tencent_meeting.svg similarity index 100% rename from svgs/tencentmeeting.svg rename to svgs/tencent_meeting.svg From 0c87bf6a36c8acd41390be2f62d10aa974fdbe69 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 8 May 2024 02:56:05 +0300 Subject: [PATCH 068/527] +25 links (#2079) * +25 links * Minor fix --- app/assets/appfilter.xml | 105 +++++++++++------- svgs/{acronis.svg => acronis_true_image.svg} | 0 .../{asphalt_8.svg => asphalt_8_airborne.svg} | 0 svgs/{asphalt_9.svg => asphalt_9_legends.svg} | 0 svgs/{enya.svg => enya_music.svg} | 0 ...app_tester.svg => firebase_app_tester.svg} | 0 ...r.svg => google_assistant_interpreter.svg} | 0 svgs/{boost_plus.svg => htc_boost_plus.svg} | 0 svgs/{ai_life.svg => huawei_ai_life.svg} | 0 ...{huabancesu.svg => huawei_petal_speed.svg} | 0 ...rowser.svg => lineageos_jelly_browser.svg} | 0 svgs/{miyoushe.svg => mihoyo_community.svg} | 0 ...gallery_mod_by_wstxda.svg => quickpic.svg} | 0 svgs/{ar_zone.svg => samsung_ar_zone.svg} | 0 ...{expert_raw.svg => samsung_expert_raw.svg} | 0 svgs/{upstox_old.svg => upstox_pro.svg} | 0 svgs/{wallme_wallpaper.svg => wallme.svg} | 0 17 files changed, 65 insertions(+), 40 deletions(-) rename svgs/{acronis.svg => acronis_true_image.svg} (100%) rename svgs/{asphalt_8.svg => asphalt_8_airborne.svg} (100%) rename svgs/{asphalt_9.svg => asphalt_9_legends.svg} (100%) rename svgs/{enya.svg => enya_music.svg} (100%) rename svgs/{app_tester.svg => firebase_app_tester.svg} (100%) rename svgs/{interpreter.svg => google_assistant_interpreter.svg} (100%) rename svgs/{boost_plus.svg => htc_boost_plus.svg} (100%) rename svgs/{ai_life.svg => huawei_ai_life.svg} (100%) rename svgs/{huabancesu.svg => huawei_petal_speed.svg} (100%) rename svgs/{jelly_browser.svg => lineageos_jelly_browser.svg} (100%) rename svgs/{miyoushe.svg => mihoyo_community.svg} (100%) rename svgs/{quickpic_gallery_mod_by_wstxda.svg => quickpic.svg} (100%) rename svgs/{ar_zone.svg => samsung_ar_zone.svg} (100%) rename svgs/{expert_raw.svg => samsung_expert_raw.svg} (100%) rename svgs/{upstox_old.svg => upstox_pro.svg} (100%) rename svgs/{wallme_wallpaper.svg => wallme.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 953cee7c4e6..595a819dbed 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -134,7 +134,7 @@ - + @@ -193,12 +193,12 @@ - - - - - - + + + + + + @@ -224,7 +224,6 @@ - @@ -352,7 +351,6 @@ - @@ -376,10 +374,10 @@ - - - - + + + + @@ -401,6 +399,7 @@ + @@ -454,10 +453,10 @@ - + - + @@ -560,7 +559,6 @@ - @@ -602,7 +600,6 @@ - @@ -621,7 +618,7 @@ - + @@ -636,9 +633,9 @@ - - - + + + @@ -939,6 +936,7 @@ + @@ -1139,7 +1137,6 @@ - @@ -1210,9 +1207,9 @@ + - @@ -2697,6 +2694,7 @@ + @@ -2806,7 +2804,7 @@ - + @@ -2883,7 +2881,6 @@ - @@ -3090,6 +3087,8 @@ + + @@ -3331,11 +3330,13 @@ + + @@ -3369,6 +3370,7 @@ + @@ -3654,6 +3656,7 @@ + @@ -3732,6 +3735,7 @@ + @@ -4047,9 +4051,10 @@ + - + @@ -4058,7 +4063,8 @@ - + + @@ -4249,7 +4255,7 @@ - + @@ -4296,7 +4302,6 @@ - @@ -4304,6 +4309,7 @@ + @@ -4315,6 +4321,7 @@ + @@ -4379,7 +4386,6 @@ - @@ -4468,6 +4474,7 @@ + @@ -4866,6 +4873,8 @@ + + @@ -4885,11 +4894,12 @@ - - + + + @@ -5025,6 +5035,7 @@ + @@ -5201,6 +5212,7 @@ + @@ -5474,6 +5486,7 @@ + @@ -5550,14 +5563,12 @@ - - + + - - @@ -6284,6 +6295,7 @@ + @@ -7036,6 +7048,7 @@ + @@ -7470,8 +7483,8 @@ - - + + @@ -7595,6 +7608,8 @@ + + @@ -7864,6 +7879,7 @@ + @@ -7880,6 +7896,7 @@ + @@ -8097,6 +8114,8 @@ + + @@ -8268,6 +8287,7 @@ + @@ -10177,7 +10197,7 @@ - + @@ -10489,7 +10509,7 @@ - + @@ -10740,6 +10760,7 @@ + @@ -11225,6 +11246,7 @@ + @@ -11253,6 +11275,7 @@ + @@ -11387,6 +11410,8 @@ + + diff --git a/svgs/acronis.svg b/svgs/acronis_true_image.svg similarity index 100% rename from svgs/acronis.svg rename to svgs/acronis_true_image.svg diff --git a/svgs/asphalt_8.svg b/svgs/asphalt_8_airborne.svg similarity index 100% rename from svgs/asphalt_8.svg rename to svgs/asphalt_8_airborne.svg diff --git a/svgs/asphalt_9.svg b/svgs/asphalt_9_legends.svg similarity index 100% rename from svgs/asphalt_9.svg rename to svgs/asphalt_9_legends.svg diff --git a/svgs/enya.svg b/svgs/enya_music.svg similarity index 100% rename from svgs/enya.svg rename to svgs/enya_music.svg diff --git a/svgs/app_tester.svg b/svgs/firebase_app_tester.svg similarity index 100% rename from svgs/app_tester.svg rename to svgs/firebase_app_tester.svg diff --git a/svgs/interpreter.svg b/svgs/google_assistant_interpreter.svg similarity index 100% rename from svgs/interpreter.svg rename to svgs/google_assistant_interpreter.svg diff --git a/svgs/boost_plus.svg b/svgs/htc_boost_plus.svg similarity index 100% rename from svgs/boost_plus.svg rename to svgs/htc_boost_plus.svg diff --git a/svgs/ai_life.svg b/svgs/huawei_ai_life.svg similarity index 100% rename from svgs/ai_life.svg rename to svgs/huawei_ai_life.svg diff --git a/svgs/huabancesu.svg b/svgs/huawei_petal_speed.svg similarity index 100% rename from svgs/huabancesu.svg rename to svgs/huawei_petal_speed.svg diff --git a/svgs/jelly_browser.svg b/svgs/lineageos_jelly_browser.svg similarity index 100% rename from svgs/jelly_browser.svg rename to svgs/lineageos_jelly_browser.svg diff --git a/svgs/miyoushe.svg b/svgs/mihoyo_community.svg similarity index 100% rename from svgs/miyoushe.svg rename to svgs/mihoyo_community.svg diff --git a/svgs/quickpic_gallery_mod_by_wstxda.svg b/svgs/quickpic.svg similarity index 100% rename from svgs/quickpic_gallery_mod_by_wstxda.svg rename to svgs/quickpic.svg diff --git a/svgs/ar_zone.svg b/svgs/samsung_ar_zone.svg similarity index 100% rename from svgs/ar_zone.svg rename to svgs/samsung_ar_zone.svg diff --git a/svgs/expert_raw.svg b/svgs/samsung_expert_raw.svg similarity index 100% rename from svgs/expert_raw.svg rename to svgs/samsung_expert_raw.svg diff --git a/svgs/upstox_old.svg b/svgs/upstox_pro.svg similarity index 100% rename from svgs/upstox_old.svg rename to svgs/upstox_pro.svg diff --git a/svgs/wallme_wallpaper.svg b/svgs/wallme.svg similarity index 100% rename from svgs/wallme_wallpaper.svg rename to svgs/wallme.svg From 640a34451a1b8cd732261b6a9d48ed7daad042d1 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 8 May 2024 15:01:45 +0300 Subject: [PATCH 069/527] +25 links (#2080) * +25 links * Minor fix --- app/assets/appfilter.xml | 173 ++++++++++-------- svgs/{a12123.svg => _12123.svg} | 0 ..._update.svg => huawei_software_update.svg} | 0 ...rockman_x_dive.svg => mega_man_x_dive.svg} | 0 svgs/{ps_camera.svg => photoshop_camera.svg} | 0 svgs/{rif_reddit.svg => reddit_is_fun.svg} | 0 svgs/{tips.svg => samsung_tips.svg} | 0 svgs/{scrcpy_pro.svg => scrcpy.svg} | 0 svgs/{shelly.svg => shelly_cloud.svg} | 0 svgs/{shikimori_app.svg => shikimori.svg} | 0 ...{sidequest_installer.svg => sidequest.svg} | 0 ...{retouch_advasoft.svg => touchretouch.svg} | 0 svgs/{vcb_digibank.svg => vcb.svg} | 0 svgs/{vkontakte.svg => vk.svg} | 0 14 files changed, 99 insertions(+), 74 deletions(-) rename svgs/{a12123.svg => _12123.svg} (100%) rename svgs/{software_update.svg => huawei_software_update.svg} (100%) rename svgs/{rockman_x_dive.svg => mega_man_x_dive.svg} (100%) rename svgs/{ps_camera.svg => photoshop_camera.svg} (100%) rename svgs/{rif_reddit.svg => reddit_is_fun.svg} (100%) rename svgs/{tips.svg => samsung_tips.svg} (100%) rename svgs/{scrcpy_pro.svg => scrcpy.svg} (100%) rename svgs/{shelly.svg => shelly_cloud.svg} (100%) rename svgs/{shikimori_app.svg => shikimori.svg} (100%) rename svgs/{sidequest_installer.svg => sidequest.svg} (100%) rename svgs/{retouch_advasoft.svg => touchretouch.svg} (100%) rename svgs/{vcb_digibank.svg => vcb.svg} (100%) rename svgs/{vkontakte.svg => vk.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 595a819dbed..47e2ad85ea4 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -44,8 +44,10 @@ + + @@ -159,6 +161,7 @@ + @@ -650,8 +653,8 @@ - + @@ -1154,6 +1157,7 @@ + @@ -1214,6 +1218,7 @@ + @@ -1232,6 +1237,7 @@ + @@ -2572,6 +2578,7 @@ + @@ -2711,7 +2718,7 @@ - + @@ -2773,7 +2780,7 @@ - + @@ -2835,6 +2842,7 @@ + @@ -3004,6 +3012,7 @@ + @@ -3387,7 +3396,7 @@ - + @@ -3584,7 +3593,7 @@ - + @@ -4065,6 +4074,8 @@ + + @@ -4113,10 +4124,10 @@ - + @@ -4630,7 +4641,7 @@ - + @@ -4697,7 +4708,7 @@ - + @@ -4744,10 +4755,10 @@ - - + + - + @@ -4996,6 +5007,7 @@ + @@ -5037,6 +5049,7 @@ + @@ -5218,6 +5231,7 @@ + @@ -5397,6 +5411,7 @@ + @@ -5477,8 +5492,8 @@ - + @@ -5553,6 +5568,7 @@ + @@ -6083,10 +6099,10 @@ - + @@ -6545,10 +6561,10 @@ - - + + @@ -6789,7 +6805,6 @@ - @@ -6799,6 +6814,8 @@ + + @@ -6990,6 +7007,7 @@ + @@ -7010,6 +7028,7 @@ + @@ -7047,7 +7066,6 @@ - @@ -7147,6 +7165,7 @@ + @@ -7263,7 +7282,7 @@ - + @@ -7304,6 +7323,7 @@ + @@ -7380,7 +7400,6 @@ - @@ -7521,7 +7540,6 @@ - @@ -7552,8 +7570,6 @@ - - @@ -7681,6 +7697,8 @@ + + @@ -7713,7 +7731,7 @@ - + @@ -7732,10 +7750,6 @@ - - - - @@ -7751,8 +7765,8 @@ - + @@ -7774,8 +7788,6 @@ - - @@ -7810,7 +7822,6 @@ - @@ -7834,7 +7845,7 @@ - + @@ -7855,8 +7866,8 @@ - + @@ -7874,7 +7885,7 @@ - + @@ -7917,6 +7928,7 @@ + @@ -7963,6 +7975,7 @@ + @@ -7985,6 +7998,8 @@ + + @@ -8056,10 +8071,9 @@ - + - @@ -8220,6 +8234,7 @@ + @@ -8227,24 +8242,23 @@ - + - + - + - @@ -8260,15 +8274,14 @@ - - + - + @@ -8473,6 +8486,7 @@ + @@ -8636,6 +8650,7 @@ + @@ -8750,10 +8765,10 @@ - + @@ -8835,7 +8850,6 @@ - @@ -8890,7 +8904,6 @@ - @@ -9240,7 +9253,7 @@ - + @@ -9275,9 +9288,9 @@ - + @@ -9290,10 +9303,10 @@ - + @@ -9313,8 +9326,8 @@ - - + + @@ -9323,7 +9336,6 @@ - @@ -9473,7 +9485,6 @@ - @@ -9481,6 +9492,7 @@ + @@ -9676,6 +9688,7 @@ + @@ -9825,15 +9838,12 @@ - - - @@ -9894,6 +9904,10 @@ + + + + @@ -10007,7 +10021,7 @@ - + @@ -10077,8 +10091,7 @@ - - + @@ -10243,9 +10256,9 @@ - - - + + + @@ -10253,7 +10266,6 @@ - @@ -10351,6 +10363,7 @@ + @@ -10371,8 +10384,9 @@ - - + + + @@ -10407,12 +10421,12 @@ - + @@ -10423,8 +10437,8 @@ + - @@ -10786,6 +10800,7 @@ + @@ -10798,6 +10813,7 @@ + @@ -10884,7 +10900,7 @@ - + @@ -10918,6 +10934,7 @@ + @@ -11168,6 +11185,7 @@ + @@ -11189,11 +11207,13 @@ - - - - - + + + + + + + @@ -11273,8 +11293,8 @@ - + @@ -11351,6 +11371,7 @@ + @@ -11386,6 +11407,7 @@ + @@ -11396,6 +11418,7 @@ + @@ -11436,6 +11459,8 @@ + + diff --git a/svgs/a12123.svg b/svgs/_12123.svg similarity index 100% rename from svgs/a12123.svg rename to svgs/_12123.svg diff --git a/svgs/software_update.svg b/svgs/huawei_software_update.svg similarity index 100% rename from svgs/software_update.svg rename to svgs/huawei_software_update.svg diff --git a/svgs/rockman_x_dive.svg b/svgs/mega_man_x_dive.svg similarity index 100% rename from svgs/rockman_x_dive.svg rename to svgs/mega_man_x_dive.svg diff --git a/svgs/ps_camera.svg b/svgs/photoshop_camera.svg similarity index 100% rename from svgs/ps_camera.svg rename to svgs/photoshop_camera.svg diff --git a/svgs/rif_reddit.svg b/svgs/reddit_is_fun.svg similarity index 100% rename from svgs/rif_reddit.svg rename to svgs/reddit_is_fun.svg diff --git a/svgs/tips.svg b/svgs/samsung_tips.svg similarity index 100% rename from svgs/tips.svg rename to svgs/samsung_tips.svg diff --git a/svgs/scrcpy_pro.svg b/svgs/scrcpy.svg similarity index 100% rename from svgs/scrcpy_pro.svg rename to svgs/scrcpy.svg diff --git a/svgs/shelly.svg b/svgs/shelly_cloud.svg similarity index 100% rename from svgs/shelly.svg rename to svgs/shelly_cloud.svg diff --git a/svgs/shikimori_app.svg b/svgs/shikimori.svg similarity index 100% rename from svgs/shikimori_app.svg rename to svgs/shikimori.svg diff --git a/svgs/sidequest_installer.svg b/svgs/sidequest.svg similarity index 100% rename from svgs/sidequest_installer.svg rename to svgs/sidequest.svg diff --git a/svgs/retouch_advasoft.svg b/svgs/touchretouch.svg similarity index 100% rename from svgs/retouch_advasoft.svg rename to svgs/touchretouch.svg diff --git a/svgs/vcb_digibank.svg b/svgs/vcb.svg similarity index 100% rename from svgs/vcb_digibank.svg rename to svgs/vcb.svg diff --git a/svgs/vkontakte.svg b/svgs/vk.svg similarity index 100% rename from svgs/vkontakte.svg rename to svgs/vk.svg From cacc96aa9a7131bc1e17db89ab15c2214f98bc84 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 9 May 2024 01:38:22 +0300 Subject: [PATCH 070/527] +6 links (#2082) --- app/assets/appfilter.xml | 172 +++++++++--------- ...{ahpalm_10000.svg => anhui_palm_10000.svg} | 0 svgs/{baidutieba.svg => baidu_tieba.svg} | 0 svgs/{bocmbci.svg => bank_of_china.svg} | 0 ...cator.svg => battle_net_authenticator.svg} | 0 ...rganizer.svg => bulk_rename_and_group.svg} | 0 svgs/{cmcc.svg => china_mobile.svg} | 0 svgs/{chinatelecom.svg => china_telecom.svg} | 0 svgs/{chinaunion.svg => china_unicom.svg} | 0 svgs/{chsiapp.svg => chsi.svg} | 0 .../{covid_cert.svg => covid_certificate.svg} | 0 .../{fscb.svg => flat_style_colored_bars.svg} | 0 ...ntweight.svg => fontweight_adjustment.svg} | 0 svgs/game_space.svg | 2 +- svgs/gamespace.svg | 1 - svgs/{gkld.svg => gongkao_leida.svg} | 0 .../{app_market.svg => heytap_app_market.svg} | 0 svgs/{ciliplayer.svg => magic_magnet.svg} | 0 ...eituan_waimai.svg => meituan_takeaway.svg} | 0 ...{memoria.svg => memoria_photo_gallery.svg} | 0 ...memoryguardian.svg => memory_guardian.svg} | 0 svgs/{mitime.svg => mi_time.svg} | 0 ...yandroidtools.svg => my_android_tools.svg} | 0 ...n_manager.svg => notification_history.svg} | 0 svgs/{omlet.svg => omlet_arcade.svg} | 0 svgs/oppo_game_space.svg | 1 + ...launcher.svg => samsung_game_launcher.svg} | 0 svgs/{good_lock.svg => samsung_good_lock.svg} | 0 svgs/{china3s.svg => spring_airlines.svg} | 0 ...ipush.svg => xiaomi_service_framework.svg} | 0 30 files changed, 91 insertions(+), 85 deletions(-) rename svgs/{ahpalm_10000.svg => anhui_palm_10000.svg} (100%) rename svgs/{baidutieba.svg => baidu_tieba.svg} (100%) rename svgs/{bocmbci.svg => bank_of_china.svg} (100%) rename svgs/{battlenet_authenticator.svg => battle_net_authenticator.svg} (100%) rename svgs/{file_organizer.svg => bulk_rename_and_group.svg} (100%) rename svgs/{cmcc.svg => china_mobile.svg} (100%) rename svgs/{chinatelecom.svg => china_telecom.svg} (100%) rename svgs/{chinaunion.svg => china_unicom.svg} (100%) rename svgs/{chsiapp.svg => chsi.svg} (100%) rename svgs/{covid_cert.svg => covid_certificate.svg} (100%) rename svgs/{fscb.svg => flat_style_colored_bars.svg} (100%) rename svgs/{fontweight.svg => fontweight_adjustment.svg} (100%) delete mode 100644 svgs/gamespace.svg rename svgs/{gkld.svg => gongkao_leida.svg} (100%) rename svgs/{app_market.svg => heytap_app_market.svg} (100%) rename svgs/{ciliplayer.svg => magic_magnet.svg} (100%) rename svgs/{meituan_waimai.svg => meituan_takeaway.svg} (100%) rename svgs/{memoria.svg => memoria_photo_gallery.svg} (100%) rename svgs/{memoryguardian.svg => memory_guardian.svg} (100%) rename svgs/{mitime.svg => mi_time.svg} (100%) rename svgs/{myandroidtools.svg => my_android_tools.svg} (100%) rename svgs/{notification_manager.svg => notification_history.svg} (100%) rename svgs/{omlet.svg => omlet_arcade.svg} (100%) create mode 100644 svgs/oppo_game_space.svg rename svgs/{game_launcher.svg => samsung_game_launcher.svg} (100%) rename svgs/{good_lock.svg => samsung_good_lock.svg} (100%) rename svgs/{china3s.svg => spring_airlines.svg} (100%) rename svgs/{mipush.svg => xiaomi_service_framework.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 47e2ad85ea4..818a2311e2c 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -37,6 +37,8 @@ + + @@ -337,7 +339,6 @@ - @@ -441,7 +442,6 @@ - @@ -554,12 +554,6 @@ - - - - - - @@ -579,17 +573,16 @@ - - - + + @@ -769,12 +762,7 @@ - - - - - @@ -811,7 +799,6 @@ - @@ -846,10 +833,10 @@ + + - - @@ -1020,7 +1007,6 @@ - @@ -1204,6 +1190,7 @@ + @@ -1230,6 +1217,7 @@ + @@ -1317,7 +1305,6 @@ - @@ -1330,7 +1317,6 @@ - @@ -1628,7 +1614,7 @@ - + @@ -1694,7 +1680,6 @@ - @@ -1742,7 +1727,7 @@ - + @@ -1750,8 +1735,6 @@ - - @@ -1762,14 +1745,11 @@ - - - @@ -1921,7 +1901,7 @@ - + @@ -1931,8 +1911,6 @@ - - @@ -2132,9 +2110,6 @@ - - - @@ -2156,12 +2131,12 @@ - + - + @@ -2207,6 +2182,7 @@ + @@ -2385,8 +2361,6 @@ - - @@ -2477,9 +2451,9 @@ - - - + + + @@ -2568,7 +2542,6 @@ - @@ -2688,7 +2661,6 @@ - @@ -2741,6 +2713,7 @@ + @@ -2989,11 +2962,9 @@ - - @@ -3013,8 +2984,6 @@ - - @@ -3039,7 +3008,6 @@ - @@ -3172,6 +3140,7 @@ + @@ -3255,7 +3224,6 @@ - @@ -3377,7 +3345,6 @@ - @@ -3445,7 +3412,6 @@ - @@ -3469,15 +3435,10 @@ - - - - - - + + - @@ -3627,9 +3588,6 @@ - - - @@ -3836,6 +3794,7 @@ + @@ -3905,6 +3864,7 @@ + @@ -3979,6 +3939,12 @@ + + + + + + @@ -4075,6 +4041,7 @@ + @@ -4792,6 +4759,7 @@ + @@ -4884,6 +4852,7 @@ + @@ -5028,11 +4997,9 @@ - - @@ -5046,8 +5013,8 @@ - + @@ -5240,7 +5207,6 @@ - @@ -5248,9 +5214,9 @@ - + + - @@ -5375,6 +5341,7 @@ + @@ -5495,7 +5462,6 @@ - @@ -5549,7 +5515,6 @@ - @@ -5559,7 +5524,6 @@ - @@ -5636,8 +5600,6 @@ - - @@ -5650,7 +5612,6 @@ - @@ -5658,7 +5619,7 @@ - + @@ -5802,6 +5763,9 @@ + + + @@ -5883,9 +5847,6 @@ - - - @@ -6246,9 +6207,9 @@ + - @@ -6463,8 +6424,8 @@ - - + + @@ -6571,16 +6532,18 @@ - + + + @@ -7919,9 +7882,14 @@ + + + + + @@ -7960,11 +7928,13 @@ + + @@ -8103,6 +8073,7 @@ + @@ -9399,6 +9370,7 @@ + @@ -9736,6 +9708,7 @@ + @@ -10927,6 +10900,7 @@ + @@ -11332,6 +11306,8 @@ + + @@ -11361,6 +11337,11 @@ + + + + + @@ -11371,6 +11352,7 @@ + @@ -11379,15 +11361,22 @@ + + + + + + + @@ -11402,6 +11391,7 @@ + @@ -11415,14 +11405,17 @@ + + + @@ -11431,10 +11424,15 @@ + + + + + @@ -11442,6 +11440,7 @@ + @@ -11451,22 +11450,29 @@ + + + + + + + diff --git a/svgs/ahpalm_10000.svg b/svgs/anhui_palm_10000.svg similarity index 100% rename from svgs/ahpalm_10000.svg rename to svgs/anhui_palm_10000.svg diff --git a/svgs/baidutieba.svg b/svgs/baidu_tieba.svg similarity index 100% rename from svgs/baidutieba.svg rename to svgs/baidu_tieba.svg diff --git a/svgs/bocmbci.svg b/svgs/bank_of_china.svg similarity index 100% rename from svgs/bocmbci.svg rename to svgs/bank_of_china.svg diff --git a/svgs/battlenet_authenticator.svg b/svgs/battle_net_authenticator.svg similarity index 100% rename from svgs/battlenet_authenticator.svg rename to svgs/battle_net_authenticator.svg diff --git a/svgs/file_organizer.svg b/svgs/bulk_rename_and_group.svg similarity index 100% rename from svgs/file_organizer.svg rename to svgs/bulk_rename_and_group.svg diff --git a/svgs/cmcc.svg b/svgs/china_mobile.svg similarity index 100% rename from svgs/cmcc.svg rename to svgs/china_mobile.svg diff --git a/svgs/chinatelecom.svg b/svgs/china_telecom.svg similarity index 100% rename from svgs/chinatelecom.svg rename to svgs/china_telecom.svg diff --git a/svgs/chinaunion.svg b/svgs/china_unicom.svg similarity index 100% rename from svgs/chinaunion.svg rename to svgs/china_unicom.svg diff --git a/svgs/chsiapp.svg b/svgs/chsi.svg similarity index 100% rename from svgs/chsiapp.svg rename to svgs/chsi.svg diff --git a/svgs/covid_cert.svg b/svgs/covid_certificate.svg similarity index 100% rename from svgs/covid_cert.svg rename to svgs/covid_certificate.svg diff --git a/svgs/fscb.svg b/svgs/flat_style_colored_bars.svg similarity index 100% rename from svgs/fscb.svg rename to svgs/flat_style_colored_bars.svg diff --git a/svgs/fontweight.svg b/svgs/fontweight_adjustment.svg similarity index 100% rename from svgs/fontweight.svg rename to svgs/fontweight_adjustment.svg diff --git a/svgs/game_space.svg b/svgs/game_space.svg index 7a031afd2c8..4463b0b8fbd 100644 --- a/svgs/game_space.svg +++ b/svgs/game_space.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/gamespace.svg b/svgs/gamespace.svg deleted file mode 100644 index 4463b0b8fbd..00000000000 --- a/svgs/gamespace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/gkld.svg b/svgs/gongkao_leida.svg similarity index 100% rename from svgs/gkld.svg rename to svgs/gongkao_leida.svg diff --git a/svgs/app_market.svg b/svgs/heytap_app_market.svg similarity index 100% rename from svgs/app_market.svg rename to svgs/heytap_app_market.svg diff --git a/svgs/ciliplayer.svg b/svgs/magic_magnet.svg similarity index 100% rename from svgs/ciliplayer.svg rename to svgs/magic_magnet.svg diff --git a/svgs/meituan_waimai.svg b/svgs/meituan_takeaway.svg similarity index 100% rename from svgs/meituan_waimai.svg rename to svgs/meituan_takeaway.svg diff --git a/svgs/memoria.svg b/svgs/memoria_photo_gallery.svg similarity index 100% rename from svgs/memoria.svg rename to svgs/memoria_photo_gallery.svg diff --git a/svgs/memoryguardian.svg b/svgs/memory_guardian.svg similarity index 100% rename from svgs/memoryguardian.svg rename to svgs/memory_guardian.svg diff --git a/svgs/mitime.svg b/svgs/mi_time.svg similarity index 100% rename from svgs/mitime.svg rename to svgs/mi_time.svg diff --git a/svgs/myandroidtools.svg b/svgs/my_android_tools.svg similarity index 100% rename from svgs/myandroidtools.svg rename to svgs/my_android_tools.svg diff --git a/svgs/notification_manager.svg b/svgs/notification_history.svg similarity index 100% rename from svgs/notification_manager.svg rename to svgs/notification_history.svg diff --git a/svgs/omlet.svg b/svgs/omlet_arcade.svg similarity index 100% rename from svgs/omlet.svg rename to svgs/omlet_arcade.svg diff --git a/svgs/oppo_game_space.svg b/svgs/oppo_game_space.svg new file mode 100644 index 00000000000..7a031afd2c8 --- /dev/null +++ b/svgs/oppo_game_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/game_launcher.svg b/svgs/samsung_game_launcher.svg similarity index 100% rename from svgs/game_launcher.svg rename to svgs/samsung_game_launcher.svg diff --git a/svgs/good_lock.svg b/svgs/samsung_good_lock.svg similarity index 100% rename from svgs/good_lock.svg rename to svgs/samsung_good_lock.svg diff --git a/svgs/china3s.svg b/svgs/spring_airlines.svg similarity index 100% rename from svgs/china3s.svg rename to svgs/spring_airlines.svg diff --git a/svgs/mipush.svg b/svgs/xiaomi_service_framework.svg similarity index 100% rename from svgs/mipush.svg rename to svgs/xiaomi_service_framework.svg From 3bc24a1744eea797e35d22963f9a26b94098ec71 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 9 May 2024 04:20:56 +0300 Subject: [PATCH 071/527] +1 link (#2083) * +1 link * Minor fix * Minor fix --- app/assets/appfilter.xml | 43 ++++++++++--------- ...nghang.svg => china_construction_bank.svg} | 0 svgs/{emobile.svg => e_mobile.svg} | 0 svgs/{hike.svg => hike_messenger.svg} | 0 svgs/{litiaotiao.svg => li_tiaotiao.svg} | 0 svgs/{lightstart.svg => light_start.svg} | 0 svgs/{xunlei.svg => lixian_xunlei.svg} | 0 svgs/{luckincoffe.svg => luckin_coffe.svg} | 0 svgs/{mxbc.svg => mixue_ice_city.svg} | 0 svgs/{phone_probe.svg => secret_settings.svg} | 0 svgs/{wifi_pcds.svg => wifi_pingce_dashi.svg} | 0 svgs/{woodbox.svg => wooden_letter.svg} | 0 svgs/{xuexi.svg => xuexi_qiangguo.svg} | 0 svgs/{xiaolian.svg => zhihui_xiaolian.svg} | 0 14 files changed, 22 insertions(+), 21 deletions(-) rename svgs/{jiansheyinghang.svg => china_construction_bank.svg} (100%) rename svgs/{emobile.svg => e_mobile.svg} (100%) rename svgs/{hike.svg => hike_messenger.svg} (100%) rename svgs/{litiaotiao.svg => li_tiaotiao.svg} (100%) rename svgs/{lightstart.svg => light_start.svg} (100%) rename svgs/{xunlei.svg => lixian_xunlei.svg} (100%) rename svgs/{luckincoffe.svg => luckin_coffe.svg} (100%) rename svgs/{mxbc.svg => mixue_ice_city.svg} (100%) rename svgs/{phone_probe.svg => secret_settings.svg} (100%) rename svgs/{wifi_pcds.svg => wifi_pingce_dashi.svg} (100%) rename svgs/{woodbox.svg => wooden_letter.svg} (100%) rename svgs/{xuexi.svg => xuexi_qiangguo.svg} (100%) rename svgs/{xiaolian.svg => zhihui_xiaolian.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 818a2311e2c..b56b6e756dd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2680,6 +2680,7 @@ + @@ -2735,7 +2736,7 @@ - + @@ -2763,7 +2764,6 @@ - @@ -3959,7 +3959,7 @@ - + @@ -4362,7 +4362,7 @@ - + @@ -4372,7 +4372,6 @@ - @@ -4748,8 +4747,6 @@ - - @@ -4840,7 +4837,6 @@ - @@ -4892,7 +4888,6 @@ - @@ -4949,7 +4944,6 @@ - @@ -5548,7 +5542,6 @@ - @@ -6968,7 +6961,6 @@ - @@ -7400,7 +7392,6 @@ - @@ -7842,6 +7833,7 @@ + @@ -9171,7 +9163,7 @@ - + @@ -10113,7 +10105,6 @@ - @@ -10753,10 +10744,10 @@ - + @@ -10802,7 +10793,6 @@ - @@ -10918,9 +10908,6 @@ - - - @@ -11113,7 +11100,6 @@ - @@ -11337,6 +11323,8 @@ + + @@ -11369,8 +11357,10 @@ + + @@ -11406,14 +11396,18 @@ + + + + @@ -11450,7 +11444,9 @@ + + @@ -11458,6 +11454,8 @@ + + @@ -11466,11 +11464,14 @@ + + + diff --git a/svgs/jiansheyinghang.svg b/svgs/china_construction_bank.svg similarity index 100% rename from svgs/jiansheyinghang.svg rename to svgs/china_construction_bank.svg diff --git a/svgs/emobile.svg b/svgs/e_mobile.svg similarity index 100% rename from svgs/emobile.svg rename to svgs/e_mobile.svg diff --git a/svgs/hike.svg b/svgs/hike_messenger.svg similarity index 100% rename from svgs/hike.svg rename to svgs/hike_messenger.svg diff --git a/svgs/litiaotiao.svg b/svgs/li_tiaotiao.svg similarity index 100% rename from svgs/litiaotiao.svg rename to svgs/li_tiaotiao.svg diff --git a/svgs/lightstart.svg b/svgs/light_start.svg similarity index 100% rename from svgs/lightstart.svg rename to svgs/light_start.svg diff --git a/svgs/xunlei.svg b/svgs/lixian_xunlei.svg similarity index 100% rename from svgs/xunlei.svg rename to svgs/lixian_xunlei.svg diff --git a/svgs/luckincoffe.svg b/svgs/luckin_coffe.svg similarity index 100% rename from svgs/luckincoffe.svg rename to svgs/luckin_coffe.svg diff --git a/svgs/mxbc.svg b/svgs/mixue_ice_city.svg similarity index 100% rename from svgs/mxbc.svg rename to svgs/mixue_ice_city.svg diff --git a/svgs/phone_probe.svg b/svgs/secret_settings.svg similarity index 100% rename from svgs/phone_probe.svg rename to svgs/secret_settings.svg diff --git a/svgs/wifi_pcds.svg b/svgs/wifi_pingce_dashi.svg similarity index 100% rename from svgs/wifi_pcds.svg rename to svgs/wifi_pingce_dashi.svg diff --git a/svgs/woodbox.svg b/svgs/wooden_letter.svg similarity index 100% rename from svgs/woodbox.svg rename to svgs/wooden_letter.svg diff --git a/svgs/xuexi.svg b/svgs/xuexi_qiangguo.svg similarity index 100% rename from svgs/xuexi.svg rename to svgs/xuexi_qiangguo.svg diff --git a/svgs/xiaolian.svg b/svgs/zhihui_xiaolian.svg similarity index 100% rename from svgs/xiaolian.svg rename to svgs/zhihui_xiaolian.svg From f433d79505aeab1d4a8589c451a1349e54fde16d Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Fri, 10 May 2024 20:33:13 +1000 Subject: [PATCH 072/527] + 2 icons, + 2 links (#2085) * + 2 icons, + 2 links * Small update * Apply requested changes [1] * Apply requested changes [2] * Small fix --- app/assets/appfilter.xml | 5 +++++ svgs/my_megafon.svg | 37 +++++++++++++++++++++++++++++++++++++ svgs/tasty_period.svg | 29 +++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 svgs/my_megafon.svg create mode 100644 svgs/tasty_period.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b56b6e756dd..eee71495731 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -3990,6 +3990,8 @@ + + @@ -11177,6 +11179,7 @@ + @@ -11214,6 +11217,8 @@ + + diff --git a/svgs/my_megafon.svg b/svgs/my_megafon.svg new file mode 100644 index 00000000000..4436a010d72 --- /dev/null +++ b/svgs/my_megafon.svg @@ -0,0 +1,37 @@ + + diff --git a/svgs/tasty_period.svg b/svgs/tasty_period.svg new file mode 100644 index 00000000000..e7011498668 --- /dev/null +++ b/svgs/tasty_period.svg @@ -0,0 +1,29 @@ + + + + From 09d78ccf85596e99245a79628033c537c21e8ce6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 10 May 2024 13:51:45 +0300 Subject: [PATCH 073/527] +1 icon: Samokat, +5 links (#2088) --- app/assets/appfilter.xml | 6 ++++++ svgs/samokat.svg | 1 + 2 files changed, 7 insertions(+) create mode 100644 svgs/samokat.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index eee71495731..5d3d7de2155 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -430,6 +430,7 @@ + @@ -4108,6 +4109,7 @@ + @@ -6249,6 +6251,7 @@ + @@ -7899,6 +7902,8 @@ + + @@ -11235,6 +11240,7 @@ + diff --git a/svgs/samokat.svg b/svgs/samokat.svg new file mode 100644 index 00000000000..f882e827015 --- /dev/null +++ b/svgs/samokat.svg @@ -0,0 +1 @@ + \ No newline at end of file From 541cd09423076c95530b1f28baba395abdb6ffe6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 09:07:02 +0800 Subject: [PATCH 074/527] Update Kotlin, KSP and Compose Compiler to v2.0.0-RC3 (#2087) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e0ea366b695..3afd3ae55e8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,9 +3,9 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.4.0" apply false - id("org.jetbrains.kotlin.android") version "2.0.0-RC2" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC2" - id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC2" apply false + id("org.jetbrains.kotlin.android") version "2.0.0-RC3" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC3" + id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC3" apply false id("com.google.devtools.ksp") version "2.0.0-RC2-1.0.20" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false From 6317312e486873045b38a462af1d877492053921 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 May 2024 09:07:09 +0800 Subject: [PATCH 075/527] Update plugin com.gradle.develocity to v3.17.3 (#2081) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 45247484ac3..1359d992ca3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.2" + id("com.gradle.develocity") version "3.17.3" } develocity { From 562cac4420b6e2ec2e584b45637e81059c64b5f6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 11 May 2024 21:04:14 +0300 Subject: [PATCH 076/527] +2 icons: Wallflow, +2 links (#2089) --- app/assets/appfilter.xml | 4 ++++ svgs/wallflow.svg | 1 + svgs/wallflow_plus.svg | 1 + 3 files changed, 6 insertions(+) create mode 100644 svgs/wallflow.svg create mode 100644 svgs/wallflow_plus.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5d3d7de2155..5542e9c2e00 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2199,6 +2199,7 @@ + @@ -4816,6 +4817,7 @@ + @@ -10490,6 +10492,8 @@ + + diff --git a/svgs/wallflow.svg b/svgs/wallflow.svg new file mode 100644 index 00000000000..29fafa49eb9 --- /dev/null +++ b/svgs/wallflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wallflow_plus.svg b/svgs/wallflow_plus.svg new file mode 100644 index 00000000000..d59d8693169 --- /dev/null +++ b/svgs/wallflow_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file From 9009e04354ccc8113b9831f2099b82463228c4c8 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sun, 12 May 2024 18:10:18 +1000 Subject: [PATCH 077/527] Add icon checklist workflow (#2071) * Add icon checklist workflow * Update paths icon checklist runs on * Remove appfilter.xml trigger for icon checklist workflow * Add completed icon checklist Co-authored-by: Gleb 60105060+x9136@users.noreply.github.com * Update icon_checklist.md * Add completed icon checklist Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> * Update icon_checklist.md * Add newline to icon checklist workflow * Update icon_checklist.md * Update icon_checklist.md --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- .github/icon_checklist.md | 26 ++++++++++++++++++++ .github/workflows/first_pr_interaction.yml | 27 --------------------- .github/workflows/icon_checklist.yml | 28 ++++++++++++++++++++++ 3 files changed, 54 insertions(+), 27 deletions(-) create mode 100644 .github/icon_checklist.md delete mode 100644 .github/workflows/first_pr_interaction.yml create mode 100644 .github/workflows/icon_checklist.yml diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md new file mode 100644 index 00000000000..22af7904a4f --- /dev/null +++ b/.github/icon_checklist.md @@ -0,0 +1,26 @@ +Thanks for your contribution! + +While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. + +### Canvas and sizes +1. Canvas: `192×192px`. +2. Non-square icons: the long side of the icons should be `160px`. +3. Square icons: `154×154px`. + +### Color, stroke width and rounding +1. Color: black `#000`. +2. No fill. Base stroke width: `12px`. `14px`, `10px`, `8px` — depending on the shape of the icons. `6px` — for fine details. +3. Rounded ends and joins. 90° corners are rounded by `6-32px`. + +### Naming +1. Names should match the official app name and contain no additional text. +2. If the original name is not in English, then add a localized (or transliterated) one to it using `~~`. +Example: `フールー ~~ Hulu`. +3. The names of the drawables should repeat the names of the apps if nothing prevents it. + +### Quality +1. Ensure that icons are easily recognizable. +2. Align icons to [the visual center](https://www.google.com/search?sca_esv=1fcec3f5e0b15e20&q=what+is+visual+center+of+an+icon&tbm=isch&source=lnms). +3. Avoid blackness or noticable black spots by reducing the stroke width or simplifying the icons. +4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. +5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. diff --git a/.github/workflows/first_pr_interaction.yml b/.github/workflows/first_pr_interaction.yml deleted file mode 100644 index a49c3f8d36a..00000000000 --- a/.github/workflows/first_pr_interaction.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: first-interaction - -on: - pull_request: - branches: [develop] - types: [opened] - paths: - - '**.svg' - - '!app/src/**' - - '!**.gradle.kts' - -jobs: - check_pr: - continue-on-error: true - runs-on: ubuntu-latest - steps: - - name: Send message if first interaction - if: steps.outcome != 'failure' - uses: actions/first-interaction@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - pr-message: | - Thanks for your interest in contributing to Lawnicons! - Ensure that the size of your icons, their line thicknesses, and their corner radius match the [Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/.github/CONTRIBUTING.md#icon-guidelines). - If something is wrong with your icons, please correct them and update the PR. - If everything is according to the guidelines, the reviewers will quickly accept the PR. Otherwise, you will be asked to fix the icons. - diff --git a/.github/workflows/icon_checklist.yml b/.github/workflows/icon_checklist.yml new file mode 100644 index 00000000000..a4c83cc7284 --- /dev/null +++ b/.github/workflows/icon_checklist.yml @@ -0,0 +1,28 @@ +name: Comment icon checklist + +on: + pull_request: + branches: [develop] + types: [opened] + paths: + - svgs/* + +jobs: + comment: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Comment on PR + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const ICON_CHECKLIST = fs.readFileSync('.github/icon_checklist.md', 'utf8'); + const issue = { owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number }; + await github.rest.issues.createComment({ + ...issue, + body: ICON_CHECKLIST + }); + \ No newline at end of file From 2628ec40605eeebfe0f8ea225a6c2c40498dcadd Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Sun, 12 May 2024 13:38:10 +0300 Subject: [PATCH 078/527] +15 icons, linked 2, modified 2 app names (#2084) * add 5 icons hungerstation (`com.hungerstation.android.web/com.hungerstation.android.web.hungeractivities.MainActivity`) almanea (`com.almanea.android/com.almanea.android.MainActivity`) circlys (`com.jmeyte.app/com.example.circlys_v2.MainActivity`) clicflyer (`main.ClicFlyer/main.ClicFlyer.Login.Splash`) mada_pay (`com.mada.madapay/com.emcrey.app.activities.SupportActivity`) * Update ciclys.svg * Updating names * Rename ciclys.svg to circlys.svg * Update Circlys drawable name * Added 15 icons * Alkahraba (`sa.com.se.alkahraba/sa.com.se.alkahraba.MainActivity`) * Alrajhi Bank (`com.alrajhiretailapp/com.alrajhiretailapp.MainActivity`) * DEXTools (`io.dextools.app/io.dextools.app.ui.splash.SplashActivity`) * Malaa (`tech.malaa.personal/tech.malaa.personal.MainActivity`) * SNB Mobile (`com.snb.alahlimobile/com.snb.alahlimobile.MainActivity`) * Tameeni (`tameeni.com/tameeni.com.MainActivity`) * Tawakkalna Services (`sa.gov.nic.twkhayat/com.tawakkalna.twkapp.ui.SplashActivity`) * Alinma App (`com.alinma.retail.mobile.v4/com.alinma.retail.mobile.v4.MainActivity`) * ANB Telemoney (`telemoneyapp.anb.keystore/telemoneyapp.anb.keystore.MainActivity`) * BingX (`pro.bingbon.app/pro.bingintl.ui.activity.MainActivity`) * Bouki (`com.emcrey.riyadbank/com.emcrey.bouki.MainActivity`) * Panda (`com.todoorstep.store/com.todoorstep.store.ui.activities.splash.SplashActivity`) * Rabby Wallet (`com.debank.rabbymobile/com.debank.rabbymobile.MainActivity`) * Tamara (`co.tamara.user/co.tamara.user.MainActivity`) * Themer (`com.therxmv.telegramthemer/com.therxmv.telegramthemer.ui.MainActivity`) * fixing alkahraba.svg not showing properly * I made modifications to icons and app namings Modified alinma_app, alkahraba, alrajhi_bank, anb_telemoney, bouki, rabby_wallet, snb_mobile, tameeni, tawakkalna_services, themer, appfilter.xml * Removed the word (app) I removed the word app from alinma icon name and in appfilter.xml * Update alinma.svg and alkahraba.svg * Update tameeni.svg reworked the icon * Update tawakkalna_services.svg to 12px stroke. themer.svg brush stroke to 10px. Lowered the icon a little bit * Update anb_telemoney.svg * Added 15 icons, Linked 2 icons, Modified app names * Update appfilter.xml, crypto_bubbles.svg, dr_alfagih.svg, and 7 more files * Update crypto_bubbles.svg * Removed the layer group and combined the paths. * Removed unnecessary Kotlin files. * Updated the icons as required. crypto_bubbles, m2, nafath, sehhaty --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 19 ++++++++++++- svgs/absher.svg | 26 ++++++++++++++++++ svgs/crypto_bubbles.svg | 38 ++++++++++++++++++++++++++ svgs/dr_mohammad_alfagih_hospital.svg | 31 +++++++++++++++++++++ svgs/expertoption.svg | 18 +++++++++++++ svgs/jarir.svg | 38 ++++++++++++++++++++++++++ svgs/m2.svg | 26 ++++++++++++++++++ svgs/mobily.svg | 19 +++++++++++++ svgs/nafath.svg | 22 +++++++++++++++ svgs/nahdi.svg | 23 ++++++++++++++++ svgs/noon.svg | 27 +++++++++++++++++++ svgs/phantom.svg | 23 ++++++++++++++++ svgs/redotpay.svg | 31 +++++++++++++++++++++ svgs/sehhaty.svg | 18 +++++++++++++ svgs/tawakkalna_emergency.svg | 18 +++++++++++++ svgs/wafeer.svg | 39 +++++++++++++++++++++++++++ 16 files changed, 415 insertions(+), 1 deletion(-) create mode 100644 svgs/absher.svg create mode 100644 svgs/crypto_bubbles.svg create mode 100644 svgs/dr_mohammad_alfagih_hospital.svg create mode 100644 svgs/expertoption.svg create mode 100644 svgs/jarir.svg create mode 100644 svgs/m2.svg create mode 100644 svgs/mobily.svg create mode 100644 svgs/nafath.svg create mode 100644 svgs/nahdi.svg create mode 100644 svgs/noon.svg create mode 100644 svgs/phantom.svg create mode 100644 svgs/redotpay.svg create mode 100644 svgs/sehhaty.svg create mode 100644 svgs/tawakkalna_emergency.svg create mode 100644 svgs/wafeer.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5542e9c2e00..15c42f121b7 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -120,6 +120,7 @@ + @@ -286,6 +287,7 @@ + @@ -413,6 +415,7 @@ + @@ -2165,6 +2168,7 @@ + @@ -2864,6 +2868,7 @@ + @@ -4362,6 +4367,7 @@ + @@ -4972,6 +4978,7 @@ + @@ -5563,6 +5570,7 @@ + @@ -5938,6 +5946,7 @@ + @@ -5955,6 +5964,7 @@ + @@ -6152,6 +6162,7 @@ + @@ -6770,6 +6781,7 @@ + @@ -7662,6 +7674,7 @@ + @@ -8079,6 +8092,7 @@ + @@ -9300,7 +9314,8 @@ - + + @@ -9350,6 +9365,7 @@ + @@ -10473,6 +10489,7 @@ + diff --git a/svgs/absher.svg b/svgs/absher.svg new file mode 100644 index 00000000000..8aaff883459 --- /dev/null +++ b/svgs/absher.svg @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/svgs/crypto_bubbles.svg b/svgs/crypto_bubbles.svg new file mode 100644 index 00000000000..5c557e9246a --- /dev/null +++ b/svgs/crypto_bubbles.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + diff --git a/svgs/dr_mohammad_alfagih_hospital.svg b/svgs/dr_mohammad_alfagih_hospital.svg new file mode 100644 index 00000000000..44e83a26c15 --- /dev/null +++ b/svgs/dr_mohammad_alfagih_hospital.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/svgs/expertoption.svg b/svgs/expertoption.svg new file mode 100644 index 00000000000..a50ee158c4b --- /dev/null +++ b/svgs/expertoption.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/svgs/jarir.svg b/svgs/jarir.svg new file mode 100644 index 00000000000..54e6f41e906 --- /dev/null +++ b/svgs/jarir.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/svgs/m2.svg b/svgs/m2.svg new file mode 100644 index 00000000000..f8108eadbe4 --- /dev/null +++ b/svgs/m2.svg @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/svgs/mobily.svg b/svgs/mobily.svg new file mode 100644 index 00000000000..6b66d76a935 --- /dev/null +++ b/svgs/mobily.svg @@ -0,0 +1,19 @@ + + + + + + + diff --git a/svgs/nafath.svg b/svgs/nafath.svg new file mode 100644 index 00000000000..5e9af95eff3 --- /dev/null +++ b/svgs/nafath.svg @@ -0,0 +1,22 @@ + + + + diff --git a/svgs/nahdi.svg b/svgs/nahdi.svg new file mode 100644 index 00000000000..7fb5880eadd --- /dev/null +++ b/svgs/nahdi.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/svgs/noon.svg b/svgs/noon.svg new file mode 100644 index 00000000000..c4f72582764 --- /dev/null +++ b/svgs/noon.svg @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/svgs/phantom.svg b/svgs/phantom.svg new file mode 100644 index 00000000000..bd81834ec7b --- /dev/null +++ b/svgs/phantom.svg @@ -0,0 +1,23 @@ + + + + diff --git a/svgs/redotpay.svg b/svgs/redotpay.svg new file mode 100644 index 00000000000..0d60e6d9a5e --- /dev/null +++ b/svgs/redotpay.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/svgs/sehhaty.svg b/svgs/sehhaty.svg new file mode 100644 index 00000000000..901dca0abcd --- /dev/null +++ b/svgs/sehhaty.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/svgs/tawakkalna_emergency.svg b/svgs/tawakkalna_emergency.svg new file mode 100644 index 00000000000..386b12bd315 --- /dev/null +++ b/svgs/tawakkalna_emergency.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/svgs/wafeer.svg b/svgs/wafeer.svg new file mode 100644 index 00000000000..3aeb22abab1 --- /dev/null +++ b/svgs/wafeer.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + From a2b35be4c91ac694e185aed97a9586ed6dd578f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 21:05:32 +0800 Subject: [PATCH 079/527] Update dependency io.nlopez.compose.rules:ktlint to v0.3.21 (#2090) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3afd3ae55e8..327e4a23c98 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.20", + "io.nlopez.compose.rules:ktlint:0.3.21", ), ).editorConfigOverride( mapOf( From b86b08b6a803d83a2a7752876250493c0eba8bdc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 14:03:04 +0800 Subject: [PATCH 080/527] Update plugin com.google.devtools.ksp to v2.0.0-RC3-1.0.20 (#2092) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 327e4a23c98..07f675d8293 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.0-RC3" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC3" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC3" apply false - id("com.google.devtools.ksp") version "2.0.0-RC2-1.0.20" apply false + id("com.google.devtools.ksp") version "2.0.0-RC3-1.0.20" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From afde7765c3861f6823c8ac903120ff72d363279d Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 14 May 2024 18:58:49 +0300 Subject: [PATCH 081/527] +1 icon: HATSUNE MIKU, +1 link (#2093) --- app/assets/appfilter.xml | 26 ++++++++++++++------------ svgs/browsec.svg | 2 +- svgs/hatsune_miku_colorful_stage.svg | 1 + svgs/wallflow.svg | 2 +- svgs/wallflow_plus.svg | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 svgs/hatsune_miku_colorful_stage.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 15c42f121b7..17d25ae4763 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -120,7 +120,6 @@ - @@ -287,7 +286,6 @@ - @@ -2551,6 +2549,7 @@ + @@ -3902,6 +3901,7 @@ + @@ -4367,7 +4367,6 @@ - @@ -5570,7 +5569,6 @@ - @@ -5946,7 +5944,6 @@ - @@ -5964,7 +5961,6 @@ - @@ -6162,7 +6158,6 @@ - @@ -8092,7 +8087,6 @@ - @@ -9314,8 +9308,6 @@ - - @@ -9365,7 +9357,6 @@ - @@ -10489,7 +10480,6 @@ - @@ -11315,20 +11305,32 @@ + + + + + + + + + + + + diff --git a/svgs/browsec.svg b/svgs/browsec.svg index 91983cc5c1d..44247a9336f 100644 --- a/svgs/browsec.svg +++ b/svgs/browsec.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/hatsune_miku_colorful_stage.svg b/svgs/hatsune_miku_colorful_stage.svg new file mode 100644 index 00000000000..e8fb1911201 --- /dev/null +++ b/svgs/hatsune_miku_colorful_stage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wallflow.svg b/svgs/wallflow.svg index 29fafa49eb9..0605a5ba56d 100644 --- a/svgs/wallflow.svg +++ b/svgs/wallflow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/wallflow_plus.svg b/svgs/wallflow_plus.svg index d59d8693169..c112a505c31 100644 --- a/svgs/wallflow_plus.svg +++ b/svgs/wallflow_plus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 8a44880a880394a575fb930cda02b18b1638644e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 09:12:01 +0800 Subject: [PATCH 082/527] Update lifecycleVersion to v2.8.0 (#2095) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c5c93267769..dd0add22b30 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -132,7 +132,7 @@ licensee { } dependencies { - val lifecycleVersion = "2.7.0" + val lifecycleVersion = "2.8.0" val hiltVersion = "2.51.1" implementation("androidx.appcompat:appcompat:1.6.1") From fad7d648e3fd241a1f5e08d401828b79975d3478 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 09:12:10 +0800 Subject: [PATCH 083/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta01 (#2094) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dd0add22b30..8e77c27bb7a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,7 +147,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.7") implementation("androidx.compose.material3:material3:1.3.0-alpha05") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-alpha08") + implementation("androidx.navigation:navigation-compose:2.8.0-beta01") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") From 4e4521c2c50bb4c10f13640eeb045549447c008a Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Wed, 15 May 2024 17:39:22 +0800 Subject: [PATCH 084/527] Use collectAsStateWithLifecycle to safely collect uiState (#2091) https://medium.com/androiddevelopers/consuming-flows-safely-in-jetpack-compose-cde014d0d5a3 --- .../lawnchair/lawnicons/ui/destination/Acknowledgement.kt | 4 ++-- .../lawnchair/lawnicons/ui/destination/Acknowledgements.kt | 4 ++-- .../app/lawnchair/lawnicons/ui/destination/Contributors.kt | 4 ++-- .../kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt index e411981fcd5..3e3f492eab2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -28,6 +27,7 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.placeholder.PlaceholderHighlight import app.lawnchair.lawnicons.ui.components.core.placeholder.fade @@ -50,7 +50,7 @@ fun Acknowledgement( color = MaterialTheme.colorScheme.primary, textDecoration = TextDecoration.Underline, ), - ).collectAsState() + ).collectAsStateWithLifecycle() LawniconsScaffold( modifier = modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt index cc9a16248db..5b145afc2f7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt @@ -7,13 +7,13 @@ import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.SimpleListRow @@ -28,7 +28,7 @@ fun Acknowledgements( modifier: Modifier = Modifier, acknowledgementsViewModel: AcknowledgementsViewModel = hiltViewModel(), ) { - val ossLibraries by acknowledgementsViewModel.ossLibraries.collectAsState() + val ossLibraries by acknowledgementsViewModel.ossLibraries.collectAsStateWithLifecycle() LawniconsScaffold( modifier = modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt index 144efe9145c..fcf656cb769 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -20,6 +19,7 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.GitHubContributor import app.lawnchair.lawnicons.ui.components.ContributorRow @@ -42,7 +42,7 @@ fun Contributors( modifier: Modifier = Modifier, contributorsViewModel: ContributorsViewModel = hiltViewModel(), ) { - val uiState by contributorsViewModel.uiState.collectAsState() + val uiState by contributorsViewModel.uiState.collectAsStateWithLifecycle() Contributors( uiState = uiState, onBack = onBack, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index fbcfa967264..8fdb362b0f4 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -16,6 +15,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid @@ -37,8 +37,8 @@ fun Home( isIconPicker: Boolean = false, lawniconsViewModel: LawniconsViewModel = hiltViewModel(), ) { - val iconInfoModel by lawniconsViewModel.iconInfoModel.collectAsState() - val searchedIconInfoModel by lawniconsViewModel.searchedIconInfoModel.collectAsState() + val iconInfoModel by lawniconsViewModel.iconInfoModel.collectAsStateWithLifecycle() + val searchedIconInfoModel by lawniconsViewModel.searchedIconInfoModel.collectAsStateWithLifecycle() val searchMode = lawniconsViewModel.searchMode var searchTerm by rememberSaveable { mutableStateOf(value = "") } From 6f1e38d3b2f91cb6ac7b2e94498c13922a1fc64c Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Wed, 15 May 2024 21:39:28 +1000 Subject: [PATCH 085/527] Try and fix icon checklist workflow (#2096) --- .github/workflows/icon_checklist.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/icon_checklist.yml b/.github/workflows/icon_checklist.yml index a4c83cc7284..bdf5e1e4460 100644 --- a/.github/workflows/icon_checklist.yml +++ b/.github/workflows/icon_checklist.yml @@ -7,6 +7,9 @@ on: paths: - svgs/* +permissions: + issues: write + jobs: comment: runs-on: ubuntu-latest From ad928fa5a08b2194b5ea14a4c52aeb22a93963ca Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 15 May 2024 20:34:08 +0800 Subject: [PATCH 086/527] `icon_checklist.yml` - Add additional permissions Test fix to see if this resolves the issue --- .github/workflows/icon_checklist.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/icon_checklist.yml b/.github/workflows/icon_checklist.yml index bdf5e1e4460..af271c5e555 100644 --- a/.github/workflows/icon_checklist.yml +++ b/.github/workflows/icon_checklist.yml @@ -8,6 +8,8 @@ on: - svgs/* permissions: + contents: read + pull-requests: write issues: write jobs: From 7cb9a84123d3cd04fd7e841687cc12d4ff2c2a70 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 08:18:05 +0800 Subject: [PATCH 087/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.1 (#2100) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 07f675d8293..aa0c774797f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.3.21", + "io.nlopez.compose.rules:ktlint:0.4.1", ), ).editorConfigOverride( mapOf( From 793a87818528e8595e5ae983b6df9c0751316595 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 18 May 2024 06:53:58 +0800 Subject: [PATCH 088/527] Update plugin com.gradle.develocity to v3.17.4 (#2102) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 1359d992ca3..daa7a92099a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.3" + id("com.gradle.develocity") version "3.17.4" } develocity { From 5c0e2f7dd414ad191670770f44d0cb2d9b6b91e2 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sat, 18 May 2024 18:11:24 +1000 Subject: [PATCH 089/527] + 4 icons, + 1 link (#2101) * + 4 icons, + 1 link * Small update * Small update * Apply requested changes [1] * Small fix * Small fix --- app/assets/appfilter.xml | 5 ++++ svgs/eurovision_song_contest.svg | 14 +++++++++++ svgs/jaki.svg | 21 ++++++++++++++++ svgs/maginon_ipc_viewer.svg | 27 +++++++++++++++++++++ svgs/waterfox.svg | 41 ++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 svgs/eurovision_song_contest.svg create mode 100644 svgs/jaki.svg create mode 100644 svgs/maginon_ipc_viewer.svg create mode 100644 svgs/waterfox.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 17d25ae4763..1981a1c0e11 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2838,6 +2838,7 @@ + @@ -4359,6 +4360,7 @@ + @@ -5006,6 +5008,7 @@ + @@ -8239,6 +8242,7 @@ + @@ -10529,6 +10533,7 @@ + diff --git a/svgs/eurovision_song_contest.svg b/svgs/eurovision_song_contest.svg new file mode 100644 index 00000000000..2a8bdb9a872 --- /dev/null +++ b/svgs/eurovision_song_contest.svg @@ -0,0 +1,14 @@ + + diff --git a/svgs/jaki.svg b/svgs/jaki.svg new file mode 100644 index 00000000000..2619a7cd573 --- /dev/null +++ b/svgs/jaki.svg @@ -0,0 +1,21 @@ + + diff --git a/svgs/maginon_ipc_viewer.svg b/svgs/maginon_ipc_viewer.svg new file mode 100644 index 00000000000..b8ca594a6e7 --- /dev/null +++ b/svgs/maginon_ipc_viewer.svg @@ -0,0 +1,27 @@ + + diff --git a/svgs/waterfox.svg b/svgs/waterfox.svg new file mode 100644 index 00000000000..accf05b107a --- /dev/null +++ b/svgs/waterfox.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + From 955461a3b9b68e29497431945608f2708a2dc5ad Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 18 May 2024 11:28:39 +0300 Subject: [PATCH 090/527] =?UTF-8?q?+1=20icon:=20Qu=C3=A0=20T=E1=BA=B7ng=20?= =?UTF-8?q?VIP,=20+4=20links=20(#2103)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/appfilter.xml | 5 +++++ svgs/qua_tang_vip.svg | 1 + svgs/tinkoff.svg | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 svgs/qua_tang_vip.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1981a1c0e11..46040331337 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1027,6 +1027,7 @@ + @@ -3790,6 +3791,7 @@ + @@ -6509,6 +6511,7 @@ + @@ -7501,6 +7504,7 @@ + @@ -8838,6 +8842,7 @@ + diff --git a/svgs/qua_tang_vip.svg b/svgs/qua_tang_vip.svg new file mode 100644 index 00000000000..caf8c94a9c1 --- /dev/null +++ b/svgs/qua_tang_vip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tinkoff.svg b/svgs/tinkoff.svg index c4b9ea47e6f..547dab5fc0a 100644 --- a/svgs/tinkoff.svg +++ b/svgs/tinkoff.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 94327248d5377846231a5645344df60794a58f86 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 19 May 2024 14:23:45 +0800 Subject: [PATCH 091/527] Update dependency androidx.compose.material3:material3 to v1.3.0-beta01 (#2056) * Update dependency androidx.compose.material3:material3 to v1.3.0-beta01 * Migrate ModalBottomSheet --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Goooler --- app/build.gradle.kts | 2 +- .../lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8e77c27bb7a..4c6f7ad76b9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,7 +145,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.7") - implementation("androidx.compose.material3:material3:1.3.0-alpha05") + implementation("androidx.compose.material3:material3:1.3.0-beta01") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta01") implementation("androidx.core:core-splashscreen:1.0.1") diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index f7b40b291d0..0eb59f6557c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -52,7 +52,9 @@ fun IconInfoPopup( isPopupShown(false) }, sheetState = sheetState, - windowInsets = WindowInsets(0.dp), + contentWindowInsets = { + WindowInsets(0.dp) + }, modifier = modifier .navigationBarsPadding(), ) { From a76fd8d2c16dd079427573f9355f990a7c970a25 Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Mon, 20 May 2024 00:14:44 +0300 Subject: [PATCH 092/527] Added 8, Linked 1, Modified 1 (#2099) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add 5 icons hungerstation (`com.hungerstation.android.web/com.hungerstation.android.web.hungeractivities.MainActivity`) almanea (`com.almanea.android/com.almanea.android.MainActivity`) circlys (`com.jmeyte.app/com.example.circlys_v2.MainActivity`) clicflyer (`main.ClicFlyer/main.ClicFlyer.Login.Splash`) mada_pay (`com.mada.madapay/com.emcrey.app.activities.SupportActivity`) * Update ciclys.svg * Updating names * Rename ciclys.svg to circlys.svg * Update Circlys drawable name * Added 15 icons * Alkahraba (`sa.com.se.alkahraba/sa.com.se.alkahraba.MainActivity`) * Alrajhi Bank (`com.alrajhiretailapp/com.alrajhiretailapp.MainActivity`) * DEXTools (`io.dextools.app/io.dextools.app.ui.splash.SplashActivity`) * Malaa (`tech.malaa.personal/tech.malaa.personal.MainActivity`) * SNB Mobile (`com.snb.alahlimobile/com.snb.alahlimobile.MainActivity`) * Tameeni (`tameeni.com/tameeni.com.MainActivity`) * Tawakkalna Services (`sa.gov.nic.twkhayat/com.tawakkalna.twkapp.ui.SplashActivity`) * Alinma App (`com.alinma.retail.mobile.v4/com.alinma.retail.mobile.v4.MainActivity`) * ANB Telemoney (`telemoneyapp.anb.keystore/telemoneyapp.anb.keystore.MainActivity`) * BingX (`pro.bingbon.app/pro.bingintl.ui.activity.MainActivity`) * Bouki (`com.emcrey.riyadbank/com.emcrey.bouki.MainActivity`) * Panda (`com.todoorstep.store/com.todoorstep.store.ui.activities.splash.SplashActivity`) * Rabby Wallet (`com.debank.rabbymobile/com.debank.rabbymobile.MainActivity`) * Tamara (`co.tamara.user/co.tamara.user.MainActivity`) * Themer (`com.therxmv.telegramthemer/com.therxmv.telegramthemer.ui.MainActivity`) * fixing alkahraba.svg not showing properly * I made modifications to icons and app namings Modified alinma_app, alkahraba, alrajhi_bank, anb_telemoney, bouki, rabby_wallet, snb_mobile, tameeni, tawakkalna_services, themer, appfilter.xml * Removed the word (app) I removed the word app from alinma icon name and in appfilter.xml * Update alinma.svg and alkahraba.svg * Update tameeni.svg reworked the icon * Update tawakkalna_services.svg to 12px stroke. themer.svg brush stroke to 10px. Lowered the icon a little bit * Update anb_telemoney.svg * Added 15 icons, Linked 2 icons, Modified app names * Update appfilter.xml, crypto_bubbles.svg, dr_alfagih.svg, and 7 more files * Update crypto_bubbles.svg * Removed the layer group and combined the paths. * Removed unnecessary Kotlin files. * Updated the icons as required. crypto_bubbles, m2, nafath, sehhaty * Update haraj.svg, simply_fi.svg, smc.svg, and 2 more files * Update smc.svg * Added 4 icons, linked 1 * Bupa Arabia (`com.buparabia.mobileapp.outsystems/com.buparabia.mobileapp.outsystems.launcher_33280ee5d736409d9fd47355c647f40aa093d5cb24bc10fd64372e844792462e`) * Cobone (`com.cobone.coboneapp/com.cobone.coboneapp.MainActivity`) * Mobily Pay (`com.es.mobily/com.es.mobily.MainActivity`) * Najm (`com.najm.najm/com.najm.publicapp.SplashActivity`) * Exchange (linked `com.blockchain.exchange/com.blockchain.exchange.MainActivity` to `@drawable/blockchain`) * fixed drawable="cobone" drawable="كوبون ~~ cobone" name="Cobone" to drawable="cobone" name="كوبون ~~ Cobone" * Updated sizes ±5 pixels * added 4 icons, updated 1 icon. * stc pay (`sa.com.stcpay/sa.com.stcpay.launcher_d2bb6544d0c7607f9e371c3f8be743ad2954f8102a2c7f7665390b1561acfb47`) * Salatuk (`com.masarat.salati/com.masarat.salati.ui.activities.MainActivity`) * SAB Mobile (`com.sabb.mobilebanking/com.sabb.mobilebanking.MainActivity`) * ANB - Arab National Bank (`com.anb.mobile.prod/com.anb.mobile.prod.launcher_a6ddb73340946d2268639aee7b9f1f69ec008acffe6ed6baebde055bdc1844fd`) * Updated rabby_wallet.svg to appear bigger than the previous one. * fixed sab_mobile.svg size. * Updated as seggested, removed 1 icon * Update bupa_arabia.svg, najm.svg, rabby_wallet.svg, and 3 more files * Update anb.svg * Update bupa_arabia.svg * Update mobily_pay.svg * Update najm.svg * Update rabby_wallet.svg * Update urpay.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 14 ++++++++++++++ svgs/anb.svg | 1 + svgs/bupa_arabia.svg | 1 + svgs/cobone.svg | 24 ++++++++++++++++++++++++ svgs/haraj.svg | 30 ++++++++++++++++++++++++++++++ svgs/mobily_pay.svg | 1 + svgs/najm.svg | 1 + svgs/rabby_wallet.svg | 24 +----------------------- svgs/salatuk.svg | 23 +++++++++++++++++++++++ svgs/simply_fi.svg | 25 +++++++++++++++++++++++++ svgs/smc.svg | 30 ++++++++++++++++++++++++++++++ svgs/stc_pay.svg | 21 +++++++++++++++++++++ svgs/tabby.svg | 18 ++++++++++++++++++ svgs/urpay.svg | 1 + 14 files changed, 191 insertions(+), 23 deletions(-) create mode 100644 svgs/anb.svg create mode 100644 svgs/bupa_arabia.svg create mode 100644 svgs/cobone.svg create mode 100644 svgs/haraj.svg create mode 100644 svgs/mobily_pay.svg create mode 100644 svgs/najm.svg create mode 100644 svgs/salatuk.svg create mode 100644 svgs/simply_fi.svg create mode 100644 svgs/smc.svg create mode 100644 svgs/stc_pay.svg create mode 100644 svgs/tabby.svg create mode 100644 svgs/urpay.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 46040331337..1e3bd7112e8 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -413,6 +413,7 @@ + @@ -2864,6 +2865,7 @@ + @@ -7852,6 +7854,7 @@ + @@ -7863,6 +7866,7 @@ + @@ -8715,6 +8719,7 @@ + @@ -9097,6 +9102,7 @@ + @@ -11319,28 +11325,36 @@ + + + + + + + + diff --git a/svgs/anb.svg b/svgs/anb.svg new file mode 100644 index 00000000000..55a3518aafc --- /dev/null +++ b/svgs/anb.svg @@ -0,0 +1 @@ + diff --git a/svgs/bupa_arabia.svg b/svgs/bupa_arabia.svg new file mode 100644 index 00000000000..b950aaf047b --- /dev/null +++ b/svgs/bupa_arabia.svg @@ -0,0 +1 @@ + diff --git a/svgs/cobone.svg b/svgs/cobone.svg new file mode 100644 index 00000000000..ad5758c5bea --- /dev/null +++ b/svgs/cobone.svg @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/svgs/haraj.svg b/svgs/haraj.svg new file mode 100644 index 00000000000..560faf3282f --- /dev/null +++ b/svgs/haraj.svg @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/svgs/mobily_pay.svg b/svgs/mobily_pay.svg new file mode 100644 index 00000000000..b43f9d833a7 --- /dev/null +++ b/svgs/mobily_pay.svg @@ -0,0 +1 @@ + diff --git a/svgs/najm.svg b/svgs/najm.svg new file mode 100644 index 00000000000..c90de40555d --- /dev/null +++ b/svgs/najm.svg @@ -0,0 +1 @@ + diff --git a/svgs/rabby_wallet.svg b/svgs/rabby_wallet.svg index 3fbf7e8a350..626b3323e12 100644 --- a/svgs/rabby_wallet.svg +++ b/svgs/rabby_wallet.svg @@ -1,23 +1 @@ - - - - - - - - - + diff --git a/svgs/salatuk.svg b/svgs/salatuk.svg new file mode 100644 index 00000000000..dc1a623a888 --- /dev/null +++ b/svgs/salatuk.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/svgs/simply_fi.svg b/svgs/simply_fi.svg new file mode 100644 index 00000000000..f83ba907438 --- /dev/null +++ b/svgs/simply_fi.svg @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/svgs/smc.svg b/svgs/smc.svg new file mode 100644 index 00000000000..ef494c810ae --- /dev/null +++ b/svgs/smc.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/svgs/stc_pay.svg b/svgs/stc_pay.svg new file mode 100644 index 00000000000..46f5d1cdde0 --- /dev/null +++ b/svgs/stc_pay.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/svgs/tabby.svg b/svgs/tabby.svg new file mode 100644 index 00000000000..eebfb7109bb --- /dev/null +++ b/svgs/tabby.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/svgs/urpay.svg b/svgs/urpay.svg new file mode 100644 index 00000000000..26481d63e1b --- /dev/null +++ b/svgs/urpay.svg @@ -0,0 +1 @@ + From 77279b0c605024e442bce6323dafee6766441bae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 08:16:11 +0800 Subject: [PATCH 093/527] Update AGP (#2106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index aa0c774797f..645cf713804 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.4.0" apply false + id("com.android.application") version "8.4.1" apply false id("org.jetbrains.kotlin.android") version "2.0.0-RC3" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC3" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC3" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 7c801dea6cc..db022859121 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.4.0") + implementation("com.android.tools:sdk-common:31.4.1") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From abc3e3d52feb8dc5be67693ad69bb899d49c7d87 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 02:20:15 +0000 Subject: [PATCH 094/527] Kotlin 2.0.0 (#2108) * Update Kotlin, KSP and Compose Compiler to v2.0.0 * Update renovate.json --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Zongle Wang --- .github/renovate.json | 5 ++--- build.gradle.kts | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index f5ccbd097ad..59f4ad8cd72 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -7,10 +7,9 @@ ], "packageRules": [ { - "groupName": "Kotlin, KSP and Compose Compiler", + "groupName": "Kotlin and KSP", "matchPackagePrefixes": [ - "com.google.devtools.ksp", - "androidx.compose.compiler" + "com.google.devtools.ksp" ], "matchPackagePatterns": [ "org.jetbrains.kotlin.*" diff --git a/build.gradle.kts b/build.gradle.kts index 645cf713804..cb1bb5beb5e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,9 +3,9 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.4.1" apply false - id("org.jetbrains.kotlin.android") version "2.0.0-RC3" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.0.0-RC3" - id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0-RC3" apply false + id("org.jetbrains.kotlin.android") version "2.0.0" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" + id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false id("com.google.devtools.ksp") version "2.0.0-RC3-1.0.20" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false From 2029a5086b00cd4ea66a99aaef01e4ff37ab2c82 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 22:39:50 +0800 Subject: [PATCH 095/527] Update plugin com.google.devtools.ksp to v2.0.0-1.0.21 (#2109) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cb1bb5beb5e..7380faede27 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false - id("com.google.devtools.ksp") version "2.0.0-RC3-1.0.20" apply false + id("com.google.devtools.ksp") version "2.0.0-1.0.21" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From 662d54856de7c0fc345aad2afdb619eeb18d9f9a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 19 May 2024 15:25:51 +0800 Subject: [PATCH 096/527] Migrate to appfilter implementation Will remove legacy `grayscale_icon_map.xml` implementation soon-ish --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 11 ++++ .../lawnicons/model/IconInfoModel.kt | 2 +- .../lawnchair/lawnicons/model/SearchInfo.kt | 2 +- .../lawnicons/repository/IconRepository.kt | 10 +-- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 4 +- .../ui/components/home/IconInfoPopup.kt | 5 +- .../ui/components/home/IconPreview.kt | 8 +-- .../ui/components/home/IconPreviewGrid.kt | 6 +- .../components/home/search/SearchContents.kt | 16 ++--- .../lawnicons/ui/destination/Home.kt | 12 ++-- .../lawnicons/ui/util/PreviewUtils.kt | 17 ++--- .../lawnchair/lawnicons/util/GetIconInfo.kt | 63 +++++++++++++++++++ .../lawnicons/viewmodel/LawniconsViewModel.kt | 3 +- app/src/main/res/values/strings.xml | 2 +- 14 files changed, 119 insertions(+), 42 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index c261478932c..ab9f85351fa 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -1,8 +1,19 @@ package app.lawnchair.lawnicons.model +@Deprecated( + message = "Use appfilter implementation instead.", + replaceWith = ReplaceWith("IconInfoAppfilter", "app.lawnchair.lawnicons.model.IconInfoAppfilter") +) data class IconInfo( val name: String, val drawableName: String, val packageName: String, val id: Int, ) + +data class IconInfoAppfilter( + val name: String, + val drawableName: String, + val componentName: String, + val id: Int, +) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt index 05230377873..7ace0681ad2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt @@ -3,6 +3,6 @@ package app.lawnchair.lawnicons.model import kotlinx.collections.immutable.ImmutableList data class IconInfoModel( - val iconInfo: ImmutableList, + val iconInfo: ImmutableList, val iconCount: Int, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt index 1af94265539..78290f0b6f8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt @@ -1,7 +1,7 @@ package app.lawnchair.lawnicons.model data class SearchInfo( - val iconInfo: IconInfo, + val iconInfo: IconInfoAppfilter, val indexOfMatch: Int, val matchAtWordStart: Boolean, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index d37bb6a72d9..b66271494c0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -1,11 +1,11 @@ package app.lawnchair.lawnicons.repository import android.app.Application -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.SearchInfo import app.lawnchair.lawnicons.model.SearchMode -import app.lawnchair.lawnicons.util.getIconInfo +import app.lawnchair.lawnicons.util.getIconInfoAppfilter import javax.inject.Inject import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope @@ -16,14 +16,14 @@ import kotlinx.coroutines.withContext class IconRepository @Inject constructor(application: Application) { - private var iconInfo: List? = null + private var iconInfo: List? = null val iconInfoModel = MutableStateFlow(value = null) val searchedIconInfoModel = MutableStateFlow(value = null) private val coroutineScope = CoroutineScope(Dispatchers.IO) init { coroutineScope.launch { - iconInfo = application.getIconInfo() + iconInfo = application.getIconInfoAppfilter() .associateBy { it.name }.values .sortedBy { it.name.lowercase() } .also { @@ -48,7 +48,7 @@ class IconRepository @Inject constructor(application: Application) { val searchIn = when (mode) { SearchMode.NAME -> candidate.name - SearchMode.PACKAGE_NAME -> candidate.packageName + SearchMode.PACKAGE_NAME -> candidate.componentName SearchMode.DRAWABLE -> candidate.drawableName } val indexOfMatch = diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 9d310280776..4596aa0a22d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -15,7 +15,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements @@ -31,7 +31,7 @@ import soup.compose.material.motion.animation.rememberSlideDistance @ExperimentalFoundationApi fun Lawnicons( windowSizeClass: WindowSizeClass, - onSendResult: (IconInfo) -> Unit, + onSendResult: (IconInfoAppfilter) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 0eb59f6557c..8f6770cbe2b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.ui.components.IconLink import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.SimpleListRow @@ -39,7 +40,7 @@ import app.lawnchair.lawnicons.ui.util.SampleData @OptIn(ExperimentalMaterial3Api::class) @Composable fun IconInfoPopup( - iconInfo: IconInfo, + iconInfo: IconInfoAppfilter, modifier: Modifier = Modifier, isPopupShown: (Boolean) -> Unit, ) { @@ -120,7 +121,7 @@ fun IconInfoPopup( ) { SimpleListRow( label = iconInfo.name, - description = iconInfo.packageName, + description = iconInfo.componentName, divider = false, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index d0bb6404ca4..a6f93da9aee 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -23,11 +23,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -41,13 +40,12 @@ private fun ColorScheme.iconColor(): Color { @Composable fun IconPreview( - iconInfo: IconInfo, - onSendResult: (IconInfo) -> Unit, + iconInfo: IconInfoAppfilter, + onSendResult: (IconInfoAppfilter) -> Unit, modifier: Modifier = Modifier, iconBackground: Color? = null, isIconPicker: Boolean = false, ) { - val context = LocalContext.current val isIconInfoShown = remember { mutableStateOf(false) } Box( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 9aeb5774a65..7ababd80ea6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -17,7 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -27,9 +27,9 @@ import kotlinx.collections.immutable.ImmutableList @Composable @ExperimentalFoundationApi fun IconPreviewGrid( - iconInfo: ImmutableList, + iconInfo: ImmutableList, isExpandedScreen: Boolean, - onSendResult: (IconInfo) -> Unit, + onSendResult: (IconInfoAppfilter) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 6c25eb0254d..5d6e0b51f8a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -36,7 +36,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup import app.lawnchair.lawnicons.ui.components.home.IconPreview @@ -47,9 +47,9 @@ fun SearchContents( searchTerm: String, searchMode: SearchMode, onModeChange: (SearchMode) -> Unit, - iconInfo: ImmutableList, + iconInfo: ImmutableList, modifier: Modifier = Modifier, - onSendResult: (IconInfo) -> Unit = {}, + onSendResult: (IconInfoAppfilter) -> Unit = {}, ) { Column( modifier = modifier, @@ -123,11 +123,11 @@ fun SearchContents( verticalArrangement = Arrangement.spacedBy(4.dp), ) { val it = iconInfo[0] - val isIconInfoShown = remember { mutableStateOf(false) } + val isIconInfoAppfilterShown = remember { mutableStateOf(false) } ListItem( headlineContent = { Text(it.name) }, - supportingContent = { Text(it.packageName) }, + supportingContent = { Text(it.componentName) }, leadingContent = { Box( contentAlignment = Alignment.Center, @@ -145,13 +145,13 @@ fun SearchContents( }, modifier = Modifier .clip(RoundedCornerShape(16.dp)) - .clickable(onClick = { isIconInfoShown.value = true }), + .clickable(onClick = { isIconInfoAppfilterShown.value = true }), ) - if (isIconInfoShown.value) { + if (isIconInfoAppfilterShown.value) { IconInfoPopup( iconInfo = it, ) { - isIconInfoShown.value = it + isIconInfoAppfilterShown.value = it } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 8fdb362b0f4..59fe5639984 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar @@ -31,7 +31,7 @@ import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel @Composable fun Home( onNavigate: (String) -> Unit, - onSendResult: (IconInfo) -> Unit, + onSendResult: (IconInfoAppfilter) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, isIconPicker: Boolean = false, @@ -46,8 +46,8 @@ fun Home( modifier = modifier, targetState = iconInfoModel != null, label = "", - ) { targetState -> - if (targetState) { + ) { visible -> + if (visible) { Scaffold( topBar = { searchedIconInfoModel?.let { @@ -77,6 +77,8 @@ fun Home( searchMode = searchMode, onModeChange = { lawniconsViewModel.changeMode(it) + // Clear search results + lawniconsViewModel.searchIcons("") // Refresh search results lawniconsViewModel.searchIcons(searchTerm) }, @@ -90,7 +92,7 @@ fun Home( }, ) { contentPadding -> iconInfoModel?.let { - val padding = contentPadding + val padding = contentPadding // Ignore padding value IconPreviewGrid( iconInfo = it.iconInfo, isExpandedScreen = isExpandedScreen, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt index 2b3c2b8e08b..04be75165ab 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt @@ -4,6 +4,7 @@ import android.content.res.Configuration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Wallpapers import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import kotlinx.collections.immutable.persistentListOf @Preview( @@ -31,29 +32,29 @@ import kotlinx.collections.immutable.persistentListOf annotation class PreviewLawnicons object SampleData { - val iconInfoSample = IconInfo( + val iconInfoSample = IconInfoAppfilter( name = "Email", drawableName = "@drawable/email", - packageName = "com.android.email", + componentName = "com.android.email", id = 1, ) val iconInfoList = persistentListOf( - IconInfo( + IconInfoAppfilter( name = "Email", drawableName = "@drawable/email", - packageName = "com.android.email", + componentName = "com.android.email", id = 1, ), - IconInfo( + IconInfoAppfilter( name = "Search", drawableName = "@drawable/search", - packageName = "com.android.search", + componentName = "com.android.search", id = 2, ), - IconInfo( + IconInfoAppfilter( name = "Phone", drawableName = "@drawable/phone", - packageName = "com.android.phone", + componentName = "com.android.phone", id = 3, ), ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index b819a435ca8..5392779841a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -1,10 +1,16 @@ package app.lawnchair.lawnicons.util +import android.annotation.SuppressLint import android.content.Context import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter import org.xmlpull.v1.XmlPullParser +@Deprecated( + message = "Use appfilter implementation instead.", + replaceWith = ReplaceWith("getIconInfoAppfilter", "app.lawnchair.lawnicons.util.getIconInfoAppfilter") +) fun Context.getIconInfo(): List { val iconInfo = mutableListOf() @@ -39,3 +45,60 @@ fun Context.getIconInfo(): List { return iconInfo } + +@SuppressLint("DiscouragedApi") +fun Context.getIconInfoAppfilter(): List { + val iconInfo = mutableListOf() + + val componentInfoPrefixLength = "ComponentInfo{".length + + try { + val xmlId = R.xml.appfilter + if (xmlId != 0) { + val parser = resources.getXml(xmlId) + val depth = parser.depth + var type: Int + while ( + ( + parser.next() + .also { type = it } != XmlPullParser.END_TAG || parser.depth > depth + ) && + type != XmlPullParser.END_DOCUMENT + ) { + if (type != XmlPullParser.START_TAG) continue + if ("item" == parser.name) { + if ( + parser.getAttributeBooleanValue(null, "drawableIgnore", false) + ) { + continue + } + + + val component = parser.getAttributeValue(null, "component") + val iconName = parser.getAttributeValue(null, "name") + val initialIconId = parser.getAttributeValue(null, "drawable") + val iconId = "${initialIconId}_foreground" + + val iconDrawable = resources.getIdentifier(iconId, "drawable", packageName) + + var actualComponent = "" + + val parsedComponent = + component.substring(componentInfoPrefixLength, component.length - 1) + + if (parsedComponent != "" && !parsedComponent.startsWith("/") && + !parsedComponent.endsWith("/") + ) { + actualComponent = parsedComponent + } + + iconInfo.add(IconInfoAppfilter(iconName, iconId, actualComponent, iconDrawable)) + } + } + } + } catch (e: Exception) { + e.printStackTrace() + } + + return iconInfo +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index cd59972859a..7abd2918636 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -14,8 +14,9 @@ import kotlinx.coroutines.launch @HiltViewModel class LawniconsViewModel @Inject constructor(private val iconRepository: IconRepository) : ViewModel() { - + @JvmField val iconInfoModel = iconRepository.iconInfoModel + @JvmField val searchedIconInfoModel = iconRepository.searchedIconInfoModel var searchMode by mutableStateOf(SearchMode.NAME) private set diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 10c110a61df..fe13a184c9b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -56,7 +56,7 @@ Drawable - Package name + Component name About If the icon is outdated due to rebranding, create an issue on GitHub. From b4fa50b2050bcf5fc24cb670ca0372bafa9e3d27 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 24 May 2024 15:39:43 +0800 Subject: [PATCH 097/527] Fix IconLink in Compose preview --- .../app/lawnchair/lawnicons/ui/components/IconLink.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt index 594e96dff7e..6c4693aced5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt @@ -47,10 +47,12 @@ fun IconLink( .height(64.dp) .clip(MaterialTheme.shapes.medium) .clickable { - val webpage = Uri.parse(url) - val intent = Intent(Intent.ACTION_VIEW, webpage) - if (intent.resolveActivity(context.packageManager) != null) { - context.startActivity(intent) + if (!inPreviewMode) { + val webpage = Uri.parse(url) + val intent = Intent(Intent.ACTION_VIEW, webpage) + if (intent.resolveActivity(context.packageManager) != null) { + context.startActivity(intent) + } } }, ) { From 3bb334e1f95fad4c4a98dfa64284257dbf4a6be1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 24 May 2024 15:49:35 +0800 Subject: [PATCH 098/527] Cleanup acknowledgements viewmodel --- .../lawnicons/ui/destination/Acknowledgements.kt | 4 ++-- .../lawnicons/viewmodel/AcknowledgementViewModel.kt | 4 +++- .../lawnicons/viewmodel/AcknowledgementsViewModel.kt | 12 ------------ 3 files changed, 5 insertions(+), 15 deletions(-) delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementsViewModel.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt index 5b145afc2f7..fe501a6d009 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt @@ -18,7 +18,7 @@ import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.util.Destinations -import app.lawnchair.lawnicons.viewmodel.AcknowledgementsViewModel +import app.lawnchair.lawnicons.viewmodel.AcknowledgementViewModel @Composable fun Acknowledgements( @@ -26,7 +26,7 @@ fun Acknowledgements( onNavigate: (String) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, - acknowledgementsViewModel: AcknowledgementsViewModel = hiltViewModel(), + acknowledgementsViewModel: AcknowledgementViewModel = hiltViewModel(), ) { val ossLibraries by acknowledgementsViewModel.ossLibraries.collectAsStateWithLifecycle() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt index 3282cf919eb..ee7cb3dbc15 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt @@ -23,6 +23,8 @@ class AcknowledgementViewModel @Inject constructor( ) : ViewModel() { + val ossLibraries = ossLibraryRepository.ossLibraries + fun getNoticeForOssLibrary( ossLibraryName: String, linkStyle: SpanStyle, @@ -56,7 +58,7 @@ class AcknowledgementViewModel @Inject constructor( start = start, end = end, ) - } + } } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementsViewModel.kt deleted file mode 100644 index 84630d3eeec..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementsViewModel.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.lawnchair.lawnicons.viewmodel - -import androidx.lifecycle.ViewModel -import app.lawnchair.lawnicons.repository.OssLibraryRepository -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject - -@HiltViewModel -class AcknowledgementsViewModel @Inject constructor(ossLibraryRepository: OssLibraryRepository) : - ViewModel() { - val ossLibraries = ossLibraryRepository.ossLibraries -} From 42d4f2cfb944cde5b11e33ac7d4bc79f9bfe1e13 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 24 May 2024 16:57:45 +0800 Subject: [PATCH 099/527] Cleanup search bar --- .../lawnicons/repository/IconRepository.kt | 4 +++ .../ui/components/home/search/SearchBar.kt | 15 ++++++++++- .../components/home/search/SearchContents.kt | 7 ++++- .../lawnicons/ui/destination/Home.kt | 14 +++------- .../lawnicons/viewmodel/LawniconsViewModel.kt | 26 ++++++++++++++++--- 5 files changed, 50 insertions(+), 16 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index b66271494c0..a63d03ac0d4 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -75,4 +75,8 @@ class IconRepository @Inject constructor(application: Application) { ) } } + + fun clear() { + searchedIconInfoModel.value = iconInfoModel.value + } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 5007dbe2758..34007a86e21 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -76,7 +76,20 @@ fun LawniconsSearchBar( isIconPicker = isIconPicker, ) } - +/** + * Composable function to create a search bar for the Lawnicons app. + * + * @param query The current search query entered by the user. + * @param isQueryEmpty A boolean value indicating whether the search query is empty. + * @param onClearAndBackClick A callback function that handles clearing the search query and navigating back. + * @param onQueryChange A callback function that handles changes in the search query. + * @param iconCount The number of icons available for selection. + * @param onNavigate A callback function that handles navigation to different screens based on the search query. + * @param modifier A modifier to customize the appearance or behavior of the search bar. + * @param isExpandedScreen A boolean value indicating whether the search bar is displayed on an expanded screen. + * @param isIconPicker A boolean value indicating whether the search bar is used for selecting icons. + * @param content A composable function that represents the content to be displayed within the search bar. + */ @Composable fun LawniconsSearchBar( query: String, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 5d6e0b51f8a..c9d24a05488 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -4,6 +4,8 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade import androidx.compose.animation.core.tween import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.scrollable +import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -16,6 +18,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons @@ -56,7 +59,9 @@ fun SearchContents( ) { Row( horizontalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier.padding(start = 16.dp), + modifier = Modifier + .horizontalScroll(rememberScrollState()) + .padding(start = 16.dp, end = 16.dp, top = 8.dp), ) { FilterChip( leadingIcon = { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 59fe5639984..441c1574515 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -40,7 +40,7 @@ fun Home( val iconInfoModel by lawniconsViewModel.iconInfoModel.collectAsStateWithLifecycle() val searchedIconInfoModel by lawniconsViewModel.searchedIconInfoModel.collectAsStateWithLifecycle() val searchMode = lawniconsViewModel.searchMode - var searchTerm by rememberSaveable { mutableStateOf(value = "") } + val searchTerm = lawniconsViewModel.searchTerm Crossfade( modifier = modifier, @@ -60,11 +60,9 @@ fun Home( query = searchTerm, isQueryEmpty = searchTerm == "", onClearAndBackClick = { - searchTerm = "" - lawniconsViewModel.searchIcons("") + lawniconsViewModel.clearSearch() }, onQueryChange = { newValue -> - searchTerm = newValue lawniconsViewModel.searchIcons(newValue) }, iconInfoModel = it, @@ -75,12 +73,8 @@ fun Home( SearchContents( searchTerm = searchTerm, searchMode = searchMode, - onModeChange = { - lawniconsViewModel.changeMode(it) - // Clear search results - lawniconsViewModel.searchIcons("") - // Refresh search results - lawniconsViewModel.searchIcons(searchTerm) + onModeChange = { mode -> + lawniconsViewModel.changeMode(mode) }, iconInfo = it.iconInfo, onSendResult = onSendResult, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 7abd2918636..2a7e369f2eb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -18,16 +18,34 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep val iconInfoModel = iconRepository.iconInfoModel @JvmField val searchedIconInfoModel = iconRepository.searchedIconInfoModel - var searchMode by mutableStateOf(SearchMode.NAME) - private set + + private var _searchMode by mutableStateOf(SearchMode.NAME) + private var _searchTerm by mutableStateOf("") + + val searchMode: SearchMode + get() = _searchMode + + val searchTerm: String + get() = _searchTerm fun searchIcons(query: String) { + _searchTerm = query viewModelScope.launch { - iconRepository.search(searchMode, query) + iconRepository.search(searchMode, searchTerm) } } fun changeMode(mode: SearchMode) { - this.searchMode = mode + _searchMode = mode + viewModelScope.launch { + iconRepository.search(searchMode, searchTerm) + } + } + + fun clearSearch() { + _searchTerm = "" + viewModelScope.launch { + iconRepository.clear() + } } } From 73f0b5d086a099a7cd80e021e5ac9a6a1acae39c Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 24 May 2024 17:32:11 +0800 Subject: [PATCH 100/527] Run spotlessApply, add kdoc --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 18 +++++++++++++++++- .../lawnchair/lawnicons/model/IconInfoModel.kt | 6 ++++++ .../ui/components/home/IconInfoPopup.kt | 1 - .../ui/components/home/search/SearchBar.kt | 1 + .../components/home/search/SearchContents.kt | 1 - .../lawnchair/lawnicons/ui/destination/Home.kt | 1 - .../lawnicons/ui/util/PreviewUtils.kt | 1 - .../lawnchair/lawnicons/util/GetIconInfo.kt | 5 ++--- .../viewmodel/AcknowledgementViewModel.kt | 2 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 1 + 10 files changed, 28 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index ab9f85351fa..34959e0b0fb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -1,8 +1,16 @@ package app.lawnchair.lawnicons.model +/** + * Data class to hold information about an icon. + * + * @property name The name of the icon. + * @property drawableName The name of the drawable resource for the icon. + * @property packageName The package name of the app that owns the icon. + * @property id A unique identifier for the icon. + */ @Deprecated( message = "Use appfilter implementation instead.", - replaceWith = ReplaceWith("IconInfoAppfilter", "app.lawnchair.lawnicons.model.IconInfoAppfilter") + replaceWith = ReplaceWith("IconInfoAppfilter", "app.lawnchair.lawnicons.model.IconInfoAppfilter"), ) data class IconInfo( val name: String, @@ -11,6 +19,14 @@ data class IconInfo( val id: Int, ) +/** + * Data class to hold information about an icon. + * + * @property name The name of the icon. + * @property drawableName The name of the drawable resource for the icon. + * @property componentName The component name of the app that owns the icon. + * @property id A unique identifier for the icon. + */ data class IconInfoAppfilter( val name: String, val drawableName: String, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt index 7ace0681ad2..bec01771e48 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt @@ -2,6 +2,12 @@ package app.lawnchair.lawnicons.model import kotlinx.collections.immutable.ImmutableList +/** + * Data class to hold information about icons. + * + * @property iconInfo A list of `IconInfoAppfilter` objects. + * @property iconCount The total number of icons. + */ data class IconInfoModel( val iconInfo: ImmutableList, val iconCount: Int, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 8f6770cbe2b..a114590b85b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -28,7 +28,6 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.ui.components.IconLink import app.lawnchair.lawnicons.ui.components.core.Card diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 34007a86e21..a595f78449f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -76,6 +76,7 @@ fun LawniconsSearchBar( isIconPicker = isIconPicker, ) } + /** * Composable function to create a search bar for the Lawnicons app. * diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index c9d24a05488..76874ac862e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -4,7 +4,6 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade import androidx.compose.animation.core.tween import androidx.compose.foundation.clickable -import androidx.compose.foundation.gestures.scrollable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 441c1574515..c4763584452 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -10,7 +10,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt index 04be75165ab..775aab97e42 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt @@ -3,7 +3,6 @@ package app.lawnchair.lawnicons.ui.util import android.content.res.Configuration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Wallpapers -import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.IconInfoAppfilter import kotlinx.collections.immutable.persistentListOf diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index 5392779841a..ddeaee8f2bd 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -9,7 +9,7 @@ import org.xmlpull.v1.XmlPullParser @Deprecated( message = "Use appfilter implementation instead.", - replaceWith = ReplaceWith("getIconInfoAppfilter", "app.lawnchair.lawnicons.util.getIconInfoAppfilter") + replaceWith = ReplaceWith("getIconInfoAppfilter", "app.lawnchair.lawnicons.util.getIconInfoAppfilter"), ) fun Context.getIconInfo(): List { val iconInfo = mutableListOf() @@ -69,11 +69,10 @@ fun Context.getIconInfoAppfilter(): List { if ("item" == parser.name) { if ( parser.getAttributeBooleanValue(null, "drawableIgnore", false) - ) { + ) { continue } - val component = parser.getAttributeValue(null, "component") val iconName = parser.getAttributeValue(null, "name") val initialIconId = parser.getAttributeValue(null, "drawable") diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt index ee7cb3dbc15..06a12e7d7d1 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt @@ -58,7 +58,7 @@ class AcknowledgementViewModel @Inject constructor( start = start, end = end, ) - } + } } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 2a7e369f2eb..44e86d479e8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -16,6 +16,7 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep ViewModel() { @JvmField val iconInfoModel = iconRepository.iconInfoModel + @JvmField val searchedIconInfoModel = iconRepository.searchedIconInfoModel From 99f602b1e40f36c791c95477c2d69e5ad9075650 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 24 May 2024 20:23:06 +0800 Subject: [PATCH 101/527] Implement icon requesting There are some issues within it as of now, but it mostly works. Will track filtering inconsistencies in a different issue. --- app/src/main/AndroidManifest.xml | 14 ++ .../lawnicons/model/IconRequestModel.kt | 13 ++ .../lawnicons/repository/IconRepository.kt | 41 +++++- .../ui/components/home/IconRequestFAB.kt | 58 +++++++++ .../lawnicons/ui/destination/About.kt | 2 +- .../lawnicons/ui/destination/Home.kt | 121 +++++++++--------- .../lawnicons/util/GetSystemPackageList.kt | 52 ++++++++ .../lawnicons/viewmodel/LawniconsViewModel.kt | 3 + ...st_icons_icon.xml => icon_request_app.xml} | 0 app/src/main/res/values/strings.xml | 14 +- 10 files changed, 252 insertions(+), 66 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt rename app/src/main/res/drawable/{request_icons_icon.xml => icon_request_app.xml} (100%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f7757956d42..b32bcae0c12 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -129,6 +129,7 @@ + @@ -138,5 +139,18 @@ + + + + + + + + + + + + + diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt new file mode 100644 index 00000000000..d81bbe2ae4d --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt @@ -0,0 +1,13 @@ +package app.lawnchair.lawnicons.model + +import kotlinx.collections.immutable.ImmutableList + +data class IconRequest( + val name: String, + val componentName: String, +) + +data class IconRequestModel( + val list: ImmutableList, + val iconCount: Int, +) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index a63d03ac0d4..8c90cce8c96 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -3,10 +3,14 @@ package app.lawnchair.lawnicons.repository import android.app.Application import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.model.IconRequest +import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.model.SearchInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.util.getIconInfoAppfilter +import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter import javax.inject.Inject +import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -16,10 +20,14 @@ import kotlinx.coroutines.withContext class IconRepository @Inject constructor(application: Application) { + private val coroutineScope = CoroutineScope(Dispatchers.IO) + private var iconInfo: List? = null val iconInfoModel = MutableStateFlow(value = null) val searchedIconInfoModel = MutableStateFlow(value = null) - private val coroutineScope = CoroutineScope(Dispatchers.IO) + + private var systemPackageList: List? = null + var iconRequestList = MutableStateFlow(value = null) init { coroutineScope.launch { @@ -36,6 +44,10 @@ class IconRepository @Inject constructor(application: Application) { iconCount = it.size, ) } + systemPackageList = application.getSystemIconInfoAppfilter() + .associateBy { it.name }.values + .sortedBy { it.name.lowercase() } + getIconRequestList() } } @@ -79,4 +91,31 @@ class IconRepository @Inject constructor(application: Application) { fun clear() { searchedIconInfoModel.value = iconInfoModel.value } + + private suspend fun getIconRequestList() = withContext(Dispatchers.Default) { + iconRequestList.value = systemPackageList?.let { packageList -> + val lawniconsData = iconInfoModel.value?.iconInfo?.map { + IconRequest( + it.name, + it.componentName, + ) + } ?: listOf() + + val systemData = packageList.map { + IconRequest( + it.name, + it.componentName, + ) + } + + val iconsRequested = lawniconsData intersect systemData.toSet() + + IconRequestModel( + list = iconsRequested.toImmutableList(), + iconCount = iconsRequested.size, + ) + } + } } + + diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt new file mode 100644 index 00000000000..a28919be98a --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -0,0 +1,58 @@ +package app.lawnchair.lawnicons.ui.components.home + +import android.content.Intent +import android.net.Uri +import android.util.Log +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconRequest +import app.lawnchair.lawnicons.model.IconRequestModel + +@Composable +fun IconRequestFAB( + iconRequestModel: IconRequestModel?, + modifier: Modifier = Modifier, +) { + Log.d("IconRequestFAB", "iconRequestModel: $iconRequestModel") + if (iconRequestModel != null) { + IconRequestFAB( + iconRequestList = iconRequestModel.list, + iconRequestCount = iconRequestModel.iconCount, + modifier = modifier, + ) + } +} + +@Composable +fun IconRequestFAB( + iconRequestList: List, + iconRequestCount: Int, + modifier: Modifier = Modifier, +) { + val context = LocalContext.current + val request = buildForm(iconRequestList.joinToString("%0A") { "${it.name}%0A${it.componentName}" }) + + ExtendedFloatingActionButton( + text = { + Text(stringResource(R.string.unthemed_icons_info, iconRequestCount)) + }, + icon = { Icon(painter = painterResource(id = R.drawable.icon_request_app), contentDescription = null) }, + onClick = { + val website = Uri.parse(request) + val intent = Intent(Intent.ACTION_VIEW, website) + context.startActivity(intent) + }, + modifier = modifier, + ) +} + +private fun buildForm(string: String): String { + return "https://docs.google.com/forms/d/e/1FAIpQLSe8ItNYse9f4z2aT1QgXkKeueVTucRdUYNhUpys5ShHPyRijg/viewform?entry.1759726669=$string" +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 6df25f080d2..090b69a8155 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -46,7 +46,7 @@ private val externalLinks = listOf( url = "https://github.com/LawnchairLauncher/lawnicons", ), ExternalLink( - iconResId = R.drawable.request_icons_icon, + iconResId = R.drawable.icon_request_app, name = R.string.request_form, url = "https://forms.gle/xt7sJhgWEasuo9TR9", ), diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index c4763584452..8717c095c41 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -18,6 +18,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid +import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar import app.lawnchair.lawnicons.ui.components.home.search.PlaceholderSearchBar import app.lawnchair.lawnicons.ui.components.home.search.SearchContents @@ -36,68 +37,74 @@ fun Home( isIconPicker: Boolean = false, lawniconsViewModel: LawniconsViewModel = hiltViewModel(), ) { - val iconInfoModel by lawniconsViewModel.iconInfoModel.collectAsStateWithLifecycle() - val searchedIconInfoModel by lawniconsViewModel.searchedIconInfoModel.collectAsStateWithLifecycle() - val searchMode = lawniconsViewModel.searchMode - val searchTerm = lawniconsViewModel.searchTerm + with(lawniconsViewModel) { + val iconInfoModel by iconInfoModel.collectAsStateWithLifecycle() + val searchedIconInfoModel by searchedIconInfoModel.collectAsStateWithLifecycle() + val iconRequestModel by iconRequestList.collectAsStateWithLifecycle() + val searchMode = searchMode + val searchTerm = searchTerm - Crossfade( - modifier = modifier, - targetState = iconInfoModel != null, - label = "", - ) { visible -> - if (visible) { - Scaffold( - topBar = { - searchedIconInfoModel?.let { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - LawniconsSearchBar( - query = searchTerm, - isQueryEmpty = searchTerm == "", - onClearAndBackClick = { - lawniconsViewModel.clearSearch() - }, - onQueryChange = { newValue -> - lawniconsViewModel.searchIcons(newValue) - }, - iconInfoModel = it, - onNavigate = onNavigate, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - content = { - SearchContents( - searchTerm = searchTerm, - searchMode = searchMode, - onModeChange = { mode -> - lawniconsViewModel.changeMode(mode) - }, - iconInfo = it.iconInfo, - onSendResult = onSendResult, - ) - }, - ) + Crossfade( + modifier = modifier, + targetState = iconInfoModel != null, + label = "", + ) { visible -> + if (visible) { + Scaffold( + topBar = { + searchedIconInfoModel?.let { + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + LawniconsSearchBar( + query = searchTerm, + isQueryEmpty = searchTerm == "", + onClearAndBackClick = { + lawniconsViewModel.clearSearch() + }, + onQueryChange = { newValue -> + lawniconsViewModel.searchIcons(newValue) + }, + iconInfoModel = it, + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + content = { + SearchContents( + searchTerm = searchTerm, + searchMode = searchMode, + onModeChange = { mode -> + lawniconsViewModel.changeMode(mode) + }, + iconInfo = it.iconInfo, + onSendResult = onSendResult, + ) + }, + ) + } } + }, + floatingActionButton = { + IconRequestFAB(iconRequestModel) + }, + ) { contentPadding -> + iconInfoModel?.let { + val padding = contentPadding // Ignore padding value + IconPreviewGrid( + iconInfo = it.iconInfo, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) } - }, - ) { contentPadding -> - iconInfoModel?.let { - val padding = contentPadding // Ignore padding value - IconPreviewGrid( - iconInfo = it.iconInfo, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) } + } else { + PlaceholderSearchBar( + isExpandedScreen = isExpandedScreen, + ) } - } else { - PlaceholderSearchBar( - isExpandedScreen = isExpandedScreen, - ) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt new file mode 100644 index 00000000000..7d4b1ea7ae8 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -0,0 +1,52 @@ +package app.lawnchair.lawnicons.util + +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.content.pm.ResolveInfo +import app.lawnchair.lawnicons.model.IconInfoAppfilter + +fun Context.getPackagesList(): List { + val packagesList = try { + packageManager.queryIntentActivities( + Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), + PackageManager.GET_RESOLVED_FILTER, + ) + packageManager.queryIntentActivities( + Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_DEFAULT), + PackageManager.GET_RESOLVED_FILTER, + ) + packageManager.queryIntentActivities( + Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), + PackageManager.GET_RESOLVED_FILTER, + ) + } catch (e: Exception) { + listOf() + } + return packagesList +} + +fun Context.getSystemIconInfoAppfilter(): List { + val resolveInfo = getPackagesList() + val list: MutableList = mutableListOf() + + for (ri in resolveInfo) { + val riPkg = ri.activityInfo.packageName + val component = riPkg + "/" + ri.activityInfo.name + + val name: CharSequence? = try { + ri.loadLabel(packageManager) + } catch (e: Exception) { + riPkg + } + + val iconInfo = IconInfoAppfilter( + name = name.toString(), + componentName = component, + id = 0, + drawableName = "", + ) + + list.add(iconInfo) + } + + return list +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 44e86d479e8..96ec07dee15 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -20,6 +20,9 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep @JvmField val searchedIconInfoModel = iconRepository.searchedIconInfoModel + @JvmField + val iconRequestList = iconRepository.iconRequestList + private var _searchMode by mutableStateOf(SearchMode.NAME) private var _searchTerm by mutableStateOf("") diff --git a/app/src/main/res/drawable/request_icons_icon.xml b/app/src/main/res/drawable/icon_request_app.xml similarity index 100% rename from app/src/main/res/drawable/request_icons_icon.xml rename to app/src/main/res/drawable/icon_request_app.xml diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fe13a184c9b..415516dc4e3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,8 @@ Lawnicons Version %s + + Request %1$s unthemed icons @@ -17,12 +19,8 @@ %s not found - - - Acknowledgements - - + About @@ -49,6 +47,9 @@ For naming the app + + Acknowledgements + @@ -57,7 +58,6 @@ Drawable Component name - - About + If the icon is outdated due to rebranding, create an issue on GitHub. From 3be9a74b0613cd3fa2e8081646c52f276837e7ba Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 24 May 2024 20:38:42 +0800 Subject: [PATCH 102/527] Fix style --- .../kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 8c90cce8c96..744364d3fc0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -117,5 +117,3 @@ class IconRepository @Inject constructor(application: Application) { } } } - - From 5a8fa53cb6aa6af623192b63342ed00db0fc698e Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sat, 25 May 2024 18:58:19 +1000 Subject: [PATCH 103/527] + 2 links (#2113) --- app/assets/appfilter.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1e3bd7112e8..0d778b63021 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -8047,6 +8047,8 @@ + + From d462822c63372a4a2775ffef4275a47d4dc5cbac Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 25 May 2024 12:23:14 +0300 Subject: [PATCH 104/527] Update gramophone.svg (#2115) --- svgs/gramophone.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svgs/gramophone.svg b/svgs/gramophone.svg index 78b66b2b9da..1c77a962732 100644 --- a/svgs/gramophone.svg +++ b/svgs/gramophone.svg @@ -1 +1 @@ - \ No newline at end of file + From 7ccc8696fc7d62532e1de9467743e8adab089182 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 25 May 2024 17:31:06 +0300 Subject: [PATCH 105/527] Update ente_auth.svg (#2118) --- svgs/ente_auth.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svgs/ente_auth.svg b/svgs/ente_auth.svg index 540a660fcb8..24e62f04c44 100644 --- a/svgs/ente_auth.svg +++ b/svgs/ente_auth.svg @@ -1 +1 @@ - \ No newline at end of file + From d0afc3ba53ba8bd341c5f558cf1b6a1fc976194b Mon Sep 17 00:00:00 2001 From: Flame <40175769+flame-0@users.noreply.github.com> Date: Mon, 27 May 2024 18:42:11 +0800 Subject: [PATCH 106/527] Link Bunny (#2120) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 0d778b63021..5c6f267cc30 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -3549,6 +3549,7 @@ + From 60239b0ea0844ad229153bd34212a4e45756acf4 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Mon, 27 May 2024 22:26:23 +1000 Subject: [PATCH 107/527] + 10 links, + 4 icons (#2110) * + 8 links, + 2 icons * + 1 update * Small fix * Small fix * Small fix * Revert "+ 1 update" This reverts commit a923c88f6c469b92dba2c680d355bd1279ca4d5e. * + 2 icons, + 1 link * Remove unnecessary sorts * Small fix * Small fix * + 1 link * Re-run checks --- app/assets/appfilter.xml | 15 +++++++++++++++ svgs/batt.svg | 20 ++++++++++++++++++++ svgs/material_notes.svg | 20 ++++++++++++++++++++ svgs/material_photo_widget.svg | 31 +++++++++++++++++++++++++++++++ svgs/mybupa.svg | 22 ++++++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 svgs/batt.svg create mode 100644 svgs/material_notes.svg create mode 100644 svgs/material_photo_widget.svg create mode 100644 svgs/mybupa.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5c6f267cc30..cb2c13891f5 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -828,6 +828,7 @@ + @@ -2787,6 +2788,7 @@ + @@ -4711,6 +4713,7 @@ + @@ -5102,6 +5105,8 @@ + + @@ -5783,6 +5788,7 @@ + @@ -5824,6 +5830,14 @@ + + + + + + + + @@ -5866,6 +5880,7 @@ + diff --git a/svgs/batt.svg b/svgs/batt.svg new file mode 100644 index 00000000000..a56931448df --- /dev/null +++ b/svgs/batt.svg @@ -0,0 +1,20 @@ + + + + diff --git a/svgs/material_notes.svg b/svgs/material_notes.svg new file mode 100644 index 00000000000..6337dd1ea3b --- /dev/null +++ b/svgs/material_notes.svg @@ -0,0 +1,20 @@ + + diff --git a/svgs/material_photo_widget.svg b/svgs/material_photo_widget.svg new file mode 100644 index 00000000000..a75a8554848 --- /dev/null +++ b/svgs/material_photo_widget.svg @@ -0,0 +1,31 @@ + + diff --git a/svgs/mybupa.svg b/svgs/mybupa.svg new file mode 100644 index 00000000000..a5471b6fa1f --- /dev/null +++ b/svgs/mybupa.svg @@ -0,0 +1,22 @@ + + + + + From 632e640c36a80f9ae8686c7da5b19fa34849a7f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 09:44:07 +0800 Subject: [PATCH 108/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.2 (#2121) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7380faede27..f5873419121 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.1", + "io.nlopez.compose.rules:ktlint:0.4.2", ), ).editorConfigOverride( mapOf( From 093e2ae3c33195bb9b75ebd0ef6a7c0717f8f062 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 11:11:23 +0800 Subject: [PATCH 109/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.3 (#2122) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f5873419121..e1118ea3db3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.2", + "io.nlopez.compose.rules:ktlint:0.4.3", ), ).editorConfigOverride( mapOf( From f0d3bf71c9f3f6503d28d3808265ebc23c694b00 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 09:26:03 +0800 Subject: [PATCH 110/527] Update dependency androidx.appcompat:appcompat to v1.7.0 (#2126) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4c6f7ad76b9..28abe428db9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -135,7 +135,7 @@ dependencies { val lifecycleVersion = "2.8.0" val hiltVersion = "2.51.1" - implementation("androidx.appcompat:appcompat:1.6.1") + implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.activity:activity-compose:1.9.0") implementation(platform("androidx.compose:compose-bom:2024.05.00")) From 52d129a976c51c57c0c9170369e7bc81fc6602b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 09:26:12 +0800 Subject: [PATCH 111/527] Update lifecycleVersion to v2.8.1 (#2125) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 28abe428db9..e06f6f746a0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -132,7 +132,7 @@ licensee { } dependencies { - val lifecycleVersion = "2.8.0" + val lifecycleVersion = "2.8.1" val hiltVersion = "2.51.1" implementation("androidx.appcompat:appcompat:1.7.0") From ade49b237cb6f36652bbdd6e70d85de1be7904ce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 09:26:20 +0800 Subject: [PATCH 112/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta02 (#2124) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e06f6f746a0..ade6649b2da 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,7 +147,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.7") implementation("androidx.compose.material3:material3:1.3.0-beta01") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta01") + implementation("androidx.navigation:navigation-compose:2.8.0-beta02") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") From cbe768a0bb4f25c3a55b4a324dae3436d2e66601 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 09:26:28 +0800 Subject: [PATCH 113/527] Update dependency androidx.compose.material3:material3 to v1.3.0-beta02 (#2123) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ade6649b2da..822c33efb5e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,7 +145,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.7") - implementation("androidx.compose.material3:material3:1.3.0-beta01") + implementation("androidx.compose.material3:material3:1.3.0-beta02") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta02") implementation("androidx.core:core-splashscreen:1.0.1") From ef340b337be42afc597cccd92eacfc4b960cf4bc Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 30 May 2024 23:09:00 +0300 Subject: [PATCH 114/527] +3 links (#2127) * +3 links * Minor fix * Update photoshop_express.svg --- app/assets/appfilter.xml | 11 +- svgs/aurora_store.svg | 2 +- svgs/banglalink.svg | 2 +- svgs/bank_jago.svg | 2 +- svgs/bom_weather.svg | 2 +- svgs/camera_assistant.svg | 2 +- svgs/clicflyer.svg | 2214 +---------------------------------- svgs/cod.svg | 2 +- svgs/contacts.svg | 2 +- svgs/dbna.svg | 2 +- svgs/droidify.svg | 2 +- svgs/eazydiner.svg | 2 +- svgs/flamingo.svg | 2 +- svgs/funimation.svg | 2 +- svgs/jarir.svg | 39 +- svgs/keyboard.svg | 2 +- svgs/komoot.svg | 2 +- svgs/letterboxd.svg | 2 +- svgs/microsoft_onedrive.svg | 2 +- svgs/photoshop_express.svg | 2 +- svgs/wallet.svg | 2 +- 21 files changed, 27 insertions(+), 2273 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index cb2c13891f5..5402832fe3f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -413,7 +413,6 @@ - @@ -1229,6 +1228,7 @@ + @@ -3548,10 +3548,10 @@ + - @@ -3854,6 +3854,7 @@ + @@ -6285,6 +6286,7 @@ + @@ -7870,7 +7872,6 @@ - @@ -7882,7 +7883,6 @@ - @@ -11342,10 +11342,12 @@ + + @@ -11362,6 +11364,7 @@ + diff --git a/svgs/aurora_store.svg b/svgs/aurora_store.svg index 8db4946f80d..0897483fe85 100644 --- a/svgs/aurora_store.svg +++ b/svgs/aurora_store.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/banglalink.svg b/svgs/banglalink.svg index bdca168d236..bfac16401b4 100644 --- a/svgs/banglalink.svg +++ b/svgs/banglalink.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/bank_jago.svg b/svgs/bank_jago.svg index 91df7c73cad..d1bbec5ab6c 100644 --- a/svgs/bank_jago.svg +++ b/svgs/bank_jago.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/bom_weather.svg b/svgs/bom_weather.svg index cfd42ef9d52..23b22ff00b0 100644 --- a/svgs/bom_weather.svg +++ b/svgs/bom_weather.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/camera_assistant.svg b/svgs/camera_assistant.svg index c83930531a5..203bd539cd9 100644 --- a/svgs/camera_assistant.svg +++ b/svgs/camera_assistant.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/clicflyer.svg b/svgs/clicflyer.svg index d247cda0a23..657b880e0e4 100644 --- a/svgs/clicflyer.svg +++ b/svgs/clicflyer.svg @@ -1,2213 +1 @@ - - - - + \ No newline at end of file diff --git a/svgs/cod.svg b/svgs/cod.svg index b4e3b1312e2..9501d305482 100644 --- a/svgs/cod.svg +++ b/svgs/cod.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/contacts.svg b/svgs/contacts.svg index ff9f4b88124..d5bec3c44b4 100644 --- a/svgs/contacts.svg +++ b/svgs/contacts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/dbna.svg b/svgs/dbna.svg index 26ea785aa0b..662edaa1832 100644 --- a/svgs/dbna.svg +++ b/svgs/dbna.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/droidify.svg b/svgs/droidify.svg index 31f7fbd2b68..bcee932710c 100644 --- a/svgs/droidify.svg +++ b/svgs/droidify.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/eazydiner.svg b/svgs/eazydiner.svg index f8e5747d249..f0354d9648d 100644 --- a/svgs/eazydiner.svg +++ b/svgs/eazydiner.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/flamingo.svg b/svgs/flamingo.svg index fa2ec16e316..fe26ee55d98 100644 --- a/svgs/flamingo.svg +++ b/svgs/flamingo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/funimation.svg b/svgs/funimation.svg index 1c8b7e68534..d5927b71ca4 100644 --- a/svgs/funimation.svg +++ b/svgs/funimation.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/jarir.svg b/svgs/jarir.svg index 54e6f41e906..2e4fcb39529 100644 --- a/svgs/jarir.svg +++ b/svgs/jarir.svg @@ -1,38 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/svgs/keyboard.svg b/svgs/keyboard.svg index 68852929ce2..fc3e6ec8a04 100644 --- a/svgs/keyboard.svg +++ b/svgs/keyboard.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/komoot.svg b/svgs/komoot.svg index 1cf55ceb96e..58555d1b696 100644 --- a/svgs/komoot.svg +++ b/svgs/komoot.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/letterboxd.svg b/svgs/letterboxd.svg index 133403f89d1..75c01917fa0 100644 --- a/svgs/letterboxd.svg +++ b/svgs/letterboxd.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/microsoft_onedrive.svg b/svgs/microsoft_onedrive.svg index 605faf3b525..193ea36154d 100644 --- a/svgs/microsoft_onedrive.svg +++ b/svgs/microsoft_onedrive.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/photoshop_express.svg b/svgs/photoshop_express.svg index 1f807611067..f3d395ad5db 100644 --- a/svgs/photoshop_express.svg +++ b/svgs/photoshop_express.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/svgs/wallet.svg b/svgs/wallet.svg index ba33e3d7c16..c09e6e2fa05 100644 --- a/svgs/wallet.svg +++ b/svgs/wallet.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From ba703de9d4929684435f04337bf493b1a290ad88 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 1 Jun 2024 08:30:16 +0800 Subject: [PATCH 115/527] Update dependency gradle to v8.8 (#2130) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 381baa9cef1..8a1f6b97f47 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a42690..b740cf13397 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. From 5f72ea20cc2eaaac9cee82ecb318dd4b8616e7eb Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 2 Jun 2024 15:46:21 +0300 Subject: [PATCH 116/527] +3 links (#2132) * +3 links * Update konele.svg --- app/assets/appfilter.xml | 5 ++++- svgs/_8_ball_pool.svg | 2 +- svgs/application_inspector.svg | 2 +- svgs/appsales.svg | 2 +- svgs/aurora_droid.svg | 2 +- svgs/aurora_store_nightly.svg | 2 +- svgs/corridor.svg | 2 +- svgs/gcash.svg | 2 +- svgs/google_contacts.svg | 2 +- svgs/google_news.svg | 2 +- svgs/konele.svg | 2 +- svgs/moovit.svg | 2 +- svgs/mozilla_vpn.svg | 2 +- svgs/myim3.svg | 2 +- svgs/octoapp.svg | 2 +- svgs/parabox.svg | 2 +- svgs/playsuisse.svg | 2 +- svgs/{pia.svg => private_internet_access_vpn.svg} | 0 svgs/proddy.svg | 2 +- svgs/recorder.svg | 2 +- svgs/screen_recorder.svg | 2 +- svgs/spark_mail.svg | 2 +- 22 files changed, 24 insertions(+), 21 deletions(-) rename svgs/{pia.svg => private_internet_access_vpn.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5402832fe3f..24b67e72e44 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2694,6 +2694,7 @@ + @@ -7362,7 +7363,8 @@ - + + @@ -8940,6 +8942,7 @@ + diff --git a/svgs/_8_ball_pool.svg b/svgs/_8_ball_pool.svg index ef345d1a1fc..5430b653c5b 100644 --- a/svgs/_8_ball_pool.svg +++ b/svgs/_8_ball_pool.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/application_inspector.svg b/svgs/application_inspector.svg index 1163e811dc2..2583a3e855a 100644 --- a/svgs/application_inspector.svg +++ b/svgs/application_inspector.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/appsales.svg b/svgs/appsales.svg index a9503437380..6f63ff23f6f 100644 --- a/svgs/appsales.svg +++ b/svgs/appsales.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/aurora_droid.svg b/svgs/aurora_droid.svg index d4f65dd238c..74da5078103 100644 --- a/svgs/aurora_droid.svg +++ b/svgs/aurora_droid.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/aurora_store_nightly.svg b/svgs/aurora_store_nightly.svg index 0935f3fd0f2..d18a261effe 100644 --- a/svgs/aurora_store_nightly.svg +++ b/svgs/aurora_store_nightly.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/corridor.svg b/svgs/corridor.svg index 42790952760..7402f17fbc0 100644 --- a/svgs/corridor.svg +++ b/svgs/corridor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/gcash.svg b/svgs/gcash.svg index 37c0135f8ca..fc78a82014d 100644 --- a/svgs/gcash.svg +++ b/svgs/gcash.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/google_contacts.svg b/svgs/google_contacts.svg index 34b48a82fc0..b370f0b859a 100644 --- a/svgs/google_contacts.svg +++ b/svgs/google_contacts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/google_news.svg b/svgs/google_news.svg index 63bb5fd491e..0f9cc4efc77 100644 --- a/svgs/google_news.svg +++ b/svgs/google_news.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/konele.svg b/svgs/konele.svg index 748a8350b0a..ab30a02ee7c 100644 --- a/svgs/konele.svg +++ b/svgs/konele.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/moovit.svg b/svgs/moovit.svg index 114bd4e8597..1cb2cf939dd 100644 --- a/svgs/moovit.svg +++ b/svgs/moovit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/mozilla_vpn.svg b/svgs/mozilla_vpn.svg index 7879683473f..3b881b0e1d5 100644 --- a/svgs/mozilla_vpn.svg +++ b/svgs/mozilla_vpn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/myim3.svg b/svgs/myim3.svg index c9c6faca517..e8d4154dd77 100644 --- a/svgs/myim3.svg +++ b/svgs/myim3.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/octoapp.svg b/svgs/octoapp.svg index f81a612685e..c48a6e4a0b6 100644 --- a/svgs/octoapp.svg +++ b/svgs/octoapp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/parabox.svg b/svgs/parabox.svg index d1fe95914d2..3f6ce29eadf 100644 --- a/svgs/parabox.svg +++ b/svgs/parabox.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/playsuisse.svg b/svgs/playsuisse.svg index c3a2b95da91..3ba759c69ff 100644 --- a/svgs/playsuisse.svg +++ b/svgs/playsuisse.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pia.svg b/svgs/private_internet_access_vpn.svg similarity index 100% rename from svgs/pia.svg rename to svgs/private_internet_access_vpn.svg diff --git a/svgs/proddy.svg b/svgs/proddy.svg index 78ce6f322d9..73e215b190d 100644 --- a/svgs/proddy.svg +++ b/svgs/proddy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/recorder.svg b/svgs/recorder.svg index 2ae668293ad..ca6b86e9653 100644 --- a/svgs/recorder.svg +++ b/svgs/recorder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/screen_recorder.svg b/svgs/screen_recorder.svg index 340819e65f0..78dc3f0e724 100644 --- a/svgs/screen_recorder.svg +++ b/svgs/screen_recorder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/spark_mail.svg b/svgs/spark_mail.svg index bfec2efb9e8..0dc8520a395 100644 --- a/svgs/spark_mail.svg +++ b/svgs/spark_mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 831cc4408035adc3e119b1968c36ce493e35f62a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 31 May 2024 18:26:41 +0800 Subject: [PATCH 117/527] Add scrollbar --- app/build.gradle.kts | 3 + .../ui/components/home/IconPreviewGrid.kt | 60 ++++++++++++------- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 822c33efb5e..0bdc57f23e3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -129,6 +129,7 @@ tasks.withType().configureEach { licensee { allow("Apache-2.0") + allow("MIT") } dependencies { @@ -161,4 +162,6 @@ dependencies { implementation("com.squareup.retrofit2:converter-kotlinx-serialization:$retrofitVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") + + implementation("com.github.nanihadesuka:LazyColumnScrollbar:2.1.0") } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 7ababd80ea6..26037194013 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -13,6 +13,8 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -23,6 +25,9 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues import kotlinx.collections.immutable.ImmutableList +import my.nanihadesuka.compose.LazyVerticalGridScrollbar +import my.nanihadesuka.compose.ScrollbarSelectionMode +import my.nanihadesuka.compose.ScrollbarSettings @Composable @ExperimentalFoundationApi @@ -34,40 +39,51 @@ fun IconPreviewGrid( isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, ) { + val listState = rememberLazyGridState() Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, modifier = modifier.fillMaxWidth(), ) { - LazyVerticalGrid( + LazyVerticalGridScrollbar( modifier = Modifier .then( if (isExpandedScreen) Modifier.width(640.dp) else Modifier, ) .statusBarsPadding() .padding(top = 26.dp), - columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = contentPadding ?: if (!isExpandedScreen) { - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 8.dp, - additionalTop = 42.dp, - additionalEnd = 8.dp, - ) - } else { - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 32.dp, - additionalTop = 42.dp, - additionalEnd = 32.dp, - ) - }, - + state = listState, + settings = ScrollbarSettings( + alwaysShowScrollbar = true, + thumbUnselectedColor = MaterialTheme.colorScheme.primaryContainer, + thumbSelectedColor = MaterialTheme.colorScheme.primary, + selectionMode = ScrollbarSelectionMode.Thumb, + ) ) { - items(items = iconInfo) { iconInfo -> - IconPreview( - iconInfo = iconInfo, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) + LazyVerticalGrid( + columns = GridCells.Adaptive(minSize = 80.dp), + contentPadding = contentPadding ?: if (!isExpandedScreen) { + WindowInsets.navigationBars.toPaddingValues( + additionalStart = 8.dp, + additionalTop = 42.dp, + additionalEnd = 8.dp, + ) + } else { + WindowInsets.navigationBars.toPaddingValues( + additionalStart = 32.dp, + additionalTop = 42.dp, + additionalEnd = 32.dp, + ) + }, + + ) { + items(items = iconInfo) { iconInfo -> + IconPreview( + iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + } } } } From bda2c5aca1cb91f123b32e7362fdd3aae429b808 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 3 Jun 2024 17:13:15 +0800 Subject: [PATCH 118/527] Fix icon requesting --- .../lawnicons/repository/IconRepository.kt | 25 +++++++---- .../ui/components/home/IconRequestFAB.kt | 12 ++--- .../lawnchair/lawnicons/util/GetIconInfo.kt | 4 +- .../lawnicons/util/GetSystemPackageList.kt | 44 ++++++------------- 4 files changed, 39 insertions(+), 46 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 744364d3fc0..b2209653ef9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -1,6 +1,7 @@ package app.lawnchair.lawnicons.repository import android.app.Application +import android.util.Log import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequest @@ -26,12 +27,17 @@ class IconRepository @Inject constructor(application: Application) { val iconInfoModel = MutableStateFlow(value = null) val searchedIconInfoModel = MutableStateFlow(value = null) + private var lawniconsData: List? = null + private var systemPackageList: List? = null var iconRequestList = MutableStateFlow(value = null) init { coroutineScope.launch { iconInfo = application.getIconInfoAppfilter() + .also { list -> + lawniconsData = list.sortedBy { it.name.lowercase() } + } .associateBy { it.name }.values .sortedBy { it.name.lowercase() } .also { @@ -44,6 +50,7 @@ class IconRepository @Inject constructor(application: Application) { iconCount = it.size, ) } + systemPackageList = application.getSystemIconInfoAppfilter() .associateBy { it.name }.values .sortedBy { it.name.lowercase() } @@ -94,12 +101,7 @@ class IconRepository @Inject constructor(application: Application) { private suspend fun getIconRequestList() = withContext(Dispatchers.Default) { iconRequestList.value = systemPackageList?.let { packageList -> - val lawniconsData = iconInfoModel.value?.iconInfo?.map { - IconRequest( - it.name, - it.componentName, - ) - } ?: listOf() + val lawniconsData = lawniconsData ?: emptyList() val systemData = packageList.map { IconRequest( @@ -108,11 +110,16 @@ class IconRepository @Inject constructor(application: Application) { ) } - val iconsRequested = lawniconsData intersect systemData.toSet() + val lawniconsComponents = lawniconsData + .map { it.componentName } + .sortedBy { it.lowercase() } + .toSet() + + val commonItems = systemData.filter { it.componentName !in lawniconsComponents } IconRequestModel( - list = iconsRequested.toImmutableList(), - iconCount = iconsRequested.size, + list = commonItems.toImmutableList(), + iconCount = commonItems.size, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index a28919be98a..d4341443a79 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -22,11 +22,13 @@ fun IconRequestFAB( ) { Log.d("IconRequestFAB", "iconRequestModel: $iconRequestModel") if (iconRequestModel != null) { - IconRequestFAB( - iconRequestList = iconRequestModel.list, - iconRequestCount = iconRequestModel.iconCount, - modifier = modifier, - ) + if (iconRequestModel.iconCount > 0) { + IconRequestFAB( + iconRequestList = iconRequestModel.list, + iconRequestCount = iconRequestModel.iconCount, + modifier = modifier, + ) + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index ddeaee8f2bd..3b6e87e60ca 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -75,9 +75,9 @@ fun Context.getIconInfoAppfilter(): List { val component = parser.getAttributeValue(null, "component") val iconName = parser.getAttributeValue(null, "name") + val initialIconId = parser.getAttributeValue(null, "drawable") val iconId = "${initialIconId}_foreground" - val iconDrawable = resources.getIdentifier(iconId, "drawable", packageName) var actualComponent = "" @@ -85,7 +85,7 @@ fun Context.getIconInfoAppfilter(): List { val parsedComponent = component.substring(componentInfoPrefixLength, component.length - 1) - if (parsedComponent != "" && !parsedComponent.startsWith("/") && + if (parsedComponent.isNotEmpty() && !parsedComponent.startsWith("/") && !parsedComponent.endsWith("/") ) { actualComponent = parsedComponent diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt index 7d4b1ea7ae8..53040f71e65 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -7,46 +7,30 @@ import android.content.pm.ResolveInfo import app.lawnchair.lawnicons.model.IconInfoAppfilter fun Context.getPackagesList(): List { - val packagesList = try { + return try { packageManager.queryIntentActivities( Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), PackageManager.GET_RESOLVED_FILTER, - ) + packageManager.queryIntentActivities( - Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_DEFAULT), - PackageManager.GET_RESOLVED_FILTER, - ) + packageManager.queryIntentActivities( - Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), - PackageManager.GET_RESOLVED_FILTER, ) } catch (e: Exception) { listOf() } - return packagesList } fun Context.getSystemIconInfoAppfilter(): List { - val resolveInfo = getPackagesList() - val list: MutableList = mutableListOf() - - for (ri in resolveInfo) { - val riPkg = ri.activityInfo.packageName - val component = riPkg + "/" + ri.activityInfo.name - - val name: CharSequence? = try { - ri.loadLabel(packageManager) - } catch (e: Exception) { - riPkg + return getPackagesList().map { ri -> + with(ri) { + val riPkg = activityInfo.packageName + val component = "$riPkg/${activityInfo.name}" + + val name = loadLabel(packageManager) ?: riPkg + + IconInfoAppfilter( + name = name.toString(), + componentName = component, + id = 0, + drawableName = "", + ) } - - val iconInfo = IconInfoAppfilter( - name = name.toString(), - componentName = component, - id = 0, - drawableName = "", - ) - - list.add(iconInfo) } - - return list } From 55e6b1f9f95894ac43de0f5d1f85d6f9b222c909 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 3 Jun 2024 17:13:29 +0800 Subject: [PATCH 119/527] Don't filter calendars --- .../main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index 3b6e87e60ca..4dc739b8638 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -67,12 +67,6 @@ fun Context.getIconInfoAppfilter(): List { ) { if (type != XmlPullParser.START_TAG) continue if ("item" == parser.name) { - if ( - parser.getAttributeBooleanValue(null, "drawableIgnore", false) - ) { - continue - } - val component = parser.getAttributeValue(null, "component") val iconName = parser.getAttributeValue(null, "name") From f002fab078216afdaee90944c7d86a8e6fbfb611 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 3 Jun 2024 18:22:23 +0800 Subject: [PATCH 120/527] Cleanup code --- .../app/lawnchair/lawnicons/repository/IconRepository.kt | 1 - .../lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index b2209653ef9..28b633d4f8a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -1,7 +1,6 @@ package app.lawnchair.lawnicons.repository import android.app.Application -import android.util.Log import app.lawnchair.lawnicons.model.IconInfoAppfilter import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequest diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 26037194013..7ecc4e5e03d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -58,7 +58,7 @@ fun IconPreviewGrid( thumbUnselectedColor = MaterialTheme.colorScheme.primaryContainer, thumbSelectedColor = MaterialTheme.colorScheme.primary, selectionMode = ScrollbarSelectionMode.Thumb, - ) + ), ) { LazyVerticalGrid( columns = GridCells.Adaptive(minSize = 80.dp), @@ -76,7 +76,7 @@ fun IconPreviewGrid( ) }, - ) { + ) { items(items = iconInfo) { iconInfo -> IconPreview( iconInfo = iconInfo, From f9a133c3460a35eff61b51d6f6bcba791c926d2c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:48:03 +0300 Subject: [PATCH 121/527] +8 links (#2134) * +8 links * Update appfilter.xml --- app/assets/appfilter.xml | 20 +++++++++++++------ svgs/{office_suite.svg => officesuite.svg} | 0 ...yzer.svg => wifi_analyzer_open_source.svg} | 0 3 files changed, 14 insertions(+), 6 deletions(-) rename svgs/{office_suite.svg => officesuite.svg} (100%) rename svgs/{wifi_analyzer.svg => wifi_analyzer_open_source.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 24b67e72e44..d50a89c09e4 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1043,7 +1043,8 @@ - + + @@ -1223,6 +1224,7 @@ + @@ -1969,6 +1971,7 @@ + @@ -2868,7 +2871,6 @@ - @@ -5569,6 +5571,7 @@ + @@ -6367,7 +6370,8 @@ - + + @@ -7065,6 +7069,7 @@ + @@ -7739,6 +7744,7 @@ + @@ -9777,6 +9783,7 @@ + @@ -10787,12 +10794,12 @@ - + - - + + @@ -11471,6 +11478,7 @@ + diff --git a/svgs/office_suite.svg b/svgs/officesuite.svg similarity index 100% rename from svgs/office_suite.svg rename to svgs/officesuite.svg diff --git a/svgs/wifi_analyzer.svg b/svgs/wifi_analyzer_open_source.svg similarity index 100% rename from svgs/wifi_analyzer.svg rename to svgs/wifi_analyzer_open_source.svg From b666ee7d035b537ce337e28d49c3813ee660f1e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 18:07:43 +0800 Subject: [PATCH 122/527] Update dependency io.github.fornewid:material-motion-compose-core to v1.2.1 (#2131) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0bdc57f23e3..cade0b57094 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") - implementation("io.github.fornewid:material-motion-compose-core:1.2.0") + implementation("io.github.fornewid:material-motion-compose-core:1.2.1") implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") From 347961101f76f5d14d063699faa660c02a98ac7a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:51:43 +0800 Subject: [PATCH 123/527] Test `pull_request_target` to fix workflow --- .github/workflows/icon_checklist.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/icon_checklist.yml b/.github/workflows/icon_checklist.yml index af271c5e555..9cd0e93e476 100644 --- a/.github/workflows/icon_checklist.yml +++ b/.github/workflows/icon_checklist.yml @@ -1,7 +1,7 @@ name: Comment icon checklist on: - pull_request: + pull_request_target: branches: [develop] types: [opened] paths: @@ -30,4 +30,4 @@ jobs: ...issue, body: ICON_CHECKLIST }); - \ No newline at end of file + From 545f0efa65e84cc2c226d4ed2e915a65e3d748ec Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:27:24 +0300 Subject: [PATCH 124/527] [Barter 1] +100 icons: AnLinux, MediaFire, TubeMate (#2138) * [Barter 1] +100 icons: AnLinux, MediaFire, TubeMate * Minor fix --- app/assets/appfilter.xml | 100 +++++++++++++++++++++++ svgs/_2_player_games_the_challenge.svg | 1 + svgs/alerta_sismica_mexico.svg | 1 + svgs/ambito_dollar.svg | 1 + svgs/anlinux.svg | 1 + svgs/apatch.svg | 1 + svgs/bad_game.svg | 1 + svgs/bahnbonus.svg | 1 + svgs/bc_vaccine_card_verifier.svg | 1 + svgs/best_knots.svg | 1 + svgs/betterbatterystats.svg | 1 + svgs/bip.svg | 1 + svgs/bubble_level.svg | 1 + svgs/business_db_navigator.svg | 1 + svgs/call_a_bike.svg | 1 + svgs/campus_student.svg | 1 + svgs/car_scanner_elm_obd2.svg | 1 + svgs/carrion.svg | 1 + svgs/closer.svg | 1 + svgs/control_center_ios.svg | 1 + svgs/cookie_clicker.svg | 1 + svgs/crosswords.svg | 1 + svgs/cuenta_dni.svg | 1 + svgs/daily_diary.svg | 1 + svgs/dailypic.svg | 1 + svgs/db_ausflug.svg | 1 + svgs/db_bauarbeiten.svg | 1 + svgs/db_rad_plus.svg | 1 + svgs/detectify.svg | 1 + svgs/dobroservice.svg | 1 + svgs/droidfish.svg | 1 + svgs/fahrplaner.svg | 1 + svgs/fiio_control.svg | 1 + svgs/film_plus.svg | 1 + svgs/gsmarena.svg | 1 + svgs/husky.svg | 1 + svgs/idle_miner_tycoon_gold_and_cash.svg | 1 + svgs/imagesearchman.svg | 1 + svgs/income_tax.svg | 1 + svgs/infomaniak_mail.svg | 1 + svgs/itutor.svg | 1 + svgs/just_a_line.svg | 1 + svgs/kalium.svg | 1 + svgs/kimi.svg | 1 + svgs/kook.svg | 1 + svgs/kustom_weather_plugin.svg | 1 + svgs/malody.svg | 1 + svgs/medal_tv.svg | 1 + svgs/media_on.svg | 1 + svgs/mediafire.svg | 1 + svgs/mercurygram.svg | 1 + svgs/mi_argentina.svg | 1 + svgs/microsoft_whiteboard.svg | 1 + svgs/mlauncher.svg | 1 + svgs/mojietu.svg | 1 + svgs/monochrome_kwgt.svg | 1 + svgs/moto_widget.svg | 1 + svgs/myaakash.svg | 1 + svgs/mytherapy_pill_reminder.svg | 1 + svgs/nanji_clock_widget.svg | 1 + svgs/nfc_tasks.svg | 1 + svgs/nophonespam.svg | 1 + svgs/odrabiamy_pl.svg | 1 + svgs/old_maps_walk.svg | 1 + svgs/pixel_ims.svg | 1 + svgs/pixel_station.svg | 1 + svgs/play_now.svg | 1 + svgs/polytone.svg | 1 + svgs/ramble.svg | 1 + svgs/redface.svg | 1 + svgs/regio_guide.svg | 1 + svgs/rmvgo.svg | 1 + svgs/simon_tathams_puzzles.svg | 1 + svgs/simplewear.svg | 1 + svgs/simplewear_settings.svg | 1 + svgs/sketchbook_lite.svg | 1 + svgs/small_monkey_search.svg | 1 + svgs/standroid.svg | 1 + svgs/stickman_hook.svg | 1 + svgs/super_quick_settings_pro.svg | 1 + svgs/supershift_shift_work_calendar.svg | 1 + svgs/sys_i.svg | 1 + svgs/szkolny.svg | 1 + svgs/tabii.svg | 1 + svgs/takostats.svg | 1 + svgs/text_converter.svg | 1 + svgs/tubemate.svg | 1 + svgs/tuenti_argentina.svg | 1 + svgs/twitcast.svg | 1 + svgs/v380_pro.svg | 1 + svgs/vanilla_music.svg | 1 + svgs/vbb_bus_and_bahn.svg | 1 + svgs/video_summarizer.svg | 1 + svgs/warframe_companion.svg | 1 + svgs/warzone_meta_and_loadout.svg | 1 + svgs/wifi_analyzer.svg | 1 + svgs/wonderful.svg | 1 + svgs/worldcoin_wallet.svg | 1 + svgs/wpsapp_pro.svg | 1 + svgs/yowindow.svg | 1 + svgs/zygisk_detach.svg | 1 + 101 files changed, 200 insertions(+) create mode 100644 svgs/_2_player_games_the_challenge.svg create mode 100644 svgs/alerta_sismica_mexico.svg create mode 100644 svgs/ambito_dollar.svg create mode 100644 svgs/anlinux.svg create mode 100644 svgs/apatch.svg create mode 100644 svgs/bad_game.svg create mode 100644 svgs/bahnbonus.svg create mode 100644 svgs/bc_vaccine_card_verifier.svg create mode 100644 svgs/best_knots.svg create mode 100644 svgs/betterbatterystats.svg create mode 100644 svgs/bip.svg create mode 100644 svgs/bubble_level.svg create mode 100644 svgs/business_db_navigator.svg create mode 100644 svgs/call_a_bike.svg create mode 100644 svgs/campus_student.svg create mode 100644 svgs/car_scanner_elm_obd2.svg create mode 100644 svgs/carrion.svg create mode 100644 svgs/closer.svg create mode 100644 svgs/control_center_ios.svg create mode 100644 svgs/cookie_clicker.svg create mode 100644 svgs/crosswords.svg create mode 100644 svgs/cuenta_dni.svg create mode 100644 svgs/daily_diary.svg create mode 100644 svgs/dailypic.svg create mode 100644 svgs/db_ausflug.svg create mode 100644 svgs/db_bauarbeiten.svg create mode 100644 svgs/db_rad_plus.svg create mode 100644 svgs/detectify.svg create mode 100644 svgs/dobroservice.svg create mode 100644 svgs/droidfish.svg create mode 100644 svgs/fahrplaner.svg create mode 100644 svgs/fiio_control.svg create mode 100644 svgs/film_plus.svg create mode 100644 svgs/gsmarena.svg create mode 100644 svgs/husky.svg create mode 100644 svgs/idle_miner_tycoon_gold_and_cash.svg create mode 100644 svgs/imagesearchman.svg create mode 100644 svgs/income_tax.svg create mode 100644 svgs/infomaniak_mail.svg create mode 100644 svgs/itutor.svg create mode 100644 svgs/just_a_line.svg create mode 100644 svgs/kalium.svg create mode 100644 svgs/kimi.svg create mode 100644 svgs/kook.svg create mode 100644 svgs/kustom_weather_plugin.svg create mode 100644 svgs/malody.svg create mode 100644 svgs/medal_tv.svg create mode 100644 svgs/media_on.svg create mode 100644 svgs/mediafire.svg create mode 100644 svgs/mercurygram.svg create mode 100644 svgs/mi_argentina.svg create mode 100644 svgs/microsoft_whiteboard.svg create mode 100644 svgs/mlauncher.svg create mode 100644 svgs/mojietu.svg create mode 100644 svgs/monochrome_kwgt.svg create mode 100644 svgs/moto_widget.svg create mode 100644 svgs/myaakash.svg create mode 100644 svgs/mytherapy_pill_reminder.svg create mode 100644 svgs/nanji_clock_widget.svg create mode 100644 svgs/nfc_tasks.svg create mode 100644 svgs/nophonespam.svg create mode 100644 svgs/odrabiamy_pl.svg create mode 100644 svgs/old_maps_walk.svg create mode 100644 svgs/pixel_ims.svg create mode 100644 svgs/pixel_station.svg create mode 100644 svgs/play_now.svg create mode 100644 svgs/polytone.svg create mode 100644 svgs/ramble.svg create mode 100644 svgs/redface.svg create mode 100644 svgs/regio_guide.svg create mode 100644 svgs/rmvgo.svg create mode 100644 svgs/simon_tathams_puzzles.svg create mode 100644 svgs/simplewear.svg create mode 100644 svgs/simplewear_settings.svg create mode 100644 svgs/sketchbook_lite.svg create mode 100644 svgs/small_monkey_search.svg create mode 100644 svgs/standroid.svg create mode 100644 svgs/stickman_hook.svg create mode 100644 svgs/super_quick_settings_pro.svg create mode 100644 svgs/supershift_shift_work_calendar.svg create mode 100644 svgs/sys_i.svg create mode 100644 svgs/szkolny.svg create mode 100644 svgs/tabii.svg create mode 100644 svgs/takostats.svg create mode 100644 svgs/text_converter.svg create mode 100644 svgs/tubemate.svg create mode 100644 svgs/tuenti_argentina.svg create mode 100644 svgs/twitcast.svg create mode 100644 svgs/v380_pro.svg create mode 100644 svgs/vanilla_music.svg create mode 100644 svgs/vbb_bus_and_bahn.svg create mode 100644 svgs/video_summarizer.svg create mode 100644 svgs/warframe_companion.svg create mode 100644 svgs/warzone_meta_and_loadout.svg create mode 100644 svgs/wifi_analyzer.svg create mode 100644 svgs/wonderful.svg create mode 100644 svgs/worldcoin_wallet.svg create mode 100644 svgs/wpsapp_pro.svg create mode 100644 svgs/yowindow.svg create mode 100644 svgs/zygisk_detach.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index d50a89c09e4..d4781b001fd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -56,6 +56,7 @@ + @@ -284,6 +285,7 @@ + @@ -465,6 +467,7 @@ + @@ -495,6 +498,7 @@ + @@ -764,7 +768,9 @@ + + @@ -866,6 +872,7 @@ + @@ -909,9 +916,11 @@ + + @@ -969,6 +978,7 @@ + @@ -1212,6 +1222,7 @@ + @@ -1303,6 +1314,7 @@ + @@ -1411,6 +1423,7 @@ + @@ -1588,6 +1601,7 @@ + @@ -1623,6 +1637,7 @@ + @@ -1635,6 +1650,7 @@ + @@ -2115,9 +2131,11 @@ + + @@ -2163,6 +2181,7 @@ + @@ -2180,6 +2199,7 @@ + @@ -2199,6 +2219,7 @@ + @@ -2207,6 +2228,7 @@ + @@ -2244,11 +2266,14 @@ + + + @@ -2309,6 +2334,7 @@ + @@ -2634,6 +2660,7 @@ + @@ -2910,6 +2937,7 @@ + @@ -2998,6 +3026,7 @@ + @@ -3052,6 +3081,7 @@ + @@ -3857,6 +3887,7 @@ + @@ -4072,6 +4103,7 @@ + @@ -4121,6 +4153,7 @@ + @@ -4166,6 +4199,7 @@ + @@ -4233,6 +4267,7 @@ + @@ -4356,6 +4391,7 @@ + @@ -4437,6 +4473,7 @@ + @@ -4480,6 +4517,7 @@ + @@ -4617,6 +4655,7 @@ + @@ -4672,6 +4711,7 @@ + @@ -4694,6 +4734,7 @@ + @@ -5058,6 +5099,7 @@ + @@ -5199,6 +5241,9 @@ + + + @@ -5250,6 +5295,7 @@ + @@ -5355,6 +5401,7 @@ + @@ -5472,6 +5519,7 @@ + @@ -5575,6 +5623,7 @@ + @@ -5601,6 +5650,7 @@ + @@ -5624,6 +5674,7 @@ + @@ -5674,6 +5725,7 @@ + @@ -5879,6 +5931,7 @@ + @@ -5947,6 +6000,7 @@ + @@ -5992,6 +6046,7 @@ + @@ -6136,6 +6191,7 @@ + @@ -6186,6 +6242,7 @@ + @@ -6362,6 +6419,7 @@ + @@ -7099,7 +7157,9 @@ + + @@ -7180,6 +7240,7 @@ + @@ -7287,6 +7348,7 @@ + @@ -7582,6 +7644,7 @@ + @@ -7701,6 +7764,7 @@ + @@ -7715,6 +7779,7 @@ + @@ -7812,6 +7877,7 @@ + @@ -8381,6 +8447,7 @@ + @@ -8738,6 +8805,8 @@ + + @@ -8762,6 +8831,7 @@ + @@ -9069,6 +9139,7 @@ + @@ -9156,6 +9227,7 @@ + @@ -9233,6 +9305,7 @@ + @@ -9243,6 +9316,7 @@ + @@ -9315,14 +9389,17 @@ + + + @@ -9347,6 +9424,7 @@ + @@ -9532,6 +9610,7 @@ + @@ -10049,7 +10128,9 @@ + + @@ -10111,6 +10192,7 @@ + @@ -10269,6 +10351,7 @@ + @@ -10286,9 +10369,11 @@ + + @@ -10377,6 +10462,7 @@ + @@ -10565,10 +10651,12 @@ + + @@ -10798,6 +10886,7 @@ + @@ -10872,6 +10961,7 @@ + @@ -10882,6 +10972,7 @@ + @@ -11073,6 +11164,7 @@ + @@ -11211,7 +11303,9 @@ + + @@ -11255,6 +11349,7 @@ + @@ -11413,6 +11508,7 @@ + @@ -11433,7 +11529,9 @@ + + @@ -11444,6 +11542,7 @@ + @@ -11453,6 +11552,7 @@ + diff --git a/svgs/_2_player_games_the_challenge.svg b/svgs/_2_player_games_the_challenge.svg new file mode 100644 index 00000000000..851c1edab40 --- /dev/null +++ b/svgs/_2_player_games_the_challenge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alerta_sismica_mexico.svg b/svgs/alerta_sismica_mexico.svg new file mode 100644 index 00000000000..415e2aead26 --- /dev/null +++ b/svgs/alerta_sismica_mexico.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ambito_dollar.svg b/svgs/ambito_dollar.svg new file mode 100644 index 00000000000..62b17873d9c --- /dev/null +++ b/svgs/ambito_dollar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/anlinux.svg b/svgs/anlinux.svg new file mode 100644 index 00000000000..417fcbd64d4 --- /dev/null +++ b/svgs/anlinux.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/apatch.svg b/svgs/apatch.svg new file mode 100644 index 00000000000..5db460a158d --- /dev/null +++ b/svgs/apatch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bad_game.svg b/svgs/bad_game.svg new file mode 100644 index 00000000000..2647520d489 --- /dev/null +++ b/svgs/bad_game.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bahnbonus.svg b/svgs/bahnbonus.svg new file mode 100644 index 00000000000..1e753a69e80 --- /dev/null +++ b/svgs/bahnbonus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bc_vaccine_card_verifier.svg b/svgs/bc_vaccine_card_verifier.svg new file mode 100644 index 00000000000..cdeb59609f3 --- /dev/null +++ b/svgs/bc_vaccine_card_verifier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/best_knots.svg b/svgs/best_knots.svg new file mode 100644 index 00000000000..d2714c91d94 --- /dev/null +++ b/svgs/best_knots.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/betterbatterystats.svg b/svgs/betterbatterystats.svg new file mode 100644 index 00000000000..355de067260 --- /dev/null +++ b/svgs/betterbatterystats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bip.svg b/svgs/bip.svg new file mode 100644 index 00000000000..30b4d8e6b61 --- /dev/null +++ b/svgs/bip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bubble_level.svg b/svgs/bubble_level.svg new file mode 100644 index 00000000000..5993314d74e --- /dev/null +++ b/svgs/bubble_level.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/business_db_navigator.svg b/svgs/business_db_navigator.svg new file mode 100644 index 00000000000..e419acf32c7 --- /dev/null +++ b/svgs/business_db_navigator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/call_a_bike.svg b/svgs/call_a_bike.svg new file mode 100644 index 00000000000..7c393d57cb0 --- /dev/null +++ b/svgs/call_a_bike.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/campus_student.svg b/svgs/campus_student.svg new file mode 100644 index 00000000000..40ec2d38d4a --- /dev/null +++ b/svgs/campus_student.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/car_scanner_elm_obd2.svg b/svgs/car_scanner_elm_obd2.svg new file mode 100644 index 00000000000..f515aaef6dd --- /dev/null +++ b/svgs/car_scanner_elm_obd2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/carrion.svg b/svgs/carrion.svg new file mode 100644 index 00000000000..fa4456db87c --- /dev/null +++ b/svgs/carrion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/closer.svg b/svgs/closer.svg new file mode 100644 index 00000000000..3f12600bb0e --- /dev/null +++ b/svgs/closer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/control_center_ios.svg b/svgs/control_center_ios.svg new file mode 100644 index 00000000000..6a3f4086851 --- /dev/null +++ b/svgs/control_center_ios.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cookie_clicker.svg b/svgs/cookie_clicker.svg new file mode 100644 index 00000000000..a36e184de13 --- /dev/null +++ b/svgs/cookie_clicker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/crosswords.svg b/svgs/crosswords.svg new file mode 100644 index 00000000000..049b7f10961 --- /dev/null +++ b/svgs/crosswords.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cuenta_dni.svg b/svgs/cuenta_dni.svg new file mode 100644 index 00000000000..8cdf15f74f2 --- /dev/null +++ b/svgs/cuenta_dni.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/daily_diary.svg b/svgs/daily_diary.svg new file mode 100644 index 00000000000..f1f0ac67dc6 --- /dev/null +++ b/svgs/daily_diary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dailypic.svg b/svgs/dailypic.svg new file mode 100644 index 00000000000..9c4df356efe --- /dev/null +++ b/svgs/dailypic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/db_ausflug.svg b/svgs/db_ausflug.svg new file mode 100644 index 00000000000..0edcffbf9e4 --- /dev/null +++ b/svgs/db_ausflug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/db_bauarbeiten.svg b/svgs/db_bauarbeiten.svg new file mode 100644 index 00000000000..d84f52f3396 --- /dev/null +++ b/svgs/db_bauarbeiten.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/db_rad_plus.svg b/svgs/db_rad_plus.svg new file mode 100644 index 00000000000..be49b025fbf --- /dev/null +++ b/svgs/db_rad_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/detectify.svg b/svgs/detectify.svg new file mode 100644 index 00000000000..f1e534580ab --- /dev/null +++ b/svgs/detectify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dobroservice.svg b/svgs/dobroservice.svg new file mode 100644 index 00000000000..87932c39324 --- /dev/null +++ b/svgs/dobroservice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/droidfish.svg b/svgs/droidfish.svg new file mode 100644 index 00000000000..1788497388f --- /dev/null +++ b/svgs/droidfish.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fahrplaner.svg b/svgs/fahrplaner.svg new file mode 100644 index 00000000000..b84d1eee0b5 --- /dev/null +++ b/svgs/fahrplaner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fiio_control.svg b/svgs/fiio_control.svg new file mode 100644 index 00000000000..9b10815a7f5 --- /dev/null +++ b/svgs/fiio_control.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/film_plus.svg b/svgs/film_plus.svg new file mode 100644 index 00000000000..1702f03936b --- /dev/null +++ b/svgs/film_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gsmarena.svg b/svgs/gsmarena.svg new file mode 100644 index 00000000000..bb2684d4f1a --- /dev/null +++ b/svgs/gsmarena.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/husky.svg b/svgs/husky.svg new file mode 100644 index 00000000000..02ad085eda7 --- /dev/null +++ b/svgs/husky.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/idle_miner_tycoon_gold_and_cash.svg b/svgs/idle_miner_tycoon_gold_and_cash.svg new file mode 100644 index 00000000000..caf9cf000b9 --- /dev/null +++ b/svgs/idle_miner_tycoon_gold_and_cash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/imagesearchman.svg b/svgs/imagesearchman.svg new file mode 100644 index 00000000000..40db598d54d --- /dev/null +++ b/svgs/imagesearchman.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/income_tax.svg b/svgs/income_tax.svg new file mode 100644 index 00000000000..9ce57a58c00 --- /dev/null +++ b/svgs/income_tax.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/infomaniak_mail.svg b/svgs/infomaniak_mail.svg new file mode 100644 index 00000000000..d5c21f0d815 --- /dev/null +++ b/svgs/infomaniak_mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/itutor.svg b/svgs/itutor.svg new file mode 100644 index 00000000000..189d8d15861 --- /dev/null +++ b/svgs/itutor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/just_a_line.svg b/svgs/just_a_line.svg new file mode 100644 index 00000000000..cc28ea8e9cd --- /dev/null +++ b/svgs/just_a_line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kalium.svg b/svgs/kalium.svg new file mode 100644 index 00000000000..bc90b6b813d --- /dev/null +++ b/svgs/kalium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kimi.svg b/svgs/kimi.svg new file mode 100644 index 00000000000..8cd265fcc99 --- /dev/null +++ b/svgs/kimi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kook.svg b/svgs/kook.svg new file mode 100644 index 00000000000..4217c843f0a --- /dev/null +++ b/svgs/kook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kustom_weather_plugin.svg b/svgs/kustom_weather_plugin.svg new file mode 100644 index 00000000000..e5a6a25174b --- /dev/null +++ b/svgs/kustom_weather_plugin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/malody.svg b/svgs/malody.svg new file mode 100644 index 00000000000..366de61e37d --- /dev/null +++ b/svgs/malody.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/medal_tv.svg b/svgs/medal_tv.svg new file mode 100644 index 00000000000..9721d95d66b --- /dev/null +++ b/svgs/medal_tv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/media_on.svg b/svgs/media_on.svg new file mode 100644 index 00000000000..a580e4d6aa5 --- /dev/null +++ b/svgs/media_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mediafire.svg b/svgs/mediafire.svg new file mode 100644 index 00000000000..29be3c8a6bb --- /dev/null +++ b/svgs/mediafire.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mercurygram.svg b/svgs/mercurygram.svg new file mode 100644 index 00000000000..8d4ae05e53a --- /dev/null +++ b/svgs/mercurygram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mi_argentina.svg b/svgs/mi_argentina.svg new file mode 100644 index 00000000000..43f50650cd4 --- /dev/null +++ b/svgs/mi_argentina.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/microsoft_whiteboard.svg b/svgs/microsoft_whiteboard.svg new file mode 100644 index 00000000000..5c1cc502285 --- /dev/null +++ b/svgs/microsoft_whiteboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mlauncher.svg b/svgs/mlauncher.svg new file mode 100644 index 00000000000..5d1fe89f6b3 --- /dev/null +++ b/svgs/mlauncher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mojietu.svg b/svgs/mojietu.svg new file mode 100644 index 00000000000..9ee3aa67445 --- /dev/null +++ b/svgs/mojietu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/monochrome_kwgt.svg b/svgs/monochrome_kwgt.svg new file mode 100644 index 00000000000..06e6dfadd7d --- /dev/null +++ b/svgs/monochrome_kwgt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/moto_widget.svg b/svgs/moto_widget.svg new file mode 100644 index 00000000000..1475f22e449 --- /dev/null +++ b/svgs/moto_widget.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/myaakash.svg b/svgs/myaakash.svg new file mode 100644 index 00000000000..8805971959d --- /dev/null +++ b/svgs/myaakash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mytherapy_pill_reminder.svg b/svgs/mytherapy_pill_reminder.svg new file mode 100644 index 00000000000..874b3bcc9f6 --- /dev/null +++ b/svgs/mytherapy_pill_reminder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nanji_clock_widget.svg b/svgs/nanji_clock_widget.svg new file mode 100644 index 00000000000..c8e4470eaad --- /dev/null +++ b/svgs/nanji_clock_widget.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nfc_tasks.svg b/svgs/nfc_tasks.svg new file mode 100644 index 00000000000..5a57e714ebf --- /dev/null +++ b/svgs/nfc_tasks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nophonespam.svg b/svgs/nophonespam.svg new file mode 100644 index 00000000000..1c99498187a --- /dev/null +++ b/svgs/nophonespam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/odrabiamy_pl.svg b/svgs/odrabiamy_pl.svg new file mode 100644 index 00000000000..c15d2560c69 --- /dev/null +++ b/svgs/odrabiamy_pl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/old_maps_walk.svg b/svgs/old_maps_walk.svg new file mode 100644 index 00000000000..5526f7f51a3 --- /dev/null +++ b/svgs/old_maps_walk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixel_ims.svg b/svgs/pixel_ims.svg new file mode 100644 index 00000000000..e90bb814a57 --- /dev/null +++ b/svgs/pixel_ims.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixel_station.svg b/svgs/pixel_station.svg new file mode 100644 index 00000000000..42314648a9a --- /dev/null +++ b/svgs/pixel_station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/play_now.svg b/svgs/play_now.svg new file mode 100644 index 00000000000..d7ab508d4ae --- /dev/null +++ b/svgs/play_now.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/polytone.svg b/svgs/polytone.svg new file mode 100644 index 00000000000..a14e3cca6cf --- /dev/null +++ b/svgs/polytone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ramble.svg b/svgs/ramble.svg new file mode 100644 index 00000000000..f9a2f3e7799 --- /dev/null +++ b/svgs/ramble.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/redface.svg b/svgs/redface.svg new file mode 100644 index 00000000000..2ee3ceaeb61 --- /dev/null +++ b/svgs/redface.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/regio_guide.svg b/svgs/regio_guide.svg new file mode 100644 index 00000000000..5cf08fc2c47 --- /dev/null +++ b/svgs/regio_guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rmvgo.svg b/svgs/rmvgo.svg new file mode 100644 index 00000000000..999c1054fd4 --- /dev/null +++ b/svgs/rmvgo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/simon_tathams_puzzles.svg b/svgs/simon_tathams_puzzles.svg new file mode 100644 index 00000000000..c5b612043a6 --- /dev/null +++ b/svgs/simon_tathams_puzzles.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/simplewear.svg b/svgs/simplewear.svg new file mode 100644 index 00000000000..ae501b2822a --- /dev/null +++ b/svgs/simplewear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/simplewear_settings.svg b/svgs/simplewear_settings.svg new file mode 100644 index 00000000000..ed614540631 --- /dev/null +++ b/svgs/simplewear_settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sketchbook_lite.svg b/svgs/sketchbook_lite.svg new file mode 100644 index 00000000000..107f3c9c5d6 --- /dev/null +++ b/svgs/sketchbook_lite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/small_monkey_search.svg b/svgs/small_monkey_search.svg new file mode 100644 index 00000000000..22fd306df8b --- /dev/null +++ b/svgs/small_monkey_search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/standroid.svg b/svgs/standroid.svg new file mode 100644 index 00000000000..bb7ca7e0364 --- /dev/null +++ b/svgs/standroid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stickman_hook.svg b/svgs/stickman_hook.svg new file mode 100644 index 00000000000..8512b0a4066 --- /dev/null +++ b/svgs/stickman_hook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/super_quick_settings_pro.svg b/svgs/super_quick_settings_pro.svg new file mode 100644 index 00000000000..ce1be13b1d1 --- /dev/null +++ b/svgs/super_quick_settings_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/supershift_shift_work_calendar.svg b/svgs/supershift_shift_work_calendar.svg new file mode 100644 index 00000000000..a9aa0abcc19 --- /dev/null +++ b/svgs/supershift_shift_work_calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sys_i.svg b/svgs/sys_i.svg new file mode 100644 index 00000000000..82a1efcd5ca --- /dev/null +++ b/svgs/sys_i.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/szkolny.svg b/svgs/szkolny.svg new file mode 100644 index 00000000000..9bf0b3145e8 --- /dev/null +++ b/svgs/szkolny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tabii.svg b/svgs/tabii.svg new file mode 100644 index 00000000000..39e1925c5b1 --- /dev/null +++ b/svgs/tabii.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/takostats.svg b/svgs/takostats.svg new file mode 100644 index 00000000000..235112be6b5 --- /dev/null +++ b/svgs/takostats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/text_converter.svg b/svgs/text_converter.svg new file mode 100644 index 00000000000..755956eec3d --- /dev/null +++ b/svgs/text_converter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tubemate.svg b/svgs/tubemate.svg new file mode 100644 index 00000000000..d96c012bf57 --- /dev/null +++ b/svgs/tubemate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tuenti_argentina.svg b/svgs/tuenti_argentina.svg new file mode 100644 index 00000000000..4055e19e40d --- /dev/null +++ b/svgs/tuenti_argentina.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/twitcast.svg b/svgs/twitcast.svg new file mode 100644 index 00000000000..f3e063debf4 --- /dev/null +++ b/svgs/twitcast.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/v380_pro.svg b/svgs/v380_pro.svg new file mode 100644 index 00000000000..7e9275b2655 --- /dev/null +++ b/svgs/v380_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vanilla_music.svg b/svgs/vanilla_music.svg new file mode 100644 index 00000000000..7f38f6b08bc --- /dev/null +++ b/svgs/vanilla_music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vbb_bus_and_bahn.svg b/svgs/vbb_bus_and_bahn.svg new file mode 100644 index 00000000000..ed1a309f845 --- /dev/null +++ b/svgs/vbb_bus_and_bahn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/video_summarizer.svg b/svgs/video_summarizer.svg new file mode 100644 index 00000000000..7fa7111df3c --- /dev/null +++ b/svgs/video_summarizer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/warframe_companion.svg b/svgs/warframe_companion.svg new file mode 100644 index 00000000000..3779a3d486b --- /dev/null +++ b/svgs/warframe_companion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/warzone_meta_and_loadout.svg b/svgs/warzone_meta_and_loadout.svg new file mode 100644 index 00000000000..1c219902c1c --- /dev/null +++ b/svgs/warzone_meta_and_loadout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wifi_analyzer.svg b/svgs/wifi_analyzer.svg new file mode 100644 index 00000000000..fadc00c65dc --- /dev/null +++ b/svgs/wifi_analyzer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wonderful.svg b/svgs/wonderful.svg new file mode 100644 index 00000000000..2f76553cbcd --- /dev/null +++ b/svgs/wonderful.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/worldcoin_wallet.svg b/svgs/worldcoin_wallet.svg new file mode 100644 index 00000000000..010e2e7d4b8 --- /dev/null +++ b/svgs/worldcoin_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wpsapp_pro.svg b/svgs/wpsapp_pro.svg new file mode 100644 index 00000000000..a66641eccc2 --- /dev/null +++ b/svgs/wpsapp_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yowindow.svg b/svgs/yowindow.svg new file mode 100644 index 00000000000..b4152e37ec1 --- /dev/null +++ b/svgs/yowindow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zygisk_detach.svg b/svgs/zygisk_detach.svg new file mode 100644 index 00000000000..cbb4442a0ee --- /dev/null +++ b/svgs/zygisk_detach.svg @@ -0,0 +1 @@ + \ No newline at end of file From 4bf5552e854fc25096925a17612b0088a392d9ad Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Thu, 6 Jun 2024 18:55:13 +1000 Subject: [PATCH 125/527] + 1 link, + 1 icon (#2135) --- app/assets/appfilter.xml | 2 ++ svgs/openbubbles.svg | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 svgs/openbubbles.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index d4781b001fd..c6f51119703 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2821,6 +2821,7 @@ + @@ -6600,6 +6601,7 @@ + diff --git a/svgs/openbubbles.svg b/svgs/openbubbles.svg new file mode 100644 index 00000000000..2032d063f9c --- /dev/null +++ b/svgs/openbubbles.svg @@ -0,0 +1,23 @@ + + + + + + From 018c54be56f46da6c8dfd49e3089f150eedc111a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Jun 2024 17:48:48 +0800 Subject: [PATCH 126/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.4 (#2140) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e1118ea3db3..58c2751311c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.3", + "io.nlopez.compose.rules:ktlint:0.4.4", ), ).editorConfigOverride( mapOf( From ab3dec02dda0a13513f6be0d3e76cd2568f717f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Jun 2024 17:48:56 +0800 Subject: [PATCH 127/527] Update plugin com.google.devtools.ksp to v2.0.0-1.0.22 (#2139) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 58c2751311c..51d9565df03 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false - id("com.google.devtools.ksp") version "2.0.0-1.0.21" apply false + id("com.google.devtools.ksp") version "2.0.0-1.0.22" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From 4146c84443b00d4ea902c88ffb33438494c65f34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:49:16 +0800 Subject: [PATCH 128/527] Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.7.0 (#2141) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cade0b57094..cd5d1fcdecf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -160,7 +160,7 @@ dependencies { val retrofitVersion = "2.11.0" implementation("com.squareup.retrofit2:retrofit:$retrofitVersion") implementation("com.squareup.retrofit2:converter-kotlinx-serialization:$retrofitVersion") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") implementation("com.github.nanihadesuka:LazyColumnScrollbar:2.1.0") From 73db77a2e0d2cab5a4c4b4b40e8d5117cdb5b3d8 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 7 Jun 2024 23:47:34 +0300 Subject: [PATCH 129/527] +11 links (#2143) * +11 links * Minor fix --- app/assets/appfilter.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index c6f51119703..a1d4e0f3f37 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1243,6 +1243,7 @@ + @@ -3919,6 +3920,7 @@ + @@ -4880,6 +4882,7 @@ + @@ -5244,6 +5247,7 @@ + @@ -5866,6 +5870,7 @@ + @@ -7159,6 +7164,7 @@ + @@ -7376,6 +7382,7 @@ + @@ -7781,6 +7788,7 @@ + @@ -8779,6 +8787,8 @@ + + @@ -10194,6 +10204,7 @@ + From 55c9428094ceb7f298b42d9e956a894ec484cb1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 08:18:36 +0800 Subject: [PATCH 130/527] Update AGP (#2145) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 51d9565df03..1e25fd7527d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.4.1" apply false + id("com.android.application") version "8.4.2" apply false id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index db022859121..7b1f566c381 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.4.1") + implementation("com.android.tools:sdk-common:31.4.2") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From d43de5e69e7d729554aa84bb03b55f69a5ec502f Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Tue, 11 Jun 2024 11:42:01 +0800 Subject: [PATCH 131/527] Update and rename renovate.json to renovate.json5 --- .github/{renovate.json => renovate.json5} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename .github/{renovate.json => renovate.json5} (69%) diff --git a/.github/renovate.json b/.github/renovate.json5 similarity index 69% rename from .github/renovate.json rename to .github/renovate.json5 index 59f4ad8cd72..6b13de17e99 100644 --- a/.github/renovate.json +++ b/.github/renovate.json5 @@ -1,30 +1,30 @@ { "labels": [ - "dependencies" + "dependencies", ], "extends": [ - "config:base" + "config:base", ], "packageRules": [ { "groupName": "Kotlin and KSP", "matchPackagePrefixes": [ - "com.google.devtools.ksp" + "com.google.devtools.ksp", ], "matchPackagePatterns": [ - "org.jetbrains.kotlin.*" + "org.jetbrains.kotlin.*", ] }, { "groupName": "AGP", "matchPackagePatterns": [ - "com.android.*" + "com.android.*", ] }, { "groupName": "Hilt", "matchPackagePrefixes": [ - "com.google.dagger" + "com.google.dagger", ] } ] From dc9ead956a71f6456cec9594da0a4f6b31c58cca Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 4 Jun 2024 11:50:34 +0800 Subject: [PATCH 132/527] Implement initial grouping class --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 34959e0b0fb..9079f05ca74 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -33,3 +33,27 @@ data class IconInfoAppfilter( val componentName: String, val id: Int, ) + +data class IconInfoAppfilterPkgs( + val name: List, + val drawableName: String, + val componentName: List, + val id: Int +) { + companion object { + fun convert(iconInfoList: List): List { + // Group by drawableName + val grouped = iconInfoList.groupBy { it.drawableName } + + // Convert each group to IconInfoAppfilterPkgs + return grouped.map { (drawableName, icons) -> + IconInfoAppfilterPkgs( + name = icons.map { it.name }, + drawableName = drawableName, + componentName = icons.map { it.componentName }, + id = icons[0].id // Assuming IDs in the group are the same + ) + } + } + } +} From 160e1d3a93deaf12a1172741a670048a0d5233b6 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:11:12 +0800 Subject: [PATCH 133/527] Remove deprecated IconInfo class --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 48 ++++++------------- .../lawnicons/model/IconInfoModel.kt | 4 +- .../lawnchair/lawnicons/model/SearchInfo.kt | 2 +- .../lawnicons/repository/IconRepository.kt | 12 ++--- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 4 +- .../ui/components/home/IconInfoPopup.kt | 4 +- .../ui/components/home/IconPreview.kt | 6 +-- .../ui/components/home/IconPreviewGrid.kt | 6 +-- .../components/home/search/SearchContents.kt | 6 +-- .../lawnicons/ui/destination/Home.kt | 4 +- .../lawnicons/ui/util/PreviewUtils.kt | 10 ++-- .../lawnchair/lawnicons/util/GetIconInfo.kt | 44 +---------------- .../lawnicons/util/GetSystemPackageList.kt | 6 +-- 13 files changed, 49 insertions(+), 107 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 9079f05ca74..4fb94e0d556 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -1,24 +1,5 @@ package app.lawnchair.lawnicons.model -/** - * Data class to hold information about an icon. - * - * @property name The name of the icon. - * @property drawableName The name of the drawable resource for the icon. - * @property packageName The package name of the app that owns the icon. - * @property id A unique identifier for the icon. - */ -@Deprecated( - message = "Use appfilter implementation instead.", - replaceWith = ReplaceWith("IconInfoAppfilter", "app.lawnchair.lawnicons.model.IconInfoAppfilter"), -) -data class IconInfo( - val name: String, - val drawableName: String, - val packageName: String, - val id: Int, -) - /** * Data class to hold information about an icon. * @@ -27,32 +8,33 @@ data class IconInfo( * @property componentName The component name of the app that owns the icon. * @property id A unique identifier for the icon. */ -data class IconInfoAppfilter( +data class IconInfo( val name: String, val drawableName: String, val componentName: String, val id: Int, ) -data class IconInfoAppfilterPkgs( - val name: List, +data class IconInfoGrouped( + val names: List, val drawableName: String, - val componentName: List, + val componentNames: List, val id: Int ) { companion object { - fun convert(iconInfoList: List): List { + fun fromIconInfoList(iconInfoList: List): List { // Group by drawableName - val grouped = iconInfoList.groupBy { it.drawableName } + return iconInfoList + .groupBy { it.drawableName } + .map { (drawableName, icons) -> + require(icons.all { it.id == icons[0].id }) { "Icon IDs in a group must be the same" } - // Convert each group to IconInfoAppfilterPkgs - return grouped.map { (drawableName, icons) -> - IconInfoAppfilterPkgs( - name = icons.map { it.name }, - drawableName = drawableName, - componentName = icons.map { it.componentName }, - id = icons[0].id // Assuming IDs in the group are the same - ) + IconInfoGrouped( + names = icons.map { it.name }, + drawableName = drawableName, + componentNames = icons.map { it.componentName }, + id = icons[0].id // Assuming IDs in the group are the same + ) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt index bec01771e48..716402f815f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt @@ -5,10 +5,10 @@ import kotlinx.collections.immutable.ImmutableList /** * Data class to hold information about icons. * - * @property iconInfo A list of `IconInfoAppfilter` objects. + * @property iconInfo A list of `IconInfo` objects. * @property iconCount The total number of icons. */ data class IconInfoModel( - val iconInfo: ImmutableList, + val iconInfo: ImmutableList, val iconCount: Int, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt index 78290f0b6f8..1af94265539 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt @@ -1,7 +1,7 @@ package app.lawnchair.lawnicons.model data class SearchInfo( - val iconInfo: IconInfoAppfilter, + val iconInfo: IconInfo, val indexOfMatch: Int, val matchAtWordStart: Boolean, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 28b633d4f8a..5d2d18e05f7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -1,13 +1,13 @@ package app.lawnchair.lawnicons.repository import android.app.Application -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.model.SearchInfo import app.lawnchair.lawnicons.model.SearchMode -import app.lawnchair.lawnicons.util.getIconInfoAppfilter +import app.lawnchair.lawnicons.util.getIconInfo import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter import javax.inject.Inject import kotlinx.collections.immutable.toImmutableList @@ -22,18 +22,18 @@ class IconRepository @Inject constructor(application: Application) { private val coroutineScope = CoroutineScope(Dispatchers.IO) - private var iconInfo: List? = null + private var iconInfo: List? = null val iconInfoModel = MutableStateFlow(value = null) val searchedIconInfoModel = MutableStateFlow(value = null) - private var lawniconsData: List? = null + private var lawniconsData: List? = null - private var systemPackageList: List? = null + private var systemPackageList: List? = null var iconRequestList = MutableStateFlow(value = null) init { coroutineScope.launch { - iconInfo = application.getIconInfoAppfilter() + iconInfo = application.getIconInfo() .also { list -> lawniconsData = list.sortedBy { it.name.lowercase() } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 4596aa0a22d..9d310280776 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -15,7 +15,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements @@ -31,7 +31,7 @@ import soup.compose.material.motion.animation.rememberSlideDistance @ExperimentalFoundationApi fun Lawnicons( windowSizeClass: WindowSizeClass, - onSendResult: (IconInfoAppfilter) -> Unit, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index a114590b85b..58137fec181 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.IconLink import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.SimpleListRow @@ -39,7 +39,7 @@ import app.lawnchair.lawnicons.ui.util.SampleData @OptIn(ExperimentalMaterial3Api::class) @Composable fun IconInfoPopup( - iconInfo: IconInfoAppfilter, + iconInfo: IconInfo, modifier: Modifier = Modifier, isPopupShown: (Boolean) -> Unit, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index a6f93da9aee..640595a1885 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -40,8 +40,8 @@ private fun ColorScheme.iconColor(): Color { @Composable fun IconPreview( - iconInfo: IconInfoAppfilter, - onSendResult: (IconInfoAppfilter) -> Unit, + iconInfo: IconInfo, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, iconBackground: Color? = null, isIconPicker: Boolean = false, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 7ecc4e5e03d..5d250a13d35 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -19,7 +19,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -32,9 +32,9 @@ import my.nanihadesuka.compose.ScrollbarSettings @Composable @ExperimentalFoundationApi fun IconPreviewGrid( - iconInfo: ImmutableList, + iconInfo: ImmutableList, isExpandedScreen: Boolean, - onSendResult: (IconInfoAppfilter) -> Unit, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 76874ac862e..c4436606ffa 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -38,7 +38,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup import app.lawnchair.lawnicons.ui.components.home.IconPreview @@ -49,9 +49,9 @@ fun SearchContents( searchTerm: String, searchMode: SearchMode, onModeChange: (SearchMode) -> Unit, - iconInfo: ImmutableList, + iconInfo: ImmutableList, modifier: Modifier = Modifier, - onSendResult: (IconInfoAppfilter) -> Unit = {}, + onSendResult: (IconInfo) -> Unit = {}, ) { Column( modifier = modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 8717c095c41..6f90defc909 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB @@ -31,7 +31,7 @@ import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel @Composable fun Home( onNavigate: (String) -> Unit, - onSendResult: (IconInfoAppfilter) -> Unit, + onSendResult: (IconInfo) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, isIconPicker: Boolean = false, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt index 775aab97e42..ad358ebd279 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt @@ -3,7 +3,7 @@ package app.lawnchair.lawnicons.ui.util import android.content.res.Configuration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Wallpapers -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo import kotlinx.collections.immutable.persistentListOf @Preview( @@ -31,26 +31,26 @@ import kotlinx.collections.immutable.persistentListOf annotation class PreviewLawnicons object SampleData { - val iconInfoSample = IconInfoAppfilter( + val iconInfoSample = IconInfo( name = "Email", drawableName = "@drawable/email", componentName = "com.android.email", id = 1, ) val iconInfoList = persistentListOf( - IconInfoAppfilter( + IconInfo( name = "Email", drawableName = "@drawable/email", componentName = "com.android.email", id = 1, ), - IconInfoAppfilter( + IconInfo( name = "Search", drawableName = "@drawable/search", componentName = "com.android.search", id = 2, ), - IconInfoAppfilter( + IconInfo( name = "Phone", drawableName = "@drawable/phone", componentName = "com.android.phone", diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index 4dc739b8638..800d74dd783 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -4,52 +4,12 @@ import android.annotation.SuppressLint import android.content.Context import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoAppfilter import org.xmlpull.v1.XmlPullParser -@Deprecated( - message = "Use appfilter implementation instead.", - replaceWith = ReplaceWith("getIconInfoAppfilter", "app.lawnchair.lawnicons.util.getIconInfoAppfilter"), -) +@SuppressLint("DiscouragedApi") fun Context.getIconInfo(): List { val iconInfo = mutableListOf() - try { - val xmlId = R.xml.grayscale_icon_map - if (xmlId != 0) { - val parser = resources.getXml(xmlId) - val depth = parser.depth - var type: Int - while ( - ( - parser.next() - .also { type = it } != XmlPullParser.END_TAG || parser.depth > depth - ) && - type != XmlPullParser.END_DOCUMENT - ) { - if (type != XmlPullParser.START_TAG) continue - if ("icon" == parser.name) { - val pkg = parser.getAttributeValue(null, "package") - val iconName = parser.getAttributeValue(null, "name") - val iconId = parser.getAttributeResourceValue(null, "drawable", 0) - val iconDrawable = resources.getResourceEntryName(iconId) - if (iconId != 0 && pkg.isNotEmpty()) { - iconInfo += IconInfo(iconName, iconDrawable, pkg, iconId) - } - } - } - } - } catch (e: Exception) { - e.printStackTrace() - } - - return iconInfo -} - -@SuppressLint("DiscouragedApi") -fun Context.getIconInfoAppfilter(): List { - val iconInfo = mutableListOf() - val componentInfoPrefixLength = "ComponentInfo{".length try { @@ -85,7 +45,7 @@ fun Context.getIconInfoAppfilter(): List { actualComponent = parsedComponent } - iconInfo.add(IconInfoAppfilter(iconName, iconId, actualComponent, iconDrawable)) + iconInfo.add(IconInfo(iconName, iconId, actualComponent, iconDrawable)) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt index 53040f71e65..7c3a7175b17 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -4,7 +4,7 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.pm.ResolveInfo -import app.lawnchair.lawnicons.model.IconInfoAppfilter +import app.lawnchair.lawnicons.model.IconInfo fun Context.getPackagesList(): List { return try { @@ -17,7 +17,7 @@ fun Context.getPackagesList(): List { } } -fun Context.getSystemIconInfoAppfilter(): List { +fun Context.getSystemIconInfoAppfilter(): List { return getPackagesList().map { ri -> with(ri) { val riPkg = activityInfo.packageName @@ -25,7 +25,7 @@ fun Context.getSystemIconInfoAppfilter(): List { val name = loadLabel(packageManager) ?: riPkg - IconInfoAppfilter( + IconInfo( name = name.toString(), componentName = component, id = 0, From 53906b59c9d56c8eeb7c84075793debfb5496586 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:12:37 +0800 Subject: [PATCH 134/527] Improve IconLink padding --- .../kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt index 6c4693aced5..4ba3fe55e06 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons @@ -44,6 +45,7 @@ fun IconLink( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, modifier = modifier + .padding(horizontal = 16.dp) .height(64.dp) .clip(MaterialTheme.shapes.medium) .clickable { From 2cb4a498e95c4fad37d6a29ee92aa7a2e234bc99 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Jun 2024 14:04:58 +0800 Subject: [PATCH 135/527] Initial support for icon information with multiple component names --- .../app/lawnchair/lawnicons/MainActivity.kt | 12 ++--- .../app/lawnchair/lawnicons/model/IconInfo.kt | 23 +++++++++- .../lawnicons/model/IconInfoModel.kt | 5 ++ .../lawnicons/repository/IconRepository.kt | 46 +++++++++++-------- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 3 +- .../ui/components/home/IconInfoPopup.kt | 20 ++++---- .../ui/components/home/IconPreview.kt | 24 +++++++++- .../ui/components/home/IconPreviewGrid.kt | 9 ++-- .../components/home/search/SearchContents.kt | 5 +- .../lawnicons/ui/destination/Home.kt | 14 ++++-- 10 files changed, 113 insertions(+), 48 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index 21dfa1b79f9..d7dd7908302 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -12,6 +12,7 @@ import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSiz import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toBitmap import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import app.lawnchair.lawnicons.ui.Lawnicons @@ -33,12 +34,12 @@ class MainActivity : ComponentActivity() { val context = LocalContext.current val windowSizeClass = calculateWindowSizeClass(this) Lawnicons( - windowSizeClass, - @Suppress("DEPRECATION") { - iconInfo -> + windowSizeClass = windowSizeClass, + onSendResult = { iconInfo -> val intent = Intent() - val bitmap = context.resources.getDrawable(iconInfo.id).toBitmap() + val bitmap = ResourcesCompat.getDrawable(context.resources, iconInfo.id, null) + ?.toBitmap() if (bitmap != null) { try { @@ -60,8 +61,7 @@ class MainActivity : ComponentActivity() { } finish() }, - Modifier, - isIconPicker, + isIconPicker = isIconPicker, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 4fb94e0d556..45e2eb1f4b6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -13,7 +13,26 @@ data class IconInfo( val drawableName: String, val componentName: String, val id: Int, -) +) { + companion object { + fun convert(groupedList: List): List { + val result = mutableListOf() + for (grouped in groupedList) { + for (i in grouped.names.indices) { + result.add( + IconInfo( + name = grouped.names[i], + drawableName = grouped.drawableName, + componentName = grouped.componentNames[i], + id = grouped.id + ) + ) + } + } + return result + } + } +} data class IconInfoGrouped( val names: List, @@ -22,7 +41,7 @@ data class IconInfoGrouped( val id: Int ) { companion object { - fun fromIconInfoList(iconInfoList: List): List { + fun convert(iconInfoList: List): List { // Group by drawableName return iconInfoList .groupBy { it.drawableName } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt index 716402f815f..2718c2a9a46 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt @@ -12,3 +12,8 @@ data class IconInfoModel( val iconInfo: ImmutableList, val iconCount: Int, ) + +data class IconInfoGroupedModel( + val iconInfo: ImmutableList, + val iconCount: Int, +) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 5d2d18e05f7..84cf9f4147c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -2,6 +2,8 @@ package app.lawnchair.lawnicons.repository import android.app.Application import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped +import app.lawnchair.lawnicons.model.IconInfoGroupedModel import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel @@ -22,37 +24,38 @@ class IconRepository @Inject constructor(application: Application) { private val coroutineScope = CoroutineScope(Dispatchers.IO) - private var iconInfo: List? = null - val iconInfoModel = MutableStateFlow(value = null) + private var iconInfo: List = emptyList() + val iconInfoModel = MutableStateFlow(value = null) val searchedIconInfoModel = MutableStateFlow(value = null) - - private var lawniconsData: List? = null - private var systemPackageList: List? = null var iconRequestList = MutableStateFlow(value = null) + private var iconCount = 0 + init { coroutineScope.launch { - iconInfo = application.getIconInfo() + application.getIconInfo() .also { list -> - lawniconsData = list.sortedBy { it.name.lowercase() } + iconInfo = list.sortedBy { it.name.lowercase() } } .associateBy { it.name }.values - .sortedBy { it.name.lowercase() } .also { - iconInfoModel.value = IconInfoModel( - iconInfo = it.toPersistentList(), - iconCount = it.size, - ) - searchedIconInfoModel.value = IconInfoModel( - iconInfo = it.toPersistentList(), - iconCount = it.size, - ) + iconCount = it.size } + iconInfoModel.value = IconInfoGroupedModel( + iconInfo = IconInfoGrouped.convert(iconInfo).toPersistentList(), + iconCount = iconCount, + ) + searchedIconInfoModel.value = IconInfoModel( + iconInfo = iconInfo.toPersistentList(), + iconCount = iconCount, + ) + systemPackageList = application.getSystemIconInfoAppfilter() .associateBy { it.name }.values .sortedBy { it.name.lowercase() } + getIconRequestList() } } @@ -61,7 +64,7 @@ class IconRepository @Inject constructor(application: Application) { mode: SearchMode, query: String, ) = withContext(Dispatchers.Default) { - searchedIconInfoModel.value = iconInfo?.let { + searchedIconInfoModel.value = iconInfo.let { val filtered = it.mapNotNull { candidate -> val searchIn = when (mode) { @@ -95,12 +98,17 @@ class IconRepository @Inject constructor(application: Application) { } fun clear() { - searchedIconInfoModel.value = iconInfoModel.value + searchedIconInfoModel.value = iconInfoModel.value?.let { + IconInfoModel( + iconCount = it.iconCount, + iconInfo = IconInfo.convert(it.iconInfo).toImmutableList(), + ) + } } private suspend fun getIconRequestList() = withContext(Dispatchers.Default) { iconRequestList.value = systemPackageList?.let { packageList -> - val lawniconsData = lawniconsData ?: emptyList() + val lawniconsData = iconInfo val systemData = packageList.map { IconRequest( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 9d310280776..580453ca9bf 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -16,6 +16,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements @@ -31,7 +32,7 @@ import soup.compose.material.motion.animation.rememberSlideDistance @ExperimentalFoundationApi fun Lawnicons( windowSizeClass: WindowSizeClass, - onSendResult: (IconInfo) -> Unit, + onSendResult: (IconInfoGrouped) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 58137fec181..2b50b7fc19f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.ui.components.IconLink import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.SimpleListRow @@ -39,7 +39,7 @@ import app.lawnchair.lawnicons.ui.util.SampleData @OptIn(ExperimentalMaterial3Api::class) @Composable fun IconInfoPopup( - iconInfo: IconInfo, + iconInfo: IconInfoGrouped, modifier: Modifier = Modifier, isPopupShown: (Boolean) -> Unit, ) { @@ -118,11 +118,13 @@ fun IconInfoPopup( Card( label = stringResource(id = R.string.package_prefix), ) { - SimpleListRow( - label = iconInfo.name, - description = iconInfo.componentName, - divider = false, - ) + val data = iconInfo.names zip iconInfo.componentNames + data.forEach { (name, componentName) -> + SimpleListRow( + label = name, + description = componentName, + ) + } } Spacer(Modifier.height(16.dp)) @@ -136,7 +138,9 @@ private fun IconInfoPopupPreview() { val showPopup = remember { mutableStateOf(true) } LawniconsTheme { IconInfoPopup( - iconInfo = SampleData.iconInfoSample, + iconInfo = IconInfoGrouped.convert( + listOf(SampleData.iconInfoSample) + )[0], ) { showPopup.value = it } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index 640595a1885..26a9afe5088 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -45,6 +46,25 @@ fun IconPreview( modifier: Modifier = Modifier, iconBackground: Color? = null, isIconPicker: Boolean = false, +) { + IconPreview( + iconInfo = IconInfoGrouped.convert(listOf(iconInfo))[0], + onSendResult = { + onSendResult(IconInfo.convert(listOf(it))[0]) + }, + modifier = modifier, + iconBackground = iconBackground, + isIconPicker = isIconPicker, + ) +} + +@Composable +fun IconPreview( + iconInfo: IconInfoGrouped, + onSendResult: (IconInfoGrouped) -> Unit, + modifier: Modifier = Modifier, + iconBackground: Color? = null, + isIconPicker: Boolean = false, ) { val isIconInfoShown = remember { mutableStateOf(false) } @@ -115,7 +135,9 @@ fun IconPreview( private fun IconPreviewComposablePreview() { LawniconsTheme { IconPreview( - iconInfo = SampleData.iconInfoSample, + iconInfo = IconInfoGrouped.convert( + listOf(SampleData.iconInfoSample) + )[0], {}, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 5d250a13d35..59d6d049405 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -19,12 +19,13 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList import my.nanihadesuka.compose.LazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSelectionMode import my.nanihadesuka.compose.ScrollbarSettings @@ -32,9 +33,9 @@ import my.nanihadesuka.compose.ScrollbarSettings @Composable @ExperimentalFoundationApi fun IconPreviewGrid( - iconInfo: ImmutableList, + iconInfo: ImmutableList, isExpandedScreen: Boolean, - onSendResult: (IconInfo) -> Unit, + onSendResult: (IconInfoGrouped) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, @@ -95,7 +96,7 @@ fun IconPreviewGrid( private fun IconGridPreview() { LawniconsTheme { IconPreviewGrid( - SampleData.iconInfoList, + IconInfoGrouped.convert(SampleData.iconInfoList).toImmutableList(), true, {}, Modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index c4436606ffa..b8dcf449ffc 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup import app.lawnchair.lawnicons.ui.components.home.IconPreview @@ -153,7 +154,7 @@ fun SearchContents( ) if (isIconInfoAppfilterShown.value) { IconInfoPopup( - iconInfo = it, + iconInfo = IconInfoGrouped.convert(listOf(it))[0], ) { isIconInfoAppfilterShown.value = it } @@ -188,8 +189,8 @@ fun SearchContents( items(items = iconInfo) { IconPreview( iconInfo = it, - iconBackground = Color.Transparent, onSendResult = onSendResult, + iconBackground = Color.Transparent, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 6f90defc909..2395f604d18 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB @@ -26,12 +27,13 @@ import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel +import kotlinx.collections.immutable.toImmutableList @OptIn(ExperimentalFoundationApi::class) @Composable fun Home( onNavigate: (String) -> Unit, - onSendResult: (IconInfo) -> Unit, + onSendResult: (IconInfoGrouped) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, isIconPicker: Boolean = false, @@ -79,7 +81,9 @@ fun Home( lawniconsViewModel.changeMode(mode) }, iconInfo = it.iconInfo, - onSendResult = onSendResult, + onSendResult = { + onSendResult(IconInfoGrouped.convert(listOf(it))[0]) + }, ) }, ) @@ -114,7 +118,7 @@ fun Home( @Composable private fun HomePreview() { var searchTerm by remember { mutableStateOf(value = "") } - val iconInfo = SampleData.iconInfoList + val iconInfo = IconInfoGrouped.convert(SampleData.iconInfoList) LawniconsTheme { LawniconsSearchBar( @@ -135,12 +139,12 @@ private fun HomePreview() { "", SearchMode.NAME, {}, - iconInfo = iconInfo, + iconInfo = IconInfo.convert(iconInfo).toImmutableList(), ) }, ) IconPreviewGrid( - iconInfo = iconInfo, + iconInfo = iconInfo.toImmutableList(), isExpandedScreen = false, {}, Modifier, From 5369a7c27cdb357fbcc3fa0aeb3d4e4955aa081b Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:41:46 +0800 Subject: [PATCH 136/527] Expand and collapse FAB on grid scroll --- .../ui/components/home/IconPreviewGrid.kt | 5 +- .../ui/components/home/IconRequestFAB.kt | 13 ++- .../components/home/search/SearchContents.kt | 87 ++++++++++--------- .../lawnicons/ui/destination/Home.kt | 13 ++- .../lawnicons/ui/util/LazyGridStateUtils.kt | 27 ++++++ app/src/main/res/values/strings.xml | 2 +- 6 files changed, 99 insertions(+), 48 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/LazyGridStateUtils.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 59d6d049405..329f2078b3d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState @@ -39,8 +40,8 @@ fun IconPreviewGrid( modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, + listState: LazyGridState = rememberLazyGridState(), ) { - val listState = rememberLazyGridState() Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, @@ -76,7 +77,7 @@ fun IconPreviewGrid( additionalEnd = 32.dp, ) }, - + state = listState ) { items(items = iconInfo) { iconInfo -> IconPreview( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index d4341443a79..08630710870 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -3,10 +3,14 @@ package app.lawnchair.lawnicons.ui.components.home import android.content.Intent import android.net.Uri import android.util.Log +import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource @@ -14,10 +18,12 @@ import androidx.compose.ui.res.stringResource import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel +import app.lawnchair.lawnicons.ui.util.isScrollingUp @Composable fun IconRequestFAB( iconRequestModel: IconRequestModel?, + lazyGridState: LazyGridState, modifier: Modifier = Modifier, ) { Log.d("IconRequestFAB", "iconRequestModel: $iconRequestModel") @@ -25,7 +31,7 @@ fun IconRequestFAB( if (iconRequestModel.iconCount > 0) { IconRequestFAB( iconRequestList = iconRequestModel.list, - iconRequestCount = iconRequestModel.iconCount, + lazyGridState = lazyGridState, modifier = modifier, ) } @@ -35,7 +41,7 @@ fun IconRequestFAB( @Composable fun IconRequestFAB( iconRequestList: List, - iconRequestCount: Int, + lazyGridState: LazyGridState, modifier: Modifier = Modifier, ) { val context = LocalContext.current @@ -43,7 +49,7 @@ fun IconRequestFAB( ExtendedFloatingActionButton( text = { - Text(stringResource(R.string.unthemed_icons_info, iconRequestCount)) + Text(stringResource(R.string.unthemed_icons_info)) }, icon = { Icon(painter = painterResource(id = R.drawable.icon_request_app), contentDescription = null) }, onClick = { @@ -52,6 +58,7 @@ fun IconRequestFAB( context.startActivity(intent) }, modifier = modifier, + expanded = lazyGridState.isScrollingUp(), ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index b8dcf449ffc..ad979681239 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -25,6 +25,7 @@ import androidx.compose.material.icons.rounded.Check import androidx.compose.material3.FilterChip import androidx.compose.material3.Icon import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf @@ -121,47 +122,8 @@ fun SearchContents( ) { count -> when (count) { 1 -> { - Column( - modifier = Modifier - .fillMaxWidth() - .padding(PaddingValues(16.dp)), - verticalArrangement = Arrangement.spacedBy(4.dp), - ) { - val it = iconInfo[0] - val isIconInfoAppfilterShown = remember { mutableStateOf(false) } - - ListItem( - headlineContent = { Text(it.name) }, - supportingContent = { Text(it.componentName) }, - leadingContent = { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .padding(all = 8.dp) - .clip(shape = CircleShape) - .size(48.dp), - ) { - Icon( - painter = painterResource(id = it.id), - contentDescription = null, - modifier = Modifier.fillMaxSize(0.6f), - ) - } - }, - modifier = Modifier - .clip(RoundedCornerShape(16.dp)) - .clickable(onClick = { isIconInfoAppfilterShown.value = true }), - ) - if (isIconInfoAppfilterShown.value) { - IconInfoPopup( - iconInfo = IconInfoGrouped.convert(listOf(it))[0], - ) { - isIconInfoAppfilterShown.value = it - } - } - } + IconInfoListItem(iconInfo) } - 0 -> { Box( modifier = Modifier @@ -190,7 +152,7 @@ fun SearchContents( IconPreview( iconInfo = it, onSendResult = onSendResult, - iconBackground = Color.Transparent, + iconBackground = MaterialTheme.colorScheme.primaryContainer, ) } } @@ -200,3 +162,46 @@ fun SearchContents( } } } + +@Composable +private fun IconInfoListItem(iconInfo: ImmutableList) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(PaddingValues(16.dp)), + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + val it = iconInfo[0] + val isIconInfoAppfilterShown = remember { mutableStateOf(false) } + + ListItem( + headlineContent = { Text(it.name) }, + supportingContent = { Text(it.componentName) }, + leadingContent = { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(all = 8.dp) + .clip(shape = CircleShape) + .size(48.dp), + ) { + Icon( + painter = painterResource(id = it.id), + contentDescription = null, + modifier = Modifier.fillMaxSize(0.6f), + ) + } + }, + modifier = Modifier + .clip(RoundedCornerShape(16.dp)) + .clickable(onClick = { isIconInfoAppfilterShown.value = true }), + ) + if (isIconInfoAppfilterShown.value) { + IconInfoPopup( + iconInfo = IconInfoGrouped.convert(listOf(it))[0], + ) { + isIconInfoAppfilterShown.value = it + } + } + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 2395f604d18..712823fcb09 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -1,12 +1,15 @@ package app.lawnchair.lawnicons.ui.destination import androidx.compose.animation.Crossfade +import androidx.compose.animation.core.animateValueAsState import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -26,8 +29,10 @@ import app.lawnchair.lawnicons.ui.components.home.search.SearchContents import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData +import app.lawnchair.lawnicons.ui.util.isScrollingUp import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.delay @OptIn(ExperimentalFoundationApi::class) @Composable @@ -46,6 +51,8 @@ fun Home( val searchMode = searchMode val searchTerm = searchTerm + val lazyGridState = rememberLazyGridState() + Crossfade( modifier = modifier, targetState = iconInfoModel != null, @@ -91,7 +98,10 @@ fun Home( } }, floatingActionButton = { - IconRequestFAB(iconRequestModel) + IconRequestFAB( + iconRequestModel = iconRequestModel, + lazyGridState = lazyGridState, + ) }, ) { contentPadding -> iconInfoModel?.let { @@ -101,6 +111,7 @@ fun Home( isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, onSendResult = onSendResult, + listState = lazyGridState ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/LazyGridStateUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/LazyGridStateUtils.kt new file mode 100644 index 00000000000..6d2b9ea1d02 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/LazyGridStateUtils.kt @@ -0,0 +1,27 @@ +package app.lawnchair.lawnicons.ui.util + +import androidx.compose.foundation.lazy.grid.LazyGridState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue + +@Composable +fun LazyGridState.isScrollingUp(): Boolean { + var previousIndex by remember(this) { mutableIntStateOf(firstVisibleItemIndex) } + var previousScrollOffset by remember(this) { mutableIntStateOf(firstVisibleItemScrollOffset) } + return remember(this) { + derivedStateOf { + if (previousIndex != firstVisibleItemIndex) { + previousIndex > firstVisibleItemIndex + } else { + previousScrollOffset >= firstVisibleItemScrollOffset + }.also { + previousIndex = firstVisibleItemIndex + previousScrollOffset = firstVisibleItemScrollOffset + } + } + }.value +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 415516dc4e3..ac4c23ea546 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,7 +6,7 @@ Version %s - Request %1$s unthemed icons + Request icons From 3feb3786bfb8db1c2a9a712feb592b95e669c029 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Jun 2024 16:33:34 +0800 Subject: [PATCH 137/527] Refactor IconInfo --- .../app/lawnchair/lawnicons/MainActivity.kt | 1 - .../app/lawnchair/lawnicons/model/IconInfo.kt | 109 +++++++++++------- .../lawnicons/model/IconInfoModel.kt | 5 - .../lawnchair/lawnicons/model/SearchInfo.kt | 4 +- .../lawnicons/repository/IconRepository.kt | 53 +++++---- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 3 +- .../ui/components/home/IconInfoPopup.kt | 13 ++- .../ui/components/home/IconPreview.kt | 25 +--- .../ui/components/home/IconPreviewGrid.kt | 9 +- .../ui/components/home/search/SearchBar.kt | 2 +- .../components/home/search/SearchContents.kt | 21 ++-- .../lawnicons/ui/destination/Home.kt | 15 +-- .../lawnicons/ui/util/PreviewUtils.kt | 29 +++-- .../lawnchair/lawnicons/util/GetIconInfo.kt | 14 ++- .../lawnicons/util/GetSystemPackageList.kt | 8 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 2 +- 16 files changed, 165 insertions(+), 148 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index d7dd7908302..9ee39120982 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass -import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toBitmap diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 45e2eb1f4b6..9152d73833f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -3,58 +3,85 @@ package app.lawnchair.lawnicons.model /** * Data class to hold information about an icon. * - * @property name The name of the icon. * @property drawableName The name of the drawable resource for the icon. - * @property componentName The component name of the app that owns the icon. + * @property componentNames A list of [LabelAndComponent] objects representing the component names and + * labels of the apps that have the icon. * @property id A unique identifier for the icon. */ data class IconInfo( - val name: String, val drawableName: String, - val componentName: String, - val id: Int, + val componentNames: List, + val id: Int ) { - companion object { - fun convert(groupedList: List): List { - val result = mutableListOf() - for (grouped in groupedList) { - for (i in grouped.names.indices) { - result.add( - IconInfo( - name = grouped.names[i], - drawableName = grouped.drawableName, - componentName = grouped.componentNames[i], - id = grouped.id - ) - ) - } - } - return result - } - } + /** + * The user-facing label associated with the icon, derived from the first available + * [LabelAndComponent] object. + */ + val label = componentNames.firstOrNull()?.label ?: "" } -data class IconInfoGrouped( - val names: List, - val drawableName: String, - val componentNames: List, - val id: Int -) { - companion object { - fun convert(iconInfoList: List): List { - // Group by drawableName - return iconInfoList - .groupBy { it.drawableName } - .map { (drawableName, icons) -> - require(icons.all { it.id == icons[0].id }) { "Icon IDs in a group must be the same" } +/** + * A helper object for processing and manipulating collections of [IconInfo] objects, + * including merging and splitting based on drawable names and component names. + */ +object IconInfoManager { + /** + * Merges a list of [IconInfo] objects, grouping them by their `drawableName` and + * combining the `componentNames` of icons with the same drawable name. + * + * @param iconInfoList The list of [IconInfo] objects to merge. + * @return A new list of [IconInfo] objects with merged component names for icons + * sharing the same drawable name. + */ + fun mergeByDrawableName(iconInfoList: List): List { + return iconInfoList.groupBy { it.drawableName } + .map { (drawableName, icons) -> + val mergedComponentNames = icons.flatMap { it.componentNames } + IconInfo( + componentNames = mergedComponentNames, + drawableName = drawableName, + id = icons.first().id, // Consider a more robust ID selection strategy + ) + } + } - IconInfoGrouped( - names = icons.map { it.name }, - drawableName = drawableName, - componentNames = icons.map { it.componentName }, - id = icons[0].id // Assuming IDs in the group are the same + /** + * Splits [IconInfo] objects with multiple component names into a list where each + * [IconInfo] object has a single component name. + * + * @param iconInfoList The list of [IconInfo] objects to split. + * @return A new list of [IconInfo] objects, each with a single component name. + */ + fun splitByComponentName(iconInfoList: List): List { + val splitList = mutableListOf() + for (iconInfo in iconInfoList) { + for (nameAndComponent in iconInfo.componentNames) { + splitList.add( + IconInfo( + componentNames = listOf(nameAndComponent), + drawableName = iconInfo.drawableName, + id = iconInfo.id // You might need a better strategy for assigning IDs ) + ) } } + return splitList } } + +fun IconInfo.getFirstLabelAndComponent(): LabelAndComponent { + val firstLabel = componentNames.firstOrNull()?.label ?: "" + val firstComponent = componentNames.firstOrNull()?.componentName ?: "" + return LabelAndComponent(firstLabel, firstComponent) +} + +/** + * Data class representing a label and component name pair. + * + * @property label The user-facing label associated with the component. + * @property componentName The name of the component, typically a fully qualified class name. + */ +data class LabelAndComponent( + val label: String, + val componentName: String +) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt index 2718c2a9a46..716402f815f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt @@ -12,8 +12,3 @@ data class IconInfoModel( val iconInfo: ImmutableList, val iconCount: Int, ) - -data class IconInfoGroupedModel( - val iconInfo: ImmutableList, - val iconCount: Int, -) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt index 1af94265539..55834a55756 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/SearchInfo.kt @@ -7,7 +7,7 @@ data class SearchInfo( ) enum class SearchMode { - NAME, - PACKAGE_NAME, + LABEL, + COMPONENT, DRAWABLE, } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 84cf9f4147c..14a5f936b01 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -2,13 +2,13 @@ package app.lawnchair.lawnicons.repository import android.app.Application import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoGrouped -import app.lawnchair.lawnicons.model.IconInfoGroupedModel +import app.lawnchair.lawnicons.model.IconInfoManager import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.model.SearchInfo import app.lawnchair.lawnicons.model.SearchMode +import app.lawnchair.lawnicons.model.getFirstLabelAndComponent import app.lawnchair.lawnicons.util.getIconInfo import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter import javax.inject.Inject @@ -25,7 +25,7 @@ class IconRepository @Inject constructor(application: Application) { private val coroutineScope = CoroutineScope(Dispatchers.IO) private var iconInfo: List = emptyList() - val iconInfoModel = MutableStateFlow(value = null) + val iconInfoModel = MutableStateFlow(value = null) val searchedIconInfoModel = MutableStateFlow(value = null) private var systemPackageList: List? = null var iconRequestList = MutableStateFlow(value = null) @@ -36,25 +36,25 @@ class IconRepository @Inject constructor(application: Application) { coroutineScope.launch { application.getIconInfo() .also { list -> - iconInfo = list.sortedBy { it.name.lowercase() } + iconInfo = list.sortedBy { it.label.lowercase() } } - .associateBy { it.name }.values + .associateBy { it.label }.values .also { iconCount = it.size } - iconInfoModel.value = IconInfoGroupedModel( - iconInfo = IconInfoGrouped.convert(iconInfo).toPersistentList(), + iconInfoModel.value = IconInfoModel( + iconInfo = iconInfo.toPersistentList(), iconCount = iconCount, ) searchedIconInfoModel.value = IconInfoModel( - iconInfo = iconInfo.toPersistentList(), + iconInfo = IconInfoManager.splitByComponentName(iconInfo).toPersistentList(), iconCount = iconCount, ) systemPackageList = application.getSystemIconInfoAppfilter() - .associateBy { it.name }.values - .sortedBy { it.name.lowercase() } + .associateBy { it.label }.values + .sortedBy { it.label.lowercase() } getIconRequestList() } @@ -64,12 +64,14 @@ class IconRepository @Inject constructor(application: Application) { mode: SearchMode, query: String, ) = withContext(Dispatchers.Default) { - searchedIconInfoModel.value = iconInfo.let { + searchedIconInfoModel.value = IconInfoManager + .splitByComponentName(iconInfo) + .let { val filtered = it.mapNotNull { candidate -> val searchIn = when (mode) { - SearchMode.NAME -> candidate.name - SearchMode.PACKAGE_NAME -> candidate.componentName + SearchMode.LABEL -> candidate.getFirstLabelAndComponent().label + SearchMode.COMPONENT -> candidate.getFirstLabelAndComponent().componentName SearchMode.DRAWABLE -> candidate.drawableName } val indexOfMatch = @@ -101,7 +103,7 @@ class IconRepository @Inject constructor(application: Application) { searchedIconInfoModel.value = iconInfoModel.value?.let { IconInfoModel( iconCount = it.iconCount, - iconInfo = IconInfo.convert(it.iconInfo).toImmutableList(), + iconInfo = IconInfoManager.splitByComponentName(iconInfo).toPersistentList(), ) } } @@ -110,19 +112,26 @@ class IconRepository @Inject constructor(application: Application) { iconRequestList.value = systemPackageList?.let { packageList -> val lawniconsData = iconInfo - val systemData = packageList.map { - IconRequest( - it.name, - it.componentName, - ) + val systemData = packageList.map { info -> + info.getFirstLabelAndComponent().also { + IconRequest( + it.label, + it.componentName, + ) + } } - val lawniconsComponents = lawniconsData - .map { it.componentName } + val lawniconsComponents = IconInfoManager.splitByComponentName(lawniconsData) + .map { it.getFirstLabelAndComponent().componentName } .sortedBy { it.lowercase() } .toSet() - val commonItems = systemData.filter { it.componentName !in lawniconsComponents } + val commonItems = systemData.filter { it.componentName !in lawniconsComponents }.map { + IconRequest( + it.label, + it.componentName, + ) + } IconRequestModel( list = commonItems.toImmutableList(), diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 580453ca9bf..9d310280776 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -16,7 +16,6 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements @@ -32,7 +31,7 @@ import soup.compose.material.motion.animation.rememberSlideDistance @ExperimentalFoundationApi fun Lawnicons( windowSizeClass: WindowSizeClass, - onSendResult: (IconInfoGrouped) -> Unit, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 2b50b7fc19f..38d29a0e45f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -9,6 +9,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Call import androidx.compose.material.icons.rounded.Email @@ -28,7 +30,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfoGrouped +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.IconLink import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.SimpleListRow @@ -39,7 +41,7 @@ import app.lawnchair.lawnicons.ui.util.SampleData @OptIn(ExperimentalMaterial3Api::class) @Composable fun IconInfoPopup( - iconInfo: IconInfoGrouped, + iconInfo: IconInfo, modifier: Modifier = Modifier, isPopupShown: (Boolean) -> Unit, ) { @@ -60,6 +62,7 @@ fun IconInfoPopup( ) { Column( modifier = Modifier + .verticalScroll(rememberScrollState()) .fillMaxWidth(), ) { Row( @@ -118,7 +121,7 @@ fun IconInfoPopup( Card( label = stringResource(id = R.string.package_prefix), ) { - val data = iconInfo.names zip iconInfo.componentNames + val data = iconInfo.componentNames data.forEach { (name, componentName) -> SimpleListRow( label = name, @@ -138,9 +141,7 @@ private fun IconInfoPopupPreview() { val showPopup = remember { mutableStateOf(true) } LawniconsTheme { IconInfoPopup( - iconInfo = IconInfoGrouped.convert( - listOf(SampleData.iconInfoSample) - )[0], + iconInfo = SampleData.iconInfoSample ) { showPopup.value = it } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index 26a9afe5088..6a53e69758e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -39,6 +38,7 @@ private fun ColorScheme.iconColor(): Color { return primary.copy(alpha = alpha).compositeOver(surface) } + @Composable fun IconPreview( iconInfo: IconInfo, @@ -46,25 +46,6 @@ fun IconPreview( modifier: Modifier = Modifier, iconBackground: Color? = null, isIconPicker: Boolean = false, -) { - IconPreview( - iconInfo = IconInfoGrouped.convert(listOf(iconInfo))[0], - onSendResult = { - onSendResult(IconInfo.convert(listOf(it))[0]) - }, - modifier = modifier, - iconBackground = iconBackground, - isIconPicker = isIconPicker, - ) -} - -@Composable -fun IconPreview( - iconInfo: IconInfoGrouped, - onSendResult: (IconInfoGrouped) -> Unit, - modifier: Modifier = Modifier, - iconBackground: Color? = null, - isIconPicker: Boolean = false, ) { val isIconInfoShown = remember { mutableStateOf(false) } @@ -135,9 +116,7 @@ fun IconPreview( private fun IconPreviewComposablePreview() { LawniconsTheme { IconPreview( - iconInfo = IconInfoGrouped.convert( - listOf(SampleData.iconInfoSample) - )[0], + iconInfo = SampleData.iconInfoSample, {}, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 329f2078b3d..03274d5ddae 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -20,13 +20,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.model.IconInfoGrouped +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toImmutableList import my.nanihadesuka.compose.LazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSelectionMode import my.nanihadesuka.compose.ScrollbarSettings @@ -34,9 +33,9 @@ import my.nanihadesuka.compose.ScrollbarSettings @Composable @ExperimentalFoundationApi fun IconPreviewGrid( - iconInfo: ImmutableList, + iconInfo: ImmutableList, isExpandedScreen: Boolean, - onSendResult: (IconInfoGrouped) -> Unit, + onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, @@ -97,7 +96,7 @@ fun IconPreviewGrid( private fun IconGridPreview() { LawniconsTheme { IconPreviewGrid( - IconInfoGrouped.convert(SampleData.iconInfoList).toImmutableList(), + SampleData.iconInfoList, true, {}, Modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index a595f78449f..93b309b04b2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -299,7 +299,7 @@ private fun SearchBarPreview() { content = { SearchContents( "", - SearchMode.NAME, + SearchMode.LABEL, {}, iconInfo, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index ad979681239..ecd5acfcc71 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -33,15 +33,14 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.model.SearchMode +import app.lawnchair.lawnicons.model.getFirstLabelAndComponent import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup import app.lawnchair.lawnicons.ui.components.home.IconPreview import kotlinx.collections.immutable.ImmutableList @@ -66,16 +65,16 @@ fun SearchContents( ) { FilterChip( leadingIcon = { - AnimatedVisibility(searchMode == SearchMode.NAME) { + AnimatedVisibility(searchMode == SearchMode.LABEL) { Icon( imageVector = Icons.Rounded.Check, contentDescription = null, ) } }, - selected = searchMode == SearchMode.NAME, + selected = searchMode == SearchMode.LABEL, onClick = { - onModeChange(SearchMode.NAME) + onModeChange(SearchMode.LABEL) }, label = { Text(text = stringResource(R.string.name)) @@ -83,16 +82,16 @@ fun SearchContents( ) FilterChip( leadingIcon = { - AnimatedVisibility(searchMode == SearchMode.PACKAGE_NAME) { + AnimatedVisibility(searchMode == SearchMode.COMPONENT) { Icon( imageVector = Icons.Rounded.Check, contentDescription = null, ) } }, - selected = searchMode == SearchMode.PACKAGE_NAME, + selected = searchMode == SearchMode.COMPONENT, onClick = { - onModeChange(SearchMode.PACKAGE_NAME) + onModeChange(SearchMode.COMPONENT) }, label = { Text(text = stringResource(id = R.string.package_prefix)) @@ -175,8 +174,8 @@ private fun IconInfoListItem(iconInfo: ImmutableList) { val isIconInfoAppfilterShown = remember { mutableStateOf(false) } ListItem( - headlineContent = { Text(it.name) }, - supportingContent = { Text(it.componentName) }, + headlineContent = { Text(it.getFirstLabelAndComponent().label) }, + supportingContent = { Text(it.getFirstLabelAndComponent().componentName) }, leadingContent = { Box( contentAlignment = Alignment.Center, @@ -198,7 +197,7 @@ private fun IconInfoListItem(iconInfo: ImmutableList) { ) if (isIconInfoAppfilterShown.value) { IconInfoPopup( - iconInfo = IconInfoGrouped.convert(listOf(it))[0], + iconInfo = it, ) { isIconInfoAppfilterShown.value = it } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 712823fcb09..f48b8b11792 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -1,7 +1,6 @@ package app.lawnchair.lawnicons.ui.destination import androidx.compose.animation.Crossfade -import androidx.compose.animation.core.animateValueAsState import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -9,7 +8,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -19,7 +17,6 @@ import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoGrouped import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB @@ -29,16 +26,14 @@ import app.lawnchair.lawnicons.ui.components.home.search.SearchContents import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData -import app.lawnchair.lawnicons.ui.util.isScrollingUp import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.delay @OptIn(ExperimentalFoundationApi::class) @Composable fun Home( onNavigate: (String) -> Unit, - onSendResult: (IconInfoGrouped) -> Unit, + onSendResult: (IconInfo) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, isIconPicker: Boolean = false, @@ -89,7 +84,7 @@ fun Home( }, iconInfo = it.iconInfo, onSendResult = { - onSendResult(IconInfoGrouped.convert(listOf(it))[0]) + onSendResult(it) }, ) }, @@ -129,7 +124,7 @@ fun Home( @Composable private fun HomePreview() { var searchTerm by remember { mutableStateOf(value = "") } - val iconInfo = IconInfoGrouped.convert(SampleData.iconInfoList) + val iconInfo = SampleData.iconInfoList LawniconsTheme { LawniconsSearchBar( @@ -148,9 +143,9 @@ private fun HomePreview() { content = { SearchContents( "", - SearchMode.NAME, + SearchMode.LABEL, {}, - iconInfo = IconInfo.convert(iconInfo).toImmutableList(), + iconInfo = iconInfo, ) }, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt index ad358ebd279..5ccfc7c8445 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt @@ -4,6 +4,7 @@ import android.content.res.Configuration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Wallpapers import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.LabelAndComponent import kotlinx.collections.immutable.persistentListOf @Preview( @@ -32,29 +33,33 @@ annotation class PreviewLawnicons object SampleData { val iconInfoSample = IconInfo( - name = "Email", drawableName = "@drawable/email", - componentName = "com.android.email", - id = 1, + componentNames = listOf( + LabelAndComponent("Email", "com.android.email") + ), + id = 1 ) val iconInfoList = persistentListOf( IconInfo( - name = "Email", drawableName = "@drawable/email", - componentName = "com.android.email", - id = 1, + componentNames = listOf( + LabelAndComponent("Email", "com.android.email") + ), + id = 1 ), IconInfo( - name = "Search", drawableName = "@drawable/search", - componentName = "com.android.search", - id = 2, + componentNames = listOf( + LabelAndComponent("Search", "com.android.search") + ), + id = 2 ), IconInfo( - name = "Phone", drawableName = "@drawable/phone", - componentName = "com.android.phone", - id = 3, + componentNames = listOf( + LabelAndComponent("Phone", "com.android.phone") + ), + id = 3 ), ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index 800d74dd783..b504aeed744 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -4,11 +4,13 @@ import android.annotation.SuppressLint import android.content.Context import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoManager +import app.lawnchair.lawnicons.model.LabelAndComponent import org.xmlpull.v1.XmlPullParser @SuppressLint("DiscouragedApi") fun Context.getIconInfo(): List { - val iconInfo = mutableListOf() + var iconInfo = mutableListOf() val componentInfoPrefixLength = "ComponentInfo{".length @@ -45,7 +47,13 @@ fun Context.getIconInfo(): List { actualComponent = parsedComponent } - iconInfo.add(IconInfo(iconName, iconId, actualComponent, iconDrawable)) + iconInfo.add( + IconInfo( + iconId, + listOf(LabelAndComponent(iconName, actualComponent)), + iconDrawable + ) + ) } } } @@ -53,5 +61,5 @@ fun Context.getIconInfo(): List { e.printStackTrace() } - return iconInfo + return IconInfoManager.mergeByDrawableName(iconInfo) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt index 7c3a7175b17..34b8c3f1b24 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.content.pm.PackageManager import android.content.pm.ResolveInfo import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.LabelAndComponent fun Context.getPackagesList(): List { return try { @@ -26,10 +27,11 @@ fun Context.getSystemIconInfoAppfilter(): List { val name = loadLabel(packageManager) ?: riPkg IconInfo( - name = name.toString(), - componentName = component, - id = 0, drawableName = "", + componentNames = listOf( + LabelAndComponent(name.toString(), component) + ), + id = 0 ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 96ec07dee15..f7e7a3e3242 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -23,7 +23,7 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep @JvmField val iconRequestList = iconRepository.iconRequestList - private var _searchMode by mutableStateOf(SearchMode.NAME) + private var _searchMode by mutableStateOf(SearchMode.LABEL) private var _searchTerm by mutableStateOf("") val searchMode: SearchMode From a46f5e4ea25dcb03596cb165d16454b1960cf5e9 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Jun 2024 16:54:57 +0800 Subject: [PATCH 138/527] Allow copy-pasting of componentNames --- .../lawnicons/ui/components/ContributorRow.kt | 2 +- .../components/ContributorRowPlaceholder.kt | 2 +- .../lawnicons/ui/components/core/Card.kt | 2 +- .../lawnicons/ui/components/core/ListRow.kt | 11 +++++-- .../ui/components/core/SimpleListRow.kt | 6 ++-- .../ui/components/home/IconInfoPopup.kt | 32 +++++++++++++++++-- .../components/home/search/SearchContents.kt | 2 +- .../main/res/drawable/copy_to_clipboard.xml | 5 +++ app/src/main/res/values-fil/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-id/strings.xml | 2 +- app/src/main/res/values-mr/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values/strings.xml | 4 ++- 15 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/drawable/copy_to_clipboard.xml diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRow.kt index a0a931eb5ac..3921b8e0e22 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRow.kt @@ -53,7 +53,7 @@ fun ContributorRow( label = name, description = description, onClick = onClick, - icon = { + startIcon = { if (LocalInspectionMode.current) { Icon(Icons.Rounded.Star, contentDescription = null) } else { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRowPlaceholder.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRowPlaceholder.kt index ee502f93fbb..88b3859e758 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRowPlaceholder.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ContributorRowPlaceholder.kt @@ -32,7 +32,7 @@ fun ContributorRowPlaceholder( background = true, first = first, last = last, - icon = { + startIcon = { Box( modifier = Modifier .size(32.dp) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt index ce678648cc8..94855617e6b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt @@ -25,7 +25,7 @@ fun Card( text = label, style = MaterialTheme.typography.titleSmall, color = MaterialTheme.colorScheme.primary, - modifier = Modifier.padding(start = 32.dp, bottom = 12.dp), + modifier = Modifier.padding(start = 32.dp, bottom = 6.dp), ) } Surface( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index 2fdd0674e91..6b9c2adc040 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -29,7 +29,8 @@ fun ListRow( label: @Composable () -> Unit, modifier: Modifier = Modifier, description: (@Composable () -> Unit)? = null, - icon: (@Composable () -> Unit)? = null, + startIcon: (@Composable () -> Unit)? = null, + endIcon: (@Composable () -> Unit)? = null, tall: Boolean = description != null, divider: Boolean = true, background: Boolean = false, @@ -92,7 +93,8 @@ fun ListRow( Content( label = label, description = description, - icon = icon, + icon = startIcon, + endIcon = endIcon, onClick = onClick, ) } @@ -103,6 +105,7 @@ private fun Content( label: @Composable () -> Unit, description: (@Composable () -> Unit)?, icon: (@Composable () -> Unit)?, + endIcon: (@Composable () -> Unit)?, onClick: (() -> Unit)?, ) { Row( @@ -128,5 +131,9 @@ private fun Content( description() } } + if (endIcon != null) { + Spacer(modifier = Modifier.weight(1f)) + endIcon() + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/SimpleListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/SimpleListRow.kt index eb791ac3d37..e8b81b7713d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/SimpleListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/SimpleListRow.kt @@ -13,7 +13,8 @@ fun SimpleListRow( label: String, modifier: Modifier = Modifier, description: String? = null, - icon: (@Composable () -> Unit)? = null, + startIcon: (@Composable () -> Unit)? = null, + endIcon: (@Composable () -> Unit)? = null, tall: Boolean = description != null, divider: Boolean = true, background: Boolean = false, @@ -23,7 +24,8 @@ fun SimpleListRow( ) { ListRow( modifier = modifier, - icon = icon, + startIcon = startIcon, + endIcon = endIcon, tall = tall, divider = divider, background = background, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 38d29a0e45f..e1bd00b928a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -1,5 +1,6 @@ package app.lawnchair.lawnicons.ui.components.home +import android.content.ClipData import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -18,6 +19,7 @@ import androidx.compose.material.icons.rounded.Search import androidx.compose.material.icons.rounded.Warning import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.rememberModalBottomSheetState @@ -37,6 +39,9 @@ import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData +import android.content.ClipboardManager +import android.content.Context +import androidx.compose.ui.platform.LocalContext @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -96,6 +101,7 @@ fun IconInfoPopup( oldValue = "_foreground", newValue = "", ) + Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center, @@ -119,13 +125,29 @@ fun IconInfoPopup( Spacer(Modifier.height(16.dp)) Card( - label = stringResource(id = R.string.package_prefix), + label = stringResource(id = R.string.mapped_components), ) { val data = iconInfo.componentNames - data.forEach { (name, componentName) -> + data.forEachIndexed { index, (name, componentName) -> SimpleListRow( label = name, description = componentName, + first = index == 0, + last = index == data.lastIndex, + endIcon = { + val context = LocalContext.current + IconButton(onClick = { + copyTextToClipboard(context, "${name}%0A${componentName}") + }) { + Icon( + painter = painterResource(id = R.drawable.copy_to_clipboard), + contentDescription = stringResource( + R.string.copy_to_clipboard, + ), + tint = MaterialTheme.colorScheme.onBackground, + ) + } + }, ) } } @@ -135,6 +157,12 @@ fun IconInfoPopup( } } +private fun copyTextToClipboard(context: Context, text: String) { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) + clipboard.setPrimaryClip(clip) +} + @PreviewLawnicons @Composable private fun IconInfoPopupPreview() { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index ecd5acfcc71..5e309d953f6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -94,7 +94,7 @@ fun SearchContents( onModeChange(SearchMode.COMPONENT) }, label = { - Text(text = stringResource(id = R.string.package_prefix)) + Text(text = stringResource(id = R.string.mapped_components)) }, ) FilterChip( diff --git a/app/src/main/res/drawable/copy_to_clipboard.xml b/app/src/main/res/drawable/copy_to_clipboard.xml new file mode 100644 index 00000000000..942aeb962da --- /dev/null +++ b/app/src/main/res/drawable/copy_to_clipboard.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 60cefb9495e..5b9c30e0627 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -13,6 +13,6 @@ Sa pagbibigay-inspirasyon sa icon ng app Sa pagbigay-pangalan sa app Maaring iguhit - Pakete + Pakete Form sa paghiling ng icons diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f0211f545dc..6651d9021f5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -49,5 +49,5 @@ Élément graphique - Application + Application diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 33ef213e93c..0d191b5d28c 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -44,5 +44,5 @@ ड्रॉएबल - पैकेज + पैकेज diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index eb357c50de3..2fc7a1fa03b 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -49,5 +49,5 @@ Drawable - Paket nama + Paket nama diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 64ae4c9cb7a..8f9291585e7 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -46,5 +46,5 @@ ड्रॉएबल - पैकेज + पैकेज diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c1b29aa4dbc..60e066dacef 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -49,5 +49,5 @@ Element graficzny - Pakiet + Pakiet diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac4c23ea546..e7b74f1bf4e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -57,7 +57,9 @@ Drawable - Component name + Mapped components If the icon is outdated due to rebranding, create an issue on GitHub. + Copy to clipboard + Copied text From ecef4acddf83f8aacd82f9f0d26a89762baa3d11 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Jun 2024 16:56:44 +0800 Subject: [PATCH 139/527] Apply spotless --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 10 ++-- .../lawnicons/repository/IconRepository.kt | 58 +++++++++---------- .../ui/components/home/IconInfoPopup.kt | 10 ++-- .../ui/components/home/IconPreview.kt | 1 - .../ui/components/home/IconPreviewGrid.kt | 2 +- .../ui/components/home/IconRequestFAB.kt | 2 - .../lawnicons/ui/destination/Home.kt | 2 +- .../lawnicons/ui/util/PreviewUtils.kt | 16 ++--- .../lawnchair/lawnicons/util/GetIconInfo.kt | 4 +- .../lawnicons/util/GetSystemPackageList.kt | 4 +- 10 files changed, 53 insertions(+), 56 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 9152d73833f..7d3a6351f6b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -11,7 +11,7 @@ package app.lawnchair.lawnicons.model data class IconInfo( val drawableName: String, val componentNames: List, - val id: Int + val id: Int, ) { /** * The user-facing label associated with the icon, derived from the first available @@ -40,7 +40,7 @@ object IconInfoManager { IconInfo( componentNames = mergedComponentNames, drawableName = drawableName, - id = icons.first().id, // Consider a more robust ID selection strategy + id = icons.first().id, ) } } @@ -60,8 +60,8 @@ object IconInfoManager { IconInfo( componentNames = listOf(nameAndComponent), drawableName = iconInfo.drawableName, - id = iconInfo.id // You might need a better strategy for assigning IDs - ) + id = iconInfo.id, + ), ) } } @@ -83,5 +83,5 @@ fun IconInfo.getFirstLabelAndComponent(): LabelAndComponent { */ data class LabelAndComponent( val label: String, - val componentName: String + val componentName: String, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 14a5f936b01..1fdf8d888d3 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -67,36 +67,36 @@ class IconRepository @Inject constructor(application: Application) { searchedIconInfoModel.value = IconInfoManager .splitByComponentName(iconInfo) .let { - val filtered = it.mapNotNull { candidate -> - val searchIn = - when (mode) { - SearchMode.LABEL -> candidate.getFirstLabelAndComponent().label - SearchMode.COMPONENT -> candidate.getFirstLabelAndComponent().componentName - SearchMode.DRAWABLE -> candidate.drawableName - } - val indexOfMatch = - searchIn.indexOf(string = query, ignoreCase = true).also { index -> - if (index == -1) return@mapNotNull null - } - val matchAtWordStart = indexOfMatch == 0 || searchIn[indexOfMatch - 1] == ' ' - SearchInfo( - iconInfo = candidate, - indexOfMatch = indexOfMatch, - matchAtWordStart = matchAtWordStart, + val filtered = it.mapNotNull { candidate -> + val searchIn = + when (mode) { + SearchMode.LABEL -> candidate.getFirstLabelAndComponent().label + SearchMode.COMPONENT -> candidate.getFirstLabelAndComponent().componentName + SearchMode.DRAWABLE -> candidate.drawableName + } + val indexOfMatch = + searchIn.indexOf(string = query, ignoreCase = true).also { index -> + if (index == -1) return@mapNotNull null + } + val matchAtWordStart = indexOfMatch == 0 || searchIn[indexOfMatch - 1] == ' ' + SearchInfo( + iconInfo = candidate, + indexOfMatch = indexOfMatch, + matchAtWordStart = matchAtWordStart, + ) + }.sortedWith( + compareBy( + { searchInfo -> !searchInfo.matchAtWordStart }, + { searchInfo -> searchInfo.indexOfMatch }, + ), + ).map { searchInfo -> + searchInfo.iconInfo + }.toPersistentList() + IconInfoModel( + iconCount = it.size, + iconInfo = filtered, ) - }.sortedWith( - compareBy( - { searchInfo -> !searchInfo.matchAtWordStart }, - { searchInfo -> searchInfo.indexOfMatch }, - ), - ).map { searchInfo -> - searchInfo.iconInfo - }.toPersistentList() - IconInfoModel( - iconCount = it.size, - iconInfo = filtered, - ) - } + } } fun clear() { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index e1bd00b928a..75b13d8c2cb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -1,6 +1,8 @@ package app.lawnchair.lawnicons.ui.components.home import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -27,6 +29,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -39,9 +42,6 @@ import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData -import android.content.ClipboardManager -import android.content.Context -import androidx.compose.ui.platform.LocalContext @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -137,7 +137,7 @@ fun IconInfoPopup( endIcon = { val context = LocalContext.current IconButton(onClick = { - copyTextToClipboard(context, "${name}%0A${componentName}") + copyTextToClipboard(context, "$name%0A$componentName") }) { Icon( painter = painterResource(id = R.drawable.copy_to_clipboard), @@ -169,7 +169,7 @@ private fun IconInfoPopupPreview() { val showPopup = remember { mutableStateOf(true) } LawniconsTheme { IconInfoPopup( - iconInfo = SampleData.iconInfoSample + iconInfo = SampleData.iconInfoSample, ) { showPopup.value = it } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index 6a53e69758e..640595a1885 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -38,7 +38,6 @@ private fun ColorScheme.iconColor(): Color { return primary.copy(alpha = alpha).compositeOver(surface) } - @Composable fun IconPreview( iconInfo: IconInfo, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 03274d5ddae..1218ec3cd06 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -76,7 +76,7 @@ fun IconPreviewGrid( additionalEnd = 32.dp, ) }, - state = listState + state = listState, ) { items(items = iconInfo) { iconInfo -> IconPreview( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 08630710870..a8d96866a52 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -8,9 +8,7 @@ import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index f48b8b11792..eb46e37ec62 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -106,7 +106,7 @@ fun Home( isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, onSendResult = onSendResult, - listState = lazyGridState + listState = lazyGridState, ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt index 5ccfc7c8445..1e7543669b7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt @@ -35,31 +35,31 @@ object SampleData { val iconInfoSample = IconInfo( drawableName = "@drawable/email", componentNames = listOf( - LabelAndComponent("Email", "com.android.email") + LabelAndComponent("Email", "com.android.email"), ), - id = 1 + id = 1, ) val iconInfoList = persistentListOf( IconInfo( drawableName = "@drawable/email", componentNames = listOf( - LabelAndComponent("Email", "com.android.email") + LabelAndComponent("Email", "com.android.email"), ), - id = 1 + id = 1, ), IconInfo( drawableName = "@drawable/search", componentNames = listOf( - LabelAndComponent("Search", "com.android.search") + LabelAndComponent("Search", "com.android.search"), ), - id = 2 + id = 2, ), IconInfo( drawableName = "@drawable/phone", componentNames = listOf( - LabelAndComponent("Phone", "com.android.phone") + LabelAndComponent("Phone", "com.android.phone"), ), - id = 3 + id = 3, ), ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index b504aeed744..abcd3fac554 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -51,8 +51,8 @@ fun Context.getIconInfo(): List { IconInfo( iconId, listOf(LabelAndComponent(iconName, actualComponent)), - iconDrawable - ) + iconDrawable, + ), ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt index 34b8c3f1b24..bb1e78e9707 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -29,9 +29,9 @@ fun Context.getSystemIconInfoAppfilter(): List { IconInfo( drawableName = "", componentNames = listOf( - LabelAndComponent(name.toString(), component) + LabelAndComponent(name.toString(), component), ), - id = 0 + id = 0, ) } } From 25cdac18c89ec29f3626430c6319fabb288852cd Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Jun 2024 17:37:20 +0800 Subject: [PATCH 140/527] Tweak heights of list items --- .../lawnicons/ui/components/core/ListRow.kt | 10 ++++-- .../ui/components/home/IconInfoPopup.kt | 32 +++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index 6b9c2adc040..70db0c9d0d4 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp private val basePadding = 16.dp @@ -28,6 +29,7 @@ private val basePadding = 16.dp fun ListRow( label: @Composable () -> Unit, modifier: Modifier = Modifier, + contentModifier: Modifier = Modifier, description: (@Composable () -> Unit)? = null, startIcon: (@Composable () -> Unit)? = null, endIcon: (@Composable () -> Unit)? = null, @@ -37,8 +39,8 @@ fun ListRow( first: Boolean = false, last: Boolean = false, onClick: (() -> Unit)? = null, + height: Dp? = null, ) { - val height = if (tall) 72.dp else 56.dp val dividerHeight = 1.dp val dividerHeightPx = with(LocalDensity.current) { dividerHeight.toPx() } val dividerColor = MaterialTheme.colorScheme.outlineVariant @@ -49,7 +51,7 @@ fun ListRow( Box( modifier = modifier .fillMaxWidth() - .height(height) + .height(height ?: if (tall) 72.dp else 56.dp) .then( if (background) { Modifier @@ -96,6 +98,7 @@ fun ListRow( icon = startIcon, endIcon = endIcon, onClick = onClick, + modifier = contentModifier, ) } } @@ -107,10 +110,11 @@ private fun Content( icon: (@Composable () -> Unit)?, endIcon: (@Composable () -> Unit)?, onClick: (() -> Unit)?, + modifier: Modifier = Modifier, ) { Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier + modifier = modifier .fillMaxSize() .then( if (onClick != null) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt index 75b13d8c2cb..74f0c284dfb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -24,6 +25,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf @@ -33,11 +35,13 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.IconLink import app.lawnchair.lawnicons.ui.components.core.Card +import app.lawnchair.lawnicons.ui.components.core.ListRow import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @@ -128,16 +132,30 @@ fun IconInfoPopup( label = stringResource(id = R.string.mapped_components), ) { val data = iconInfo.componentNames - data.forEachIndexed { index, (name, componentName) -> - SimpleListRow( - label = name, - description = componentName, + data.forEachIndexed { index, (label, componentName) -> + ListRow( + label = { + Text( + text = label, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + }, + contentModifier = Modifier.padding(vertical = 8.dp), + description = { + Text( + text = componentName.replace("/", "/\n"), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + divider = index < data.lastIndex, first = index == 0, - last = index == data.lastIndex, + last = index == data.lastIndex && data.size > 1, endIcon = { val context = LocalContext.current IconButton(onClick = { - copyTextToClipboard(context, "$name%0A$componentName") + copyTextToClipboard(context, "$label%0A$componentName") }) { Icon( painter = painterResource(id = R.drawable.copy_to_clipboard), @@ -148,6 +166,8 @@ fun IconInfoPopup( ) } }, + tall = true, + height = 90.dp, ) } } From f670b8927dec9c9d4859a0e4d19534d3ca3dca83 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:17:12 +0300 Subject: [PATCH 141/527] [Barter 2] +100 icons: 70mai, Canara Ai1, Telebox (#2151) * [Barter 2] +100 icons: 70mai, Canara Ai1, Telebox * Minor fix --- app/assets/appfilter.xml | 100 ++++++++++++++++++++++++++++ svgs/_17track.svg | 1 + svgs/_360.svg | 1 + svgs/_70mai.svg | 1 + svgs/amazon_photos.svg | 1 + svgs/andropods.svg | 1 + svgs/angry_birds_2.svg | 1 + svgs/anywhere.svg | 1 + svgs/appchecker.svg | 1 + svgs/appverifier.svg | 1 + svgs/bacon.svg | 1 + svgs/booruhub.svg | 1 + svgs/brawlhalla.svg | 1 + svgs/brevent.svg | 1 + svgs/canara_ai1.svg | 1 + svgs/chatbot_ai_4o.svg | 1 + svgs/chess_clock.svg | 1 + svgs/colectivos_bahia_blanca.svg | 1 + svgs/compress_image_size.svg | 1 + svgs/diskdigger.svg | 1 + svgs/dunkin.svg | 1 + svgs/emag.svg | 1 + svgs/fitnotes.svg | 1 + svgs/fliggy.svg | 1 + svgs/foxit.svg | 1 + svgs/game_dev_tycoon.svg | 1 + svgs/gamepad_tester.svg | 1 + svgs/gba_emulator.svg | 1 + svgs/geminiman.svg | 1 + svgs/gsam_battery_monitor.svg | 1 + svgs/halfbrick_plus.svg | 1 + svgs/hello.svg | 1 + svgs/hiper_calc_pro.svg | 1 + svgs/hollow_knight.svg | 1 + svgs/homework_help.svg | 1 + svgs/honeygain.svg | 1 + svgs/huxone_dark_icons.svg | 1 + svgs/idealo.svg | 1 + svgs/interstellar.svg | 1 + svgs/kinnu.svg | 1 + svgs/kyash.svg | 1 + svgs/labbit.svg | 1 + svgs/langeasy.svg | 1 + svgs/liker_land.svg | 1 + svgs/liteapks.svg | 1 + svgs/max_stream_hbo.svg | 1 + svgs/meteoblue.svg | 1 + svgs/metronome_beats.svg | 1 + svgs/mi_afip.svg | 1 + svgs/monopoly.svg | 1 + svgs/multi_calculator.svg | 1 + svgs/my_bpost.svg | 1 + svgs/my_oldboy.svg | 1 + svgs/newradiosupporter.svg | 1 + svgs/one4kwgt.svg | 1 + svgs/otobusum_nerede.svg | 1 + svgs/oyomi.svg | 1 + svgs/passgenpro.svg | 1 + svgs/pedometer.svg | 1 + svgs/phone_battery_complication.svg | 1 + svgs/pixel_wheels.svg | 1 + svgs/portal_pasazera.svg | 1 + svgs/ppiicc.svg | 1 + svgs/precise_volume.svg | 1 + svgs/prison_empire_tycoon.svg | 1 + svgs/proto.svg | 1 + svgs/quick_settings.svg | 1 + svgs/rcx.svg | 1 + svgs/realme_store.svg | 1 + svgs/realsr.svg | 1 + svgs/renaissance_health.svg | 1 + svgs/rovio_classics.svg | 1 + svgs/sandwich.svg | 1 + svgs/sbi_mutual_fund.svg | 1 + svgs/screen_time_stayfree.svg | 1 + svgs/shadowsocks.svg | 1 + svgs/slickdeals.svg | 1 + svgs/soul_knight.svg | 1 + svgs/strawberry.svg | 1 + svgs/suntimes_calendars.svg | 1 + svgs/super_auto_pets.svg | 1 + svgs/tasker_settings.svg | 1 + svgs/telebox.svg | 1 + svgs/text_to_speech.svg | 1 + svgs/tooly.svg | 1 + svgs/trainline.svg | 1 + svgs/ukg_dimensions.svg | 1 + svgs/vivo_com.svg | 1 + svgs/vivo_tips.svg | 1 + svgs/voyager_for_lemmy.svg | 1 + svgs/vpnify.svg | 1 + svgs/wallpaperz.svg | 1 + svgs/wasted.svg | 1 + svgs/wear_installer.svg | 1 + svgs/weather_demo_library.svg | 1 + svgs/wetype.svg | 1 + svgs/wi_fi_toolkit.svg | 1 + svgs/wireless_adb.svg | 1 + svgs/yahoo_news.svg | 1 + svgs/yodobashi.svg | 1 + svgs/zugate.svg | 1 + 101 files changed, 200 insertions(+) create mode 100644 svgs/_17track.svg create mode 100644 svgs/_360.svg create mode 100644 svgs/_70mai.svg create mode 100644 svgs/amazon_photos.svg create mode 100644 svgs/andropods.svg create mode 100644 svgs/angry_birds_2.svg create mode 100644 svgs/anywhere.svg create mode 100644 svgs/appchecker.svg create mode 100644 svgs/appverifier.svg create mode 100644 svgs/bacon.svg create mode 100644 svgs/booruhub.svg create mode 100644 svgs/brawlhalla.svg create mode 100644 svgs/brevent.svg create mode 100644 svgs/canara_ai1.svg create mode 100644 svgs/chatbot_ai_4o.svg create mode 100644 svgs/chess_clock.svg create mode 100644 svgs/colectivos_bahia_blanca.svg create mode 100644 svgs/compress_image_size.svg create mode 100644 svgs/diskdigger.svg create mode 100644 svgs/dunkin.svg create mode 100644 svgs/emag.svg create mode 100644 svgs/fitnotes.svg create mode 100644 svgs/fliggy.svg create mode 100644 svgs/foxit.svg create mode 100644 svgs/game_dev_tycoon.svg create mode 100644 svgs/gamepad_tester.svg create mode 100644 svgs/gba_emulator.svg create mode 100644 svgs/geminiman.svg create mode 100644 svgs/gsam_battery_monitor.svg create mode 100644 svgs/halfbrick_plus.svg create mode 100644 svgs/hello.svg create mode 100644 svgs/hiper_calc_pro.svg create mode 100644 svgs/hollow_knight.svg create mode 100644 svgs/homework_help.svg create mode 100644 svgs/honeygain.svg create mode 100644 svgs/huxone_dark_icons.svg create mode 100644 svgs/idealo.svg create mode 100644 svgs/interstellar.svg create mode 100644 svgs/kinnu.svg create mode 100644 svgs/kyash.svg create mode 100644 svgs/labbit.svg create mode 100644 svgs/langeasy.svg create mode 100644 svgs/liker_land.svg create mode 100644 svgs/liteapks.svg create mode 100644 svgs/max_stream_hbo.svg create mode 100644 svgs/meteoblue.svg create mode 100644 svgs/metronome_beats.svg create mode 100644 svgs/mi_afip.svg create mode 100644 svgs/monopoly.svg create mode 100644 svgs/multi_calculator.svg create mode 100644 svgs/my_bpost.svg create mode 100644 svgs/my_oldboy.svg create mode 100644 svgs/newradiosupporter.svg create mode 100644 svgs/one4kwgt.svg create mode 100644 svgs/otobusum_nerede.svg create mode 100644 svgs/oyomi.svg create mode 100644 svgs/passgenpro.svg create mode 100644 svgs/pedometer.svg create mode 100644 svgs/phone_battery_complication.svg create mode 100644 svgs/pixel_wheels.svg create mode 100644 svgs/portal_pasazera.svg create mode 100644 svgs/ppiicc.svg create mode 100644 svgs/precise_volume.svg create mode 100644 svgs/prison_empire_tycoon.svg create mode 100644 svgs/proto.svg create mode 100644 svgs/quick_settings.svg create mode 100644 svgs/rcx.svg create mode 100644 svgs/realme_store.svg create mode 100644 svgs/realsr.svg create mode 100644 svgs/renaissance_health.svg create mode 100644 svgs/rovio_classics.svg create mode 100644 svgs/sandwich.svg create mode 100644 svgs/sbi_mutual_fund.svg create mode 100644 svgs/screen_time_stayfree.svg create mode 100644 svgs/shadowsocks.svg create mode 100644 svgs/slickdeals.svg create mode 100644 svgs/soul_knight.svg create mode 100644 svgs/strawberry.svg create mode 100644 svgs/suntimes_calendars.svg create mode 100644 svgs/super_auto_pets.svg create mode 100644 svgs/tasker_settings.svg create mode 100644 svgs/telebox.svg create mode 100644 svgs/text_to_speech.svg create mode 100644 svgs/tooly.svg create mode 100644 svgs/trainline.svg create mode 100644 svgs/ukg_dimensions.svg create mode 100644 svgs/vivo_com.svg create mode 100644 svgs/vivo_tips.svg create mode 100644 svgs/voyager_for_lemmy.svg create mode 100644 svgs/vpnify.svg create mode 100644 svgs/wallpaperz.svg create mode 100644 svgs/wasted.svg create mode 100644 svgs/wear_installer.svg create mode 100644 svgs/weather_demo_library.svg create mode 100644 svgs/wetype.svg create mode 100644 svgs/wi_fi_toolkit.svg create mode 100644 svgs/wireless_adb.svg create mode 100644 svgs/yahoo_news.svg create mode 100644 svgs/yodobashi.svg create mode 100644 svgs/zugate.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a1d4e0f3f37..8cc522d6c9b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -47,6 +47,7 @@ + @@ -77,6 +78,7 @@ + @@ -95,6 +97,7 @@ + @@ -394,6 +397,7 @@ + @@ -442,9 +446,11 @@ + + @@ -497,6 +503,7 @@ + @@ -570,6 +577,7 @@ + @@ -585,6 +593,7 @@ + @@ -768,6 +777,7 @@ + @@ -1136,6 +1146,7 @@ + @@ -1190,11 +1201,13 @@ + + @@ -1613,6 +1626,7 @@ + @@ -1715,6 +1729,7 @@ + @@ -1755,6 +1770,7 @@ + @@ -1961,6 +1977,7 @@ + @@ -2001,6 +2018,7 @@ + @@ -2472,6 +2490,7 @@ + @@ -2695,6 +2714,7 @@ + @@ -2798,6 +2818,7 @@ + @@ -3134,6 +3155,7 @@ + @@ -3329,6 +3351,7 @@ + @@ -3480,10 +3503,12 @@ + + @@ -3501,6 +3526,7 @@ + @@ -3521,6 +3547,7 @@ + @@ -3889,6 +3916,7 @@ + @@ -3935,6 +3963,7 @@ + @@ -4017,6 +4046,7 @@ + @@ -4026,6 +4056,7 @@ + @@ -4036,6 +4067,8 @@ + + @@ -4107,6 +4140,7 @@ + @@ -4154,6 +4188,7 @@ + @@ -4340,6 +4375,7 @@ + @@ -4666,6 +4702,7 @@ + @@ -4762,6 +4799,7 @@ + @@ -4910,6 +4948,7 @@ + @@ -4954,6 +4993,7 @@ + @@ -5175,6 +5215,7 @@ + @@ -5388,12 +5429,14 @@ + + @@ -5405,6 +5448,7 @@ + @@ -5684,6 +5728,7 @@ + @@ -5765,6 +5810,7 @@ + @@ -5849,6 +5895,7 @@ + @@ -5873,6 +5920,7 @@ + @@ -6159,6 +6207,7 @@ + @@ -6534,6 +6583,7 @@ + @@ -6692,6 +6742,7 @@ + @@ -6728,6 +6779,7 @@ + @@ -6790,6 +6842,7 @@ + @@ -6840,6 +6893,7 @@ + @@ -7051,6 +7105,7 @@ + @@ -7172,6 +7227,7 @@ + @@ -7361,6 +7417,7 @@ + @@ -7418,10 +7475,12 @@ + + @@ -7433,6 +7492,7 @@ + @@ -7461,6 +7521,7 @@ + @@ -7571,6 +7632,7 @@ + @@ -7671,6 +7733,7 @@ + @@ -7693,6 +7756,8 @@ + + @@ -7923,6 +7988,7 @@ + @@ -8105,6 +8171,7 @@ + @@ -8133,6 +8200,7 @@ + @@ -8168,6 +8236,7 @@ + @@ -8321,6 +8390,7 @@ + @@ -8898,6 +8968,7 @@ + @@ -9056,6 +9127,7 @@ + @@ -9259,6 +9331,7 @@ + @@ -9311,7 +9384,9 @@ + + @@ -9468,6 +9543,7 @@ + @@ -9513,6 +9589,7 @@ + @@ -9624,6 +9701,7 @@ + @@ -10000,6 +10078,7 @@ + @@ -10053,6 +10132,7 @@ + @@ -10248,6 +10328,7 @@ + @@ -10536,7 +10617,9 @@ + + @@ -10576,6 +10659,7 @@ + @@ -10587,6 +10671,7 @@ + @@ -10652,6 +10737,7 @@ + @@ -10670,6 +10756,7 @@ + @@ -10689,6 +10776,7 @@ + @@ -10708,6 +10796,7 @@ + @@ -10896,6 +10985,7 @@ + @@ -10935,6 +11025,7 @@ + @@ -11084,6 +11175,7 @@ + @@ -11313,6 +11405,7 @@ + @@ -11401,6 +11494,7 @@ + @@ -11498,6 +11592,7 @@ + @@ -11519,8 +11614,10 @@ + + @@ -11545,6 +11642,7 @@ + @@ -11574,6 +11672,7 @@ + @@ -11677,6 +11776,7 @@ + diff --git a/svgs/_17track.svg b/svgs/_17track.svg new file mode 100644 index 00000000000..39113155ed9 --- /dev/null +++ b/svgs/_17track.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/_360.svg b/svgs/_360.svg new file mode 100644 index 00000000000..06e2e881898 --- /dev/null +++ b/svgs/_360.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/_70mai.svg b/svgs/_70mai.svg new file mode 100644 index 00000000000..919c2b660d8 --- /dev/null +++ b/svgs/_70mai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/amazon_photos.svg b/svgs/amazon_photos.svg new file mode 100644 index 00000000000..8fdc2a5fa23 --- /dev/null +++ b/svgs/amazon_photos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/andropods.svg b/svgs/andropods.svg new file mode 100644 index 00000000000..ec0ffd2aa7f --- /dev/null +++ b/svgs/andropods.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/angry_birds_2.svg b/svgs/angry_birds_2.svg new file mode 100644 index 00000000000..85a5362566c --- /dev/null +++ b/svgs/angry_birds_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/anywhere.svg b/svgs/anywhere.svg new file mode 100644 index 00000000000..5214058047d --- /dev/null +++ b/svgs/anywhere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/appchecker.svg b/svgs/appchecker.svg new file mode 100644 index 00000000000..8aa07908231 --- /dev/null +++ b/svgs/appchecker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/appverifier.svg b/svgs/appverifier.svg new file mode 100644 index 00000000000..ba87e44eb20 --- /dev/null +++ b/svgs/appverifier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bacon.svg b/svgs/bacon.svg new file mode 100644 index 00000000000..52dc76fd6ab --- /dev/null +++ b/svgs/bacon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/booruhub.svg b/svgs/booruhub.svg new file mode 100644 index 00000000000..2517bec827f --- /dev/null +++ b/svgs/booruhub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/brawlhalla.svg b/svgs/brawlhalla.svg new file mode 100644 index 00000000000..168aebc2f60 --- /dev/null +++ b/svgs/brawlhalla.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/brevent.svg b/svgs/brevent.svg new file mode 100644 index 00000000000..f56351d8e58 --- /dev/null +++ b/svgs/brevent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/canara_ai1.svg b/svgs/canara_ai1.svg new file mode 100644 index 00000000000..c8ac3daee76 --- /dev/null +++ b/svgs/canara_ai1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/chatbot_ai_4o.svg b/svgs/chatbot_ai_4o.svg new file mode 100644 index 00000000000..e5ef4a022ef --- /dev/null +++ b/svgs/chatbot_ai_4o.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/chess_clock.svg b/svgs/chess_clock.svg new file mode 100644 index 00000000000..a5b60516bff --- /dev/null +++ b/svgs/chess_clock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/colectivos_bahia_blanca.svg b/svgs/colectivos_bahia_blanca.svg new file mode 100644 index 00000000000..8ba13f2ba51 --- /dev/null +++ b/svgs/colectivos_bahia_blanca.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/compress_image_size.svg b/svgs/compress_image_size.svg new file mode 100644 index 00000000000..d71759bbf88 --- /dev/null +++ b/svgs/compress_image_size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/diskdigger.svg b/svgs/diskdigger.svg new file mode 100644 index 00000000000..6a490575f3d --- /dev/null +++ b/svgs/diskdigger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dunkin.svg b/svgs/dunkin.svg new file mode 100644 index 00000000000..b42f43630e1 --- /dev/null +++ b/svgs/dunkin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/emag.svg b/svgs/emag.svg new file mode 100644 index 00000000000..05e75d3b8d4 --- /dev/null +++ b/svgs/emag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fitnotes.svg b/svgs/fitnotes.svg new file mode 100644 index 00000000000..af56ae68a13 --- /dev/null +++ b/svgs/fitnotes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fliggy.svg b/svgs/fliggy.svg new file mode 100644 index 00000000000..ad251848a77 --- /dev/null +++ b/svgs/fliggy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/foxit.svg b/svgs/foxit.svg new file mode 100644 index 00000000000..23ac7997505 --- /dev/null +++ b/svgs/foxit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/game_dev_tycoon.svg b/svgs/game_dev_tycoon.svg new file mode 100644 index 00000000000..255a9973b60 --- /dev/null +++ b/svgs/game_dev_tycoon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gamepad_tester.svg b/svgs/gamepad_tester.svg new file mode 100644 index 00000000000..5b6d80a3118 --- /dev/null +++ b/svgs/gamepad_tester.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gba_emulator.svg b/svgs/gba_emulator.svg new file mode 100644 index 00000000000..304377e7202 --- /dev/null +++ b/svgs/gba_emulator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/geminiman.svg b/svgs/geminiman.svg new file mode 100644 index 00000000000..0110a6397fe --- /dev/null +++ b/svgs/geminiman.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gsam_battery_monitor.svg b/svgs/gsam_battery_monitor.svg new file mode 100644 index 00000000000..71eaa9bda30 --- /dev/null +++ b/svgs/gsam_battery_monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/halfbrick_plus.svg b/svgs/halfbrick_plus.svg new file mode 100644 index 00000000000..37143b7f4ae --- /dev/null +++ b/svgs/halfbrick_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hello.svg b/svgs/hello.svg new file mode 100644 index 00000000000..b2f68e97c76 --- /dev/null +++ b/svgs/hello.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hiper_calc_pro.svg b/svgs/hiper_calc_pro.svg new file mode 100644 index 00000000000..2d9629e8b4e --- /dev/null +++ b/svgs/hiper_calc_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hollow_knight.svg b/svgs/hollow_knight.svg new file mode 100644 index 00000000000..8c6f5b58095 --- /dev/null +++ b/svgs/hollow_knight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/homework_help.svg b/svgs/homework_help.svg new file mode 100644 index 00000000000..60d7844c68d --- /dev/null +++ b/svgs/homework_help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honeygain.svg b/svgs/honeygain.svg new file mode 100644 index 00000000000..b9ae123b18c --- /dev/null +++ b/svgs/honeygain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huxone_dark_icons.svg b/svgs/huxone_dark_icons.svg new file mode 100644 index 00000000000..91f092eab7c --- /dev/null +++ b/svgs/huxone_dark_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/idealo.svg b/svgs/idealo.svg new file mode 100644 index 00000000000..fbd70538b7b --- /dev/null +++ b/svgs/idealo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/interstellar.svg b/svgs/interstellar.svg new file mode 100644 index 00000000000..ffd24bf4e98 --- /dev/null +++ b/svgs/interstellar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kinnu.svg b/svgs/kinnu.svg new file mode 100644 index 00000000000..3618bec4fe1 --- /dev/null +++ b/svgs/kinnu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kyash.svg b/svgs/kyash.svg new file mode 100644 index 00000000000..e7389d68c71 --- /dev/null +++ b/svgs/kyash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/labbit.svg b/svgs/labbit.svg new file mode 100644 index 00000000000..12ef79448cf --- /dev/null +++ b/svgs/labbit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/langeasy.svg b/svgs/langeasy.svg new file mode 100644 index 00000000000..244b3961b1a --- /dev/null +++ b/svgs/langeasy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/liker_land.svg b/svgs/liker_land.svg new file mode 100644 index 00000000000..0c19ef3a44a --- /dev/null +++ b/svgs/liker_land.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/liteapks.svg b/svgs/liteapks.svg new file mode 100644 index 00000000000..fd5be8b55d7 --- /dev/null +++ b/svgs/liteapks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/max_stream_hbo.svg b/svgs/max_stream_hbo.svg new file mode 100644 index 00000000000..8a6fa500f38 --- /dev/null +++ b/svgs/max_stream_hbo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meteoblue.svg b/svgs/meteoblue.svg new file mode 100644 index 00000000000..0559faa85c8 --- /dev/null +++ b/svgs/meteoblue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/metronome_beats.svg b/svgs/metronome_beats.svg new file mode 100644 index 00000000000..e50823af2ee --- /dev/null +++ b/svgs/metronome_beats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mi_afip.svg b/svgs/mi_afip.svg new file mode 100644 index 00000000000..f2ab27578d5 --- /dev/null +++ b/svgs/mi_afip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/monopoly.svg b/svgs/monopoly.svg new file mode 100644 index 00000000000..f6715f25a7e --- /dev/null +++ b/svgs/monopoly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/multi_calculator.svg b/svgs/multi_calculator.svg new file mode 100644 index 00000000000..576947f7aed --- /dev/null +++ b/svgs/multi_calculator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_bpost.svg b/svgs/my_bpost.svg new file mode 100644 index 00000000000..f7ac8502b7e --- /dev/null +++ b/svgs/my_bpost.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_oldboy.svg b/svgs/my_oldboy.svg new file mode 100644 index 00000000000..6ab87e02d5d --- /dev/null +++ b/svgs/my_oldboy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/newradiosupporter.svg b/svgs/newradiosupporter.svg new file mode 100644 index 00000000000..b480670ce9d --- /dev/null +++ b/svgs/newradiosupporter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/one4kwgt.svg b/svgs/one4kwgt.svg new file mode 100644 index 00000000000..e60e668832b --- /dev/null +++ b/svgs/one4kwgt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/otobusum_nerede.svg b/svgs/otobusum_nerede.svg new file mode 100644 index 00000000000..12200ca7ee8 --- /dev/null +++ b/svgs/otobusum_nerede.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oyomi.svg b/svgs/oyomi.svg new file mode 100644 index 00000000000..523e998174d --- /dev/null +++ b/svgs/oyomi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/passgenpro.svg b/svgs/passgenpro.svg new file mode 100644 index 00000000000..9855f679293 --- /dev/null +++ b/svgs/passgenpro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pedometer.svg b/svgs/pedometer.svg new file mode 100644 index 00000000000..98c035efd19 --- /dev/null +++ b/svgs/pedometer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/phone_battery_complication.svg b/svgs/phone_battery_complication.svg new file mode 100644 index 00000000000..265fb2199dd --- /dev/null +++ b/svgs/phone_battery_complication.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixel_wheels.svg b/svgs/pixel_wheels.svg new file mode 100644 index 00000000000..3da17260687 --- /dev/null +++ b/svgs/pixel_wheels.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/portal_pasazera.svg b/svgs/portal_pasazera.svg new file mode 100644 index 00000000000..b3740fe6381 --- /dev/null +++ b/svgs/portal_pasazera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ppiicc.svg b/svgs/ppiicc.svg new file mode 100644 index 00000000000..7e15bce89cd --- /dev/null +++ b/svgs/ppiicc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/precise_volume.svg b/svgs/precise_volume.svg new file mode 100644 index 00000000000..30cea057735 --- /dev/null +++ b/svgs/precise_volume.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/prison_empire_tycoon.svg b/svgs/prison_empire_tycoon.svg new file mode 100644 index 00000000000..5ed380bd043 --- /dev/null +++ b/svgs/prison_empire_tycoon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/proto.svg b/svgs/proto.svg new file mode 100644 index 00000000000..f1869bd3ff6 --- /dev/null +++ b/svgs/proto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/quick_settings.svg b/svgs/quick_settings.svg new file mode 100644 index 00000000000..efe48ec04d6 --- /dev/null +++ b/svgs/quick_settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rcx.svg b/svgs/rcx.svg new file mode 100644 index 00000000000..4a1334d6989 --- /dev/null +++ b/svgs/rcx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/realme_store.svg b/svgs/realme_store.svg new file mode 100644 index 00000000000..fd415896ec6 --- /dev/null +++ b/svgs/realme_store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/realsr.svg b/svgs/realsr.svg new file mode 100644 index 00000000000..6ec3fb23a34 --- /dev/null +++ b/svgs/realsr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/renaissance_health.svg b/svgs/renaissance_health.svg new file mode 100644 index 00000000000..dd1681713a8 --- /dev/null +++ b/svgs/renaissance_health.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rovio_classics.svg b/svgs/rovio_classics.svg new file mode 100644 index 00000000000..17fabcdb854 --- /dev/null +++ b/svgs/rovio_classics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sandwich.svg b/svgs/sandwich.svg new file mode 100644 index 00000000000..16aaf4a3037 --- /dev/null +++ b/svgs/sandwich.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sbi_mutual_fund.svg b/svgs/sbi_mutual_fund.svg new file mode 100644 index 00000000000..33da6e4da99 --- /dev/null +++ b/svgs/sbi_mutual_fund.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/screen_time_stayfree.svg b/svgs/screen_time_stayfree.svg new file mode 100644 index 00000000000..881c06f300d --- /dev/null +++ b/svgs/screen_time_stayfree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shadowsocks.svg b/svgs/shadowsocks.svg new file mode 100644 index 00000000000..83eb75826b7 --- /dev/null +++ b/svgs/shadowsocks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/slickdeals.svg b/svgs/slickdeals.svg new file mode 100644 index 00000000000..bea24f461d7 --- /dev/null +++ b/svgs/slickdeals.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/soul_knight.svg b/svgs/soul_knight.svg new file mode 100644 index 00000000000..ed8aa4a9869 --- /dev/null +++ b/svgs/soul_knight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/strawberry.svg b/svgs/strawberry.svg new file mode 100644 index 00000000000..8864e85dca5 --- /dev/null +++ b/svgs/strawberry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/suntimes_calendars.svg b/svgs/suntimes_calendars.svg new file mode 100644 index 00000000000..33280322fb3 --- /dev/null +++ b/svgs/suntimes_calendars.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/super_auto_pets.svg b/svgs/super_auto_pets.svg new file mode 100644 index 00000000000..ba2b17d607d --- /dev/null +++ b/svgs/super_auto_pets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tasker_settings.svg b/svgs/tasker_settings.svg new file mode 100644 index 00000000000..65f73840130 --- /dev/null +++ b/svgs/tasker_settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/telebox.svg b/svgs/telebox.svg new file mode 100644 index 00000000000..a8bbd640143 --- /dev/null +++ b/svgs/telebox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/text_to_speech.svg b/svgs/text_to_speech.svg new file mode 100644 index 00000000000..27d506b30c8 --- /dev/null +++ b/svgs/text_to_speech.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tooly.svg b/svgs/tooly.svg new file mode 100644 index 00000000000..7b79a7cbc7e --- /dev/null +++ b/svgs/tooly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/trainline.svg b/svgs/trainline.svg new file mode 100644 index 00000000000..34e8b00dd16 --- /dev/null +++ b/svgs/trainline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ukg_dimensions.svg b/svgs/ukg_dimensions.svg new file mode 100644 index 00000000000..60ef46aa5a5 --- /dev/null +++ b/svgs/ukg_dimensions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_com.svg b/svgs/vivo_com.svg new file mode 100644 index 00000000000..edac529395d --- /dev/null +++ b/svgs/vivo_com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_tips.svg b/svgs/vivo_tips.svg new file mode 100644 index 00000000000..ca718839acf --- /dev/null +++ b/svgs/vivo_tips.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/voyager_for_lemmy.svg b/svgs/voyager_for_lemmy.svg new file mode 100644 index 00000000000..71d04e113af --- /dev/null +++ b/svgs/voyager_for_lemmy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vpnify.svg b/svgs/vpnify.svg new file mode 100644 index 00000000000..01f3cb15131 --- /dev/null +++ b/svgs/vpnify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wallpaperz.svg b/svgs/wallpaperz.svg new file mode 100644 index 00000000000..9df57f3e21e --- /dev/null +++ b/svgs/wallpaperz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wasted.svg b/svgs/wasted.svg new file mode 100644 index 00000000000..94781e6dcf2 --- /dev/null +++ b/svgs/wasted.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wear_installer.svg b/svgs/wear_installer.svg new file mode 100644 index 00000000000..1a3766ad102 --- /dev/null +++ b/svgs/wear_installer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/weather_demo_library.svg b/svgs/weather_demo_library.svg new file mode 100644 index 00000000000..e7862addf38 --- /dev/null +++ b/svgs/weather_demo_library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wetype.svg b/svgs/wetype.svg new file mode 100644 index 00000000000..351d1d06dce --- /dev/null +++ b/svgs/wetype.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wi_fi_toolkit.svg b/svgs/wi_fi_toolkit.svg new file mode 100644 index 00000000000..3cc58532a23 --- /dev/null +++ b/svgs/wi_fi_toolkit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wireless_adb.svg b/svgs/wireless_adb.svg new file mode 100644 index 00000000000..37a7f697ae9 --- /dev/null +++ b/svgs/wireless_adb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yahoo_news.svg b/svgs/yahoo_news.svg new file mode 100644 index 00000000000..93cfd8c212b --- /dev/null +++ b/svgs/yahoo_news.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yodobashi.svg b/svgs/yodobashi.svg new file mode 100644 index 00000000000..f3b974bd592 --- /dev/null +++ b/svgs/yodobashi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zugate.svg b/svgs/zugate.svg new file mode 100644 index 00000000000..725125140ef --- /dev/null +++ b/svgs/zugate.svg @@ -0,0 +1 @@ + \ No newline at end of file From 611bbec42d16dbeb94eed7a91faa8333f0d89b8c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:34:54 +0300 Subject: [PATCH 142/527] +15 links (#2154) --- app/assets/appfilter.xml | 17 ++++++++++++++++- svgs/anlinux.svg | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8cc522d6c9b..03e6ab35481 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -97,6 +97,7 @@ + @@ -450,6 +451,7 @@ + @@ -2714,6 +2716,7 @@ + @@ -2818,6 +2821,7 @@ + @@ -3155,6 +3159,7 @@ + @@ -3351,6 +3356,7 @@ + @@ -3963,6 +3969,7 @@ + @@ -4046,6 +4053,7 @@ + @@ -4285,6 +4293,7 @@ + @@ -5728,6 +5737,7 @@ + @@ -5920,6 +5930,7 @@ + @@ -8183,6 +8194,7 @@ + @@ -9414,7 +9426,8 @@ - + + @@ -10619,6 +10632,7 @@ + @@ -11146,6 +11160,7 @@ + diff --git a/svgs/anlinux.svg b/svgs/anlinux.svg index 417fcbd64d4..1d2ff887bc5 100644 --- a/svgs/anlinux.svg +++ b/svgs/anlinux.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 78201c7848c982312de20f74efaed94d6c52dc8f Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 13 Jun 2024 13:07:27 +0300 Subject: [PATCH 143/527] Clarifying the wording in the guidelines (#2156) * Clarifying the wording in the guidelines * Update CONTRIBUTING.md * Update icon_checklist.md * Update icon_checklist.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Update icon_checklist.md --- .github/icon_checklist.md | 6 +++--- CONTRIBUTING.md | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 22af7904a4f..941a3590bb6 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -14,13 +14,13 @@ While waiting for a review from our team, you can do a self-review to ensure tha ### Naming 1. Names should match the official app name and contain no additional text. -2. If the original name is not in English, then add a localized (or transliterated) one to it using `~~`. -Example: `フールー ~~ Hulu`. +2. If the first `3` characters of the app name contain letters not from the English alphabet, then add a localized (or transliterated) name via `~~`. +Example: `京东 ~~ JD`. 3. The names of the drawables should repeat the names of the apps if nothing prevents it. ### Quality 1. Ensure that icons are easily recognizable. 2. Align icons to [the visual center](https://www.google.com/search?sca_esv=1fcec3f5e0b15e20&q=what+is+visual+center+of+an+icon&tbm=isch&source=lnms). -3. Avoid blackness or noticable black spots by reducing the stroke width or simplifying the icons. +3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. 4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. 5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6b1947596e3..13729aee601 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ For additional information on designing icons and samples, see [the Lawnicons Fi Need help? [Join Lawnchair on Discord](https://discord.com/invite/3x8qNWxgGZ). ### TL;DR on icon design -The canvas is `192×192px`. The content area for most icons is `160×160px`, meaning the long side of an icon should be `160px`. Square icons should be `154×154px`. No fill, the stroke width is `12px`. All shapes should be black `#000` with rounded ends and joins. Round 90° angles by `6-32px`. Avoid blackness, close distances between strokes, and drastic changes in stroke widths. Simplify details, but don't lose recognizability. Provide original and localized names, so the icons can be found. +The canvas is `192×192px`. The content area for most icons is `160×160px`, meaning the long side of an icon should be `160px`. Square icons should be `154×154px`. No fill, the stroke width is `12px`. All shapes should be black `#000` with rounded ends and joins. Round 90° angles by `6-32px`. Avoid noticable black spots, close distances between strokes, and drastic changes in stroke widths. Simplify details, but don't lose recognizability. Provide original and localized names, so the icons can be found. To avoid rework, save time and understand the limitations of the guidelines, it is worth reading reviews (e.g., [+8 icons, +1 link, +4 updates](https://github.com/LawnchairLauncher/lawnicons/pull/1865)) and creating 5-10 icons in the first contribution. @@ -73,7 +73,7 @@ To avoid sharp contrast, you can follow either of these two methods: 2. **Gradual Transition:** Rather than making a large jump, introduce an intermediate thickness. By going from `12px` to `10px` and then to `8px` you create a gradual transition or gradation. This approach helps maintain visual balance in your icon design. ## Naming -To make it easier to find icons, you should keep the original names and supplement them with an English variant or transliteration. If you are adding a link to an existing icon, keep (or complement) the existing app and drawable names. +To make it easier to find icons, you should keep the original names. Arabic, Chinese or Japanese names need to be supplemented with an English version. If you are adding a link to an existing icon, keep (or complement) the existing app and drawable names. ### App name Should be the same as in Google Play, F-Droid or the official name. If the name in the source is too long, it's acceptable to remove the second part of the name without loss of recognition. ``` @@ -84,7 +84,7 @@ Wrong • Google Play name: "Zoom - One Platform to Connect" Correct • Edited name: "Zoom" ``` -Names are separated via `~~`. If the app name is localized, then the first name should be the one most commonly spoken by the people who will be searching for the icon (if in doubt, in English). +Names in different languages are separated via `~~`. If the app name is localized, then the first name should be the one most commonly spoken by the people who will be searching for the icon (if in doubt, in English). ``` Wrong @@ -93,7 +93,7 @@ Wrong Correct ``` -If there are letters in the first `3` characters of the app name that aren't in English, then it's worth adding the name transliterated into English. +If the first `3` characters of the app name contain letters not from the English alphabet, then it's worth adding the transliterated name. ``` Wrong @@ -103,14 +103,14 @@ Correct ``` ### Drawable -Should be in English or transliterated from the original language. Should repeat the name of the app if possible. +Should contain letters from the English alphabet and repeat the app name if possible. ``` Wrong - + ``` ``` Correct - + ``` If the app name starts with a digit, then the drawable should start with `_`. ``` From b2ed1bf5181c15c30fa285c7fc6ef14772c9aae0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:16:25 +0800 Subject: [PATCH 144/527] Update AGP (#2157) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1e25fd7527d..7fe36dda3b3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.4.2" apply false + id("com.android.application") version "8.5.0" apply false id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 7b1f566c381..b7d9120363c 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.4.2") + implementation("com.android.tools:sdk-common:31.5.0") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From b6afbcabdad6d4d1383b58938ba0349b8da9639f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:16:34 +0800 Subject: [PATCH 145/527] Update plugin com.gradle.develocity to v3.17.5 (#2152) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index daa7a92099a..405d556101c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.4" + id("com.gradle.develocity") version "3.17.5" } develocity { From eb923098243cd47c4bea966f4a8d7dd947801e81 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:16:42 +0800 Subject: [PATCH 146/527] Update dependency androidx.compose:compose-bom to v2024.06.00 (#2153) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cd5d1fcdecf..9d4703f0c3a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -139,7 +139,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.activity:activity-compose:1.9.0") - implementation(platform("androidx.compose:compose-bom:2024.05.00")) + implementation(platform("androidx.compose:compose-bom:2024.06.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From 5769a5ab23d007b9c54f6504386279cce864e8a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:16:51 +0800 Subject: [PATCH 147/527] Update lifecycleVersion to v2.8.2 (#2150) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9d4703f0c3a..5ca71d7bef7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -133,7 +133,7 @@ licensee { } dependencies { - val lifecycleVersion = "2.8.1" + val lifecycleVersion = "2.8.2" val hiltVersion = "2.51.1" implementation("androidx.appcompat:appcompat:1.7.0") From b352114f4bc2c0c5f803e48a02d2e501f6682097 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:16:59 +0800 Subject: [PATCH 148/527] Update dependency androidx.compose.material:material-icons-core-android to v1.6.8 (#2148) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5ca71d7bef7..aaa1c749493 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,7 +145,7 @@ dependencies { implementation("androidx.compose.ui:ui-util") debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") - implementation("androidx.compose.material:material-icons-core-android:1.6.7") + implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta02") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta02") From 802c7f4ae33e35d16ce5ad8b033837a7b9621130 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:17:16 +0800 Subject: [PATCH 149/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta03 (#2149) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aaa1c749493..549b3042dd0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -148,7 +148,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta02") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta02") + implementation("androidx.navigation:navigation-compose:2.8.0-beta03") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") From ca73c0da4c078c95345c0ad284d90acf3a6a79d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:18:08 +0800 Subject: [PATCH 150/527] Update dependency androidx.compose.material3:material3 to v1.3.0-beta03 (#2147) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 549b3042dd0..28a5a3bb60d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -146,7 +146,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") - implementation("androidx.compose.material3:material3:1.3.0-beta02") + implementation("androidx.compose.material3:material3:1.3.0-beta03") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta03") implementation("androidx.core:core-splashscreen:1.0.1") From c10c714446c25d8b960a8c8de607b404b273047b Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Fri, 14 Jun 2024 15:08:07 +0800 Subject: [PATCH 151/527] Optimize google maven --- settings.gradle.kts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 405d556101c..6a8a4faffd1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,8 +2,9 @@ pluginManagement { repositories { google { content { - includeGroupByRegex(".*google.*") - includeGroupByRegex(".*android.*") + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") } } gradlePluginPortal() @@ -12,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.5" + id("com.gradle.develocity") version "3.17.3" } develocity { @@ -30,8 +31,9 @@ dependencyResolutionManagement { repositories { google { content { - includeGroupByRegex(".*google.*") - includeGroupByRegex(".*android.*") + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") } } mavenCentral() From c4da29ba74b2f69f290fd7e427752a73965f88a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 07:10:37 +0000 Subject: [PATCH 152/527] Update plugin com.gradle.develocity to v3.17.5 (#2160) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 6a8a4faffd1..0f44f249fbb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.3" + id("com.gradle.develocity") version "3.17.5" } develocity { From e001f2429931bf72b92a538dd2b55c3f21da252e Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 14 Jun 2024 16:05:57 +0800 Subject: [PATCH 153/527] Refactor IconInfoSheet --- .../ui/components/home/IconInfoPopup.kt | 197 ------------ .../ui/components/home/IconInfoSheet.kt | 291 ++++++++++++++++++ 2 files changed, 291 insertions(+), 197 deletions(-) delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt deleted file mode 100644 index 74f0c284dfb..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoPopup.kt +++ /dev/null @@ -1,197 +0,0 @@ -package app.lawnchair.lawnicons.ui.components.home - -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.navigationBarsPadding -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Call -import androidx.compose.material.icons.rounded.Email -import androidx.compose.material.icons.rounded.Search -import androidx.compose.material.icons.rounded.Warning -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.Text -import androidx.compose.material3.rememberModalBottomSheetState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalInspectionMode -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.ui.components.IconLink -import app.lawnchair.lawnicons.ui.components.core.Card -import app.lawnchair.lawnicons.ui.components.core.ListRow -import app.lawnchair.lawnicons.ui.components.core.SimpleListRow -import app.lawnchair.lawnicons.ui.theme.LawniconsTheme -import app.lawnchair.lawnicons.ui.util.PreviewLawnicons -import app.lawnchair.lawnicons.ui.util.SampleData - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun IconInfoPopup( - iconInfo: IconInfo, - modifier: Modifier = Modifier, - isPopupShown: (Boolean) -> Unit, -) { - val sheetState = rememberModalBottomSheetState( - skipPartiallyExpanded = true, - ) - - ModalBottomSheet( - onDismissRequest = { - isPopupShown(false) - }, - sheetState = sheetState, - contentWindowInsets = { - WindowInsets(0.dp) - }, - modifier = modifier - .navigationBarsPadding(), - ) { - Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) - .fillMaxWidth(), - ) { - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - ) { - if (LocalInspectionMode.current) { - val icon = when (iconInfo.id) { - 1 -> Icons.Rounded.Email - 2 -> Icons.Rounded.Search - 3 -> Icons.Rounded.Call - else -> Icons.Rounded.Warning - } - Icon( - icon, - contentDescription = iconInfo.drawableName, - modifier = Modifier.size(250.dp), - tint = MaterialTheme.colorScheme.onBackground, - ) - } else { - Icon( - painterResource(id = iconInfo.id), - contentDescription = iconInfo.drawableName, - modifier = Modifier.size(250.dp), - tint = MaterialTheme.colorScheme.onBackground, - ) - } - } - - val githubName = iconInfo.drawableName.replace( - oldValue = "_foreground", - newValue = "", - ) - - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - ) { - IconLink( - iconResId = R.drawable.github_foreground, - label = stringResource(id = R.string.view_on_github), - url = "https://github.com/LawnchairLauncher/lawnicons/blob/develop/svgs/$githubName.svg", - ) - } - - Card( - label = stringResource(id = R.string.drawable), - ) { - SimpleListRow( - label = githubName, - description = stringResource(R.string.icon_info_outdated_warning), - divider = false, - ) - } - Spacer(Modifier.height(16.dp)) - - Card( - label = stringResource(id = R.string.mapped_components), - ) { - val data = iconInfo.componentNames - data.forEachIndexed { index, (label, componentName) -> - ListRow( - label = { - Text( - text = label, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - ) - }, - contentModifier = Modifier.padding(vertical = 8.dp), - description = { - Text( - text = componentName.replace("/", "/\n"), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - }, - divider = index < data.lastIndex, - first = index == 0, - last = index == data.lastIndex && data.size > 1, - endIcon = { - val context = LocalContext.current - IconButton(onClick = { - copyTextToClipboard(context, "$label%0A$componentName") - }) { - Icon( - painter = painterResource(id = R.drawable.copy_to_clipboard), - contentDescription = stringResource( - R.string.copy_to_clipboard, - ), - tint = MaterialTheme.colorScheme.onBackground, - ) - } - }, - tall = true, - height = 90.dp, - ) - } - } - - Spacer(Modifier.height(16.dp)) - } - } -} - -private fun copyTextToClipboard(context: Context, text: String) { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) - clipboard.setPrimaryClip(clip) -} - -@PreviewLawnicons -@Composable -private fun IconInfoPopupPreview() { - val showPopup = remember { mutableStateOf(true) } - LawniconsTheme { - IconInfoPopup( - iconInfo = SampleData.iconInfoSample, - ) { - showPopup.value = it - } - } -} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt new file mode 100644 index 00000000000..34e01faa6ca --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -0,0 +1,291 @@ +package app.lawnchair.lawnicons.ui.components.home + +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.requiredSize +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.ArrowDropDown +import androidx.compose.material.icons.rounded.Call +import androidx.compose.material.icons.rounded.Email +import androidx.compose.material.icons.rounded.Search +import androidx.compose.material.icons.rounded.Warning +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.ui.components.IconLink +import app.lawnchair.lawnicons.ui.components.core.Card +import app.lawnchair.lawnicons.ui.components.core.ListRow +import app.lawnchair.lawnicons.ui.components.core.SimpleListRow +import app.lawnchair.lawnicons.ui.theme.LawniconsTheme +import app.lawnchair.lawnicons.ui.util.PreviewLawnicons +import app.lawnchair.lawnicons.ui.util.SampleData + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun IconInfoSheet( + iconInfo: IconInfo, + modifier: Modifier = Modifier, + isPopupShown: (Boolean) -> Unit, +) { + val sheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = true, + ) + + ModalBottomSheet( + onDismissRequest = { + isPopupShown(false) + }, + sheetState = sheetState, + contentWindowInsets = { + WindowInsets(0.dp) + }, + modifier = modifier + .navigationBarsPadding(), + ) { + LazyColumn( + modifier = Modifier.fillMaxWidth(), + ) { + val githubName = iconInfo.drawableName.replace( + oldValue = "_foreground", + newValue = "", + ) + + item { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + if (LocalInspectionMode.current) { + val icon = when (iconInfo.id) { + 1 -> Icons.Rounded.Email + 2 -> Icons.Rounded.Search + 3 -> Icons.Rounded.Call + else -> Icons.Rounded.Warning + } + Icon( + icon, + contentDescription = iconInfo.drawableName, + modifier = Modifier.size(250.dp), + tint = MaterialTheme.colorScheme.onBackground, + ) + } else { + Icon( + painterResource(id = iconInfo.id), + contentDescription = iconInfo.drawableName, + modifier = Modifier.size(250.dp), + tint = MaterialTheme.colorScheme.onBackground, + ) + } + } + } + item { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + IconLink( + iconResId = R.drawable.github_foreground, + label = stringResource(id = R.string.view_on_github), + url = "https://github.com/LawnchairLauncher/lawnicons/blob/develop/svgs/$githubName.svg", + ) + } + } + item { + Card( + label = stringResource(id = R.string.drawable), + ) { + SimpleListRow( + label = githubName, + description = stringResource(R.string.icon_info_outdated_warning), + divider = false, + ) + } + } + item { + Spacer(Modifier.height(16.dp)) + } + item { + Text( + text = stringResource(id = R.string.mapped_components), + style = MaterialTheme.typography.titleSmall, + color = MaterialTheme.colorScheme.primary, + modifier = Modifier.padding(start = 32.dp, bottom = 6.dp), + ) + } + val result = iconInfo.componentNames + .groupBy { it.label } + .map { (key, values) -> + Pair(key, values.map { it.componentName }) + } + + itemsIndexed(result) { index, (label, componentName) -> + val showExpandButton = componentName.size > 1 + var expanded by remember { mutableStateOf(false) } + + val isLast = index == result.lastIndex + + ListRow( + label = { + SelectionContainer { + Text( + text = label, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + } + }, + contentModifier = Modifier.padding(vertical = 8.dp), + description = { + componentName.firstOrNull()?.let { + SelectionContainer { + Text( + text = it.replace("/", "/\n"), + maxLines = 2, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + } + } + }, + divider = (if (showExpandButton) !expanded else true) && index < result.lastIndex, + first = index == 0, + last = isLast && !expanded, + endIcon = { + if (showExpandButton) { + IconButton( + modifier = Modifier.requiredSize(48.dp), + onClick = { + expanded = !expanded + }, + ) { + val angle by animateFloatAsState( + targetValue = (if (expanded) 180 else 0).toFloat(), + label = "Expand/collapse chevron rotation", + ) + + Icon( + imageVector = Icons.Rounded.ArrowDropDown, + contentDescription = stringResource(R.string.toggle_visibility_of_contents), + tint = MaterialTheme.colorScheme.onBackground, + modifier = Modifier.rotate(angle), + ) + } + } + }, + height = 90.dp, + background = true, + ) + if (showExpandButton) { + AnimatedVisibility(visible = expanded) { + SelectionContainer { + Surface( + modifier = Modifier + .padding(horizontal = 16.dp) + .then( + if (isLast) + Modifier + .clip( + RoundedCornerShape( + topStart = 0.dp, + topEnd = 0.dp, + bottomStart = 16.dp, + bottomEnd = 16.dp, + ), + ) + else Modifier, + ), + color = MaterialTheme.colorScheme.surfaceContainer, + ) { + Column( + Modifier + .padding(start = 16.dp) + .then( + if (isLast) + Modifier + .padding(bottom = 16.dp) + else Modifier + ) + .fillMaxWidth() + .horizontalScroll(rememberScrollState()), + ) { + componentName + .drop(1) + .forEach { + Text( + text = it.replace("/", "/\n"), + maxLines = 2, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + } + } + } + } + } + } + } + item { + Spacer(Modifier.height(16.dp)) + } + } + } +} + +private fun copyTextToClipboard(context: Context, text: String) { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) + clipboard.setPrimaryClip(clip) +} + +@PreviewLawnicons +@Composable +private fun IconInfoPopupPreview() { + val showPopup = remember { mutableStateOf(true) } + LawniconsTheme { + IconInfoSheet( + iconInfo = SampleData.iconInfoSample, + ) { + showPopup.value = it + } + } +} From 2216d4638a2af3e64fe01841b1a75c638503eb9f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 14 Jun 2024 18:13:03 +0800 Subject: [PATCH 154/527] Fix colors of search results --- .../ui/components/home/search/SearchContents.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 5e309d953f6..0a8333542dc 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -41,7 +41,7 @@ import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.model.getFirstLabelAndComponent -import app.lawnchair.lawnicons.ui.components.home.IconInfoPopup +import app.lawnchair.lawnicons.ui.components.home.IconInfoSheet import app.lawnchair.lawnicons.ui.components.home.IconPreview import kotlinx.collections.immutable.ImmutableList @@ -94,7 +94,7 @@ fun SearchContents( onModeChange(SearchMode.COMPONENT) }, label = { - Text(text = stringResource(id = R.string.mapped_components)) + Text(text = stringResource(id = R.string.component)) }, ) FilterChip( @@ -147,11 +147,14 @@ fun SearchContents( columns = GridCells.Adaptive(minSize = 80.dp), contentPadding = PaddingValues(16.dp), ) { - items(items = iconInfo) { + items( + items = iconInfo, + contentType = { "icon_preview" }, + ) { IconPreview( iconInfo = it, onSendResult = onSendResult, - iconBackground = MaterialTheme.colorScheme.primaryContainer, + iconBackground = MaterialTheme.colorScheme.surfaceVariant, ) } } @@ -196,7 +199,7 @@ private fun IconInfoListItem(iconInfo: ImmutableList) { .clickable(onClick = { isIconInfoAppfilterShown.value = true }), ) if (isIconInfoAppfilterShown.value) { - IconInfoPopup( + IconInfoSheet( iconInfo = it, ) { isIconInfoAppfilterShown.value = it From 88d27ec4bfc2c6a93400f979348194779a6cbb56 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 14 Jun 2024 18:13:30 +0800 Subject: [PATCH 155/527] Tweak icon preview composable --- .../lawnicons/ui/components/core/ListRow.kt | 2 +- .../ui/components/home/IconInfoSheet.kt | 12 ++- .../ui/components/home/IconPreview.kt | 2 +- .../ui/components/home/IconPreviewGrid.kt | 101 ++++++++++++++++-- .../lawnicons/ui/destination/Home.kt | 2 +- app/src/main/res/values/strings.xml | 2 + 6 files changed, 105 insertions(+), 16 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index 70db0c9d0d4..a52b5e71297 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -65,7 +65,7 @@ fun ListRow( ), ) .background( - MaterialTheme.colorScheme.surfaceContainerLow, + MaterialTheme.colorScheme.surfaceContainer, ) } else { Modifier diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index 34e01faa6ca..523b4c659a7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -222,7 +222,7 @@ fun IconInfoSheet( modifier = Modifier .padding(horizontal = 16.dp) .then( - if (isLast) + if (isLast) { Modifier .clip( RoundedCornerShape( @@ -232,7 +232,9 @@ fun IconInfoSheet( bottomEnd = 16.dp, ), ) - else Modifier, + } else { + Modifier + }, ), color = MaterialTheme.colorScheme.surfaceContainer, ) { @@ -240,10 +242,12 @@ fun IconInfoSheet( Modifier .padding(start = 16.dp) .then( - if (isLast) + if (isLast) { Modifier .padding(bottom = 16.dp) - else Modifier + } else { + Modifier + }, ) .fillMaxWidth() .horizontalScroll(rememberScrollState()), diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index 640595a1885..e48f0316359 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -102,7 +102,7 @@ fun IconPreview( } } if (isIconInfoShown.value) { - IconInfoPopup( + IconInfoSheet( iconInfo = iconInfo, ) { isIconInfoShown.value = it diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 1218ec3cd06..399a49ab8c7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -1,26 +1,39 @@ package app.lawnchair.lawnicons.ui.components.home +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.getFirstLabelAndComponent import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -39,8 +52,27 @@ fun IconPreviewGrid( modifier: Modifier = Modifier, isIconPicker: Boolean = false, contentPadding: PaddingValues? = null, - listState: LazyGridState = rememberLazyGridState(), + gridState: LazyGridState = rememberLazyGridState(), ) { + val groupedIcons = iconInfo.groupBy { + val label = it.getFirstLabelAndComponent().label + if (label.isEmpty()) { + "1-9" + } else { + val firstChar = label.firstOrNull()?.uppercase() ?: "" + if (firstChar in "![](){}#0123456789") { + "1-9" + } else { + firstChar + } + } + } + + val headerIndices = remember { mutableStateOf(mutableMapOf()) } + var currentIndex = 0 + + val currentHeader = remember { mutableStateOf(null) } + Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, @@ -53,13 +85,32 @@ fun IconPreviewGrid( ) .statusBarsPadding() .padding(top = 26.dp), - state = listState, + state = gridState, settings = ScrollbarSettings( alwaysShowScrollbar = true, thumbUnselectedColor = MaterialTheme.colorScheme.primaryContainer, thumbSelectedColor = MaterialTheme.colorScheme.primary, selectionMode = ScrollbarSelectionMode.Thumb, ), + indicatorContent = { _, isThumbSelected -> + AnimatedVisibility(visible = isThumbSelected) { + Box( + modifier = Modifier + .padding(end = 16.dp) + .background( + color = MaterialTheme.colorScheme.primary, + shape = MaterialTheme.shapes.medium, + ), + ) { + Text( + modifier = Modifier.padding(16.dp), + text = currentHeader.value ?: "#", + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onPrimary, + ) + } + } + }, ) { LazyVerticalGrid( columns = GridCells.Adaptive(minSize = 80.dp), @@ -76,18 +127,50 @@ fun IconPreviewGrid( additionalEnd = 32.dp, ) }, - state = listState, + state = gridState, ) { - items(items = iconInfo) { iconInfo -> - IconPreview( - iconInfo = iconInfo, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) + groupedIcons.forEach { (header, icons) -> + item( + span = { GridItemSpan(maxLineSpan) }, + contentType = { "header" }, + key = header, + ) { + Row { + Spacer(Modifier.height(16.dp)) + Text( + text = header, + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer, + ) + } + headerIndices.value[header] = currentIndex + // ... Content for header item + currentIndex++ + } + items( + items = icons, + contentType = { "icon_preview" }, + ) { iconInfo -> + IconPreview( + iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + currentIndex++ + } } } } } + + val firstVisibleItemIndex = remember { derivedStateOf { gridState.firstVisibleItemIndex } } + + LaunchedEffect(firstVisibleItemIndex.value) { + val lastVisibleHeader = headerIndices.value.entries.lastOrNull { + it.value < gridState.firstVisibleItemIndex + }?.key + currentHeader.value = lastVisibleHeader + } } @OptIn(ExperimentalFoundationApi::class) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index eb46e37ec62..ebca5eef763 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -106,7 +106,7 @@ fun Home( isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, onSendResult = onSendResult, - listState = lazyGridState, + gridState = lazyGridState, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e7b74f1bf4e..bb7ccbe512d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -62,4 +62,6 @@ If the icon is outdated due to rebranding, create an issue on GitHub. Copy to clipboard Copied text + Component name + Toggle visibility of contents From b7d912c97a972469ba250155a91f8c1eac9ccdd8 Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Sat, 15 Jun 2024 10:12:54 +0300 Subject: [PATCH 156/527] +1 icon (#2155) * +1 icon * Team Pixel Wallpapers (`com.lagguy.teampixelwallpapers/com.amaan.app.features.MainActivity`) * Fixed dimentions and naming * Moved the icon to the center of the content area and corrected the stroke width --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/team_pixel_wallpapers.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/team_pixel_wallpapers.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 03e6ab35481..b061948061c 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -9585,6 +9585,7 @@ + diff --git a/svgs/team_pixel_wallpapers.svg b/svgs/team_pixel_wallpapers.svg new file mode 100644 index 00000000000..f0056137a9f --- /dev/null +++ b/svgs/team_pixel_wallpapers.svg @@ -0,0 +1 @@ + From b5e618ff10763b093bf28e4ec2ab94d79e3079b7 Mon Sep 17 00:00:00 2001 From: Patryk Radziszewski <100310118+Chefski@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:05:20 +0100 Subject: [PATCH 157/527] Bump `version` and `versionCode` Prepare for release v2.10.0 --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 28a5a3bb60d..a587198fd0c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,7 +26,7 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.9.0" +val version = "2.10.0" val versionDisplayName = "$version ${if (isReleaseBuild) "" else devReleaseName}" android { @@ -37,7 +37,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = 34 - versionCode = 12 + versionCode = 13 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From cf84305ad7b069d00c83908b424a7701b67e9cd4 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 16 Jun 2024 00:29:45 +0300 Subject: [PATCH 158/527] Updating the instructions for requesting icons (#2161) * Updating the instructions for requesting icons * Added an additional way to get activities * Update CONTRIBUTING.md --- CONTRIBUTING.md | 12 +++++++++--- README.md | 9 ++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 13729aee601..9258f67cc9f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -150,6 +150,12 @@ Please check the [icon tool guide](/docs/icontool_guide.md) for more information 1. Done! You're ready to open a pull request. Please set `develop` as the base branch. ## Finding the package and activity name of an app + +### Using Lawnicons +1. Install and open [Lawnicons 2.10+](https://github.com/LawnchairLauncher/lawnicons/releases). +2. Tap "Request icons". The button appears when you are missing at least one icon. After that, our request form will open with a response ready to be submit. +3. Submit the response. You can copy the submitted activities [from our table](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey=&gid=1039095616#gid=1039095616) (sorted by date). + ### Using `adb` 1. Connect your Android device or emulator to your laptop/desktop PC that has `adb` installed (see [this tutorial](https://www.xda-developers.com/install-adb-windows-macos-linux/) for more information) and open the app whose details you want to inspect, e.g. Telegram. 1. Open a new Command Prompt or Terminal window and input `adb devices`. @@ -171,13 +177,13 @@ Please check the [icon tool guide](/docs/icontool_guide.md) for more information The part before the `/` character in the above image, i.e. `org.telegram.messenger`, is the package name (`[PACKAGE_NAME]`). The part after it, i.e. `org.telegram.messenger.DefaultIcon`, is the activity name (`[APP_ACIVITY_NAME]`). ### Using 3rd-party apps -#### IconRequest app +#### IconRequest app 1. Download IconRequest: [Google Play](https://play.google.com/store/apps/details?id=de.kaiserdragon.iconrequest) • [GitHub](https://github.com/Kaiserdragon2/IconRequest/releases). 2. Launch IconRequest and tap one of the options: -- UPDATE EXISTING — to copy packages with activities. [How to request icons](https://kappa.lol/u_MBz), 22s video. +- UPDATE EXISTING — to copy packages with activities. - REQUEST NEW — to save icon images and packages with activities. This option is better if you are creating icons. -3. Select the apps for which youʼd like to request or make icons. +3. Use the app toolbar to select the apps for which youʼd like to request or make icons. 4. Copy, save or share. #### Icon Pusher app diff --git a/README.md b/README.md index b127351827d..fe529414eba 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,17 @@ Lawnicons is best used [on Lawnchair 12.1 or Lawnchair 14 Beta 2](https://github See [the Releases section](https://github.com/LawnchairLauncher/lawnicons/releases) for the latest stable build. For development builds with new icons, go to [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK). ## Contributing -Please see [the Lawnicons guidelines](CONTRIBUTING.md) for info on contributing icons or code, it will save you time. Android devs can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). +Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. -If you are interested in creating icons, then we invite you to fulfill [popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). +Android developers can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). +Anyone who is interested in making icons can fulfill [the popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). Need help? [Join us on Discord](https://discord.gg/3x8qNWxgGZ). ## Requesting icons -Please use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). To wait for icons much less, you can take into account our guidelines and make the icons you need yourself. If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues). +Please use **Lawnicons 2.10+**: `Open Lawnicons → Tap "Request icons" → Submit the response`. + +You can also use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues). From 61153287d42cf52a5337f45dc64b16bfca6f9854 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:05:04 +0800 Subject: [PATCH 159/527] Add UI for icon requesting This commits adds a simple UI to view all unthemed icons, alongside a way to either copy them to clipboard and open the form (either prefilled or empty). It also adds a simple long-click gesture to directly visit the icon request form with prefilled information. If the URL length is greater than DIRECT_LINK_MAX_LENGTH however, it removes the direct link and offers the user to copy the contents to the clipboard. Fixes #2162 --- .../ui/components/home/IconInfoSheet.kt | 12 +- .../ui/components/home/IconPreview.kt | 3 +- .../ui/components/home/IconRequestFAB.kt | 224 +++++++++++++++++- .../components/home/search/SearchContents.kt | 2 +- .../lawnicons/ui/destination/About.kt | 5 +- .../lawnicons/ui/destination/Contributors.kt | 3 +- .../lawnchair/lawnicons/ui/util/Constants.kt | 11 + .../lawnicons/ui/util/StringConstants.kt | 6 - app/src/main/res/values/strings.xml | 8 +- 9 files changed, 241 insertions(+), 33 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/StringConstants.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index 523b4c659a7..bacb5681f8b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -1,8 +1,5 @@ package app.lawnchair.lawnicons.ui.components.home -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.horizontalScroll @@ -56,6 +53,7 @@ import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.ListRow import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme +import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -125,7 +123,7 @@ fun IconInfoSheet( IconLink( iconResId = R.drawable.github_foreground, label = stringResource(id = R.string.view_on_github), - url = "https://github.com/LawnchairLauncher/lawnicons/blob/develop/svgs/$githubName.svg", + url = "${Constants.GITHUB}/blob/develop/svgs/$githubName.svg", ) } } @@ -275,12 +273,6 @@ fun IconInfoSheet( } } -private fun copyTextToClipboard(context: Context, text: String) { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) - clipboard.setPrimaryClip(clip) -} - @PreviewLawnicons @Composable private fun IconInfoPopupPreview() { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index e48f0316359..cd5a55185e3 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -1,5 +1,6 @@ package app.lawnchair.lawnicons.ui.components.home +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -101,7 +102,7 @@ fun IconPreview( ) } } - if (isIconInfoShown.value) { + AnimatedVisibility(isIconInfoShown.value) { IconInfoSheet( iconInfo = iconInfo, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index a8d96866a52..c6f22c8e195 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -1,22 +1,60 @@ package app.lawnchair.lawnicons.ui.components.home +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context import android.content.Intent import android.net.Uri -import android.util.Log +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.PressInteraction +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.LazyGridState +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel +import app.lawnchair.lawnicons.ui.components.core.Card +import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.isScrollingUp +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch @Composable fun IconRequestFAB( @@ -24,11 +62,11 @@ fun IconRequestFAB( lazyGridState: LazyGridState, modifier: Modifier = Modifier, ) { - Log.d("IconRequestFAB", "iconRequestModel: $iconRequestModel") if (iconRequestModel != null) { if (iconRequestModel.iconCount > 0) { IconRequestFAB( iconRequestList = iconRequestModel.list, + iconCount = iconRequestModel.iconCount, lazyGridState = lazyGridState, modifier = modifier, ) @@ -36,28 +74,192 @@ fun IconRequestFAB( } } +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @Composable fun IconRequestFAB( iconRequestList: List, + iconCount: Int, lazyGridState: LazyGridState, modifier: Modifier = Modifier, ) { val context = LocalContext.current - val request = buildForm(iconRequestList.joinToString("%0A") { "${it.name}%0A${it.componentName}" }) + + val list = iconRequestList.joinToString("\n") { "${it.name}\n${it.componentName}" } + val request = buildForm(list.replace("\n", "%20")) + + val sheetExpanded = remember { mutableStateOf(false) } + val sheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = true, + ) + + val coroutineScope = rememberCoroutineScope() + val interactionSource = remember { MutableInteractionSource() } + val viewConfiguration = LocalViewConfiguration.current + + val directLinkEnabled = request.length < Constants.DIRECT_LINK_MAX_LENGTH + + LaunchedEffect(interactionSource) { + var isLongClick = false + + interactionSource.interactions.collectLatest { interaction -> + when (interaction) { + is PressInteraction.Press -> { + isLongClick = false + delay(viewConfiguration.longPressTimeoutMillis) + isLongClick = true + if (directLinkEnabled) { + openLink(context, request) + } else { + coroutineScope.launch { + sheetExpanded.value = true + sheetState.show() + } + } + } + is PressInteraction.Release -> { + if (!isLongClick) { + coroutineScope.launch { + sheetExpanded.value = true + sheetState.show() + } + } + } + is PressInteraction.Cancel -> { + isLongClick = false + } + } + } + } ExtendedFloatingActionButton( text = { - Text(stringResource(R.string.unthemed_icons_info)) + Text(stringResource(R.string.request_icons)) }, - icon = { Icon(painter = painterResource(id = R.drawable.icon_request_app), contentDescription = null) }, - onClick = { - val website = Uri.parse(request) - val intent = Intent(Intent.ACTION_VIEW, website) - context.startActivity(intent) + icon = { + Icon( + painter = painterResource(id = R.drawable.icon_request_app), + contentDescription = null, + ) }, - modifier = modifier, + onClick = {}, expanded = lazyGridState.isScrollingUp(), + interactionSource = interactionSource, + modifier = modifier, ) + AnimatedVisibility(visible = sheetExpanded.value) { + ModalBottomSheet( + onDismissRequest = { sheetExpanded.value = false }, + sheetState = sheetState, + ) { + Column( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + val detailsExpanded = remember { mutableStateOf(false) } + + Text( + text = stringResource(R.string.unthemed_icons_info_title, iconCount), + style = MaterialTheme.typography.headlineSmall, + ) + if (!directLinkEnabled) { + detailsExpanded.value = true + Card { + Row( + modifier = Modifier + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = Icons.Outlined.Warning, + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.unthemed_icons_info_text), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + } + } + } else { + Text( + text = stringResource(R.string.icon_request_hold_tip), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + Row { + Button( + onClick = { + openLink(context, request) + }, + ) { + Text(stringResource(R.string.request_all_unthemed_icons)) + } + Spacer(modifier = Modifier.width(8.dp)) + FilledTonalButton( + onClick = { + detailsExpanded.value = !detailsExpanded.value + }, + ) { + Text(stringResource(R.string.more_information)) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + AnimatedVisibility(visible = detailsExpanded.value) { + Card { + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + .padding(16.dp), + ) { + Text( + text = list, + fontFamily = FontFamily.Monospace, + modifier = Modifier + .horizontalScroll(rememberScrollState()), + ) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + TextButton( + onClick = { + copyTextToClipboard(context, list) + }, + ) { + Text(stringResource(R.string.copy_to_clipboard)) + } + Spacer(modifier = Modifier.width(8.dp)) + TextButton( + onClick = { + openLink(context, Constants.ICON_REQUEST_FORM) + }, + ) { + Text(stringResource(R.string.open_request_form)) + } + } + } + } + } + } + } + } +} + +private fun copyTextToClipboard(context: Context, text: String) { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) + clipboard.setPrimaryClip(clip) +} + +private fun openLink(context: Context, link: String) { + val website = Uri.parse(link) + val intent = Intent(Intent.ACTION_VIEW, website) + context.startActivity(intent) } private fun buildForm(string: String): String { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 0a8333542dc..369dff1632e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -198,7 +198,7 @@ private fun IconInfoListItem(iconInfo: ImmutableList) { .clip(RoundedCornerShape(16.dp)) .clickable(onClick = { isIconInfoAppfilterShown.value = true }), ) - if (isIconInfoAppfilterShown.value) { + AnimatedVisibility(isIconInfoAppfilterShown.value) { IconInfoSheet( iconInfo = it, ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 090b69a8155..77d42bfa3d8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -33,6 +33,7 @@ import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme +import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.Contributor import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.ui.util.ExternalLink @@ -43,12 +44,12 @@ private val externalLinks = listOf( ExternalLink( iconResId = R.drawable.github_foreground, name = R.string.github, - url = "https://github.com/LawnchairLauncher/lawnicons", + url = "${Constants.GITHUB}", ), ExternalLink( iconResId = R.drawable.icon_request_app, name = R.string.request_form, - url = "https://forms.gle/xt7sJhgWEasuo9TR9", + url = Constants.ICON_REQUEST_FORM, ), ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt index fcf656cb769..76c0990c29a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt @@ -27,13 +27,14 @@ import app.lawnchair.lawnicons.ui.components.ContributorRowPlaceholder import app.lawnchair.lawnicons.ui.components.ExternalLinkRow import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.theme.LawniconsTheme +import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.viewmodel.ContributorsUiState import app.lawnchair.lawnicons.viewmodel.ContributorsViewModel import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -const val CONTRIBUTOR_URL = "https://github.com/LawnchairLauncher/lawnicons/graphs/contributors" +const val CONTRIBUTOR_URL = "${Constants.GITHUB}/graphs/contributors" @Composable fun Contributors( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt new file mode 100644 index 00000000000..d33c4ee6788 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt @@ -0,0 +1,11 @@ +package app.lawnchair.lawnicons.ui.util + +object Constants { + const val ICON_REQUEST_FORM = "https://forms.gle/xt7sJhgWEasuo9TR9" + const val GITHUB = "https://github.com/LawnchairLauncher/lawnicons" + + /** + * Maximum length of a direct Google forms link. The limit is around 2300-2400 characters, so we use the lower limit to prevent any issues. + */ + const val DIRECT_LINK_MAX_LENGTH = 2300 +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/StringConstants.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/StringConstants.kt deleted file mode 100644 index 46d0209ea96..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/StringConstants.kt +++ /dev/null @@ -1,6 +0,0 @@ -package app.lawnchair.lawnicons.ui.util - -object StringConstants { - const val SPACE_CHARACTER = ' ' - const val NON_BREAKABLE_SPACE_CHARACTER = '\u00A0' -} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb7ccbe512d..72d5d24f595 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,7 +6,7 @@ Version %s - Request icons + Request icons @@ -64,4 +64,10 @@ Copied text Component name Toggle visibility of contents + You have %d unthemed icons + View details + Open icon request form + Too many unthemed icons for a direct link. Please copy the request below and submit it through the Icon Request form. + To directly visit the icon request page, tap and hold the \"Request icons\" FAB + Request all unthemed icons From fa04cbaba655d25b94ff5a8a3ef6c24404268458 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:08:48 +0800 Subject: [PATCH 160/527] Bump `versionName` and `versionCode` --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a587198fd0c..75a0528d589 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,7 +26,7 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.10.0" +val version = "2.10.1" val versionDisplayName = "$version ${if (isReleaseBuild) "" else devReleaseName}" android { @@ -37,7 +37,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = 34 - versionCode = 13 + versionCode = 14 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From 59ebb5f49416f8413e32ed4717e379dbe2e79fdf Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 16 Jun 2024 20:20:00 +0300 Subject: [PATCH 161/527] +24 links (#2164) * +24 links * Update ampere.svg --- app/assets/appfilter.xml | 28 ++++++++++++++++++++++++++-- svgs/ampere.svg | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b061948061c..3de0f19f854 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -130,8 +130,9 @@ - - + + + @@ -400,6 +401,7 @@ + @@ -572,6 +574,7 @@ + @@ -898,6 +901,7 @@ + @@ -952,6 +956,7 @@ + @@ -2472,6 +2477,7 @@ + @@ -2506,6 +2512,7 @@ + @@ -2850,6 +2857,7 @@ + @@ -2938,6 +2946,7 @@ + @@ -3044,6 +3053,7 @@ + @@ -4203,6 +4213,7 @@ + @@ -5719,6 +5730,7 @@ + @@ -5993,6 +6005,7 @@ + @@ -7401,6 +7414,7 @@ + @@ -7901,6 +7915,7 @@ + @@ -9038,6 +9053,7 @@ + @@ -9178,6 +9194,7 @@ + @@ -9534,6 +9551,7 @@ + @@ -10420,6 +10438,7 @@ + @@ -10436,6 +10455,7 @@ + @@ -10603,6 +10623,7 @@ + @@ -10712,6 +10733,7 @@ + @@ -11398,6 +11420,7 @@ + @@ -11769,6 +11792,7 @@ + diff --git a/svgs/ampere.svg b/svgs/ampere.svg index a75cbec2008..13ddd30d15c 100644 --- a/svgs/ampere.svg +++ b/svgs/ampere.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 7f928e63c5380a0a17c414ec8d25f0871b74e0be Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:18:43 +0300 Subject: [PATCH 162/527] +27 links (#2166) --- app/assets/appfilter.xml | 39 ++++++++++++++++++++++---- svgs/{flipa_clip.svg => flipaclip.svg} | 0 2 files changed, 33 insertions(+), 6 deletions(-) rename svgs/{flipa_clip.svg => flipaclip.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 3de0f19f854..00ab9059fdd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -202,6 +202,7 @@ + @@ -374,6 +375,7 @@ + @@ -762,6 +764,7 @@ + @@ -1137,11 +1140,12 @@ - - - - - + + + + + + @@ -1202,6 +1206,7 @@ + @@ -1663,6 +1668,7 @@ + @@ -2004,6 +2010,7 @@ + @@ -2012,6 +2019,7 @@ + @@ -2340,6 +2348,7 @@ + @@ -3236,7 +3245,8 @@ - + + @@ -3341,6 +3351,7 @@ + @@ -3525,6 +3536,7 @@ + @@ -4440,6 +4452,7 @@ + @@ -4509,6 +4522,7 @@ + @@ -5692,6 +5706,7 @@ + @@ -5805,6 +5820,7 @@ + @@ -6157,6 +6173,7 @@ + @@ -7593,6 +7610,7 @@ + @@ -8279,6 +8297,7 @@ + @@ -9080,6 +9099,7 @@ + @@ -9158,6 +9178,7 @@ + @@ -9250,6 +9271,7 @@ + @@ -9622,6 +9644,7 @@ + @@ -9951,6 +9974,7 @@ + @@ -10130,6 +10154,7 @@ + @@ -10157,6 +10182,7 @@ + @@ -11174,6 +11200,7 @@ + diff --git a/svgs/flipa_clip.svg b/svgs/flipaclip.svg similarity index 100% rename from svgs/flipa_clip.svg rename to svgs/flipaclip.svg From 1496be25f07d08d138fc2f47ce7ac9537bbb9191 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:25:41 +0300 Subject: [PATCH 163/527] Clarified the checklist for self-review (#2167) * Clarified the checklist for self-review So that there are fewer contradictions between the points. * Update icon_checklist.md --- .github/icon_checklist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 941a3590bb6..51c1a6568da 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -20,7 +20,7 @@ Example: `京东 ~~ JD`. ### Quality 1. Ensure that icons are easily recognizable. -2. Align icons to [the visual center](https://www.google.com/search?sca_esv=1fcec3f5e0b15e20&q=what+is+visual+center+of+an+icon&tbm=isch&source=lnms). +2. Align icons to [the visual center](https://www.google.com/search?sca_esv=1fcec3f5e0b15e20&q=what+is+visual+center+of+an+icon&tbm=isch&source=lnms) as much as possible within the guidelines. 3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. 4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. 5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. From 6291391c66f944bb2dd645e022cf3266aed9b327 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 18 Jun 2024 18:41:17 +0800 Subject: [PATCH 164/527] Simplify icon request UI --- .../ui/components/home/IconRequestFAB.kt | 157 ++++++------------ .../lawnicons/ui/destination/Home.kt | 9 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 2 +- app/src/main/res/values/strings.xml | 23 +-- 4 files changed, 76 insertions(+), 115 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index c6f22c8e195..3e622eb4f05 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -6,30 +6,24 @@ import android.content.Context import android.content.Intent import android.net.Uri import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Warning -import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton -import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.SnackbarDuration +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.rememberModalBottomSheetState @@ -60,25 +54,26 @@ import kotlinx.coroutines.launch fun IconRequestFAB( iconRequestModel: IconRequestModel?, lazyGridState: LazyGridState, + snackbarHostState: SnackbarHostState, modifier: Modifier = Modifier, ) { if (iconRequestModel != null) { if (iconRequestModel.iconCount > 0) { IconRequestFAB( iconRequestList = iconRequestModel.list, - iconCount = iconRequestModel.iconCount, lazyGridState = lazyGridState, + snackbarHostState = snackbarHostState, modifier = modifier, ) } } } -@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@OptIn(ExperimentalMaterial3Api::class) @Composable fun IconRequestFAB( iconRequestList: List, - iconCount: Int, + snackbarHostState: SnackbarHostState, lazyGridState: LazyGridState, modifier: Modifier = Modifier, ) { @@ -107,23 +102,41 @@ fun IconRequestFAB( isLongClick = false delay(viewConfiguration.longPressTimeoutMillis) isLongClick = true - if (directLinkEnabled) { - openLink(context, request) - } else { - coroutineScope.launch { - sheetExpanded.value = true - sheetState.show() - } + coroutineScope.launch { + sheetExpanded.value = true + sheetState.show() } } + is PressInteraction.Release -> { if (!isLongClick) { - coroutineScope.launch { - sheetExpanded.value = true - sheetState.show() + if (directLinkEnabled) { + openLink(context, request) + } else { + copyTextToClipboard(context, list) + coroutineScope.launch { + val result = snackbarHostState + .showSnackbar( + message = context.getString(R.string.snackbar_request_too_large), + actionLabel = context.getString(R.string.snackbar_use_fallback_link), + withDismissAction = true, + duration = SnackbarDuration.Indefinite, + ) + when (result) { + SnackbarResult.ActionPerformed -> { + /* Handle snackbar action performed */ + openLink(context, Constants.ICON_REQUEST_FORM) + } + + SnackbarResult.Dismissed -> { + snackbarHostState.currentSnackbarData?.dismiss() + } + } + } } } } + is PressInteraction.Cancel -> { isLongClick = false } @@ -157,90 +170,28 @@ fun IconRequestFAB( .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { - val detailsExpanded = remember { mutableStateOf(false) } - - Text( - text = stringResource(R.string.unthemed_icons_info_title, iconCount), - style = MaterialTheme.typography.headlineSmall, - ) - if (!directLinkEnabled) { - detailsExpanded.value = true - Card { - Row( - modifier = Modifier - .padding(16.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon( - imageVector = Icons.Outlined.Warning, - contentDescription = null, - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - text = stringResource(R.string.unthemed_icons_info_text), - style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } - } - } else { - Text( - text = stringResource(R.string.icon_request_hold_tip), - style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - Row { - Button( - onClick = { - openLink(context, request) - }, - ) { - Text(stringResource(R.string.request_all_unthemed_icons)) - } - Spacer(modifier = Modifier.width(8.dp)) - FilledTonalButton( - onClick = { - detailsExpanded.value = !detailsExpanded.value - }, - ) { - Text(stringResource(R.string.more_information)) - } - } - } - - Spacer(modifier = Modifier.height(16.dp)) - AnimatedVisibility(visible = detailsExpanded.value) { - Card { - Column( + Card { + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + .padding(16.dp), + ) { + Text( + text = list, + fontFamily = FontFamily.Monospace, modifier = Modifier - .verticalScroll(rememberScrollState()) - .padding(16.dp), + .horizontalScroll(rememberScrollState()), + ) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, ) { - Text( - text = list, - fontFamily = FontFamily.Monospace, - modifier = Modifier - .horizontalScroll(rememberScrollState()), - ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, + TextButton( + onClick = { + copyTextToClipboard(context, list) + }, ) { - TextButton( - onClick = { - copyTextToClipboard(context, list) - }, - ) { - Text(stringResource(R.string.copy_to_clipboard)) - } - Spacer(modifier = Modifier.width(8.dp)) - TextButton( - onClick = { - openLink(context, Constants.ICON_REQUEST_FORM) - }, - ) { - Text(stringResource(R.string.open_request_form)) - } + Text(stringResource(R.string.copy_to_clipboard)) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index ebca5eef763..eb6fdd69551 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -42,11 +44,12 @@ fun Home( with(lawniconsViewModel) { val iconInfoModel by iconInfoModel.collectAsStateWithLifecycle() val searchedIconInfoModel by searchedIconInfoModel.collectAsStateWithLifecycle() - val iconRequestModel by iconRequestList.collectAsStateWithLifecycle() + val iconRequestModel by iconRequestModel.collectAsStateWithLifecycle() val searchMode = searchMode val searchTerm = searchTerm val lazyGridState = rememberLazyGridState() + val snackbarHostState = remember { SnackbarHostState() } Crossfade( modifier = modifier, @@ -95,9 +98,13 @@ fun Home( floatingActionButton = { IconRequestFAB( iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, lazyGridState = lazyGridState, ) }, + snackbarHost = { + SnackbarHost(hostState = snackbarHostState) + } ) { contentPadding -> iconInfoModel?.let { val padding = contentPadding // Ignore padding value diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index f7e7a3e3242..d443da3c7ae 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -21,7 +21,7 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep val searchedIconInfoModel = iconRepository.searchedIconInfoModel @JvmField - val iconRequestList = iconRepository.iconRequestList + val iconRequestModel = iconRepository.iconRequestList private var _searchMode by mutableStateOf(SearchMode.LABEL) private var _searchTerm by mutableStateOf("") diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 72d5d24f595..2b6710cc75d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,8 +5,6 @@ Lawnicons Version %s - - Request icons @@ -57,17 +55,22 @@ Drawable + Component name + + Mapped components If the icon is outdated due to rebranding, create an issue on GitHub. + + + Toggle visibility of contents + + + Request icons + Copy to clipboard Copied text - Component name - Toggle visibility of contents - You have %d unthemed icons - View details - Open icon request form - Too many unthemed icons for a direct link. Please copy the request below and submit it through the Icon Request form. - To directly visit the icon request page, tap and hold the \"Request icons\" FAB - Request all unthemed icons + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form From cb9d2f1b3cea6650ec5e0c784080cb1510700640 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 18 Jun 2024 18:41:34 +0800 Subject: [PATCH 165/527] Update search bar string --- .../lawnchair/lawnicons/ui/components/home/search/SearchBar.kt | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 93b309b04b2..b2a43f73a16 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -140,7 +140,7 @@ fun LawniconsSearchBar( Text( stringResource( id = if (isIconPicker) { - R.string.search_bar_choose_icon + R.string.search_bar_icon_picker } else { R.string.search_bar_hint }, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2b6710cc75d..992f6acf43e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,7 +12,7 @@ Search through %d icons - Pick an icon + Pick an icon %s not found From a8f269701a030f8693b58d68f0a859693d0032a6 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 18 Jun 2024 20:07:52 +0800 Subject: [PATCH 166/527] Improve list row code of IconInfoSheet --- .../lawnicons/ui/components/core/ListRow.kt | 10 +- .../ui/components/home/IconInfoSheet.kt | 209 +++++++++--------- 2 files changed, 107 insertions(+), 112 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index a52b5e71297..af073ce2b94 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -129,14 +129,20 @@ private fun Content( icon() Spacer(modifier = Modifier.width(basePadding)) } - Column { + Column( + if (endIcon != null) { + Modifier.weight(0.95f) + } else { + Modifier.fillMaxWidth() + } + ) { label() if (description != null) { description() } } if (endIcon != null) { - Spacer(modifier = Modifier.weight(1f)) + Spacer(modifier = Modifier.weight(0.05f)) endIcon() } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index bacb5681f8b..ef4dbd964e7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -1,6 +1,7 @@ package app.lawnchair.lawnicons.ui.components.home import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement @@ -17,7 +18,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.ArrowDropDown @@ -30,7 +30,6 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable @@ -39,8 +38,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.rotate +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -76,8 +76,7 @@ fun IconInfoSheet( contentWindowInsets = { WindowInsets(0.dp) }, - modifier = modifier - .navigationBarsPadding(), + modifier = modifier, ) { LazyColumn( modifier = Modifier.fillMaxWidth(), @@ -149,128 +148,118 @@ fun IconInfoSheet( modifier = Modifier.padding(start = 32.dp, bottom = 6.dp), ) } - val result = iconInfo.componentNames + + val groupedComponents = iconInfo.componentNames .groupBy { it.label } - .map { (key, values) -> - Pair(key, values.map { it.componentName }) + .map { (label, components) -> + label to components.map { it.componentName } } - itemsIndexed(result) { index, (label, componentName) -> - val showExpandButton = componentName.size > 1 - var expanded by remember { mutableStateOf(false) } + itemsIndexed(groupedComponents) { index, (label, componentName) -> + IconInfoListRow(label, componentName, index, groupedComponents.lastIndex) + } + item { + Spacer(Modifier.height(16.dp)) + } + item { + Spacer(Modifier.navigationBarsPadding()) + } + } + } +} - val isLast = index == result.lastIndex +@Composable +private fun IconInfoListRow( + label: String, + componentNames: List, + currentIndex: Int, + lastIndex: Int, +) { + val showExpandButton = componentNames.size > 1 + var expanded by remember { mutableStateOf(false) } - ListRow( - label = { - SelectionContainer { - Text( - text = label, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - ) + var fullHeight by remember { mutableStateOf(0.dp) } + val animatedHeight by animateDpAsState( + targetValue = fullHeight, + label = "On component name expansion or contraction", + ) + + val density = LocalDensity.current + + ListRow( + label = { + SelectionContainer { + Text( + text = label, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + } + }, + description = { + SelectionContainer { + Column( + modifier = Modifier + .onGloballyPositioned { coordinates -> + fullHeight = with(density) { + coordinates.size.height.toDp() + } } - }, - contentModifier = Modifier.padding(vertical = 8.dp), - description = { - componentName.firstOrNull()?.let { - SelectionContainer { + .horizontalScroll(rememberScrollState()), + ) { + componentNames.firstOrNull()?.let { + Text( + text = it, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(end = 48.dp), + ) + } + AnimatedVisibility(visible = showExpandButton && expanded) { + Column { + componentNames.forEach { Text( - text = it.replace("/", "/\n"), + text = it, maxLines = 2, - overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant, ) } } - }, - divider = (if (showExpandButton) !expanded else true) && index < result.lastIndex, - first = index == 0, - last = isLast && !expanded, - endIcon = { - if (showExpandButton) { - IconButton( - modifier = Modifier.requiredSize(48.dp), - onClick = { - expanded = !expanded - }, - ) { - val angle by animateFloatAsState( - targetValue = (if (expanded) 180 else 0).toFloat(), - label = "Expand/collapse chevron rotation", - ) - - Icon( - imageVector = Icons.Rounded.ArrowDropDown, - contentDescription = stringResource(R.string.toggle_visibility_of_contents), - tint = MaterialTheme.colorScheme.onBackground, - modifier = Modifier.rotate(angle), - ) - } - } - }, - height = 90.dp, - background = true, - ) - if (showExpandButton) { - AnimatedVisibility(visible = expanded) { - SelectionContainer { - Surface( - modifier = Modifier - .padding(horizontal = 16.dp) - .then( - if (isLast) { - Modifier - .clip( - RoundedCornerShape( - topStart = 0.dp, - topEnd = 0.dp, - bottomStart = 16.dp, - bottomEnd = 16.dp, - ), - ) - } else { - Modifier - }, - ), - color = MaterialTheme.colorScheme.surfaceContainer, - ) { - Column( - Modifier - .padding(start = 16.dp) - .then( - if (isLast) { - Modifier - .padding(bottom = 16.dp) - } else { - Modifier - }, - ) - .fillMaxWidth() - .horizontalScroll(rememberScrollState()), - ) { - componentName - .drop(1) - .forEach { - Text( - text = it.replace("/", "/\n"), - maxLines = 2, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } - } - } - } } } } - item { - Spacer(Modifier.height(16.dp)) + }, + divider = currentIndex < lastIndex, + first = currentIndex == 0, + last = currentIndex == lastIndex, + endIcon = if (showExpandButton) { + @Composable { + IconButton( + modifier = Modifier.requiredSize(48.dp), + onClick = { + expanded = !expanded + }, + ) { + val angle by animateFloatAsState( + targetValue = (if (expanded) 180 else 0).toFloat(), + label = "Expand/collapse chevron rotation", + ) + + Icon( + imageVector = Icons.Rounded.ArrowDropDown, + contentDescription = stringResource(R.string.toggle_visibility_of_contents), + tint = MaterialTheme.colorScheme.onBackground, + modifier = Modifier.rotate(angle), + ) + } } - } - } + } else null, + height = if (expanded) 48.dp + animatedHeight else 72.dp, + background = true, + ) } @PreviewLawnicons From a1c9a35e8f6920bea5f4539bfcb80f3f074e68cb Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 18 Jun 2024 20:42:28 +0800 Subject: [PATCH 167/527] Apply spotless --- .../app/lawnchair/lawnicons/MainActivity.kt | 55 +++++++++++-------- .../lawnicons/ui/components/core/ListRow.kt | 2 +- .../ui/components/home/IconInfoSheet.kt | 4 +- .../ui/components/home/IconPreview.kt | 4 +- .../lawnicons/ui/destination/Home.kt | 2 +- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index 9ee39120982..e4c56c99858 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -1,5 +1,6 @@ package app.lawnchair.lawnicons +import android.content.Context import android.content.Intent import android.os.Bundle import android.util.Log @@ -14,6 +15,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toBitmap import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.Lawnicons import dagger.hilt.android.AndroidEntryPoint @@ -35,33 +37,40 @@ class MainActivity : ComponentActivity() { Lawnicons( windowSizeClass = windowSizeClass, onSendResult = { iconInfo -> - val intent = Intent() - - val bitmap = ResourcesCompat.getDrawable(context.resources, iconInfo.id, null) - ?.toBitmap() - - if (bitmap != null) { - try { - intent.putExtra( - "icon", - if (bitmap.isRecycled) { - bitmap - } else { - bitmap.copy(bitmap.config, false) - }, - ) - } catch (e: Exception) { - Log.d("ERROR", e.toString()) - } - intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconInfo.id) - setResult(RESULT_OK, intent) - } else { - setResult(RESULT_CANCELED, intent) - } + setResult(context, iconInfo) finish() }, isIconPicker = isIconPicker, ) } } + + private fun setResult( + context: Context, + iconInfo: IconInfo, + ) { + val intent = Intent() + + val bitmap = ResourcesCompat.getDrawable(context.resources, iconInfo.id, null) + ?.toBitmap() + + if (bitmap != null) { + try { + intent.putExtra( + "icon", + if (bitmap.isRecycled) { + bitmap + } else { + bitmap.copy(bitmap.config, false) + }, + ) + } catch (e: Exception) { + Log.d("ERROR", e.toString()) + } + intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconInfo.id) + setResult(RESULT_OK, intent) + } else { + setResult(RESULT_CANCELED, intent) + } + } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index af073ce2b94..31b5632084a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -134,7 +134,7 @@ private fun Content( Modifier.weight(0.95f) } else { Modifier.fillMaxWidth() - } + }, ) { label() if (description != null) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index ef4dbd964e7..596cf04416e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -256,7 +256,9 @@ private fun IconInfoListRow( ) } } - } else null, + } else { + null + }, height = if (expanded) 48.dp + animatedHeight else 72.dp, background = true, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index cd5a55185e3..213ae98691b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -18,7 +18,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -47,7 +47,7 @@ fun IconPreview( iconBackground: Color? = null, isIconPicker: Boolean = false, ) { - val isIconInfoShown = remember { mutableStateOf(false) } + val isIconInfoShown = rememberSaveable { mutableStateOf(false) } Box( contentAlignment = Alignment.Center, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index eb6fdd69551..c7cc6cd268b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -104,7 +104,7 @@ fun Home( }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) - } + }, ) { contentPadding -> iconInfoModel?.let { val padding = contentPadding // Ignore padding value From 51508897ee56993ec6bdc4a77467b4d44ea891d5 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 20 Jun 2024 01:43:08 +0300 Subject: [PATCH 168/527] [Barter 3] +100 icons: BWeather, IOMA, vivo apps (#2170) * [Barter 3] +100 icons: BWeather, IOMA, vivo apps * +1 link --- app/assets/appfilter.xml | 101 ++++++++++++++++++++++++ svgs/adventure_lab.svg | 1 + svgs/analiti.svg | 1 + svgs/androidide.svg | 1 + svgs/apex_music.svg | 1 + svgs/appsheet.svg | 1 + svgs/aramex.svg | 1 + svgs/autovoice.svg | 1 + svgs/bank_of_beijing.svg | 1 + svgs/bcr_gui.svg | 1 + svgs/beijing_card.svg | 1 + svgs/binaural_beats_generator.svg | 1 + svgs/bweather.svg | 1 + svgs/cbq.svg | 1 + svgs/checkfirm.svg | 1 + svgs/cinemas_nos.svg | 1 + svgs/classwiz_calc.svg | 1 + svgs/clone_app.svg | 1 + svgs/cmf_watch.svg | 1 + svgs/cuto_wallpaper.svg | 1 + svgs/cvs_pharmacy.svg | 1 + svgs/davinci.svg | 1 + svgs/defit.svg | 1 + svgs/destiny_item_manager.svg | 1 + svgs/dontkillmyapp.svg | 1 + svgs/easy_notes.svg | 1 + svgs/easyshare.svg | 1 + svgs/epson_smart_panel.svg | 1 + svgs/fahrschul_campus.svg | 1 + svgs/forcedoze.svg | 1 + svgs/fun_print.svg | 1 + svgs/game_booster.svg | 1 + svgs/gms_flags.svg | 1 + svgs/hios_launcher.svg | 1 + svgs/hmcl_pe.svg | 1 + svgs/icon_pack_creator.svg | 1 + svgs/ioma.svg | 1 + svgs/ismartviewpro.svg | 1 + svgs/jumptask.svg | 1 + svgs/kage.svg | 1 + svgs/lime.svg | 1 + svgs/linkedin_learning.svg | 1 + svgs/live2dviewerex_face_tracker.svg | 1 + svgs/live2dviewerex_floating_viewer.svg | 1 + svgs/macsposed.svg | 1 + svgs/maf_carrefour.svg | 1 + svgs/mas_showcase.svg | 1 + svgs/massive.svg | 1 + svgs/mobiljegy.svg | 1 + svgs/my_gesture_navigation.svg | 1 + svgs/namida.svg | 1 + svgs/nexo.svg | 1 + svgs/norton360_antivirus.svg | 1 + svgs/nothing_material_you_icons.svg | 1 + svgs/nvplayer.svg | 1 + svgs/oledbuddy.svg | 1 + svgs/paradigm_reboot.svg | 1 + svgs/peristyle.svg | 1 + svgs/poe.svg | 1 + svgs/private_dns_quick_toggle.svg | 1 + svgs/qr_scanner.svg | 1 + svgs/remote_link.svg | 1 + svgs/replika.svg | 1 + svgs/ronin_wallet.svg | 1 + svgs/rotaeno.svg | 1 + svgs/rotation.svg | 1 + svgs/samsung_dropship.svg | 1 + svgs/samsung_media_and_devices.svg | 1 + svgs/scan_mypeugeot.svg | 1 + svgs/scarlet.svg | 1 + svgs/secure_vpn.svg | 1 + svgs/send_anywhere.svg | 1 + svgs/seqta_learn.svg | 1 + svgs/stack_exchange.svg | 1 + svgs/stack_overflow.svg | 1 + svgs/standby_mode.svg | 1 + svgs/stick_with_it.svg | 1 + svgs/stitch.svg | 1 + svgs/structured.svg | 1 + svgs/subwallet.svg | 1 + svgs/sudachi.svg | 1 + svgs/superlist.svg | 1 + svgs/synology_photos.svg | 1 + svgs/system_app_remover.svg | 1 + svgs/t_mobile_device_unlock.svg | 1 + svgs/tack_metronome.svg | 1 + svgs/touchtomorrow.svg | 1 + svgs/uptodown_app_store.svg | 1 + svgs/varsity.svg | 1 + svgs/vero.svg | 1 + svgs/video_app_for_vk.svg | 1 + svgs/vivo_app_store.svg | 1 + svgs/vivo_console.svg | 1 + svgs/vivo_lock.svg | 1 + svgs/voicegpt.svg | 1 + svgs/wallpaperexport.svg | 1 + svgs/webull.svg | 1 + svgs/wim_hof_method.svg | 1 + svgs/xapks_installer.svg | 1 + svgs/xda_one.svg | 1 + svgs/you_icons.svg | 1 + 101 files changed, 201 insertions(+) create mode 100644 svgs/adventure_lab.svg create mode 100644 svgs/analiti.svg create mode 100644 svgs/androidide.svg create mode 100644 svgs/apex_music.svg create mode 100644 svgs/appsheet.svg create mode 100644 svgs/aramex.svg create mode 100644 svgs/autovoice.svg create mode 100644 svgs/bank_of_beijing.svg create mode 100644 svgs/bcr_gui.svg create mode 100644 svgs/beijing_card.svg create mode 100644 svgs/binaural_beats_generator.svg create mode 100644 svgs/bweather.svg create mode 100644 svgs/cbq.svg create mode 100644 svgs/checkfirm.svg create mode 100644 svgs/cinemas_nos.svg create mode 100644 svgs/classwiz_calc.svg create mode 100644 svgs/clone_app.svg create mode 100644 svgs/cmf_watch.svg create mode 100644 svgs/cuto_wallpaper.svg create mode 100644 svgs/cvs_pharmacy.svg create mode 100644 svgs/davinci.svg create mode 100644 svgs/defit.svg create mode 100644 svgs/destiny_item_manager.svg create mode 100644 svgs/dontkillmyapp.svg create mode 100644 svgs/easy_notes.svg create mode 100644 svgs/easyshare.svg create mode 100644 svgs/epson_smart_panel.svg create mode 100644 svgs/fahrschul_campus.svg create mode 100644 svgs/forcedoze.svg create mode 100644 svgs/fun_print.svg create mode 100644 svgs/game_booster.svg create mode 100644 svgs/gms_flags.svg create mode 100644 svgs/hios_launcher.svg create mode 100644 svgs/hmcl_pe.svg create mode 100644 svgs/icon_pack_creator.svg create mode 100644 svgs/ioma.svg create mode 100644 svgs/ismartviewpro.svg create mode 100644 svgs/jumptask.svg create mode 100644 svgs/kage.svg create mode 100644 svgs/lime.svg create mode 100644 svgs/linkedin_learning.svg create mode 100644 svgs/live2dviewerex_face_tracker.svg create mode 100644 svgs/live2dviewerex_floating_viewer.svg create mode 100644 svgs/macsposed.svg create mode 100644 svgs/maf_carrefour.svg create mode 100644 svgs/mas_showcase.svg create mode 100644 svgs/massive.svg create mode 100644 svgs/mobiljegy.svg create mode 100644 svgs/my_gesture_navigation.svg create mode 100644 svgs/namida.svg create mode 100644 svgs/nexo.svg create mode 100644 svgs/norton360_antivirus.svg create mode 100644 svgs/nothing_material_you_icons.svg create mode 100644 svgs/nvplayer.svg create mode 100644 svgs/oledbuddy.svg create mode 100644 svgs/paradigm_reboot.svg create mode 100644 svgs/peristyle.svg create mode 100644 svgs/poe.svg create mode 100644 svgs/private_dns_quick_toggle.svg create mode 100644 svgs/qr_scanner.svg create mode 100644 svgs/remote_link.svg create mode 100644 svgs/replika.svg create mode 100644 svgs/ronin_wallet.svg create mode 100644 svgs/rotaeno.svg create mode 100644 svgs/rotation.svg create mode 100644 svgs/samsung_dropship.svg create mode 100644 svgs/samsung_media_and_devices.svg create mode 100644 svgs/scan_mypeugeot.svg create mode 100644 svgs/scarlet.svg create mode 100644 svgs/secure_vpn.svg create mode 100644 svgs/send_anywhere.svg create mode 100644 svgs/seqta_learn.svg create mode 100644 svgs/stack_exchange.svg create mode 100644 svgs/stack_overflow.svg create mode 100644 svgs/standby_mode.svg create mode 100644 svgs/stick_with_it.svg create mode 100644 svgs/stitch.svg create mode 100644 svgs/structured.svg create mode 100644 svgs/subwallet.svg create mode 100644 svgs/sudachi.svg create mode 100644 svgs/superlist.svg create mode 100644 svgs/synology_photos.svg create mode 100644 svgs/system_app_remover.svg create mode 100644 svgs/t_mobile_device_unlock.svg create mode 100644 svgs/tack_metronome.svg create mode 100644 svgs/touchtomorrow.svg create mode 100644 svgs/uptodown_app_store.svg create mode 100644 svgs/varsity.svg create mode 100644 svgs/vero.svg create mode 100644 svgs/video_app_for_vk.svg create mode 100644 svgs/vivo_app_store.svg create mode 100644 svgs/vivo_console.svg create mode 100644 svgs/vivo_lock.svg create mode 100644 svgs/voicegpt.svg create mode 100644 svgs/wallpaperexport.svg create mode 100644 svgs/webull.svg create mode 100644 svgs/wim_hof_method.svg create mode 100644 svgs/xapks_installer.svg create mode 100644 svgs/xda_one.svg create mode 100644 svgs/you_icons.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 00ab9059fdd..a4736b3f584 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -213,6 +213,7 @@ + @@ -423,6 +424,7 @@ + @@ -450,6 +452,7 @@ + @@ -514,6 +517,7 @@ + @@ -598,6 +602,7 @@ + @@ -618,6 +623,7 @@ + @@ -734,6 +740,7 @@ + @@ -899,6 +906,7 @@ + @@ -989,6 +997,7 @@ + @@ -1348,6 +1357,7 @@ + @@ -1719,6 +1729,7 @@ + @@ -1747,6 +1758,7 @@ + @@ -1812,6 +1824,7 @@ + @@ -1845,6 +1858,7 @@ + @@ -1958,12 +1972,14 @@ + + @@ -2242,6 +2258,8 @@ + + @@ -2292,6 +2310,7 @@ + @@ -2337,6 +2356,7 @@ + @@ -2369,6 +2389,7 @@ + @@ -2604,6 +2625,7 @@ + @@ -2774,6 +2796,7 @@ + @@ -2785,6 +2808,7 @@ + @@ -2875,6 +2899,7 @@ + @@ -2983,6 +3008,7 @@ + @@ -3325,6 +3351,7 @@ + @@ -3445,6 +3472,7 @@ + @@ -3529,6 +3557,7 @@ + @@ -3675,6 +3704,7 @@ + @@ -4075,6 +4105,7 @@ + @@ -4083,6 +4114,7 @@ + @@ -4207,6 +4239,7 @@ + @@ -4425,6 +4458,7 @@ + @@ -4450,6 +4484,7 @@ + @@ -4544,6 +4579,7 @@ + @@ -4579,6 +4615,7 @@ + @@ -4985,6 +5022,7 @@ + @@ -5012,6 +5050,7 @@ + @@ -5041,6 +5080,9 @@ + + + @@ -5127,8 +5169,10 @@ + + @@ -5223,6 +5267,7 @@ + @@ -5718,6 +5763,7 @@ + @@ -5948,6 +5994,7 @@ + @@ -6104,6 +6151,7 @@ + @@ -6139,6 +6187,7 @@ + @@ -6251,6 +6300,7 @@ + @@ -6344,6 +6394,7 @@ + @@ -6380,6 +6431,7 @@ + @@ -6487,6 +6539,7 @@ + @@ -6541,6 +6594,7 @@ + @@ -6864,6 +6918,7 @@ + @@ -6955,6 +7010,7 @@ + @@ -7431,6 +7487,7 @@ + @@ -7541,6 +7598,7 @@ + @@ -7658,6 +7716,7 @@ + @@ -7916,6 +7975,7 @@ + @@ -7928,6 +7988,7 @@ + @@ -8016,6 +8077,7 @@ + @@ -8029,6 +8091,7 @@ + @@ -8096,6 +8159,7 @@ + @@ -8136,6 +8200,7 @@ + @@ -8249,10 +8314,12 @@ + + @@ -8309,6 +8376,7 @@ + @@ -8316,6 +8384,7 @@ + @@ -8323,6 +8392,7 @@ + @@ -9269,11 +9339,14 @@ + + + @@ -9356,6 +9429,7 @@ + @@ -9364,6 +9438,7 @@ + @@ -9391,6 +9466,7 @@ + @@ -9408,6 +9484,7 @@ + @@ -9419,6 +9496,7 @@ + @@ -9449,6 +9527,7 @@ + @@ -9527,8 +9606,10 @@ + + @@ -9538,6 +9619,7 @@ + @@ -9545,6 +9627,7 @@ + @@ -10159,6 +10242,7 @@ + @@ -10471,6 +10555,7 @@ + @@ -10526,6 +10611,7 @@ + @@ -10573,6 +10659,7 @@ + @@ -10604,6 +10691,7 @@ + @@ -10674,10 +10762,13 @@ + + + @@ -10708,6 +10799,7 @@ + @@ -10799,6 +10891,7 @@ + @@ -10876,6 +10969,7 @@ + @@ -11074,6 +11168,7 @@ + @@ -11176,6 +11271,7 @@ + @@ -11198,6 +11294,7 @@ + @@ -11286,6 +11383,7 @@ + @@ -11705,6 +11803,8 @@ + + @@ -11763,6 +11863,7 @@ + diff --git a/svgs/adventure_lab.svg b/svgs/adventure_lab.svg new file mode 100644 index 00000000000..5007638a9bb --- /dev/null +++ b/svgs/adventure_lab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/analiti.svg b/svgs/analiti.svg new file mode 100644 index 00000000000..44df615138b --- /dev/null +++ b/svgs/analiti.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/androidide.svg b/svgs/androidide.svg new file mode 100644 index 00000000000..ccd82e62de5 --- /dev/null +++ b/svgs/androidide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/apex_music.svg b/svgs/apex_music.svg new file mode 100644 index 00000000000..9cc3d43de92 --- /dev/null +++ b/svgs/apex_music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/appsheet.svg b/svgs/appsheet.svg new file mode 100644 index 00000000000..6e9835dfb90 --- /dev/null +++ b/svgs/appsheet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/aramex.svg b/svgs/aramex.svg new file mode 100644 index 00000000000..9c6ad3ba95c --- /dev/null +++ b/svgs/aramex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/autovoice.svg b/svgs/autovoice.svg new file mode 100644 index 00000000000..220410e7410 --- /dev/null +++ b/svgs/autovoice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bank_of_beijing.svg b/svgs/bank_of_beijing.svg new file mode 100644 index 00000000000..d4f375b23cc --- /dev/null +++ b/svgs/bank_of_beijing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bcr_gui.svg b/svgs/bcr_gui.svg new file mode 100644 index 00000000000..93f5113e162 --- /dev/null +++ b/svgs/bcr_gui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/beijing_card.svg b/svgs/beijing_card.svg new file mode 100644 index 00000000000..7d937c14ec5 --- /dev/null +++ b/svgs/beijing_card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/binaural_beats_generator.svg b/svgs/binaural_beats_generator.svg new file mode 100644 index 00000000000..308e4e02ff7 --- /dev/null +++ b/svgs/binaural_beats_generator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bweather.svg b/svgs/bweather.svg new file mode 100644 index 00000000000..8b3c646f686 --- /dev/null +++ b/svgs/bweather.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cbq.svg b/svgs/cbq.svg new file mode 100644 index 00000000000..617fb9317d8 --- /dev/null +++ b/svgs/cbq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/checkfirm.svg b/svgs/checkfirm.svg new file mode 100644 index 00000000000..7484d847854 --- /dev/null +++ b/svgs/checkfirm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cinemas_nos.svg b/svgs/cinemas_nos.svg new file mode 100644 index 00000000000..2af115f5417 --- /dev/null +++ b/svgs/cinemas_nos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/classwiz_calc.svg b/svgs/classwiz_calc.svg new file mode 100644 index 00000000000..06f0112e284 --- /dev/null +++ b/svgs/classwiz_calc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/clone_app.svg b/svgs/clone_app.svg new file mode 100644 index 00000000000..4c0fe916b12 --- /dev/null +++ b/svgs/clone_app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cmf_watch.svg b/svgs/cmf_watch.svg new file mode 100644 index 00000000000..463e0bb97ba --- /dev/null +++ b/svgs/cmf_watch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cuto_wallpaper.svg b/svgs/cuto_wallpaper.svg new file mode 100644 index 00000000000..f0c9cd79e29 --- /dev/null +++ b/svgs/cuto_wallpaper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cvs_pharmacy.svg b/svgs/cvs_pharmacy.svg new file mode 100644 index 00000000000..54b22fcebcc --- /dev/null +++ b/svgs/cvs_pharmacy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/davinci.svg b/svgs/davinci.svg new file mode 100644 index 00000000000..806e9c34d2b --- /dev/null +++ b/svgs/davinci.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/defit.svg b/svgs/defit.svg new file mode 100644 index 00000000000..559e85c1c6c --- /dev/null +++ b/svgs/defit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/destiny_item_manager.svg b/svgs/destiny_item_manager.svg new file mode 100644 index 00000000000..2abb404f026 --- /dev/null +++ b/svgs/destiny_item_manager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dontkillmyapp.svg b/svgs/dontkillmyapp.svg new file mode 100644 index 00000000000..840c825961f --- /dev/null +++ b/svgs/dontkillmyapp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/easy_notes.svg b/svgs/easy_notes.svg new file mode 100644 index 00000000000..a144d8835ef --- /dev/null +++ b/svgs/easy_notes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/easyshare.svg b/svgs/easyshare.svg new file mode 100644 index 00000000000..8844bdc5e24 --- /dev/null +++ b/svgs/easyshare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/epson_smart_panel.svg b/svgs/epson_smart_panel.svg new file mode 100644 index 00000000000..72e558e848d --- /dev/null +++ b/svgs/epson_smart_panel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fahrschul_campus.svg b/svgs/fahrschul_campus.svg new file mode 100644 index 00000000000..d1c78e57e93 --- /dev/null +++ b/svgs/fahrschul_campus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/forcedoze.svg b/svgs/forcedoze.svg new file mode 100644 index 00000000000..197ab54530b --- /dev/null +++ b/svgs/forcedoze.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fun_print.svg b/svgs/fun_print.svg new file mode 100644 index 00000000000..46cb97bdff7 --- /dev/null +++ b/svgs/fun_print.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/game_booster.svg b/svgs/game_booster.svg new file mode 100644 index 00000000000..dc44f5db43d --- /dev/null +++ b/svgs/game_booster.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gms_flags.svg b/svgs/gms_flags.svg new file mode 100644 index 00000000000..af8e4496cb9 --- /dev/null +++ b/svgs/gms_flags.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hios_launcher.svg b/svgs/hios_launcher.svg new file mode 100644 index 00000000000..436a487f7ba --- /dev/null +++ b/svgs/hios_launcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hmcl_pe.svg b/svgs/hmcl_pe.svg new file mode 100644 index 00000000000..50cb0828f00 --- /dev/null +++ b/svgs/hmcl_pe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/icon_pack_creator.svg b/svgs/icon_pack_creator.svg new file mode 100644 index 00000000000..9f68457aa56 --- /dev/null +++ b/svgs/icon_pack_creator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ioma.svg b/svgs/ioma.svg new file mode 100644 index 00000000000..088069e170c --- /dev/null +++ b/svgs/ioma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ismartviewpro.svg b/svgs/ismartviewpro.svg new file mode 100644 index 00000000000..ed333378e95 --- /dev/null +++ b/svgs/ismartviewpro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jumptask.svg b/svgs/jumptask.svg new file mode 100644 index 00000000000..96b0935a235 --- /dev/null +++ b/svgs/jumptask.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kage.svg b/svgs/kage.svg new file mode 100644 index 00000000000..47ed6e2f656 --- /dev/null +++ b/svgs/kage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lime.svg b/svgs/lime.svg new file mode 100644 index 00000000000..c7824492b52 --- /dev/null +++ b/svgs/lime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/linkedin_learning.svg b/svgs/linkedin_learning.svg new file mode 100644 index 00000000000..0b684b1c0c3 --- /dev/null +++ b/svgs/linkedin_learning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/live2dviewerex_face_tracker.svg b/svgs/live2dviewerex_face_tracker.svg new file mode 100644 index 00000000000..be3b856c535 --- /dev/null +++ b/svgs/live2dviewerex_face_tracker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/live2dviewerex_floating_viewer.svg b/svgs/live2dviewerex_floating_viewer.svg new file mode 100644 index 00000000000..d581ee83ba9 --- /dev/null +++ b/svgs/live2dviewerex_floating_viewer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/macsposed.svg b/svgs/macsposed.svg new file mode 100644 index 00000000000..a2827146b43 --- /dev/null +++ b/svgs/macsposed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/maf_carrefour.svg b/svgs/maf_carrefour.svg new file mode 100644 index 00000000000..73e261d8dbe --- /dev/null +++ b/svgs/maf_carrefour.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mas_showcase.svg b/svgs/mas_showcase.svg new file mode 100644 index 00000000000..bcc5b84bf61 --- /dev/null +++ b/svgs/mas_showcase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/massive.svg b/svgs/massive.svg new file mode 100644 index 00000000000..145e0e9ec66 --- /dev/null +++ b/svgs/massive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mobiljegy.svg b/svgs/mobiljegy.svg new file mode 100644 index 00000000000..819bb28074c --- /dev/null +++ b/svgs/mobiljegy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_gesture_navigation.svg b/svgs/my_gesture_navigation.svg new file mode 100644 index 00000000000..480bf8e7be2 --- /dev/null +++ b/svgs/my_gesture_navigation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/namida.svg b/svgs/namida.svg new file mode 100644 index 00000000000..1d9a5c0063d --- /dev/null +++ b/svgs/namida.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nexo.svg b/svgs/nexo.svg new file mode 100644 index 00000000000..f5fe064cc13 --- /dev/null +++ b/svgs/nexo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/norton360_antivirus.svg b/svgs/norton360_antivirus.svg new file mode 100644 index 00000000000..a7ff077ce89 --- /dev/null +++ b/svgs/norton360_antivirus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nothing_material_you_icons.svg b/svgs/nothing_material_you_icons.svg new file mode 100644 index 00000000000..7f62d7cad86 --- /dev/null +++ b/svgs/nothing_material_you_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nvplayer.svg b/svgs/nvplayer.svg new file mode 100644 index 00000000000..3ef29972bbe --- /dev/null +++ b/svgs/nvplayer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oledbuddy.svg b/svgs/oledbuddy.svg new file mode 100644 index 00000000000..0f409c09616 --- /dev/null +++ b/svgs/oledbuddy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/paradigm_reboot.svg b/svgs/paradigm_reboot.svg new file mode 100644 index 00000000000..278eef40cc0 --- /dev/null +++ b/svgs/paradigm_reboot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/peristyle.svg b/svgs/peristyle.svg new file mode 100644 index 00000000000..907a8181d03 --- /dev/null +++ b/svgs/peristyle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/poe.svg b/svgs/poe.svg new file mode 100644 index 00000000000..e7cf681d313 --- /dev/null +++ b/svgs/poe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/private_dns_quick_toggle.svg b/svgs/private_dns_quick_toggle.svg new file mode 100644 index 00000000000..1d8db667b07 --- /dev/null +++ b/svgs/private_dns_quick_toggle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/qr_scanner.svg b/svgs/qr_scanner.svg new file mode 100644 index 00000000000..14049404867 --- /dev/null +++ b/svgs/qr_scanner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/remote_link.svg b/svgs/remote_link.svg new file mode 100644 index 00000000000..547c15acc07 --- /dev/null +++ b/svgs/remote_link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/replika.svg b/svgs/replika.svg new file mode 100644 index 00000000000..e11f22d8215 --- /dev/null +++ b/svgs/replika.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ronin_wallet.svg b/svgs/ronin_wallet.svg new file mode 100644 index 00000000000..375b77a017d --- /dev/null +++ b/svgs/ronin_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rotaeno.svg b/svgs/rotaeno.svg new file mode 100644 index 00000000000..48e02c85e0e --- /dev/null +++ b/svgs/rotaeno.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rotation.svg b/svgs/rotation.svg new file mode 100644 index 00000000000..e74f3c6f411 --- /dev/null +++ b/svgs/rotation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_dropship.svg b/svgs/samsung_dropship.svg new file mode 100644 index 00000000000..2be483506bc --- /dev/null +++ b/svgs/samsung_dropship.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_media_and_devices.svg b/svgs/samsung_media_and_devices.svg new file mode 100644 index 00000000000..5e6c617cca0 --- /dev/null +++ b/svgs/samsung_media_and_devices.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/scan_mypeugeot.svg b/svgs/scan_mypeugeot.svg new file mode 100644 index 00000000000..7150e78d525 --- /dev/null +++ b/svgs/scan_mypeugeot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/scarlet.svg b/svgs/scarlet.svg new file mode 100644 index 00000000000..085ce862882 --- /dev/null +++ b/svgs/scarlet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/secure_vpn.svg b/svgs/secure_vpn.svg new file mode 100644 index 00000000000..a6551b29376 --- /dev/null +++ b/svgs/secure_vpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/send_anywhere.svg b/svgs/send_anywhere.svg new file mode 100644 index 00000000000..563358d7a1b --- /dev/null +++ b/svgs/send_anywhere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/seqta_learn.svg b/svgs/seqta_learn.svg new file mode 100644 index 00000000000..9c11a521b87 --- /dev/null +++ b/svgs/seqta_learn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stack_exchange.svg b/svgs/stack_exchange.svg new file mode 100644 index 00000000000..519883fe4db --- /dev/null +++ b/svgs/stack_exchange.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stack_overflow.svg b/svgs/stack_overflow.svg new file mode 100644 index 00000000000..45da5d4119b --- /dev/null +++ b/svgs/stack_overflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/standby_mode.svg b/svgs/standby_mode.svg new file mode 100644 index 00000000000..d30dd0d7177 --- /dev/null +++ b/svgs/standby_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stick_with_it.svg b/svgs/stick_with_it.svg new file mode 100644 index 00000000000..42a90068987 --- /dev/null +++ b/svgs/stick_with_it.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stitch.svg b/svgs/stitch.svg new file mode 100644 index 00000000000..329d12ecd46 --- /dev/null +++ b/svgs/stitch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/structured.svg b/svgs/structured.svg new file mode 100644 index 00000000000..68f1facfdd2 --- /dev/null +++ b/svgs/structured.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/subwallet.svg b/svgs/subwallet.svg new file mode 100644 index 00000000000..843861db94b --- /dev/null +++ b/svgs/subwallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sudachi.svg b/svgs/sudachi.svg new file mode 100644 index 00000000000..bfe507025d2 --- /dev/null +++ b/svgs/sudachi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/superlist.svg b/svgs/superlist.svg new file mode 100644 index 00000000000..7953f4c3034 --- /dev/null +++ b/svgs/superlist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/synology_photos.svg b/svgs/synology_photos.svg new file mode 100644 index 00000000000..b4cf4615f5b --- /dev/null +++ b/svgs/synology_photos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/system_app_remover.svg b/svgs/system_app_remover.svg new file mode 100644 index 00000000000..4763be0cfb9 --- /dev/null +++ b/svgs/system_app_remover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/t_mobile_device_unlock.svg b/svgs/t_mobile_device_unlock.svg new file mode 100644 index 00000000000..9ced4d49d54 --- /dev/null +++ b/svgs/t_mobile_device_unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tack_metronome.svg b/svgs/tack_metronome.svg new file mode 100644 index 00000000000..0545a825e87 --- /dev/null +++ b/svgs/tack_metronome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/touchtomorrow.svg b/svgs/touchtomorrow.svg new file mode 100644 index 00000000000..0bd61f3ea54 --- /dev/null +++ b/svgs/touchtomorrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/uptodown_app_store.svg b/svgs/uptodown_app_store.svg new file mode 100644 index 00000000000..415cd219f38 --- /dev/null +++ b/svgs/uptodown_app_store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/varsity.svg b/svgs/varsity.svg new file mode 100644 index 00000000000..7d1f4305d3a --- /dev/null +++ b/svgs/varsity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vero.svg b/svgs/vero.svg new file mode 100644 index 00000000000..fad218306d8 --- /dev/null +++ b/svgs/vero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/video_app_for_vk.svg b/svgs/video_app_for_vk.svg new file mode 100644 index 00000000000..d94f1abca1d --- /dev/null +++ b/svgs/video_app_for_vk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_app_store.svg b/svgs/vivo_app_store.svg new file mode 100644 index 00000000000..f450521e1c0 --- /dev/null +++ b/svgs/vivo_app_store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_console.svg b/svgs/vivo_console.svg new file mode 100644 index 00000000000..a124d4210eb --- /dev/null +++ b/svgs/vivo_console.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_lock.svg b/svgs/vivo_lock.svg new file mode 100644 index 00000000000..3cb7e886a35 --- /dev/null +++ b/svgs/vivo_lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/voicegpt.svg b/svgs/voicegpt.svg new file mode 100644 index 00000000000..87481e1a535 --- /dev/null +++ b/svgs/voicegpt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wallpaperexport.svg b/svgs/wallpaperexport.svg new file mode 100644 index 00000000000..dec08acaa04 --- /dev/null +++ b/svgs/wallpaperexport.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/webull.svg b/svgs/webull.svg new file mode 100644 index 00000000000..f488f0135da --- /dev/null +++ b/svgs/webull.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wim_hof_method.svg b/svgs/wim_hof_method.svg new file mode 100644 index 00000000000..f2751ccd089 --- /dev/null +++ b/svgs/wim_hof_method.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/xapks_installer.svg b/svgs/xapks_installer.svg new file mode 100644 index 00000000000..df7039c5377 --- /dev/null +++ b/svgs/xapks_installer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/xda_one.svg b/svgs/xda_one.svg new file mode 100644 index 00000000000..2f11365c755 --- /dev/null +++ b/svgs/xda_one.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/you_icons.svg b/svgs/you_icons.svg new file mode 100644 index 00000000000..17403b33be2 --- /dev/null +++ b/svgs/you_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file From ddb0d4b49c77f18e1073c3d2c15372b5003271e8 Mon Sep 17 00:00:00 2001 From: Goooler Date: Thu, 20 Jun 2024 10:13:51 +0800 Subject: [PATCH 169/527] Bump targetSdk to 35 --- app/build.gradle.kts | 4 ++-- app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 75a0528d589..142b5d7a524 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -30,13 +30,13 @@ val version = "2.10.1" val versionDisplayName = "$version ${if (isReleaseBuild) "" else devReleaseName}" android { - compileSdk = 34 + compileSdk = 35 namespace = "app.lawnchair.lawnicons" defaultConfig { applicationId = "app.lawnchair.lawnicons" minSdk = 26 - targetSdk = 34 + targetSdk = compileSdk versionCode = 14 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index e4c56c99858..06e90530536 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -61,7 +61,7 @@ class MainActivity : ComponentActivity() { if (bitmap.isRecycled) { bitmap } else { - bitmap.copy(bitmap.config, false) + bitmap.copy(requireNotNull(bitmap.config), false) }, ) } catch (e: Exception) { From cf438fb958d73e7cb1593a95642abe64a41fef94 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:20:51 +0300 Subject: [PATCH 170/527] +18 links (#2171) --- app/assets/appfilter.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a4736b3f584..ec9de66ff1e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -376,6 +376,7 @@ + @@ -771,6 +772,7 @@ + @@ -2567,6 +2569,8 @@ + + @@ -3924,6 +3928,7 @@ + @@ -5225,6 +5230,7 @@ + @@ -5841,6 +5847,7 @@ + @@ -6081,6 +6088,7 @@ + @@ -7455,6 +7463,7 @@ + @@ -7806,6 +7815,7 @@ + @@ -7988,6 +7998,7 @@ + @@ -8077,6 +8088,7 @@ + @@ -8250,6 +8262,7 @@ + @@ -8559,6 +8572,7 @@ + @@ -9142,6 +9156,7 @@ + @@ -10479,6 +10494,7 @@ + @@ -11477,6 +11493,7 @@ + @@ -11509,6 +11526,7 @@ + From 0ea52e5fffc82c6ff6d416dc5bdc74d85e045389 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 22 Jun 2024 20:20:41 +0300 Subject: [PATCH 171/527] +17 links (#2175) --- app/assets/appfilter.xml | 29 ++++++++++++++++---- svgs/{screen_stream.svg => screenstream.svg} | 0 svgs/{sova_five.svg => sova_v.svg} | 0 3 files changed, 23 insertions(+), 6 deletions(-) rename svgs/{screen_stream.svg => screenstream.svg} (100%) rename svgs/{sova_five.svg => sova_v.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ec9de66ff1e..7f0d5062e4a 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -956,6 +956,7 @@ + @@ -2234,6 +2235,7 @@ + @@ -2509,6 +2511,7 @@ + @@ -4412,6 +4415,7 @@ + @@ -4840,6 +4844,7 @@ + @@ -5537,6 +5542,7 @@ + @@ -5574,6 +5580,7 @@ + @@ -6929,6 +6936,7 @@ + @@ -8367,8 +8375,9 @@ - - + + + @@ -8904,6 +8913,7 @@ + @@ -9281,10 +9291,11 @@ - - - - + + + + + @@ -9364,6 +9375,7 @@ + @@ -9684,6 +9696,7 @@ + @@ -9713,6 +9726,7 @@ + @@ -10132,6 +10146,7 @@ + @@ -10597,6 +10612,7 @@ + @@ -11725,6 +11741,7 @@ + diff --git a/svgs/screen_stream.svg b/svgs/screenstream.svg similarity index 100% rename from svgs/screen_stream.svg rename to svgs/screenstream.svg diff --git a/svgs/sova_five.svg b/svgs/sova_v.svg similarity index 100% rename from svgs/sova_five.svg rename to svgs/sova_v.svg From 26a0c0cce729fecebb88217cea27257267ca6e82 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sun, 23 Jun 2024 14:01:36 +1000 Subject: [PATCH 172/527] + 4 icons, + 1 link (#2172) * + 3 icons, + 1 link * + 1 icon * Small fix * Apply requested changes [1] * Small fix * Small fix --- app/assets/appfilter.xml | 5 +++ svgs/abp_for_samsung_internet.svg | 51 +++++++++++++++++++++++ svgs/bitwarden_beta.svg | 26 ++++++++++++ svgs/bunny_manager.svg | 25 ++++++++++++ svgs/futo_keyboard.svg | 67 +++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+) create mode 100644 svgs/abp_for_samsung_internet.svg create mode 100644 svgs/bitwarden_beta.svg create mode 100644 svgs/bunny_manager.svg create mode 100644 svgs/futo_keyboard.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 7f0d5062e4a..896223e1699 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -125,6 +125,7 @@ + @@ -1045,6 +1046,7 @@ + @@ -1279,6 +1281,7 @@ + @@ -1759,6 +1762,7 @@ + @@ -3483,6 +3487,7 @@ + diff --git a/svgs/abp_for_samsung_internet.svg b/svgs/abp_for_samsung_internet.svg new file mode 100644 index 00000000000..437e2ded235 --- /dev/null +++ b/svgs/abp_for_samsung_internet.svg @@ -0,0 +1,51 @@ + + diff --git a/svgs/bitwarden_beta.svg b/svgs/bitwarden_beta.svg new file mode 100644 index 00000000000..5e6d558c825 --- /dev/null +++ b/svgs/bitwarden_beta.svg @@ -0,0 +1,26 @@ + + diff --git a/svgs/bunny_manager.svg b/svgs/bunny_manager.svg new file mode 100644 index 00000000000..c1fb98d9352 --- /dev/null +++ b/svgs/bunny_manager.svg @@ -0,0 +1,25 @@ + + + + + + diff --git a/svgs/futo_keyboard.svg b/svgs/futo_keyboard.svg new file mode 100644 index 00000000000..8a4af1693ea --- /dev/null +++ b/svgs/futo_keyboard.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + From 38de92400289d6cbffd5b881692ec9c7c8217693 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 24 Jun 2024 13:14:37 +0300 Subject: [PATCH 173/527] +20 links (#2177) * +20 links * Update some icons --- app/assets/appfilter.xml | 34 +++++++++++++++---- svgs/{apk_editor_pro.svg => apk_editor.svg} | 0 svgs/autotagger.svg | 2 +- svgs/companion_for_gltools.svg | 2 +- svgs/eletmento.svg | 2 +- svgs/{fix_price.svg => fixprice.svg} | 0 ..._toolbox.svg => toolbox_for_minecraft.svg} | 0 7 files changed, 30 insertions(+), 10 deletions(-) rename svgs/{apk_editor_pro.svg => apk_editor.svg} (100%) rename svgs/{fix_price.svg => fixprice.svg} (100%) rename svgs/{minecraft_toolbox.svg => toolbox_for_minecraft.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 896223e1699..70a3e5e0615 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -419,6 +419,7 @@ + @@ -522,10 +523,11 @@ - - - - + + + + + @@ -773,6 +775,7 @@ + @@ -1283,6 +1286,7 @@ + @@ -1476,6 +1480,7 @@ + @@ -2285,6 +2290,7 @@ + @@ -3219,8 +3225,9 @@ - - + + + @@ -3282,6 +3289,7 @@ + @@ -4200,6 +4208,7 @@ + @@ -4952,6 +4961,7 @@ + @@ -5308,6 +5318,7 @@ + @@ -5356,6 +5367,7 @@ + @@ -7299,6 +7311,7 @@ + @@ -7978,6 +7991,7 @@ + @@ -8394,6 +8408,7 @@ + @@ -9171,6 +9186,7 @@ + @@ -9296,6 +9312,7 @@ + @@ -9578,6 +9595,7 @@ + @@ -10251,7 +10269,8 @@ - + + @@ -11629,6 +11648,7 @@ + diff --git a/svgs/apk_editor_pro.svg b/svgs/apk_editor.svg similarity index 100% rename from svgs/apk_editor_pro.svg rename to svgs/apk_editor.svg diff --git a/svgs/autotagger.svg b/svgs/autotagger.svg index 3d624557351..9b827b858ed 100644 --- a/svgs/autotagger.svg +++ b/svgs/autotagger.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/companion_for_gltools.svg b/svgs/companion_for_gltools.svg index 366565193e5..f12e363a41c 100644 --- a/svgs/companion_for_gltools.svg +++ b/svgs/companion_for_gltools.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/eletmento.svg b/svgs/eletmento.svg index 013084d5537..9b795736cb6 100644 --- a/svgs/eletmento.svg +++ b/svgs/eletmento.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/fix_price.svg b/svgs/fixprice.svg similarity index 100% rename from svgs/fix_price.svg rename to svgs/fixprice.svg diff --git a/svgs/minecraft_toolbox.svg b/svgs/toolbox_for_minecraft.svg similarity index 100% rename from svgs/minecraft_toolbox.svg rename to svgs/toolbox_for_minecraft.svg From e9851b54dcc837fd16592b9a0a4c56355e351766 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 07:13:33 +0800 Subject: [PATCH 174/527] Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.7.1 (#2178) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 142b5d7a524..c62f529a8c2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -160,7 +160,7 @@ dependencies { val retrofitVersion = "2.11.0" implementation("com.squareup.retrofit2:retrofit:$retrofitVersion") implementation("com.squareup.retrofit2:converter-kotlinx-serialization:$retrofitVersion") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") implementation("com.github.nanihadesuka:LazyColumnScrollbar:2.1.0") From a0488a7b08e3c14bd41f5754b80c8c8cb09dacdb Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Thu, 27 Jun 2024 04:59:35 +0800 Subject: [PATCH 175/527] +12 icons, +1 link, update 1 icon (#2174) * +5 icons * +4 icons * +1 icon * +2 icons * fix 5 icons * fix 3 icons * fix 1 icon * update 1 icon * fix 4 icons * fix 3 icons --- app/assets/appfilter.xml | 13 +++++++++++++ svgs/aircade.svg | 3 +++ svgs/banxo.svg | 5 +++++ svgs/barquode.svg | 6 ++++++ svgs/bluetooth_control.svg | 3 +++ svgs/bonjour_ratp.svg | 3 +++ svgs/fandango.svg | 3 +++ svgs/maimai_data.svg | 3 +++ svgs/pipepipe.svg | 4 +++- svgs/rizline.svg | 3 +++ svgs/rizline_cn.svg | 4 ++++ svgs/sfacg.svg | 3 +++ svgs/taginfo.svg | 3 +++ svgs/tagwriter.svg | 3 +++ 14 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 svgs/aircade.svg create mode 100644 svgs/banxo.svg create mode 100644 svgs/barquode.svg create mode 100644 svgs/bluetooth_control.svg create mode 100644 svgs/bonjour_ratp.svg create mode 100644 svgs/fandango.svg create mode 100644 svgs/maimai_data.svg create mode 100644 svgs/rizline.svg create mode 100644 svgs/rizline_cn.svg create mode 100644 svgs/sfacg.svg create mode 100644 svgs/taginfo.svg create mode 100644 svgs/tagwriter.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 70a3e5e0615..2f151192f37 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -257,6 +257,7 @@ + @@ -842,6 +843,7 @@ + @@ -857,6 +859,7 @@ + @@ -1154,6 +1157,7 @@ + @@ -3051,6 +3055,8 @@ + + @@ -5240,6 +5246,7 @@ + @@ -8095,6 +8102,7 @@ + @@ -9682,8 +9690,10 @@ + + @@ -12006,6 +12016,9 @@ + + + diff --git a/svgs/aircade.svg b/svgs/aircade.svg new file mode 100644 index 00000000000..27e9f40214f --- /dev/null +++ b/svgs/aircade.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/banxo.svg b/svgs/banxo.svg new file mode 100644 index 00000000000..8ebad8226b2 --- /dev/null +++ b/svgs/banxo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svgs/barquode.svg b/svgs/barquode.svg new file mode 100644 index 00000000000..06ab4be348d --- /dev/null +++ b/svgs/barquode.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/bluetooth_control.svg b/svgs/bluetooth_control.svg new file mode 100644 index 00000000000..e6a2f34572b --- /dev/null +++ b/svgs/bluetooth_control.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/bonjour_ratp.svg b/svgs/bonjour_ratp.svg new file mode 100644 index 00000000000..f29bc3bc26d --- /dev/null +++ b/svgs/bonjour_ratp.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/fandango.svg b/svgs/fandango.svg new file mode 100644 index 00000000000..e98b61267fa --- /dev/null +++ b/svgs/fandango.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/maimai_data.svg b/svgs/maimai_data.svg new file mode 100644 index 00000000000..4e1772af255 --- /dev/null +++ b/svgs/maimai_data.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/pipepipe.svg b/svgs/pipepipe.svg index a18c02bf61f..ed529017596 100644 --- a/svgs/pipepipe.svg +++ b/svgs/pipepipe.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/svgs/rizline.svg b/svgs/rizline.svg new file mode 100644 index 00000000000..f9a0e5cb8dd --- /dev/null +++ b/svgs/rizline.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/rizline_cn.svg b/svgs/rizline_cn.svg new file mode 100644 index 00000000000..84538ceb656 --- /dev/null +++ b/svgs/rizline_cn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/sfacg.svg b/svgs/sfacg.svg new file mode 100644 index 00000000000..8f18c8e30d0 --- /dev/null +++ b/svgs/sfacg.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/taginfo.svg b/svgs/taginfo.svg new file mode 100644 index 00000000000..7920e8c1ee1 --- /dev/null +++ b/svgs/taginfo.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/tagwriter.svg b/svgs/tagwriter.svg new file mode 100644 index 00000000000..12c9d86075e --- /dev/null +++ b/svgs/tagwriter.svg @@ -0,0 +1,3 @@ + + + From 5eed479f94ab49b4194f191c868c554ea064a31f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 08:16:08 +0800 Subject: [PATCH 176/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta04 (#2180) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c62f529a8c2..f96bb8d0cfc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -148,7 +148,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta03") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta03") + implementation("androidx.navigation:navigation-compose:2.8.0-beta04") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") From 5dd9fceff96ede148feaa57f09577c16c4f30acf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 08:16:16 +0800 Subject: [PATCH 177/527] Update dependency androidx.compose.material3:material3 to v1.3.0-beta04 (#2179) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f96bb8d0cfc..d0f4a7fdee3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -146,7 +146,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") - implementation("androidx.compose.material3:material3:1.3.0-beta03") + implementation("androidx.compose.material3:material3:1.3.0-beta04") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta04") implementation("androidx.core:core-splashscreen:1.0.1") From e9474504da9da253e6868aa9f8a5083b3c354740 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 30 Jun 2024 14:24:21 +0300 Subject: [PATCH 178/527] [Barter 4] +100 icons: Alza, Calm, VMOS (#2184) --- app/assets/appfilter.xml | 106 +++++++++++++++++++++++- svgs/_123_cloud_drive.svg | 1 + svgs/_2_3_4_player_mini_games.svg | 1 + svgs/allen.svg | 1 + svgs/alza.svg | 1 + svgs/anixart.svg | 1 + svgs/apkmirror.svg | 1 + svgs/arknights.svg | 1 + svgs/beacon_game_launcher.svg | 1 + svgs/blockit.svg | 1 + svgs/bloons_td_battles_2.svg | 1 + svgs/brubank.svg | 1 + svgs/bsd_brawl.svg | 1 + svgs/bura.svg | 1 + svgs/calm.svg | 1 + svgs/camuzzi_gas.svg | 1 + svgs/car_parking_multiplayer.svg | 1 + svgs/cebu_pacific.svg | 1 + svgs/cookierun.svg | 1 + svgs/copy_sms_code.svg | 1 + svgs/cuscon.svg | 1 + svgs/dead_cells.svg | 1 + svgs/deepstash.svg | 1 + svgs/device_info_liuzho.svg | 1 + svgs/dmrc_momentum.svg | 1 + svgs/ebook_converter.svg | 1 + svgs/eset_mobile_security_antivirus.svg | 1 + svgs/gamescope.svg | 1 + svgs/geometry_dash_subzero.svg | 1 + svgs/geometry_dash_world.svg | 1 + svgs/gta_iii.svg | 1 + svgs/hiper_scientific_calculator.svg | 1 + svgs/honey.svg | 1 + svgs/honkai_impact_3.svg | 1 + svgs/indoasis.svg | 1 + svgs/kai_access.svg | 1 + svgs/kde_weather.svg | 1 + svgs/kvb.svg | 1 + svgs/linkaja.svg | 1 + svgs/linux_command_library.svg | 1 + svgs/lose_weight_app_for_men.svg | 1 + svgs/lrc_editor.svg | 1 + svgs/lumina_walls.svg | 1 + svgs/mapy.svg | 1 + svgs/meb_e_okul_vbs.svg | 1 + svgs/mekorama.svg | 1 + svgs/money_manager.svg | 1 + svgs/music_audio_editor.svg | 1 + svgs/muzei.svg | 1 + svgs/my_kyivstar.svg | 1 + svgs/mycamu.svg | 1 + svgs/mychart.svg | 1 + svgs/mydramalist.svg | 1 + svgs/newpass.svg | 1 + svgs/ngl.svg | 1 + svgs/octogram.svg | 1 + svgs/omni.svg | 1 + svgs/oneui_circle_icons.svg | 1 + svgs/orbia.svg | 1 + svgs/padlet.svg | 1 + svgs/parking_bahia.svg | 1 + svgs/pc_creator_2.svg | 1 + svgs/pedidosya.svg | 1 + svgs/personal_pay.svg | 1 + svgs/pikashow.svg | 1 + svgs/pixel_studio.svg | 1 + svgs/pixel_xpert.svg | 1 + svgs/plants_vs_zombies.svg | 1 + svgs/poco_launcher.svg | 1 + svgs/premier_league.svg | 1 + svgs/progressive.svg | 1 + svgs/qcy.svg | 1 + svgs/quetta.svg | 1 + svgs/quickshortcutmaker.svg | 1 + svgs/railways_train_simulator.svg | 1 + svgs/sam_helper.svg | 1 + svgs/signal_detector.svg | 1 + svgs/simple_scan.svg | 1 + svgs/simple_view.svg | 1 + svgs/smashy_road_wanted_2.svg | 1 + svgs/sns_24.svg | 1 + svgs/socratic.svg | 1 + svgs/squid_news.svg | 1 + svgs/sube.svg | 1 + svgs/telegram_sms.svg | 1 + svgs/temple_run_2.svg | 1 + svgs/tenpo.svg | 1 + svgs/termone_plus.svg | 1 + svgs/triunfo_seguros.svg | 1 + svgs/turrit.svg | 1 + svgs/ubimaster.svg | 1 + svgs/unipatcher.svg | 1 + svgs/vector.svg | 1 + svgs/video_fun.svg | 1 + svgs/vmos.svg | 1 + svgs/vrt_nws.svg | 1 + svgs/walgreens.svg | 1 + svgs/warzone_loadout_codmunity.svg | 1 + svgs/wix_owner.svg | 1 + svgs/wordreference.svg | 1 + svgs/yandex_food.svg | 1 + 101 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 svgs/_123_cloud_drive.svg create mode 100644 svgs/_2_3_4_player_mini_games.svg create mode 100644 svgs/allen.svg create mode 100644 svgs/alza.svg create mode 100644 svgs/anixart.svg create mode 100644 svgs/apkmirror.svg create mode 100644 svgs/arknights.svg create mode 100644 svgs/beacon_game_launcher.svg create mode 100644 svgs/blockit.svg create mode 100644 svgs/bloons_td_battles_2.svg create mode 100644 svgs/brubank.svg create mode 100644 svgs/bsd_brawl.svg create mode 100644 svgs/bura.svg create mode 100644 svgs/calm.svg create mode 100644 svgs/camuzzi_gas.svg create mode 100644 svgs/car_parking_multiplayer.svg create mode 100644 svgs/cebu_pacific.svg create mode 100644 svgs/cookierun.svg create mode 100644 svgs/copy_sms_code.svg create mode 100644 svgs/cuscon.svg create mode 100644 svgs/dead_cells.svg create mode 100644 svgs/deepstash.svg create mode 100644 svgs/device_info_liuzho.svg create mode 100644 svgs/dmrc_momentum.svg create mode 100644 svgs/ebook_converter.svg create mode 100644 svgs/eset_mobile_security_antivirus.svg create mode 100644 svgs/gamescope.svg create mode 100644 svgs/geometry_dash_subzero.svg create mode 100644 svgs/geometry_dash_world.svg create mode 100644 svgs/gta_iii.svg create mode 100644 svgs/hiper_scientific_calculator.svg create mode 100644 svgs/honey.svg create mode 100644 svgs/honkai_impact_3.svg create mode 100644 svgs/indoasis.svg create mode 100644 svgs/kai_access.svg create mode 100644 svgs/kde_weather.svg create mode 100644 svgs/kvb.svg create mode 100644 svgs/linkaja.svg create mode 100644 svgs/linux_command_library.svg create mode 100644 svgs/lose_weight_app_for_men.svg create mode 100644 svgs/lrc_editor.svg create mode 100644 svgs/lumina_walls.svg create mode 100644 svgs/mapy.svg create mode 100644 svgs/meb_e_okul_vbs.svg create mode 100644 svgs/mekorama.svg create mode 100644 svgs/money_manager.svg create mode 100644 svgs/music_audio_editor.svg create mode 100644 svgs/muzei.svg create mode 100644 svgs/my_kyivstar.svg create mode 100644 svgs/mycamu.svg create mode 100644 svgs/mychart.svg create mode 100644 svgs/mydramalist.svg create mode 100644 svgs/newpass.svg create mode 100644 svgs/ngl.svg create mode 100644 svgs/octogram.svg create mode 100644 svgs/omni.svg create mode 100644 svgs/oneui_circle_icons.svg create mode 100644 svgs/orbia.svg create mode 100644 svgs/padlet.svg create mode 100644 svgs/parking_bahia.svg create mode 100644 svgs/pc_creator_2.svg create mode 100644 svgs/pedidosya.svg create mode 100644 svgs/personal_pay.svg create mode 100644 svgs/pikashow.svg create mode 100644 svgs/pixel_studio.svg create mode 100644 svgs/pixel_xpert.svg create mode 100644 svgs/plants_vs_zombies.svg create mode 100644 svgs/poco_launcher.svg create mode 100644 svgs/premier_league.svg create mode 100644 svgs/progressive.svg create mode 100644 svgs/qcy.svg create mode 100644 svgs/quetta.svg create mode 100644 svgs/quickshortcutmaker.svg create mode 100644 svgs/railways_train_simulator.svg create mode 100644 svgs/sam_helper.svg create mode 100644 svgs/signal_detector.svg create mode 100644 svgs/simple_scan.svg create mode 100644 svgs/simple_view.svg create mode 100644 svgs/smashy_road_wanted_2.svg create mode 100644 svgs/sns_24.svg create mode 100644 svgs/socratic.svg create mode 100644 svgs/squid_news.svg create mode 100644 svgs/sube.svg create mode 100644 svgs/telegram_sms.svg create mode 100644 svgs/temple_run_2.svg create mode 100644 svgs/tenpo.svg create mode 100644 svgs/termone_plus.svg create mode 100644 svgs/triunfo_seguros.svg create mode 100644 svgs/turrit.svg create mode 100644 svgs/ubimaster.svg create mode 100644 svgs/unipatcher.svg create mode 100644 svgs/vector.svg create mode 100644 svgs/video_fun.svg create mode 100644 svgs/vmos.svg create mode 100644 svgs/vrt_nws.svg create mode 100644 svgs/walgreens.svg create mode 100644 svgs/warzone_loadout_codmunity.svg create mode 100644 svgs/wix_owner.svg create mode 100644 svgs/wordreference.svg create mode 100644 svgs/yandex_food.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 2f151192f37..0247354eefb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -47,6 +47,7 @@ + @@ -57,6 +58,7 @@ + @@ -357,6 +359,7 @@ + @@ -378,6 +381,7 @@ + @@ -481,6 +485,7 @@ + @@ -533,6 +538,7 @@ + @@ -647,6 +653,7 @@ + @@ -921,6 +928,7 @@ + @@ -1100,6 +1108,7 @@ + @@ -1119,6 +1128,7 @@ + @@ -1262,7 +1272,9 @@ + + @@ -1290,6 +1302,7 @@ + @@ -1481,6 +1494,7 @@ + @@ -1661,6 +1675,7 @@ + @@ -1688,6 +1703,7 @@ + @@ -1749,6 +1765,7 @@ + @@ -2202,12 +2219,14 @@ + + @@ -2274,6 +2293,7 @@ + @@ -2350,6 +2370,7 @@ + @@ -2368,6 +2389,7 @@ + @@ -2431,6 +2453,7 @@ + @@ -2572,6 +2595,7 @@ + @@ -2836,6 +2860,7 @@ + @@ -2930,6 +2955,7 @@ + @@ -3594,6 +3620,7 @@ + @@ -3662,6 +3689,8 @@ + + @@ -4003,6 +4032,7 @@ + @@ -4135,6 +4165,7 @@ + @@ -4157,6 +4188,7 @@ + @@ -4164,6 +4196,7 @@ + @@ -4386,6 +4419,7 @@ + @@ -4646,6 +4680,7 @@ + @@ -4677,6 +4712,7 @@ + @@ -4882,6 +4918,7 @@ + @@ -5077,6 +5114,7 @@ + @@ -5091,6 +5129,7 @@ + @@ -5150,11 +5189,13 @@ + + @@ -5167,6 +5208,7 @@ + @@ -5280,6 +5322,7 @@ + @@ -5400,6 +5443,7 @@ + @@ -5436,6 +5480,7 @@ + @@ -5835,6 +5880,7 @@ + @@ -5941,6 +5987,7 @@ + @@ -5981,6 +6028,7 @@ + @@ -6118,7 +6166,9 @@ + + @@ -6126,6 +6176,7 @@ + @@ -6330,6 +6381,7 @@ + @@ -6385,6 +6437,7 @@ + @@ -6603,6 +6656,7 @@ + @@ -6709,6 +6763,7 @@ + @@ -6757,6 +6812,7 @@ + @@ -6845,6 +6901,7 @@ + @@ -6926,6 +6983,7 @@ + @@ -6968,6 +7026,7 @@ + @@ -7014,6 +7073,7 @@ + @@ -7029,6 +7089,7 @@ + @@ -7056,6 +7117,7 @@ + @@ -7314,6 +7376,7 @@ + @@ -7361,11 +7424,13 @@ + + @@ -7441,6 +7506,7 @@ + @@ -7526,6 +7592,7 @@ + @@ -7622,6 +7689,7 @@ + @@ -7658,6 +7726,7 @@ + @@ -7712,6 +7781,7 @@ + @@ -7771,6 +7841,7 @@ + @@ -7782,6 +7853,7 @@ + @@ -7850,6 +7922,7 @@ + @@ -8189,6 +8262,7 @@ + @@ -8626,6 +8700,7 @@ + @@ -9005,6 +9080,7 @@ + @@ -9028,6 +9104,7 @@ + @@ -9184,6 +9261,7 @@ + @@ -9241,10 +9319,12 @@ + + @@ -9388,6 +9468,7 @@ + @@ -9536,6 +9617,7 @@ + @@ -9843,6 +9925,7 @@ + @@ -9859,10 +9942,12 @@ + + @@ -9871,6 +9956,7 @@ + @@ -10397,6 +10483,7 @@ + @@ -10469,6 +10556,7 @@ + @@ -10522,6 +10610,7 @@ + @@ -10571,6 +10660,7 @@ + @@ -10680,6 +10770,7 @@ + @@ -10768,6 +10859,7 @@ + @@ -10851,6 +10943,7 @@ + @@ -10899,6 +10992,7 @@ + @@ -10935,6 +11029,7 @@ + @@ -10977,6 +11072,7 @@ + @@ -11255,6 +11351,7 @@ + @@ -11279,6 +11376,7 @@ + @@ -11715,6 +11813,7 @@ + @@ -11759,6 +11858,7 @@ + @@ -11906,6 +12006,7 @@ + @@ -11985,6 +12086,8 @@ + + @@ -12016,9 +12119,6 @@ - - - diff --git a/svgs/_123_cloud_drive.svg b/svgs/_123_cloud_drive.svg new file mode 100644 index 00000000000..1003d9bd07d --- /dev/null +++ b/svgs/_123_cloud_drive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/_2_3_4_player_mini_games.svg b/svgs/_2_3_4_player_mini_games.svg new file mode 100644 index 00000000000..e109d2fe431 --- /dev/null +++ b/svgs/_2_3_4_player_mini_games.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/allen.svg b/svgs/allen.svg new file mode 100644 index 00000000000..330a71d86b8 --- /dev/null +++ b/svgs/allen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alza.svg b/svgs/alza.svg new file mode 100644 index 00000000000..7907538f937 --- /dev/null +++ b/svgs/alza.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/anixart.svg b/svgs/anixart.svg new file mode 100644 index 00000000000..04e2961e673 --- /dev/null +++ b/svgs/anixart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/apkmirror.svg b/svgs/apkmirror.svg new file mode 100644 index 00000000000..cdeb0180f4d --- /dev/null +++ b/svgs/apkmirror.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/arknights.svg b/svgs/arknights.svg new file mode 100644 index 00000000000..dcca36e793c --- /dev/null +++ b/svgs/arknights.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/beacon_game_launcher.svg b/svgs/beacon_game_launcher.svg new file mode 100644 index 00000000000..70805b1d7bb --- /dev/null +++ b/svgs/beacon_game_launcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/blockit.svg b/svgs/blockit.svg new file mode 100644 index 00000000000..477d25ed4a9 --- /dev/null +++ b/svgs/blockit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bloons_td_battles_2.svg b/svgs/bloons_td_battles_2.svg new file mode 100644 index 00000000000..81a1ef0c1f1 --- /dev/null +++ b/svgs/bloons_td_battles_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/brubank.svg b/svgs/brubank.svg new file mode 100644 index 00000000000..25d522f952b --- /dev/null +++ b/svgs/brubank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bsd_brawl.svg b/svgs/bsd_brawl.svg new file mode 100644 index 00000000000..63bf15251ba --- /dev/null +++ b/svgs/bsd_brawl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bura.svg b/svgs/bura.svg new file mode 100644 index 00000000000..bcd6926bce9 --- /dev/null +++ b/svgs/bura.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/calm.svg b/svgs/calm.svg new file mode 100644 index 00000000000..4df7e0893c7 --- /dev/null +++ b/svgs/calm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/camuzzi_gas.svg b/svgs/camuzzi_gas.svg new file mode 100644 index 00000000000..8d38e34715c --- /dev/null +++ b/svgs/camuzzi_gas.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/car_parking_multiplayer.svg b/svgs/car_parking_multiplayer.svg new file mode 100644 index 00000000000..b033ba18b7e --- /dev/null +++ b/svgs/car_parking_multiplayer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cebu_pacific.svg b/svgs/cebu_pacific.svg new file mode 100644 index 00000000000..7ee0fed9f4d --- /dev/null +++ b/svgs/cebu_pacific.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cookierun.svg b/svgs/cookierun.svg new file mode 100644 index 00000000000..8b96806d980 --- /dev/null +++ b/svgs/cookierun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/copy_sms_code.svg b/svgs/copy_sms_code.svg new file mode 100644 index 00000000000..113b328355c --- /dev/null +++ b/svgs/copy_sms_code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cuscon.svg b/svgs/cuscon.svg new file mode 100644 index 00000000000..875f8b73113 --- /dev/null +++ b/svgs/cuscon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dead_cells.svg b/svgs/dead_cells.svg new file mode 100644 index 00000000000..878e6fe4ea4 --- /dev/null +++ b/svgs/dead_cells.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/deepstash.svg b/svgs/deepstash.svg new file mode 100644 index 00000000000..927fedbdf68 --- /dev/null +++ b/svgs/deepstash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/device_info_liuzho.svg b/svgs/device_info_liuzho.svg new file mode 100644 index 00000000000..ad2a66cec85 --- /dev/null +++ b/svgs/device_info_liuzho.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dmrc_momentum.svg b/svgs/dmrc_momentum.svg new file mode 100644 index 00000000000..a6e480ad27d --- /dev/null +++ b/svgs/dmrc_momentum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ebook_converter.svg b/svgs/ebook_converter.svg new file mode 100644 index 00000000000..5d317aa472d --- /dev/null +++ b/svgs/ebook_converter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/eset_mobile_security_antivirus.svg b/svgs/eset_mobile_security_antivirus.svg new file mode 100644 index 00000000000..c606adbba79 --- /dev/null +++ b/svgs/eset_mobile_security_antivirus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gamescope.svg b/svgs/gamescope.svg new file mode 100644 index 00000000000..afa7bf6871e --- /dev/null +++ b/svgs/gamescope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/geometry_dash_subzero.svg b/svgs/geometry_dash_subzero.svg new file mode 100644 index 00000000000..7d8f182f195 --- /dev/null +++ b/svgs/geometry_dash_subzero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/geometry_dash_world.svg b/svgs/geometry_dash_world.svg new file mode 100644 index 00000000000..67deec96192 --- /dev/null +++ b/svgs/geometry_dash_world.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gta_iii.svg b/svgs/gta_iii.svg new file mode 100644 index 00000000000..446306e4ce0 --- /dev/null +++ b/svgs/gta_iii.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hiper_scientific_calculator.svg b/svgs/hiper_scientific_calculator.svg new file mode 100644 index 00000000000..42e18c20c2f --- /dev/null +++ b/svgs/hiper_scientific_calculator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honey.svg b/svgs/honey.svg new file mode 100644 index 00000000000..712443b7e13 --- /dev/null +++ b/svgs/honey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honkai_impact_3.svg b/svgs/honkai_impact_3.svg new file mode 100644 index 00000000000..9d33b89cbc5 --- /dev/null +++ b/svgs/honkai_impact_3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/indoasis.svg b/svgs/indoasis.svg new file mode 100644 index 00000000000..f848a8a5cec --- /dev/null +++ b/svgs/indoasis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kai_access.svg b/svgs/kai_access.svg new file mode 100644 index 00000000000..a66816f2d3b --- /dev/null +++ b/svgs/kai_access.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kde_weather.svg b/svgs/kde_weather.svg new file mode 100644 index 00000000000..7f37ce96ea0 --- /dev/null +++ b/svgs/kde_weather.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kvb.svg b/svgs/kvb.svg new file mode 100644 index 00000000000..b9459e9c728 --- /dev/null +++ b/svgs/kvb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/linkaja.svg b/svgs/linkaja.svg new file mode 100644 index 00000000000..f9e2dd24a6c --- /dev/null +++ b/svgs/linkaja.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/linux_command_library.svg b/svgs/linux_command_library.svg new file mode 100644 index 00000000000..40f2b8f955d --- /dev/null +++ b/svgs/linux_command_library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lose_weight_app_for_men.svg b/svgs/lose_weight_app_for_men.svg new file mode 100644 index 00000000000..cb7b94a1471 --- /dev/null +++ b/svgs/lose_weight_app_for_men.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lrc_editor.svg b/svgs/lrc_editor.svg new file mode 100644 index 00000000000..dc297478f21 --- /dev/null +++ b/svgs/lrc_editor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lumina_walls.svg b/svgs/lumina_walls.svg new file mode 100644 index 00000000000..ad2d4618b22 --- /dev/null +++ b/svgs/lumina_walls.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mapy.svg b/svgs/mapy.svg new file mode 100644 index 00000000000..6410d838b04 --- /dev/null +++ b/svgs/mapy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meb_e_okul_vbs.svg b/svgs/meb_e_okul_vbs.svg new file mode 100644 index 00000000000..7a8cf87ec19 --- /dev/null +++ b/svgs/meb_e_okul_vbs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mekorama.svg b/svgs/mekorama.svg new file mode 100644 index 00000000000..5986d4c3bea --- /dev/null +++ b/svgs/mekorama.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/money_manager.svg b/svgs/money_manager.svg new file mode 100644 index 00000000000..5685fb13245 --- /dev/null +++ b/svgs/money_manager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/music_audio_editor.svg b/svgs/music_audio_editor.svg new file mode 100644 index 00000000000..d20f736b000 --- /dev/null +++ b/svgs/music_audio_editor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/muzei.svg b/svgs/muzei.svg new file mode 100644 index 00000000000..7e97d9172bd --- /dev/null +++ b/svgs/muzei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_kyivstar.svg b/svgs/my_kyivstar.svg new file mode 100644 index 00000000000..1510f4e6edb --- /dev/null +++ b/svgs/my_kyivstar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mycamu.svg b/svgs/mycamu.svg new file mode 100644 index 00000000000..95d17bdfa06 --- /dev/null +++ b/svgs/mycamu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mychart.svg b/svgs/mychart.svg new file mode 100644 index 00000000000..0d37aae788f --- /dev/null +++ b/svgs/mychart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mydramalist.svg b/svgs/mydramalist.svg new file mode 100644 index 00000000000..e0d501cbf3c --- /dev/null +++ b/svgs/mydramalist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/newpass.svg b/svgs/newpass.svg new file mode 100644 index 00000000000..036a9204ec4 --- /dev/null +++ b/svgs/newpass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ngl.svg b/svgs/ngl.svg new file mode 100644 index 00000000000..5019f2212aa --- /dev/null +++ b/svgs/ngl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/octogram.svg b/svgs/octogram.svg new file mode 100644 index 00000000000..ed9ea7b8854 --- /dev/null +++ b/svgs/octogram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/omni.svg b/svgs/omni.svg new file mode 100644 index 00000000000..76b8036b0d9 --- /dev/null +++ b/svgs/omni.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oneui_circle_icons.svg b/svgs/oneui_circle_icons.svg new file mode 100644 index 00000000000..af26e784968 --- /dev/null +++ b/svgs/oneui_circle_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/orbia.svg b/svgs/orbia.svg new file mode 100644 index 00000000000..8ef6c7750f5 --- /dev/null +++ b/svgs/orbia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/padlet.svg b/svgs/padlet.svg new file mode 100644 index 00000000000..de7409a79ae --- /dev/null +++ b/svgs/padlet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/parking_bahia.svg b/svgs/parking_bahia.svg new file mode 100644 index 00000000000..764d2dbf216 --- /dev/null +++ b/svgs/parking_bahia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pc_creator_2.svg b/svgs/pc_creator_2.svg new file mode 100644 index 00000000000..854300cc8f0 --- /dev/null +++ b/svgs/pc_creator_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pedidosya.svg b/svgs/pedidosya.svg new file mode 100644 index 00000000000..dc1fc3c3b37 --- /dev/null +++ b/svgs/pedidosya.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/personal_pay.svg b/svgs/personal_pay.svg new file mode 100644 index 00000000000..01ef464619c --- /dev/null +++ b/svgs/personal_pay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pikashow.svg b/svgs/pikashow.svg new file mode 100644 index 00000000000..142ae7fb191 --- /dev/null +++ b/svgs/pikashow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixel_studio.svg b/svgs/pixel_studio.svg new file mode 100644 index 00000000000..60ff5828bbc --- /dev/null +++ b/svgs/pixel_studio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixel_xpert.svg b/svgs/pixel_xpert.svg new file mode 100644 index 00000000000..718f0ae3fa3 --- /dev/null +++ b/svgs/pixel_xpert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/plants_vs_zombies.svg b/svgs/plants_vs_zombies.svg new file mode 100644 index 00000000000..ae89293bb6a --- /dev/null +++ b/svgs/plants_vs_zombies.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/poco_launcher.svg b/svgs/poco_launcher.svg new file mode 100644 index 00000000000..1a7bf6828d4 --- /dev/null +++ b/svgs/poco_launcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/premier_league.svg b/svgs/premier_league.svg new file mode 100644 index 00000000000..d9001bf72bc --- /dev/null +++ b/svgs/premier_league.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/progressive.svg b/svgs/progressive.svg new file mode 100644 index 00000000000..6c853bf60fc --- /dev/null +++ b/svgs/progressive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/qcy.svg b/svgs/qcy.svg new file mode 100644 index 00000000000..7d333c8df16 --- /dev/null +++ b/svgs/qcy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/quetta.svg b/svgs/quetta.svg new file mode 100644 index 00000000000..88fb400cbea --- /dev/null +++ b/svgs/quetta.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/quickshortcutmaker.svg b/svgs/quickshortcutmaker.svg new file mode 100644 index 00000000000..6578697a95d --- /dev/null +++ b/svgs/quickshortcutmaker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/railways_train_simulator.svg b/svgs/railways_train_simulator.svg new file mode 100644 index 00000000000..49952d72e44 --- /dev/null +++ b/svgs/railways_train_simulator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sam_helper.svg b/svgs/sam_helper.svg new file mode 100644 index 00000000000..f6b274446ce --- /dev/null +++ b/svgs/sam_helper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/signal_detector.svg b/svgs/signal_detector.svg new file mode 100644 index 00000000000..95f4450be85 --- /dev/null +++ b/svgs/signal_detector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/simple_scan.svg b/svgs/simple_scan.svg new file mode 100644 index 00000000000..7d92cb02334 --- /dev/null +++ b/svgs/simple_scan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/simple_view.svg b/svgs/simple_view.svg new file mode 100644 index 00000000000..7bc67f179cd --- /dev/null +++ b/svgs/simple_view.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/smashy_road_wanted_2.svg b/svgs/smashy_road_wanted_2.svg new file mode 100644 index 00000000000..66ab6815cdf --- /dev/null +++ b/svgs/smashy_road_wanted_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sns_24.svg b/svgs/sns_24.svg new file mode 100644 index 00000000000..6d41378b97f --- /dev/null +++ b/svgs/sns_24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/socratic.svg b/svgs/socratic.svg new file mode 100644 index 00000000000..9133a7fa60f --- /dev/null +++ b/svgs/socratic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/squid_news.svg b/svgs/squid_news.svg new file mode 100644 index 00000000000..d2e0655fac8 --- /dev/null +++ b/svgs/squid_news.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sube.svg b/svgs/sube.svg new file mode 100644 index 00000000000..70f7d594fbd --- /dev/null +++ b/svgs/sube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/telegram_sms.svg b/svgs/telegram_sms.svg new file mode 100644 index 00000000000..07224747bd4 --- /dev/null +++ b/svgs/telegram_sms.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/temple_run_2.svg b/svgs/temple_run_2.svg new file mode 100644 index 00000000000..031ecf662f8 --- /dev/null +++ b/svgs/temple_run_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tenpo.svg b/svgs/tenpo.svg new file mode 100644 index 00000000000..19a6591c56f --- /dev/null +++ b/svgs/tenpo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/termone_plus.svg b/svgs/termone_plus.svg new file mode 100644 index 00000000000..89c11f06e68 --- /dev/null +++ b/svgs/termone_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/triunfo_seguros.svg b/svgs/triunfo_seguros.svg new file mode 100644 index 00000000000..3b01ef8d20f --- /dev/null +++ b/svgs/triunfo_seguros.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/turrit.svg b/svgs/turrit.svg new file mode 100644 index 00000000000..fd07e37e448 --- /dev/null +++ b/svgs/turrit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ubimaster.svg b/svgs/ubimaster.svg new file mode 100644 index 00000000000..6463f86d6ca --- /dev/null +++ b/svgs/ubimaster.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/unipatcher.svg b/svgs/unipatcher.svg new file mode 100644 index 00000000000..8fb58a635d4 --- /dev/null +++ b/svgs/unipatcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vector.svg b/svgs/vector.svg new file mode 100644 index 00000000000..4f60c7444ad --- /dev/null +++ b/svgs/vector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/video_fun.svg b/svgs/video_fun.svg new file mode 100644 index 00000000000..c621bcb7cb1 --- /dev/null +++ b/svgs/video_fun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vmos.svg b/svgs/vmos.svg new file mode 100644 index 00000000000..9ad4e2058f9 --- /dev/null +++ b/svgs/vmos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vrt_nws.svg b/svgs/vrt_nws.svg new file mode 100644 index 00000000000..3651c6182de --- /dev/null +++ b/svgs/vrt_nws.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/walgreens.svg b/svgs/walgreens.svg new file mode 100644 index 00000000000..954a36d5059 --- /dev/null +++ b/svgs/walgreens.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/warzone_loadout_codmunity.svg b/svgs/warzone_loadout_codmunity.svg new file mode 100644 index 00000000000..21e2b4ea99a --- /dev/null +++ b/svgs/warzone_loadout_codmunity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wix_owner.svg b/svgs/wix_owner.svg new file mode 100644 index 00000000000..669b46445e5 --- /dev/null +++ b/svgs/wix_owner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wordreference.svg b/svgs/wordreference.svg new file mode 100644 index 00000000000..532e4b18de7 --- /dev/null +++ b/svgs/wordreference.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yandex_food.svg b/svgs/yandex_food.svg new file mode 100644 index 00000000000..67ee211f70e --- /dev/null +++ b/svgs/yandex_food.svg @@ -0,0 +1 @@ + \ No newline at end of file From e8e61f27b7cf89e448684a7e1e208e976e85a670 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 30 Jun 2024 14:54:53 +0300 Subject: [PATCH 179/527] +44 links (#2185) --- app/assets/appfilter.xml | 48 ++++++++++++++++++- svgs/brawl_stars.svg | 2 +- ...s.svg => cats_crash_arena_turbo_stars.svg} | 0 svgs/geometry_dash.svg | 2 +- svgs/penta.svg | 2 +- 5 files changed, 49 insertions(+), 5 deletions(-) rename svgs/{cats.svg => cats_crash_arena_turbo_stars.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 0247354eefb..de72262fb95 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -47,6 +47,7 @@ + @@ -611,6 +612,7 @@ + @@ -1303,6 +1305,7 @@ + @@ -1494,10 +1497,12 @@ + + @@ -1703,6 +1708,7 @@ + @@ -1714,6 +1720,8 @@ + + @@ -1755,7 +1763,8 @@ - + + @@ -1765,6 +1774,7 @@ + @@ -1788,6 +1798,7 @@ + @@ -1876,6 +1887,7 @@ + @@ -2370,6 +2382,7 @@ + @@ -2389,6 +2402,7 @@ + @@ -2595,6 +2609,7 @@ + @@ -2955,6 +2970,7 @@ + @@ -3027,6 +3043,8 @@ + + @@ -3081,6 +3099,7 @@ + @@ -3136,6 +3155,7 @@ + @@ -3689,7 +3709,9 @@ + + @@ -4033,6 +4055,7 @@ + @@ -4146,6 +4169,7 @@ + @@ -4165,6 +4189,7 @@ + @@ -4419,6 +4444,7 @@ + @@ -4433,6 +4459,7 @@ + @@ -4473,6 +4500,7 @@ + @@ -4815,6 +4843,7 @@ + @@ -5658,6 +5687,7 @@ + @@ -6815,7 +6845,9 @@ + + @@ -7117,6 +7149,7 @@ + @@ -7506,6 +7539,7 @@ + @@ -7775,6 +7809,7 @@ + @@ -8636,6 +8671,7 @@ + @@ -9270,6 +9306,7 @@ + @@ -9352,6 +9389,7 @@ + @@ -9617,7 +9655,7 @@ - + @@ -10261,6 +10299,7 @@ + @@ -10865,6 +10904,7 @@ + @@ -11288,6 +11328,7 @@ + @@ -11358,6 +11399,7 @@ + @@ -11390,6 +11432,7 @@ + @@ -11801,6 +11844,7 @@ + diff --git a/svgs/brawl_stars.svg b/svgs/brawl_stars.svg index f4cbd80278b..d0b57082460 100644 --- a/svgs/brawl_stars.svg +++ b/svgs/brawl_stars.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/cats.svg b/svgs/cats_crash_arena_turbo_stars.svg similarity index 100% rename from svgs/cats.svg rename to svgs/cats_crash_arena_turbo_stars.svg diff --git a/svgs/geometry_dash.svg b/svgs/geometry_dash.svg index ec785419648..579a7dc18bc 100644 --- a/svgs/geometry_dash.svg +++ b/svgs/geometry_dash.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/penta.svg b/svgs/penta.svg index d0e3e96d68f..b0e80458d2b 100644 --- a/svgs/penta.svg +++ b/svgs/penta.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 0b71cffa6828351928cf9e0f966112ec3a068bd6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:49:06 +0300 Subject: [PATCH 180/527] Added links to graphic editors (#2186) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9258f67cc9f..ae30d671815 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ Welcome to the Lawnicons contributing guide! This file will tell you what you ne Before you start, please [fork](https://github.com/LawnchairLauncher/lawnicons/fork) the project and clone it to your machine. Afterwards, you can either contribute icons or code. ## Contributing icons -To contribute icons, you need an icon editor (e.g., Figma, Inkscape, etc), a file explorer, a text editor, and a terminal window. +For beginners, it is faster to create icons [in Figma](https://www.figma.com/), although [Inkscape](https://inkscape.org/) and similar software will do. A file explorer, a text editor, and a terminal window will also be useful. For additional information on designing icons and samples, see [the Lawnicons Figma repository](https://www.figma.com/community/file/1227718471680779613) made by [Grabstertv](https://github.com/Grabstertv). From b38eaae5a0b0bacd440fef6673bfcdfab9647078 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:01:06 +0800 Subject: [PATCH 181/527] Update lifecycleVersion to v2.8.3 (#2189) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d0f4a7fdee3..e60ebd7c02b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -133,7 +133,7 @@ licensee { } dependencies { - val lifecycleVersion = "2.8.2" + val lifecycleVersion = "2.8.3" val hiltVersion = "2.51.1" implementation("androidx.appcompat:appcompat:1.7.0") From 895d12e3472bacca2939a62b3c37bfa64f9717df Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:01:37 +0800 Subject: [PATCH 182/527] Update dependency com.github.nanihadesuka:LazyColumnScrollbar to v2.2.0 (#2187) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e60ebd7c02b..0a0c037a8ee 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -163,5 +163,5 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") - implementation("com.github.nanihadesuka:LazyColumnScrollbar:2.1.0") + implementation("com.github.nanihadesuka:LazyColumnScrollbar:2.2.0") } From 8037871e260f21a9da7da0a8289d4c4e439f7809 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:01:56 +0800 Subject: [PATCH 183/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.5 (#2188) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7fe36dda3b3..37c81d24a18 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,7 +30,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.4", + "io.nlopez.compose.rules:ktlint:0.4.5", ), ).editorConfigOverride( mapOf( From b00056d23df648cfc1b8ce00f50733946726f2e1 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 6 Jul 2024 17:54:32 +0300 Subject: [PATCH 184/527] +23 links (#2192) --- app/assets/appfilter.xml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index de72262fb95..7afb01a94d3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -505,6 +505,7 @@ + @@ -907,6 +908,7 @@ + @@ -973,6 +975,7 @@ + @@ -990,6 +993,7 @@ + @@ -1271,6 +1275,7 @@ + @@ -1502,6 +1507,7 @@ + @@ -1665,6 +1671,7 @@ + @@ -2433,7 +2440,6 @@ - @@ -2498,6 +2504,7 @@ + @@ -3630,6 +3637,7 @@ + @@ -3672,6 +3680,7 @@ + @@ -4344,6 +4353,7 @@ + @@ -4785,6 +4795,8 @@ + + @@ -5867,6 +5879,7 @@ + @@ -6195,6 +6208,7 @@ + @@ -7463,6 +7477,7 @@ + @@ -9970,6 +9985,7 @@ + @@ -10313,6 +10329,7 @@ + @@ -10472,6 +10489,7 @@ + @@ -10528,6 +10546,7 @@ + @@ -10544,6 +10563,7 @@ + @@ -10943,6 +10963,7 @@ + @@ -11012,6 +11033,7 @@ + @@ -11039,6 +11061,7 @@ + From 21620d7c50372c420a5349143d68718e42d6efdf Mon Sep 17 00:00:00 2001 From: Naga Srinath <73869693+knsrinath@users.noreply.github.com> Date: Sun, 7 Jul 2024 21:34:21 +0530 Subject: [PATCH 185/527] +2 icons (#2190) * Added icons for LPU Touch & Tempo and modified appfilter.xml accordingly * Fixed icons --- app/assets/appfilter.xml | 2 + svgs/lpu_touch.svg | 46 +++++++++++++++++++++ svgs/tempo_music.svg | 86 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 svgs/lpu_touch.svg create mode 100644 svgs/tempo_music.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 7afb01a94d3..30982dc1060 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5236,6 +5236,7 @@ + @@ -9998,6 +9999,7 @@ + diff --git a/svgs/lpu_touch.svg b/svgs/lpu_touch.svg new file mode 100644 index 00000000000..36f11316b04 --- /dev/null +++ b/svgs/lpu_touch.svg @@ -0,0 +1,46 @@ + + + + + + + + + + diff --git a/svgs/tempo_music.svg b/svgs/tempo_music.svg new file mode 100644 index 00000000000..970d4468155 --- /dev/null +++ b/svgs/tempo_music.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + From a858055e388e9a9d09e6d0b254a0c6031714ab3f Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Tue, 9 Jul 2024 00:54:21 -0400 Subject: [PATCH 186/527] Get rid of AppCompat (#2193) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We don't need it in a pure Compose app. ```diff OLD: before.apk (signature: V2) NEW: after.apk (signature: V2) │ compressed │ uncompressed ├──────────┬──────────┬────────────┼──────────┬──────────┬──────────── APK │ old │ new │ diff │ old │ new │ diff ──────────┼──────────┼──────────┼────────────┼──────────┼──────────┼──────────── dex │ 1.4 MiB │ 1.4 MiB │ -89.6 KiB │ 2.9 MiB │ 2.8 MiB │ -174.1 KiB arsc │ 2 MiB │ 1.5 MiB │ -479.5 KiB │ 2 MiB │ 1.5 MiB │ -479.5 KiB manifest │ 3.2 KiB │ 3.2 KiB │ -1 B │ 14.3 KiB │ 14.3 KiB │ 0 B res │ 7.6 MiB │ 7.4 MiB │ -156.1 KiB │ 17.4 MiB │ 17.2 MiB │ -191 KiB native │ 96.3 KiB │ 84.2 KiB │ -12.1 KiB │ 36.5 KiB │ 36.5 KiB │ 0 B asset │ 9 KiB │ 8.6 KiB │ -439 B │ 70.9 KiB │ 68.2 KiB │ -2.7 KiB other │ 67.9 KiB │ 67.2 KiB │ -738 B │ 73 KiB │ 73 KiB │ -24 B ──────────┼──────────┼──────────┼────────────┼──────────┼──────────┼──────────── total │ 11.2 MiB │ 10.5 MiB │ -738.5 KiB │ 22.5 MiB │ 21.7 MiB │ -847.4 KiB DEX │ old │ new │ diff ─────────┼───────┼───────┼─────────────────────── files │ 1 │ 1 │ 0 strings │ 14271 │ 13468 │ -803 (+2230 -3033) types │ 4836 │ 4595 │ -241 (+2220 -2461) classes │ 3948 │ 3783 │ -165 (+2127 -2292) methods │ 21189 │ 19507 │ -1682 (+16085 -17767) fields │ 13685 │ 12973 │ -712 (+12413 -13125) ARSC │ old │ new │ diff ─────────┼───────┼───────┼────────────────── configs │ 142 │ 124 │ -18 (+0 -18) entries │ 13419 │ 12339 │ -1080 (+0 -1080) ``` --- app/build.gradle.kts | 1 - app/src/main/res/values/themes.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0a0c037a8ee..ab3cb55c59e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -136,7 +136,6 @@ dependencies { val lifecycleVersion = "2.8.3" val hiltVersion = "2.51.1" - implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.activity:activity-compose:1.9.0") implementation(platform("androidx.compose:compose-bom:2024.06.00")) diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 6d690e93a22..64000635824 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,6 +2,6 @@ From 72cf88b96567795e3af22b6f9113c23d2059c3b6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:04:19 +0300 Subject: [PATCH 187/527] +15 links (#2194) --- app/assets/appfilter.xml | 15 +++++++++++++++ svgs/bandbond.svg | 2 +- svgs/breeno.svg | 2 +- svgs/crunchyroll.svg | 2 +- svgs/davx5.svg | 2 +- svgs/glovo.svg | 2 +- svgs/medium.svg | 2 +- svgs/mi_music.svg | 2 +- svgs/open_link_with.svg | 2 +- svgs/retrica.svg | 2 +- svgs/samsung_internet_browser.svg | 2 +- svgs/snapseed.svg | 2 +- 12 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 30982dc1060..ba767e85fa3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -47,6 +47,7 @@ + @@ -1802,6 +1803,7 @@ + @@ -2729,6 +2731,7 @@ + @@ -3050,6 +3053,7 @@ + @@ -4019,6 +4023,7 @@ + @@ -4072,6 +4077,7 @@ + @@ -4639,6 +4645,7 @@ + @@ -5413,6 +5420,7 @@ + @@ -6277,6 +6285,7 @@ + @@ -6677,8 +6686,10 @@ + + @@ -8032,6 +8043,7 @@ + @@ -8454,6 +8466,7 @@ + @@ -9454,6 +9467,7 @@ + @@ -10934,6 +10948,7 @@ + diff --git a/svgs/bandbond.svg b/svgs/bandbond.svg index 7af1d435247..125dd3ecc6a 100644 --- a/svgs/bandbond.svg +++ b/svgs/bandbond.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/breeno.svg b/svgs/breeno.svg index 1f858b68f6f..7f0083fe8c9 100644 --- a/svgs/breeno.svg +++ b/svgs/breeno.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/crunchyroll.svg b/svgs/crunchyroll.svg index 656ec09550d..bf405872d9b 100644 --- a/svgs/crunchyroll.svg +++ b/svgs/crunchyroll.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/davx5.svg b/svgs/davx5.svg index 232f583d256..c10454887df 100644 --- a/svgs/davx5.svg +++ b/svgs/davx5.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/glovo.svg b/svgs/glovo.svg index 81bdc873bb9..15ff652c3d6 100644 --- a/svgs/glovo.svg +++ b/svgs/glovo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/medium.svg b/svgs/medium.svg index 178c40d0f08..8957f48a720 100644 --- a/svgs/medium.svg +++ b/svgs/medium.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/mi_music.svg b/svgs/mi_music.svg index 4031a664ff5..2d324e2f021 100644 --- a/svgs/mi_music.svg +++ b/svgs/mi_music.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/open_link_with.svg b/svgs/open_link_with.svg index 2ebe1923423..b0d56799e12 100644 --- a/svgs/open_link_with.svg +++ b/svgs/open_link_with.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/retrica.svg b/svgs/retrica.svg index eaa5200546c..56ce1fe6c9a 100644 --- a/svgs/retrica.svg +++ b/svgs/retrica.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/samsung_internet_browser.svg b/svgs/samsung_internet_browser.svg index a9c04a67ad7..5ba32d5870c 100644 --- a/svgs/samsung_internet_browser.svg +++ b/svgs/samsung_internet_browser.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/snapseed.svg b/svgs/snapseed.svg index 4cbce3447ec..157acd4139f 100644 --- a/svgs/snapseed.svg +++ b/svgs/snapseed.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 172c0f14787bb85c09bc315aadd50d4b3dc305c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 08:39:00 +0800 Subject: [PATCH 188/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta05 (#2195) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ab3cb55c59e..01bc2ce6ff1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,7 +147,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta04") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta04") + implementation("androidx.navigation:navigation-compose:2.8.0-beta05") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") From f8fc7b98bea73e8532bb694e70c95977a390f5c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Jul 2024 08:21:30 +0800 Subject: [PATCH 189/527] Update dependency gradle to v8.9 (#2196) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43504 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 5 ++++- gradlew.bat | 2 ++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 8703 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 Ojj7^59?Sdh$^Qpp*~F>< delta 8662 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8a1f6b97f47..68e8816d71c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## From 9342f764d5ac8fe18f899dca1a4aa49ba8750d0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:32:42 +0800 Subject: [PATCH 190/527] Update AGP (#2197) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 37c81d24a18..eb1360985cb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.5.0" apply false + id("com.android.application") version "8.5.1" apply false id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index b7d9120363c..737e82427ca 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.5.0") + implementation("com.android.tools:sdk-common:31.5.1") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From 64effac44a88450a074fb89cbec2597d7168d87c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:37:21 +0800 Subject: [PATCH 191/527] Update plugin com.google.devtools.ksp to v2.0.0-1.0.23 (#2198) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index eb1360985cb..ea39f8e1a44 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false - id("com.google.devtools.ksp") version "2.0.0-1.0.22" apply false + id("com.google.devtools.ksp") version "2.0.0-1.0.23" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From 71d46387b9a914b0aa9ae6c66e0ec99aa823368e Mon Sep 17 00:00:00 2001 From: Alex123098c Date: Fri, 12 Jul 2024 17:14:03 -0500 Subject: [PATCH 192/527] +1 icon +1 link (#2181) * Update appfilter.xml * Add files via upload * Update appfilter.xml * Add files via upload * Add files via upload * Add files via upload * Update shortcuts_widget.svg I finished the icon by correcting the size, the stroke width and moving the icon to the center. * Update appfilter.xml I have corrected appfilter.xml to match the style. --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 2 ++ svgs/shortcuts_widget.svg | 1 + 2 files changed, 3 insertions(+) create mode 100644 svgs/shortcuts_widget.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ba767e85fa3..f2568305b7a 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -12209,4 +12209,6 @@ + + diff --git a/svgs/shortcuts_widget.svg b/svgs/shortcuts_widget.svg new file mode 100644 index 00000000000..818093ba4d4 --- /dev/null +++ b/svgs/shortcuts_widget.svg @@ -0,0 +1 @@ + From a93fa3d737b2da51c94653ee6de3578ea5371d64 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:37:14 +0300 Subject: [PATCH 193/527] +22 links (#2201) --- app/assets/appfilter.xml | 28 +++++++++++++++++++++++++--- svgs/tinkoff.svg | 2 +- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index f2568305b7a..d18b404624e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -112,6 +112,7 @@ + @@ -234,6 +235,7 @@ + @@ -315,6 +317,7 @@ + @@ -594,6 +597,7 @@ + @@ -787,6 +791,7 @@ + @@ -894,6 +899,7 @@ + @@ -1470,6 +1476,9 @@ + + + @@ -3179,6 +3188,7 @@ + @@ -4069,6 +4079,7 @@ + @@ -4862,6 +4873,7 @@ + @@ -6414,6 +6426,7 @@ + @@ -6815,6 +6828,7 @@ + @@ -7612,6 +7626,7 @@ + @@ -8104,6 +8119,7 @@ + @@ -8498,6 +8514,7 @@ + @@ -8744,6 +8761,7 @@ + @@ -9338,6 +9356,7 @@ + @@ -9463,6 +9482,7 @@ + @@ -10482,6 +10502,7 @@ + @@ -11195,7 +11216,8 @@ - + + @@ -11417,6 +11439,7 @@ + @@ -11481,6 +11504,7 @@ + @@ -12209,6 +12233,4 @@ - - diff --git a/svgs/tinkoff.svg b/svgs/tinkoff.svg index 547dab5fc0a..554b098eaef 100644 --- a/svgs/tinkoff.svg +++ b/svgs/tinkoff.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From ecfebd93fd122e4d120333d3e522414bb5754fed Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Tue, 16 Jul 2024 10:08:53 +0800 Subject: [PATCH 194/527] Compose buildFeature flag could be removed for now --- app/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 01bc2ce6ff1..6df1e4e7625 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -84,7 +84,6 @@ android { buildFeatures { buildConfig = true - compose = true resValues = true } From c83d353c08b727771d8a8946e13e4b734eb87e9f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:23:19 +0800 Subject: [PATCH 195/527] Update dependency io.coil-kt:coil-compose to v2.7.0 (#2204) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6df1e4e7625..edcb004d507 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -154,7 +154,7 @@ dependencies { implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") - implementation("io.coil-kt:coil-compose:2.6.0") + implementation("io.coil-kt:coil-compose:2.7.0") val retrofitVersion = "2.11.0" implementation("com.squareup.retrofit2:retrofit:$retrofitVersion") implementation("com.squareup.retrofit2:converter-kotlinx-serialization:$retrofitVersion") From 6443870c9429889e1236654ce15bd299832cf649 Mon Sep 17 00:00:00 2001 From: Goooler Date: Thu, 18 Jul 2024 10:32:02 +0800 Subject: [PATCH 196/527] Optimize deps --- app/build.gradle.kts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index edcb004d507..58f3a8be7ef 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -132,10 +132,8 @@ licensee { } dependencies { - val lifecycleVersion = "2.8.3" - val hiltVersion = "2.51.1" - implementation("androidx.core:core-ktx:1.13.1") + implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.0") implementation(platform("androidx.compose:compose-bom:2024.06.00")) implementation("androidx.compose.ui:ui") @@ -147,19 +145,21 @@ dependencies { implementation("androidx.compose.material3:material3:1.3.0-beta04") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta05") - implementation("androidx.core:core-splashscreen:1.0.1") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion") - implementation("io.github.fornewid:material-motion-compose-core:1.2.1") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.3") + + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") + implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") + + val hiltVersion = "2.51.1" implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") - implementation("io.coil-kt:coil-compose:2.7.0") + val retrofitVersion = "2.11.0" implementation("com.squareup.retrofit2:retrofit:$retrofitVersion") implementation("com.squareup.retrofit2:converter-kotlinx-serialization:$retrofitVersion") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") - implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") + implementation("io.coil-kt:coil-compose:2.7.0") implementation("com.github.nanihadesuka:LazyColumnScrollbar:2.2.0") + implementation("io.github.fornewid:material-motion-compose-core:1.2.1") } From c94b34abe756f586ddcec6c3e5eac52f90866cac Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:54:43 +1000 Subject: [PATCH 197/527] + 3 icons, + 2 links (#2199) * + 1 icon, + 2 links * + 2 icons * Small fix * Small fix * Small fix * Apply requested changes [1] --- app/assets/appfilter.xml | 5 +++++ svgs/_1list.svg | 38 ++++++++++++++++++++++++++++++++++++++ svgs/clickview.svg | 15 +++++++++++++++ svgs/seestar.svg | 29 +++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 svgs/_1list.svg create mode 100644 svgs/clickview.svg create mode 100644 svgs/seestar.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index d18b404624e..8a9067532ff 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -57,6 +57,7 @@ + @@ -1872,6 +1873,7 @@ + @@ -1937,6 +1939,7 @@ + @@ -4038,6 +4041,7 @@ + @@ -8588,6 +8592,7 @@ + diff --git a/svgs/_1list.svg b/svgs/_1list.svg new file mode 100644 index 00000000000..d6a69f7bddc --- /dev/null +++ b/svgs/_1list.svg @@ -0,0 +1,38 @@ + + diff --git a/svgs/clickview.svg b/svgs/clickview.svg new file mode 100644 index 00000000000..95a971131c7 --- /dev/null +++ b/svgs/clickview.svg @@ -0,0 +1,15 @@ + + diff --git a/svgs/seestar.svg b/svgs/seestar.svg new file mode 100644 index 00000000000..0b7f8fc1704 --- /dev/null +++ b/svgs/seestar.svg @@ -0,0 +1,29 @@ + + From f6ea3082172b0e01218cd2e39fb08ebceceae740 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 19 Jul 2024 20:16:41 +0300 Subject: [PATCH 198/527] Tuta redesign (#2206) --- svgs/tuta.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svgs/tuta.svg b/svgs/tuta.svg index 0f22aa34096..1112eb8442e 100644 --- a/svgs/tuta.svg +++ b/svgs/tuta.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From a2cc6ddd2291d848c20b1b6a5cfeb2de3fdf830a Mon Sep 17 00:00:00 2001 From: thismoon <107642606+thismoon@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:39:47 +0100 Subject: [PATCH 199/527] link com.malopieds.innertune to innertune (#2207) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8a9067532ff..51d5d63a6ee 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4511,6 +4511,7 @@ + From 30ceb8ddd91b7da0bfc92fcf00ba99f3015ac5bb Mon Sep 17 00:00:00 2001 From: wojtas <78856223+wojtas3422@users.noreply.github.com> Date: Sat, 20 Jul 2024 21:45:06 +0200 Subject: [PATCH 200/527] +1 icon (#2213) * Add icon * Rename icon * Minor changes --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/my_dafi.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/my_dafi.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 51d5d63a6ee..abe9aa35741 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -6140,6 +6140,7 @@ + diff --git a/svgs/my_dafi.svg b/svgs/my_dafi.svg new file mode 100644 index 00000000000..1e173ed96a2 --- /dev/null +++ b/svgs/my_dafi.svg @@ -0,0 +1 @@ + From 726a9e400a820b613849993fb7d89b0cb17a6e3f Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 20 Jul 2024 22:55:56 +0300 Subject: [PATCH 201/527] 3 icons redesign (#2216) * 3 icons redesign * Update microsoft_designer.svg --- app/assets/appfilter.xml | 4 ++-- svgs/chatlaunch_for_whatsapp.svg | 1 + svgs/microsoft_designer.svg | 2 +- svgs/notesnook.svg | 2 +- svgs/whatsapp.svg | 2 +- svgs/whatsapp_business.svg | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 svgs/chatlaunch_for_whatsapp.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index abe9aa35741..22568864556 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1817,8 +1817,8 @@ - - + + diff --git a/svgs/chatlaunch_for_whatsapp.svg b/svgs/chatlaunch_for_whatsapp.svg new file mode 100644 index 00000000000..b30156c4acc --- /dev/null +++ b/svgs/chatlaunch_for_whatsapp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/microsoft_designer.svg b/svgs/microsoft_designer.svg index 36354020617..d393081c67e 100644 --- a/svgs/microsoft_designer.svg +++ b/svgs/microsoft_designer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/notesnook.svg b/svgs/notesnook.svg index bc6de7656fb..d51244d26d7 100644 --- a/svgs/notesnook.svg +++ b/svgs/notesnook.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/whatsapp.svg b/svgs/whatsapp.svg index 7aecf2ae180..8f7c530898d 100644 --- a/svgs/whatsapp.svg +++ b/svgs/whatsapp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/whatsapp_business.svg b/svgs/whatsapp_business.svg index f039945dd44..5b70dbf93c9 100644 --- a/svgs/whatsapp_business.svg +++ b/svgs/whatsapp_business.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From fcfdb92be5a8e4de8a080aadfd15030e25c45b36 Mon Sep 17 00:00:00 2001 From: Kendell R Date: Sat, 20 Jul 2024 14:37:53 -0700 Subject: [PATCH 202/527] update Pi logo (#2215) * update Pi logo * update to be centered and use circle * fix other app that uses pi * actual consistency * update icon to use stroke and look better * Minor fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 4 ++-- svgs/generic_pi.svg | 4 ++++ svgs/inflection_pi.svg | 8 +------- 3 files changed, 7 insertions(+), 9 deletions(-) create mode 100644 svgs/generic_pi.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 22568864556..4cea8ff60e6 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5049,8 +5049,8 @@ - - + + diff --git a/svgs/generic_pi.svg b/svgs/generic_pi.svg new file mode 100644 index 00000000000..7180ed5a9b9 --- /dev/null +++ b/svgs/generic_pi.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/inflection_pi.svg b/svgs/inflection_pi.svg index 9564db59a62..1b63d92a37a 100644 --- a/svgs/inflection_pi.svg +++ b/svgs/inflection_pi.svg @@ -1,7 +1 @@ - - - - - - - + From 41c82d92be693e41e32655287b7950a4f7348f6b Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:59:12 +0800 Subject: [PATCH 203/527] Simplify icon sheet --- .../ui/components/home/IconInfoSheet.kt | 60 +++---------------- 1 file changed, 9 insertions(+), 51 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index 596cf04416e..053b0e3dddb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -175,17 +175,6 @@ private fun IconInfoListRow( currentIndex: Int, lastIndex: Int, ) { - val showExpandButton = componentNames.size > 1 - var expanded by remember { mutableStateOf(false) } - - var fullHeight by remember { mutableStateOf(0.dp) } - val animatedHeight by animateDpAsState( - targetValue = fullHeight, - label = "On component name expansion or contraction", - ) - - val density = LocalDensity.current - ListRow( label = { SelectionContainer { @@ -200,11 +189,6 @@ private fun IconInfoListRow( SelectionContainer { Column( modifier = Modifier - .onGloballyPositioned { coordinates -> - fullHeight = with(density) { - coordinates.size.height.toDp() - } - } .horizontalScroll(rememberScrollState()), ) { componentNames.firstOrNull()?.let { @@ -217,16 +201,14 @@ private fun IconInfoListRow( modifier = Modifier.padding(end = 48.dp), ) } - AnimatedVisibility(visible = showExpandButton && expanded) { - Column { - componentNames.forEach { - Text( - text = it, - maxLines = 2, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } + Column { + componentNames.forEach { + Text( + text = it, + maxLines = 2, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) } } } @@ -235,32 +217,8 @@ private fun IconInfoListRow( divider = currentIndex < lastIndex, first = currentIndex == 0, last = currentIndex == lastIndex, - endIcon = if (showExpandButton) { - @Composable { - IconButton( - modifier = Modifier.requiredSize(48.dp), - onClick = { - expanded = !expanded - }, - ) { - val angle by animateFloatAsState( - targetValue = (if (expanded) 180 else 0).toFloat(), - label = "Expand/collapse chevron rotation", - ) - - Icon( - imageVector = Icons.Rounded.ArrowDropDown, - contentDescription = stringResource(R.string.toggle_visibility_of_contents), - tint = MaterialTheme.colorScheme.onBackground, - modifier = Modifier.rotate(angle), - ) - } - } - } else { - null - }, - height = if (expanded) 48.dp + animatedHeight else 72.dp, background = true, + enforceHeight = false, ) } From ab2660c5c5d5cb609bb11ad19fc544b51e14b229 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:59:52 +0800 Subject: [PATCH 204/527] Temporarily remove grouped icons --- .../ui/components/home/IconPreviewGrid.kt | 100 +++++------------- 1 file changed, 26 insertions(+), 74 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 399a49ab8c7..66da014d185 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -1,13 +1,16 @@ package app.lawnchair.lawnicons.ui.components.home import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.expandHorizontally +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkHorizontally import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth @@ -54,25 +57,6 @@ fun IconPreviewGrid( contentPadding: PaddingValues? = null, gridState: LazyGridState = rememberLazyGridState(), ) { - val groupedIcons = iconInfo.groupBy { - val label = it.getFirstLabelAndComponent().label - if (label.isEmpty()) { - "1-9" - } else { - val firstChar = label.firstOrNull()?.uppercase() ?: "" - if (firstChar in "![](){}#0123456789") { - "1-9" - } else { - firstChar - } - } - } - - val headerIndices = remember { mutableStateOf(mutableMapOf()) } - var currentIndex = 0 - - val currentHeader = remember { mutableStateOf(null) } - Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, @@ -93,18 +77,22 @@ fun IconPreviewGrid( selectionMode = ScrollbarSelectionMode.Thumb, ), indicatorContent = { _, isThumbSelected -> - AnimatedVisibility(visible = isThumbSelected) { + AnimatedVisibility( + visible = isThumbSelected, + enter = fadeIn() + expandHorizontally(), + exit = fadeOut() + shrinkHorizontally(), + ) { Box( modifier = Modifier .padding(end = 16.dp) .background( color = MaterialTheme.colorScheme.primary, - shape = MaterialTheme.shapes.medium, + shape = MaterialTheme.shapes.large, ), ) { Text( modifier = Modifier.padding(16.dp), - text = currentHeader.value ?: "#", + text = "#", style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.onPrimary, ) @@ -112,65 +100,29 @@ fun IconPreviewGrid( } }, ) { + val horizontalGridPadding = if (isExpandedScreen) 32.dp else 8.dp LazyVerticalGrid( columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = contentPadding ?: if (!isExpandedScreen) { - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 8.dp, - additionalTop = 42.dp, - additionalEnd = 8.dp, - ) - } else { - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 32.dp, - additionalTop = 42.dp, - additionalEnd = 32.dp, - ) - }, + contentPadding = contentPadding ?: WindowInsets.navigationBars.toPaddingValues( + additionalStart = horizontalGridPadding, + additionalTop = 42.dp, + additionalEnd = horizontalGridPadding, + ), state = gridState, ) { - groupedIcons.forEach { (header, icons) -> - item( - span = { GridItemSpan(maxLineSpan) }, - contentType = { "header" }, - key = header, - ) { - Row { - Spacer(Modifier.height(16.dp)) - Text( - text = header, - style = MaterialTheme.typography.titleMedium, - color = MaterialTheme.colorScheme.onPrimaryContainer, - ) - } - headerIndices.value[header] = currentIndex - // ... Content for header item - currentIndex++ - } - items( - items = icons, - contentType = { "icon_preview" }, - ) { iconInfo -> - IconPreview( - iconInfo = iconInfo, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) - currentIndex++ - } + items( + items = iconInfo, + contentType = { "icon_preview" }, + ) { iconInfo -> + IconPreview( + iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) } } } } - - val firstVisibleItemIndex = remember { derivedStateOf { gridState.firstVisibleItemIndex } } - - LaunchedEffect(firstVisibleItemIndex.value) { - val lastVisibleHeader = headerIndices.value.entries.lastOrNull { - it.value < gridState.firstVisibleItemIndex - }?.key - currentHeader.value = lastVisibleHeader - } } @OptIn(ExperimentalFoundationApi::class) From 3548c9f8e6b6fa10a93d9819e13a3f1e3cbd66fe Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:00:12 +0800 Subject: [PATCH 205/527] Improve search results --- .../lawnicons/repository/IconRepository.kt | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 1fdf8d888d3..7120ce1c78c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -48,7 +48,7 @@ class IconRepository @Inject constructor(application: Application) { iconCount = iconCount, ) searchedIconInfoModel.value = IconInfoModel( - iconInfo = IconInfoManager.splitByComponentName(iconInfo).toPersistentList(), + iconInfo = iconInfo.toPersistentList(), iconCount = iconCount, ) @@ -64,21 +64,21 @@ class IconRepository @Inject constructor(application: Application) { mode: SearchMode, query: String, ) = withContext(Dispatchers.Default) { - searchedIconInfoModel.value = IconInfoManager - .splitByComponentName(iconInfo) - .let { - val filtered = it.mapNotNull { candidate -> - val searchIn = - when (mode) { - SearchMode.LABEL -> candidate.getFirstLabelAndComponent().label - SearchMode.COMPONENT -> candidate.getFirstLabelAndComponent().componentName - SearchMode.DRAWABLE -> candidate.drawableName - } - val indexOfMatch = - searchIn.indexOf(string = query, ignoreCase = true).also { index -> - if (index == -1) return@mapNotNull null - } - val matchAtWordStart = indexOfMatch == 0 || searchIn[indexOfMatch - 1] == ' ' + searchedIconInfoModel.value = iconInfo + .let { iconInfo -> + val filtered = iconInfo.mapNotNull { candidate -> + val searchIn = when (mode) { + SearchMode.LABEL -> candidate.componentNames.map { it.label } + SearchMode.COMPONENT -> candidate.componentNames.map { it.componentName } + SearchMode.DRAWABLE -> listOf(candidate.drawableName) + } + val indexOfMatch = searchIn.map { + it.indexOf(string = query, ignoreCase = true) + }.filter { it != -1 }.minOrNull() ?: return@mapNotNull null + val matchAtWordStart = searchIn.any { + it.indexOf(string = query, ignoreCase = true) == 0 || + it.getOrNull(it.indexOf(string = query, ignoreCase = true) - 1) == ' ' + } SearchInfo( iconInfo = candidate, indexOfMatch = indexOfMatch, @@ -93,7 +93,7 @@ class IconRepository @Inject constructor(application: Application) { searchInfo.iconInfo }.toPersistentList() IconInfoModel( - iconCount = it.size, + iconCount = iconInfo.size, iconInfo = filtered, ) } From d852b94ffe61610c5a62045bce8ac69de4ecee9f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:04:21 +0800 Subject: [PATCH 206/527] Cleanup --- .../lawnchair/lawnicons/ui/components/core/ListRow.kt | 11 ++++++++--- .../lawnicons/ui/components/home/IconInfoSheet.kt | 11 ----------- .../lawnicons/ui/components/home/IconPreviewGrid.kt | 8 -------- 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index 31b5632084a..9b5cb14ddb2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -20,7 +20,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp private val basePadding = 16.dp @@ -39,7 +38,7 @@ fun ListRow( first: Boolean = false, last: Boolean = false, onClick: (() -> Unit)? = null, - height: Dp? = null, + enforceHeight: Boolean = true, ) { val dividerHeight = 1.dp val dividerHeightPx = with(LocalDensity.current) { dividerHeight.toPx() } @@ -51,7 +50,13 @@ fun ListRow( Box( modifier = modifier .fillMaxWidth() - .height(height ?: if (tall) 72.dp else 56.dp) + .then( + if (enforceHeight) { + Modifier.height(if (tall) 72.dp else 56.dp) + } else { + Modifier + }, + ) .then( if (background) { Modifier diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index 053b0e3dddb..20304b06f9a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -1,8 +1,5 @@ package app.lawnchair.lawnicons.ui.components.home -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.core.animateDpAsState -import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -13,34 +10,26 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.ArrowDropDown import androidx.compose.material.icons.rounded.Call import androidx.compose.material.icons.rounded.Email import androidx.compose.material.icons.rounded.Search import androidx.compose.material.icons.rounded.Warning import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.rotate -import androidx.compose.ui.layout.onGloballyPositioned -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 66da014d185..5ca6ad76883 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -11,16 +11,13 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items @@ -28,15 +25,10 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.getFirstLabelAndComponent import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData From 06a94af08ff16b18606bda579a3899d289aadc51 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:40:01 +0800 Subject: [PATCH 207/527] Allow sharing icon info contents --- .../lawnicons/ui/components/IconLink.kt | 39 ++++++++++--- .../ui/components/home/IconInfoSheet.kt | 58 +++++++++++++++---- app/src/main/res/drawable/share_icon.xml | 5 ++ app/src/main/res/values/strings.xml | 2 + 4 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 app/src/main/res/drawable/share_icon.xml diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt index 4ba3fe55e06..bf6bc21696c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/IconLink.kt @@ -40,6 +40,30 @@ fun IconLink( ) { val context = LocalContext.current val inPreviewMode = LocalInspectionMode.current + IconLink( + iconResId = iconResId, + label = label, + onClick = { + if (!inPreviewMode) { + val webpage = Uri.parse(url) + val intent = Intent(Intent.ACTION_VIEW, webpage) + if (intent.resolveActivity(context.packageManager) != null) { + context.startActivity(intent) + } + } + }, + modifier = modifier, + ) +} + +@Composable +fun IconLink( + @DrawableRes iconResId: Int, + label: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + val inPreviewMode = LocalInspectionMode.current Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -49,13 +73,7 @@ fun IconLink( .height(64.dp) .clip(MaterialTheme.shapes.medium) .clickable { - if (!inPreviewMode) { - val webpage = Uri.parse(url) - val intent = Intent(Intent.ACTION_VIEW, webpage) - if (intent.resolveActivity(context.packageManager) != null) { - context.startActivity(intent) - } - } + onClick() }, ) { if (!inPreviewMode) { @@ -63,19 +81,22 @@ fun IconLink( painterResource(id = iconResId), contentDescription = null, colorFilter = ColorFilter.tint(color = LocalContentColor.current), - modifier = Modifier.size(24.dp), + modifier = Modifier + .size(24.dp), ) } else { Image( Icons.Rounded.Star, contentDescription = null, colorFilter = ColorFilter.tint(color = LocalContentColor.current), - modifier = Modifier.size(24.dp), + modifier = Modifier + .size(24.dp), ) } Spacer(modifier = Modifier.requiredHeight(4.dp)) Text( text = label, + modifier = Modifier.padding(horizontal = 16.dp), style = MaterialTheme.typography.bodyMedium, maxLines = 1, overflow = TextOverflow.Ellipsis, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index 20304b06f9a..90174be0226 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -1,5 +1,6 @@ package app.lawnchair.lawnicons.ui.components.home +import android.content.Intent import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -11,6 +12,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.rememberScrollState @@ -30,6 +32,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -53,10 +56,27 @@ fun IconInfoSheet( modifier: Modifier = Modifier, isPopupShown: (Boolean) -> Unit, ) { + val context = LocalContext.current + val sheetState = rememberModalBottomSheetState( skipPartiallyExpanded = true, ) + val groupedComponents = remember { + iconInfo.componentNames + .groupBy { it.label } + .map { (label, components) -> + label to components.map { it.componentName } + } + } + + val githubName = iconInfo.drawableName.replace( + oldValue = "_foreground", + newValue = "", + ) + + val shareContents = remember { getShareContents(githubName, groupedComponents) } + ModalBottomSheet( onDismissRequest = { isPopupShown(false) @@ -70,11 +90,6 @@ fun IconInfoSheet( LazyColumn( modifier = Modifier.fillMaxWidth(), ) { - val githubName = iconInfo.drawableName.replace( - oldValue = "_foreground", - newValue = "", - ) - item { Row( modifier = Modifier.fillMaxWidth(), @@ -113,6 +128,21 @@ fun IconInfoSheet( label = stringResource(id = R.string.view_on_github), url = "${Constants.GITHUB}/blob/develop/svgs/$githubName.svg", ) + Spacer(Modifier.width(16.dp)) + IconLink( + iconResId = R.drawable.share_icon, + label = stringResource(id = R.string.share), + onClick = { + val intent = Intent().apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, shareContents) + type = "text/plain" + } + + val shareIntent = Intent.createChooser(intent, null) + context.startActivity(shareIntent) + }, + ) } } item { @@ -137,13 +167,6 @@ fun IconInfoSheet( modifier = Modifier.padding(start = 32.dp, bottom = 6.dp), ) } - - val groupedComponents = iconInfo.componentNames - .groupBy { it.label } - .map { (label, components) -> - label to components.map { it.componentName } - } - itemsIndexed(groupedComponents) { index, (label, componentName) -> IconInfoListRow(label, componentName, index, groupedComponents.lastIndex) } @@ -157,6 +180,17 @@ fun IconInfoSheet( } } +private fun getShareContents( + githubName: String, + groupedComponents: List>>, +): String { + val formattedComponents = groupedComponents.joinToString(separator = "\n") { (group, components) -> + val componentList = components.joinToString(separator = "\n") { it } + "$group:\n$componentList" + } + return "Drawable: $githubName\n\nMapped components: \n$formattedComponents" +} + @Composable private fun IconInfoListRow( label: String, diff --git a/app/src/main/res/drawable/share_icon.xml b/app/src/main/res/drawable/share_icon.xml new file mode 100644 index 00000000000..74753b7aed0 --- /dev/null +++ b/app/src/main/res/drawable/share_icon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 992f6acf43e..d9520d255ed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,6 +36,8 @@ View on GitHub + + Share From fe9237d97d805bac5d594d33c860ce070db4e134 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 19:14:27 +0800 Subject: [PATCH 208/527] Polish icon sheet --- .../ui/components/home/IconInfoSheet.kt | 96 +++++++++---------- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index 90174be0226..e48e807a60d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -1,7 +1,6 @@ package app.lawnchair.lawnicons.ui.components.home import android.content.Intent -import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -14,8 +13,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.lazy.items import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Call @@ -41,9 +39,7 @@ import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.components.IconLink -import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.components.core.ListRow -import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @@ -146,32 +142,39 @@ fun IconInfoSheet( } } item { - Card( + LinkHeader( label = stringResource(id = R.string.drawable), - ) { - SimpleListRow( - label = githubName, - description = stringResource(R.string.icon_info_outdated_warning), - divider = false, - ) - } + ) + } + item { + ListRow( + label = { + Text(githubName) + }, + description = { + Text( + text = stringResource(R.string.icon_info_outdated_warning), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + }, + divider = false, + enforceHeight = false, + ) } item { Spacer(Modifier.height(16.dp)) } item { - Text( - text = stringResource(id = R.string.mapped_components), - style = MaterialTheme.typography.titleSmall, - color = MaterialTheme.colorScheme.primary, - modifier = Modifier.padding(start = 32.dp, bottom = 6.dp), + LinkHeader( + label = stringResource(id = R.string.mapped_components), ) } - itemsIndexed(groupedComponents) { index, (label, componentName) -> - IconInfoListRow(label, componentName, index, groupedComponents.lastIndex) + items(groupedComponents) { (label, componentName) -> + IconInfoListRow(label, componentName) } item { - Spacer(Modifier.height(16.dp)) + Spacer(Modifier.height(24.dp)) } item { Spacer(Modifier.navigationBarsPadding()) @@ -184,19 +187,31 @@ private fun getShareContents( githubName: String, groupedComponents: List>>, ): String { - val formattedComponents = groupedComponents.joinToString(separator = "\n") { (group, components) -> - val componentList = components.joinToString(separator = "\n") { it } - "$group:\n$componentList" - } + val formattedComponents = + groupedComponents.joinToString(separator = "\n") { (group, components) -> + val componentList = components.joinToString(separator = "\n") { it } + "$group:\n$componentList" + } return "Drawable: $githubName\n\nMapped components: \n$formattedComponents" } +@Composable +private fun LinkHeader( + label: String, + modifier: Modifier = Modifier, +) { + Text( + text = label, + style = MaterialTheme.typography.titleSmall, + color = MaterialTheme.colorScheme.primary, + modifier = modifier.padding(start = 16.dp, bottom = 6.dp), + ) +} + @Composable private fun IconInfoListRow( label: String, componentNames: List, - currentIndex: Int, - lastIndex: Int, ) { ListRow( label = { @@ -209,40 +224,25 @@ private fun IconInfoListRow( } }, description = { + Spacer(Modifier.height(4.dp)) SelectionContainer { - Column( - modifier = Modifier - .horizontalScroll(rememberScrollState()), - ) { - componentNames.firstOrNull()?.let { + Column { + componentNames.forEach { Text( text = it, maxLines = 2, - overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(end = 48.dp), ) - } - Column { - componentNames.forEach { - Text( - text = it, - maxLines = 2, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } + Spacer(Modifier.height(6.dp)) } } } }, - divider = currentIndex < lastIndex, - first = currentIndex == 0, - last = currentIndex == lastIndex, - background = true, + divider = false, enforceHeight = false, ) + Spacer(Modifier.height(16.dp)) } @PreviewLawnicons diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d9520d255ed..d00ad51d7a4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -37,7 +37,7 @@ View on GitHub - Share + Share details From 76deefbee0ad392142b69a876f6dcdb820064e3a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 22 Jul 2024 19:36:45 +0800 Subject: [PATCH 209/527] Use type-safe navigation --- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 49 +++++++++++-------- .../ui/components/home/search/SearchBar.kt | 9 ++-- .../lawnicons/ui/destination/About.kt | 12 +++-- .../ui/destination/Acknowledgements.kt | 3 +- .../lawnicons/ui/destination/Home.kt | 2 +- .../lawnicons/ui/util/Destinations.kt | 23 ++++++--- 6 files changed, 57 insertions(+), 41 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 9d310280776..052f6000522 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -10,11 +10,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.LayoutDirection -import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import androidx.navigation.navArgument +import androidx.navigation.toRoute import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement @@ -22,7 +21,11 @@ import app.lawnchair.lawnicons.ui.destination.Acknowledgements import app.lawnchair.lawnicons.ui.destination.Contributors import app.lawnchair.lawnicons.ui.destination.Home import app.lawnchair.lawnicons.ui.theme.LawniconsTheme -import app.lawnchair.lawnicons.ui.util.Destinations +import app.lawnchair.lawnicons.ui.util.About +import app.lawnchair.lawnicons.ui.util.Acknowledgement +import app.lawnchair.lawnicons.ui.util.Acknowledgements +import app.lawnchair.lawnicons.ui.util.Contributors +import app.lawnchair.lawnicons.ui.util.Home import soup.compose.material.motion.animation.materialSharedAxisXIn import soup.compose.material.motion.animation.materialSharedAxisXOut import soup.compose.material.motion.animation.rememberSlideDistance @@ -47,42 +50,46 @@ fun Lawnicons( ) { NavHost( navController = navController, - startDestination = Destinations.HOME, + startDestination = Home, enterTransition = { materialSharedAxisXIn(!isRtl, slideDistance) }, exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, ) { - composable(route = Destinations.HOME) { + composable { Home( - onNavigate = navController::navigate, + onNavigate = { navController.navigate(About) }, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, onSendResult = onSendResult, ) } - composable(route = Destinations.ACKNOWLEDGEMENTS) { - Acknowledgements(onBack = navController::popBackStack, onNavigate = navController::navigate, isExpandedScreen = isExpandedScreen) + composable { + Acknowledgements( + onBack = navController::popBackStack, + onNavigate = { + navController.navigate(Acknowledgement(it)) + }, + isExpandedScreen = isExpandedScreen, + ) } - composable( - route = "${Destinations.ACKNOWLEDGEMENT}/{id}", - arguments = listOf( - navArgument( - name = "id", - builder = { type = NavType.StringType }, - ), - ), - ) { backStackEntry -> + composable { backStackEntry -> + val acknowledgement: Acknowledgement = backStackEntry.toRoute() Acknowledgement( - name = backStackEntry.arguments?.getString("id"), + name = acknowledgement.id, onBack = navController::popBackStack, isExpandedScreen = isExpandedScreen, ) } - composable(route = Destinations.ABOUT) { - About(onBack = navController::popBackStack, onNavigate = navController::navigate, isExpandedScreen = isExpandedScreen) + composable { + About( + onBack = navController::popBackStack, + onNavigateToContributors = { navController.navigate(Contributors) }, + onNavigateToAcknowledgements = { navController.navigate(Acknowledgements) }, + isExpandedScreen = isExpandedScreen, + ) } - composable(route = Destinations.CONTRIBUTORS) { + composable { Contributors(onBack = navController::popBackStack, isExpandedScreen = isExpandedScreen) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index b2a43f73a16..dd460f4fdbc 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -45,7 +45,6 @@ import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.ClickableIcon import app.lawnchair.lawnicons.ui.theme.LawniconsTheme -import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues @@ -57,7 +56,7 @@ fun LawniconsSearchBar( onClearAndBackClick: () -> Unit, onQueryChange: (String) -> Unit, iconInfoModel: IconInfoModel, - onNavigate: (String) -> Unit, + onNavigate: () -> Unit, modifier: Modifier = Modifier, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, @@ -98,7 +97,7 @@ fun LawniconsSearchBar( onClearAndBackClick: () -> Unit, onQueryChange: (String) -> Unit, iconCount: Int, - onNavigate: (String) -> Unit, + onNavigate: () -> Unit, modifier: Modifier = Modifier, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, @@ -254,13 +253,13 @@ internal fun SearchIcon( @Composable internal fun SearchActionButton( isQueryEmpty: Boolean, - onNavigate: (String) -> Unit, + onNavigate: () -> Unit, onClearAndBackClick: () -> Unit, ) { Crossfade(isQueryEmpty, label = "") { if (it) { IconButton( - onClick = { onNavigate(Destinations.ABOUT) }, + onClick = onNavigate, ) { Icon( imageVector = ImageVector.vectorResource(id = R.drawable.lawnicons_foreground), diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 77d42bfa3d8..f72f317583b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -35,7 +35,6 @@ import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.Contributor -import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.ui.util.ExternalLink import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.util.appIcon @@ -44,7 +43,7 @@ private val externalLinks = listOf( ExternalLink( iconResId = R.drawable.github_foreground, name = R.string.github, - url = "${Constants.GITHUB}", + url = Constants.GITHUB, ), ExternalLink( iconResId = R.drawable.icon_request_app, @@ -80,7 +79,8 @@ private val specialThanks = listOf( @Composable fun About( onBack: () -> Unit, - onNavigate: (String) -> Unit, + onNavigateToContributors: () -> Unit, + onNavigateToAcknowledgements: () -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, ) { @@ -165,7 +165,7 @@ fun About( item { Card(modifier = Modifier.padding(top = 16.dp)) { SimpleListRow( - onClick = { onNavigate(Destinations.CONTRIBUTORS) }, + onClick = onNavigateToContributors, label = stringResource(id = R.string.see_all_contributors), divider = false, ) @@ -191,7 +191,7 @@ fun About( item { Card(modifier = Modifier.padding(top = 16.dp)) { SimpleListRow( - onClick = { onNavigate(Destinations.ACKNOWLEDGEMENTS) }, + onClick = onNavigateToAcknowledgements, label = stringResource(id = R.string.acknowledgements), divider = false, ) @@ -206,6 +206,7 @@ fun About( private fun AboutPreview() { LawniconsTheme { About( + {}, {}, {}, false, @@ -218,6 +219,7 @@ private fun AboutPreview() { private fun AboutPreviewExpanded() { LawniconsTheme { About( + {}, {}, {}, true, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt index fe501a6d009..215dade5260 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt @@ -17,7 +17,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.SimpleListRow -import app.lawnchair.lawnicons.ui.util.Destinations import app.lawnchair.lawnicons.viewmodel.AcknowledgementViewModel @Composable @@ -58,7 +57,7 @@ fun Acknowledgements( last = index == libraries.lastIndex, divider = index != libraries.lastIndex, onClick = { - onNavigate("${Destinations.ACKNOWLEDGEMENT}/${it.name}") + onNavigate(it.name) }, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index c7cc6cd268b..700abda7069 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -34,7 +34,7 @@ import kotlinx.collections.immutable.toImmutableList @OptIn(ExperimentalFoundationApi::class) @Composable fun Home( - onNavigate: (String) -> Unit, + onNavigate: () -> Unit, onSendResult: (IconInfo) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt index f9952fa64d1..bcc6846dac0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt @@ -1,9 +1,18 @@ package app.lawnchair.lawnicons.ui.util -object Destinations { - const val HOME = "home" - const val ACKNOWLEDGEMENTS = "acknowledgements" - const val ACKNOWLEDGEMENT = "acknowledgement" - const val ABOUT = "about" - const val CONTRIBUTORS = "contributors" -} +import kotlinx.serialization.Serializable + +@Serializable +object Home + +@Serializable +object About + +@Serializable +object Acknowledgements + +@Serializable +object Contributors + +@Serializable +data class Acknowledgement(val id: String) From 74daa464c617735bad32f0762a5e4a7ceaef244e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:58:54 +0800 Subject: [PATCH 210/527] Update plugin com.gradle.develocity to v3.17.6 (#2217) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 0f44f249fbb..f0ac4ed0e4a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.5" + id("com.gradle.develocity") version "3.17.6" } develocity { From 60fd3df00d4749fd6394b86049788f50427822eb Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 24 Jul 2024 18:18:57 +0300 Subject: [PATCH 211/527] +35 links (#2220) --- app/assets/appfilter.xml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 4cea8ff60e6..a3b718a7f95 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -792,6 +792,7 @@ + @@ -1825,6 +1826,7 @@ + @@ -2583,6 +2585,8 @@ + + @@ -3065,6 +3069,7 @@ + @@ -3429,6 +3434,7 @@ + @@ -3731,6 +3737,7 @@ + @@ -4027,6 +4034,7 @@ + @@ -4245,6 +4253,7 @@ + @@ -4818,6 +4827,7 @@ + @@ -5522,6 +5532,7 @@ + @@ -6511,6 +6522,7 @@ + @@ -6700,6 +6712,7 @@ + @@ -6756,6 +6769,7 @@ + @@ -7120,6 +7134,7 @@ + @@ -7664,6 +7679,7 @@ + @@ -7824,6 +7840,7 @@ + @@ -8467,6 +8484,7 @@ + @@ -8488,6 +8506,7 @@ + @@ -9363,6 +9382,7 @@ + @@ -9420,6 +9440,7 @@ + @@ -9472,6 +9493,7 @@ + @@ -9723,6 +9745,8 @@ + + @@ -10363,6 +10387,7 @@ + @@ -10961,6 +10986,7 @@ + @@ -11049,6 +11075,7 @@ + @@ -11255,6 +11282,7 @@ + @@ -11442,6 +11470,7 @@ + @@ -11502,6 +11531,7 @@ + @@ -11585,6 +11615,7 @@ + @@ -11655,6 +11686,7 @@ + @@ -12100,6 +12132,7 @@ + @@ -12184,6 +12217,7 @@ + @@ -12224,6 +12258,7 @@ + From ee7a51ec2a26338908b95357f57d17d6ee4055fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 07:52:17 +0800 Subject: [PATCH 212/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta06 (#2223) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 58f3a8be7ef..25cbc7ab0d6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -144,7 +144,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta04") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta05") + implementation("androidx.navigation:navigation-compose:2.8.0-beta06") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") From 9191ab0ce7167f8156fd18c7e6624ff84ceced9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 07:52:40 +0800 Subject: [PATCH 213/527] Update dependency androidx.activity:activity-compose to v1.9.1 (#2221) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 25cbc7ab0d6..c3ef0acb779 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -134,7 +134,7 @@ licensee { dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") - implementation("androidx.activity:activity-compose:1.9.0") + implementation("androidx.activity:activity-compose:1.9.1") implementation(platform("androidx.compose:compose-bom:2024.06.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") From 2e35a290c6f708cd8ec92eb93a928d9fc3e7166f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 23:55:18 +0000 Subject: [PATCH 214/527] Update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.4 (#2222) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c3ef0acb779..064d655adc3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,7 +145,7 @@ dependencies { implementation("androidx.compose.material3:material3:1.3.0-beta04") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta06") - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.3") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") From b3cc85a473138d6e24ebec93f8a10f47fbe5b5f7 Mon Sep 17 00:00:00 2001 From: thismoon <107642606+thismoon@users.noreply.github.com> Date: Thu, 25 Jul 2024 20:30:10 +0100 Subject: [PATCH 215/527] update 1 icon (#2219) * update 1 icon * simplify aves icon * fix aves size * Moved the icon to the visual center --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- svgs/aves_gallery.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svgs/aves_gallery.svg b/svgs/aves_gallery.svg index 4f945f5ac45..32bfe7964e4 100644 --- a/svgs/aves_gallery.svg +++ b/svgs/aves_gallery.svg @@ -1 +1 @@ - \ No newline at end of file + From 49fd86daf621746f5bd7cd23f6c04f8fd1199538 Mon Sep 17 00:00:00 2001 From: GGORG Date: Thu, 25 Jul 2024 21:42:56 +0200 Subject: [PATCH 216/527] +4 icons (#2218) * +4.5 icons * Test PWA in another form * Added blik; tweaked tuszama, czynaczas, port_authority; removed serialusb * tweaked czynaczas and port_authority * Artifacts have been removed * Line spacing and style have been improved --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 4 +++ svgs/blik.svg | 46 +++++++++++++++++++++++++++++ svgs/czynaczas.svg | 1 + svgs/port_authority.svg | 1 + svgs/tuszama.svg | 62 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 svgs/blik.svg create mode 100644 svgs/czynaczas.svg create mode 100644 svgs/port_authority.svg create mode 100644 svgs/tuszama.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a3b718a7f95..13cfd209ca9 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1099,6 +1099,7 @@ + @@ -2338,6 +2339,7 @@ + @@ -7723,6 +7725,7 @@ + @@ -10687,6 +10690,7 @@ + diff --git a/svgs/blik.svg b/svgs/blik.svg new file mode 100644 index 00000000000..c5654a73bfa --- /dev/null +++ b/svgs/blik.svg @@ -0,0 +1,46 @@ + + + + diff --git a/svgs/czynaczas.svg b/svgs/czynaczas.svg new file mode 100644 index 00000000000..31f42638634 --- /dev/null +++ b/svgs/czynaczas.svg @@ -0,0 +1 @@ + diff --git a/svgs/port_authority.svg b/svgs/port_authority.svg new file mode 100644 index 00000000000..cc3862c8c59 --- /dev/null +++ b/svgs/port_authority.svg @@ -0,0 +1 @@ + diff --git a/svgs/tuszama.svg b/svgs/tuszama.svg new file mode 100644 index 00000000000..57f7be1f383 --- /dev/null +++ b/svgs/tuszama.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + From 9dbb68b4366ccc143c36aa303cff9c9843d003db Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 25 Jul 2024 23:26:06 +0300 Subject: [PATCH 217/527] Fixed the link to the visual balance section (#2226) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ae30d671815..3b24acddbfe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ Square icons must fit the `154×154px` content area size. Icons that mostly fit #### Color All shapes must have non-transparent black color `#000000`. #### Stroke widths -The stroke should be kept at `12px` in most cases. If an icon is too minimal or dense, you'll need other widths: `14px` for the most minimal, and `8px` for the densest. For fine details, you can use `6px`. For more clarification, please refer to [the visual balance section](https://github.com/x9136/lawnicons/blob/addate/CONTRIBUTING.md#maintaining-visual-balance) down below. +The stroke should be kept at `12px` in most cases. If an icon is too minimal or dense, you'll need other widths: `14px` for the most minimal, and `8px` for the densest. For fine details, you can use `6px`. For more clarification, please refer to [the visual balance section](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md#maintaining-visual-balance) down below. #### End caps All shapes must have rounded caps and joins. #### Corner radius From 814a4e19f9ebf5e796cf4b5e1913f091374fdd4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 07:38:31 +0800 Subject: [PATCH 218/527] Update dependency androidx.compose.material3:material3 to v1.3.0-beta05 (#2225) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 064d655adc3..619a15f5915 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,7 +142,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") - implementation("androidx.compose.material3:material3:1.3.0-beta04") + implementation("androidx.compose.material3:material3:1.3.0-beta05") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-beta06") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") From f5ce1a297211f706f151c2b9edc8436a673ee0cf Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 26 Jul 2024 21:53:52 +0800 Subject: [PATCH 219/527] Implement bottom navigation for smaller devices --- app/build.gradle.kts | 17 +- .../ui/components/home/HomeBottomBar.kt | 110 +++++++++ .../ui/components/home/HomeTopBar.kt | 143 ++++++++++++ .../ui/components/home/IconPreviewGrid.kt | 7 +- .../ui/components/home/IconRequestFAB.kt | 208 +++++++++++------- .../ui/components/home/search/SearchBar.kt | 16 +- .../lawnicons/ui/destination/Home.kt | 101 +++++---- app/src/main/res/values/strings.xml | 1 + build.gradle.kts | 3 +- 9 files changed, 471 insertions(+), 135 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 619a15f5915..92451330b7b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,5 @@ import app.cash.licensee.LicenseeTask import com.android.build.gradle.internal.api.ApkVariantOutputImpl -import com.android.build.gradle.tasks.MergeResources import java.io.FileInputStream import java.util.Locale import java.util.Properties @@ -101,7 +100,7 @@ android { applicationVariants.all { outputs.all { (this as? ApkVariantOutputImpl)?.outputFileName = - "Lawnicons $versionName v${versionCode}_${buildType.name}.apk" + "Lawnicons $versionName v$versionCode ${buildType.name}.apk".replace(" ", ".") } } } @@ -122,9 +121,9 @@ androidComponents.onVariants { variant -> } // Process SVGs before every build. -tasks.withType().configureEach { - dependsOn(projects.svgProcessor.dependencyProject.tasks.named("run")) -} +// tasks.withType().configureEach { +// dependsOn(projects.svgProcessor.dependencyProject.tasks.named("run")) +// } licensee { allow("Apache-2.0") @@ -136,10 +135,10 @@ dependencies { implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.1") implementation(platform("androidx.compose:compose-bom:2024.06.00")) - implementation("androidx.compose.ui:ui") - implementation("androidx.compose.ui:ui-tooling-preview") - implementation("androidx.compose.ui:ui-util") - debugImplementation("androidx.compose.ui:ui-tooling") + implementation("androidx.compose.ui:ui:1.6.6") + implementation("androidx.compose.ui:ui-tooling-preview:1.6.6") + implementation("androidx.compose.ui:ui-util:1.6.6") + debugImplementation("androidx.compose.ui:ui-tooling:1.6.6") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta05") diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt new file mode 100644 index 00000000000..b425c041c55 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -0,0 +1,110 @@ +package app.lawnchair.lawnicons.ui.components.home + +import android.content.Context +import android.content.Intent +import android.net.Uri +import androidx.compose.foundation.layout.requiredSize +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Search +import androidx.compose.material3.BottomAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.PlainTooltip +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconRequestModel +import app.lawnchair.lawnicons.ui.util.Constants + +@Composable +fun HomeBottomBar( + context: Context, + iconRequestModel: IconRequestModel?, + snackbarHostState: SnackbarHostState, + onNavigate: () -> Unit, + onExpandSearch: () -> Unit, + modifier: Modifier = Modifier, +) { + BottomAppBar( + actions = { + SimpleTooltipBox( + label = stringResource(id = R.string.github), + ) { + IconButton( + onClick = { + val webpage = Uri.parse(Constants.GITHUB) + val intent = Intent(Intent.ACTION_VIEW, webpage) + if (intent.resolveActivity(context.packageManager) != null) { + context.startActivity(intent) + } + }, + ) { + Icon( + painter = painterResource(id = R.drawable.github_foreground), + contentDescription = stringResource(id = R.string.github), + modifier = Modifier.requiredSize(24.dp), + ) + } + } + IconRequestIconButton( + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + ) + SimpleTooltipBox( + label = stringResource(id = R.string.about), + ) { + IconButton(onClick = onNavigate) { + Icon( + painter = painterResource(id = R.drawable.contacts_foreground), + contentDescription = stringResource(id = R.string.about), + modifier = Modifier.requiredSize(24.dp), + ) + } + } + }, + floatingActionButton = { + SimpleTooltipBox( + label = stringResource(id = R.string.search), + ) { + FloatingActionButton(onClick = onExpandSearch) { + Icon( + imageVector = Icons.Rounded.Search, + contentDescription = stringResource(id = R.string.search), + ) + } + } + }, + modifier = modifier, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun SimpleTooltipBox( + label: String, + modifier: Modifier = Modifier, + content: @Composable (() -> Unit), +) { + TooltipBox( + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(label) + } + }, + state = rememberTooltipState(), + modifier = modifier, + ) { + content() + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt new file mode 100644 index 00000000000..5bbd8c6a13f --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt @@ -0,0 +1,143 @@ +package app.lawnchair.lawnicons.ui.components.home + +import androidx.compose.animation.AnimatedContent +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.model.SearchMode +import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar +import app.lawnchair.lawnicons.ui.components.home.search.SearchContents + +@Composable +@OptIn(ExperimentalMaterial3Api::class) +fun HomeTopBar( + isSearchExpanded: Boolean, + onFocusChange: () -> Unit, + isExpandedScreen: Boolean, + onClearSearch: () -> Unit, + onChangeMode: (SearchMode) -> Unit, + onSearchIcons: (String) -> Unit, + searchedIconInfoModel: IconInfoModel?, + onNavigate: () -> Unit, + isIconPicker: Boolean, + searchTerm: String, + searchMode: SearchMode, + onSendResult: (IconInfo) -> Unit, + focusRequester: FocusRequester, + scrollBehavior: TopAppBarScrollBehavior, + appIcon: ImageBitmap, + modifier: Modifier = Modifier, +) { + AnimatedContent(targetState = isSearchExpanded || isExpandedScreen, label = "TopAppBar to SearchBar", modifier = modifier) { targetState -> + if (targetState) { + searchedIconInfoModel?.let { + SearchBar( + searchTerm = searchTerm, + onClearSearch = onClearSearch, + onChangeMode = onChangeMode, + onSearchIcons = onSearchIcons, + iconInfoModel = it, + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + searchMode = searchMode, + onSendResult = onSendResult, + onFocusChange = onFocusChange, + inputFieldModifier = Modifier.focusRequester(focusRequester), + ) + } + } else { + CenterAlignedTopAppBar( + scrollBehavior = scrollBehavior, + title = { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Image( + bitmap = appIcon, + contentDescription = stringResource(id = R.string.app_name), + modifier = Modifier.size(36.dp), + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + stringResource(id = R.string.app_name), + ) + } + }, + ) + } + } +} + +@Composable +private fun SearchBar( + onClearSearch: () -> Unit, + onChangeMode: (SearchMode) -> Unit, + onSearchIcons: (String) -> Unit, + searchTerm: String, + iconInfoModel: IconInfoModel, + onNavigate: () -> Unit, + isExpandedScreen: Boolean, + isIconPicker: Boolean, + searchMode: SearchMode, + onSendResult: (IconInfo) -> Unit, + onFocusChange: () -> Unit, + modifier: Modifier = Modifier, + inputFieldModifier: Modifier = Modifier, +) { + Column( + modifier = modifier.fillMaxWidth(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + LawniconsSearchBar( + query = searchTerm, + isQueryEmpty = searchTerm == "", + onClearAndBackClick = { + onClearSearch() + onFocusChange() + }, + onQueryChange = { newValue -> + onSearchIcons(newValue) + }, + iconInfoModel = iconInfoModel, + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + content = { + SearchContents( + searchTerm = searchTerm, + searchMode = searchMode, + onModeChange = { mode -> + onChangeMode(mode) + }, + iconInfo = iconInfoModel.iconInfo, + onSendResult = { + onSendResult(it) + }, + ) + }, + inputFieldModifier = inputFieldModifier, + ) + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 5ca6ad76883..7c7ec33072c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -16,7 +16,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid @@ -56,9 +56,8 @@ fun IconPreviewGrid( ) { LazyVerticalGridScrollbar( modifier = Modifier - .then( - if (isExpandedScreen) Modifier.width(640.dp) else Modifier, - ) + .widthIn(max = 640.dp) + .fillMaxWidth() .statusBarsPadding() .padding(top = 26.dp), state = gridState, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 3e622eb4f05..70a5162234c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -14,12 +14,14 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState @@ -46,6 +48,7 @@ import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.isScrollingUp +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @@ -57,30 +60,80 @@ fun IconRequestFAB( snackbarHostState: SnackbarHostState, modifier: Modifier = Modifier, ) { - if (iconRequestModel != null) { - if (iconRequestModel.iconCount > 0) { - IconRequestFAB( - iconRequestList = iconRequestModel.list, - lazyGridState = lazyGridState, - snackbarHostState = snackbarHostState, - modifier = modifier, + RequestHandler( + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + ) { interactionSource -> + ExtendedFloatingActionButton( + text = { + Text(stringResource(R.string.request_icons)) + }, + icon = { + Icon( + painter = painterResource(id = R.drawable.icon_request_app), + contentDescription = null, + ) + }, + onClick = {}, + expanded = lazyGridState.isScrollingUp(), + interactionSource = interactionSource, + modifier = modifier, + ) + } +} + +@Composable +fun IconRequestIconButton( + iconRequestModel: IconRequestModel?, + snackbarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + RequestHandler( + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + ) { interactionSource -> + IconButton( + onClick = {}, + interactionSource = interactionSource, + modifier = modifier, + ) { + Icon( + painter = painterResource(id = R.drawable.icon_request_app), + contentDescription = stringResource(R.string.request_icons), + modifier = Modifier.requiredSize(24.dp), ) } } } +@Composable +fun RequestHandler( + iconRequestModel: IconRequestModel?, + snackbarHostState: SnackbarHostState, + content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), +) { + if (iconRequestModel != null && iconRequestModel.iconCount > 0) { + RequestHandler( + iconRequestList = iconRequestModel.list, + snackbarHostState = snackbarHostState, + ) { + content(it) + } + } +} + @OptIn(ExperimentalMaterial3Api::class) @Composable -fun IconRequestFAB( +fun RequestHandler( iconRequestList: List, snackbarHostState: SnackbarHostState, - lazyGridState: LazyGridState, - modifier: Modifier = Modifier, + content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), ) { val context = LocalContext.current + val viewConfiguration = LocalViewConfiguration.current - val list = iconRequestList.joinToString("\n") { "${it.name}\n${it.componentName}" } - val request = buildForm(list.replace("\n", "%20")) + val requestList = formatIconRequestList(iconRequestList) + val encodedRequestList = buildForm(requestList.replace("\n", "%20")) val sheetExpanded = remember { mutableStateOf(false) } val sheetState = rememberModalBottomSheetState( @@ -89,9 +142,8 @@ fun IconRequestFAB( val coroutineScope = rememberCoroutineScope() val interactionSource = remember { MutableInteractionSource() } - val viewConfiguration = LocalViewConfiguration.current - val directLinkEnabled = request.length < Constants.DIRECT_LINK_MAX_LENGTH + val directLinkEnabled = encodedRequestList.length < Constants.DIRECT_LINK_MAX_LENGTH LaunchedEffect(interactionSource) { var isLongClick = false @@ -111,28 +163,9 @@ fun IconRequestFAB( is PressInteraction.Release -> { if (!isLongClick) { if (directLinkEnabled) { - openLink(context, request) + openLink(context, encodedRequestList) } else { - copyTextToClipboard(context, list) - coroutineScope.launch { - val result = snackbarHostState - .showSnackbar( - message = context.getString(R.string.snackbar_request_too_large), - actionLabel = context.getString(R.string.snackbar_use_fallback_link), - withDismissAction = true, - duration = SnackbarDuration.Indefinite, - ) - when (result) { - SnackbarResult.ActionPerformed -> { - /* Handle snackbar action performed */ - openLink(context, Constants.ICON_REQUEST_FORM) - } - - SnackbarResult.Dismissed -> { - snackbarHostState.currentSnackbarData?.dismiss() - } - } - } + openSnackbarContent(context, requestList, coroutineScope, snackbarHostState) } } } @@ -144,56 +177,48 @@ fun IconRequestFAB( } } - ExtendedFloatingActionButton( - text = { - Text(stringResource(R.string.request_icons)) - }, - icon = { - Icon( - painter = painterResource(id = R.drawable.icon_request_app), - contentDescription = null, - ) - }, - onClick = {}, - expanded = lazyGridState.isScrollingUp(), - interactionSource = interactionSource, - modifier = modifier, - ) + content(interactionSource) + AnimatedVisibility(visible = sheetExpanded.value) { ModalBottomSheet( onDismissRequest = { sheetExpanded.value = false }, sheetState = sheetState, ) { + IconRequestSheet(requestList, context) + } + } +} + +@Composable +private fun IconRequestSheet(list: String, context: Context) { + Column( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Card { Column( modifier = Modifier - .padding(16.dp) - .fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally, + .verticalScroll(rememberScrollState()) + .padding(16.dp), ) { - Card { - Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) - .padding(16.dp), + Text( + text = list, + fontFamily = FontFamily.Monospace, + modifier = Modifier + .horizontalScroll(rememberScrollState()), + ) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + TextButton( + onClick = { + copyTextToClipboard(context, list) + }, ) { - Text( - text = list, - fontFamily = FontFamily.Monospace, - modifier = Modifier - .horizontalScroll(rememberScrollState()), - ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - ) { - TextButton( - onClick = { - copyTextToClipboard(context, list) - }, - ) { - Text(stringResource(R.string.copy_to_clipboard)) - } - } + Text(stringResource(R.string.copy_to_clipboard)) } } } @@ -201,12 +226,43 @@ fun IconRequestFAB( } } +private fun formatIconRequestList(iconRequestList: List) = + iconRequestList.joinToString("\n") { "${it.name}\n${it.componentName}" } + private fun copyTextToClipboard(context: Context, text: String) { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) clipboard.setPrimaryClip(clip) } +private fun openSnackbarContent( + context: Context, + list: String, + coroutineScope: CoroutineScope, + snackbarHostState: SnackbarHostState, +) { + copyTextToClipboard(context, list) + coroutineScope.launch { + val result = snackbarHostState + .showSnackbar( + message = context.getString(R.string.snackbar_request_too_large), + actionLabel = context.getString(R.string.snackbar_use_fallback_link), + withDismissAction = true, + duration = SnackbarDuration.Indefinite, + ) + when (result) { + SnackbarResult.ActionPerformed -> { + /* Handle snackbar action performed */ + openLink(context, Constants.ICON_REQUEST_FORM) + } + + SnackbarResult.Dismissed -> { + snackbarHostState.currentSnackbarData?.dismiss() + } + } + } +} + private fun openLink(context: Context, link: String) { val website = Uri.parse(link) val intent = Intent(Intent.ACTION_VIEW, website) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index dd460f4fdbc..6dbb88bd124 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -58,6 +58,7 @@ fun LawniconsSearchBar( iconInfoModel: IconInfoModel, onNavigate: () -> Unit, modifier: Modifier = Modifier, + inputFieldModifier: Modifier = Modifier, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, content: @Composable (() -> Unit), @@ -71,6 +72,7 @@ fun LawniconsSearchBar( onNavigate = onNavigate, content = content, modifier = modifier, + inputFieldModifier = inputFieldModifier, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, ) @@ -99,6 +101,7 @@ fun LawniconsSearchBar( iconCount: Int, onNavigate: () -> Unit, modifier: Modifier = Modifier, + inputFieldModifier: Modifier = Modifier, isExpandedScreen: Boolean = false, isIconPicker: Boolean = false, content: @Composable (() -> Unit), @@ -134,7 +137,12 @@ fun LawniconsSearchBar( onQueryChange = onQueryChange, onSearch = { active = false }, active = active, - onActiveChange = { active = it }, + onActiveChange = { + active = it + if (!active) { + onClearAndBackClick() + } + }, placeholder = { Text( stringResource( @@ -166,6 +174,7 @@ fun LawniconsSearchBar( } }, isExpandedScreen = isExpandedScreen, + inputFieldModifier = inputFieldModifier, ) { content() } @@ -184,12 +193,15 @@ private fun ResponsiveSearchBar( leadingIcon: @Composable () -> Unit, trailingIcon: @Composable () -> Unit, isExpandedScreen: Boolean, + modifier: Modifier = Modifier, + inputFieldModifier: Modifier = Modifier, content: @Composable () -> Unit, ) { if (isExpandedScreen) { Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center, + modifier = modifier, ) { DockedSearchBar( inputField = { @@ -197,6 +209,7 @@ private fun ResponsiveSearchBar( query = query, onQueryChange = onQueryChange, onSearch = onSearch, + modifier = inputFieldModifier, expanded = active, onExpandedChange = onActiveChange, placeholder = placeholder, @@ -218,6 +231,7 @@ private fun ResponsiveSearchBar( query = query, onQueryChange = onQueryChange, onSearch = onSearch, + modifier = inputFieldModifier, expanded = active, onExpandedChange = onActiveChange, placeholder = placeholder, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 700abda7069..bc0d6862876 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -2,24 +2,29 @@ package app.lawnchair.lawnicons.ui.destination import androidx.compose.animation.Crossfade import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode +import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar +import app.lawnchair.lawnicons.ui.components.home.HomeTopBar import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar @@ -28,10 +33,11 @@ import app.lawnchair.lawnicons.ui.components.home.search.SearchContents import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData +import app.lawnchair.lawnicons.util.appIcon import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel import kotlinx.collections.immutable.toImmutableList -@OptIn(ExperimentalFoundationApi::class) +@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) @Composable fun Home( onNavigate: () -> Unit, @@ -48,9 +54,15 @@ fun Home( val searchMode = searchMode val searchTerm = searchTerm + val expandSearch = remember { mutableStateOf(false) } + val context = LocalContext.current + val lazyGridState = rememberLazyGridState() val snackbarHostState = remember { SnackbarHostState() } + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val focusRequester = remember { FocusRequester() } + Crossfade( modifier = modifier, targetState = iconInfoModel != null, @@ -59,52 +71,48 @@ fun Home( if (visible) { Scaffold( topBar = { - searchedIconInfoModel?.let { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - LawniconsSearchBar( - query = searchTerm, - isQueryEmpty = searchTerm == "", - onClearAndBackClick = { - lawniconsViewModel.clearSearch() - }, - onQueryChange = { newValue -> - lawniconsViewModel.searchIcons(newValue) - }, - iconInfoModel = it, - onNavigate = onNavigate, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - content = { - SearchContents( - searchTerm = searchTerm, - searchMode = searchMode, - onModeChange = { mode -> - lawniconsViewModel.changeMode(mode) - }, - iconInfo = it.iconInfo, - onSendResult = { - onSendResult(it) - }, - ) - }, - ) - } + HomeTopBar( + isSearchExpanded = expandSearch.value, + onFocusChange = { expandSearch.value = !expandSearch.value }, + isExpandedScreen = isExpandedScreen, + onClearSearch = { clearSearch() }, + onChangeMode = { changeMode(it) }, + onSearchIcons = { searchIcons(it) }, + searchedIconInfoModel = searchedIconInfoModel, + onNavigate = onNavigate, + searchTerm = searchTerm, + searchMode = searchMode, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + focusRequester = focusRequester, + scrollBehavior = scrollBehavior, + appIcon = context.appIcon().asImageBitmap(), + ) + }, + bottomBar = { + if (!isExpandedScreen) { + HomeBottomBar( + context = context, + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + onNavigate = onNavigate, + onExpandSearch = { expandSearch.value = !expandSearch.value }, + ) } }, floatingActionButton = { - IconRequestFAB( - iconRequestModel = iconRequestModel, - snackbarHostState = snackbarHostState, - lazyGridState = lazyGridState, - ) + if (isExpandedScreen) { + IconRequestFAB( + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + lazyGridState = lazyGridState, + ) + } }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, + modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), ) { contentPadding -> iconInfoModel?.let { val padding = contentPadding // Ignore padding value @@ -123,6 +131,11 @@ fun Home( ) } } + LaunchedEffect(expandSearch.value) { + if (expandSearch.value) { + focusRequester.requestFocus() + } + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d00ad51d7a4..91f637a3be9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,4 +75,5 @@ Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Search diff --git a/build.gradle.kts b/build.gradle.kts index ea39f8e1a44..379455588c6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,8 @@ plugins { allprojects { plugins.withType().configureEach { extensions.configure { - toolchain.languageVersion = JavaLanguageVersion.of(21) + // Downgrade temporarily to make Compose previews work + toolchain.languageVersion = JavaLanguageVersion.of(17) } } From c05a2df6ac573f86050b823c5fe4fddbd64ae920 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 26 Jul 2024 22:35:38 +0800 Subject: [PATCH 220/527] Initial fix on in-app picker Todo: fix icon colors --- .../app/lawnchair/lawnicons/MainActivity.kt | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index 06e90530536..2ddec052487 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -2,6 +2,8 @@ package app.lawnchair.lawnicons import android.content.Context import android.content.Intent +import android.content.res.ColorStateList +import android.graphics.drawable.Drawable import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity @@ -13,6 +15,7 @@ import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSiz import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.ui.platform.LocalContext import androidx.core.content.res.ResourcesCompat +import androidx.core.graphics.drawable.DrawableCompat import androidx.core.graphics.drawable.toBitmap import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import app.lawnchair.lawnicons.model.IconInfo @@ -51,10 +54,22 @@ class MainActivity : ComponentActivity() { ) { val intent = Intent() - val bitmap = ResourcesCompat.getDrawable(context.resources, iconInfo.id, null) - ?.toBitmap() + val primaryForegroundColor = context.getColor(R.color.primaryForeground) + val primaryBackgroundColor = context.getColor(R.color.primaryBackground) + + val drawable: Drawable? = + ResourcesCompat.getDrawable(context.resources, iconInfo.id, theme)?.mutate()?.let { + DrawableCompat.wrap( + it, + ) + } + + if (drawable != null) { + DrawableCompat.setTintList(drawable, ColorStateList.valueOf(primaryForegroundColor)) + DrawableCompat.setTintList(drawable, ColorStateList.valueOf(primaryBackgroundColor)) + + val bitmap = drawable.toBitmap() - if (bitmap != null) { try { intent.putExtra( "icon", @@ -69,6 +84,7 @@ class MainActivity : ComponentActivity() { } intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconInfo.id) setResult(RESULT_OK, intent) + finish() } else { setResult(RESULT_CANCELED, intent) } From 6bc2a9e4ad1422cd5b4e80432565fd2eb6e2d706 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 26 Jul 2024 22:46:33 +0800 Subject: [PATCH 221/527] Revert app module gradle changes --- app/build.gradle.kts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 92451330b7b..619a15f5915 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,5 +1,6 @@ import app.cash.licensee.LicenseeTask import com.android.build.gradle.internal.api.ApkVariantOutputImpl +import com.android.build.gradle.tasks.MergeResources import java.io.FileInputStream import java.util.Locale import java.util.Properties @@ -100,7 +101,7 @@ android { applicationVariants.all { outputs.all { (this as? ApkVariantOutputImpl)?.outputFileName = - "Lawnicons $versionName v$versionCode ${buildType.name}.apk".replace(" ", ".") + "Lawnicons $versionName v${versionCode}_${buildType.name}.apk" } } } @@ -121,9 +122,9 @@ androidComponents.onVariants { variant -> } // Process SVGs before every build. -// tasks.withType().configureEach { -// dependsOn(projects.svgProcessor.dependencyProject.tasks.named("run")) -// } +tasks.withType().configureEach { + dependsOn(projects.svgProcessor.dependencyProject.tasks.named("run")) +} licensee { allow("Apache-2.0") @@ -135,10 +136,10 @@ dependencies { implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.1") implementation(platform("androidx.compose:compose-bom:2024.06.00")) - implementation("androidx.compose.ui:ui:1.6.6") - implementation("androidx.compose.ui:ui-tooling-preview:1.6.6") - implementation("androidx.compose.ui:ui-util:1.6.6") - debugImplementation("androidx.compose.ui:ui-tooling:1.6.6") + implementation("androidx.compose.ui:ui") + implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.ui:ui-util") + debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta05") From 443ee5c5cd4636587ead0e31f955454f7d9b71b1 Mon Sep 17 00:00:00 2001 From: Chang Jiaman Date: Sun, 28 Jul 2024 00:35:41 +0800 Subject: [PATCH 222/527] +9 icons, +1 link (#2183) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * link hihonor music, legado(play) * add todesk,yunrili * +6,link 1 * +2 icons * link1 * fix icons,+1 icon * fix * Fixed IQIYI → iQIYI * Improved iqiyi.svg quality for small sizes * The visual center of ithome.svg has been clarified * Moved kaadas.svg so that it is located within the boundaries of the content area and reduced the density at the bottom --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 13 +++++++++++++ svgs/feishu.svg | 1 + svgs/huazhuhui.svg | 1 + svgs/iqiyi.svg | 1 + svgs/ithome.svg | 1 + svgs/kaadas.svg | 1 + svgs/tongyi.svg | 1 + svgs/vvex.svg | 1 + svgs/yadea.svg | 1 + svgs/yunrili.svg | 1 + 10 files changed, 22 insertions(+) create mode 100644 svgs/feishu.svg create mode 100644 svgs/huazhuhui.svg create mode 100644 svgs/iqiyi.svg create mode 100644 svgs/ithome.svg create mode 100644 svgs/kaadas.svg create mode 100644 svgs/tongyi.svg create mode 100644 svgs/vvex.svg create mode 100644 svgs/yadea.svg create mode 100644 svgs/yunrili.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 13cfd209ca9..2ebe21a31a0 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -7479,6 +7479,7 @@ + @@ -11150,6 +11151,7 @@ + @@ -12273,6 +12275,17 @@ + + + + + + + + + + + diff --git a/svgs/feishu.svg b/svgs/feishu.svg new file mode 100644 index 00000000000..8749f8e033d --- /dev/null +++ b/svgs/feishu.svg @@ -0,0 +1 @@ + diff --git a/svgs/huazhuhui.svg b/svgs/huazhuhui.svg new file mode 100644 index 00000000000..10e1a74fa11 --- /dev/null +++ b/svgs/huazhuhui.svg @@ -0,0 +1 @@ + diff --git a/svgs/iqiyi.svg b/svgs/iqiyi.svg new file mode 100644 index 00000000000..03afa64e829 --- /dev/null +++ b/svgs/iqiyi.svg @@ -0,0 +1 @@ + diff --git a/svgs/ithome.svg b/svgs/ithome.svg new file mode 100644 index 00000000000..571b53f91dd --- /dev/null +++ b/svgs/ithome.svg @@ -0,0 +1 @@ + diff --git a/svgs/kaadas.svg b/svgs/kaadas.svg new file mode 100644 index 00000000000..cfb420e9c80 --- /dev/null +++ b/svgs/kaadas.svg @@ -0,0 +1 @@ + diff --git a/svgs/tongyi.svg b/svgs/tongyi.svg new file mode 100644 index 00000000000..56d66f276c7 --- /dev/null +++ b/svgs/tongyi.svg @@ -0,0 +1 @@ + diff --git a/svgs/vvex.svg b/svgs/vvex.svg new file mode 100644 index 00000000000..a1e665b3db4 --- /dev/null +++ b/svgs/vvex.svg @@ -0,0 +1 @@ + diff --git a/svgs/yadea.svg b/svgs/yadea.svg new file mode 100644 index 00000000000..245dcec5404 --- /dev/null +++ b/svgs/yadea.svg @@ -0,0 +1 @@ + diff --git a/svgs/yunrili.svg b/svgs/yunrili.svg new file mode 100644 index 00000000000..b9884d6e465 --- /dev/null +++ b/svgs/yunrili.svg @@ -0,0 +1 @@ + From 186a39a45fc1d6f3a99027118ab28414f79c5f43 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sat, 27 Jul 2024 16:40:16 +0000 Subject: [PATCH 223/527] +1 icon (#2202) * +1 icon * Fixed --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/fate_grand_order.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/fate_grand_order.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 2ebe21a31a0..1e7e05eb25b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -3147,6 +3147,7 @@ + diff --git a/svgs/fate_grand_order.svg b/svgs/fate_grand_order.svg new file mode 100644 index 00000000000..3a2c79127c3 --- /dev/null +++ b/svgs/fate_grand_order.svg @@ -0,0 +1 @@ + From 3db5c42ce0b00a03caef6686b2f85f4ebedaae2c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:53:43 +0300 Subject: [PATCH 224/527] +14 links (#2229) --- app/assets/appfilter.xml | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1e7e05eb25b..76065105524 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -792,6 +792,7 @@ + @@ -1316,6 +1317,8 @@ + + @@ -1819,6 +1822,7 @@ + @@ -2544,6 +2548,7 @@ + @@ -3331,6 +3336,7 @@ + @@ -3750,6 +3756,7 @@ + @@ -4634,6 +4641,7 @@ + @@ -5159,6 +5167,7 @@ + @@ -5315,6 +5324,7 @@ + @@ -6726,6 +6736,7 @@ + @@ -7781,6 +7792,7 @@ + @@ -7910,6 +7922,7 @@ + @@ -10392,6 +10405,7 @@ + @@ -11647,6 +11661,7 @@ + @@ -12114,6 +12129,7 @@ + @@ -12124,11 +12140,13 @@ + + @@ -12162,6 +12180,7 @@ + @@ -12199,6 +12218,7 @@ + @@ -12243,6 +12263,8 @@ + + @@ -12255,6 +12277,7 @@ + @@ -12272,21 +12295,12 @@ + + - - - - - - - - - - - From ea89aa083682a6bdcc467d141511f2a32b2641f7 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:00:14 +0300 Subject: [PATCH 225/527] Clarified the instructions for finding the visual center of an icon (#2230) --- .github/icon_checklist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 51c1a6568da..b4909874fd6 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -20,7 +20,7 @@ Example: `京东 ~~ JD`. ### Quality 1. Ensure that icons are easily recognizable. -2. Align icons to [the visual center](https://www.google.com/search?sca_esv=1fcec3f5e0b15e20&q=what+is+visual+center+of+an+icon&tbm=isch&source=lnms) as much as possible within the guidelines. +2. Align icons to [the visual center](https://crazybitsstudios.com/another-way-of-aligning-elements-when-creating-icons) as much as possible within the guidelines. The visual center is where your icon looks and feels centered. 3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. 4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. 5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. From 8c689221675381c31a8a5b98e72c68f427f5c066 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:56:58 +0800 Subject: [PATCH 226/527] Create initial icon design change issue template --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/icon_rebrand.yml diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml new file mode 100644 index 00000000000..acf139c33ae --- /dev/null +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -0,0 +1,31 @@ +name: Request icon design change +description: Request changing the design of an existing icon in Lawnicons +title: "[Icon Rebrand] " +labels: ["icon rebrand"] +body: + - type: textarea + id: outdated-icon-list + attributes: + label: List of outdated icons + description: | + Please follow the following format regarding the outdated icons: + + ``` + App Name + (image to new icon) + + App Name + (image to new icon) + ``` + + It is more preferable to link to the outdated icon in [the svgs/ folder](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs) + placeholder: + validations: + required: true + - type: textarea + id: additional-info + attributes: + label: Additional information + description: Place additional context here. + validations: + required: true From 3b05a0f564fb149bf056601542d433ae79eb043e Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:06:51 +0800 Subject: [PATCH 227/527] Move icon picker constants --- app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt | 3 ++- .../main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index 2ddec052487..9b9b1829f96 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -20,6 +20,7 @@ import androidx.core.graphics.drawable.toBitmap import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.Lawnicons +import app.lawnchair.lawnicons.ui.util.Constants import dagger.hilt.android.AndroidEntryPoint @ExperimentalFoundationApi @@ -32,7 +33,7 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) enableEdgeToEdge() - val isIconPicker = intent?.action == "com.novalauncher.THEME" + val isIconPicker = intent?.action == Constants.ICON_PICKER_INTENT_ACTION setContent { val context = LocalContext.current diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt index d33c4ee6788..871c7701a12 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt @@ -4,6 +4,8 @@ object Constants { const val ICON_REQUEST_FORM = "https://forms.gle/xt7sJhgWEasuo9TR9" const val GITHUB = "https://github.com/LawnchairLauncher/lawnicons" + const val ICON_PICKER_INTENT_ACTION = "com.novalauncher.THEME" + /** * Maximum length of a direct Google forms link. The limit is around 2300-2400 characters, so we use the lower limit to prevent any issues. */ From 2d3a0c8ee574a3f560e81c96dd04e408ebfca1dc Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:07:40 +0800 Subject: [PATCH 228/527] Open empty icon request form if icon count is 0 --- .../lawnicons/ui/components/home/IconRequestFAB.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 70a5162234c..c51a9d36930 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -112,7 +112,7 @@ fun RequestHandler( snackbarHostState: SnackbarHostState, content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), ) { - if (iconRequestModel != null && iconRequestModel.iconCount > 0) { + if (iconRequestModel != null) { RequestHandler( iconRequestList = iconRequestModel.list, snackbarHostState = snackbarHostState, @@ -162,7 +162,9 @@ fun RequestHandler( is PressInteraction.Release -> { if (!isLongClick) { - if (directLinkEnabled) { + if (iconRequestList.isEmpty()) { + openLink(context, Constants.ICON_REQUEST_FORM) + } else if (directLinkEnabled) { openLink(context, encodedRequestList) } else { openSnackbarContent(context, requestList, coroutineScope, snackbarHostState) From 948851b6d8f26a86631b94051783bad7538da234 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:08:24 +0800 Subject: [PATCH 229/527] Update bottom bar FAB color --- .../lawnicons/ui/components/home/HomeBottomBar.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index b425c041c55..bc218d9f586 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -7,8 +7,10 @@ import androidx.compose.foundation.layout.requiredSize import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Search import androidx.compose.material3.BottomAppBar +import androidx.compose.material3.BottomAppBarDefaults import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.PlainTooltip @@ -76,7 +78,11 @@ fun HomeBottomBar( SimpleTooltipBox( label = stringResource(id = R.string.search), ) { - FloatingActionButton(onClick = onExpandSearch) { + FloatingActionButton( + onClick = onExpandSearch, + containerColor = BottomAppBarDefaults.bottomAppBarFabColor, + elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(), + ) { Icon( imageVector = Icons.Rounded.Search, contentDescription = stringResource(id = R.string.search), From 081edd27ac1d500d8044b35fca195f348e29b45a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:08:35 +0800 Subject: [PATCH 230/527] Hide top app bar on scroll --- .../main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index bc0d6862876..9838d9b7255 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -60,7 +60,7 @@ fun Home( val lazyGridState = rememberLazyGridState() val snackbarHostState = remember { SnackbarHostState() } - val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() val focusRequester = remember { FocusRequester() } Crossfade( From 2d60c924447dbf18d1084d5f78dff042d8a54f77 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:56:44 +0800 Subject: [PATCH 231/527] Update app repositories code --- .../lawnicons/di/IconRepositoryModule.kt | 3 +- .../di/OssLibraryRepositoryModule.kt | 5 +- .../lawnicons/model/IconRequestModel.kt | 2 +- .../lawnicons/repository/IconRepository.kt | 157 +++++++++--------- .../repository/OssLibraryRepository.kt | 15 +- .../ui/components/home/IconRequestFAB.kt | 2 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 2 +- 7 files changed, 94 insertions(+), 92 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/IconRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/IconRepositoryModule.kt index b29d360d930..474f588d244 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/di/IconRepositoryModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/IconRepositoryModule.kt @@ -2,6 +2,7 @@ package app.lawnchair.lawnicons.di import android.app.Application import app.lawnchair.lawnicons.repository.IconRepository +import app.lawnchair.lawnicons.repository.IconRepositoryImpl import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -14,5 +15,5 @@ object IconRepositoryModule { @Provides @Singleton - fun provideIconRepository(application: Application) = IconRepository(application) + fun provideIconRepository(application: Application): IconRepository = IconRepositoryImpl(application) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt index c4bd81be934..52942d9f83d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt @@ -2,6 +2,7 @@ package app.lawnchair.lawnicons.di import android.app.Application import app.lawnchair.lawnicons.repository.OssLibraryRepository +import app.lawnchair.lawnicons.repository.OssLibraryRepositoryImpl import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -14,6 +15,6 @@ object OssLibraryRepositoryModule { @Provides @Singleton - fun provideOssLibraryRepository(application: Application) = - OssLibraryRepository(application = application) + fun provideOssLibraryRepository(application: Application) : OssLibraryRepository = + OssLibraryRepositoryImpl(application = application) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt index d81bbe2ae4d..d26f7f76115 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt @@ -3,7 +3,7 @@ package app.lawnchair.lawnicons.model import kotlinx.collections.immutable.ImmutableList data class IconRequest( - val name: String, + val label: String, val componentName: String, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 7120ce1c78c..c92d5158559 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -12,113 +12,104 @@ import app.lawnchair.lawnicons.model.getFirstLabelAndComponent import app.lawnchair.lawnicons.util.getIconInfo import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter import javax.inject.Inject +import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class IconRepository @Inject constructor(application: Application) { +interface IconRepository { + val iconInfoModel: StateFlow + val searchedIconInfoModel: StateFlow + val iconRequestList: MutableStateFlow + + suspend fun search(mode: SearchMode, query: String) + fun clearSearch() +} + +class IconRepositoryImpl @Inject constructor(application: Application) : IconRepository { private val coroutineScope = CoroutineScope(Dispatchers.IO) - private var iconInfo: List = emptyList() - val iconInfoModel = MutableStateFlow(value = null) - val searchedIconInfoModel = MutableStateFlow(value = null) - private var systemPackageList: List? = null - var iconRequestList = MutableStateFlow(value = null) + private val _iconInfoModel = MutableStateFlow(IconInfoModel(persistentListOf(), 0)) + override val iconInfoModel = _iconInfoModel.asStateFlow() - private var iconCount = 0 + private val _searchedIconInfoModel = MutableStateFlow(IconInfoModel(persistentListOf(), 0)) + override val searchedIconInfoModel = _searchedIconInfoModel.asStateFlow() - init { + override val iconRequestList = MutableStateFlow(value = null) + + init{ coroutineScope.launch { - application.getIconInfo() - .also { list -> - iconInfo = list.sortedBy { it.label.lowercase() } - } - .associateBy { it.label }.values - .also { - iconCount = it.size - } + val iconList = application.getIconInfo().sortedBy { it.label.lowercase() } + val groupedIcons = iconList.associateBy { it.label }.values + val iconCount = groupedIcons.size - iconInfoModel.value = IconInfoModel( - iconInfo = iconInfo.toPersistentList(), - iconCount = iconCount, - ) - searchedIconInfoModel.value = IconInfoModel( - iconInfo = iconInfo.toPersistentList(), + _iconInfoModel.value = IconInfoModel( + iconInfo = iconList.toPersistentList(), iconCount = iconCount, ) + _searchedIconInfoModel.value = _iconInfoModel.value - systemPackageList = application.getSystemIconInfoAppfilter() + val systemPackageList = application.getSystemIconInfoAppfilter() .associateBy { it.label }.values .sortedBy { it.label.lowercase() } - - getIconRequestList() + getIconRequestList(systemPackageList) } } - suspend fun search( + override suspend fun search( mode: SearchMode, query: String, ) = withContext(Dispatchers.Default) { - searchedIconInfoModel.value = iconInfo - .let { iconInfo -> - val filtered = iconInfo.mapNotNull { candidate -> - val searchIn = when (mode) { - SearchMode.LABEL -> candidate.componentNames.map { it.label } - SearchMode.COMPONENT -> candidate.componentNames.map { it.componentName } - SearchMode.DRAWABLE -> listOf(candidate.drawableName) - } - val indexOfMatch = searchIn.map { - it.indexOf(string = query, ignoreCase = true) - }.filter { it != -1 }.minOrNull() ?: return@mapNotNull null - val matchAtWordStart = searchIn.any { - it.indexOf(string = query, ignoreCase = true) == 0 || - it.getOrNull(it.indexOf(string = query, ignoreCase = true) - 1) == ' ' - } - SearchInfo( - iconInfo = candidate, - indexOfMatch = indexOfMatch, - matchAtWordStart = matchAtWordStart, - ) - }.sortedWith( - compareBy( - { searchInfo -> !searchInfo.matchAtWordStart }, - { searchInfo -> searchInfo.indexOfMatch }, - ), - ).map { searchInfo -> - searchInfo.iconInfo - }.toPersistentList() - IconInfoModel( - iconCount = iconInfo.size, - iconInfo = filtered, - ) + val filteredIcons = _iconInfoModel.value.iconInfo.mapNotNull { candidate -> + val searchIn = when (mode) { + SearchMode.LABEL -> candidate.componentNames.map { it.label } + SearchMode.COMPONENT -> candidate.componentNames.map { it.componentName } + SearchMode.DRAWABLE -> listOf(candidate.drawableName) + } + val indexOfMatch = searchIn.map { + it.indexOf(string = query, ignoreCase = true) + }.filter { it != -1 }.minOrNull() ?: return@mapNotNull null + val matchAtWordStart = searchIn.any { + it.indexOf(string = query, ignoreCase = true) == 0 || + it.getOrNull(it.indexOf(string = query, ignoreCase = true) - 1) == ' ' } + SearchInfo( + iconInfo = candidate, + indexOfMatch = indexOfMatch, + matchAtWordStart = matchAtWordStart, + ) + }.sortedWith( + compareBy( + { searchInfo -> !searchInfo.matchAtWordStart }, + { searchInfo -> searchInfo.indexOfMatch }, + ), + ).map { searchInfo -> + searchInfo.iconInfo + }.toPersistentList() + + _searchedIconInfoModel.value = IconInfoModel( + iconCount = _iconInfoModel.value.iconCount, + iconInfo = filteredIcons, + ) } - fun clear() { - searchedIconInfoModel.value = iconInfoModel.value?.let { - IconInfoModel( - iconCount = it.iconCount, - iconInfo = IconInfoManager.splitByComponentName(iconInfo).toPersistentList(), - ) - } + override fun clearSearch() { + _searchedIconInfoModel.value = _iconInfoModel.value } - private suspend fun getIconRequestList() = withContext(Dispatchers.Default) { - iconRequestList.value = systemPackageList?.let { packageList -> - val lawniconsData = iconInfo + private suspend fun getIconRequestList(systemPackageList: List) = + withContext(Dispatchers.Default) { + val lawniconsData = _iconInfoModel.value.iconInfo - val systemData = packageList.map { info -> - info.getFirstLabelAndComponent().also { - IconRequest( - it.label, - it.componentName, - ) - } + val systemData = systemPackageList.map { info -> + info.getFirstLabelAndComponent() } val lawniconsComponents = IconInfoManager.splitByComponentName(lawniconsData) @@ -126,17 +117,17 @@ class IconRepository @Inject constructor(application: Application) { .sortedBy { it.lowercase() } .toSet() - val commonItems = systemData.filter { it.componentName !in lawniconsComponents }.map { - IconRequest( - it.label, - it.componentName, - ) - } + val commonItems = systemData.filter { it.componentName !in lawniconsComponents } + .map { + IconRequest( + label = it.label, + componentName = it.componentName, + ) + } - IconRequestModel( + iconRequestList.value = IconRequestModel( list = commonItems.toImmutableList(), iconCount = commonItems.size, ) } - } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/OssLibraryRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/OssLibraryRepository.kt index 5dc0fbd5956..5b35c656528 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/OssLibraryRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/OssLibraryRepository.kt @@ -15,11 +15,20 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn -class OssLibraryRepository @Inject constructor(private val application: Application) { +interface OssLibraryRepository { + val ossLibraries: StateFlow> + + fun getNoticeForOssLibrary( + ossLibraryName: String, + annotate: (String) -> AnnotatedString, + ): Flow +} + +class OssLibraryRepositoryImpl @Inject constructor(private val application: Application) : OssLibraryRepository { private val coroutineScope = MainScope() - val ossLibraries: StateFlow> = flow { + override val ossLibraries: StateFlow> = flow { val jsonString = application.resources.assets.open("artifacts.json") .bufferedReader().use { it.readText() } val ossLibraries = kotlinxJson.decodeFromString>(jsonString) @@ -33,7 +42,7 @@ class OssLibraryRepository @Inject constructor(private val application: Applicat .flowOn(Dispatchers.IO) .stateIn(coroutineScope, SharingStarted.Lazily, emptyList()) - fun getNoticeForOssLibrary( + override fun getNoticeForOssLibrary( ossLibraryName: String, annotate: (String) -> AnnotatedString, ): Flow = ossLibraries.map { it -> diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index c51a9d36930..9c76355cf4e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -229,7 +229,7 @@ private fun IconRequestSheet(list: String, context: Context) { } private fun formatIconRequestList(iconRequestList: List) = - iconRequestList.joinToString("\n") { "${it.name}\n${it.componentName}" } + iconRequestList.joinToString("\n") { "${it.label}\n${it.componentName}" } private fun copyTextToClipboard(context: Context, text: String) { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index d443da3c7ae..da3abce5f0d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -49,7 +49,7 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep fun clearSearch() { _searchTerm = "" viewModelScope.launch { - iconRepository.clear() + iconRepository.clearSearch() } } } From c2a728c331e0ccc417eceddfa491fe8028e7a778 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:28:00 +0800 Subject: [PATCH 232/527] Simplify HomeTopBar --- .../ui/components/home/HomeTopBar.kt | 33 +++++++++++-------- .../lawnicons/ui/destination/Home.kt | 20 ++++++----- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt index 5bbd8c6a13f..55f98e36d1b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt @@ -14,6 +14,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -28,26 +29,32 @@ import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar import app.lawnchair.lawnicons.ui.components.home.search.SearchContents +data class HomeTopBarUiState( + val isSearchExpanded: Boolean , + val isExpandedScreen: Boolean, + val searchTerm: String, + val searchMode: SearchMode, + val searchedIconInfoModel: IconInfoModel?, + val isIconPicker: Boolean, + val appIcon: ImageBitmap, +) + @Composable @OptIn(ExperimentalMaterial3Api::class) fun HomeTopBar( - isSearchExpanded: Boolean, + uiState: HomeTopBarUiState, onFocusChange: () -> Unit, - isExpandedScreen: Boolean, onClearSearch: () -> Unit, onChangeMode: (SearchMode) -> Unit, onSearchIcons: (String) -> Unit, - searchedIconInfoModel: IconInfoModel?, onNavigate: () -> Unit, - isIconPicker: Boolean, - searchTerm: String, - searchMode: SearchMode, onSendResult: (IconInfo) -> Unit, focusRequester: FocusRequester, scrollBehavior: TopAppBarScrollBehavior, - appIcon: ImageBitmap, modifier: Modifier = Modifier, ) { + val (isSearchExpanded, isExpandedScreen, searchTerm, searchMode, searchedIconInfoModel, isIconPicker, appIcon) = uiState + AnimatedContent(targetState = isSearchExpanded || isExpandedScreen, label = "TopAppBar to SearchBar", modifier = modifier) { targetState -> if (targetState) { searchedIconInfoModel?.let { @@ -55,7 +62,7 @@ fun HomeTopBar( searchTerm = searchTerm, onClearSearch = onClearSearch, onChangeMode = onChangeMode, - onSearchIcons = onSearchIcons, + onSearch = onSearchIcons, iconInfoModel = it, onNavigate = onNavigate, isExpandedScreen = isExpandedScreen, @@ -91,16 +98,16 @@ fun HomeTopBar( @Composable private fun SearchBar( + searchMode: SearchMode, + searchTerm: String, + onSearch: (String) -> Unit, onClearSearch: () -> Unit, onChangeMode: (SearchMode) -> Unit, - onSearchIcons: (String) -> Unit, - searchTerm: String, - iconInfoModel: IconInfoModel, onNavigate: () -> Unit, isExpandedScreen: Boolean, isIconPicker: Boolean, - searchMode: SearchMode, onSendResult: (IconInfo) -> Unit, + iconInfoModel: IconInfoModel, onFocusChange: () -> Unit, modifier: Modifier = Modifier, inputFieldModifier: Modifier = Modifier, @@ -118,7 +125,7 @@ private fun SearchBar( onFocusChange() }, onQueryChange = { newValue -> - onSearchIcons(newValue) + onSearch(newValue) }, iconInfoModel = iconInfoModel, onNavigate = onNavigate, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 9838d9b7255..41f07cd2fa9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -65,28 +65,30 @@ fun Home( Crossfade( modifier = modifier, - targetState = iconInfoModel != null, + targetState = iconInfoModel.iconCount > 0, label = "", ) { visible -> if (visible) { Scaffold( topBar = { HomeTopBar( - isSearchExpanded = expandSearch.value, + uiState = HomeTopBarUiState( + isSearchExpanded = expandSearch.value, + isExpandedScreen = isExpandedScreen, + searchedIconInfoModel = searchedIconInfoModel, + searchTerm = searchTerm, + searchMode = searchMode, + isIconPicker = isIconPicker, + appIcon = context.appIcon().asImageBitmap(), + ), onFocusChange = { expandSearch.value = !expandSearch.value }, - isExpandedScreen = isExpandedScreen, onClearSearch = { clearSearch() }, onChangeMode = { changeMode(it) }, onSearchIcons = { searchIcons(it) }, - searchedIconInfoModel = searchedIconInfoModel, onNavigate = onNavigate, - searchTerm = searchTerm, - searchMode = searchMode, - isIconPicker = isIconPicker, onSendResult = onSendResult, focusRequester = focusRequester, scrollBehavior = scrollBehavior, - appIcon = context.appIcon().asImageBitmap(), ) }, bottomBar = { @@ -114,7 +116,7 @@ fun Home( }, modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), ) { contentPadding -> - iconInfoModel?.let { + iconInfoModel.let { val padding = contentPadding // Ignore padding value IconPreviewGrid( iconInfo = it.iconInfo, From 06e41c57f4c16f03773b5c7f65b0c2a97e5b249c Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 29 Jul 2024 15:00:51 +0800 Subject: [PATCH 233/527] Implement basic user tips As of now, only the "icon request" tip will be added. Further tips can be easily expanded upon later. --- .../lawnicons/di/UserTipsRepositoryModule.kt | 23 +++++++++ .../repository/UserTipsRepository.kt | 27 ++++++++++ .../ui/components/home/HomeBottomBar.kt | 51 +++++++++++++++++-- .../ui/components/home/IconRequestFAB.kt | 6 +++ .../lawnicons/ui/destination/Home.kt | 5 ++ .../lawnicons/viewmodel/LawniconsViewModel.kt | 15 +++++- 6 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt new file mode 100644 index 00000000000..4c81717b0d1 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt @@ -0,0 +1,23 @@ +package app.lawnchair.lawnicons.di + +import android.app.Application +import android.content.Context +import app.lawnchair.lawnicons.repository.UserTipsRepository +import app.lawnchair.lawnicons.repository.UserTipsRepositoryImpl +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + + +@Module +@InstallIn(SingletonComponent::class) +object UserTipsRepositoryModule { + + @Provides + @Singleton + fun provideIconRepository(application: Application): UserTipsRepository = UserTipsRepositoryImpl( + application.getSharedPreferences("app_prefs", Context.MODE_PRIVATE) + ) +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt new file mode 100644 index 00000000000..2667e883bb3 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt @@ -0,0 +1,27 @@ +package app.lawnchair.lawnicons.repository + +import android.content.SharedPreferences +import javax.inject.Inject + +// TODO: Add additional tips +interface UserTipsRepository { + fun hasClickedIconRequestButton(): Boolean + fun onIconRequestButtonClicked() + + fun clearTips() +} + +class UserTipsRepositoryImpl @Inject constructor(private val prefs: SharedPreferences) : UserTipsRepository { + + companion object { + const val ICON_REQUEST_BUTTON_CLICKED = "icon_request_button_clicked" + } + + override fun hasClickedIconRequestButton(): Boolean = prefs.get(ICON_REQUEST_BUTTON_CLICKED) + override fun onIconRequestButtonClicked() = prefs.set(ICON_REQUEST_BUTTON_CLICKED, true) + + override fun clearTips() = prefs.edit().clear().apply() +} + +fun SharedPreferences.get(key: String): Boolean = getBoolean(key, false) +fun SharedPreferences.set(key: String, value: Boolean) = edit().putBoolean(key, value).apply() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index bc218d9f586..83d2a435822 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text @@ -20,9 +21,12 @@ import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequestModel @@ -35,6 +39,8 @@ fun HomeBottomBar( snackbarHostState: SnackbarHostState, onNavigate: () -> Unit, onExpandSearch: () -> Unit, + isIconRequestClicked: Boolean, + onIconRequestClick: () -> Unit, modifier: Modifier = Modifier, ) { BottomAppBar( @@ -58,10 +64,14 @@ fun HomeBottomBar( ) } } - IconRequestIconButton( - iconRequestModel = iconRequestModel, - snackbarHostState = snackbarHostState, - ) + IconRequestTooltip(isIconRequestClicked) { + IconRequestIconButton( + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + onClick = onIconRequestClick, + ) + } + SimpleTooltipBox( label = stringResource(id = R.string.about), ) { @@ -114,3 +124,36 @@ private fun SimpleTooltipBox( content() } } + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun IconRequestTooltip( + isButtonClicked: Boolean, + content: @Composable (() -> Unit), +) { + val state = rememberTooltipState( + initialIsVisible = true, + isPersistent = true, + ) + val hideTooltip = remember { isButtonClicked } + + LaunchedEffect(hideTooltip) { + if (hideTooltip) { state.dismiss() } + } + + TooltipBox( + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + caretSize = DpSize(16.dp, 8.dp) + ) { + Text("Request missing icons here") + } + }, + state = state, + ) { + content() + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 9c76355cf4e..dd984afa23b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -86,11 +86,13 @@ fun IconRequestFAB( fun IconRequestIconButton( iconRequestModel: IconRequestModel?, snackbarHostState: SnackbarHostState, + onClick: () -> Unit, modifier: Modifier = Modifier, ) { RequestHandler( iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, + onClick = onClick, ) { interactionSource -> IconButton( onClick = {}, @@ -110,12 +112,14 @@ fun IconRequestIconButton( fun RequestHandler( iconRequestModel: IconRequestModel?, snackbarHostState: SnackbarHostState, + onClick: () -> Unit = {}, content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), ) { if (iconRequestModel != null) { RequestHandler( iconRequestList = iconRequestModel.list, snackbarHostState = snackbarHostState, + onClick = onClick, ) { content(it) } @@ -127,6 +131,7 @@ fun RequestHandler( fun RequestHandler( iconRequestList: List, snackbarHostState: SnackbarHostState, + onClick: () -> Unit, content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), ) { val context = LocalContext.current @@ -151,6 +156,7 @@ fun RequestHandler( interactionSource.interactions.collectLatest { interaction -> when (interaction) { is PressInteraction.Press -> { + onClick() isLongClick = false delay(viewConfiguration.longPressTimeoutMillis) isLongClick = true diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 41f07cd2fa9..b6025803b70 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -25,6 +25,7 @@ import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBar +import app.lawnchair.lawnicons.ui.components.home.HomeTopBarUiState import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar @@ -99,6 +100,10 @@ fun Home( snackbarHostState = snackbarHostState, onNavigate = onNavigate, onExpandSearch = { expandSearch.value = !expandSearch.value }, + isIconRequestClicked = isIconRequestButtonClicked, + onIconRequestClick = { + onIconRequestButtonClicked() + } ) } }, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index da3abce5f0d..153d44305d4 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -7,12 +7,16 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.repository.IconRepository +import app.lawnchair.lawnicons.repository.UserTipsRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject import kotlinx.coroutines.launch @HiltViewModel -class LawniconsViewModel @Inject constructor(private val iconRepository: IconRepository) : +class LawniconsViewModel @Inject constructor( + private val iconRepository: IconRepository, + private val userTipsRepository: UserTipsRepository, +) : ViewModel() { @JvmField val iconInfoModel = iconRepository.iconInfoModel @@ -23,6 +27,9 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep @JvmField val iconRequestModel = iconRepository.iconRequestList + @JvmField + val isIconRequestButtonClicked = userTipsRepository.hasClickedIconRequestButton() + private var _searchMode by mutableStateOf(SearchMode.LABEL) private var _searchTerm by mutableStateOf("") @@ -52,4 +59,10 @@ class LawniconsViewModel @Inject constructor(private val iconRepository: IconRep iconRepository.clearSearch() } } + + fun onIconRequestButtonClicked() { + if (!userTipsRepository.hasClickedIconRequestButton()) { + userTipsRepository.onIconRequestButtonClicked() + } + } } From 6707f41c83cb6a6186888556815fbf8e8e37dc0b Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:07:11 +0800 Subject: [PATCH 234/527] Add new core contributors --- .../GitHubContributorsRepository.kt | 10 ++++-- .../lawnicons/ui/destination/About.kt | 32 ++++++++++++++++++- app/src/main/res/values/strings.xml | 12 +++++-- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt index c82b4cb4afa..d04b0283dc0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt @@ -4,9 +4,13 @@ import app.lawnchair.lawnicons.api.GitHubContributorsAPI import javax.inject.Inject val coreContributorIds = listOf( - 8080853, - 29139614, - 56888459, + 29139614, // Remove Patryk from contributors list, as per https://t.me/lawnchairci/1557 + 56888459, // Remove renovate-bot from contributors list, since we don't count botss as contributors + 8080853, // suphon-t + 70206496, // SuperDragonXD + 60105060, // x9136 + 10363352, // Goooler + 49114212, // Grabstertv ) class GitHubContributorsRepository @Inject constructor( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index f72f317583b..203092dae67 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -54,11 +54,40 @@ private val externalLinks = listOf( private val coreContributors = listOf( Contributor( - name = "paphonb", + name = "Suphon T.", username = "paphonb", photoUrl = "https://avatars.githubusercontent.com/u/8080853", socialUrl = "https://x.com/paphonb", + descriptionRes = R.string.contribution_core, ), + Contributor( + name = "SuperDragonXD", + username = "SuperDragonXD", + photoUrl = "https://avatars.githubusercontent.com/u/70206496", + socialUrl = "https://github.com/SuperDragonXD", + descriptionRes = R.string.contribution_core, + ), + Contributor( + name = "Gleb", + username = "x9136", + photoUrl = "https://avatars.githubusercontent.com/u/60105060", + socialUrl = "https://github.com/x9136", + descriptionRes = R.string.contribution_icons, + ), + Contributor( + name = "Grabster", + username = "Grabstertv", + photoUrl = "https://avatars.githubusercontent.com/u/49114212", + socialUrl = "https://x.com/grabstertv", + descriptionRes = R.string.contribution_icons + ), + Contributor( + name = "Zongle Wang", + username = "Goooler", + photoUrl = "https://avatars.githubusercontent.com/u/10363352", + socialUrl = "https://androiddev.social/@Goooler", + descriptionRes = R.string.contribution_deps + ) ) private val specialThanks = listOf( @@ -158,6 +187,7 @@ fun About( photoUrl = it.photoUrl, profileUrl = it.socialUrl, divider = index != coreContributors.lastIndex, + description = it.descriptionRes?.let { stringResource(id = it) }, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 91f637a3be9..5633c4de3ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,6 +14,9 @@ Pick an icon + + Search + %s not found @@ -39,6 +42,11 @@ Share details + + Core app + Icons + Dependencies + Special thanks @@ -48,7 +56,7 @@ For naming the app - Acknowledgements + Open-source licenses @@ -73,7 +81,7 @@ Copy to clipboard Copied text + Copied icon request details to clipboard. To request them, submit the details into the form. Open form - Search From 4167aa693e85ef3e8bf5c90de4beee071eaf2dd1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:26:16 +0800 Subject: [PATCH 235/527] Apply spotless --- .../di/OssLibraryRepositoryModule.kt | 2 +- .../lawnicons/di/UserTipsRepositoryModule.kt | 3 +-- .../GitHubContributorsRepository.kt | 21 ++++++++++++------- .../lawnicons/repository/IconRepository.kt | 2 +- .../ui/components/home/HomeBottomBar.kt | 6 ++++-- .../ui/components/home/HomeTopBar.kt | 3 +-- .../ui/components/home/IconRequestFAB.kt | 5 ++++- .../lawnicons/ui/destination/About.kt | 6 +++--- .../lawnicons/ui/destination/Home.kt | 2 +- 9 files changed, 30 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt index 52942d9f83d..733a73102ad 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt @@ -15,6 +15,6 @@ object OssLibraryRepositoryModule { @Provides @Singleton - fun provideOssLibraryRepository(application: Application) : OssLibraryRepository = + fun provideOssLibraryRepository(application: Application): OssLibraryRepository = OssLibraryRepositoryImpl(application = application) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt index 4c81717b0d1..f747c66eb09 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt @@ -10,7 +10,6 @@ import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import javax.inject.Singleton - @Module @InstallIn(SingletonComponent::class) object UserTipsRepositoryModule { @@ -18,6 +17,6 @@ object UserTipsRepositoryModule { @Provides @Singleton fun provideIconRepository(application: Application): UserTipsRepository = UserTipsRepositoryImpl( - application.getSharedPreferences("app_prefs", Context.MODE_PRIVATE) + application.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt index d04b0283dc0..9b5f2bba583 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt @@ -4,13 +4,20 @@ import app.lawnchair.lawnicons.api.GitHubContributorsAPI import javax.inject.Inject val coreContributorIds = listOf( - 29139614, // Remove Patryk from contributors list, as per https://t.me/lawnchairci/1557 - 56888459, // Remove renovate-bot from contributors list, since we don't count botss as contributors - 8080853, // suphon-t - 70206496, // SuperDragonXD - 60105060, // x9136 - 10363352, // Goooler - 49114212, // Grabstertv + // Remove Patryk from contributors list, as per https://t.me/lawnchairci/1557 + 29139614, + // Remove renovate-bot from contributors list, since we don't count bots as contributors + 56888459, + // suphon-t + 8080853, + // SuperDragonXD + 70206496, + // x9136 + 60105060, + // Goooler + 10363352, + // Grabstertv + 49114212, ) class GitHubContributorsRepository @Inject constructor( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index c92d5158559..dee296b010b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -44,7 +44,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep override val iconRequestList = MutableStateFlow(value = null) - init{ + init { coroutineScope.launch { val iconList = application.getIconInfo().sortedBy { it.label.lowercase() } val groupedIcons = iconList.associateBy { it.label }.values diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index 83d2a435822..33272e9024d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -138,7 +138,9 @@ private fun IconRequestTooltip( val hideTooltip = remember { isButtonClicked } LaunchedEffect(hideTooltip) { - if (hideTooltip) { state.dismiss() } + if (hideTooltip) { + state.dismiss() + } } TooltipBox( @@ -147,7 +149,7 @@ private fun IconRequestTooltip( PlainTooltip( containerColor = MaterialTheme.colorScheme.primaryContainer, contentColor = MaterialTheme.colorScheme.onPrimaryContainer, - caretSize = DpSize(16.dp, 8.dp) + caretSize = DpSize(16.dp, 8.dp), ) { Text("Request missing icons here") } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt index 55f98e36d1b..9a5da94b14f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt @@ -14,7 +14,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -30,7 +29,7 @@ import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar import app.lawnchair.lawnicons.ui.components.home.search.SearchContents data class HomeTopBarUiState( - val isSearchExpanded: Boolean , + val isSearchExpanded: Boolean, val isExpandedScreen: Boolean, val searchTerm: String, val searchMode: SearchMode, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index dd984afa23b..caeb92c2ff6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -34,6 +34,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -137,6 +138,8 @@ fun RequestHandler( val context = LocalContext.current val viewConfiguration = LocalViewConfiguration.current + val onClickEffect = rememberUpdatedState(onClick) + val requestList = formatIconRequestList(iconRequestList) val encodedRequestList = buildForm(requestList.replace("\n", "%20")) @@ -156,7 +159,7 @@ fun RequestHandler( interactionSource.interactions.collectLatest { interaction -> when (interaction) { is PressInteraction.Press -> { - onClick() + onClickEffect.value() isLongClick = false delay(viewConfiguration.longPressTimeoutMillis) isLongClick = true diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 203092dae67..f1beb644910 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -79,15 +79,15 @@ private val coreContributors = listOf( username = "Grabstertv", photoUrl = "https://avatars.githubusercontent.com/u/49114212", socialUrl = "https://x.com/grabstertv", - descriptionRes = R.string.contribution_icons + descriptionRes = R.string.contribution_icons, ), Contributor( name = "Zongle Wang", username = "Goooler", photoUrl = "https://avatars.githubusercontent.com/u/10363352", socialUrl = "https://androiddev.social/@Goooler", - descriptionRes = R.string.contribution_deps - ) + descriptionRes = R.string.contribution_deps, + ), ) private val specialThanks = listOf( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index b6025803b70..2d3324bc45c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -103,7 +103,7 @@ fun Home( isIconRequestClicked = isIconRequestButtonClicked, onIconRequestClick = { onIconRequestButtonClicked() - } + }, ) } }, From c7ebe6fc1388c4e3bb8b6beffbe0f348e0fea2f6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 08:48:15 +0800 Subject: [PATCH 236/527] Update plugin com.google.devtools.ksp to v2.0.0-1.0.24 (#2234) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 379455588c6..ea457890671 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false - id("com.google.devtools.ksp") version "2.0.0-1.0.23" apply false + id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false id("com.google.dagger.hilt.android") version "2.51.1" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From ae994fbc1c87c569ae33766e461c355e5ca4dc7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 08:51:39 +0800 Subject: [PATCH 237/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.7 (#2232) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ea457890671..521af850cec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.5", + "io.nlopez.compose.rules:ktlint:0.4.7", ), ).editorConfigOverride( mapOf( From dca2288614ccf8e87d9ab5799439a294abb20edb Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 30 Jul 2024 10:30:33 +0300 Subject: [PATCH 238/527] Clarifying the icon update template (#2233) * Clarifying the icon update template * Eliminating name duplication if it has not changed * Placeholder for the Additional Info * Minor fix * new label name * Minor fix * +example * Minor formatting changes --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 33 +++++++++++-------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index acf139c33ae..f10cf719359 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -1,31 +1,28 @@ -name: Request icon design change -description: Request changing the design of an existing icon in Lawnicons -title: "[Icon Rebrand] " -labels: ["icon rebrand"] +name: Update an existing icon +description: Request changing an icon if it is outdated or applied incorrectly. +labels: ["icon update"] body: - type: textarea id: outdated-icon-list attributes: - label: List of outdated icons + label: Icons description: | - Please follow the following format regarding the outdated icons: + **Please specify for each icon** + - the current application name in Lawnicons (search in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml)); + - [the link to the icon](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs) in Lawnicons; + - the new application name, if changed; + - the image of the new icon. - ``` - App Name - (image to new icon) + **Example** + Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) + ↓ + X, [the X logo](https://commons.wikimedia.org/wiki/File:X_logo_2023_original.svg) - App Name - (image to new icon) - ``` - - It is more preferable to link to the outdated icon in [the svgs/ folder](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs) - placeholder: + placeholder: Tell us what should be changed and how validations: required: true - type: textarea id: additional-info attributes: label: Additional information - description: Place additional context here. - validations: - required: true + placeholder: Specify what else is worth considering. For example, the application has a new activity From 5358225cb212d5085b6850aeb711ba3d4f65c0f1 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 30 Jul 2024 10:41:21 +0300 Subject: [PATCH 239/527] Additional changes for the icon update template (#2235) * One-line example for the icon update template * Updated the link in the repository description --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 4 +--- README.md | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index f10cf719359..9e817d426a5 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -14,9 +14,7 @@ body: - the image of the new icon. **Example** - Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) - ↓ - X, [the X logo](https://commons.wikimedia.org/wiki/File:X_logo_2023_original.svg) + Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) → X, [the X logo](https://commons.wikimedia.org/wiki/File:X_logo_2023_original.svg) placeholder: Tell us what should be changed and how validations: diff --git a/README.md b/README.md index fe529414eba..5942602f418 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Need help? [Join us on Discord](https://discord.gg/3x8qNWxgGZ). ## Requesting icons Please use **Lawnicons 2.10+**: `Open Lawnicons → Tap "Request icons" → Submit the response`. -You can also use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues). +You can also use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml). From bafd800e8052edfcb7a878e3c760d246065f219a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 23:31:32 +0800 Subject: [PATCH 240/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.8 (#2236) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 521af850cec..e72fb3ed8b5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.7", + "io.nlopez.compose.rules:ktlint:0.4.8", ), ).editorConfigOverride( mapOf( From 902c1c21046f38a43d8bbe06a14b28102aafad19 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sat, 3 Aug 2024 20:56:15 +1000 Subject: [PATCH 241/527] + 1 icon, + 1 update (#2231) * + 1 icon * Update ShizuTools icon Closes #2237 * Apply requested changes [1] --- app/assets/appfilter.xml | 3 ++- svgs/claude_by_anthropic.svg | 50 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 svgs/claude_by_anthropic.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 76065105524..e3e00f2874f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1933,6 +1933,7 @@ + @@ -8788,7 +8789,7 @@ - + diff --git a/svgs/claude_by_anthropic.svg b/svgs/claude_by_anthropic.svg new file mode 100644 index 00000000000..2637e7f11fb --- /dev/null +++ b/svgs/claude_by_anthropic.svg @@ -0,0 +1,50 @@ + + From 30279db99c079e6623ffdf8c474f1bdf53dd181e Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 3 Aug 2024 14:01:39 +0300 Subject: [PATCH 242/527] +30 links (#2241) --- app/assets/appfilter.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index e3e00f2874f..575ca14e6fb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -703,6 +703,7 @@ + @@ -792,6 +793,7 @@ + @@ -985,6 +987,7 @@ + @@ -1188,6 +1191,7 @@ + @@ -1254,6 +1258,7 @@ + @@ -1427,6 +1432,7 @@ + @@ -1704,6 +1710,7 @@ + @@ -1804,6 +1811,7 @@ + @@ -3118,6 +3126,7 @@ + @@ -4900,6 +4909,7 @@ + @@ -5914,6 +5924,7 @@ + @@ -6463,6 +6474,7 @@ + @@ -6993,6 +7005,7 @@ + @@ -7125,6 +7138,7 @@ + @@ -7182,6 +7196,7 @@ + @@ -7510,6 +7525,7 @@ + @@ -7762,6 +7778,7 @@ + @@ -7858,6 +7875,7 @@ + @@ -7957,6 +7975,7 @@ + @@ -8207,6 +8226,7 @@ + @@ -9401,6 +9421,7 @@ + @@ -9512,6 +9533,7 @@ + @@ -9818,6 +9840,7 @@ + @@ -9961,6 +9984,7 @@ + @@ -10664,6 +10688,7 @@ + @@ -10995,6 +11020,7 @@ + @@ -11737,6 +11763,7 @@ + @@ -11810,6 +11837,7 @@ + @@ -12277,6 +12305,7 @@ + @@ -12287,6 +12316,7 @@ + From 2370331c22f54e0702ee8df7c99631d555542beb Mon Sep 17 00:00:00 2001 From: Albert Koczy Date: Sat, 3 Aug 2024 13:34:28 +0200 Subject: [PATCH 243/527] +1 icon (#2238) * Add VeloBank icon * VeloBank: resize to 160x160, re-draw letters as stroke * Removed the fill from the E * Minor fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/velobank.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/velobank.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 575ca14e6fb..31ed5d1851b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -10949,6 +10949,7 @@ + diff --git a/svgs/velobank.svg b/svgs/velobank.svg new file mode 100644 index 00000000000..fad2dec7047 --- /dev/null +++ b/svgs/velobank.svg @@ -0,0 +1 @@ + From 82f70ec0450e4eccb9c89933d086c44cd120d361 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 4 Aug 2024 01:17:05 +0000 Subject: [PATCH 244/527] Update gradle/actions action to v4 (#2242) * Update gradle/actions action to v4 * Apply suggestions from code review --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Zongle Wang --- .github/workflows/build_debug_apk.yml | 7 ++----- .github/workflows/build_release_apk.yml | 3 +-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index 92f5fed7ed4..23f1856941b 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -20,10 +20,9 @@ jobs: with: distribution: 'zulu' java-version: 21 - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: Da25KUVSE5jbGds2zXmfXw== - gradle-home-cache-cleanup: true - name: Write sign info if: github.repository_owner == 'LawnchairLauncher' run: | @@ -52,9 +51,7 @@ jobs: with: distribution: 'zulu' java-version: 21 - - uses: gradle/actions/setup-gradle@v3 - with: - gradle-home-cache-cleanup: true + - uses: gradle/actions/setup-gradle@v4 - run: ./gradlew spotlessCheck send-notifications: diff --git a/.github/workflows/build_release_apk.yml b/.github/workflows/build_release_apk.yml index 8534bb6b84e..e20ea88a5e6 100644 --- a/.github/workflows/build_release_apk.yml +++ b/.github/workflows/build_release_apk.yml @@ -19,10 +19,9 @@ jobs: with: distribution: 'zulu' java-version: 21 - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 with: cache-encryption-key: Da25KUVSE5jbGds2zXmfXw== - gradle-home-cache-cleanup: true - name: Write sign info if: github.repository_owner == 'LawnchairLauncher' run: | From b2e43540fb8a17b686a9bdb8db14e4467e51dc41 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 6 Aug 2024 06:24:56 +0800 Subject: [PATCH 245/527] Add crowdin support Based on Lawnchair's `crowdin.yml` file --- .github/workflows/crowdin.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/crowdin.yml diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml new file mode 100644 index 00000000000..a6283b59565 --- /dev/null +++ b/.github/workflows/crowdin.yml @@ -0,0 +1,33 @@ +name: Crowdin Synchronization + +on: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + + synchronize-with-crowdin: + name: Synchronize with Crowdin + if: github.repository_owner == 'LawnchairLauncher' + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v4 + + - name: Sync Translations + uses: crowdin/github-action@v2 + with: + upload_translations: false + upload_sources: true + download_translations: true + localization_branch_name: i18n + create_pull_request: true + base_url: 'https://lawnchair.crowdin.com' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} From 009da5eef49b906a73e48bd6c873bc4be1699555 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 6 Aug 2024 06:28:24 +0800 Subject: [PATCH 246/527] Add crowdin config --- crowdin.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000000..d2acf316f21 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,5 @@ +project_id_env: CROWDIN_PROJECT_ID +api_token_env: CROWDIN_PERSONAL_TOKEN +files: + - source: /app/src/main/res/values/strings.xml + translation: /app/src/main/res/values-%android_code%/%original_file_name% From 733dcb0ab29601b966eeb16c52998986b9d1f7c0 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 6 Aug 2024 06:38:59 +0800 Subject: [PATCH 247/527] Add crowdin string upload workflow --- .github/workflows/crowdin_upload.yml | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/crowdin_upload.yml diff --git a/.github/workflows/crowdin_upload.yml b/.github/workflows/crowdin_upload.yml new file mode 100644 index 00000000000..ce663f4d22a --- /dev/null +++ b/.github/workflows/crowdin_upload.yml @@ -0,0 +1,32 @@ +name: Crowdin Upload + +on: + push: + branches: + - 'develop' + workflow_dispatch: + +jobs: + + synchronize-with-crowdin: + name: Upload strings to Crowdin + if: github.repository_owner == 'LawnchairLauncher' + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v4 + + - name: Upload Strings + uses: crowdin/github-action@v2 + with: + upload_translations: false + upload_sources: true + download_translations: false + localization_branch_name: i18n + create_pull_request: false + base_url: 'https://lawnchair.crowdin.com' + env: + GITHUB_TOKEN: ${{ secrets.LAWNCHAIR_BOT_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} From 523fba3ff7347b1f56fb1fd3bc27943d62859f03 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 6 Aug 2024 06:45:01 +0800 Subject: [PATCH 248/527] `crowdin.yml` - upload existing translated files --- .github/workflows/crowdin_upload.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/crowdin_upload.yml b/.github/workflows/crowdin_upload.yml index ce663f4d22a..050047e8e37 100644 --- a/.github/workflows/crowdin_upload.yml +++ b/.github/workflows/crowdin_upload.yml @@ -20,7 +20,7 @@ jobs: - name: Upload Strings uses: crowdin/github-action@v2 with: - upload_translations: false + upload_translations: true upload_sources: true download_translations: false localization_branch_name: i18n From 921aa8ade43b616f1a8650005673f02a61b77ed1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 6 Aug 2024 07:33:39 +0800 Subject: [PATCH 249/527] Temporarily remove translations --- .github/workflows/crowdin_upload.yml | 2 +- app/src/main/res/values-fil/strings.xml | 18 --------- app/src/main/res/values-fr/strings.xml | 53 ------------------------- app/src/main/res/values-hi/strings.xml | 48 ---------------------- app/src/main/res/values-id/strings.xml | 53 ------------------------- app/src/main/res/values-mr/strings.xml | 50 ----------------------- app/src/main/res/values-pl/strings.xml | 53 ------------------------- 7 files changed, 1 insertion(+), 276 deletions(-) delete mode 100644 app/src/main/res/values-fil/strings.xml delete mode 100644 app/src/main/res/values-fr/strings.xml delete mode 100644 app/src/main/res/values-hi/strings.xml delete mode 100644 app/src/main/res/values-id/strings.xml delete mode 100644 app/src/main/res/values-mr/strings.xml delete mode 100644 app/src/main/res/values-pl/strings.xml diff --git a/.github/workflows/crowdin_upload.yml b/.github/workflows/crowdin_upload.yml index 050047e8e37..ce663f4d22a 100644 --- a/.github/workflows/crowdin_upload.yml +++ b/.github/workflows/crowdin_upload.yml @@ -20,7 +20,7 @@ jobs: - name: Upload Strings uses: crowdin/github-action@v2 with: - upload_translations: true + upload_translations: false upload_sources: true download_translations: false localization_branch_name: i18n diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml deleted file mode 100644 index 5b9c30e0627..00000000000 --- a/app/src/main/res/values-fil/strings.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - Bersyon %s - Hanapin sa %d na icons - Walang nahanap na mga icon - Mga pagkilala - Patungkol - Mga nag-aambag - Mga pangunahing tagapag-ambag - "Tingnan ang lahat ng " - Tingnan sa GitHub - Espesyal na pagsasalamat - Sa pagbibigay-inspirasyon sa icon ng app - Sa pagbigay-pangalan sa app - Maaring iguhit - Pakete - Form sa paghiling ng icons - diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml deleted file mode 100644 index 6651d9021f5..00000000000 --- a/app/src/main/res/values-fr/strings.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Version %s - - - - - - Rechercher parmi %d icônes - - - Aucune icône trouvée - - - - Mentions légales - - À propos - - - - Formulaire de demande d\'icône - - - - - - Contributeurs - - Contributeurs principaux - - Voir tous les contributeurs - - - Voir sur GitHub - - - - Remerciements spéciaux - - Pour avoir inspiré l\'icône de l\'application. - - Pour avoir donné le nom à l\'application. - - - - - - Élément graphique - Application - diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml deleted file mode 100644 index 0d191b5d28c..00000000000 --- a/app/src/main/res/values-hi/strings.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - संस्करण %s - - - - - %d चिन्ह मे से खोजें - - - कोई चिन्ह नहीं मिला - - - - स्वीकृतियाँ - - ऐप के बारे में - - - - चिन्ह अनुरोध प्रपत्र - - - - योगदानकर्ता - - मुख्य योगदानकर्ता - - सभी योगदानकर्ता देखें - - - गिटहब पर देखें - - - - विशेष धन्यवाद - - ऐप के चिन्ह को प्रेरित करने के लिए। - - ऐप का नामकरण करने के लिए। - - - - ड्रॉएबल - - पैकेज - diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml deleted file mode 100644 index 2fc7a1fa03b..00000000000 --- a/app/src/main/res/values-id/strings.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Versi %s - - - - - - Telusuri melalui %d Ikon - - - Tidak menemukan ikon - - - - Ucapan terima kasih - - Tentang - - - - Permintaan Ikon Dari - - - - - - Kontributor - - Kontributor Inti - - Liat Semua Kontributor - - - Lihat di Github - - - - Terima kasih Khusus - - Untuk inspirasi ikon aplikasi. - - Untuk memberi nama aplikasi. - - - - - Drawable - - Paket nama - diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml deleted file mode 100644 index 8f9291585e7..00000000000 --- a/app/src/main/res/values-mr/strings.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - आवृत्ती %s - - - - - - %d चिन्हांमधून शोधा - - - कोणतेही चिन्ह आढळले नाही - - - - मंजूरी - - अॅप बद्दल - - - - चिन्ह विनंती फॉर्म - - - - योगदानकर्ता - - मुख्य योगदानकर्ता - - सर्व योगदानकर्ते पहा - - - गिटहब वर पहा - - - - विशेष धन्यवाद - - अॅप चिन्ह प्रेरणा देण्यासाठी. - - अॅपला नाव देण्यासाठी. - - - - - ड्रॉएबल - - पैकेज - diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml deleted file mode 100644 index 60e066dacef..00000000000 --- a/app/src/main/res/values-pl/strings.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Wersja %s - - - - - - Przeszukaj %d Ikon - - - Nie znaleziono ikon - - - - Podziękowanie - - O aplikacji - - - - Formularz Zgłoszeniowy Ikony - - - - - - Współautorzy - - Główni współautorzy - - Zobacz wszystkich Współtwórców - - - Zobacz na GitHub - - - - Specjalne podziękowania - - Za zainspirowanie ikony aplikacji. - - Za nazwanie aplikacji. - - - - - Element graficzny - - Pakiet - From ec5819bd22e80adbd59e4669e723c242d6bdf512 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:10:25 +0800 Subject: [PATCH 250/527] Update Hilt to v2.52 (#2244) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 619a15f5915..90ecc89007f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -150,7 +150,7 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") - val hiltVersion = "2.51.1" + val hiltVersion = "2.52" implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") diff --git a/build.gradle.kts b/build.gradle.kts index e72fb3ed8b5..f11f1d19bd1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false - id("com.google.dagger.hilt.android") version "2.51.1" apply false + id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false From 6253dc0e8247b041e057a55331d354af28c49827 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 12:56:59 +0000 Subject: [PATCH 251/527] Update Kotlin to v2.0.10 (#2247) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f11f1d19bd1..b05624ea1d3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,9 +3,9 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.5.1" apply false - id("org.jetbrains.kotlin.android") version "2.0.0" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" - id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false + id("org.jetbrains.kotlin.android") version "2.0.10" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.0.10" + id("org.jetbrains.kotlin.plugin.serialization") version "2.0.10" apply false id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.11.0" apply false From 9c5d15e3f3b4b59a5a5b8da93c8b852aef476df1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 08:03:30 +0800 Subject: [PATCH 252/527] Update plugin com.google.devtools.ksp to v2.0.10-1.0.24 (#2249) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b05624ea1d3..56cc2f9d5db 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.10" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.10" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.10" apply false - id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false + id("com.google.devtools.ksp") version "2.0.10-1.0.24" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From 08556622b5e7b4a0afa1a80527bf1cc9307ea1b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 08:03:39 +0800 Subject: [PATCH 253/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.9 (#2248) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 56cc2f9d5db..b047cee4d8a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.8", + "io.nlopez.compose.rules:ktlint:0.4.9", ), ).editorConfigOverride( mapOf( From 4b8876d499398db0816e60cfb650cc890bf819ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:44:12 +0800 Subject: [PATCH 254/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-beta07 (#2251) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 90ecc89007f..6dc4988273d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -144,7 +144,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta05") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta06") + implementation("androidx.navigation:navigation-compose:2.8.0-beta07") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") From 4044db47ef52de64f5c056d98f09d4cfa3578518 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:44:21 +0800 Subject: [PATCH 255/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.10 (#2250) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index b047cee4d8a..4f9f9c5ce6c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.9", + "io.nlopez.compose.rules:ktlint:0.4.10", ), ).editorConfigOverride( mapOf( From c6c37998aafaa9fbe8dc29e50a3660dd6ca528eb Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:59:39 +0800 Subject: [PATCH 256/527] Fix bottom bar icon request behavior --- .../ui/components/home/HomeBottomBar.kt | 51 ++------------ .../ui/components/home/IconRequestFAB.kt | 66 +++++++++++++++---- 2 files changed, 61 insertions(+), 56 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index 33272e9024d..7e4ad6a7ad6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -13,7 +13,6 @@ import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text @@ -21,12 +20,9 @@ import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequestModel @@ -64,13 +60,12 @@ fun HomeBottomBar( ) } } - IconRequestTooltip(isIconRequestClicked) { - IconRequestIconButton( - iconRequestModel = iconRequestModel, - snackbarHostState = snackbarHostState, - onClick = onIconRequestClick, - ) - } + IconRequestIconButton( + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + isIconRequestClicked = isIconRequestClicked, + onClick = onIconRequestClick, + ) SimpleTooltipBox( label = stringResource(id = R.string.about), @@ -125,37 +120,3 @@ private fun SimpleTooltipBox( } } -@OptIn(ExperimentalMaterial3Api::class) -@Composable -private fun IconRequestTooltip( - isButtonClicked: Boolean, - content: @Composable (() -> Unit), -) { - val state = rememberTooltipState( - initialIsVisible = true, - isPersistent = true, - ) - val hideTooltip = remember { isButtonClicked } - - LaunchedEffect(hideTooltip) { - if (hideTooltip) { - state.dismiss() - } - } - - TooltipBox( - positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), - tooltip = { - PlainTooltip( - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, - caretSize = DpSize(16.dp, 8.dp), - ) { - Text("Request missing icons here") - } - }, - state = state, - ) { - content() - } -} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index caeb92c2ff6..1e922a6e064 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -22,13 +22,18 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf @@ -42,6 +47,7 @@ import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequest @@ -85,8 +91,9 @@ fun IconRequestFAB( @Composable fun IconRequestIconButton( - iconRequestModel: IconRequestModel?, + isIconRequestClicked: Boolean, snackbarHostState: SnackbarHostState, + iconRequestModel: IconRequestModel?, onClick: () -> Unit, modifier: Modifier = Modifier, ) { @@ -95,18 +102,55 @@ fun IconRequestIconButton( snackbarHostState = snackbarHostState, onClick = onClick, ) { interactionSource -> - IconButton( - onClick = {}, - interactionSource = interactionSource, - modifier = modifier, - ) { - Icon( - painter = painterResource(id = R.drawable.icon_request_app), - contentDescription = stringResource(R.string.request_icons), - modifier = Modifier.requiredSize(24.dp), - ) + IconRequestTooltip(isIconRequestClicked) { + IconButton( + onClick = {}, + interactionSource = interactionSource, + modifier = modifier, + ) { + Icon( + painter = painterResource(id = R.drawable.icon_request_app), + contentDescription = stringResource(R.string.request_icons), + modifier = Modifier.requiredSize(24.dp), + ) + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun IconRequestTooltip( + isButtonClicked: Boolean, + content: @Composable (() -> Unit), +) { + val state = rememberTooltipState( + initialIsVisible = true, + isPersistent = true, + ) + val hideTooltip = remember { isButtonClicked } + + LaunchedEffect(hideTooltip) { + if (hideTooltip) { + state.dismiss() } } + + TooltipBox( + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + caretSize = DpSize(16.dp, 8.dp), + ) { + Text("Request missing icons here") + } + }, + state = state, + ) { + content() + } } @Composable From e8aec608c493118c13e69bb3114d9e189a8c2727 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 8 Aug 2024 21:15:22 +0800 Subject: [PATCH 257/527] Bump versionName and code --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6dc4988273d..cf40ff1629a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,7 +26,7 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.10.1" +val version = "2.11.0" val versionDisplayName = "$version ${if (isReleaseBuild) "" else devReleaseName}" android { @@ -37,7 +37,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = compileSdk - versionCode = 14 + versionCode = 15 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From 7b8183612692cd33a0d10191e3dffa1ce9114b86 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 8 Aug 2024 21:22:01 +0800 Subject: [PATCH 258/527] Fix style --- .../app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index 7e4ad6a7ad6..1e36ca1eee5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -119,4 +119,3 @@ private fun SimpleTooltipBox( content() } } - From 38ec700cc91ac53526e4b54f89f3dfcc52885435 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 9 Aug 2024 14:38:05 +0300 Subject: [PATCH 259/527] +21 links, Asphalt icon update (#2253) * +21 links, Asphalt icon update * +new links --- app/assets/appfilter.xml | 25 +++++++++++++++++++++++-- svgs/asphalt_9_legends.svg | 1 - svgs/asphalt_legends_unite.svg | 1 + 3 files changed, 24 insertions(+), 3 deletions(-) delete mode 100644 svgs/asphalt_9_legends.svg create mode 100644 svgs/asphalt_legends_unite.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 31ed5d1851b..a50d84f2db4 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -417,6 +417,7 @@ + @@ -569,6 +570,7 @@ + @@ -679,8 +681,8 @@ - - + + @@ -1303,6 +1305,7 @@ + @@ -1836,6 +1839,7 @@ + @@ -2566,6 +2570,7 @@ + @@ -3887,6 +3892,7 @@ + @@ -5473,6 +5479,7 @@ + @@ -5562,6 +5569,7 @@ + @@ -5968,6 +5976,7 @@ + @@ -6020,6 +6029,7 @@ + @@ -6452,6 +6462,7 @@ + @@ -7447,6 +7458,7 @@ + @@ -7461,6 +7473,7 @@ + @@ -7875,6 +7888,7 @@ + @@ -9418,6 +9432,7 @@ + @@ -9950,6 +9965,7 @@ + @@ -10503,6 +10519,7 @@ + @@ -10549,6 +10566,7 @@ + @@ -11679,6 +11697,7 @@ + @@ -11838,6 +11857,7 @@ + @@ -11991,6 +12011,7 @@ + diff --git a/svgs/asphalt_9_legends.svg b/svgs/asphalt_9_legends.svg deleted file mode 100644 index 1a8a510d3c2..00000000000 --- a/svgs/asphalt_9_legends.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/asphalt_legends_unite.svg b/svgs/asphalt_legends_unite.svg new file mode 100644 index 00000000000..f7890a3fecc --- /dev/null +++ b/svgs/asphalt_legends_unite.svg @@ -0,0 +1 @@ + \ No newline at end of file From 5d8a91021ade60f308c3289b7c28f73cb99dfa8f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 9 Aug 2024 21:38:32 +0800 Subject: [PATCH 260/527] Polish UI and UX --- .../GitHubContributorsRepository.kt | 2 + .../ui/components/home/HomeBottomBar.kt | 2 +- .../ui/components/home/HomeTopBar.kt | 88 +++++++------------ .../ui/components/home/IconPreviewGrid.kt | 58 ++++++++++-- .../ui/components/home/search/SearchBar.kt | 59 ++++++++----- .../lawnicons/ui/destination/About.kt | 7 ++ .../lawnicons/ui/destination/Home.kt | 57 +++++------- app/src/main/res/drawable/about_icon.xml | 9 ++ 8 files changed, 163 insertions(+), 119 deletions(-) create mode 100644 app/src/main/res/drawable/about_icon.xml diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt index 9b5f2bba583..4da1d6b3b7b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/GitHubContributorsRepository.kt @@ -12,6 +12,8 @@ val coreContributorIds = listOf( 8080853, // SuperDragonXD 70206496, + // Chefski + 100310118, // x9136 60105060, // Goooler diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index 1e36ca1eee5..623dc18e200 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -72,7 +72,7 @@ fun HomeBottomBar( ) { IconButton(onClick = onNavigate) { Icon( - painter = painterResource(id = R.drawable.contacts_foreground), + painter = painterResource(id = R.drawable.about_icon), contentDescription = stringResource(id = R.string.about), modifier = Modifier.requiredSize(24.dp), ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt index 9a5da94b14f..cd1c1021216 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt @@ -1,27 +1,17 @@ package app.lawnchair.lawnicons.ui.components.home -import androidx.compose.animation.AnimatedContent -import androidx.compose.foundation.Image +import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.material3.CenterAlignedTopAppBar -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.foundation.layout.offset import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.SearchMode @@ -35,11 +25,9 @@ data class HomeTopBarUiState( val searchMode: SearchMode, val searchedIconInfoModel: IconInfoModel?, val isIconPicker: Boolean, - val appIcon: ImageBitmap, ) @Composable -@OptIn(ExperimentalMaterial3Api::class) fun HomeTopBar( uiState: HomeTopBarUiState, onFocusChange: () -> Unit, @@ -49,49 +37,39 @@ fun HomeTopBar( onNavigate: () -> Unit, onSendResult: (IconInfo) -> Unit, focusRequester: FocusRequester, - scrollBehavior: TopAppBarScrollBehavior, modifier: Modifier = Modifier, ) { - val (isSearchExpanded, isExpandedScreen, searchTerm, searchMode, searchedIconInfoModel, isIconPicker, appIcon) = uiState + val (isSearchExpanded, isExpandedScreen, searchTerm, searchMode, searchedIconInfoModel, isIconPicker) = uiState - AnimatedContent(targetState = isSearchExpanded || isExpandedScreen, label = "TopAppBar to SearchBar", modifier = modifier) { targetState -> - if (targetState) { - searchedIconInfoModel?.let { - SearchBar( - searchTerm = searchTerm, - onClearSearch = onClearSearch, - onChangeMode = onChangeMode, - onSearch = onSearchIcons, - iconInfoModel = it, - onNavigate = onNavigate, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - searchMode = searchMode, - onSendResult = onSendResult, - onFocusChange = onFocusChange, - inputFieldModifier = Modifier.focusRequester(focusRequester), - ) - } + val condition = isSearchExpanded || isExpandedScreen + + val offset = animateDpAsState( + targetValue = if (condition) { + 0.dp } else { - CenterAlignedTopAppBar( - scrollBehavior = scrollBehavior, - title = { - Row( - verticalAlignment = Alignment.CenterVertically, - ) { - Image( - bitmap = appIcon, - contentDescription = stringResource(id = R.string.app_name), - modifier = Modifier.size(36.dp), - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - stringResource(id = R.string.app_name), - ) - } + (-100).dp + }, + label = "move search bar", + ) + searchedIconInfoModel?.let { + SearchBar( + modifier = modifier + .offset { + IntOffset(0, offset.value.roundToPx()) }, - ) - } + searchTerm = searchTerm, + onClearSearch = onClearSearch, + onChangeMode = onChangeMode, + onSearch = onSearchIcons, + iconInfoModel = it, + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + searchMode = searchMode, + onSendResult = onSendResult, + onFocusChange = onFocusChange, + inputFieldModifier = Modifier.focusRequester(focusRequester), + ) } } @@ -119,8 +97,10 @@ private fun SearchBar( LawniconsSearchBar( query = searchTerm, isQueryEmpty = searchTerm == "", - onClearAndBackClick = { + onClear = { onClearSearch() + }, + onBack = { onFocusChange() }, onQueryChange = { newValue -> diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 7c7ec33072c..3f755301961 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -1,38 +1,49 @@ package app.lawnchair.lawnicons.ui.components.home import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.expandHorizontally import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut -import androidx.compose.animation.shrinkHorizontally import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues +import app.lawnchair.lawnicons.util.appIcon import kotlinx.collections.immutable.ImmutableList import my.nanihadesuka.compose.LazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSelectionMode @@ -59,7 +70,9 @@ fun IconPreviewGrid( .widthIn(max = 640.dp) .fillMaxWidth() .statusBarsPadding() - .padding(top = 26.dp), + .then( + if (isExpandedScreen) Modifier.padding(top = 26.dp) else Modifier, + ), state = gridState, settings = ScrollbarSettings( alwaysShowScrollbar = true, @@ -70,8 +83,8 @@ fun IconPreviewGrid( indicatorContent = { _, isThumbSelected -> AnimatedVisibility( visible = isThumbSelected, - enter = fadeIn() + expandHorizontally(), - exit = fadeOut() + shrinkHorizontally(), + enter = fadeIn(), + exit = fadeOut(), ) { Box( modifier = Modifier @@ -96,11 +109,20 @@ fun IconPreviewGrid( columns = GridCells.Adaptive(minSize = 80.dp), contentPadding = contentPadding ?: WindowInsets.navigationBars.toPaddingValues( additionalStart = horizontalGridPadding, - additionalTop = 42.dp, + additionalTop = if (isExpandedScreen) 42.dp else 0.dp, additionalEnd = horizontalGridPadding, ), state = gridState, ) { + if (!isExpandedScreen) { + item( + span = { + GridItemSpan(maxLineSpan) + }, + ) { + TopAppBar() + } + } items( items = iconInfo, contentType = { "icon_preview" }, @@ -116,6 +138,30 @@ fun IconPreviewGrid( } } +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TopAppBar(modifier: Modifier = Modifier) { + val context = LocalContext.current + CenterAlignedTopAppBar( + modifier = modifier, + title = { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Image( + bitmap = context.appIcon().asImageBitmap(), + contentDescription = stringResource(id = R.string.app_name), + modifier = Modifier.size(36.dp), + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + stringResource(id = R.string.app_name), + ) + } + }, + ) +} + @OptIn(ExperimentalFoundationApi::class) @PreviewLawnicons @Composable diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 6dbb88bd124..435cd245b92 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -53,7 +53,8 @@ import app.lawnchair.lawnicons.ui.util.toPaddingValues fun LawniconsSearchBar( query: String, isQueryEmpty: Boolean, - onClearAndBackClick: () -> Unit, + onClear: () -> Unit, + onBack: () -> Unit, onQueryChange: (String) -> Unit, iconInfoModel: IconInfoModel, onNavigate: () -> Unit, @@ -66,7 +67,8 @@ fun LawniconsSearchBar( LawniconsSearchBar( query = query, isQueryEmpty = isQueryEmpty, - onClearAndBackClick = onClearAndBackClick, + onClear = onClear, + onBack = onBack, onQueryChange = onQueryChange, iconCount = iconInfoModel.iconCount, onNavigate = onNavigate, @@ -83,7 +85,8 @@ fun LawniconsSearchBar( * * @param query The current search query entered by the user. * @param isQueryEmpty A boolean value indicating whether the search query is empty. - * @param onClearAndBackClick A callback function that handles clearing the search query and navigating back. + * @param onClear A callback function that handles clearing the search query. + * @param onBack A callback function that handles navigating back. * @param onQueryChange A callback function that handles changes in the search query. * @param iconCount The number of icons available for selection. * @param onNavigate A callback function that handles navigation to different screens based on the search query. @@ -96,7 +99,8 @@ fun LawniconsSearchBar( fun LawniconsSearchBar( query: String, isQueryEmpty: Boolean, - onClearAndBackClick: () -> Unit, + onClear: () -> Unit, + onBack: () -> Unit, onQueryChange: (String) -> Unit, iconCount: Int, onNavigate: () -> Unit, @@ -112,7 +116,7 @@ fun LawniconsSearchBar( modifier = modifier .animateContentSize() .then( - if (!active || isExpandedScreen) { + if (isExpandedScreen) { Modifier .padding( WindowInsets.navigationBars.toPaddingValues( @@ -140,7 +144,7 @@ fun LawniconsSearchBar( onActiveChange = { active = it if (!active) { - onClearAndBackClick() + onBack() } }, placeholder = { @@ -159,7 +163,7 @@ fun LawniconsSearchBar( SearchIcon( active = active, onButtonClick = { - onClearAndBackClick() + onBack() active = !active }, ) @@ -168,8 +172,23 @@ fun LawniconsSearchBar( if (!isIconPicker) { SearchActionButton( isQueryEmpty = isQueryEmpty, + navigateContent = { + if (isExpandedScreen) { + IconButton( + onClick = it, + ) { + Icon( + imageVector = ImageVector.vectorResource(id = R.drawable.lawnicons_foreground), + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .size(24.dp), + ) + } + } + }, onNavigate = onNavigate, - onClearAndBackClick = onClearAndBackClick, + onClear = onClear, ) } }, @@ -267,25 +286,16 @@ internal fun SearchIcon( @Composable internal fun SearchActionButton( isQueryEmpty: Boolean, + navigateContent: @Composable (() -> Unit) -> Unit, onNavigate: () -> Unit, - onClearAndBackClick: () -> Unit, + onClear: () -> Unit, ) { Crossfade(isQueryEmpty, label = "") { if (it) { - IconButton( - onClick = onNavigate, - ) { - Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.lawnicons_foreground), - contentDescription = null, - tint = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier - .size(24.dp), - ) - } + navigateContent(onNavigate) } else { ClickableIcon( - onClick = onClearAndBackClick, + onClick = onClear, imageVector = Icons.Rounded.Close, ) } @@ -302,7 +312,8 @@ private fun SearchBarPreview() { LawniconsSearchBar( query = searchTerm, isQueryEmpty = false, - onClearAndBackClick = {}, + onClear = {}, + onBack = {}, onQueryChange = { newValue -> searchTerm = newValue }, @@ -337,8 +348,8 @@ private fun SearchIconPreview() { private fun SearchActionButtonPreview() { LawniconsTheme { Column { - SearchActionButton(isQueryEmpty = false, {}, {}) - SearchActionButton(isQueryEmpty = true, {}, {}) + SearchActionButton(isQueryEmpty = false, {}, {}, {}) + SearchActionButton(isQueryEmpty = true, {}, {}, {}) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index f1beb644910..e5ae792bf97 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -67,6 +67,13 @@ private val coreContributors = listOf( socialUrl = "https://github.com/SuperDragonXD", descriptionRes = R.string.contribution_core, ), + Contributor( + name = "Patryk Radziszewski", + username = "Chefski", + photoUrl = "https://avatars.githubusercontent.com/u/100310118", + socialUrl = "https://github.com/Chefski", + descriptionRes = R.string.contribution_icons, + ), Contributor( name = "Gleb", username = "x9136", diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 2d3324bc45c..111e8127e87 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -1,13 +1,12 @@ package app.lawnchair.lawnicons.ui.destination +import android.annotation.SuppressLint import androidx.compose.animation.Crossfade import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.lazy.grid.rememberLazyGridState -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -16,8 +15,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -34,11 +31,11 @@ import app.lawnchair.lawnicons.ui.components.home.search.SearchContents import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData -import app.lawnchair.lawnicons.util.appIcon import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel import kotlinx.collections.immutable.toImmutableList -@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) +@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") +@OptIn(ExperimentalFoundationApi::class) @Composable fun Home( onNavigate: () -> Unit, @@ -55,13 +52,12 @@ fun Home( val searchMode = searchMode val searchTerm = searchTerm - val expandSearch = remember { mutableStateOf(false) } + var expandSearch by remember { mutableStateOf(false) } val context = LocalContext.current val lazyGridState = rememberLazyGridState() val snackbarHostState = remember { SnackbarHostState() } - val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() val focusRequester = remember { FocusRequester() } Crossfade( @@ -74,22 +70,20 @@ fun Home( topBar = { HomeTopBar( uiState = HomeTopBarUiState( - isSearchExpanded = expandSearch.value, + isSearchExpanded = expandSearch, isExpandedScreen = isExpandedScreen, searchedIconInfoModel = searchedIconInfoModel, searchTerm = searchTerm, searchMode = searchMode, isIconPicker = isIconPicker, - appIcon = context.appIcon().asImageBitmap(), ), - onFocusChange = { expandSearch.value = !expandSearch.value }, - onClearSearch = { clearSearch() }, - onChangeMode = { changeMode(it) }, - onSearchIcons = { searchIcons(it) }, + onFocusChange = { expandSearch = !expandSearch }, + onClearSearch = ::clearSearch, + onChangeMode = ::changeMode, + onSearchIcons = ::searchIcons, onNavigate = onNavigate, onSendResult = onSendResult, focusRequester = focusRequester, - scrollBehavior = scrollBehavior, ) }, bottomBar = { @@ -99,11 +93,9 @@ fun Home( iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, onNavigate = onNavigate, - onExpandSearch = { expandSearch.value = !expandSearch.value }, + onExpandSearch = { expandSearch = true }, isIconRequestClicked = isIconRequestButtonClicked, - onIconRequestClick = { - onIconRequestButtonClicked() - }, + onIconRequestClick = ::onIconRequestButtonClicked, ) } }, @@ -119,18 +111,14 @@ fun Home( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, - modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - ) { contentPadding -> - iconInfoModel.let { - val padding = contentPadding // Ignore padding value - IconPreviewGrid( - iconInfo = it.iconInfo, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - gridState = lazyGridState, - ) - } + ) { + IconPreviewGrid( + iconInfo = iconInfoModel.iconInfo, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + gridState = lazyGridState, + ) } } else { PlaceholderSearchBar( @@ -138,8 +126,8 @@ fun Home( ) } } - LaunchedEffect(expandSearch.value) { - if (expandSearch.value) { + LaunchedEffect(expandSearch) { + if (expandSearch) { focusRequester.requestFocus() } } @@ -157,9 +145,10 @@ private fun HomePreview() { LawniconsSearchBar( query = searchTerm, isQueryEmpty = searchTerm == "", - onClearAndBackClick = { + onClear = { searchTerm = "" }, + onBack = {}, onQueryChange = { newValue -> searchTerm = newValue // No actual searching, this is just a preview diff --git a/app/src/main/res/drawable/about_icon.xml b/app/src/main/res/drawable/about_icon.xml new file mode 100644 index 00000000000..e176b71f4d3 --- /dev/null +++ b/app/src/main/res/drawable/about_icon.xml @@ -0,0 +1,9 @@ + + + From 7881a51540c4196dd0c8cd98c82c665c12351bd6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 22:18:07 +0800 Subject: [PATCH 261/527] New Crowdin translations by GitHub Action (#2255) Co-authored-by: Crowdin Bot --- app/src/main/res/values-af-rZA/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-ar-rSA/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-ca-rES/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-cs-rCZ/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-da-rDK/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-de-rDE/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-el-rGR/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-en-rUS/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-es-rES/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-fi-rFI/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-fil-rPH/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-fr-rFR/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-hi-rIN/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-hu-rHU/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-in-rID/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-it-rIT/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-iw-rIL/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-ja-rJP/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-ko-rKR/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-mr-rIN/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-nl-rNL/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-no-rNO/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-pl-rPL/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-pt-rBR/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-pt-rPT/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-ro-rRO/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-ru-rRU/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-sv-rSE/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-tr-rTR/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-uk-rUA/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-vi-rVN/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 66 +++++++++++++++++++++ app/src/main/res/values-zh-rTW/strings.xml | 66 +++++++++++++++++++++ 33 files changed, 2178 insertions(+) create mode 100644 app/src/main/res/values-af-rZA/strings.xml create mode 100644 app/src/main/res/values-ar-rSA/strings.xml create mode 100644 app/src/main/res/values-ca-rES/strings.xml create mode 100644 app/src/main/res/values-cs-rCZ/strings.xml create mode 100644 app/src/main/res/values-da-rDK/strings.xml create mode 100644 app/src/main/res/values-de-rDE/strings.xml create mode 100644 app/src/main/res/values-el-rGR/strings.xml create mode 100644 app/src/main/res/values-en-rUS/strings.xml create mode 100644 app/src/main/res/values-es-rES/strings.xml create mode 100644 app/src/main/res/values-fi-rFI/strings.xml create mode 100644 app/src/main/res/values-fil-rPH/strings.xml create mode 100644 app/src/main/res/values-fr-rFR/strings.xml create mode 100644 app/src/main/res/values-hi-rIN/strings.xml create mode 100644 app/src/main/res/values-hu-rHU/strings.xml create mode 100644 app/src/main/res/values-in-rID/strings.xml create mode 100644 app/src/main/res/values-it-rIT/strings.xml create mode 100644 app/src/main/res/values-iw-rIL/strings.xml create mode 100644 app/src/main/res/values-ja-rJP/strings.xml create mode 100644 app/src/main/res/values-ko-rKR/strings.xml create mode 100644 app/src/main/res/values-mr-rIN/strings.xml create mode 100644 app/src/main/res/values-nl-rNL/strings.xml create mode 100644 app/src/main/res/values-no-rNO/strings.xml create mode 100644 app/src/main/res/values-pl-rPL/strings.xml create mode 100644 app/src/main/res/values-pt-rBR/strings.xml create mode 100644 app/src/main/res/values-pt-rPT/strings.xml create mode 100644 app/src/main/res/values-ro-rRO/strings.xml create mode 100644 app/src/main/res/values-ru-rRU/strings.xml create mode 100644 app/src/main/res/values-sv-rSE/strings.xml create mode 100644 app/src/main/res/values-tr-rTR/strings.xml create mode 100644 app/src/main/res/values-uk-rUA/strings.xml create mode 100644 app/src/main/res/values-vi-rVN/strings.xml create mode 100644 app/src/main/res/values-zh-rCN/strings.xml create mode 100644 app/src/main/res/values-zh-rTW/strings.xml diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 00000000000..680cb8e8e1c --- /dev/null +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Soek + + %s not found + + Oor + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Icons + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml new file mode 100644 index 00000000000..e613c59d823 --- /dev/null +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + البحث + + %s not found + + حول التطبيق + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + الأيقونات + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 00000000000..fda7534543c --- /dev/null +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Cerca + + %s not found + + Quant a + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Icones + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 00000000000..0e32a08e8e1 --- /dev/null +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Vyhledávání + + %s not found + + O aplikaci + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ikony + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 00000000000..d8c6f75ccb5 --- /dev/null +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Søg + + %s not found + + Om + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ikoner + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 00000000000..f2139d339b6 --- /dev/null +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Durchsuche %d Symbole + Symbol auswählen + + Suchen + + %s nicht gefunden + + Über + + + + Symbol-Anfrageformular + + + Mitwirkende + + Hauptbeteiligte Mitwirkende + + Alle Mitwirkenden ansehen + + Auf GitHub ansehen + + Details teilen + + Kern-App + Symbole + Abhängigkeiten + + + Besonderer Dank + + Für die Inspiration des App-Symbols + + Für den App-Namen + + Open-Source-Lizenzen + + + Name + + Drawable + + Name der Komponente + + Zugewiesene Komponenten + + Wenn das Symbol aufgrund eines Neu-Brandings veraltet ist, eröffne ein Issue auf GitHub. + + Inhalte ein-/ausblenden + + Symbole anfragen + In Zwischenablage kopieren + Text kopiert + + Details der Symbolanfrage in die Zwischenablage kopiert. Um sie anzufragen, übertrage die Details in das Formular. + Formular öffnen + diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 00000000000..bdcfc182cc9 --- /dev/null +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Αναζήτηση + + %s not found + + Πληροφορίες + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Εικονίδια + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..7823eaee94c --- /dev/null +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Search + + %s not found + + About + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Icons + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml new file mode 100644 index 00000000000..419742f5126 --- /dev/null +++ b/app/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Buscar + + %s not found + + Acerca de + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Iconos + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml new file mode 100644 index 00000000000..92ae1aa4582 --- /dev/null +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Hae + + %s not found + + Tietoja + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Kuvakkeet + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml new file mode 100644 index 00000000000..34d46654429 --- /dev/null +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -0,0 +1,66 @@ + + + + + + Bersyon %s + + + + Hanapin sa %d na icons + Pumili ng icon + + Maghanap + + Walang nahanap na mga icon + + Patungkol + + + + Form sa paghiling ng icons + + + Mga nag-aambag + + Mga pangunahing tagapag-ambag + + Tingnan ang lahat ng tagapag-ambag + + Tingnan sa GitHub + + Ibahagi ang detalye + + Core app + Mga Icon + Dependencies + + + Espesyal na pagsasalamat + + Sa pagbibigay-inspirasyon sa icon ng app + + Sa pagbigay-pangalan sa app + + Mga pagkilala + + + Pangalan + + Maaring iguhit + + Pangalan ng component + + Pakete + + Kung ang icon ay luma na dahil sa rebranding, gumawa ng isyu sa GitHub. + + I-toggle ang bisibilidad ng mga content + + Maghiling ng icons + Kopyahin sa clipboard + Kinopya ang teksto + + Nakopya na ang mga detalye tungkol sa ihihiling na icons sa clipboard. Upang hilingin ang mga ito, isumite ang mga detalye sa form. + Buksan ang form + diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 00000000000..4418dc73661 --- /dev/null +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Rechercher parmi %d icônes + Pick an icon + + Recherche + + Aucune icône trouvée + + À propos + + + + Formulaire de demande d\'icône + + + Contributeurs + + Contributeurs principaux + + Voir tous les contributeurs + + Voir sur GitHub + + Share details + + Core app + Icônes + Dependencies + + + Remerciements spéciaux + + Pour avoir inspiré l\'icône de l\'application. + + Pour avoir donné le nom à l\'application. + + Mentions légales + + + Name + + Élément graphique + + Component name + + Application + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml new file mode 100644 index 00000000000..bdf5ded2ef3 --- /dev/null +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -0,0 +1,66 @@ + + + + + + संस्करण %s + + + + %d चिन्ह मे से खोजें + Pick an icon + + खोजें + + कोई चिन्ह नहीं मिला + + ऐप के बारे में + + + + चिन्ह अनुरोध प्रपत्र + + + योगदानकर्ता + + मुख्य योगदानकर्ता + + सभी योगदानकर्ता देखें + + गिटहब पर देखें + + Share details + + Core app + चिह्न + Dependencies + + + विशेष धन्यवाद + + ऐप के चिन्ह को प्रेरित करने के लिए। + + ऐप का नामकरण करने के लिए। + + स्वीकृतियाँ + + + Name + + ड्रॉएबल + + Component name + + पैकेज + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 00000000000..ea13a9c6a7a --- /dev/null +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Keresés + + %s not found + + Névjegy + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ikonok + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml new file mode 100644 index 00000000000..1a1b8444c89 --- /dev/null +++ b/app/src/main/res/values-in-rID/strings.xml @@ -0,0 +1,66 @@ + + + + + + Versi %s + + + + Telusuri melalui %d Ikon + Pick an icon + + Cari + + Tidak menemukan ikon + + Tentang + + + + Permintaan Ikon Dari + + + Kontributor + + Kontributor Inti + + Liat Semua Kontributor + + Lihat di Github + + Share details + + Core app + Ikon + Dependencies + + + Terima kasih Khusus + + Untuk inspirasi ikon aplikasi. + + Untuk memberi nama aplikasi. + + Ucapan terima kasih + + + Name + + Drawable + + Component name + + Paket nama + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 00000000000..715511adeea --- /dev/null +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Ricerca + + %s not found + + Informazioni + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Icone + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 00000000000..79c06deb07b --- /dev/null +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + חיפוש + + %s not found + + אודות + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + סמלים + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml new file mode 100644 index 00000000000..b1f22fed11c --- /dev/null +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + 検索 + + %s not found + + このアプリについて + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + アイコン + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 00000000000..bf143a3833c --- /dev/null +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,66 @@ + + + + + + 버전 %s + + + + %d개의 아이콘 중 검색 + 아이콘 선택 + + 검색 + + %s 아이콘을 찾을 수 없습니다. + + 더 보기 + + + + 아이콘 요청 폼 + + + 기여자 + + 주요 기여자 + + 전체 기여자 보기 + + GitHub에서 보기 + + 세부 정보 공유 + + 코어 앱 + 아이콘 + 의존성 라이브러리 + + + Special thanks + + For inspiring the app icon + + For naming the app + + 오픈 소스 라이선스 + + + 이름 + + Drawable + + 컴포넌트 이름 + + Mapped components + + 앱 리브랜딩으로 아이콘이 바뀌었다면 GitHub에 이슈를 등록해 주세요. + + Toggle visibility of contents + + 아이콘 요청 + 클립보드에 복사 + 텍스트를 복사했습니다. + + 아이콘 요청 정보를 클립보드에 복사했습니다. 아이콘을 요청하려면 세부 정보를 폼에 입력하세요. + 폼 열기 + diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml new file mode 100644 index 00000000000..ddde439db36 --- /dev/null +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -0,0 +1,66 @@ + + + + + + आवृत्ती %s + + + + %d चिन्हांमधून शोधा + Pick an icon + + Search + + कोणतेही चिन्ह आढळले नाही + + अॅप बद्दल + + + + चिन्ह विनंती फॉर्म + + + योगदानकर्ता + + मुख्य योगदानकर्ता + + सर्व योगदानकर्ते पहा + + गिटहब वर पहा + + Share details + + Core app + चिन्हे + Dependencies + + + विशेष धन्यवाद + + अॅप चिन्ह प्रेरणा देण्यासाठी. + + अॅपला नाव देण्यासाठी. + + मंजूरी + + + Name + + ड्रॉएबल + + Component name + + पैकेज + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 00000000000..ed7f5e8254d --- /dev/null +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Zoeken + + %s not found + + Over + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Pictogrammen + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 00000000000..bb49477c568 --- /dev/null +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Search + + %s not found + + Om + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ikoner + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 00000000000..8c515dfff7a --- /dev/null +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,66 @@ + + + + + + Wersja %s + + + + Przeszukaj %d Ikon + Pick an icon + + Szukaj + + Nie znaleziono ikon + + O aplikacji + + + + Formularz Zgłoszeniowy Ikony + + + Współautorzy + + Główni współautorzy + + Zobacz wszystkich Współtwórców + + Zobacz na GitHub + + Share details + + Core app + Ikony + Dependencies + + + Specjalne podziękowania + + Za zainspirowanie ikony aplikacji. + + Za nazwanie aplikacji. + + Podziękowanie + + + Name + + Element graficzny + + Component name + + Pakiet + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000000..09a4d4bf363 --- /dev/null +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Pesquisar + + %s not found + + Sobre + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ícones + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 00000000000..09a4d4bf363 --- /dev/null +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Pesquisar + + %s not found + + Sobre + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ícones + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 00000000000..6ab1eb1b78c --- /dev/null +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Caută + + %s not found + + Despre + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Pictograme + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 00000000000..624da4179d8 --- /dev/null +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Поиск + + %s not found + + О программе + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Иконки + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 00000000000..0be8e30f06b --- /dev/null +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Sök + + %s not found + + Om + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Ikoner + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 00000000000..b0178be1bf8 --- /dev/null +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Ara + + %s not found + + Hakkında + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Resimleyici + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml new file mode 100644 index 00000000000..de18cdc6fe3 --- /dev/null +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -0,0 +1,66 @@ + + + + + + Версія %s + + + + Шукати за %d значками + Вибрати іконку + + Пошук + + %s не знайдено + + Про додаток + + + + Форма запиту іконок + + + Автори + + Учасники проекту + + Переглянути всіх учасників + + Переглянути на GitHub + + Поділитися подробицями + + Головний додаток + Значки + Залежності + + + Особлива подяка + + Що надихнули іконку застосунка + + За назву застосунку + + Ліцензії ПЗ з відкритим вихідним кодом + + + Ім\'я + + Малюнок + + Назва компонента + + Зіставлені компоненти + + Якщо іконка застаріла через ребрендінг, створіть проблему на GitHub. + + Перемкнути видимість вмісту + + Запит іконок + Скопіювати до буфера обміну + Скопійований текст + + Скопійовано подробиці до буфера обміну. Щоб зробити запит, додайте деталі у форму. + Відкрити форму + diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml new file mode 100644 index 00000000000..d74e329d5a2 --- /dev/null +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + Tìm kiếm + + %s not found + + Giới thiệu + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + Biểu tượng + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000000..5351f587b8b --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + 搜索 + + %s not found + + 关于 + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + 图标 + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000000..46033a92969 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,66 @@ + + + + + + Version %s + + + + Search through %d icons + Pick an icon + + 搜尋 + + %s not found + + 關於 + + + + Icon request form + + + Contributors + + Core contributors + + See all contributors + + View on GitHub + + Share details + + Core app + 圖示 + Dependencies + + + Special thanks + + For inspiring the app icon + + For naming the app + + Open-source licenses + + + Name + + Drawable + + Component name + + Mapped components + + If the icon is outdated due to rebranding, create an issue on GitHub. + + Toggle visibility of contents + + Request icons + Copy to clipboard + Copied text + + Copied icon request details to clipboard. To request them, submit the details into the form. + Open form + From 7b7618e392058a17fb0ae293eb38392165be2781 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Aug 2024 08:13:46 +0800 Subject: [PATCH 262/527] Update AGP (#2252) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4f9f9c5ce6c..8de0294675f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.5.1" apply false + id("com.android.application") version "8.5.2" apply false id("org.jetbrains.kotlin.android") version "2.0.10" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.10" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.10" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 737e82427ca..2df983d5b96 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.5.1") + implementation("com.android.tools:sdk-common:31.5.2") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From 48bad435a4f22b2f32d176b5aa95639da5e4df58 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:20:44 +0800 Subject: [PATCH 263/527] Update dependency gradle to v8.10 (#2259) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 3990 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 68e8816d71c..2b189974c29 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From c35b537a5225a3612232cd28cc908391827cf532 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:42:44 +0300 Subject: [PATCH 264/527] +39 links and 2 updates (#2260) * +38 links * Updates, renaming * +1 link * Minor fix --- app/assets/appfilter.xml | 45 ++++++++++++++++++++++++++++++--- svgs/bill_payment_organizer.svg | 2 +- svgs/databackup.svg | 2 +- svgs/mi_video.svg | 2 +- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a50d84f2db4..6ba531a09bb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -176,6 +176,7 @@ + @@ -1020,6 +1021,7 @@ + @@ -1149,6 +1151,7 @@ + @@ -1325,6 +1328,8 @@ + + @@ -1926,6 +1931,7 @@ + @@ -2246,7 +2252,6 @@ - @@ -2440,6 +2445,7 @@ + @@ -3090,6 +3096,7 @@ + @@ -3692,6 +3699,7 @@ + @@ -3768,6 +3776,7 @@ + @@ -3914,6 +3923,8 @@ + + @@ -3959,6 +3970,9 @@ + + + @@ -4060,6 +4074,8 @@ + + @@ -4068,6 +4084,7 @@ + @@ -4133,6 +4150,7 @@ + @@ -4308,6 +4326,7 @@ + @@ -4398,6 +4417,7 @@ + @@ -5658,8 +5678,6 @@ - - @@ -6229,6 +6247,7 @@ + @@ -6353,6 +6372,7 @@ + @@ -6377,6 +6397,7 @@ + @@ -6502,6 +6523,7 @@ + @@ -7072,6 +7094,7 @@ + @@ -7754,6 +7777,7 @@ + @@ -7870,6 +7894,7 @@ + @@ -8403,6 +8428,7 @@ + @@ -9436,6 +9462,7 @@ + @@ -9559,6 +9586,7 @@ + @@ -9572,6 +9600,7 @@ + @@ -9701,8 +9730,10 @@ + + @@ -9776,6 +9807,7 @@ + @@ -10049,6 +10081,7 @@ + @@ -10170,6 +10203,7 @@ + @@ -10790,6 +10824,7 @@ + @@ -10817,6 +10852,7 @@ + @@ -11184,6 +11220,7 @@ + @@ -11989,6 +12026,7 @@ + @@ -12117,6 +12155,7 @@ + diff --git a/svgs/bill_payment_organizer.svg b/svgs/bill_payment_organizer.svg index 91956fae8ce..593d919fb73 100644 --- a/svgs/bill_payment_organizer.svg +++ b/svgs/bill_payment_organizer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/databackup.svg b/svgs/databackup.svg index 532a76cd4a9..f6a6fe1a193 100644 --- a/svgs/databackup.svg +++ b/svgs/databackup.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/mi_video.svg b/svgs/mi_video.svg index d0ba29e3ed5..28301a125e0 100644 --- a/svgs/mi_video.svg +++ b/svgs/mi_video.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From d5712a2f8930e3fce327e0a496980a6f83ecc865 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Fri, 16 Aug 2024 07:01:35 -0400 Subject: [PATCH 265/527] Fix edge-to-edge on three-button nav bar (#2261) --- app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index 9b9b1829f96..e48505dff3d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -6,6 +6,7 @@ import android.content.res.ColorStateList import android.graphics.drawable.Drawable import android.os.Bundle import android.util.Log +import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge @@ -32,6 +33,9 @@ class MainActivity : ComponentActivity() { installSplashScreen() super.onCreate(savedInstanceState) enableEdgeToEdge() + // Fix for three-button nav not properly going edge-to-edge. + // TODO: https://issuetracker.google.com/issues/298296168 + window.setFlags(FLAG_LAYOUT_NO_LIMITS, FLAG_LAYOUT_NO_LIMITS) val isIconPicker = intent?.action == Constants.ICON_PICKER_INTENT_ACTION From c7513c81d78130aec94190529057be5551bd86d2 Mon Sep 17 00:00:00 2001 From: Ishaan <81937191+5h3r10k@users.noreply.github.com> Date: Fri, 16 Aug 2024 19:31:20 -0400 Subject: [PATCH 266/527] +2 icons and -1 typo (#2239) * typo fix in "contributing.md" * added Marcus logo and appfilter * added NJ Transit logo and appfilter * added ParkMobile logo and appfilter * added Snackpass logo and appfilter * added YI Home logo and appfilter * updated icon sizes i downloaded and tested the debug apk, the icon sizes were too small, fixed that * adjusted stroke and sizes * updated icons and sizes redid marcus and nj_transit icon, modified snackpass, parkmobile, yi_home. Adjusted sizes of all * removed nj transit for now, will rework and re-add at a later time * updated sizes and strokes of icons * fixed snackpass and yi home fixed size of snackpass, fixed accidental fill on yi home * removed icons to troubleshoot --- CONTRIBUTING.md | 2 +- app/assets/appfilter.xml | 2 ++ svgs/marcus.svg | 8 ++++++++ svgs/parkmobile.svg | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 svgs/marcus.svg create mode 100644 svgs/parkmobile.svg diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3b24acddbfe..52513979e45 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,7 +125,7 @@ Correct ## Adding an icon to Lawnicons Here's how to add an icon to Lawnicons: -### Prerequesties +### Prerequisites * Your icon in the SVG format, adhering to the [above guidelines](#contributing-icons). The filename must use snake case (e.g. `files_by_google.svg`). * The package and activity name of the app. diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 6ba531a09bb..f103bce295c 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5449,6 +5449,7 @@ + @@ -7182,6 +7183,7 @@ + diff --git a/svgs/marcus.svg b/svgs/marcus.svg new file mode 100644 index 00000000000..c821d9711a3 --- /dev/null +++ b/svgs/marcus.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/svgs/parkmobile.svg b/svgs/parkmobile.svg new file mode 100644 index 00000000000..2264a6eb30f --- /dev/null +++ b/svgs/parkmobile.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From e61aead7297c38411bb598b5799e8c56eab2ccd7 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:56:26 +0300 Subject: [PATCH 267/527] Updating the self-review checklist (#2262) * Updating the self-review checklist * Minor fix --- .github/icon_checklist.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index b4909874fd6..64b8cb378d3 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -6,21 +6,21 @@ While waiting for a review from our team, you can do a self-review to ensure tha 1. Canvas: `192×192px`. 2. Non-square icons: the long side of the icons should be `160px`. 3. Square icons: `154×154px`. - +- [ ] Done ### Color, stroke width and rounding 1. Color: black `#000`. 2. No fill. Base stroke width: `12px`. `14px`, `10px`, `8px` — depending on the shape of the icons. `6px` — for fine details. 3. Rounded ends and joins. 90° corners are rounded by `6-32px`. - +- [ ] Done ### Naming 1. Names should match the official app name and contain no additional text. -2. If the first `3` characters of the app name contain letters not from the English alphabet, then add a localized (or transliterated) name via `~~`. -Example: `京东 ~~ JD`. +2. If the first `3` characters of the app name contain letters not from the English alphabet, then add a localized (or transliterated) name via `~~`. Example: `京东 ~~ JD`. 3. The names of the drawables should repeat the names of the apps if nothing prevents it. - +- [ ] Done ### Quality 1. Ensure that icons are easily recognizable. 2. Align icons to [the visual center](https://crazybitsstudios.com/another-way-of-aligning-elements-when-creating-icons) as much as possible within the guidelines. The visual center is where your icon looks and feels centered. 3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. 4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. 5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. +- [ ] Done From c6771a8eff6f04ce4bf19d4d2f7b095ccf0c3496 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:15:16 +0800 Subject: [PATCH 268/527] Fix crash when search results are 0 Fix #2258 --- .../lawnicons/ui/components/home/search/SearchContents.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 369dff1632e..702e28652c0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -173,7 +173,12 @@ private fun IconInfoListItem(iconInfo: ImmutableList) { .padding(PaddingValues(16.dp)), verticalArrangement = Arrangement.spacedBy(4.dp), ) { - val it = iconInfo[0] + val it = try { + iconInfo[0] + } catch (_: Exception) { + return@IconInfoListItem + } + val isIconInfoAppfilterShown = remember { mutableStateOf(false) } ListItem( From ab5b665a17c64992bb64b8bd7e148a1154cbb2ea Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:25:57 +0800 Subject: [PATCH 269/527] Improve edge-to-edge handling --- .../app/lawnchair/lawnicons/MainActivity.kt | 41 ++++--- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 101 ++++++++---------- .../ui/components/SetupEdgeToEdge.kt | 31 ++++++ 3 files changed, 105 insertions(+), 68 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/SetupEdgeToEdge.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt index e48505dff3d..a1b47407bd0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/MainActivity.kt @@ -6,14 +6,16 @@ import android.content.res.ColorStateList import android.graphics.drawable.Drawable import android.os.Bundle import android.util.Log -import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi +import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass +import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.DrawableCompat @@ -21,6 +23,8 @@ import androidx.core.graphics.drawable.toBitmap import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.Lawnicons +import app.lawnchair.lawnicons.ui.components.SetupEdgeToEdge +import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.Constants import dagger.hilt.android.AndroidEntryPoint @@ -33,27 +37,37 @@ class MainActivity : ComponentActivity() { installSplashScreen() super.onCreate(savedInstanceState) enableEdgeToEdge() - // Fix for three-button nav not properly going edge-to-edge. - // TODO: https://issuetracker.google.com/issues/298296168 - window.setFlags(FLAG_LAYOUT_NO_LIMITS, FLAG_LAYOUT_NO_LIMITS) val isIconPicker = intent?.action == Constants.ICON_PICKER_INTENT_ACTION setContent { val context = LocalContext.current val windowSizeClass = calculateWindowSizeClass(this) - Lawnicons( - windowSizeClass = windowSizeClass, - onSendResult = { iconInfo -> - setResult(context, iconInfo) - finish() - }, - isIconPicker = isIconPicker, - ) + LawniconsTheme { + val isExpandedScreen = + windowSizeClass.widthSizeClass == WindowWidthSizeClass.Expanded + + val navBarColor = if (isExpandedScreen) { + MaterialTheme.colorScheme.background.copy(alpha = 0.95f) + } else { + MaterialTheme.colorScheme.surfaceContainer + } + + SetupEdgeToEdge(navBarColor.toArgb()) + Lawnicons( + isExpandedScreen = isExpandedScreen, + onSendResult = { iconInfo -> + setIntentResult(context, iconInfo) + finish() + }, + isIconPicker = isIconPicker, + ) + } } } - private fun setResult( + @Suppress("DEPRECATION") + private fun setIntentResult( context: Context, iconInfo: IconInfo, ) { @@ -89,7 +103,6 @@ class MainActivity : ComponentActivity() { } intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconInfo.id) setResult(RESULT_OK, intent) - finish() } else { setResult(RESULT_CANCELED, intent) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 052f6000522..5fa7cc626f1 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -4,8 +4,6 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection @@ -20,7 +18,6 @@ import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements import app.lawnchair.lawnicons.ui.destination.Contributors import app.lawnchair.lawnicons.ui.destination.Home -import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.About import app.lawnchair.lawnicons.ui.util.Acknowledgement import app.lawnchair.lawnicons.ui.util.Acknowledgements @@ -33,7 +30,7 @@ import soup.compose.material.motion.animation.rememberSlideDistance @Composable @ExperimentalFoundationApi fun Lawnicons( - windowSizeClass: WindowSizeClass, + isExpandedScreen: Boolean, onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, isIconPicker: Boolean = false, @@ -41,57 +38,53 @@ fun Lawnicons( val navController = rememberNavController() val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl val slideDistance = rememberSlideDistance() - val isExpandedScreen = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Expanded - - LawniconsTheme { - Surface( - modifier = modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background, + Surface( + modifier = modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background, + ) { + NavHost( + navController = navController, + startDestination = Home, + enterTransition = { materialSharedAxisXIn(!isRtl, slideDistance) }, + exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, + popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, + popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, ) { - NavHost( - navController = navController, - startDestination = Home, - enterTransition = { materialSharedAxisXIn(!isRtl, slideDistance) }, - exitTransition = { materialSharedAxisXOut(!isRtl, slideDistance) }, - popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, - popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, - ) { - composable { - Home( - onNavigate = { navController.navigate(About) }, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) - } - composable { - Acknowledgements( - onBack = navController::popBackStack, - onNavigate = { - navController.navigate(Acknowledgement(it)) - }, - isExpandedScreen = isExpandedScreen, - ) - } - composable { backStackEntry -> - val acknowledgement: Acknowledgement = backStackEntry.toRoute() - Acknowledgement( - name = acknowledgement.id, - onBack = navController::popBackStack, - isExpandedScreen = isExpandedScreen, - ) - } - composable { - About( - onBack = navController::popBackStack, - onNavigateToContributors = { navController.navigate(Contributors) }, - onNavigateToAcknowledgements = { navController.navigate(Acknowledgements) }, - isExpandedScreen = isExpandedScreen, - ) - } - composable { - Contributors(onBack = navController::popBackStack, isExpandedScreen = isExpandedScreen) - } + composable { + Home( + onNavigate = { navController.navigate(About) }, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + } + composable { + Acknowledgements( + onBack = navController::popBackStack, + onNavigate = { + navController.navigate(Acknowledgement(it)) + }, + isExpandedScreen = isExpandedScreen, + ) + } + composable { backStackEntry -> + val acknowledgement: Acknowledgement = backStackEntry.toRoute() + Acknowledgement( + name = acknowledgement.id, + onBack = navController::popBackStack, + isExpandedScreen = isExpandedScreen, + ) + } + composable { + About( + onBack = navController::popBackStack, + onNavigateToContributors = { navController.navigate(Contributors) }, + onNavigateToAcknowledgements = { navController.navigate(Acknowledgements) }, + isExpandedScreen = isExpandedScreen, + ) + } + composable { + Contributors(onBack = navController::popBackStack, isExpandedScreen = isExpandedScreen) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/SetupEdgeToEdge.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/SetupEdgeToEdge.kt new file mode 100644 index 00000000000..f4a7b79854d --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/SetupEdgeToEdge.kt @@ -0,0 +1,31 @@ +package app.lawnchair.lawnicons.ui.components + +import androidx.activity.ComponentActivity +import androidx.activity.SystemBarStyle +import androidx.activity.enableEdgeToEdge +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.graphics.toArgb + +@Composable +fun ComponentActivity.SetupEdgeToEdge( + scrimColor: Int, +) { + val contentColor = MaterialTheme.colorScheme.onBackground.toArgb() + val isDarkTheme = MaterialTheme.colorScheme.surface.luminance() < 0.5f + + LaunchedEffect(Unit) { + enableEdgeToEdge( + navigationBarStyle = if (isDarkTheme) { + SystemBarStyle.dark(scrimColor) + } else { + SystemBarStyle.light( + scrimColor, + contentColor, + ) + }, + ) + } +} From 83ec23e9c2fce73a582e05f35173d658fac1c186 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:26:26 +0800 Subject: [PATCH 270/527] Fix crash when search is expanded and app is in background --- .../app/lawnchair/lawnicons/repository/IconRepository.kt | 2 +- .../kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt | 4 ---- .../app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt | 2 ++ 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index dee296b010b..1c18cdda2e8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -95,7 +95,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep }.toPersistentList() _searchedIconInfoModel.value = IconInfoModel( - iconCount = _iconInfoModel.value.iconCount, + iconCount = _searchedIconInfoModel.value.iconCount, iconInfo = filteredIcons, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 111e8127e87..3e98e37a917 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -49,10 +49,6 @@ fun Home( val iconInfoModel by iconInfoModel.collectAsStateWithLifecycle() val searchedIconInfoModel by searchedIconInfoModel.collectAsStateWithLifecycle() val iconRequestModel by iconRequestModel.collectAsStateWithLifecycle() - val searchMode = searchMode - val searchTerm = searchTerm - - var expandSearch by remember { mutableStateOf(false) } val context = LocalContext.current val lazyGridState = rememberLazyGridState() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 153d44305d4..69fbd2e5f57 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -30,6 +30,8 @@ class LawniconsViewModel @Inject constructor( @JvmField val isIconRequestButtonClicked = userTipsRepository.hasClickedIconRequestButton() + var expandSearch by mutableStateOf(false) + private var _searchMode by mutableStateOf(SearchMode.LABEL) private var _searchTerm by mutableStateOf("") From 2a2fbf337617a4b78defdc194083430be991575a Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:03:54 +0300 Subject: [PATCH 271/527] +17 links and 5 updates (#2269) * 2 updates * Spotify update * +17 links --- app/assets/appfilter.xml | 17 +++++++++++++++++ svgs/github.svg | 2 +- svgs/spotiflyer.svg | 2 +- svgs/spotify.svg | 2 +- svgs/spotify_artists.svg | 2 +- svgs/spotify_podcasters.svg | 2 +- 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index f103bce295c..8be042b3d7f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1114,6 +1114,7 @@ + @@ -2120,6 +2121,7 @@ + @@ -3691,6 +3693,7 @@ + @@ -4434,6 +4437,7 @@ + @@ -4726,6 +4730,7 @@ + @@ -5368,6 +5373,7 @@ + @@ -5995,6 +6001,7 @@ + @@ -6398,6 +6405,7 @@ + @@ -7596,6 +7604,7 @@ + @@ -9464,6 +9473,8 @@ + + @@ -9563,6 +9574,7 @@ + @@ -9966,6 +9978,7 @@ + @@ -10808,6 +10821,7 @@ + @@ -11740,6 +11754,7 @@ + @@ -11931,6 +11946,7 @@ + @@ -12282,6 +12298,7 @@ + diff --git a/svgs/github.svg b/svgs/github.svg index 4e7b4223282..6cbd5ff925a 100644 --- a/svgs/github.svg +++ b/svgs/github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/spotiflyer.svg b/svgs/spotiflyer.svg index d1d5867cc61..da9569a7223 100644 --- a/svgs/spotiflyer.svg +++ b/svgs/spotiflyer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/spotify.svg b/svgs/spotify.svg index c7181f838fc..28c5a6c41e5 100644 --- a/svgs/spotify.svg +++ b/svgs/spotify.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/spotify_artists.svg b/svgs/spotify_artists.svg index 1af294315e9..6b6f4650261 100644 --- a/svgs/spotify_artists.svg +++ b/svgs/spotify_artists.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/spotify_podcasters.svg b/svgs/spotify_podcasters.svg index 82566e29d12..4f99f8a5ee3 100644 --- a/svgs/spotify_podcasters.svg +++ b/svgs/spotify_podcasters.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 126f09ef6695c8b67ea50b6a5343f1334bf5d709 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:07:01 +0800 Subject: [PATCH 272/527] Update dependency androidx.compose:compose-bom to v2024.08.00 (#2272) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cf40ff1629a..848bf47d053 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -135,7 +135,7 @@ dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.1") - implementation(platform("androidx.compose:compose-bom:2024.06.00")) + implementation(platform("androidx.compose:compose-bom:2024.08.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From 6e6c39534e6ec1f29362df4b1879e64b76315419 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:07:09 +0800 Subject: [PATCH 273/527] Update dependency androidx.navigation:navigation-compose to v2.8.0-rc01 (#2271) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 848bf47d053..5eac5f76308 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -144,7 +144,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0-beta05") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-beta07") + implementation("androidx.navigation:navigation-compose:2.8.0-rc01") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") From c86521a65831bbd0f15f4b329bae77822685db2f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:07:17 +0800 Subject: [PATCH 274/527] Update dependency androidx.compose.material3:material3 to v1.3.0-rc01 (#2270) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5eac5f76308..cf9f33d9ef0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,7 +142,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") - implementation("androidx.compose.material3:material3:1.3.0-beta05") + implementation("androidx.compose.material3:material3:1.3.0-rc01") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-rc01") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") From 43d2105a97b860917122930eb3eb3608a4443382 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:07:25 +0800 Subject: [PATCH 275/527] Update plugin com.gradle.develocity to v3.18 (#2268) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index f0ac4ed0e4a..8ac7d615286 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.17.6" + id("com.gradle.develocity") version "3.18" } develocity { From f4bf48e57771302e76b7dda91760c7618b520fb6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:56:15 +0300 Subject: [PATCH 276/527] +6 links (#2274) --- app/assets/appfilter.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8be042b3d7f..1675e806208 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -796,6 +796,7 @@ + @@ -1754,6 +1755,7 @@ + @@ -2084,6 +2086,7 @@ + @@ -2162,7 +2165,7 @@ - + @@ -5143,6 +5146,7 @@ + @@ -7214,6 +7218,7 @@ + @@ -11969,6 +11974,7 @@ + From 3d38b0ac0736ee4fc4ebe2ba4751c9e4874a589c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 22 Aug 2024 09:18:14 +0300 Subject: [PATCH 277/527] Minor fix (#2275) --- app/assets/appfilter.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1675e806208..0f59ec1b1aa 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2165,7 +2165,6 @@ - @@ -7352,6 +7351,7 @@ + From 5ccd2f935f5dba5732e9ccf56f1ff54a0c21f0fa Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:32:40 +0300 Subject: [PATCH 278/527] +11 links (#2277) --- app/assets/appfilter.xml | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 0f59ec1b1aa..3059e6e48d2 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1539,6 +1539,7 @@ + @@ -2565,6 +2566,7 @@ + @@ -3701,6 +3703,7 @@ + @@ -4390,6 +4393,7 @@ + @@ -4416,6 +4420,7 @@ + @@ -6131,6 +6136,7 @@ + @@ -6650,6 +6656,7 @@ + @@ -8327,6 +8334,7 @@ + @@ -11174,20 +11182,21 @@ - - - + + + - - - - + + + + + - + - - + + @@ -11851,6 +11860,7 @@ + @@ -12335,6 +12345,7 @@ + From eec3a99cb009b9fda5431d5ae1e4ed2fc2db9639 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 08:27:07 +0800 Subject: [PATCH 279/527] Update Kotlin and KSP (#2276) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8de0294675f..fa51ad45f0a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,10 +3,10 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.5.2" apply false - id("org.jetbrains.kotlin.android") version "2.0.10" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.0.10" - id("org.jetbrains.kotlin.plugin.serialization") version "2.0.10" apply false - id("com.google.devtools.ksp") version "2.0.10-1.0.24" apply false + id("org.jetbrains.kotlin.android") version "2.0.20" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" + id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false + id("com.google.devtools.ksp") version "2.0.20-1.0.24" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From c542e1253c71bb2fb0f542b0837eeb8adf13f207 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:32:34 +0800 Subject: [PATCH 280/527] Use singleton for handling prefs --- .../lawnicons/di/UserTipsRepositoryModule.kt | 22 ------ .../lawnicons/repository/PreferenceManager.kt | 72 +++++++++++++++++++ .../repository/UserTipsRepository.kt | 27 ------- .../ui/components/home/HomeBottomBar.kt | 4 -- .../ui/components/home/IconRequestFAB.kt | 46 ++++++------ .../lawnicons/ui/destination/Home.kt | 3 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 11 --- 7 files changed, 98 insertions(+), 87 deletions(-) delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt deleted file mode 100644 index f747c66eb09..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/di/UserTipsRepositoryModule.kt +++ /dev/null @@ -1,22 +0,0 @@ -package app.lawnchair.lawnicons.di - -import android.app.Application -import android.content.Context -import app.lawnchair.lawnicons.repository.UserTipsRepository -import app.lawnchair.lawnicons.repository.UserTipsRepositoryImpl -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -object UserTipsRepositoryModule { - - @Provides - @Singleton - fun provideIconRepository(application: Application): UserTipsRepository = UserTipsRepositoryImpl( - application.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), - ) -} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt new file mode 100644 index 00000000000..beb6e77c7ae --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -0,0 +1,72 @@ +package app.lawnchair.lawnicons.repository + +import android.content.Context +import android.content.SharedPreferences +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.produceState +import androidx.compose.ui.platform.LocalContext + +/** + * A class that abstracts the functionality of SharedPreferences + * @param prefs The SharedPreferences instance to use + */ +abstract class BasePreferenceManager( + private val prefs: SharedPreferences, +) { + private val editor = prefs.edit() + + /** + * A class that represents a boolean preference + * @param key The key of the preference + * @param defaultValue The default value of the preference + */ + inner class BoolPref( + val key: String, + private val defaultValue: Boolean, + ) { + fun get() = prefs.getBoolean(key, defaultValue) + fun set(value: Boolean) = editor.putBoolean(key, value).apply() + + @Composable + fun asState(): State { + return produceState(initialValue = get(), this) { + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> + if (changedKey == key) { + value = get() // Update the state value when the preference changes + } + } + prefs.registerOnSharedPreferenceChangeListener(listener) + } + } + } +} + +/** + * Provides a class to handle Lawnicons preferences + */ +class PreferenceManager private constructor( + prefs: SharedPreferences, +) : BasePreferenceManager(prefs) { + + val showRequestTooltip = BoolPref("icon_request_button_clicked", true) + + companion object { + @Volatile + private var instance: PreferenceManager? = null + + /** + * Returns a singleton instance of PreferenceManager + */ + fun getInstance(context: Context): PreferenceManager { + return instance ?: synchronized(this) { + instance ?: PreferenceManager( + context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), + ).also { instance = it } + } + } + } +} + +@Composable +fun preferenceManager(context: Context = LocalContext.current) = PreferenceManager.getInstance(context) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt deleted file mode 100644 index 2667e883bb3..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/UserTipsRepository.kt +++ /dev/null @@ -1,27 +0,0 @@ -package app.lawnchair.lawnicons.repository - -import android.content.SharedPreferences -import javax.inject.Inject - -// TODO: Add additional tips -interface UserTipsRepository { - fun hasClickedIconRequestButton(): Boolean - fun onIconRequestButtonClicked() - - fun clearTips() -} - -class UserTipsRepositoryImpl @Inject constructor(private val prefs: SharedPreferences) : UserTipsRepository { - - companion object { - const val ICON_REQUEST_BUTTON_CLICKED = "icon_request_button_clicked" - } - - override fun hasClickedIconRequestButton(): Boolean = prefs.get(ICON_REQUEST_BUTTON_CLICKED) - override fun onIconRequestButtonClicked() = prefs.set(ICON_REQUEST_BUTTON_CLICKED, true) - - override fun clearTips() = prefs.edit().clear().apply() -} - -fun SharedPreferences.get(key: String): Boolean = getBoolean(key, false) -fun SharedPreferences.set(key: String, value: Boolean) = edit().putBoolean(key, value).apply() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index 623dc18e200..28e7cb023ae 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -35,8 +35,6 @@ fun HomeBottomBar( snackbarHostState: SnackbarHostState, onNavigate: () -> Unit, onExpandSearch: () -> Unit, - isIconRequestClicked: Boolean, - onIconRequestClick: () -> Unit, modifier: Modifier = Modifier, ) { BottomAppBar( @@ -63,8 +61,6 @@ fun HomeBottomBar( IconRequestIconButton( iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, - isIconRequestClicked = isIconRequestClicked, - onClick = onIconRequestClick, ) SimpleTooltipBox( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 1e922a6e064..c7e13efe88b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -52,6 +52,7 @@ import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel +import app.lawnchair.lawnicons.repository.preferenceManager import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.isScrollingUp @@ -91,18 +92,18 @@ fun IconRequestFAB( @Composable fun IconRequestIconButton( - isIconRequestClicked: Boolean, snackbarHostState: SnackbarHostState, iconRequestModel: IconRequestModel?, - onClick: () -> Unit, modifier: Modifier = Modifier, ) { + val prefs = preferenceManager() + RequestHandler( iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, - onClick = onClick, + onClick = { prefs.showRequestTooltip.set(false) }, ) { interactionSource -> - IconRequestTooltip(isIconRequestClicked) { + IconRequestTooltip(prefs.showRequestTooltip.asState().value) { IconButton( onClick = {}, interactionSource = interactionSource, @@ -121,34 +122,37 @@ fun IconRequestIconButton( @OptIn(ExperimentalMaterial3Api::class) @Composable private fun IconRequestTooltip( - isButtonClicked: Boolean, + showTooltip: Boolean, content: @Composable (() -> Unit), ) { val state = rememberTooltipState( initialIsVisible = true, isPersistent = true, ) - val hideTooltip = remember { isButtonClicked } - LaunchedEffect(hideTooltip) { - if (hideTooltip) { + LaunchedEffect(showTooltip) { + if (!showTooltip) { state.dismiss() } } - TooltipBox( - positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), - tooltip = { - PlainTooltip( - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, - caretSize = DpSize(16.dp, 8.dp), - ) { - Text("Request missing icons here") - } - }, - state = state, - ) { + if (showTooltip) { + TooltipBox( + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + caretSize = DpSize(16.dp, 8.dp), + ) { + Text("Request missing icons here") + } + }, + state = state, + ) { + content() + } + } else { content() } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 3e98e37a917..017ab6ff09a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -20,6 +20,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode +import app.lawnchair.lawnicons.repository.preferenceManager import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBarUiState @@ -90,8 +91,6 @@ fun Home( snackbarHostState = snackbarHostState, onNavigate = onNavigate, onExpandSearch = { expandSearch = true }, - isIconRequestClicked = isIconRequestButtonClicked, - onIconRequestClick = ::onIconRequestButtonClicked, ) } }, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 69fbd2e5f57..b6d23e9fefc 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -7,7 +7,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.repository.IconRepository -import app.lawnchair.lawnicons.repository.UserTipsRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject import kotlinx.coroutines.launch @@ -15,7 +14,6 @@ import kotlinx.coroutines.launch @HiltViewModel class LawniconsViewModel @Inject constructor( private val iconRepository: IconRepository, - private val userTipsRepository: UserTipsRepository, ) : ViewModel() { @JvmField @@ -27,9 +25,6 @@ class LawniconsViewModel @Inject constructor( @JvmField val iconRequestModel = iconRepository.iconRequestList - @JvmField - val isIconRequestButtonClicked = userTipsRepository.hasClickedIconRequestButton() - var expandSearch by mutableStateOf(false) private var _searchMode by mutableStateOf(SearchMode.LABEL) @@ -61,10 +56,4 @@ class LawniconsViewModel @Inject constructor( iconRepository.clearSearch() } } - - fun onIconRequestButtonClicked() { - if (!userTipsRepository.hasClickedIconRequestButton()) { - userTipsRepository.onIconRequestButtonClicked() - } - } } From 9353ecaa4248e692851e122c588054a927df2830 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:31:22 +0800 Subject: [PATCH 281/527] Use snackbar instead of tooltip for first launch --- .../lawnicons/repository/PreferenceManager.kt | 5 +- .../ui/components/home/IconRequestFAB.kt | 208 +++++++++--------- app/src/main/res/values/strings.xml | 1 + 3 files changed, 112 insertions(+), 102 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index beb6e77c7ae..9a9e7a2a448 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -28,6 +28,8 @@ abstract class BasePreferenceManager( fun get() = prefs.getBoolean(key, defaultValue) fun set(value: Boolean) = editor.putBoolean(key, value).apply() + fun onChange() = set(!get()) + @Composable fun asState(): State { return produceState(initialValue = get(), this) { @@ -48,8 +50,7 @@ abstract class BasePreferenceManager( class PreferenceManager private constructor( prefs: SharedPreferences, ) : BasePreferenceManager(prefs) { - - val showRequestTooltip = BoolPref("icon_request_button_clicked", true) + val showFirstLaunchSnackbar = BoolPref("show_first_launch_snackbar", true) companion object { @Volatile diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index c7e13efe88b..3ce7213b7e8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -22,32 +22,30 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.PlainTooltip +import androidx.compose.material3.SheetState import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Text import androidx.compose.material3.TextButton -import androidx.compose.material3.TooltipBox -import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.rememberModalBottomSheetState -import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalViewConfiguration +import androidx.compose.ui.platform.ViewConfiguration import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequest @@ -68,8 +66,9 @@ fun IconRequestFAB( snackbarHostState: SnackbarHostState, modifier: Modifier = Modifier, ) { + val list = iconRequestModel?.list ?: emptyList() RequestHandler( - iconRequestModel = iconRequestModel, + iconRequestList = list, snackbarHostState = snackbarHostState, ) { interactionSource -> ExtendedFloatingActionButton( @@ -96,81 +95,22 @@ fun IconRequestIconButton( iconRequestModel: IconRequestModel?, modifier: Modifier = Modifier, ) { - val prefs = preferenceManager() + val list = iconRequestModel?.list ?: emptyList() RequestHandler( - iconRequestModel = iconRequestModel, + iconRequestList = list, snackbarHostState = snackbarHostState, - onClick = { prefs.showRequestTooltip.set(false) }, ) { interactionSource -> - IconRequestTooltip(prefs.showRequestTooltip.asState().value) { - IconButton( - onClick = {}, - interactionSource = interactionSource, - modifier = modifier, - ) { - Icon( - painter = painterResource(id = R.drawable.icon_request_app), - contentDescription = stringResource(R.string.request_icons), - modifier = Modifier.requiredSize(24.dp), - ) - } - } - } -} - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -private fun IconRequestTooltip( - showTooltip: Boolean, - content: @Composable (() -> Unit), -) { - val state = rememberTooltipState( - initialIsVisible = true, - isPersistent = true, - ) - - LaunchedEffect(showTooltip) { - if (!showTooltip) { - state.dismiss() - } - } - - if (showTooltip) { - TooltipBox( - positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), - tooltip = { - PlainTooltip( - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, - caretSize = DpSize(16.dp, 8.dp), - ) { - Text("Request missing icons here") - } - }, - state = state, - ) { - content() - } - } else { - content() - } -} - -@Composable -fun RequestHandler( - iconRequestModel: IconRequestModel?, - snackbarHostState: SnackbarHostState, - onClick: () -> Unit = {}, - content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), -) { - if (iconRequestModel != null) { - RequestHandler( - iconRequestList = iconRequestModel.list, - snackbarHostState = snackbarHostState, - onClick = onClick, + IconButton( + onClick = {}, + interactionSource = interactionSource, + modifier = modifier, ) { - content(it) + Icon( + painter = painterResource(id = R.drawable.icon_request_app), + contentDescription = stringResource(R.string.request_icons), + modifier = Modifier.requiredSize(24.dp), + ) } } } @@ -180,39 +120,86 @@ fun RequestHandler( fun RequestHandler( iconRequestList: List, snackbarHostState: SnackbarHostState, - onClick: () -> Unit, content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), ) { + val prefs = preferenceManager() + val showFirstLaunchSnackbar by prefs.showFirstLaunchSnackbar.asState() val context = LocalContext.current - val viewConfiguration = LocalViewConfiguration.current - - val onClickEffect = rememberUpdatedState(onClick) val requestList = formatIconRequestList(iconRequestList) val encodedRequestList = buildForm(requestList.replace("\n", "%20")) + val directLinkEnabled = encodedRequestList.length < Constants.DIRECT_LINK_MAX_LENGTH - val sheetExpanded = remember { mutableStateOf(false) } + var sheetExpanded by remember { mutableStateOf(false) } val sheetState = rememberModalBottomSheetState( skipPartiallyExpanded = true, ) - val coroutineScope = rememberCoroutineScope() + val scope = rememberCoroutineScope() val interactionSource = remember { MutableInteractionSource() } - val directLinkEnabled = encodedRequestList.length < Constants.DIRECT_LINK_MAX_LENGTH + HandleTouchInteractions( + interactionSource = interactionSource, + viewConfiguration = LocalViewConfiguration.current, + context = context, + coroutineScope = scope, + onExpandSheet = { sheetExpanded = it }, + sheetState = sheetState, + iconRequestList = iconRequestList, + directLinkEnabled = directLinkEnabled, + encodedRequestList = encodedRequestList, + requestList = requestList, + snackbarHostState = snackbarHostState, + ) + + content(interactionSource) + + if (showFirstLaunchSnackbar && iconRequestList.isNotEmpty()) { + openSnackbarFirstLaunchContent( + context, + scope, + prefs.showFirstLaunchSnackbar::onChange, + snackbarHostState, + ) + } + AnimatedVisibility(visible = sheetExpanded) { + ModalBottomSheet( + onDismissRequest = { sheetExpanded = false }, + sheetState = sheetState, + ) { + IconRequestSheet(requestList, context) + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun HandleTouchInteractions( + interactionSource: MutableInteractionSource, + viewConfiguration: ViewConfiguration, + context: Context, + coroutineScope: CoroutineScope, + onExpandSheet: (Boolean) -> Unit, + sheetState: SheetState, + iconRequestList: List, + directLinkEnabled: Boolean, + requestList: String, + encodedRequestList: String, + snackbarHostState: SnackbarHostState, +) { + val lastestOnExpandSheet by rememberUpdatedState(newValue = onExpandSheet) LaunchedEffect(interactionSource) { var isLongClick = false interactionSource.interactions.collectLatest { interaction -> when (interaction) { is PressInteraction.Press -> { - onClickEffect.value() isLongClick = false delay(viewConfiguration.longPressTimeoutMillis) isLongClick = true coroutineScope.launch { - sheetExpanded.value = true + lastestOnExpandSheet(true) sheetState.show() } } @@ -224,7 +211,12 @@ fun RequestHandler( } else if (directLinkEnabled) { openLink(context, encodedRequestList) } else { - openSnackbarContent(context, requestList, coroutineScope, snackbarHostState) + openSnackbarWarningContent( + context, + requestList, + coroutineScope, + snackbarHostState, + ) } } } @@ -235,17 +227,6 @@ fun RequestHandler( } } } - - content(interactionSource) - - AnimatedVisibility(visible = sheetExpanded.value) { - ModalBottomSheet( - onDismissRequest = { sheetExpanded.value = false }, - sheetState = sheetState, - ) { - IconRequestSheet(requestList, context) - } - } } @Composable @@ -294,7 +275,35 @@ private fun copyTextToClipboard(context: Context, text: String) { clipboard.setPrimaryClip(clip) } -private fun openSnackbarContent( +private fun openSnackbarFirstLaunchContent( + context: Context, + coroutineScope: CoroutineScope, + onActionPerformed: () -> Unit, + snackbarHostState: SnackbarHostState, +) { + coroutineScope.launch { + val result = snackbarHostState + .showSnackbar( + message = context.getString(R.string.you_have_missing_icons), + actionLabel = context.getString(R.string.request_icons), + withDismissAction = true, + duration = SnackbarDuration.Indefinite, + ) + when (result) { + SnackbarResult.ActionPerformed -> { + onActionPerformed() + openLink(context, Constants.ICON_REQUEST_FORM) + } + + SnackbarResult.Dismissed -> { + onActionPerformed() + snackbarHostState.currentSnackbarData?.dismiss() + } + } + } +} + +private fun openSnackbarWarningContent( context: Context, list: String, coroutineScope: CoroutineScope, @@ -311,7 +320,6 @@ private fun openSnackbarContent( ) when (result) { SnackbarResult.ActionPerformed -> { - /* Handle snackbar action performed */ openLink(context, Constants.ICON_REQUEST_FORM) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5633c4de3ee..d02c191f394 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -84,4 +84,5 @@ Copied icon request details to clipboard. To request them, submit the details into the form. Open form + You have missing icons From b589f24054f06f9fd20d4f4f9a6762058404d016 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:36:48 +0800 Subject: [PATCH 282/527] Update placeholder UI --- .../home/search/PlaceholderSearchBar.kt | 7 ++---- .../lawnicons/ui/destination/Home.kt | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt index dd2bcfbaf77..e849693d127 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/PlaceholderSearchBar.kt @@ -22,7 +22,6 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @Composable fun PlaceholderSearchBar( - isExpandedScreen: Boolean, modifier: Modifier = Modifier, ) { Column( @@ -38,9 +37,7 @@ fun PlaceholderSearchBar( content = {}, contentAlignment = Alignment.TopCenter, modifier = Modifier - .then( - if (isExpandedScreen) Modifier.width(360.dp) else Modifier, - ) + .width(360.dp) .zIndex(1f) .statusBarsPadding() .padding(top = 8.dp) @@ -60,6 +57,6 @@ fun PlaceholderSearchBar( @Composable private fun PlaceholderSearchBarPreview() { LawniconsTheme { - PlaceholderSearchBar(false) + PlaceholderSearchBar() } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 017ab6ff09a..7fcf0b211ae 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -3,7 +3,12 @@ package app.lawnchair.lawnicons.ui.destination import android.annotation.SuppressLint import androidx.compose.animation.Crossfade import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState @@ -13,6 +18,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.platform.LocalContext @@ -20,7 +26,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode -import app.lawnchair.lawnicons.repository.preferenceManager import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBarUiState @@ -36,7 +41,7 @@ import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel import kotlinx.collections.immutable.toImmutableList @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") -@OptIn(ExperimentalFoundationApi::class) +@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) @Composable fun Home( onNavigate: () -> Unit, @@ -116,9 +121,17 @@ fun Home( ) } } else { - PlaceholderSearchBar( - isExpandedScreen = isExpandedScreen, - ) + if (isExpandedScreen) { + PlaceholderSearchBar() + } else { + Column( + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxSize(), + ) { + CircularProgressIndicator() + } + } } } LaunchedEffect(expandSearch) { From b4d766d9332076783ba560fffc9fc66eb968e9c5 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:37:01 +0800 Subject: [PATCH 283/527] Fix padding --- .../lawnicons/ui/components/home/IconPreviewGrid.kt | 2 +- .../lawnicons/ui/components/home/search/SearchContents.kt | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 3f755301961..7418990dbd1 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -71,7 +71,7 @@ fun IconPreviewGrid( .fillMaxWidth() .statusBarsPadding() .then( - if (isExpandedScreen) Modifier.padding(top = 26.dp) else Modifier, + if (isExpandedScreen) Modifier.padding(top = 26.dp) else Modifier.padding(bottom = 80.dp), ), state = gridState, settings = ScrollbarSettings( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 702e28652c0..c2f05d47838 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -123,6 +123,7 @@ fun SearchContents( 1 -> { IconInfoListItem(iconInfo) } + 0 -> { Box( modifier = Modifier @@ -145,7 +146,7 @@ fun SearchContents( ) { iconInfo -> LazyVerticalGrid( columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = PaddingValues(16.dp), + contentPadding = PaddingValues(16.dp, 16.dp, 16.dp, 80.dp), ) { items( items = iconInfo, @@ -154,7 +155,7 @@ fun SearchContents( IconPreview( iconInfo = it, onSendResult = onSendResult, - iconBackground = MaterialTheme.colorScheme.surfaceVariant, + iconBackground = MaterialTheme.colorScheme.surfaceContainerLow, ) } } From 0bdd5d9bf297c7e7a8b2868caaa3e3ff0467d40f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:07:10 +0800 Subject: [PATCH 284/527] Simplify IconInfo --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 76 +++++++++---------- .../lawnicons/repository/IconRepository.kt | 5 +- .../lawnchair/lawnicons/util/GetIconInfo.kt | 6 +- 3 files changed, 40 insertions(+), 47 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 7d3a6351f6b..6661e3118ef 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -21,52 +21,44 @@ data class IconInfo( } /** - * A helper object for processing and manipulating collections of [IconInfo] objects, - * including merging and splitting based on drawable names and component names. + * Merges a list of [IconInfo] objects, grouping them by their `drawableName` and + * combining the `componentNames` of icons with the same drawable name. + * + * @return A new list of [IconInfo] objects with merged component names for icons + * sharing the same drawable name. */ -object IconInfoManager { - /** - * Merges a list of [IconInfo] objects, grouping them by their `drawableName` and - * combining the `componentNames` of icons with the same drawable name. - * - * @param iconInfoList The list of [IconInfo] objects to merge. - * @return A new list of [IconInfo] objects with merged component names for icons - * sharing the same drawable name. - */ - fun mergeByDrawableName(iconInfoList: List): List { - return iconInfoList.groupBy { it.drawableName } - .map { (drawableName, icons) -> - val mergedComponentNames = icons.flatMap { it.componentNames } - IconInfo( - componentNames = mergedComponentNames, - drawableName = drawableName, - id = icons.first().id, - ) - } - } +fun List.mergeByDrawableName(): List { + return groupBy { it.drawableName } + .map { (drawableName, icons) -> + val mergedComponentNames = icons.flatMap { it.componentNames } + IconInfo( + componentNames = mergedComponentNames, + drawableName = drawableName, + id = icons.first().id, + ) + } +} - /** - * Splits [IconInfo] objects with multiple component names into a list where each - * [IconInfo] object has a single component name. - * - * @param iconInfoList The list of [IconInfo] objects to split. - * @return A new list of [IconInfo] objects, each with a single component name. - */ - fun splitByComponentName(iconInfoList: List): List { - val splitList = mutableListOf() - for (iconInfo in iconInfoList) { - for (nameAndComponent in iconInfo.componentNames) { - splitList.add( - IconInfo( - componentNames = listOf(nameAndComponent), - drawableName = iconInfo.drawableName, - id = iconInfo.id, - ), - ) - } +/** + * Splits [IconInfo] objects with multiple component names into a list where each + * [IconInfo] object has a single component name. + * + * @return A new list of [IconInfo] objects, each with a single component name. + */ +fun List.splitByComponentName(): List { + val splitList = mutableListOf() + for (iconInfo in this) { + for (nameAndComponent in iconInfo.componentNames) { + splitList.add( + IconInfo( + componentNames = listOf(nameAndComponent), + drawableName = iconInfo.drawableName, + id = iconInfo.id, + ), + ) } - return splitList } + return splitList } fun IconInfo.getFirstLabelAndComponent(): LabelAndComponent { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 1c18cdda2e8..c03ddb1cf28 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -2,13 +2,13 @@ package app.lawnchair.lawnicons.repository import android.app.Application import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoManager import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.model.SearchInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.model.getFirstLabelAndComponent +import app.lawnchair.lawnicons.model.splitByComponentName import app.lawnchair.lawnicons.util.getIconInfo import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter import javax.inject.Inject @@ -112,7 +112,8 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep info.getFirstLabelAndComponent() } - val lawniconsComponents = IconInfoManager.splitByComponentName(lawniconsData) + val lawniconsComponents = lawniconsData + .splitByComponentName() .map { it.getFirstLabelAndComponent().componentName } .sortedBy { it.lowercase() } .toSet() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index abcd3fac554..7ea59aeb188 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -4,13 +4,13 @@ import android.annotation.SuppressLint import android.content.Context import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.IconInfoManager import app.lawnchair.lawnicons.model.LabelAndComponent +import app.lawnchair.lawnicons.model.mergeByDrawableName import org.xmlpull.v1.XmlPullParser @SuppressLint("DiscouragedApi") fun Context.getIconInfo(): List { - var iconInfo = mutableListOf() + val iconInfo = mutableListOf() val componentInfoPrefixLength = "ComponentInfo{".length @@ -61,5 +61,5 @@ fun Context.getIconInfo(): List { e.printStackTrace() } - return IconInfoManager.mergeByDrawableName(iconInfo) + return iconInfo.mergeByDrawableName() } From 8522751a23592c383cbd246ec5d9f7902bc01045 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:16:09 +0800 Subject: [PATCH 285/527] Fix scrollbar content Fix #2256 --- .../ui/components/home/IconPreviewGrid.kt | 56 ++++++++++++------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 7418990dbd1..92c81d274b2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -31,6 +32,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.asImageBitmap @@ -60,6 +63,9 @@ fun IconPreviewGrid( contentPadding: PaddingValues? = null, gridState: LazyGridState = rememberLazyGridState(), ) { + val indexOfFirstItem = remember { derivedStateOf { gridState.firstVisibleItemIndex } } + val letter = iconInfo[indexOfFirstItem.value].label[0].uppercase() + Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, @@ -81,27 +87,7 @@ fun IconPreviewGrid( selectionMode = ScrollbarSelectionMode.Thumb, ), indicatorContent = { _, isThumbSelected -> - AnimatedVisibility( - visible = isThumbSelected, - enter = fadeIn(), - exit = fadeOut(), - ) { - Box( - modifier = Modifier - .padding(end = 16.dp) - .background( - color = MaterialTheme.colorScheme.primary, - shape = MaterialTheme.shapes.large, - ), - ) { - Text( - modifier = Modifier.padding(16.dp), - text = "#", - style = MaterialTheme.typography.titleMedium, - color = MaterialTheme.colorScheme.onPrimary, - ) - } - } + ScrollbarIndicator(letter, isThumbSelected) }, ) { val horizontalGridPadding = if (isExpandedScreen) 32.dp else 8.dp @@ -138,6 +124,34 @@ fun IconPreviewGrid( } } +@Composable +private fun ColumnScope.ScrollbarIndicator( + label: String, + isThumbSelected: Boolean, +) { + AnimatedVisibility( + visible = isThumbSelected, + enter = fadeIn(), + exit = fadeOut(), + ) { + Box( + modifier = Modifier + .padding(end = 16.dp) + .background( + color = MaterialTheme.colorScheme.primary, + shape = MaterialTheme.shapes.large, + ), + ) { + Text( + modifier = Modifier.padding(16.dp), + text = label, + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onPrimary, + ) + } + } +} + @OptIn(ExperimentalMaterial3Api::class) @Composable fun TopAppBar(modifier: Modifier = Modifier) { From c974fcf8dac9993103e2b891326835f3ec2ab99d Mon Sep 17 00:00:00 2001 From: Goooler Date: Fri, 23 Aug 2024 14:02:08 +0800 Subject: [PATCH 286/527] Group myself to infra --- .../main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt | 2 +- app/src/main/res/values-af-rZA/strings.xml | 1 - app/src/main/res/values-ar-rSA/strings.xml | 1 - app/src/main/res/values-ca-rES/strings.xml | 1 - app/src/main/res/values-cs-rCZ/strings.xml | 1 - app/src/main/res/values-da-rDK/strings.xml | 1 - app/src/main/res/values-de-rDE/strings.xml | 1 - app/src/main/res/values-el-rGR/strings.xml | 1 - app/src/main/res/values-en-rUS/strings.xml | 1 - app/src/main/res/values-es-rES/strings.xml | 1 - app/src/main/res/values-fi-rFI/strings.xml | 1 - app/src/main/res/values-fil-rPH/strings.xml | 1 - app/src/main/res/values-fr-rFR/strings.xml | 1 - app/src/main/res/values-hi-rIN/strings.xml | 1 - app/src/main/res/values-hu-rHU/strings.xml | 1 - app/src/main/res/values-in-rID/strings.xml | 1 - app/src/main/res/values-it-rIT/strings.xml | 1 - app/src/main/res/values-iw-rIL/strings.xml | 1 - app/src/main/res/values-ja-rJP/strings.xml | 1 - app/src/main/res/values-ko-rKR/strings.xml | 1 - app/src/main/res/values-mr-rIN/strings.xml | 1 - app/src/main/res/values-nl-rNL/strings.xml | 1 - app/src/main/res/values-no-rNO/strings.xml | 1 - app/src/main/res/values-pl-rPL/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/strings.xml | 1 - app/src/main/res/values-ro-rRO/strings.xml | 1 - app/src/main/res/values-ru-rRU/strings.xml | 1 - app/src/main/res/values-sv-rSE/strings.xml | 1 - app/src/main/res/values-tr-rTR/strings.xml | 1 - app/src/main/res/values-uk-rUA/strings.xml | 1 - app/src/main/res/values-vi-rVN/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/strings.xml | 2 +- 35 files changed, 2 insertions(+), 35 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index e5ae792bf97..68a70354255 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -93,7 +93,7 @@ private val coreContributors = listOf( username = "Goooler", photoUrl = "https://avatars.githubusercontent.com/u/10363352", socialUrl = "https://androiddev.social/@Goooler", - descriptionRes = R.string.contribution_deps, + descriptionRes = R.string.contribution_infra, ), ) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 680cb8e8e1c..2c96f6ec44c 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -33,7 +33,6 @@ Core app Icons - Dependencies Special thanks diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index e613c59d823..ef89bd8810e 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -33,7 +33,6 @@ Core app الأيقونات - Dependencies Special thanks diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index fda7534543c..21ae600a6da 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -33,7 +33,6 @@ Core app Icones - Dependencies Special thanks diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 0e32a08e8e1..f236fefd641 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -33,7 +33,6 @@ Core app Ikony - Dependencies Special thanks diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index d8c6f75ccb5..a07187d65d6 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -33,7 +33,6 @@ Core app Ikoner - Dependencies Special thanks diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index f2139d339b6..c6ed397c757 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -33,7 +33,6 @@ Kern-App Symbole - Abhängigkeiten Besonderer Dank diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index bdcfc182cc9..3041ae315d7 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -33,7 +33,6 @@ Core app Εικονίδια - Dependencies Special thanks diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index 7823eaee94c..17cf6c8d98f 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -33,7 +33,6 @@ Core app Icons - Dependencies Special thanks diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 419742f5126..a29653b6654 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -33,7 +33,6 @@ Core app Iconos - Dependencies Special thanks diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 92ae1aa4582..c9fef536a95 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -33,7 +33,6 @@ Core app Kuvakkeet - Dependencies Special thanks diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 34d46654429..c8a453a8f0f 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -33,7 +33,6 @@ Core app Mga Icon - Dependencies Espesyal na pagsasalamat diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 4418dc73661..76fc6e5f4fb 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -33,7 +33,6 @@ Core app Icônes - Dependencies Remerciements spéciaux diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index bdf5ded2ef3..3184fce8814 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -33,7 +33,6 @@ Core app चिह्न - Dependencies विशेष धन्यवाद diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index ea13a9c6a7a..ba7af2b819a 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -33,7 +33,6 @@ Core app Ikonok - Dependencies Special thanks diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 1a1b8444c89..3f09b2b5753 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -33,7 +33,6 @@ Core app Ikon - Dependencies Terima kasih Khusus diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 715511adeea..cb0f69037e7 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -33,7 +33,6 @@ Core app Icone - Dependencies Special thanks diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 79c06deb07b..3181c5bbb22 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -33,7 +33,6 @@ Core app סמלים - Dependencies Special thanks diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index b1f22fed11c..f8340bc15e1 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -33,7 +33,6 @@ Core app アイコン - Dependencies Special thanks diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index bf143a3833c..89abc4a41de 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -33,7 +33,6 @@ 코어 앱 아이콘 - 의존성 라이브러리 Special thanks diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index ddde439db36..f35f9398a2e 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -33,7 +33,6 @@ Core app चिन्हे - Dependencies विशेष धन्यवाद diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index ed7f5e8254d..67620cfd5dd 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -33,7 +33,6 @@ Core app Pictogrammen - Dependencies Special thanks diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index bb49477c568..bd33741642e 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -33,7 +33,6 @@ Core app Ikoner - Dependencies Special thanks diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 8c515dfff7a..d5fe76ffd3f 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -33,7 +33,6 @@ Core app Ikony - Dependencies Specjalne podziękowania diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 09a4d4bf363..fb2e7ac9e09 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -33,7 +33,6 @@ Core app Ícones - Dependencies Special thanks diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 09a4d4bf363..fb2e7ac9e09 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -33,7 +33,6 @@ Core app Ícones - Dependencies Special thanks diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 6ab1eb1b78c..3b950f5c352 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -33,7 +33,6 @@ Core app Pictograme - Dependencies Special thanks diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 624da4179d8..038759f7b9a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -33,7 +33,6 @@ Core app Иконки - Dependencies Special thanks diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 0be8e30f06b..69e728926d2 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -33,7 +33,6 @@ Core app Ikoner - Dependencies Special thanks diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index b0178be1bf8..1f3cb6fa825 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -33,7 +33,6 @@ Core app Resimleyici - Dependencies Special thanks diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index de18cdc6fe3..10ee5b370e2 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -33,7 +33,6 @@ Головний додаток Значки - Залежності Особлива подяка diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index d74e329d5a2..d72618aabcc 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -33,7 +33,6 @@ Core app Biểu tượng - Dependencies Special thanks diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5351f587b8b..cd45165288a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -33,7 +33,6 @@ Core app 图标 - Dependencies Special thanks diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 46033a92969..49ef20d6629 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -33,7 +33,6 @@ Core app 圖示 - Dependencies Special thanks diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d02c191f394..19bdf595c38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,7 +45,7 @@ Core app Icons - Dependencies + Infrastructure From fc2f199608372dbe31758e618bdaa6996a3e421e Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:44:06 +0800 Subject: [PATCH 287/527] Improve snackbar behavior --- .../ui/components/home/IconRequestFAB.kt | 66 +++++++++++-------- app/src/main/res/values/strings.xml | 3 +- 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 3ce7213b7e8..06d88d6c2cd 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -188,6 +188,7 @@ private fun HandleTouchInteractions( encodedRequestList: String, snackbarHostState: SnackbarHostState, ) { + val prefs = preferenceManager() val lastestOnExpandSheet by rememberUpdatedState(newValue = onExpandSheet) LaunchedEffect(interactionSource) { var isLongClick = false @@ -206,18 +207,16 @@ private fun HandleTouchInteractions( is PressInteraction.Release -> { if (!isLongClick) { - if (iconRequestList.isEmpty()) { - openLink(context, Constants.ICON_REQUEST_FORM) - } else if (directLinkEnabled) { - openLink(context, encodedRequestList) - } else { - openSnackbarWarningContent( - context, - requestList, - coroutineScope, - snackbarHostState, - ) - } + prefs.showFirstLaunchSnackbar.set(false) + handleRequestClick( + iconRequestList, + context, + directLinkEnabled, + encodedRequestList, + requestList, + coroutineScope, + snackbarHostState, + ) } } @@ -275,6 +274,30 @@ private fun copyTextToClipboard(context: Context, text: String) { clipboard.setPrimaryClip(clip) } + +private fun handleRequestClick( + iconRequestList: List, + context: Context, + directLinkEnabled: Boolean, + encodedRequestList: String, + requestList: String, + coroutineScope: CoroutineScope, + snackbarHostState: SnackbarHostState, +) { + if (iconRequestList.isEmpty()) { + openLink(context, Constants.ICON_REQUEST_FORM) + } else if (directLinkEnabled) { + openLink(context, encodedRequestList) + } else { + openSnackbarWarningContent( + context, + requestList, + coroutineScope, + snackbarHostState, + ) + } +} + private fun openSnackbarFirstLaunchContent( context: Context, coroutineScope: CoroutineScope, @@ -284,21 +307,12 @@ private fun openSnackbarFirstLaunchContent( coroutineScope.launch { val result = snackbarHostState .showSnackbar( - message = context.getString(R.string.you_have_missing_icons), - actionLabel = context.getString(R.string.request_icons), - withDismissAction = true, - duration = SnackbarDuration.Indefinite, + message = context.getString(R.string.snackbar_request_icons_hint), + duration = SnackbarDuration.Long, ) - when (result) { - SnackbarResult.ActionPerformed -> { - onActionPerformed() - openLink(context, Constants.ICON_REQUEST_FORM) - } - - SnackbarResult.Dismissed -> { - onActionPerformed() - snackbarHostState.currentSnackbarData?.dismiss() - } + if (result == SnackbarResult.Dismissed) { + onActionPerformed() + snackbarHostState.currentSnackbarData?.dismiss() } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19bdf595c38..3f3ff0e25c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,7 +82,8 @@ Copied text + Request missing icons from the bottom bar + Copied icon request details to clipboard. To request them, submit the details into the form. Open form - You have missing icons From 83df10f0ec90334f71d0619cb03c2f68ff80ef46 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:48:53 +0800 Subject: [PATCH 288/527] Fix style --- .../app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 06d88d6c2cd..8e3cdee83b1 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -274,7 +274,6 @@ private fun copyTextToClipboard(context: Context, text: String) { clipboard.setPrimaryClip(clip) } - private fun handleRequestClick( iconRequestList: List, context: Context, From 3ded652477c6aaee11a4b96ac8ce7032bc538507 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:40:07 +0300 Subject: [PATCH 289/527] Clarified the process of adding and linking icons (#2282) * Clarified the process of adding and linking icons * Update CONTRIBUTING.md --- CONTRIBUTING.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52513979e45..06c3dc6cfa1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -123,31 +123,35 @@ Correct ``` ## Adding an icon to Lawnicons -Here's how to add an icon to Lawnicons: - ### Prerequisites -* Your icon in the SVG format, adhering to the [above guidelines](#contributing-icons). The filename must use snake case (e.g. `files_by_google.svg`). -* The package and activity name of the app. +* A fork of the Lawnicons repository; +* Your icon in the SVG format, adhering to the [above guidelines](#contributing-icons). The filename must use snake case (e.g. `spck_editor.svg`). +* The package and activity name of the app; ### Via `icontool.py` -Please check the [icon tool guide](/docs/icontool_guide.md) for more information. +Please check [the icon tool guide](/docs/icontool_guide.md) for more information. ### Via manual process -1. Add the ready SVG to the `svgs` directory. +1. Add the ready SVG to the `svgs` directory. If you want to add a link to an existing SVG, you will need its name. -1. Add a new line to `app/assets/appfilter.xml` (in alphabetical order, by the `name` attribute), and map the new icon to a package name and app's activity. For example: +2. Add a new line to `app/assets/appfilter.xml` (in alphabetical order, by the `name` attribute), and map the new icon to a package name and app's activity. + **Example** + - the app name: `Spck Editor`; + - the svg (drawable) name: `spck_editor`; + - the package and activity of the app: `io.spck/io.spck.EditorActivity`. + + **The new line** ```xml - + ``` - A general template is as follows: - + **General template** ```xml ``` -1. Done! You're ready to open a pull request. Please set `develop` as the base branch. +4. Done! You're ready to open a pull request. Please set `develop` as the base branch. ## Finding the package and activity name of an app @@ -158,8 +162,8 @@ Please check the [icon tool guide](/docs/icontool_guide.md) for more information ### Using `adb` 1. Connect your Android device or emulator to your laptop/desktop PC that has `adb` installed (see [this tutorial](https://www.xda-developers.com/install-adb-windows-macos-linux/) for more information) and open the app whose details you want to inspect, e.g. Telegram. -1. Open a new Command Prompt or Terminal window and input `adb devices`. -1. Finally, type the below-given command to get the information about the currently open application. +2. Open a new Command Prompt or Terminal window and input `adb devices`. +3. Finally, type the below-given command to get the information about the currently open application. **For Mac or Linux**: From be66330b688912215143409a75d4d9a9ba571b6d Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:06:36 +0300 Subject: [PATCH 290/527] Updating the self-review checklist 2 (#2286) --- .github/icon_checklist.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 64b8cb378d3..8059999f6d6 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -6,21 +6,21 @@ While waiting for a review from our team, you can do a self-review to ensure tha 1. Canvas: `192×192px`. 2. Non-square icons: the long side of the icons should be `160px`. 3. Square icons: `154×154px`. -- [ ] Done +- [ ] Approved by the Lawnicons reviewer ### Color, stroke width and rounding -1. Color: black `#000`. +1. Color: non-transparent black `#000`. 2. No fill. Base stroke width: `12px`. `14px`, `10px`, `8px` — depending on the shape of the icons. `6px` — for fine details. 3. Rounded ends and joins. 90° corners are rounded by `6-32px`. -- [ ] Done +- [ ] Approved by the Lawnicons reviewer ### Naming 1. Names should match the official app name and contain no additional text. 2. If the first `3` characters of the app name contain letters not from the English alphabet, then add a localized (or transliterated) name via `~~`. Example: `京东 ~~ JD`. 3. The names of the drawables should repeat the names of the apps if nothing prevents it. -- [ ] Done +- [ ] Approved by the Lawnicons reviewer ### Quality 1. Ensure that icons are easily recognizable. 2. Align icons to [the visual center](https://crazybitsstudios.com/another-way-of-aligning-elements-when-creating-icons) as much as possible within the guidelines. The visual center is where your icon looks and feels centered. 3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. 4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. 5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. -- [ ] Done +- [ ] Approved by the Lawnicons reviewer From b9c4f8ab4cf0c5372cb62f4a63c2776368353fd6 Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Wed, 28 Aug 2024 03:49:45 +0900 Subject: [PATCH 291/527] +3 icons (#2279) * +3 icons * minor fix custom_uploader svg --- app/assets/appfilter.xml | 3 +++ svgs/cuberite.svg | 3 +++ svgs/custom_uploader.svg | 3 +++ svgs/look4sat.svg | 3 +++ 4 files changed, 12 insertions(+) create mode 100644 svgs/cuberite.svg create mode 100644 svgs/custom_uploader.svg create mode 100644 svgs/look4sat.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 3059e6e48d2..f440cf61c45 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2348,6 +2348,7 @@ + @@ -2357,6 +2358,7 @@ + @@ -5322,6 +5324,7 @@ + diff --git a/svgs/cuberite.svg b/svgs/cuberite.svg new file mode 100644 index 00000000000..eb91ad479df --- /dev/null +++ b/svgs/cuberite.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/custom_uploader.svg b/svgs/custom_uploader.svg new file mode 100644 index 00000000000..885def8995c --- /dev/null +++ b/svgs/custom_uploader.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/look4sat.svg b/svgs/look4sat.svg new file mode 100644 index 00000000000..5942dcf582e --- /dev/null +++ b/svgs/look4sat.svg @@ -0,0 +1,3 @@ + + + From 35581a1ee6426b9920af50f1fedabae810f88545 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:18:55 +0800 Subject: [PATCH 292/527] Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.7.2 (#2287) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cf9f33d9ef0..934e4849cf6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,7 +147,7 @@ dependencies { implementation("androidx.navigation:navigation-compose:2.8.0-rc01") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") val hiltVersion = "2.52" From 7a95b69165b66e29e2d41d790c32043daf22d1d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 09:45:23 +0800 Subject: [PATCH 293/527] Update AGP (#2288) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index fa51ad45f0a..74f2bec6281 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.5.2" apply false + id("com.android.application") version "8.6.0" apply false id("org.jetbrains.kotlin.android") version "2.0.20" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 2df983d5b96..83eaaf8b79a 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.5.2") + implementation("com.android.tools:sdk-common:31.6.0") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From 758d919a322e9ffcebf00b82c66fe317b76eaedf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 19:31:40 +0800 Subject: [PATCH 294/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.11 (#2289) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 74f2bec6281..5bb8a8f1fd1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.10", + "io.nlopez.compose.rules:ktlint:0.4.11", ), ).editorConfigOverride( mapOf( From 81f2c9b6848077b84c25cb694508abbd917ec0da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=81=E5=85=89?= <45266046+DreamVoid@users.noreply.github.com> Date: Sat, 31 Aug 2024 23:59:35 +0800 Subject: [PATCH 295/527] Link Raileay 12306 (#2290) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index f440cf61c45..aea60f676fd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -12415,6 +12415,7 @@ + From 5ae99dba3fd1c5914d475d806907712be3b8f85e Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 31 Aug 2024 19:20:39 +0300 Subject: [PATCH 296/527] +37 links (#2291) --- app/assets/appfilter.xml | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index aea60f676fd..9e783d289bd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -512,6 +512,7 @@ + @@ -681,6 +682,7 @@ + @@ -796,6 +798,7 @@ + @@ -956,6 +959,7 @@ + @@ -988,9 +992,11 @@ + + @@ -1115,6 +1121,7 @@ + @@ -1330,6 +1337,7 @@ + @@ -2620,6 +2628,7 @@ + @@ -4003,6 +4012,7 @@ + @@ -4278,6 +4288,8 @@ + + @@ -4361,6 +4373,7 @@ + @@ -4395,6 +4408,7 @@ + @@ -4830,6 +4844,7 @@ + @@ -5116,11 +5131,11 @@ - + @@ -5138,6 +5153,8 @@ + + @@ -5537,6 +5554,7 @@ + @@ -5804,6 +5822,8 @@ + + @@ -5902,6 +5922,7 @@ + @@ -6113,6 +6134,7 @@ + @@ -6267,6 +6289,8 @@ + + @@ -8245,6 +8269,7 @@ + @@ -8887,6 +8912,7 @@ + @@ -9489,6 +9515,7 @@ + @@ -9685,6 +9712,7 @@ + @@ -9816,6 +9844,7 @@ + @@ -10108,6 +10137,7 @@ + @@ -11076,6 +11106,7 @@ + @@ -11363,6 +11394,7 @@ + @@ -11371,6 +11403,7 @@ + @@ -11759,6 +11792,7 @@ + @@ -12024,6 +12058,7 @@ + @@ -12265,6 +12300,7 @@ + @@ -12329,6 +12365,7 @@ + From d8376706c8b16e3f8cab8b384fa79d91b9025a3e Mon Sep 17 00:00:00 2001 From: Chang Jiaman Date: Sun, 1 Sep 2024 14:43:44 +0800 Subject: [PATCH 297/527] +1 icon (#2292) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * link hihonor music, legado(play) * add todesk,yunrili * +6,link 1 * +2 icons * link1 * fix icons,+1 icon * fix * Fixed IQIYI → iQIYI * Improved iqiyi.svg quality for small sizes * The visual center of ithome.svg has been clarified * Moved kaadas.svg so that it is located within the boundaries of the content area and reduced the density at the bottom * +1 icon * Rename hkbank.svg to hankou_bank.svg * Unnecessary additions have been removed --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/hankou_bank.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/hankou_bank.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9e783d289bd..b5742e7a647 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -12470,6 +12470,7 @@ + diff --git a/svgs/hankou_bank.svg b/svgs/hankou_bank.svg new file mode 100644 index 00000000000..86e16c2a997 --- /dev/null +++ b/svgs/hankou_bank.svg @@ -0,0 +1 @@ + From af69fb035ae3b6ebdb1e8a47e187b1a16b6b0995 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 4 Sep 2024 20:28:02 +0800 Subject: [PATCH 298/527] Implement build variant for play store --- app/build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 934e4849cf6..00692471e8e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -69,6 +69,11 @@ android { isMinifyEnabled = true proguardFiles("proguard-rules.pro") } + create("play") { + applicationIdSuffix = ".play" + isMinifyEnabled = true + proguardFiles("proguard-rules.pro") + } } flavorDimensions += "product" From 725bf6cf117b8209e977314ad71f626fa87781c8 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 4 Sep 2024 20:55:44 +0800 Subject: [PATCH 299/527] Use rememberSaveable for certain parts of the UI Should fix some of the crashes from invalid state --- .../lawnicons/ui/components/home/IconInfoSheet.kt | 5 +++-- .../lawnicons/ui/components/home/IconRequestFAB.kt | 7 ++++--- .../lawnicons/ui/components/home/search/SearchContents.kt | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt index e48e807a60d..c79a5685d7d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt @@ -29,6 +29,7 @@ import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode @@ -58,7 +59,7 @@ fun IconInfoSheet( skipPartiallyExpanded = true, ) - val groupedComponents = remember { + val groupedComponents = rememberSaveable { iconInfo.componentNames .groupBy { it.label } .map { (label, components) -> @@ -71,7 +72,7 @@ fun IconInfoSheet( newValue = "", ) - val shareContents = remember { getShareContents(githubName, groupedComponents) } + val shareContents = rememberSaveable { getShareContents(githubName, groupedComponents) } ModalBottomSheet( onDismissRequest = { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 8e3cdee83b1..20b6d652999 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -37,6 +37,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -130,13 +131,13 @@ fun RequestHandler( val encodedRequestList = buildForm(requestList.replace("\n", "%20")) val directLinkEnabled = encodedRequestList.length < Constants.DIRECT_LINK_MAX_LENGTH - var sheetExpanded by remember { mutableStateOf(false) } + var sheetExpanded by rememberSaveable { mutableStateOf(false) } val sheetState = rememberModalBottomSheetState( skipPartiallyExpanded = true, ) val scope = rememberCoroutineScope() - val interactionSource = remember { MutableInteractionSource() } + val interactionSource = rememberSaveable { MutableInteractionSource() } HandleTouchInteractions( interactionSource = interactionSource, @@ -307,7 +308,7 @@ private fun openSnackbarFirstLaunchContent( val result = snackbarHostState .showSnackbar( message = context.getString(R.string.snackbar_request_icons_hint), - duration = SnackbarDuration.Long, + duration = SnackbarDuration.Short, ) if (result == SnackbarResult.Dismissed) { onActionPerformed() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index c2f05d47838..70e482f2fae 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -30,6 +30,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -180,7 +181,7 @@ private fun IconInfoListItem(iconInfo: ImmutableList) { return@IconInfoListItem } - val isIconInfoAppfilterShown = remember { mutableStateOf(false) } + val isIconInfoAppfilterShown = rememberSaveable { mutableStateOf(false) } ListItem( headlineContent = { Text(it.getFirstLabelAndComponent().label) }, From b9281485081029ac4c2f792282b12378558e5cd9 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 4 Sep 2024 22:56:30 +0800 Subject: [PATCH 300/527] Simplify code --- .../ui/components/home/HomeTopBar.kt | 28 +++----- .../ui/components/home/IconRequestFAB.kt | 2 +- .../ui/components/home/OverflowMenu.kt | 58 --------------- .../ui/components/home/search/SearchBar.kt | 70 ++++++++----------- .../components/home/search/SearchContents.kt | 1 - 5 files changed, 39 insertions(+), 120 deletions(-) delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/OverflowMenu.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt index cd1c1021216..9c2b6afae38 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt @@ -41,10 +41,8 @@ fun HomeTopBar( ) { val (isSearchExpanded, isExpandedScreen, searchTerm, searchMode, searchedIconInfoModel, isIconPicker) = uiState - val condition = isSearchExpanded || isExpandedScreen - val offset = animateDpAsState( - targetValue = if (condition) { + targetValue = if (isSearchExpanded || isExpandedScreen) { 0.dp } else { (-100).dp @@ -59,7 +57,7 @@ fun HomeTopBar( }, searchTerm = searchTerm, onClearSearch = onClearSearch, - onChangeMode = onChangeMode, + onModeChange = onChangeMode, onSearch = onSearchIcons, iconInfoModel = it, onNavigate = onNavigate, @@ -79,7 +77,7 @@ private fun SearchBar( searchTerm: String, onSearch: (String) -> Unit, onClearSearch: () -> Unit, - onChangeMode: (SearchMode) -> Unit, + onModeChange: (SearchMode) -> Unit, onNavigate: () -> Unit, isExpandedScreen: Boolean, isIconPicker: Boolean, @@ -97,15 +95,9 @@ private fun SearchBar( LawniconsSearchBar( query = searchTerm, isQueryEmpty = searchTerm == "", - onClear = { - onClearSearch() - }, - onBack = { - onFocusChange() - }, - onQueryChange = { newValue -> - onSearch(newValue) - }, + onClear = onClearSearch, + onBack = onFocusChange, + onQueryChange = onSearch, iconInfoModel = iconInfoModel, onNavigate = onNavigate, isExpandedScreen = isExpandedScreen, @@ -114,13 +106,9 @@ private fun SearchBar( SearchContents( searchTerm = searchTerm, searchMode = searchMode, - onModeChange = { mode -> - onChangeMode(mode) - }, + onModeChange = onModeChange, iconInfo = iconInfoModel.iconInfo, - onSendResult = { - onSendResult(it) - }, + onSendResult = onSendResult, ) }, inputFieldModifier = inputFieldModifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 20b6d652999..2106ec0cd94 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -137,7 +137,7 @@ fun RequestHandler( ) val scope = rememberCoroutineScope() - val interactionSource = rememberSaveable { MutableInteractionSource() } + val interactionSource = remember { MutableInteractionSource() } HandleTouchInteractions( interactionSource = interactionSource, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/OverflowMenu.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/OverflowMenu.kt deleted file mode 100644 index 99caf61734b..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/OverflowMenu.kt +++ /dev/null @@ -1,58 +0,0 @@ -package app.lawnchair.lawnicons.ui.components.home - -import androidx.compose.foundation.layout.Box -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.MoreVert -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.LocalContentColor -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.DpOffset -import androidx.compose.ui.unit.dp - -@Composable -fun OverflowMenu( - modifier: Modifier = Modifier, - block: @Composable OverflowMenuScope.() -> Unit, -) { - val showMenu = remember { mutableStateOf(false) } - val overflowMenuScope = remember { OverflowMenuScopeImpl(showMenu) } - - Box( - modifier = modifier, - ) { - ClickableIcon( - imageVector = Icons.Rounded.MoreVert, - size = 52.dp, - onClick = { showMenu.value = true }, - ) - DropdownMenu( - expanded = showMenu.value, - onDismissRequest = { showMenu.value = false }, - offset = DpOffset(x = 16.dp, y = (-36).dp), - ) { - CompositionLocalProvider( - LocalContentColor - provides MaterialTheme.colorScheme.onSurface, - ) { - block(overflowMenuScope) - } - } - } -} - -interface OverflowMenuScope { - fun hideMenu() -} - -private class OverflowMenuScopeImpl(private val showState: MutableState) : - OverflowMenuScope { - override fun hideMenu() { - showState.value = false - } -} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 435cd245b92..c2e1d4ac3d5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -5,6 +5,7 @@ import androidx.compose.animation.animateContentSize import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -214,8 +215,23 @@ private fun ResponsiveSearchBar( isExpandedScreen: Boolean, modifier: Modifier = Modifier, inputFieldModifier: Modifier = Modifier, - content: @Composable () -> Unit, + content: @Composable ColumnScope.() -> Unit, ) { + val inputField = + @Composable { + SearchBarDefaults.InputField( + query = query, + onQueryChange = onQueryChange, + onSearch = onSearch, + modifier = inputFieldModifier, + expanded = active, + onExpandedChange = onActiveChange, + placeholder = placeholder, + leadingIcon = leadingIcon, + trailingIcon = trailingIcon, + ) + } + if (isExpandedScreen) { Row( verticalAlignment = Alignment.CenterVertically, @@ -223,47 +239,19 @@ private fun ResponsiveSearchBar( modifier = modifier, ) { DockedSearchBar( - inputField = { - SearchBarDefaults.InputField( - query = query, - onQueryChange = onQueryChange, - onSearch = onSearch, - modifier = inputFieldModifier, - expanded = active, - onExpandedChange = onActiveChange, - placeholder = placeholder, - leadingIcon = leadingIcon, - trailingIcon = trailingIcon, - ) - }, + inputField = inputField, expanded = active, onExpandedChange = onActiveChange, - content = { - content() - }, + content = content, ) } } else { SearchBar( - inputField = { - SearchBarDefaults.InputField( - query = query, - onQueryChange = onQueryChange, - onSearch = onSearch, - modifier = inputFieldModifier, - expanded = active, - onExpandedChange = onActiveChange, - placeholder = placeholder, - leadingIcon = leadingIcon, - trailingIcon = trailingIcon, - ) - }, + inputField = inputField, expanded = active, onExpandedChange = onActiveChange, modifier = Modifier.fillMaxWidth(), - content = { - content() - }, + content = content, ) } } @@ -273,13 +261,15 @@ internal fun SearchIcon( active: Boolean, onButtonClick: () -> Unit, ) { - if (active) { - ClickableIcon( - imageVector = Icons.AutoMirrored.Rounded.ArrowBack, - onClick = onButtonClick, - ) - } else { - Icon(Icons.Rounded.Search, contentDescription = null) + Crossfade(active, label = "") { + if (it) { + ClickableIcon( + imageVector = Icons.AutoMirrored.Rounded.ArrowBack, + onClick = onButtonClick, + ) + } else { + Icon(Icons.Rounded.Search, contentDescription = null) + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 70e482f2fae..bd919f75d08 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -29,7 +29,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier From 1292415090e193e6c1dbda37db5d684815234dbd Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 5 Sep 2024 00:10:42 +0800 Subject: [PATCH 301/527] Add background to scrollbar, highlight icons on scrollbar click When selecting the scrollbar, the icons with the same letter will now be scaled (110%) to highlight that they are the same category. Further improvements can be made after discussion. --- .../ui/components/home/IconPreview.kt | 13 +-- .../ui/components/home/IconPreviewGrid.kt | 102 ++++++++++++------ 2 files changed, 79 insertions(+), 36 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt index 213ae98691b..8847e7801de 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt @@ -33,11 +33,12 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import kotlin.math.ln -private fun ColorScheme.iconColor(): Color { - val elevation = 3.dp - val alpha = ((4.5f * ln(elevation.value + 1)) + 2f) / 100f - return primary.copy(alpha = alpha).compositeOver(surface) -} +val ColorScheme.iconColor: Color + get() { + val elevation = 3.dp + val alpha = ((4.5f * ln(elevation.value + 1)) + 2f) / 100f + return primary.copy(alpha = alpha).compositeOver(surface) + } @Composable fun IconPreview( @@ -68,7 +69,7 @@ fun IconPreview( color = iconBackground ?: if (isIconInfoShown.value) { MaterialTheme.colorScheme.surfaceVariant } else { - MaterialTheme.colorScheme.iconColor() + MaterialTheme.colorScheme.iconColor }, ), ) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 92c81d274b2..8dd5edfc33e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -1,6 +1,7 @@ package app.lawnchair.lawnicons.ui.components.home import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.ExperimentalFoundationApi @@ -9,13 +10,14 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding @@ -27,15 +29,21 @@ import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.scale import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource @@ -48,7 +56,7 @@ import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues import app.lawnchair.lawnicons.util.appIcon import kotlinx.collections.immutable.ImmutableList -import my.nanihadesuka.compose.LazyVerticalGridScrollbar +import my.nanihadesuka.compose.InternalLazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSelectionMode import my.nanihadesuka.compose.ScrollbarSettings @@ -63,34 +71,31 @@ fun IconPreviewGrid( contentPadding: PaddingValues? = null, gridState: LazyGridState = rememberLazyGridState(), ) { - val indexOfFirstItem = remember { derivedStateOf { gridState.firstVisibleItemIndex } } - val letter = iconInfo[indexOfFirstItem.value].label[0].uppercase() + val indexOfFirstItem by remember { derivedStateOf { gridState.firstVisibleItemIndex } } + val letter = iconInfo[indexOfFirstItem].label[0].uppercase() + var thumbSelected by remember { mutableStateOf(false) } Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, modifier = modifier.fillMaxWidth(), ) { - LazyVerticalGridScrollbar( + val horizontalGridPadding = if (isExpandedScreen) 32.dp else 8.dp + Box( modifier = Modifier .widthIn(max = 640.dp) .fillMaxWidth() .statusBarsPadding() .then( - if (isExpandedScreen) Modifier.padding(top = 26.dp) else Modifier.padding(bottom = 80.dp), + if (isExpandedScreen) { + Modifier.padding(top = 26.dp) + } else { + Modifier.padding( + bottom = 80.dp, + ) + }, ), - state = gridState, - settings = ScrollbarSettings( - alwaysShowScrollbar = true, - thumbUnselectedColor = MaterialTheme.colorScheme.primaryContainer, - thumbSelectedColor = MaterialTheme.colorScheme.primary, - selectionMode = ScrollbarSelectionMode.Thumb, - ), - indicatorContent = { _, isThumbSelected -> - ScrollbarIndicator(letter, isThumbSelected) - }, ) { - val horizontalGridPadding = if (isExpandedScreen) 32.dp else 8.dp LazyVerticalGrid( columns = GridCells.Adaptive(minSize = 80.dp), contentPadding = contentPadding ?: WindowInsets.navigationBars.toPaddingValues( @@ -106,26 +111,63 @@ fun IconPreviewGrid( GridItemSpan(maxLineSpan) }, ) { - TopAppBar() + AppBarListItem() + } + items( + items = iconInfo, + contentType = { "icon_preview" }, + ) { iconInfo -> + val scale by animateFloatAsState( + if (thumbSelected && iconInfo.label.first() + .toString() == letter + ) { + 1.1f + } else { + 1f + }, + label = "", + ) + IconPreview( + modifier = Modifier + .scale(scale), + iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) } } - items( - items = iconInfo, - contentType = { "icon_preview" }, - ) { iconInfo -> - IconPreview( - iconInfo = iconInfo, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) - } + } + Box( + contentAlignment = Alignment.CenterEnd, + ) { + Spacer( + Modifier + .fillMaxHeight() + .width(8.dp) + .background(MaterialTheme.colorScheme.surfaceContainer) + .clip(CircleShape), + ) + InternalLazyVerticalGridScrollbar( + modifier = Modifier.offset(7.dp), + state = gridState, + settings = ScrollbarSettings( + alwaysShowScrollbar = true, + thumbUnselectedColor = MaterialTheme.colorScheme.primary, + thumbSelectedColor = MaterialTheme.colorScheme.primary, + selectionMode = ScrollbarSelectionMode.Thumb, + ), + indicatorContent = { _, isThumbSelected -> + thumbSelected = isThumbSelected + ScrollbarIndicator(letter, isThumbSelected) + }, + ) } } } } @Composable -private fun ColumnScope.ScrollbarIndicator( +private fun ScrollbarIndicator( label: String, isThumbSelected: Boolean, ) { @@ -154,7 +196,7 @@ private fun ColumnScope.ScrollbarIndicator( @OptIn(ExperimentalMaterial3Api::class) @Composable -fun TopAppBar(modifier: Modifier = Modifier) { +private fun AppBarListItem(modifier: Modifier = Modifier) { val context = LocalContext.current CenterAlignedTopAppBar( modifier = modifier, From 65462534f7fd1a3a251dfabcbc8ec82e50be33f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:10:16 +0800 Subject: [PATCH 302/527] Update dependency androidx.compose.material3:material3 to v1.3.0 (#2301) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 00692471e8e..aa7b138b548 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -147,7 +147,7 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") implementation("androidx.compose.material:material-icons-core-android:1.6.8") - implementation("androidx.compose.material3:material3:1.3.0-rc01") + implementation("androidx.compose.material3:material3:1.3.0") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0-rc01") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") From b74ea4dc965fab0cfb77ac680c289423132a87f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:10:27 +0800 Subject: [PATCH 303/527] Update dependency androidx.activity:activity-compose to v1.9.2 (#2300) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aa7b138b548..593c59e1b60 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -139,7 +139,7 @@ licensee { dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") - implementation("androidx.activity:activity-compose:1.9.1") + implementation("androidx.activity:activity-compose:1.9.2") implementation(platform("androidx.compose:compose-bom:2024.08.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") From adbc56b285913960d74993bea5c2704d482a0b9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:19:05 +0800 Subject: [PATCH 304/527] Update dependency androidx.navigation:navigation-compose to v2.8.0 (#2303) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 593c59e1b60..031ab6089dc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -149,7 +149,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android:1.6.8") implementation("androidx.compose.material3:material3:1.3.0") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0-rc01") + implementation("androidx.navigation:navigation-compose:2.8.0") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") From 0db2a48bb7dba4ee9dca638a97d0180eb4976ee1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:19:58 +0800 Subject: [PATCH 305/527] Update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.5 (#2302) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 031ab6089dc..3d622851d5b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -150,7 +150,7 @@ dependencies { implementation("androidx.compose.material3:material3:1.3.0") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0") - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") From 00fe17ce7f175180b46e6d14df1307f8d89f29cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:26:45 +0800 Subject: [PATCH 306/527] Update dependency androidx.compose.material:material-icons-core-android to v1.7.0 (#2304) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3d622851d5b..9fd5328e8e4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -146,7 +146,7 @@ dependencies { implementation("androidx.compose.ui:ui-util") debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") - implementation("androidx.compose.material:material-icons-core-android:1.6.8") + implementation("androidx.compose.material:material-icons-core-android:1.7.0") implementation("androidx.compose.material3:material3:1.3.0") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0") From bf13365326c7fc6f4e375842e90a470c142a1277 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 09:27:57 +0800 Subject: [PATCH 307/527] Update dependency androidx.compose:compose-bom to v2024.09.00 (#2305) * Update dependency androidx.compose:compose-bom to v2024.09.00 * Tweaks --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Goooler --- app/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9fd5328e8e4..e720ad5decd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -140,14 +140,14 @@ dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.2") - implementation(platform("androidx.compose:compose-bom:2024.08.00")) + implementation(platform("androidx.compose:compose-bom:2024.09.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") debugImplementation("androidx.compose.ui:ui-tooling") implementation("androidx.compose.animation:animation") - implementation("androidx.compose.material:material-icons-core-android:1.7.0") - implementation("androidx.compose.material3:material3:1.3.0") + implementation("androidx.compose.material:material-icons-core-android") + implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5") From 569ab75b984265fde71dbd0ad18b87fa4a47a54e Mon Sep 17 00:00:00 2001 From: "M." Date: Thu, 5 Sep 2024 11:11:02 +0330 Subject: [PATCH 308/527] +1 icon (#2294) * added Beanconqueror * updated svg * Fix * Minor fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 3 ++- svgs/beanconqueror.svg | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 svgs/beanconqueror.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b5742e7a647..7d396578232 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -954,6 +954,7 @@ + @@ -12377,6 +12378,7 @@ + @@ -12470,7 +12472,6 @@ - diff --git a/svgs/beanconqueror.svg b/svgs/beanconqueror.svg new file mode 100644 index 00000000000..8a743ef6a8c --- /dev/null +++ b/svgs/beanconqueror.svg @@ -0,0 +1 @@ + From 33db100912bbf4b77c218442bf5159ba12dd07d7 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:06:32 +0300 Subject: [PATCH 309/527] Lawnicons update, +14 links (#2306) --- app/assets/appfilter.xml | 52 ++++++++++++------- svgs/{gta_sa.svg => gta_san_andreas.svg} | 0 svgs/{gta_vc.svg => gta_vice_city.svg} | 0 svgs/lawnicons.svg | 2 +- ...off_invest.svg => tinkoff_investments.svg} | 0 ...craft.svg => toolbox_for_minecraft_pe.svg} | 0 6 files changed, 34 insertions(+), 20 deletions(-) rename svgs/{gta_sa.svg => gta_san_andreas.svg} (100%) rename svgs/{gta_vc.svg => gta_vice_city.svg} (100%) rename svgs/{tinkoff_invest.svg => tinkoff_investments.svg} (100%) rename svgs/{toolbox_for_minecraft.svg => toolbox_for_minecraft_pe.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 7d396578232..d58db01649e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -319,6 +319,7 @@ + @@ -389,6 +390,7 @@ + @@ -4079,6 +4081,7 @@ + @@ -4155,21 +4158,22 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -4814,6 +4818,7 @@ + @@ -5121,6 +5126,7 @@ + @@ -7219,6 +7225,7 @@ + @@ -7534,6 +7541,7 @@ + @@ -10646,8 +10654,9 @@ - - + + + @@ -10662,6 +10671,7 @@ + @@ -11793,6 +11803,8 @@ + + @@ -11893,6 +11905,7 @@ + @@ -12171,8 +12184,9 @@ - - + + + diff --git a/svgs/gta_sa.svg b/svgs/gta_san_andreas.svg similarity index 100% rename from svgs/gta_sa.svg rename to svgs/gta_san_andreas.svg diff --git a/svgs/gta_vc.svg b/svgs/gta_vice_city.svg similarity index 100% rename from svgs/gta_vc.svg rename to svgs/gta_vice_city.svg diff --git a/svgs/lawnicons.svg b/svgs/lawnicons.svg index 7f48dd1e280..1a5943746ba 100644 --- a/svgs/lawnicons.svg +++ b/svgs/lawnicons.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/tinkoff_invest.svg b/svgs/tinkoff_investments.svg similarity index 100% rename from svgs/tinkoff_invest.svg rename to svgs/tinkoff_investments.svg diff --git a/svgs/toolbox_for_minecraft.svg b/svgs/toolbox_for_minecraft_pe.svg similarity index 100% rename from svgs/toolbox_for_minecraft.svg rename to svgs/toolbox_for_minecraft_pe.svg From 43080ffd28417853354a9435f99c22d044314cee Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:18:26 +0800 Subject: [PATCH 310/527] Fix grid not showing on expanded devices --- .../ui/components/home/IconPreviewGrid.kt | 91 ++++++++++++------- 1 file changed, 57 insertions(+), 34 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 8dd5edfc33e..98284cb58a6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -33,6 +33,7 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf @@ -46,6 +47,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.scale import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R @@ -113,28 +115,28 @@ fun IconPreviewGrid( ) { AppBarListItem() } - items( - items = iconInfo, - contentType = { "icon_preview" }, - ) { iconInfo -> - val scale by animateFloatAsState( - if (thumbSelected && iconInfo.label.first() - .toString() == letter - ) { - 1.1f - } else { - 1f - }, - label = "", - ) - IconPreview( - modifier = Modifier - .scale(scale), - iconInfo = iconInfo, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) - } + } + items( + items = iconInfo, + contentType = { "icon_preview" }, + ) { iconInfo -> + val scale by animateFloatAsState( + if (thumbSelected && iconInfo.label.first() + .toString() == letter + ) { + 1.1f + } else { + 1f + }, + label = "", + ) + IconPreview( + modifier = Modifier + .scale(scale), + iconInfo = iconInfo, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) } } Box( @@ -204,11 +206,13 @@ private fun AppBarListItem(modifier: Modifier = Modifier) { Row( verticalAlignment = Alignment.CenterVertically, ) { - Image( - bitmap = context.appIcon().asImageBitmap(), - contentDescription = stringResource(id = R.string.app_name), - modifier = Modifier.size(36.dp), - ) + if (!LocalInspectionMode.current) { + Image( + bitmap = context.appIcon().asImageBitmap(), + contentDescription = stringResource(id = R.string.app_name), + modifier = Modifier.size(36.dp), + ) + } Spacer(modifier = Modifier.width(8.dp)) Text( stringResource(id = R.string.app_name), @@ -223,12 +227,31 @@ private fun AppBarListItem(modifier: Modifier = Modifier) { @Composable private fun IconGridPreview() { LawniconsTheme { - IconPreviewGrid( - SampleData.iconInfoList, - true, - {}, - Modifier, - false, - ) + Surface { + IconPreviewGrid( + iconInfo = SampleData.iconInfoList, + isExpandedScreen = false, + onSendResult = {}, + modifier = Modifier, + isIconPicker = false, + ) + } + } +} + +@OptIn(ExperimentalFoundationApi::class) +@PreviewLawnicons +@Composable +private fun IconGridExpandedPreview() { + LawniconsTheme { + Surface { + IconPreviewGrid( + iconInfo = SampleData.iconInfoList, + isExpandedScreen = true, + onSendResult = {}, + modifier = Modifier, + isIconPicker = false, + ) + } } } From 9ec06e57e745cf4bd8fa5ec9cd663eb5163ec883 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:27:57 +0800 Subject: [PATCH 311/527] Rename `onChange` to `toggle` --- .../app/lawnchair/lawnicons/repository/PreferenceManager.kt | 5 ++++- .../lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index 9a9e7a2a448..b641936f866 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -28,7 +28,7 @@ abstract class BasePreferenceManager( fun get() = prefs.getBoolean(key, defaultValue) fun set(value: Boolean) = editor.putBoolean(key, value).apply() - fun onChange() = set(!get()) + fun toggle() = set(!get()) @Composable fun asState(): State { @@ -39,6 +39,9 @@ abstract class BasePreferenceManager( } } prefs.registerOnSharedPreferenceChangeListener(listener) + awaitDispose { + prefs.unregisterOnSharedPreferenceChangeListener(listener) + } } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 2106ec0cd94..53dfd79868d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -159,7 +159,7 @@ fun RequestHandler( openSnackbarFirstLaunchContent( context, scope, - prefs.showFirstLaunchSnackbar::onChange, + prefs.showFirstLaunchSnackbar::toggle, snackbarHostState, ) } From 5155f127830fa02bbbb8dbe9a09472fb64c6ab5a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 08:23:44 +0800 Subject: [PATCH 312/527] Update Kotlin and KSP (#2307) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e720ad5decd..1fb5382ed6d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -153,7 +153,7 @@ dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") - implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7") + implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8") val hiltVersion = "2.52" implementation("com.google.dagger:hilt-android:$hiltVersion") diff --git a/build.gradle.kts b/build.gradle.kts index 5bb8a8f1fd1..85c2d418d08 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.20" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false - id("com.google.devtools.ksp") version "2.0.20-1.0.24" apply false + id("com.google.devtools.ksp") version "2.0.20-1.0.25" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From f401a40db060eb759f96e2b03030158abc319973 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Fri, 6 Sep 2024 06:16:04 -0400 Subject: [PATCH 313/527] Rearrange nav destinations (#2284) --- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 79 ++++----- .../lawnicons/ui/destination/About.kt | 166 ++++++++++-------- .../ui/destination/Acknowledgement.kt | 26 ++- .../ui/destination/Acknowledgements.kt | 22 ++- .../lawnicons/ui/destination/Contributors.kt | 25 ++- .../lawnicons/ui/destination/Home.kt | 24 ++- .../lawnicons/ui/util/Destinations.kt | 18 -- 7 files changed, 217 insertions(+), 143 deletions(-) delete mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 5fa7cc626f1..5562654a521 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -9,20 +9,18 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.LayoutDirection import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import androidx.navigation.toRoute import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.ui.destination.About import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements import app.lawnchair.lawnicons.ui.destination.Contributors import app.lawnchair.lawnicons.ui.destination.Home -import app.lawnchair.lawnicons.ui.util.About -import app.lawnchair.lawnicons.ui.util.Acknowledgement -import app.lawnchair.lawnicons.ui.util.Acknowledgements -import app.lawnchair.lawnicons.ui.util.Contributors -import app.lawnchair.lawnicons.ui.util.Home +import app.lawnchair.lawnicons.ui.destination.aboutDestination +import app.lawnchair.lawnicons.ui.destination.acknowledgementDestination +import app.lawnchair.lawnicons.ui.destination.acknowledgementsDestination +import app.lawnchair.lawnicons.ui.destination.contributorsDestination +import app.lawnchair.lawnicons.ui.destination.homeDestination import soup.compose.material.motion.animation.materialSharedAxisXIn import soup.compose.material.motion.animation.materialSharedAxisXOut import soup.compose.material.motion.animation.rememberSlideDistance @@ -50,42 +48,37 @@ fun Lawnicons( popEnterTransition = { materialSharedAxisXIn(isRtl, slideDistance) }, popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, ) { - composable { - Home( - onNavigate = { navController.navigate(About) }, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - onSendResult = onSendResult, - ) - } - composable { - Acknowledgements( - onBack = navController::popBackStack, - onNavigate = { - navController.navigate(Acknowledgement(it)) - }, - isExpandedScreen = isExpandedScreen, - ) - } - composable { backStackEntry -> - val acknowledgement: Acknowledgement = backStackEntry.toRoute() - Acknowledgement( - name = acknowledgement.id, - onBack = navController::popBackStack, - isExpandedScreen = isExpandedScreen, - ) - } - composable { - About( - onBack = navController::popBackStack, - onNavigateToContributors = { navController.navigate(Contributors) }, - onNavigateToAcknowledgements = { navController.navigate(Acknowledgements) }, - isExpandedScreen = isExpandedScreen, - ) - } - composable { - Contributors(onBack = navController::popBackStack, isExpandedScreen = isExpandedScreen) - } + homeDestination( + onNavigate = { navController.navigate(About) }, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + acknowledgementsDestination( + onBack = navController::popBackStack, + onNavigate = { + navController.navigate(Acknowledgement(it)) + }, + isExpandedScreen = isExpandedScreen, + ) + acknowledgementDestination( + onBack = navController::popBackStack, + isExpandedScreen = isExpandedScreen, + ) + aboutDestination( + onBack = navController::popBackStack, + onNavigateToContributors = { + navController.navigate(Contributors) + }, + onNavigateToAcknowledgements = { + navController.navigate(Acknowledgements) + }, + isExpandedScreen = isExpandedScreen, + ) + contributorsDestination( + onBack = navController::popBackStack, + isExpandedScreen = isExpandedScreen, + ) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 68a70354255..8f94c65b0e0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -25,6 +25,8 @@ import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable import app.lawnchair.lawnicons.BuildConfig import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.ui.components.ContributorRow @@ -38,82 +40,29 @@ import app.lawnchair.lawnicons.ui.util.Contributor import app.lawnchair.lawnicons.ui.util.ExternalLink import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.util.appIcon +import kotlinx.serialization.Serializable -private val externalLinks = listOf( - ExternalLink( - iconResId = R.drawable.github_foreground, - name = R.string.github, - url = Constants.GITHUB, - ), - ExternalLink( - iconResId = R.drawable.icon_request_app, - name = R.string.request_form, - url = Constants.ICON_REQUEST_FORM, - ), -) +@Serializable +data object About -private val coreContributors = listOf( - Contributor( - name = "Suphon T.", - username = "paphonb", - photoUrl = "https://avatars.githubusercontent.com/u/8080853", - socialUrl = "https://x.com/paphonb", - descriptionRes = R.string.contribution_core, - ), - Contributor( - name = "SuperDragonXD", - username = "SuperDragonXD", - photoUrl = "https://avatars.githubusercontent.com/u/70206496", - socialUrl = "https://github.com/SuperDragonXD", - descriptionRes = R.string.contribution_core, - ), - Contributor( - name = "Patryk Radziszewski", - username = "Chefski", - photoUrl = "https://avatars.githubusercontent.com/u/100310118", - socialUrl = "https://github.com/Chefski", - descriptionRes = R.string.contribution_icons, - ), - Contributor( - name = "Gleb", - username = "x9136", - photoUrl = "https://avatars.githubusercontent.com/u/60105060", - socialUrl = "https://github.com/x9136", - descriptionRes = R.string.contribution_icons, - ), - Contributor( - name = "Grabster", - username = "Grabstertv", - photoUrl = "https://avatars.githubusercontent.com/u/49114212", - socialUrl = "https://x.com/grabstertv", - descriptionRes = R.string.contribution_icons, - ), - Contributor( - name = "Zongle Wang", - username = "Goooler", - photoUrl = "https://avatars.githubusercontent.com/u/10363352", - socialUrl = "https://androiddev.social/@Goooler", - descriptionRes = R.string.contribution_infra, - ), -) - -private val specialThanks = listOf( - Contributor( - name = "Eatos", - photoUrl = "https://avatars.githubusercontent.com/u/52837599", - socialUrl = "https://x.com/eatosapps", - descriptionRes = R.string.special_thanks_icon, - ), - Contributor( - name = "Rik Koedoot", - photoUrl = "https://avatars.githubusercontent.com/u/29402532", - username = "rikkoedoot", - descriptionRes = R.string.special_thanks_name, - ), -) +fun NavGraphBuilder.aboutDestination( + onBack: () -> Unit, + onNavigateToContributors: () -> Unit, + onNavigateToAcknowledgements: () -> Unit, + isExpandedScreen: Boolean, +) { + composable { + About( + onBack = onBack, + onNavigateToContributors = onNavigateToContributors, + onNavigateToAcknowledgements = onNavigateToAcknowledgements, + isExpandedScreen = isExpandedScreen, + ) + } +} @Composable -fun About( +private fun About( onBack: () -> Unit, onNavigateToContributors: () -> Unit, onNavigateToAcknowledgements: () -> Unit, @@ -238,6 +187,79 @@ fun About( } } +private val externalLinks = listOf( + ExternalLink( + iconResId = R.drawable.github_foreground, + name = R.string.github, + url = Constants.GITHUB, + ), + ExternalLink( + iconResId = R.drawable.icon_request_app, + name = R.string.request_form, + url = Constants.ICON_REQUEST_FORM, + ), +) + +private val coreContributors = listOf( + Contributor( + name = "Suphon T.", + username = "paphonb", + photoUrl = "https://avatars.githubusercontent.com/u/8080853", + socialUrl = "https://x.com/paphonb", + descriptionRes = R.string.contribution_core, + ), + Contributor( + name = "SuperDragonXD", + username = "SuperDragonXD", + photoUrl = "https://avatars.githubusercontent.com/u/70206496", + socialUrl = "https://github.com/SuperDragonXD", + descriptionRes = R.string.contribution_core, + ), + Contributor( + name = "Patryk Radziszewski", + username = "Chefski", + photoUrl = "https://avatars.githubusercontent.com/u/100310118", + socialUrl = "https://github.com/Chefski", + descriptionRes = R.string.contribution_icons, + ), + Contributor( + name = "Gleb", + username = "x9136", + photoUrl = "https://avatars.githubusercontent.com/u/60105060", + socialUrl = "https://github.com/x9136", + descriptionRes = R.string.contribution_icons, + ), + Contributor( + name = "Grabster", + username = "Grabstertv", + photoUrl = "https://avatars.githubusercontent.com/u/49114212", + socialUrl = "https://x.com/grabstertv", + descriptionRes = R.string.contribution_icons, + ), + Contributor( + name = "Zongle Wang", + username = "Goooler", + photoUrl = "https://avatars.githubusercontent.com/u/10363352", + socialUrl = "https://androiddev.social/@Goooler", + descriptionRes = R.string.contribution_infra, + ), +) + +private val specialThanks = listOf( + Contributor( + name = "Eatos", + photoUrl = "https://avatars.githubusercontent.com/u/52837599", + socialUrl = "https://x.com/eatosapps", + descriptionRes = R.string.special_thanks_icon, + ), + Contributor( + name = "Rik Koedoot", + photoUrl = "https://avatars.githubusercontent.com/u/29402532", + username = "rikkoedoot", + descriptionRes = R.string.special_thanks_name, + ), +) + @PreviewLawnicons @Composable private fun AboutPreview() { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt index 3e3f492eab2..23347bf7207 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgement.kt @@ -28,22 +28,40 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.placeholder.PlaceholderHighlight import app.lawnchair.lawnicons.ui.components.core.placeholder.fade import app.lawnchair.lawnicons.ui.components.core.placeholder.placeholder import app.lawnchair.lawnicons.viewmodel.AcknowledgementViewModel +import kotlinx.serialization.Serializable + +@Serializable +data class Acknowledgement(val id: String) + +fun NavGraphBuilder.acknowledgementDestination( + isExpandedScreen: Boolean, + onBack: () -> Unit, +) { + composable { backStackEntry -> + Acknowledgement( + name = backStackEntry.toRoute().id, + onBack = onBack, + isExpandedScreen = isExpandedScreen, + ) + } +} @Composable -fun Acknowledgement( - name: String?, +private fun Acknowledgement( + name: String, onBack: () -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, acknowledgementViewModel: AcknowledgementViewModel = hiltViewModel(), ) { - requireNotNull(name) - val notice by acknowledgementViewModel.getNoticeForOssLibrary( ossLibraryName = name, linkStyle = SpanStyle( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt index 215dade5260..7667df30df2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Acknowledgements.kt @@ -14,13 +14,33 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold import app.lawnchair.lawnicons.ui.components.core.SimpleListRow import app.lawnchair.lawnicons.viewmodel.AcknowledgementViewModel +import kotlinx.serialization.Serializable + +@Serializable +data object Acknowledgements + +fun NavGraphBuilder.acknowledgementsDestination( + isExpandedScreen: Boolean, + onBack: () -> Unit, + onNavigate: (String) -> Unit, +) { + composable { + Acknowledgements( + onBack = onBack, + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + ) + } +} @Composable -fun Acknowledgements( +private fun Acknowledgements( onBack: () -> Unit, onNavigate: (String) -> Unit, isExpandedScreen: Boolean, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt index 76c0990c29a..9d97ab59b16 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt @@ -20,6 +20,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.GitHubContributor import app.lawnchair.lawnicons.ui.components.ContributorRow @@ -33,11 +35,25 @@ import app.lawnchair.lawnicons.viewmodel.ContributorsUiState import app.lawnchair.lawnicons.viewmodel.ContributorsViewModel import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf +import kotlinx.serialization.Serializable -const val CONTRIBUTOR_URL = "${Constants.GITHUB}/graphs/contributors" +@Serializable +data object Contributors + +fun NavGraphBuilder.contributorsDestination( + onBack: () -> Unit, + isExpandedScreen: Boolean, +) { + composable { + Contributors( + onBack = onBack, + isExpandedScreen = isExpandedScreen, + ) + } +} @Composable -fun Contributors( +private fun Contributors( onBack: () -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, @@ -158,13 +174,14 @@ private fun ContributorListError( SideEffect { onBack() // we might be rate-limited, open the web ui instead - val website = - Uri.parse(CONTRIBUTOR_URL) + val website = Uri.parse(CONTRIBUTOR_URL) val intent = Intent(Intent.ACTION_VIEW, website) context.startActivity(intent) } } +private const val CONTRIBUTOR_URL = "${Constants.GITHUB}/graphs/contributors" + @PreviewLawnicons @Composable private fun ContributorsScreenPreview() { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 7fcf0b211ae..e4af608c7db 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -24,6 +24,8 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar @@ -39,11 +41,31 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel import kotlinx.collections.immutable.toImmutableList +import kotlinx.serialization.Serializable + +@Serializable +data object Home + +fun NavGraphBuilder.homeDestination( + isExpandedScreen: Boolean, + isIconPicker: Boolean, + onNavigate: () -> Unit, + onSendResult: (IconInfo) -> Unit, +) { + composable { + Home( + onNavigate = onNavigate, + isExpandedScreen = isExpandedScreen, + isIconPicker = isIconPicker, + onSendResult = onSendResult, + ) + } +} @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) @Composable -fun Home( +private fun Home( onNavigate: () -> Unit, onSendResult: (IconInfo) -> Unit, isExpandedScreen: Boolean, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt deleted file mode 100644 index bcc6846dac0..00000000000 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Destinations.kt +++ /dev/null @@ -1,18 +0,0 @@ -package app.lawnchair.lawnicons.ui.util - -import kotlinx.serialization.Serializable - -@Serializable -object Home - -@Serializable -object About - -@Serializable -object Acknowledgements - -@Serializable -object Contributors - -@Serializable -data class Acknowledgement(val id: String) From a966f8502aab0507d40eeb3d20a2a7eb2d7a3b89 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Fri, 6 Sep 2024 06:40:47 -0400 Subject: [PATCH 314/527] Mark stable classes and enable Compose Compiler reports (#2280) * Remove org.jetbrains.kotlinx:kotlinx-collections-immutable * Enable stabilityConfigurationFile and reportsDestination https://developer.android.com/develop/ui/compose/performance/stability/fix#configuration-file --- app/build.gradle.kts | 6 +++++- app/compose_compiler_config.conf | 7 +++++++ .../app/lawnchair/lawnicons/model/IconInfoModel.kt | 6 ++---- .../lawnchair/lawnicons/model/IconRequestModel.kt | 4 +--- .../lawnicons/repository/IconRepository.kt | 13 +++++-------- .../lawnicons/ui/components/home/IconPreviewGrid.kt | 3 +-- .../ui/components/home/search/SearchContents.kt | 5 ++--- .../lawnicons/ui/destination/Contributors.kt | 8 +++----- .../app/lawnchair/lawnicons/ui/destination/Home.kt | 3 +-- .../app/lawnchair/lawnicons/ui/util/PreviewUtils.kt | 3 +-- .../lawnicons/viewmodel/ContributorsViewModel.kt | 8 +++----- 11 files changed, 31 insertions(+), 35 deletions(-) create mode 100644 app/compose_compiler_config.conf diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1fb5382ed6d..ca1b7c15666 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -131,6 +131,11 @@ tasks.withType().configureEach { dependsOn(projects.svgProcessor.dependencyProject.tasks.named("run")) } +composeCompiler { + stabilityConfigurationFile = layout.projectDirectory.file("compose_compiler_config.conf") + reportsDestination = layout.buildDirectory.dir("compose_build_reports") +} + licensee { allow("Apache-2.0") allow("MIT") @@ -153,7 +158,6 @@ dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") - implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8") val hiltVersion = "2.52" implementation("com.google.dagger:hilt-android:$hiltVersion") diff --git a/app/compose_compiler_config.conf b/app/compose_compiler_config.conf new file mode 100644 index 00000000000..ac70d690a9f --- /dev/null +++ b/app/compose_compiler_config.conf @@ -0,0 +1,7 @@ +kotlin.collections.* +kotlin.time.Duration + +kotlinx.coroutines.CoroutineScope + +// All models should be stable. +app.lawnchair.lawnicons.model.* diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt index 716402f815f..1d918d14b3b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfoModel.kt @@ -1,7 +1,5 @@ package app.lawnchair.lawnicons.model -import kotlinx.collections.immutable.ImmutableList - /** * Data class to hold information about icons. * @@ -9,6 +7,6 @@ import kotlinx.collections.immutable.ImmutableList * @property iconCount The total number of icons. */ data class IconInfoModel( - val iconInfo: ImmutableList, - val iconCount: Int, + val iconInfo: List = emptyList(), + val iconCount: Int = 0, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt index d26f7f76115..4de30e1ef5b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestModel.kt @@ -1,13 +1,11 @@ package app.lawnchair.lawnicons.model -import kotlinx.collections.immutable.ImmutableList - data class IconRequest( val label: String, val componentName: String, ) data class IconRequestModel( - val list: ImmutableList, + val list: List, val iconCount: Int, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index c03ddb1cf28..1de7e4e4ee8 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -12,9 +12,6 @@ import app.lawnchair.lawnicons.model.splitByComponentName import app.lawnchair.lawnicons.util.getIconInfo import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter import javax.inject.Inject -import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow @@ -36,10 +33,10 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep private val coroutineScope = CoroutineScope(Dispatchers.IO) - private val _iconInfoModel = MutableStateFlow(IconInfoModel(persistentListOf(), 0)) + private val _iconInfoModel = MutableStateFlow(IconInfoModel()) override val iconInfoModel = _iconInfoModel.asStateFlow() - private val _searchedIconInfoModel = MutableStateFlow(IconInfoModel(persistentListOf(), 0)) + private val _searchedIconInfoModel = MutableStateFlow(IconInfoModel()) override val searchedIconInfoModel = _searchedIconInfoModel.asStateFlow() override val iconRequestList = MutableStateFlow(value = null) @@ -51,7 +48,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep val iconCount = groupedIcons.size _iconInfoModel.value = IconInfoModel( - iconInfo = iconList.toPersistentList(), + iconInfo = iconList, iconCount = iconCount, ) _searchedIconInfoModel.value = _iconInfoModel.value @@ -92,7 +89,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep ), ).map { searchInfo -> searchInfo.iconInfo - }.toPersistentList() + } _searchedIconInfoModel.value = IconInfoModel( iconCount = _searchedIconInfoModel.value.iconCount, @@ -127,7 +124,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep } iconRequestList.value = IconRequestModel( - list = commonItems.toImmutableList(), + list = commonItems, iconCount = commonItems.size, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 98284cb58a6..3821e3e60fb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -57,7 +57,6 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.toPaddingValues import app.lawnchair.lawnicons.util.appIcon -import kotlinx.collections.immutable.ImmutableList import my.nanihadesuka.compose.InternalLazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSelectionMode import my.nanihadesuka.compose.ScrollbarSettings @@ -65,7 +64,7 @@ import my.nanihadesuka.compose.ScrollbarSettings @Composable @ExperimentalFoundationApi fun IconPreviewGrid( - iconInfo: ImmutableList, + iconInfo: List, isExpandedScreen: Boolean, onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index bd919f75d08..62b18cf9e61 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -43,14 +43,13 @@ import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.model.getFirstLabelAndComponent import app.lawnchair.lawnicons.ui.components.home.IconInfoSheet import app.lawnchair.lawnicons.ui.components.home.IconPreview -import kotlinx.collections.immutable.ImmutableList @Composable fun SearchContents( searchTerm: String, searchMode: SearchMode, onModeChange: (SearchMode) -> Unit, - iconInfo: ImmutableList, + iconInfo: List, modifier: Modifier = Modifier, onSendResult: (IconInfo) -> Unit = {}, ) { @@ -167,7 +166,7 @@ fun SearchContents( } @Composable -private fun IconInfoListItem(iconInfo: ImmutableList) { +private fun IconInfoListItem(iconInfo: List) { Column( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt index 9d97ab59b16..124c0c8b5a1 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt @@ -33,8 +33,6 @@ import app.lawnchair.lawnicons.ui.util.Constants import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.viewmodel.ContributorsUiState import app.lawnchair.lawnicons.viewmodel.ContributorsViewModel -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf import kotlinx.serialization.Serializable @Serializable @@ -111,7 +109,7 @@ fun Contributors( @Composable private fun ContributorList( - contributors: ImmutableList, + contributors: List, modifier: Modifier = Modifier, contentPadding: PaddingValues = PaddingValues(), ) { @@ -185,7 +183,7 @@ private const val CONTRIBUTOR_URL = "${Constants.GITHUB}/graphs/contributors" @PreviewLawnicons @Composable private fun ContributorsScreenPreview() { - val contributors = persistentListOf( + val contributors = listOf( GitHubContributor( id = 1, login = "Example", @@ -219,7 +217,7 @@ private fun ContributorsScreenLoadingPreview() { @PreviewLawnicons @Composable private fun ContributorListPreview() { - val contributors = persistentListOf( + val contributors = listOf( GitHubContributor( id = 1, login = "Example", diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index e4af608c7db..a257463e19f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -40,7 +40,6 @@ import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel -import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.Serializable @Serializable @@ -196,7 +195,7 @@ private fun HomePreview() { }, ) IconPreviewGrid( - iconInfo = iconInfo.toImmutableList(), + iconInfo = iconInfo, isExpandedScreen = false, {}, Modifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt index 1e7543669b7..88f2c55b70b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/PreviewUtils.kt @@ -5,7 +5,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Wallpapers import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.LabelAndComponent -import kotlinx.collections.immutable.persistentListOf @Preview( name = "Normal", @@ -39,7 +38,7 @@ object SampleData { ), id = 1, ) - val iconInfoList = persistentListOf( + val iconInfoList = listOf( IconInfo( drawableName = "@drawable/email", componentNames = listOf( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/ContributorsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/ContributorsViewModel.kt index f5dd2d57a52..c17cc568c0b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/ContributorsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/ContributorsViewModel.kt @@ -7,8 +7,6 @@ import app.lawnchair.lawnicons.model.GitHubContributor import app.lawnchair.lawnicons.repository.GitHubContributorsRepository import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.map @@ -19,7 +17,7 @@ import kotlinx.coroutines.launch sealed interface ContributorsUiState { data class Success( - val contributors: ImmutableList, + val contributors: List, ) : ContributorsUiState data object Loading : ContributorsUiState @@ -28,7 +26,7 @@ sealed interface ContributorsUiState { private data class ContributorsViewModelState( val isRefreshing: Boolean, - val contributors: ImmutableList? = null, + val contributors: List? = null, val hasError: Boolean = false, ) { fun toUiState(): ContributorsUiState = when { @@ -63,7 +61,7 @@ class ContributorsViewModel @Inject constructor( when { result.isSuccess -> it.copy( isRefreshing = false, - contributors = result.getOrThrow().toPersistentList(), + contributors = result.getOrThrow(), hasError = false, ) From c53cc4a2770b2327c249953db9728eb53c21a6d5 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 6 Sep 2024 14:38:55 +0300 Subject: [PATCH 315/527] New issue: Add a link to an existing icon (#2283) * New issue: Add a link to an existing icon * Update .github/ISSUE_TEMPLATE/config.yml * Update .github/ISSUE_TEMPLATE/config.yml Co-authored-by: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> --------- Co-authored-by: Zongle Wang Co-authored-by: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 637761d9d26..214528c627e 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,8 @@ blank_issues_enabled: false contact_links: + - name: Link apps to existing icons + url: https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md#adding-an-icon-to-lawnicons + about: Learn more about linking an app to an existing icon and making a PR to contribute to Lawnicons. - name: Icon Request url: https://forms.gle/xt7sJhgWEasuo9TR9 about: Please request your icons in this form. From dbd28e324991693b7c73bffc2b641c057cf66c35 Mon Sep 17 00:00:00 2001 From: juman-y <80329028+juman-y@users.noreply.github.com> Date: Fri, 6 Sep 2024 14:52:27 +0000 Subject: [PATCH 316/527] Add Infinity for Reddit link (#2309) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index d58db01649e..14c6fee4060 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4573,6 +4573,7 @@ + From 0e5ce9c3d90e431a6c04304cc7852017c1a26502 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 8 Sep 2024 02:22:58 +0300 Subject: [PATCH 317/527] [Barter 5] +100 icons: Bybit, My Huawei, Wa Enhancer (#2310) --- app/assets/appfilter.xml | 103 +++++++++++++++++++++++++ svgs/_1weather.svg | 1 + svgs/adda247.svg | 1 + svgs/adidas.svg | 2 +- svgs/adidas_running.svg | 1 + svgs/agc_toolkit.svg | 1 + svgs/ai_wallpapers.svg | 1 + svgs/ar_art_projector.svg | 1 + svgs/blackmagic_camera.svg | 1 + svgs/block_blast.svg | 1 + svgs/brilliant.svg | 1 + svgs/bybit.svg | 1 + svgs/calculator_you.svg | 1 + svgs/capturesposed.svg | 1 + svgs/chalo.svg | 1 + svgs/clearscore.svg | 1 + svgs/click_to_chat.svg | 1 + svgs/crayon_icons.svg | 1 + svgs/day_one_journal.svg | 1 + svgs/dr_web.svg | 1 + svgs/evernote.svg | 1 + svgs/flow_free.svg | 1 + svgs/folax.svg | 1 + svgs/fold.svg | 1 + svgs/g_cpu.svg | 1 + svgs/geometry_dash_meltdown.svg | 1 + svgs/giphy.svg | 1 + svgs/glassdoor.svg | 1 + svgs/healthy_battery_charging.svg | 1 + svgs/huawei_appassistant.svg | 1 + svgs/huawei_optimizer.svg | 1 + svgs/huawei_themes.svg | 1 + svgs/huawei_weather.svg | 1 + svgs/hyperos_downloader.svg | 1 + svgs/hypic.svg | 1 + svgs/iliad_visual_voicemail.svg | 1 + svgs/intel_unison.svg | 1 + svgs/iyps.svg | 1 + svgs/jetpack_joyride.svg | 1 + svgs/jumia.svg | 1 + svgs/koda_for_kustom.svg | 1 + svgs/livescore.svg | 1 + svgs/mach.svg | 1 + svgs/magisk_module_repo_loader.svg | 1 + svgs/mail_ru.svg | 1 + svgs/mcpedl_for_minecraft.svg | 1 + svgs/mi_mover.svg | 1 + svgs/mi_personal_flow.svg | 1 + svgs/mobile_data_consumption.svg | 1 + svgs/mobile_jkn.svg | 1 + svgs/modern_warships.svg | 1 + svgs/modo.svg | 1 + svgs/moto_unplugged.svg | 1 + svgs/musclewiki.svg | 1 + svgs/muslim_pro.svg | 1 + svgs/my_apps_time.svg | 1 + svgs/my_huawei.svg | 1 + svgs/my_zong.svg | 1 + svgs/national_train_enquiry_system.svg | 1 + svgs/native_alpha_plus.svg | 1 + svgs/nays.svg | 1 + svgs/nothing_icons.svg | 1 + svgs/octohide_vpn.svg | 1 + svgs/offline_games.svg | 1 + svgs/onecard.svg | 1 + svgs/onescore.svg | 1 + svgs/overmorrow_weather.svg | 1 + svgs/pixel_launcher.svg | 1 + svgs/plato.svg | 1 + svgs/playhub.svg | 1 + svgs/qanda.svg | 1 + svgs/qralarm.svg | 1 + svgs/quikshort.svg | 1 + svgs/rappi.svg | 1 + svgs/regain.svg | 1 + svgs/ring.svg | 1 + svgs/round_sync.svg | 1 + svgs/screen_orientation_control.svg | 1 + svgs/sd_maid.svg | 2 +- svgs/sd_maid_1_pro.svg | 1 + svgs/shelf.svg | 1 + svgs/simosa.svg | 1 + svgs/spin_the_wheel.svg | 1 + svgs/storage_saver.svg | 1 + svgs/super_money.svg | 1 + svgs/supreme_duelist.svg | 1 + svgs/syphon.svg | 1 + svgs/t_mobile_visual_voicemail.svg | 1 + svgs/tecno_spot.svg | 1 + svgs/ten_ten.svg | 1 + svgs/thunder_vpn.svg | 1 + svgs/ts_news_plus.svg | 1 + svgs/update_me.svg | 1 + svgs/v_appstore.svg | 1 + svgs/vivo_feedback.svg | 1 + svgs/wa_enhancer.svg | 1 + svgs/wear_installer_2.svg | 1 + svgs/welife.svg | 1 + svgs/work_log.svg | 1 + svgs/x_vpn.svg | 1 + svgs/yearly_progress.svg | 1 + svgs/youtube_adaway.svg | 1 + svgs/zenless_zone_zero.svg | 1 + 103 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 svgs/_1weather.svg create mode 100644 svgs/adda247.svg create mode 100644 svgs/adidas_running.svg create mode 100644 svgs/agc_toolkit.svg create mode 100644 svgs/ai_wallpapers.svg create mode 100644 svgs/ar_art_projector.svg create mode 100644 svgs/blackmagic_camera.svg create mode 100644 svgs/block_blast.svg create mode 100644 svgs/brilliant.svg create mode 100644 svgs/bybit.svg create mode 100644 svgs/calculator_you.svg create mode 100644 svgs/capturesposed.svg create mode 100644 svgs/chalo.svg create mode 100644 svgs/clearscore.svg create mode 100644 svgs/click_to_chat.svg create mode 100644 svgs/crayon_icons.svg create mode 100644 svgs/day_one_journal.svg create mode 100644 svgs/dr_web.svg create mode 100644 svgs/evernote.svg create mode 100644 svgs/flow_free.svg create mode 100644 svgs/folax.svg create mode 100644 svgs/fold.svg create mode 100644 svgs/g_cpu.svg create mode 100644 svgs/geometry_dash_meltdown.svg create mode 100644 svgs/giphy.svg create mode 100644 svgs/glassdoor.svg create mode 100644 svgs/healthy_battery_charging.svg create mode 100644 svgs/huawei_appassistant.svg create mode 100644 svgs/huawei_optimizer.svg create mode 100644 svgs/huawei_themes.svg create mode 100644 svgs/huawei_weather.svg create mode 100644 svgs/hyperos_downloader.svg create mode 100644 svgs/hypic.svg create mode 100644 svgs/iliad_visual_voicemail.svg create mode 100644 svgs/intel_unison.svg create mode 100644 svgs/iyps.svg create mode 100644 svgs/jetpack_joyride.svg create mode 100644 svgs/jumia.svg create mode 100644 svgs/koda_for_kustom.svg create mode 100644 svgs/livescore.svg create mode 100644 svgs/mach.svg create mode 100644 svgs/magisk_module_repo_loader.svg create mode 100644 svgs/mail_ru.svg create mode 100644 svgs/mcpedl_for_minecraft.svg create mode 100644 svgs/mi_mover.svg create mode 100644 svgs/mi_personal_flow.svg create mode 100644 svgs/mobile_data_consumption.svg create mode 100644 svgs/mobile_jkn.svg create mode 100644 svgs/modern_warships.svg create mode 100644 svgs/modo.svg create mode 100644 svgs/moto_unplugged.svg create mode 100644 svgs/musclewiki.svg create mode 100644 svgs/muslim_pro.svg create mode 100644 svgs/my_apps_time.svg create mode 100644 svgs/my_huawei.svg create mode 100644 svgs/my_zong.svg create mode 100644 svgs/national_train_enquiry_system.svg create mode 100644 svgs/native_alpha_plus.svg create mode 100644 svgs/nays.svg create mode 100644 svgs/nothing_icons.svg create mode 100644 svgs/octohide_vpn.svg create mode 100644 svgs/offline_games.svg create mode 100644 svgs/onecard.svg create mode 100644 svgs/onescore.svg create mode 100644 svgs/overmorrow_weather.svg create mode 100644 svgs/pixel_launcher.svg create mode 100644 svgs/plato.svg create mode 100644 svgs/playhub.svg create mode 100644 svgs/qanda.svg create mode 100644 svgs/qralarm.svg create mode 100644 svgs/quikshort.svg create mode 100644 svgs/rappi.svg create mode 100644 svgs/regain.svg create mode 100644 svgs/ring.svg create mode 100644 svgs/round_sync.svg create mode 100644 svgs/screen_orientation_control.svg create mode 100644 svgs/sd_maid_1_pro.svg create mode 100644 svgs/shelf.svg create mode 100644 svgs/simosa.svg create mode 100644 svgs/spin_the_wheel.svg create mode 100644 svgs/storage_saver.svg create mode 100644 svgs/super_money.svg create mode 100644 svgs/supreme_duelist.svg create mode 100644 svgs/syphon.svg create mode 100644 svgs/t_mobile_visual_voicemail.svg create mode 100644 svgs/tecno_spot.svg create mode 100644 svgs/ten_ten.svg create mode 100644 svgs/thunder_vpn.svg create mode 100644 svgs/ts_news_plus.svg create mode 100644 svgs/update_me.svg create mode 100644 svgs/v_appstore.svg create mode 100644 svgs/vivo_feedback.svg create mode 100644 svgs/wa_enhancer.svg create mode 100644 svgs/wear_installer_2.svg create mode 100644 svgs/welife.svg create mode 100644 svgs/work_log.svg create mode 100644 svgs/x_vpn.svg create mode 100644 svgs/yearly_progress.svg create mode 100644 svgs/youtube_adaway.svg create mode 100644 svgs/zenless_zone_zero.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 14c6fee4060..578bdb4be14 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -61,6 +61,7 @@ + @@ -175,6 +176,7 @@ + @@ -191,6 +193,7 @@ + @@ -233,6 +236,7 @@ + @@ -246,6 +250,7 @@ + @@ -649,6 +654,7 @@ + @@ -1111,6 +1117,7 @@ + @@ -1137,6 +1144,7 @@ + @@ -1295,6 +1303,7 @@ + @@ -1434,6 +1443,7 @@ + @@ -1507,6 +1517,7 @@ + @@ -1760,6 +1771,7 @@ + @@ -1837,6 +1849,7 @@ + @@ -1974,9 +1987,11 @@ + + @@ -2327,6 +2342,7 @@ + @@ -2431,6 +2447,7 @@ + @@ -2791,6 +2808,7 @@ + @@ -3087,6 +3105,7 @@ + @@ -3443,6 +3462,7 @@ + @@ -3491,6 +3511,8 @@ + + @@ -3636,6 +3658,7 @@ + @@ -3796,6 +3819,7 @@ + @@ -3833,6 +3857,7 @@ + @@ -3841,6 +3866,7 @@ + @@ -4244,6 +4270,7 @@ + @@ -4376,6 +4403,7 @@ + @@ -4386,11 +4414,14 @@ + + + @@ -4408,6 +4439,8 @@ + + @@ -4495,6 +4528,7 @@ + @@ -4642,6 +4676,7 @@ + @@ -4717,6 +4752,7 @@ + @@ -4749,6 +4785,7 @@ + @@ -4792,6 +4829,7 @@ + @@ -5036,6 +5074,7 @@ + @@ -5322,6 +5361,7 @@ + @@ -5400,6 +5440,7 @@ + @@ -5440,6 +5481,7 @@ + @@ -5455,6 +5497,7 @@ + @@ -5589,6 +5632,7 @@ + @@ -5803,6 +5847,7 @@ + @@ -5811,6 +5856,7 @@ + @@ -6014,8 +6060,10 @@ + + @@ -6031,6 +6079,8 @@ + + @@ -6123,6 +6173,7 @@ + @@ -6168,6 +6219,7 @@ + @@ -6211,6 +6263,7 @@ + @@ -6245,6 +6298,7 @@ + @@ -6267,6 +6321,7 @@ + @@ -6343,6 +6398,7 @@ + @@ -6480,8 +6536,10 @@ + + @@ -6495,6 +6553,7 @@ + @@ -6721,6 +6780,7 @@ + @@ -6859,6 +6919,7 @@ + @@ -6877,6 +6938,7 @@ + @@ -6979,6 +7041,7 @@ + @@ -7014,6 +7077,7 @@ + @@ -7157,6 +7221,7 @@ + @@ -7643,6 +7708,9 @@ + + + @@ -7731,11 +7799,13 @@ + + @@ -8007,6 +8077,7 @@ + @@ -8069,6 +8140,7 @@ + @@ -8096,6 +8168,7 @@ + @@ -8181,6 +8254,7 @@ + @@ -8308,6 +8382,7 @@ + @@ -8409,6 +8484,7 @@ + @@ -8456,6 +8532,7 @@ + @@ -8714,6 +8791,7 @@ + @@ -8733,6 +8811,7 @@ + @@ -8905,6 +8984,7 @@ + @@ -9022,6 +9102,7 @@ + @@ -9704,6 +9785,7 @@ + @@ -9860,6 +9942,7 @@ + @@ -9938,6 +10021,7 @@ + @@ -9952,6 +10036,7 @@ + @@ -10025,6 +10110,7 @@ + @@ -10038,6 +10124,7 @@ + @@ -10141,6 +10228,7 @@ + @@ -10229,6 +10317,7 @@ + @@ -10541,6 +10630,7 @@ + @@ -10805,6 +10895,7 @@ + @@ -11000,6 +11091,7 @@ + @@ -11046,6 +11138,7 @@ + @@ -11234,6 +11327,7 @@ + @@ -11335,6 +11429,8 @@ + + @@ -11411,6 +11507,7 @@ + @@ -11456,6 +11553,7 @@ + @@ -11703,6 +11801,7 @@ + @@ -11758,6 +11857,7 @@ + @@ -11848,6 +11948,7 @@ + @@ -11900,6 +12001,7 @@ + @@ -12006,6 +12108,7 @@ + diff --git a/svgs/_1weather.svg b/svgs/_1weather.svg new file mode 100644 index 00000000000..73f5c225423 --- /dev/null +++ b/svgs/_1weather.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/adda247.svg b/svgs/adda247.svg new file mode 100644 index 00000000000..9d79a897481 --- /dev/null +++ b/svgs/adda247.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/adidas.svg b/svgs/adidas.svg index 146895ce61f..7eba9ca5bc1 100644 --- a/svgs/adidas.svg +++ b/svgs/adidas.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/adidas_running.svg b/svgs/adidas_running.svg new file mode 100644 index 00000000000..09ba227fed1 --- /dev/null +++ b/svgs/adidas_running.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/agc_toolkit.svg b/svgs/agc_toolkit.svg new file mode 100644 index 00000000000..f45f4cfa5b1 --- /dev/null +++ b/svgs/agc_toolkit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ai_wallpapers.svg b/svgs/ai_wallpapers.svg new file mode 100644 index 00000000000..b104047f117 --- /dev/null +++ b/svgs/ai_wallpapers.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ar_art_projector.svg b/svgs/ar_art_projector.svg new file mode 100644 index 00000000000..df06137d7a6 --- /dev/null +++ b/svgs/ar_art_projector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/blackmagic_camera.svg b/svgs/blackmagic_camera.svg new file mode 100644 index 00000000000..0bcfc9d03be --- /dev/null +++ b/svgs/blackmagic_camera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/block_blast.svg b/svgs/block_blast.svg new file mode 100644 index 00000000000..10c50a35835 --- /dev/null +++ b/svgs/block_blast.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/brilliant.svg b/svgs/brilliant.svg new file mode 100644 index 00000000000..f89db8c850f --- /dev/null +++ b/svgs/brilliant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bybit.svg b/svgs/bybit.svg new file mode 100644 index 00000000000..526e9b2f431 --- /dev/null +++ b/svgs/bybit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/calculator_you.svg b/svgs/calculator_you.svg new file mode 100644 index 00000000000..2eb4ba38010 --- /dev/null +++ b/svgs/calculator_you.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/capturesposed.svg b/svgs/capturesposed.svg new file mode 100644 index 00000000000..1c7547377a9 --- /dev/null +++ b/svgs/capturesposed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/chalo.svg b/svgs/chalo.svg new file mode 100644 index 00000000000..e35e3f322a3 --- /dev/null +++ b/svgs/chalo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/clearscore.svg b/svgs/clearscore.svg new file mode 100644 index 00000000000..734ca2aa2fa --- /dev/null +++ b/svgs/clearscore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/click_to_chat.svg b/svgs/click_to_chat.svg new file mode 100644 index 00000000000..89aa36ab70e --- /dev/null +++ b/svgs/click_to_chat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/crayon_icons.svg b/svgs/crayon_icons.svg new file mode 100644 index 00000000000..56fe80a324e --- /dev/null +++ b/svgs/crayon_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/day_one_journal.svg b/svgs/day_one_journal.svg new file mode 100644 index 00000000000..2c28b98e7f1 --- /dev/null +++ b/svgs/day_one_journal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dr_web.svg b/svgs/dr_web.svg new file mode 100644 index 00000000000..5e164359114 --- /dev/null +++ b/svgs/dr_web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/evernote.svg b/svgs/evernote.svg new file mode 100644 index 00000000000..75204bfac9c --- /dev/null +++ b/svgs/evernote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/flow_free.svg b/svgs/flow_free.svg new file mode 100644 index 00000000000..2c519da16e8 --- /dev/null +++ b/svgs/flow_free.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/folax.svg b/svgs/folax.svg new file mode 100644 index 00000000000..740fb019012 --- /dev/null +++ b/svgs/folax.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fold.svg b/svgs/fold.svg new file mode 100644 index 00000000000..6b0a11eea67 --- /dev/null +++ b/svgs/fold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/g_cpu.svg b/svgs/g_cpu.svg new file mode 100644 index 00000000000..d836f349f28 --- /dev/null +++ b/svgs/g_cpu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/geometry_dash_meltdown.svg b/svgs/geometry_dash_meltdown.svg new file mode 100644 index 00000000000..b4643f72b98 --- /dev/null +++ b/svgs/geometry_dash_meltdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/giphy.svg b/svgs/giphy.svg new file mode 100644 index 00000000000..95c743c2634 --- /dev/null +++ b/svgs/giphy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/glassdoor.svg b/svgs/glassdoor.svg new file mode 100644 index 00000000000..49a9b3e724f --- /dev/null +++ b/svgs/glassdoor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/healthy_battery_charging.svg b/svgs/healthy_battery_charging.svg new file mode 100644 index 00000000000..c3e06eb71f4 --- /dev/null +++ b/svgs/healthy_battery_charging.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_appassistant.svg b/svgs/huawei_appassistant.svg new file mode 100644 index 00000000000..87f4af3432d --- /dev/null +++ b/svgs/huawei_appassistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_optimizer.svg b/svgs/huawei_optimizer.svg new file mode 100644 index 00000000000..6249a3a8539 --- /dev/null +++ b/svgs/huawei_optimizer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_themes.svg b/svgs/huawei_themes.svg new file mode 100644 index 00000000000..f6961a51619 --- /dev/null +++ b/svgs/huawei_themes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_weather.svg b/svgs/huawei_weather.svg new file mode 100644 index 00000000000..86f059003c3 --- /dev/null +++ b/svgs/huawei_weather.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hyperos_downloader.svg b/svgs/hyperos_downloader.svg new file mode 100644 index 00000000000..511689e6893 --- /dev/null +++ b/svgs/hyperos_downloader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hypic.svg b/svgs/hypic.svg new file mode 100644 index 00000000000..20637a423bc --- /dev/null +++ b/svgs/hypic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iliad_visual_voicemail.svg b/svgs/iliad_visual_voicemail.svg new file mode 100644 index 00000000000..bd6b0f456b6 --- /dev/null +++ b/svgs/iliad_visual_voicemail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/intel_unison.svg b/svgs/intel_unison.svg new file mode 100644 index 00000000000..0355df5d09e --- /dev/null +++ b/svgs/intel_unison.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iyps.svg b/svgs/iyps.svg new file mode 100644 index 00000000000..be6b77db263 --- /dev/null +++ b/svgs/iyps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jetpack_joyride.svg b/svgs/jetpack_joyride.svg new file mode 100644 index 00000000000..799be1c440e --- /dev/null +++ b/svgs/jetpack_joyride.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jumia.svg b/svgs/jumia.svg new file mode 100644 index 00000000000..26e266afe84 --- /dev/null +++ b/svgs/jumia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/koda_for_kustom.svg b/svgs/koda_for_kustom.svg new file mode 100644 index 00000000000..da0d5f4c4f1 --- /dev/null +++ b/svgs/koda_for_kustom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/livescore.svg b/svgs/livescore.svg new file mode 100644 index 00000000000..b21a4b3057a --- /dev/null +++ b/svgs/livescore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mach.svg b/svgs/mach.svg new file mode 100644 index 00000000000..c23dcddc2b5 --- /dev/null +++ b/svgs/mach.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/magisk_module_repo_loader.svg b/svgs/magisk_module_repo_loader.svg new file mode 100644 index 00000000000..48fb05f52a1 --- /dev/null +++ b/svgs/magisk_module_repo_loader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mail_ru.svg b/svgs/mail_ru.svg new file mode 100644 index 00000000000..a4d6180d7c0 --- /dev/null +++ b/svgs/mail_ru.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mcpedl_for_minecraft.svg b/svgs/mcpedl_for_minecraft.svg new file mode 100644 index 00000000000..543c03ce8b7 --- /dev/null +++ b/svgs/mcpedl_for_minecraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mi_mover.svg b/svgs/mi_mover.svg new file mode 100644 index 00000000000..098a152db11 --- /dev/null +++ b/svgs/mi_mover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mi_personal_flow.svg b/svgs/mi_personal_flow.svg new file mode 100644 index 00000000000..08073074d65 --- /dev/null +++ b/svgs/mi_personal_flow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mobile_data_consumption.svg b/svgs/mobile_data_consumption.svg new file mode 100644 index 00000000000..1919c9fb5d0 --- /dev/null +++ b/svgs/mobile_data_consumption.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mobile_jkn.svg b/svgs/mobile_jkn.svg new file mode 100644 index 00000000000..8a07922960d --- /dev/null +++ b/svgs/mobile_jkn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/modern_warships.svg b/svgs/modern_warships.svg new file mode 100644 index 00000000000..dc4a51d4fa1 --- /dev/null +++ b/svgs/modern_warships.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/modo.svg b/svgs/modo.svg new file mode 100644 index 00000000000..a6e04f5af64 --- /dev/null +++ b/svgs/modo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/moto_unplugged.svg b/svgs/moto_unplugged.svg new file mode 100644 index 00000000000..067ab7e7a95 --- /dev/null +++ b/svgs/moto_unplugged.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/musclewiki.svg b/svgs/musclewiki.svg new file mode 100644 index 00000000000..f6724970573 --- /dev/null +++ b/svgs/musclewiki.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/muslim_pro.svg b/svgs/muslim_pro.svg new file mode 100644 index 00000000000..0e05d5b7ecb --- /dev/null +++ b/svgs/muslim_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_apps_time.svg b/svgs/my_apps_time.svg new file mode 100644 index 00000000000..45293beaed2 --- /dev/null +++ b/svgs/my_apps_time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_huawei.svg b/svgs/my_huawei.svg new file mode 100644 index 00000000000..5b3a4381fe4 --- /dev/null +++ b/svgs/my_huawei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_zong.svg b/svgs/my_zong.svg new file mode 100644 index 00000000000..89247d037ce --- /dev/null +++ b/svgs/my_zong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/national_train_enquiry_system.svg b/svgs/national_train_enquiry_system.svg new file mode 100644 index 00000000000..a66beeaf857 --- /dev/null +++ b/svgs/national_train_enquiry_system.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/native_alpha_plus.svg b/svgs/native_alpha_plus.svg new file mode 100644 index 00000000000..07e6eec6834 --- /dev/null +++ b/svgs/native_alpha_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nays.svg b/svgs/nays.svg new file mode 100644 index 00000000000..f7839384e16 --- /dev/null +++ b/svgs/nays.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nothing_icons.svg b/svgs/nothing_icons.svg new file mode 100644 index 00000000000..0f0a7e2ddc2 --- /dev/null +++ b/svgs/nothing_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/octohide_vpn.svg b/svgs/octohide_vpn.svg new file mode 100644 index 00000000000..a80cd0ab3af --- /dev/null +++ b/svgs/octohide_vpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/offline_games.svg b/svgs/offline_games.svg new file mode 100644 index 00000000000..14571dd09c0 --- /dev/null +++ b/svgs/offline_games.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/onecard.svg b/svgs/onecard.svg new file mode 100644 index 00000000000..a45de2db222 --- /dev/null +++ b/svgs/onecard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/onescore.svg b/svgs/onescore.svg new file mode 100644 index 00000000000..f2dffb169c9 --- /dev/null +++ b/svgs/onescore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/overmorrow_weather.svg b/svgs/overmorrow_weather.svg new file mode 100644 index 00000000000..e1d8307591d --- /dev/null +++ b/svgs/overmorrow_weather.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixel_launcher.svg b/svgs/pixel_launcher.svg new file mode 100644 index 00000000000..bdde114429e --- /dev/null +++ b/svgs/pixel_launcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/plato.svg b/svgs/plato.svg new file mode 100644 index 00000000000..3fdbc9170e9 --- /dev/null +++ b/svgs/plato.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/playhub.svg b/svgs/playhub.svg new file mode 100644 index 00000000000..c8cf49e12c7 --- /dev/null +++ b/svgs/playhub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/qanda.svg b/svgs/qanda.svg new file mode 100644 index 00000000000..bbba90dd6a9 --- /dev/null +++ b/svgs/qanda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/qralarm.svg b/svgs/qralarm.svg new file mode 100644 index 00000000000..5173d85eb75 --- /dev/null +++ b/svgs/qralarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/quikshort.svg b/svgs/quikshort.svg new file mode 100644 index 00000000000..8282914ad38 --- /dev/null +++ b/svgs/quikshort.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rappi.svg b/svgs/rappi.svg new file mode 100644 index 00000000000..0e81de883c4 --- /dev/null +++ b/svgs/rappi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/regain.svg b/svgs/regain.svg new file mode 100644 index 00000000000..62a01881c4f --- /dev/null +++ b/svgs/regain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ring.svg b/svgs/ring.svg new file mode 100644 index 00000000000..73352365b6d --- /dev/null +++ b/svgs/ring.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/round_sync.svg b/svgs/round_sync.svg new file mode 100644 index 00000000000..137be208ee7 --- /dev/null +++ b/svgs/round_sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/screen_orientation_control.svg b/svgs/screen_orientation_control.svg new file mode 100644 index 00000000000..98237f66cdc --- /dev/null +++ b/svgs/screen_orientation_control.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sd_maid.svg b/svgs/sd_maid.svg index ec63ca45e7e..0330bdad76c 100644 --- a/svgs/sd_maid.svg +++ b/svgs/sd_maid.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/sd_maid_1_pro.svg b/svgs/sd_maid_1_pro.svg new file mode 100644 index 00000000000..25f964a155b --- /dev/null +++ b/svgs/sd_maid_1_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shelf.svg b/svgs/shelf.svg new file mode 100644 index 00000000000..91d8773159a --- /dev/null +++ b/svgs/shelf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/simosa.svg b/svgs/simosa.svg new file mode 100644 index 00000000000..8b3db5d882e --- /dev/null +++ b/svgs/simosa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/spin_the_wheel.svg b/svgs/spin_the_wheel.svg new file mode 100644 index 00000000000..0216c9173b4 --- /dev/null +++ b/svgs/spin_the_wheel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/storage_saver.svg b/svgs/storage_saver.svg new file mode 100644 index 00000000000..c3abd78d929 --- /dev/null +++ b/svgs/storage_saver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/super_money.svg b/svgs/super_money.svg new file mode 100644 index 00000000000..70d9b16ead6 --- /dev/null +++ b/svgs/super_money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/supreme_duelist.svg b/svgs/supreme_duelist.svg new file mode 100644 index 00000000000..e9b064b3031 --- /dev/null +++ b/svgs/supreme_duelist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/syphon.svg b/svgs/syphon.svg new file mode 100644 index 00000000000..70e0cf85683 --- /dev/null +++ b/svgs/syphon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/t_mobile_visual_voicemail.svg b/svgs/t_mobile_visual_voicemail.svg new file mode 100644 index 00000000000..372e3256ff9 --- /dev/null +++ b/svgs/t_mobile_visual_voicemail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tecno_spot.svg b/svgs/tecno_spot.svg new file mode 100644 index 00000000000..92d0a14547f --- /dev/null +++ b/svgs/tecno_spot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ten_ten.svg b/svgs/ten_ten.svg new file mode 100644 index 00000000000..ed449405a3a --- /dev/null +++ b/svgs/ten_ten.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/thunder_vpn.svg b/svgs/thunder_vpn.svg new file mode 100644 index 00000000000..32b3e43780b --- /dev/null +++ b/svgs/thunder_vpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ts_news_plus.svg b/svgs/ts_news_plus.svg new file mode 100644 index 00000000000..4129d038433 --- /dev/null +++ b/svgs/ts_news_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/update_me.svg b/svgs/update_me.svg new file mode 100644 index 00000000000..b3976388a60 --- /dev/null +++ b/svgs/update_me.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/v_appstore.svg b/svgs/v_appstore.svg new file mode 100644 index 00000000000..a929bcafef8 --- /dev/null +++ b/svgs/v_appstore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_feedback.svg b/svgs/vivo_feedback.svg new file mode 100644 index 00000000000..dffc9762f75 --- /dev/null +++ b/svgs/vivo_feedback.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wa_enhancer.svg b/svgs/wa_enhancer.svg new file mode 100644 index 00000000000..6a56ff7e16c --- /dev/null +++ b/svgs/wa_enhancer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wear_installer_2.svg b/svgs/wear_installer_2.svg new file mode 100644 index 00000000000..b548064c5b5 --- /dev/null +++ b/svgs/wear_installer_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/welife.svg b/svgs/welife.svg new file mode 100644 index 00000000000..3fac32af04c --- /dev/null +++ b/svgs/welife.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/work_log.svg b/svgs/work_log.svg new file mode 100644 index 00000000000..f1128a11233 --- /dev/null +++ b/svgs/work_log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/x_vpn.svg b/svgs/x_vpn.svg new file mode 100644 index 00000000000..45a16d594a5 --- /dev/null +++ b/svgs/x_vpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yearly_progress.svg b/svgs/yearly_progress.svg new file mode 100644 index 00000000000..a36aa65a5e1 --- /dev/null +++ b/svgs/yearly_progress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/youtube_adaway.svg b/svgs/youtube_adaway.svg new file mode 100644 index 00000000000..e1482086706 --- /dev/null +++ b/svgs/youtube_adaway.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zenless_zone_zero.svg b/svgs/zenless_zone_zero.svg new file mode 100644 index 00000000000..8a55dfc7174 --- /dev/null +++ b/svgs/zenless_zone_zero.svg @@ -0,0 +1 @@ + \ No newline at end of file From ad7bb25b7c95f6ab8e802407eddf973d1ff22a77 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 8 Sep 2024 10:02:32 +0300 Subject: [PATCH 318/527] +44 links (#2311) * +44 links * Minor fix --- app/assets/appfilter.xml | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 578bdb4be14..27867659cda 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -61,6 +61,7 @@ + @@ -1303,6 +1304,7 @@ + @@ -1561,6 +1563,8 @@ + + @@ -1766,6 +1770,7 @@ + @@ -2977,6 +2982,7 @@ + @@ -3122,6 +3128,7 @@ + @@ -3135,6 +3142,7 @@ + @@ -3254,6 +3262,7 @@ + @@ -3512,6 +3521,8 @@ + + @@ -3650,6 +3661,7 @@ + @@ -4360,8 +4372,11 @@ + + + @@ -4406,6 +4421,7 @@ + @@ -4420,6 +4436,8 @@ + + @@ -4531,6 +4549,7 @@ + @@ -5117,6 +5136,7 @@ + @@ -5223,6 +5243,7 @@ + @@ -5377,6 +5398,7 @@ + @@ -5497,6 +5519,7 @@ + @@ -5633,6 +5656,7 @@ + @@ -5682,6 +5706,7 @@ + @@ -6006,6 +6031,7 @@ + @@ -6321,6 +6347,7 @@ + @@ -6333,6 +6360,7 @@ + @@ -6553,6 +6581,7 @@ + @@ -7361,6 +7390,7 @@ + @@ -7384,6 +7414,7 @@ + @@ -7708,6 +7739,7 @@ + @@ -8166,6 +8198,7 @@ + @@ -9102,6 +9135,7 @@ + @@ -9808,6 +9842,7 @@ + @@ -10238,6 +10273,7 @@ + @@ -11138,6 +11174,8 @@ + + @@ -11328,6 +11366,7 @@ + @@ -11429,6 +11468,7 @@ + @@ -11857,6 +11897,7 @@ + @@ -12051,6 +12092,7 @@ + @@ -12108,6 +12150,8 @@ + + From ae9d0d037c8b2e452aff60ba9185b2e551e68838 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 9 Sep 2024 01:32:50 +0300 Subject: [PATCH 319/527] +14 links (#2313) --- app/assets/appfilter.xml | 14 ++++++++++++++ svgs/castro.svg | 2 +- svgs/lawnchair.svg | 2 +- svgs/pi_network.svg | 2 +- svgs/superimage.svg | 2 +- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 27867659cda..5185b285a08 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -172,6 +172,7 @@ + @@ -194,6 +195,7 @@ + @@ -603,6 +605,7 @@ + @@ -2617,6 +2620,7 @@ + @@ -4355,6 +4359,7 @@ + @@ -4713,6 +4718,7 @@ + @@ -5656,6 +5662,10 @@ + + + + @@ -7390,6 +7400,7 @@ + @@ -7414,6 +7425,7 @@ + @@ -7837,6 +7849,7 @@ + @@ -11366,6 +11379,7 @@ + diff --git a/svgs/castro.svg b/svgs/castro.svg index 7b226b18acd..179fe77c760 100644 --- a/svgs/castro.svg +++ b/svgs/castro.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/lawnchair.svg b/svgs/lawnchair.svg index 0a6c5487e74..ec900f5f3cf 100644 --- a/svgs/lawnchair.svg +++ b/svgs/lawnchair.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pi_network.svg b/svgs/pi_network.svg index 92a24c36dc9..c5d1e33049b 100644 --- a/svgs/pi_network.svg +++ b/svgs/pi_network.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/superimage.svg b/svgs/superimage.svg index e227f5cf92a..2a7f6b6fea0 100644 --- a/svgs/superimage.svg +++ b/svgs/superimage.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From ca2473ad47d743dcb2cd650e774709db61339215 Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Mon, 9 Sep 2024 21:10:31 +0700 Subject: [PATCH 320/527] Link Lawnchair Google Play Store package name (#2316) * Link Lawnchair Google Play Store package name * github is dumb --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5185b285a08..087ba214fb5 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5189,6 +5189,7 @@ + From 1ce102e5706d110e4f910c848b7d403b762215be Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 9 Sep 2024 20:43:14 +0800 Subject: [PATCH 321/527] Implement new icons UI --- app/src/main/AndroidManifest.xml | 4 +- .../lawnicons/di/NewIconsRepositoryModule.kt | 34 ++++ .../repository/NewIconsRepository.kt | 61 ++++++++ .../lawnicons/repository/PreferenceManager.kt | 93 ++++++++++- .../app/lawnchair/lawnicons/ui/Lawnicons.kt | 9 +- .../lawnicons/ui/components/core/Card.kt | 23 ++- .../ui/components/core/LawniconsScaffold.kt | 6 +- .../ui/components/home/IconPreviewGrid.kt | 147 +++++++++++------- .../ui/components/home/NewIconsCard.kt | 112 +++++++++++++ .../ui/components/home/search/SearchBar.kt | 16 +- .../lawnicons/ui/destination/Home.kt | 89 +++++------ .../lawnicons/ui/destination/NewIcons.kt | 77 +++++++++ .../lawnchair/lawnicons/util/GetIconInfo.kt | 6 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 73 +++++++-- .../lawnicons/viewmodel/NewIconsViewModel.kt | 31 ++++ app/src/main/res/drawable/new_releases.xml | 21 +++ app/src/main/res/values/strings.xml | 3 + .../lawnicons/helper/AppfilterDiffCreator.kt | 81 ++++++++++ .../lawnchair/lawnicons/helper/Application.kt | 21 ++- .../lawnicons/helper/ConfigProcessor.kt | 19 +++ .../lawnicons/helper/SvgFilesProcessor.kt | 16 ++ .../app/lawnchair/lawnicons/helper/XmlUtil.kt | 16 ++ 22 files changed, 801 insertions(+), 157 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/di/NewIconsRepositoryModule.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/repository/NewIconsRepository.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/NewIconsViewModel.kt create mode 100644 app/src/main/res/drawable/new_releases.xml create mode 100644 svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b32bcae0c12..b40f1576d1f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,12 +18,12 @@ - + - + diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/NewIconsRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/NewIconsRepositoryModule.kt new file mode 100644 index 00000000000..cef43aedc7a --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/NewIconsRepositoryModule.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.di + +import android.app.Application +import app.lawnchair.lawnicons.repository.NewIconsRepository +import app.lawnchair.lawnicons.repository.NewIconsRepositoryImpl +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object NewIconsRepositoryModule { + @Provides + @Singleton + fun provideNewIconsRepository(application: Application): NewIconsRepository = NewIconsRepositoryImpl(application) +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/NewIconsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/NewIconsRepository.kt new file mode 100644 index 00000000000..1866e8621b3 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/NewIconsRepository.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.repository + +import android.app.Application +import app.lawnchair.lawnicons.BuildConfig +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.util.getIconInfo +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + +interface NewIconsRepository { + val newIconsInfoModel: StateFlow +} + +class NewIconsRepositoryImpl @Inject constructor(application: Application) : NewIconsRepository { + + private val coroutineScope = CoroutineScope(Dispatchers.IO) + private val prefs = PreferenceManager.getInstance(application) + + private val _newIconsInfoModel = MutableStateFlow(IconInfoModel()) + override val newIconsInfoModel = _newIconsInfoModel.asStateFlow() + + init { + val currentVersionCode = prefs.currentLawniconsVersion.get() + val newVersionCode = BuildConfig.VERSION_CODE + + if (currentVersionCode != newVersionCode) { + prefs.currentLawniconsVersion.set(newVersionCode) + prefs.showNewIconsCard.set(true) + } + + coroutineScope.launch { + val iconInfo = application.getIconInfo(R.xml.appfilter_diff).sortedBy { it.label.lowercase() } + _newIconsInfoModel.value = IconInfoModel( + iconInfo, + iconInfo.size, + ) + } + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index b641936f866..75773b25ff5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -6,6 +6,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.produceState import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalInspectionMode +import app.lawnchair.lawnicons.BuildConfig /** * A class that abstracts the functionality of SharedPreferences @@ -45,22 +47,55 @@ abstract class BasePreferenceManager( } } } + + /** + * A class that represents a integer preference + * @param key The key of the preference + * @param defaultValue The default value of the preference + */ + inner class IntPref( + val key: String, + private val defaultValue: Int, + ) { + fun get() = prefs.getInt(key, defaultValue) + fun set(value: Int) = editor.putInt(key, value).apply() + + @Composable + fun asState(): State { + return produceState(initialValue = get(), this) { + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> + if (changedKey == key) { + value = get() // Update the state value when the preference changes + } + } + prefs.registerOnSharedPreferenceChangeListener(listener) + awaitDispose { + prefs.unregisterOnSharedPreferenceChangeListener(listener) + } + } + } + } } /** * Provides a class to handle Lawnicons preferences + * + * Use [PreferenceManager.getInstance] to get the instance for use thoughout the app. + * @see preferenceManager */ class PreferenceManager private constructor( prefs: SharedPreferences, ) : BasePreferenceManager(prefs) { val showFirstLaunchSnackbar = BoolPref("show_first_launch_snackbar", true) + val showNewIconsCard = BoolPref("show_new_icons_card", true) + val currentLawniconsVersion = IntPref("current_lawnicons_version", BuildConfig.VERSION_CODE) companion object { @Volatile private var instance: PreferenceManager? = null /** - * Returns a singleton instance of PreferenceManager + * Returns a singleton instance of [PreferenceManager] */ fun getInstance(context: Context): PreferenceManager { return instance ?: synchronized(this) { @@ -69,8 +104,62 @@ class PreferenceManager private constructor( ).also { instance = it } } } + + /** + * Get dummy instance of [PreferenceManager] for testing and Compose previews + */ + fun getDummyInstance(): PreferenceManager { + return PreferenceManager(DummySharedPreferences()) + } } } +/** + * Returns a singleton instance of [PreferenceManager] for use in Composable UIs. + * + * In [LocalInspectionMode], the dummy instance is returned instead. + * + * @param context the context to use for getting the shared preferences + * @return a singleton instance of [PreferenceManager] + */ @Composable -fun preferenceManager(context: Context = LocalContext.current) = PreferenceManager.getInstance(context) +fun preferenceManager(context: Context = LocalContext.current) = if (LocalInspectionMode.current) { + PreferenceManager.getDummyInstance() +} else { + PreferenceManager.getInstance(context) +} + +/** + * Dummy implementation of [SharedPreferences] for Compose previews, with mock default values + */ +class DummySharedPreferences : SharedPreferences { + override fun getAll() = mutableMapOf>() + override fun getBoolean(key: String?, defValue: Boolean) = true + override fun getString(key: String?, defValue: String?) = "" + override fun getStringSet(key: String?, defValues: MutableSet?) = mutableSetOf() + override fun getLong(key: String?, defValue: Long) = 0L + override fun getFloat(key: String?, defValue: Float) = 0.0f + override fun getInt(key: String?, defValue: Int) = 0 + override fun contains(key: String?) = true + override fun edit() = DummyEditor() + override fun registerOnSharedPreferenceChangeListener(listener: SharedPreferences.OnSharedPreferenceChangeListener?) {} + override fun unregisterOnSharedPreferenceChangeListener(listener: SharedPreferences.OnSharedPreferenceChangeListener?) {} + + /** + * Dummy implementation of [SharedPreferences.Editor] for Compose previews + */ + class DummyEditor() : SharedPreferences.Editor { + override fun putString(key: String?, value: String?) = DummyEditor() + override fun putStringSet(key: String?, values: MutableSet?) = DummyEditor() + + override fun putInt(key: String?, value: Int) = DummyEditor() + override fun putLong(key: String?, value: Long) = DummyEditor() + override fun putFloat(key: String?, value: Float) = DummyEditor() + override fun putBoolean(key: String?, value: Boolean) = DummyEditor() + override fun remove(key: String?) = DummyEditor() + override fun clear() = DummyEditor() + + override fun commit() = true + override fun apply() {} + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt index 5562654a521..5ffd551ae9a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/Lawnicons.kt @@ -16,11 +16,13 @@ import app.lawnchair.lawnicons.ui.destination.Acknowledgement import app.lawnchair.lawnicons.ui.destination.Acknowledgements import app.lawnchair.lawnicons.ui.destination.Contributors import app.lawnchair.lawnicons.ui.destination.Home +import app.lawnchair.lawnicons.ui.destination.NewIcons import app.lawnchair.lawnicons.ui.destination.aboutDestination import app.lawnchair.lawnicons.ui.destination.acknowledgementDestination import app.lawnchair.lawnicons.ui.destination.acknowledgementsDestination import app.lawnchair.lawnicons.ui.destination.contributorsDestination import app.lawnchair.lawnicons.ui.destination.homeDestination +import app.lawnchair.lawnicons.ui.destination.newIconsDestination import soup.compose.material.motion.animation.materialSharedAxisXIn import soup.compose.material.motion.animation.materialSharedAxisXOut import soup.compose.material.motion.animation.rememberSlideDistance @@ -49,7 +51,8 @@ fun Lawnicons( popExitTransition = { materialSharedAxisXOut(isRtl, slideDistance) }, ) { homeDestination( - onNavigate = { navController.navigate(About) }, + onNavigateToAbout = { navController.navigate(About) }, + onNavigateToNewIcons = { navController.navigate(NewIcons) }, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, onSendResult = onSendResult, @@ -79,6 +82,10 @@ fun Lawnicons( onBack = navController::popBackStack, isExpandedScreen = isExpandedScreen, ) + newIconsDestination( + onBack = navController::popBackStack, + isExpandedScreen = isExpandedScreen, + ) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt index 94855617e6b..41421916eb9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/Card.kt @@ -1,6 +1,7 @@ package app.lawnchair.lawnicons.ui.components.core import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape @@ -16,22 +17,18 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @Composable fun Card( modifier: Modifier = Modifier, + contentModifier: Modifier = Modifier, label: String? = null, - content: @Composable () -> Unit, + content: @Composable ColumnScope.() -> Unit, ) { Column(modifier = modifier) { if (label != null) { - Text( - text = label, - style = MaterialTheme.typography.titleSmall, - color = MaterialTheme.colorScheme.primary, - modifier = Modifier.padding(start = 32.dp, bottom = 6.dp), - ) + CardHeader(label) } Surface( color = MaterialTheme.colorScheme.surfaceContainer, shape = RoundedCornerShape(size = 16.dp), - modifier = Modifier + modifier = contentModifier .padding(horizontal = 16.dp) .fillMaxWidth(), ) { @@ -42,6 +39,16 @@ fun Card( } } +@Composable +fun CardHeader(label: String, modifier: Modifier = Modifier) { + Text( + text = label, + style = MaterialTheme.typography.titleSmall, + color = MaterialTheme.colorScheme.primary, + modifier = modifier.padding(start = 32.dp, bottom = 6.dp), + ) +} + @PreviewLawnicons @Composable private fun CardPreview() { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt index fef3a4c2e6e..4bd3d20a073 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt @@ -29,10 +29,8 @@ fun LawniconsScaffold( modifier: Modifier = Modifier, content: @Composable (PaddingValues) -> Unit, ) { - var scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() - if (isExpandedScreen) { - scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() - } + val scrollBehavior = + if (isExpandedScreen) TopAppBarDefaults.pinnedScrollBehavior() else TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffold( modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection), diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 3821e3e60fb..8e0dd7864be 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets @@ -25,6 +24,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan +import androidx.compose.foundation.lazy.grid.LazyGridItemScope import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items @@ -49,6 +49,7 @@ import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo @@ -61,16 +62,39 @@ import my.nanihadesuka.compose.InternalLazyVerticalGridScrollbar import my.nanihadesuka.compose.ScrollbarSelectionMode import my.nanihadesuka.compose.ScrollbarSettings +data class IconPreviewGridPadding( + val topPadding: Dp, + val bottomPadding: Dp, + val horizontalPadding: Dp, +) { + + companion object { + val Defaults = IconPreviewGridPadding( + topPadding = 0.dp, + bottomPadding = 80.dp, + horizontalPadding = 8.dp, + ) + + val ExpandedSize = IconPreviewGridPadding( + topPadding = 72.dp, + bottomPadding = 0.dp, + horizontalPadding = 32.dp, + ) + } +} + @Composable @ExperimentalFoundationApi fun IconPreviewGrid( iconInfo: List, - isExpandedScreen: Boolean, onSendResult: (IconInfo) -> Unit, modifier: Modifier = Modifier, + containerModifier: Modifier = Modifier + .applyGridInsets(), + contentPadding: IconPreviewGridPadding = IconPreviewGridPadding.Defaults, isIconPicker: Boolean = false, - contentPadding: PaddingValues? = null, gridState: LazyGridState = rememberLazyGridState(), + otherContent: @Composable (LazyGridItemScope.() -> Unit) = {}, ) { val indexOfFirstItem by remember { derivedStateOf { gridState.firstVisibleItemIndex } } val letter = iconInfo[indexOfFirstItem].label[0].uppercase() @@ -81,48 +105,30 @@ fun IconPreviewGrid( verticalArrangement = Arrangement.Center, modifier = modifier.fillMaxWidth(), ) { - val horizontalGridPadding = if (isExpandedScreen) 32.dp else 8.dp Box( - modifier = Modifier - .widthIn(max = 640.dp) - .fillMaxWidth() - .statusBarsPadding() - .then( - if (isExpandedScreen) { - Modifier.padding(top = 26.dp) - } else { - Modifier.padding( - bottom = 80.dp, - ) - }, - ), + modifier = containerModifier + .padding(bottom = contentPadding.bottomPadding), ) { LazyVerticalGrid( columns = GridCells.Adaptive(minSize = 80.dp), - contentPadding = contentPadding ?: WindowInsets.navigationBars.toPaddingValues( - additionalStart = horizontalGridPadding, - additionalTop = if (isExpandedScreen) 42.dp else 0.dp, - additionalEnd = horizontalGridPadding, + contentPadding = WindowInsets.navigationBars.toPaddingValues( + additionalStart = contentPadding.horizontalPadding, + additionalTop = contentPadding.topPadding, + additionalEnd = contentPadding.horizontalPadding, ), state = gridState, ) { - if (!isExpandedScreen) { - item( - span = { - GridItemSpan(maxLineSpan) - }, - ) { - AppBarListItem() - } + item( + span = { GridItemSpan(maxLineSpan) }, + ) { + otherContent() } items( items = iconInfo, contentType = { "icon_preview" }, ) { iconInfo -> val scale by animateFloatAsState( - if (thumbSelected && iconInfo.label.first() - .toString() == letter - ) { + if (thumbSelected && iconInfo.label.first().toString() == letter) { 1.1f } else { 1f @@ -138,35 +144,56 @@ fun IconPreviewGrid( ) } } - Box( - contentAlignment = Alignment.CenterEnd, - ) { - Spacer( - Modifier - .fillMaxHeight() - .width(8.dp) - .background(MaterialTheme.colorScheme.surfaceContainer) - .clip(CircleShape), - ) - InternalLazyVerticalGridScrollbar( - modifier = Modifier.offset(7.dp), - state = gridState, - settings = ScrollbarSettings( - alwaysShowScrollbar = true, - thumbUnselectedColor = MaterialTheme.colorScheme.primary, - thumbSelectedColor = MaterialTheme.colorScheme.primary, - selectionMode = ScrollbarSelectionMode.Thumb, - ), - indicatorContent = { _, isThumbSelected -> - thumbSelected = isThumbSelected - ScrollbarIndicator(letter, isThumbSelected) - }, - ) - } + ScrollbarLayout( + gridState, + { thumbSelected = it }, + letter, + contentPadding.topPadding, + ) } } } +private fun Modifier.applyGridInsets() = this + .widthIn(max = 640.dp) + .fillMaxWidth() + .statusBarsPadding() + +@Composable +private fun ScrollbarLayout( + gridState: LazyGridState, + onSelectedChange: (Boolean) -> Unit, + currentLetter: String, + topPadding: Dp = 0.dp, +) { + Box( + contentAlignment = Alignment.CenterEnd, + modifier = Modifier.padding(top = topPadding), + ) { + Spacer( + Modifier + .fillMaxHeight() + .width(8.dp) + .background(MaterialTheme.colorScheme.surfaceContainer) + .clip(CircleShape), + ) + InternalLazyVerticalGridScrollbar( + modifier = Modifier.offset(7.dp), + state = gridState, + settings = ScrollbarSettings( + alwaysShowScrollbar = true, + thumbUnselectedColor = MaterialTheme.colorScheme.primary, + thumbSelectedColor = MaterialTheme.colorScheme.primary, + selectionMode = ScrollbarSelectionMode.Thumb, + ), + indicatorContent = { _, isThumbSelected -> + onSelectedChange(isThumbSelected) + ScrollbarIndicator(currentLetter, isThumbSelected) + }, + ) + } +} + @Composable private fun ScrollbarIndicator( label: String, @@ -197,7 +224,7 @@ private fun ScrollbarIndicator( @OptIn(ExperimentalMaterial3Api::class) @Composable -private fun AppBarListItem(modifier: Modifier = Modifier) { +fun AppBarListItem(modifier: Modifier = Modifier) { val context = LocalContext.current CenterAlignedTopAppBar( modifier = modifier, @@ -229,9 +256,9 @@ private fun IconGridPreview() { Surface { IconPreviewGrid( iconInfo = SampleData.iconInfoList, - isExpandedScreen = false, onSendResult = {}, modifier = Modifier, + contentPadding = IconPreviewGridPadding.Defaults, isIconPicker = false, ) } @@ -246,9 +273,9 @@ private fun IconGridExpandedPreview() { Surface { IconPreviewGrid( iconInfo = SampleData.iconInfoList, - isExpandedScreen = true, onSendResult = {}, modifier = Modifier, + contentPadding = IconPreviewGridPadding.ExpandedSize, isIconPicker = false, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt new file mode 100644 index 00000000000..adef79bb553 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt @@ -0,0 +1,112 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.components.home + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Clear +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.BuildConfig +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.repository.preferenceManager +import app.lawnchair.lawnicons.ui.components.core.Card +import app.lawnchair.lawnicons.ui.theme.LawniconsTheme +import app.lawnchair.lawnicons.ui.util.PreviewLawnicons + +@Composable +fun NewIconsCard( + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + val prefs = preferenceManager() + val cardState = prefs.showNewIconsCard.asState() + NewIconsCard( + onClick = onClick, + visible = cardState.value, + onVisibilityChange = { + prefs.showNewIconsCard.set(false) + }, + modifier = modifier, + ) +} + +@Composable +fun NewIconsCard( + onClick: () -> Unit, + visible: Boolean, + onVisibilityChange: () -> Unit, + modifier: Modifier = Modifier, +) { + AnimatedVisibility(visible) { + Card( + modifier = modifier, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .clickable { onClick() } + .padding(start = 12.dp), + ) { + Row { + Icon( + painterResource(R.drawable.new_releases), + contentDescription = null, + ) + Spacer(Modifier.width(8.dp)) + Text( + text = stringResource( + R.string.new_icons_in_version, + BuildConfig.VERSION_NAME, + ), + style = MaterialTheme.typography.titleSmall, + ) + } + Spacer(Modifier.weight(1f)) + IconButton( + onClick = onVisibilityChange, + ) { + Icon(Icons.Rounded.Clear, contentDescription = stringResource(R.string.clear)) + } + } + } + } +} + +@PreviewLawnicons +@Composable +private fun NewIconsCardPreview() { + LawniconsTheme { + Surface { + NewIconsCard({}) + } + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index c2e1d4ac3d5..00bf7162860 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -261,15 +261,13 @@ internal fun SearchIcon( active: Boolean, onButtonClick: () -> Unit, ) { - Crossfade(active, label = "") { - if (it) { - ClickableIcon( - imageVector = Icons.AutoMirrored.Rounded.ArrowBack, - onClick = onButtonClick, - ) - } else { - Icon(Icons.Rounded.Search, contentDescription = null) - } + if (active) { + ClickableIcon( + imageVector = Icons.AutoMirrored.Rounded.ArrowBack, + onClick = onButtonClick, + ) + } else { + Icon(Icons.Rounded.Search, contentDescription = null) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index a257463e19f..52ada0381f2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -8,16 +8,14 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -27,19 +25,20 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import app.lawnchair.lawnicons.model.IconInfo -import app.lawnchair.lawnicons.model.SearchMode +import app.lawnchair.lawnicons.ui.components.home.AppBarListItem import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBarUiState import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid +import app.lawnchair.lawnicons.ui.components.home.IconPreviewGridPadding import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB -import app.lawnchair.lawnicons.ui.components.home.search.LawniconsSearchBar +import app.lawnchair.lawnicons.ui.components.home.NewIconsCard import app.lawnchair.lawnicons.ui.components.home.search.PlaceholderSearchBar -import app.lawnchair.lawnicons.ui.components.home.search.SearchContents import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons -import app.lawnchair.lawnicons.ui.util.SampleData +import app.lawnchair.lawnicons.viewmodel.DummyLawniconsViewModel import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel +import app.lawnchair.lawnicons.viewmodel.LawniconsViewModelImpl import kotlinx.serialization.Serializable @Serializable @@ -48,12 +47,14 @@ data object Home fun NavGraphBuilder.homeDestination( isExpandedScreen: Boolean, isIconPicker: Boolean, - onNavigate: () -> Unit, + onNavigateToAbout: () -> Unit, + onNavigateToNewIcons: () -> Unit, onSendResult: (IconInfo) -> Unit, ) { composable { Home( - onNavigate = onNavigate, + onNavigateToAbout = onNavigateToAbout, + onNavigateToNewIcons = onNavigateToNewIcons, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, onSendResult = onSendResult, @@ -62,20 +63,22 @@ fun NavGraphBuilder.homeDestination( } @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") -@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) +@OptIn(ExperimentalFoundationApi::class) @Composable private fun Home( - onNavigate: () -> Unit, + onNavigateToAbout: () -> Unit, + onNavigateToNewIcons: () -> Unit, onSendResult: (IconInfo) -> Unit, isExpandedScreen: Boolean, modifier: Modifier = Modifier, isIconPicker: Boolean = false, - lawniconsViewModel: LawniconsViewModel = hiltViewModel(), + lawniconsViewModel: LawniconsViewModel = hiltViewModel(), ) { with(lawniconsViewModel) { val iconInfoModel by iconInfoModel.collectAsStateWithLifecycle() val searchedIconInfoModel by searchedIconInfoModel.collectAsStateWithLifecycle() val iconRequestModel by iconRequestModel.collectAsStateWithLifecycle() + val newIconsInfoModel by newIconsInfoModel.collectAsStateWithLifecycle() val context = LocalContext.current val lazyGridState = rememberLazyGridState() @@ -104,7 +107,7 @@ private fun Home( onClearSearch = ::clearSearch, onChangeMode = ::changeMode, onSearchIcons = ::searchIcons, - onNavigate = onNavigate, + onNavigate = onNavigateToAbout, onSendResult = onSendResult, focusRequester = focusRequester, ) @@ -115,7 +118,7 @@ private fun Home( context = context, iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, - onNavigate = onNavigate, + onNavigate = onNavigateToAbout, onExpandSearch = { expandSearch = true }, ) } @@ -135,11 +138,20 @@ private fun Home( ) { IconPreviewGrid( iconInfo = iconInfoModel.iconInfo, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, onSendResult = onSendResult, + contentPadding = if (isExpandedScreen) IconPreviewGridPadding.ExpandedSize else IconPreviewGridPadding.Defaults, + isIconPicker = isIconPicker, gridState = lazyGridState, - ) + ) { + Column { + if (!isExpandedScreen) { + AppBarListItem() + } + if (newIconsInfoModel.iconCount != 0) { + NewIconsCard(onNavigateToNewIcons) + } + } + } } } else { if (isExpandedScreen) { @@ -163,43 +175,18 @@ private fun Home( } } -@OptIn(ExperimentalFoundationApi::class) @PreviewLawnicons @Composable private fun HomePreview() { - var searchTerm by remember { mutableStateOf(value = "") } - val iconInfo = SampleData.iconInfoList - LawniconsTheme { - LawniconsSearchBar( - query = searchTerm, - isQueryEmpty = searchTerm == "", - onClear = { - searchTerm = "" - }, - onBack = {}, - onQueryChange = { newValue -> - searchTerm = newValue - // No actual searching, this is just a preview - }, - iconCount = 3, - onNavigate = {}, - isExpandedScreen = true, - content = { - SearchContents( - "", - SearchMode.LABEL, - {}, - iconInfo = iconInfo, - ) - }, - ) - IconPreviewGrid( - iconInfo = iconInfo, - isExpandedScreen = false, - {}, - Modifier, - false, - ) + Surface(Modifier.fillMaxSize()) { + Home( + onNavigateToAbout = {}, + onNavigateToNewIcons = {}, + isExpandedScreen = true, + onSendResult = {}, + lawniconsViewModel = DummyLawniconsViewModel(), + ) + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt new file mode 100644 index 00000000000..50ecbed8c97 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt @@ -0,0 +1,77 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.destination + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold +import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid +import app.lawnchair.lawnicons.ui.components.home.IconPreviewGridPadding +import app.lawnchair.lawnicons.viewmodel.NewIconsViewModel +import kotlinx.serialization.Serializable + +@Serializable +data object NewIcons + +fun NavGraphBuilder.newIconsDestination( + isExpandedScreen: Boolean, + onBack: () -> Unit, +) { + composable { + NewIcons( + onBack = onBack, + isExpandedScreen = isExpandedScreen, + ) + } +} + +@OptIn(ExperimentalFoundationApi::class) +@Composable +private fun NewIcons( + onBack: () -> Unit, + isExpandedScreen: Boolean, + modifier: Modifier = Modifier, + newIconsViewModel: NewIconsViewModel = hiltViewModel(), +) { + val iconInfoModel by newIconsViewModel.newIconsInfoModel.collectAsStateWithLifecycle() + + LawniconsScaffold( + modifier = modifier, + title = stringResource(R.string.new_icons, iconInfoModel.iconCount), + onBack = onBack, + isExpandedScreen = isExpandedScreen, + ) { paddingValues -> + IconPreviewGrid( + iconInfo = iconInfoModel.iconInfo, + onSendResult = {}, + contentPadding = IconPreviewGridPadding( + topPadding = paddingValues.calculateTopPadding() - 24.dp, + bottomPadding = paddingValues.calculateBottomPadding(), + horizontalPadding = if (isExpandedScreen) IconPreviewGridPadding.ExpandedSize.horizontalPadding else IconPreviewGridPadding.Defaults.horizontalPadding, + ), + ) + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index 7ea59aeb188..d162a0a68e6 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -2,6 +2,7 @@ package app.lawnchair.lawnicons.util import android.annotation.SuppressLint import android.content.Context +import androidx.annotation.XmlRes import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.LabelAndComponent @@ -9,13 +10,14 @@ import app.lawnchair.lawnicons.model.mergeByDrawableName import org.xmlpull.v1.XmlPullParser @SuppressLint("DiscouragedApi") -fun Context.getIconInfo(): List { +fun Context.getIconInfo( + @XmlRes xmlId: Int = R.xml.appfilter, +): List { val iconInfo = mutableListOf() val componentInfoPrefixLength = "ComponentInfo{".length try { - val xmlId = R.xml.appfilter if (xmlId != 0) { val parser = resources.getXml(xmlId) val depth = parser.depth diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index b6d23e9fefc..c5510c80bdb 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -5,55 +5,94 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.repository.IconRepository +import app.lawnchair.lawnicons.repository.NewIconsRepository +import app.lawnchair.lawnicons.ui.util.SampleData import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch -@HiltViewModel -class LawniconsViewModel @Inject constructor( - private val iconRepository: IconRepository, -) : - ViewModel() { - @JvmField - val iconInfoModel = iconRepository.iconInfoModel +interface LawniconsViewModel { + val iconInfoModel: StateFlow + val searchedIconInfoModel: StateFlow + val iconRequestModel: StateFlow + val newIconsInfoModel: StateFlow + + var expandSearch: Boolean + + val searchMode: SearchMode + val searchTerm: String - @JvmField - val searchedIconInfoModel = iconRepository.searchedIconInfoModel + fun searchIcons(query: String) + fun changeMode(mode: SearchMode) + fun clearSearch() +} - @JvmField - val iconRequestModel = iconRepository.iconRequestList +@HiltViewModel +class LawniconsViewModelImpl @Inject constructor( + private val iconRepository: IconRepository, + private val newIconsRepository: NewIconsRepository, +) : LawniconsViewModel, ViewModel() { + override val iconInfoModel = iconRepository.iconInfoModel + override val searchedIconInfoModel = iconRepository.searchedIconInfoModel + override val iconRequestModel = iconRepository.iconRequestList + override val newIconsInfoModel = newIconsRepository.newIconsInfoModel - var expandSearch by mutableStateOf(false) + override var expandSearch by mutableStateOf(false) private var _searchMode by mutableStateOf(SearchMode.LABEL) private var _searchTerm by mutableStateOf("") - val searchMode: SearchMode + override val searchMode: SearchMode get() = _searchMode - val searchTerm: String + override val searchTerm: String get() = _searchTerm - fun searchIcons(query: String) { + override fun searchIcons(query: String) { _searchTerm = query viewModelScope.launch { iconRepository.search(searchMode, searchTerm) } } - fun changeMode(mode: SearchMode) { + override fun changeMode(mode: SearchMode) { _searchMode = mode viewModelScope.launch { iconRepository.search(searchMode, searchTerm) } } - fun clearSearch() { + override fun clearSearch() { _searchTerm = "" viewModelScope.launch { iconRepository.clearSearch() } } } + +class DummyLawniconsViewModel : LawniconsViewModel { + private val list = SampleData.iconInfoList + + override val iconInfoModel = MutableStateFlow(IconInfoModel(iconInfo = list, iconCount = list.size)).asStateFlow() + override val searchedIconInfoModel = MutableStateFlow(IconInfoModel(iconInfo = list, iconCount = list.size)).asStateFlow() + override val iconRequestModel = MutableStateFlow(IconRequestModel(list = listOf(), iconCount = 0)).asStateFlow() + override val newIconsInfoModel = MutableStateFlow(IconInfoModel(iconInfo = list, iconCount = list.size)).asStateFlow() + + override var expandSearch by mutableStateOf(false) + + override val searchMode = SearchMode.LABEL + override val searchTerm = "" + + override fun searchIcons(query: String) {} + + override fun changeMode(mode: SearchMode) {} + + override fun clearSearch() {} +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/NewIconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/NewIconsViewModel.kt new file mode 100644 index 00000000000..8b7136527c7 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/NewIconsViewModel.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.viewmodel + +import androidx.lifecycle.ViewModel +import app.lawnchair.lawnicons.repository.NewIconsRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class NewIconsViewModel @Inject constructor( + private val newIconsRepository: NewIconsRepository, +) : ViewModel() { + + @JvmField + val newIconsInfoModel = newIconsRepository.newIconsInfoModel +} diff --git a/app/src/main/res/drawable/new_releases.xml b/app/src/main/res/drawable/new_releases.xml new file mode 100644 index 00000000000..9eec8a7b8eb --- /dev/null +++ b/app/src/main/res/drawable/new_releases.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3f3ff0e25c4..976cffe6bc0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -86,4 +86,7 @@ Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt new file mode 100644 index 00000000000..3988d9319b4 --- /dev/null +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -0,0 +1,81 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.helper + +import java.io.File + +object AppfilterDiffCreator { + private const val OUTPUT_FILE = "/xml/appfilter_diff.xml" + + private fun getBranchContents( + branch: String, + appFilterFile: String, + ): List { + val command = listOf("git", "show", "$branch:$appFilterFile") + val process = ProcessBuilder(command) + .redirectErrorStream(true) + .start() + + val result = process.inputStream.bufferedReader().readLines() + if (process.waitFor() != 0) { + throw RuntimeException("Failed to execute command: $command") + } + return result + } + + private fun getLineDiff( + mainLines: List, + developLines: List, + ): List { + return developLines.filterNot { it in mainLines } + } + + private fun writeDiffToFile( + diff: List, + resDir: String, + ) { + val outputFile = File(resDir + OUTPUT_FILE) + val schema = "" + + if (diff.isEmpty()) { + outputFile.writeText("$schema\n") + return + } + + val xmlContent = buildString { + appendLine(schema) + appendLine("") + diff.forEach { line -> + appendLine(" $line") + } + appendLine("") + } + + outputFile.writeText(xmlContent) + } + + fun createAppfilterDiff( + resDir: String, + appFilterFile: String, + ) { + val mainLines = getBranchContents("main", appFilterFile) + val developLines = getBranchContents("develop", appFilterFile) + val diff = getLineDiff(mainLines, developLines) + + writeDiffToFile(diff, resDir) + } +} diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/Application.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/Application.kt index a016e388349..e97ded9b314 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/Application.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/Application.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + package app.lawnchair.lawnicons.helper fun main() { @@ -8,9 +24,12 @@ fun main() { // Convert svg to drawable in runtime SvgFilesProcessor.process(sourceDir, "$resDir/drawable") + println("SvgToVectorDrawable task completed") // Read appfilter xml and create icon, drawable xml file. ConfigProcessor.loadAndCreateConfigs(appFilterFile, resDir) + println("ConfigProcessor task completed") - println("SvgToVector task completed") + AppfilterDiffCreator.createAppfilterDiff(resDir, appFilterFile) + println("Appfilter diff task completed") } diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/ConfigProcessor.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/ConfigProcessor.kt index 33b16af250e..3bc95143baf 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/ConfigProcessor.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/ConfigProcessor.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + package app.lawnchair.lawnicons.helper import java.util.Locale @@ -25,10 +41,13 @@ object ConfigProcessor { resDirs.forEach { // Create Drawable files writeDrawableToFile(sortedDrawableMap, "$it/xml/drawable.xml") + println("Written drawables to $it/xml/drawable.xml") // Create Icon Map files writeIconMapToFile(sortedDrawableMap, iconMap, "$it/xml/grayscale_icon_map.xml") + println("Created grayscale_icon_map.xml") // Write AppFilter to resource directory XmlUtil.writeDocumentToFile(appFilterDocument, "$it/xml/appfilter.xml") + println("Created appfilter.xml") } } diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt index a0b8c3099f8..93bd91a34ae 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + package app.lawnchair.lawnicons.helper import com.android.ide.common.vectordrawable.Svg2Vector diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt index bfe417d87f8..45db04313fb 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + package app.lawnchair.lawnicons.helper import java.io.File From 7708507ad6963c900179a70e75363015b3434dee Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 9 Sep 2024 21:19:28 +0800 Subject: [PATCH 322/527] Improve UX for icon request disabling --- .../lawnicons/repository/PreferenceManager.kt | 12 +-- .../ui/components/home/IconRequestFAB.kt | 89 +++++++++++-------- 2 files changed, 58 insertions(+), 43 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index 75773b25ff5..50e03618da7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -77,12 +77,6 @@ abstract class BasePreferenceManager( } } -/** - * Provides a class to handle Lawnicons preferences - * - * Use [PreferenceManager.getInstance] to get the instance for use thoughout the app. - * @see preferenceManager - */ class PreferenceManager private constructor( prefs: SharedPreferences, ) : BasePreferenceManager(prefs) { @@ -90,6 +84,12 @@ class PreferenceManager private constructor( val showNewIconsCard = BoolPref("show_new_icons_card", true) val currentLawniconsVersion = IntPref("current_lawnicons_version", BuildConfig.VERSION_CODE) + /** + * Provides a class to handle Lawnicons preferences. + * + * Use [PreferenceManager.getInstance] to get the instance for use thoughout the app. + * @see preferenceManager + */ companion object { @Volatile private var instance: PreferenceManager? = null diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 53dfd79868d..83ce44a0e6d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -20,8 +20,10 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SheetState import androidx.compose.material3.SnackbarDuration @@ -68,7 +70,10 @@ fun IconRequestFAB( modifier: Modifier = Modifier, ) { val list = iconRequestModel?.list ?: emptyList() + val enabled = iconRequestModel != null + RequestHandler( + enabled = enabled, iconRequestList = list, snackbarHostState = snackbarHostState, ) { interactionSource -> @@ -84,7 +89,8 @@ fun IconRequestFAB( }, onClick = {}, expanded = lazyGridState.isScrollingUp(), - interactionSource = interactionSource, + interactionSource = if (enabled) interactionSource else null, + containerColor = if (!enabled) MaterialTheme.colorScheme.surfaceVariant else FloatingActionButtonDefaults.containerColor, modifier = modifier, ) } @@ -97,14 +103,17 @@ fun IconRequestIconButton( modifier: Modifier = Modifier, ) { val list = iconRequestModel?.list ?: emptyList() + val enabled = iconRequestModel != null RequestHandler( + enabled = enabled, iconRequestList = list, snackbarHostState = snackbarHostState, ) { interactionSource -> IconButton( onClick = {}, - interactionSource = interactionSource, + enabled = enabled, + interactionSource = if (enabled) interactionSource else null, modifier = modifier, ) { Icon( @@ -119,6 +128,7 @@ fun IconRequestIconButton( @OptIn(ExperimentalMaterial3Api::class) @Composable fun RequestHandler( + enabled: Boolean, iconRequestList: List, snackbarHostState: SnackbarHostState, content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), @@ -140,6 +150,7 @@ fun RequestHandler( val interactionSource = remember { MutableInteractionSource() } HandleTouchInteractions( + enabled = enabled, interactionSource = interactionSource, viewConfiguration = LocalViewConfiguration.current, context = context, @@ -155,13 +166,15 @@ fun RequestHandler( content(interactionSource) - if (showFirstLaunchSnackbar && iconRequestList.isNotEmpty()) { - openSnackbarFirstLaunchContent( - context, - scope, - prefs.showFirstLaunchSnackbar::toggle, - snackbarHostState, - ) + LaunchedEffect(iconRequestList.isNotEmpty()) { + if (showFirstLaunchSnackbar) { + openSnackbarFirstLaunchContent( + context, + scope, + { prefs.showFirstLaunchSnackbar.set(false) }, + snackbarHostState, + ) + } } AnimatedVisibility(visible = sheetExpanded) { @@ -177,6 +190,7 @@ fun RequestHandler( @OptIn(ExperimentalMaterial3Api::class) @Composable private fun HandleTouchInteractions( + enabled: Boolean, interactionSource: MutableInteractionSource, viewConfiguration: ViewConfiguration, context: Context, @@ -189,40 +203,41 @@ private fun HandleTouchInteractions( encodedRequestList: String, snackbarHostState: SnackbarHostState, ) { - val prefs = preferenceManager() val lastestOnExpandSheet by rememberUpdatedState(newValue = onExpandSheet) - LaunchedEffect(interactionSource) { - var isLongClick = false - interactionSource.interactions.collectLatest { interaction -> - when (interaction) { - is PressInteraction.Press -> { - isLongClick = false - delay(viewConfiguration.longPressTimeoutMillis) - isLongClick = true - coroutineScope.launch { - lastestOnExpandSheet(true) - sheetState.show() + if (enabled) { + LaunchedEffect(interactionSource) { + var isLongClick = false + + interactionSource.interactions.collectLatest { interaction -> + when (interaction) { + is PressInteraction.Press -> { + isLongClick = false + delay(viewConfiguration.longPressTimeoutMillis) + isLongClick = true + coroutineScope.launch { + lastestOnExpandSheet(true) + sheetState.show() + } } - } - is PressInteraction.Release -> { - if (!isLongClick) { - prefs.showFirstLaunchSnackbar.set(false) - handleRequestClick( - iconRequestList, - context, - directLinkEnabled, - encodedRequestList, - requestList, - coroutineScope, - snackbarHostState, - ) + is PressInteraction.Release -> { + if (!isLongClick) { + handleRequestClick( + iconRequestList, + context, + directLinkEnabled, + encodedRequestList, + requestList, + coroutineScope, + snackbarHostState, + ) + } } - } - is PressInteraction.Cancel -> { - isLongClick = false + is PressInteraction.Cancel -> { + isLongClick = false + } } } } From 26300ccafe491aa65b52430bf6af92a384a4b065 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:23:47 +0800 Subject: [PATCH 323/527] Add debug menu --- .../lawnicons/repository/PreferenceManager.kt | 1 + .../lawnicons/ui/components/home/DebugMenu.kt | 172 ++++++++++++++++++ .../ui/components/home/HomeBottomBar.kt | 3 +- .../ui/components/home/IconPreviewGrid.kt | 14 +- .../ui/components/home/IconRequestFAB.kt | 142 +++++---------- .../lawnicons/ui/destination/Home.kt | 12 +- .../lawnchair/lawnicons/ui/util/Clipboard.kt | 28 +++ 7 files changed, 268 insertions(+), 104 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Clipboard.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index 50e03618da7..700a06057cd 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -82,6 +82,7 @@ class PreferenceManager private constructor( ) : BasePreferenceManager(prefs) { val showFirstLaunchSnackbar = BoolPref("show_first_launch_snackbar", true) val showNewIconsCard = BoolPref("show_new_icons_card", true) + val showDebugMenu = BoolPref("debug_menu", false) val currentLawniconsVersion = IntPref("current_lawnicons_version", BuildConfig.VERSION_CODE) /** diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt new file mode 100644 index 00000000000..e78673b78a0 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt @@ -0,0 +1,172 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.components.home + +import android.content.Context +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.BuildConfig +import app.lawnchair.lawnicons.R +import app.lawnchair.lawnicons.model.IconInfoModel +import app.lawnchair.lawnicons.model.IconRequestModel +import app.lawnchair.lawnicons.model.splitByComponentName +import app.lawnchair.lawnicons.repository.BasePreferenceManager +import app.lawnchair.lawnicons.repository.PreferenceManager +import app.lawnchair.lawnicons.repository.preferenceManager +import app.lawnchair.lawnicons.ui.components.core.Card +import app.lawnchair.lawnicons.ui.components.core.SimpleListRow +import app.lawnchair.lawnicons.ui.util.copyTextToClipboard + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DebugMenu( + iconInfoModel: IconInfoModel, + iconRequestModel: IconRequestModel?, + newIconsInfoModel: IconInfoModel, +) { + val context = LocalContext.current + val prefs = preferenceManager() + val sheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = true, + ) + + ModalBottomSheet( + onDismissRequest = { prefs.showDebugMenu.set(false) }, + sheetState = sheetState, + ) { + SheetContent( + iconInfoCount = iconInfoModel.iconInfo.size, + componentCount = iconInfoModel.iconInfo.splitByComponentName().size, + newIconInfoList = newIconsInfoModel.toString(), + newIconInfoCount = newIconsInfoModel.iconInfo.size, + iconRequestList = iconRequestModel?.list?.joinToString("\n") { "${it.label}\n${it.componentName}" } + ?: "null", + iconRequestCount = iconRequestModel?.iconCount ?: 0, + context, + prefs, + ) + } +} + +@Composable +private fun SheetContent( + iconInfoCount: Int, + componentCount: Int, + newIconInfoList: String, + newIconInfoCount: Int, + iconRequestList: String, + iconRequestCount: Int, + context: Context, + prefs: PreferenceManager, +) { + Column( + modifier = Modifier + .padding(16.dp) + .verticalScroll(rememberScrollState()) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + SimpleListRow("Icon count: $iconInfoCount") + SimpleListRow("Component count: $componentCount") + SimpleListRow("New icon count: $newIconInfoCount") + SimpleListRow("Icon request count: $iconRequestCount") + + SwitchPref(prefs.showDebugMenu) + SwitchPref(prefs.showNewIconsCard) + SwitchPref(prefs.showFirstLaunchSnackbar) + + SimpleListRow( + "Current version", + description = prefs.currentLawniconsVersion.asState().value.toString(), + ) + SimpleListRow( + "Actual version", + description = BuildConfig.VERSION_CODE.toString(), + ) + Button({ prefs.currentLawniconsVersion.set(0) }) { Text("Reset version code") } + + CopyableList(iconRequestList, context) + CopyableList(newIconInfoList, context) + } +} + +@Composable +private fun CopyableList(string: String, context: Context) { + Card { + Column( + modifier = Modifier + .padding(16.dp), + ) { + Text( + text = string, + fontFamily = FontFamily.Monospace, + modifier = Modifier + .horizontalScroll(rememberScrollState()), + ) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + TextButton( + onClick = { + copyTextToClipboard(context, string) + }, + ) { + Text(stringResource(R.string.copy_to_clipboard)) + } + } + } + } +} + +@Composable +private fun SwitchPref( + pref: BasePreferenceManager.BoolPref, + modifier: Modifier = Modifier, +) { + SimpleListRow( + pref.key, + endIcon = { + Switch( + checked = pref.asState().value, + onCheckedChange = { pref.set(it) }, + ) + }, + modifier = modifier, + ) +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index 28e7cb023ae..d355b29cebf 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -58,9 +58,10 @@ fun HomeBottomBar( ) } } + IconRequestIconButton( - iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, + iconRequestModel = iconRequestModel, ) SimpleTooltipBox( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 8e0dd7864be..1962770c55d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -7,6 +7,7 @@ import androidx.compose.animation.fadeOut import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -53,6 +54,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.repository.preferenceManager import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData @@ -222,10 +224,11 @@ private fun ScrollbarIndicator( } } -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @Composable fun AppBarListItem(modifier: Modifier = Modifier) { val context = LocalContext.current + val prefs = preferenceManager(context) CenterAlignedTopAppBar( modifier = modifier, title = { @@ -236,7 +239,14 @@ fun AppBarListItem(modifier: Modifier = Modifier) { Image( bitmap = context.appIcon().asImageBitmap(), contentDescription = stringResource(id = R.string.app_name), - modifier = Modifier.size(36.dp), + modifier = Modifier + .size(36.dp) + .combinedClickable( + onClick = {}, + onLongClick = { + prefs.showDebugMenu.toggle() + }, + ), ) } Spacer(modifier = Modifier.width(8.dp)) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 83ce44a0e6d..997f02570d2 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -1,61 +1,45 @@ package app.lawnchair.lawnicons.ui.components.home -import android.content.ClipData -import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.net.Uri -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.PressInteraction -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredSize import androidx.compose.foundation.lazy.grid.LazyGridState -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExtendedFloatingActionButton import androidx.compose.material3.FloatingActionButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.SheetState +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Text -import androidx.compose.material3.TextButton -import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberUpdatedState -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.platform.ViewConfiguration import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconRequest import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.repository.preferenceManager -import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.util.Constants +import app.lawnchair.lawnicons.ui.util.copyTextToClipboard import app.lawnchair.lawnicons.ui.util.isScrollingUp import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay @@ -76,6 +60,7 @@ fun IconRequestFAB( enabled = enabled, iconRequestList = list, snackbarHostState = snackbarHostState, + onLongClick = {}, ) { interactionSource -> ExtendedFloatingActionButton( text = { @@ -96,6 +81,7 @@ fun IconRequestFAB( } } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun IconRequestIconButton( snackbarHostState: SnackbarHostState, @@ -105,33 +91,52 @@ fun IconRequestIconButton( val list = iconRequestModel?.list ?: emptyList() val enabled = iconRequestModel != null + val tooltipState = rememberTooltipState() + val scope = rememberCoroutineScope() + RequestHandler( enabled = enabled, iconRequestList = list, snackbarHostState = snackbarHostState, + onLongClick = { + scope.launch { + tooltipState.show() + } + }, ) { interactionSource -> - IconButton( - onClick = {}, - enabled = enabled, - interactionSource = if (enabled) interactionSource else null, + TooltipBox( + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(stringResource(R.string.request_icons)) + } + }, + state = tooltipState, modifier = modifier, + enableUserInput = false, ) { - Icon( - painter = painterResource(id = R.drawable.icon_request_app), - contentDescription = stringResource(R.string.request_icons), - modifier = Modifier.requiredSize(24.dp), - ) + IconButton( + onClick = {}, + enabled = enabled, + interactionSource = if (enabled) interactionSource else null, + ) { + Icon( + painter = painterResource(id = R.drawable.icon_request_app), + contentDescription = stringResource(R.string.request_icons), + modifier = Modifier.requiredSize(24.dp), + ) + } } } } -@OptIn(ExperimentalMaterial3Api::class) @Composable fun RequestHandler( enabled: Boolean, iconRequestList: List, snackbarHostState: SnackbarHostState, - content: @Composable ((interactionSource: MutableInteractionSource) -> Unit), + onLongClick: () -> Unit, + content: @Composable (interactionSource: MutableInteractionSource) -> Unit, ) { val prefs = preferenceManager() val showFirstLaunchSnackbar by prefs.showFirstLaunchSnackbar.asState() @@ -141,11 +146,6 @@ fun RequestHandler( val encodedRequestList = buildForm(requestList.replace("\n", "%20")) val directLinkEnabled = encodedRequestList.length < Constants.DIRECT_LINK_MAX_LENGTH - var sheetExpanded by rememberSaveable { mutableStateOf(false) } - val sheetState = rememberModalBottomSheetState( - skipPartiallyExpanded = true, - ) - val scope = rememberCoroutineScope() val interactionSource = remember { MutableInteractionSource() } @@ -155,12 +155,11 @@ fun RequestHandler( viewConfiguration = LocalViewConfiguration.current, context = context, coroutineScope = scope, - onExpandSheet = { sheetExpanded = it }, - sheetState = sheetState, + onLongClick = onLongClick, iconRequestList = iconRequestList, directLinkEnabled = directLinkEnabled, - encodedRequestList = encodedRequestList, requestList = requestList, + encodedRequestList = encodedRequestList, snackbarHostState = snackbarHostState, ) @@ -176,18 +175,8 @@ fun RequestHandler( ) } } - - AnimatedVisibility(visible = sheetExpanded) { - ModalBottomSheet( - onDismissRequest = { sheetExpanded = false }, - sheetState = sheetState, - ) { - IconRequestSheet(requestList, context) - } - } } -@OptIn(ExperimentalMaterial3Api::class) @Composable private fun HandleTouchInteractions( enabled: Boolean, @@ -195,15 +184,14 @@ private fun HandleTouchInteractions( viewConfiguration: ViewConfiguration, context: Context, coroutineScope: CoroutineScope, - onExpandSheet: (Boolean) -> Unit, - sheetState: SheetState, + onLongClick: () -> Unit, iconRequestList: List, directLinkEnabled: Boolean, requestList: String, encodedRequestList: String, snackbarHostState: SnackbarHostState, ) { - val lastestOnExpandSheet by rememberUpdatedState(newValue = onExpandSheet) + val latestOnClick by rememberUpdatedState(newValue = onLongClick) if (enabled) { LaunchedEffect(interactionSource) { @@ -215,10 +203,7 @@ private fun HandleTouchInteractions( isLongClick = false delay(viewConfiguration.longPressTimeoutMillis) isLongClick = true - coroutineScope.launch { - lastestOnExpandSheet(true) - sheetState.show() - } + latestOnClick() } is PressInteraction.Release -> { @@ -244,52 +229,9 @@ private fun HandleTouchInteractions( } } -@Composable -private fun IconRequestSheet(list: String, context: Context) { - Column( - modifier = Modifier - .padding(16.dp) - .fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Card { - Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) - .padding(16.dp), - ) { - Text( - text = list, - fontFamily = FontFamily.Monospace, - modifier = Modifier - .horizontalScroll(rememberScrollState()), - ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - ) { - TextButton( - onClick = { - copyTextToClipboard(context, list) - }, - ) { - Text(stringResource(R.string.copy_to_clipboard)) - } - } - } - } - } -} - private fun formatIconRequestList(iconRequestList: List) = iconRequestList.joinToString("\n") { "${it.label}\n${it.componentName}" } -private fun copyTextToClipboard(context: Context, text: String) { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) - clipboard.setPrimaryClip(clip) -} - private fun handleRequestClick( iconRequestList: List, context: Context, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 52ada0381f2..447e22ae4f7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -25,7 +25,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import app.lawnchair.lawnicons.model.IconInfo +import app.lawnchair.lawnicons.repository.preferenceManager import app.lawnchair.lawnicons.ui.components.home.AppBarListItem +import app.lawnchair.lawnicons.ui.components.home.DebugMenu import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBarUiState @@ -127,8 +129,8 @@ private fun Home( if (isExpandedScreen) { IconRequestFAB( iconRequestModel = iconRequestModel, - snackbarHostState = snackbarHostState, lazyGridState = lazyGridState, + snackbarHostState = snackbarHostState, ) } }, @@ -172,6 +174,14 @@ private fun Home( focusRequester.requestFocus() } } + val prefs = preferenceManager(context) + if (prefs.showDebugMenu.asState().value) { + DebugMenu( + iconInfoModel, + iconRequestModel, + newIconsInfoModel, + ) + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Clipboard.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Clipboard.kt new file mode 100644 index 00000000000..05c98b9ac5c --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Clipboard.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.util + +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import app.lawnchair.lawnicons.R + +fun copyTextToClipboard(context: Context, text: String) { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText(context.getString(R.string.copied_text), text) + clipboard.setPrimaryClip(clip) +} From f8853ac1573631d43a1d62e205072046f8531fd5 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 9 Sep 2024 23:09:17 +0800 Subject: [PATCH 324/527] Fix workflow --- .github/workflows/build_debug_apk.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index 23f1856941b..2cb49104ead 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -16,6 +16,8 @@ jobs: uses: actions/checkout@v4 with: submodules: true + - name: Fetch main branch + run: git fetch origin main:main - uses: actions/setup-java@v4 with: distribution: 'zulu' From 2dbb2fcabcba838aa0a0594bd37a120e8d5cd657 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 08:30:35 +0800 Subject: [PATCH 325/527] Update dependency gradle to v8.10.1 (#2317) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2b189974c29..8e876e1c557 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionSha256Sum=1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 15ef5c3ee348a08b820c355cdb223089c97c2f0a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:56:41 +0800 Subject: [PATCH 326/527] Update app icon --- app/src/main/ic_launcher-playstore.png | Bin 197681 -> 23303 bytes .../drawable-v24/ic_launcher_foreground.xml | 30 --- .../res/drawable/ic_launcher_background.xml | 197 +++--------------- .../res/drawable/ic_launcher_foreground.xml | 15 ++ .../res/drawable/ic_launcher_monochrome.xml | 27 +-- .../res/mipmap-anydpi-v26/ic_launcher.xml | 7 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 7 +- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 5562 -> 3057 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 7567 -> 5058 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3324 -> 2266 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 4351 -> 3193 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 8685 -> 4158 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 11813 -> 7191 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 16344 -> 6443 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 22027 -> 11279 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 26957 -> 8455 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 35179 -> 15862 bytes 17 files changed, 61 insertions(+), 222 deletions(-) delete mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index a0c46279ed9d90e7668d9621b280f121213f07b1..a41561910c88a7af95c02c1c56d1107a6f8fd499 100644 GIT binary patch literal 23303 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

3iAbTs|8G!oW|Vjw_chYL zqWX&aUS@{9xu>I40$8&IVR%;*2=si1Pht`3mA+bBUquhyNVWD^6y@UvPZP)f>;w3h zpz=>ltABPPMXfJ>H0IqfgWW-|UbXEwQ0zxgY{~UQ=`}2d1L!5631#gxuDVx8+|3;Z z?V0RKax>!x0Gob@ptF9op z`sc!ie*_1zea}+wEVlAm8Rjb^%i-4MlQ13agyb?VAU^3evuB5Z_SE;H= z(F8E08!Bnt$vO?2^9uGoEh+2MJ@`l=2CPh)84-1Dl z!-ka;q2RJA1qEB}3ef+Q_uz?YC5aH0Xg%tQ;kPO)QC7&7a60`*M^bYhY0UTa+@Bws zZ5oNl5QF7)WQH;sV~Mz=^D;ukiF_;yF6}XX2M#Jb!;cG|4>uLD2Hw)rHJ

S}<+| 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

uKZ-v%xd4w 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%0D?#mzvS=iG~V+FI}nh@Prdoj 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 diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d11462..00000000000 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9cbf1..8b5801641b9 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000000..68858dffd32 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml index 613857327cc..09b1121b01f 100644 --- a/app/src/main/res/drawable/ic_launcher_monochrome.xml +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -1,23 +1,10 @@ + android:width="108dp" + android:height="108dp" + android:viewportWidth="108" + android:viewportHeight="108"> - - + android:pathData="M25.52,25.53a15.28,15.28 0,0 1,21.72 0c6,6.04 6,15.83 0,21.87a15.28,15.28 0,0 1,-21.72 0c-6,-6.04 -6,-15.83 0,-21.87ZM42.35,30.46a8.4,8.4 0,0 0,-11.93 0c-3.3,3.32 -3.3,8.7 0,12.01a8.4,8.4 0,0 0,11.93 0c3.3,-3.32 3.3,-8.7 0,-12.01ZM65.8,28.84c-0.96,0 -1.73,0.78 -1.73,1.74v11.76c0,0.96 0.77,1.74 1.73,1.74h11.68c0.95,0 1.73,-0.78 1.73,-1.74L79.21,30.58c0,-0.96 -0.77,-1.74 -1.73,-1.74L65.8,28.84ZM57.15,30.58c0,-4.81 3.87,-8.71 8.65,-8.71h11.68c4.78,0 8.65,3.9 8.65,8.71v11.76c0,4.81 -3.87,8.71 -8.65,8.71L65.8,51.06c-4.78,0 -8.65,-3.9 -8.65,-8.71L57.15,30.58ZM37.89,64.13a0.86,0.86 0,0 0,-1.5 0l-8.34,14.54a0.87,0.87 0,0 0,0.75 1.31h16.67a0.87,0.87 0,0 0,0.75 -1.31l-8.34,-14.54ZM30.39,60.64c3,-5.23 10.49,-5.23 13.49,0l8.34,14.54c3,5.23 -0.75,11.76 -6.74,11.76L28.8,86.94c-5.99,0 -9.74,-6.53 -6.74,-11.76l8.34,-14.54ZM63.57,60.67c1.64,-2.75 4.64,-4.6 8.07,-4.6 3.43,0 6.43,1.85 8.07,4.6 0.62,1.04 1.68,2.11 2.72,2.74A9.48,9.48 0,0 1,87 71.54a9.48,9.48 0,0 1,-4.57 8.13c-1.03,0.63 -2.1,1.7 -2.72,2.74 -1.64,2.75 -4.64,4.6 -8.07,4.6 -3.43,0 -6.43,-1.85 -8.07,-4.6 -0.62,-1.04 -1.68,-2.11 -2.72,-2.74a9.49,9.49 0,0 1,-4.57 -8.13,9.48 9.48,0 0,1 4.57,-8.13c1.03,-0.63 2.1,-1.7 2.72,-2.74ZM69.5,64.26c-1.21,2.02 -3.08,3.91 -5.09,5.12a2.51,2.51 0,0 0,-1.21 2.15c0,0.91 0.48,1.71 1.21,2.15 2.01,1.21 3.88,3.1 5.09,5.12a2.48,2.48 0,0 0,4.27 0c1.21,-2.02 3.08,-3.91 5.09,-5.12a2.51,2.51 0,0 0,1.21 -2.15c0,-0.91 -0.48,-1.71 -1.21,-2.15 -2.01,-1.21 -3.88,-3.1 -5.09,-5.13a2.48,2.48 0,0 0,-4.27 0Z" + android:fillColor="#000" + android:fillType="evenOdd"/> diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 5c65feb13a4..bbd3e021239 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,5 @@ - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 9f66525319f..bbd3e021239 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,5 @@ - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 2b56a86cecc5fb718192957ac9976d939ad49cb9..215c29420c3b89a34fe23cef48c28fa0e2d800b9 100644 GIT binary patch delta 3052 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 literal 7567 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 4f6519bc3e1609e769b636c86eccfbece311e004..9339572a47c6520de9dabf60d1fbce20663f1c6e 100644 GIT binary patch delta 2255 zcmV;=2r&2j8QKw$BYy~?NklI6 zW^B{6(>kW(q)FPzq@7OkM~665otO#=2rOT_AfSv9F}2hvDu^*gMU!fb#ZN3?6cH6z zmi=PoYuUY=KKI^T_I>vSVUw8kkKCDO4twu8?|FWE?|lbl%zv0K$3r|;?V+*pi8L;h z;vNEhjXVA>D9)|KZ^zbIcY^87L3aB79f4~%1 zz^tJZ_n<3a1>BR;r-1p_KFh0KL;O|CQYflwMUs1(1UsFrYXW z#fYJl^Zv#mT`rM1KsWqz5m+3&8;7pg0@Fh$Bgd zMnB_cmNy+@{j*4V06=;$09gRY=C3XkBMzsha7MFFFgkFV(aGzGml&lU1&mRfyA;Ra z?*|$E^Bkjn7yT-$VYK1!&^3M!07(0s0aou|)L>%7m{#X*F$<&66J<-7~AS0Ud# zS5lR>m-GOD&A|ZZ0g#DeJ&F+nm2=$RH1!C+IeuOR|K- z?A&srU%xJ7bgx&gm;G1UOL_o6YOnx$6lb6qQGY2N9$IlpHavX;runz5SbrM3bHTe4 z2QSGvA3(E}(Qk{?`OA^-?2+sH&a2n_9)bnP06+$c(@~75R6MrzM1yQtdPcqG)A4$_ z{-5jevkIV4ox40Y03hI5(gOfeJ|_Sjbnv2V`0-5%q+DNtZ}iF?xqje+7r=Yuh6KoY z5Ptya07yr18j2AEmGPcz$j`dr7^7tz0`pJ9%=QoE`R{i#+E^*)eE@B^1AoLF_=Ul* zl>qAU-GPs_y`%>KBnJTyo94F1rZL=n{8oql5FxQ`fw}0ez$g03-q6_oD?!20$u`Q&5aJoR(sX^>|fQ zgx=4dUWltXepFqcETxgSUFeXWuY$@Rb*zXt#$J^+9(LZ1#`697_BoQz_`k$?1h z8KZ60jIyvB&*W&=m0E>=9=>yqQ7zt7m3T|NSgg%aN_q$uU?TvMQM?Joi1$L7;<$oeBZ8}Dm>`swu_w>?xea&R@bcxTmE%+6qNc()h z2LQYo3_v0PHljEQ#fUyF%Iu<;k~{Q7t~1n!&*BT{#PK?ETRfll@%5A*0DrJP7=R4` zNJ4RFI;{8k%R@CFY|5w;m8??4Eqi|0vQ@fRGd)T|ISTy{fm7qByj&*R{QD{_&3}Mt^5?0P_;6qUWAHYM<5i7R~I~ z%4S-&QJ`MzJTiC*6YrfyqvFA}g|^+)p?~zQb2JCW_C=` z{T7-FGl4m4ou|Y)Ki_fKop{^7sTDiL=lYq4Qo248&q;7ri#y@lv0vKDHO~?rEJYO2 zoadNW__743uGRvKp?^d#KtgncDc>GpE})3^Elfm(W}COt!QM|q({rv?GIrHyw6nX` zYt~J_vF{gkI_qw#K|Y`7_oNKR#^i-+?6=bj+g_Me_Zsxjfp{xt5WweEJyZZjdqjIa zMVRuKhyhCIJU)1Y?x(9Rv#L&Kc^hvi`6~5E+!gCyO^-ow4}WIFrmWEeOgH7)r?(qv zy2-#q4A3k*_;trIdZ)XN4)H~>Ns%!W^7V$73GcpE4sVZoJq|PE;@I&&j$AO|@Lvy3 zy0XqTxqf};q`Eg8Jbsb#^_*0@&NiX)FBRisX7b}R_Wl5T$b?6sIpcKE%N|+%q4{{e$i{*NlqiP-=E002ovPDHLkV1hy(aI^pb delta 3321 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 DamiSw diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index b58f8b2ed674ea89f7c313d5d3969437e98e4808..a1a963963eb4f2f9dc1cc2b5e5eea1af5fd7b26e 100644 GIT binary patch delta 3189 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 bdztco8L7y?)!Nd_00000NkvXXu0mjfh>|zx literal 4351 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index dc55538d344a30f5e649040f0b3394c1ec6ff985..0c68fcff9ad2d8feb66c69c08b37b678ad8ff8ac 100644 GIT binary patch literal 4158 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 IM6N<$f{tbU`2YX_ literal 8685 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 literal 11813 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 Tw7JMG00000NkvXXu0mjf5_ZO6 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 3c105a690cec3a6aafc2681cedbd23b6529a284f..57897b26990e240ab94e9243a9337596d20d993d 100644 GIT binary patch literal 6443 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 K3RQ56cmD%;w{!pi literal 16344 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 qIrf~{J$|ofqyLwozH(U`icZUZG=k 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 FV1kiD9;N^Q literal 22027 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 L>8VyITZR4~z-+ky literal 26957 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 Rb%69dxcB&Og$5$}{{ZZMZ~6cL diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index c5ef8799841d60ccdad75ad985d732264205be83..c3b529cc279d84219bf7c68a9697d7324b95f660 100644 GIT binary patch literal 15862 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 CF(tYH literal 35179 zcmZ5nWmHt(+r7ik43bhqDT2}^T>~O0jX}rIAPv$rfP_j4(v2Ygq`PP6ERV180Xuk#LWPl$W{I9JVLJiDrs%IH-8GzSlP`_ zg|@)v%PuWE1(+lukzInx({Y=<7MmNi^KQ%V{Q8`5AE`Qa=*B-VyJckID#Ooa@2qZe zW_>{oAF>gImAhoQiM>_6%fB1D`+uL_s$_X=`0xJ2uNVIa3RU6W42WQpAw$R6pWIK{ zZ-@X(I0G^Q zWCDI1Fi2Kl86ZQNX)hzo z@?}<{czUGAus$H{M0}gsC}Gx3nqVX|Y`xPx!ZcPEM?dd=v#-vy`%vcxpO_1{H$uD6 z<2Ljgch>KPqLBYi@xt8+>WE}HoL(C|j4An&q0cT>>)^}#m*b+jUYuCK!#NwngJIE{{b=|bDepXznj1#b?<`=Lye9VnKNl~Y;N$9+|H2+lINq0R{ zf9Jgw?Y?5UJ7W%<-;u6gyFIA4|AjE)x48++T^Qn(M;KkPcvy)7s=g4p=K7KJQFK-`bkZv>xHlJFsD zzyJ)|0LIw=4yfV-n)ylUQPH<=z%7XV>Lu4j!rYn}8{x=D#7Vw~A?zkN9MAMV3~HgQ z;WC3g$>zelw;GoN`9T%RDrxJ_yt+j`;=e$KY+o_ac*^xB^9XC31be-Qu<7Ll2#bf% zU$?R;+6>`P&hw&(Yfr%luz3&lUPUR%$d!_w`O2vepGp11Ht(lLNesezyOzSmy{0NQ z_4KT(XOnm5>%Q<8+;;P_t?eiLqE*H3X?)2XISmp;2N*XpZTWZqyu*A2PUO3BePN~zIXVv-{6OL!E|c#DJY8o<;8}k zb^Z}6yd%f2uQ76gN*C4XhfY!QIy-#S{CuwZ!XhsCuVrX~4gxKLdeg&d9YARW&18y{ z38r$SbFy*F=?t#O5R^bGUdoapL@n_%LI)AWm^R!C+vHLAFx8F6qU}$yXH%vOEohd; z_$o60SC(x-saB6~-L#|Z{Su#WqP`|6MTM=r*nh<)i-C;%lCR!RN2##J+CKbXyswbC zpVA$%$gFG?>Oyl+GxaP;&@`e-;g*sNKQ1b+?vu%|shXUZoXhqi50Zd|G83!5RO_vO zEgf^9nQZ>T9{0cx6bM*CyWZyXRK)1pKJ=H7Wwc8qvqTVb?tB15f@hT{9%R#sMmSSa zEwM%CU?SL+^dM}nIAHpn=-i*jNq@ZN7hUgeF)as#FK>hgy&P@{H&h{5h)&lK#D?XK+s@_!H&Z3^^FS91i@UePIvpkZ|ylz70$86c9Y0S zi3iZ&DtShFkae$^(z(U$W3I_XuOQKL0$HO2xw;JeXhRJWJ(+*sDCBe+2T5>B0`L|@ zJ`GE?OQXWC57}wVr3%+jDI_h-SM3sJyq*RC5o$N3WaRDS7otG}aBJ3f6w%zqtd1GF z)fqAB%AAu7Va3l0c{%r`Ib{g9Iox*&mxTD-i}}RlKBR6cKif*?`5cs;yQtL|Wy|<= zRzjC54ATdbg6QX9U;6CHkvg_wH;18!ht8qR6c0?N zYliECVj8l7rIz&`BXfj&pN& z9`@*38nsLkuxa%(!cvlkunAt!ODc2W*kL5loIJ?WE^)foW?{VB; zA?7pDB7EhKNt(lS09s+aXCBcpeUjClCRc6_>(|G-6-r)V`nhN7OHsLhc>oj%O<})S z$ivBX38iOxYG1Kcp{UG;+n#j4`ps%fZJx4^L^4kg+$U_no!z{LK%wpjjL4WY-QR=& zunR^U&&Aj|wuTI0wP5$YlnAIK37B92xb1nHY2b);&N-*w-3O!<&+I5c)B04RaU^x8 z#v6DJj_>Q8=mMKK900-KNcHkabvV{&A!GQu=&bzCm5xj-I>s>LoHKN>d(@9(D*?fU zfznfn_i)A;{vz@h=BafGzv{2w{@tdO)&x8Qn%g%9IWc@i1ffvgs3mJ$ zl2YB?9Qh^p{2y^w6fE%V=9UNVMiX&OCZ{au-PcBKdS%db!9G$+=#{P`8aEET4ef>I zh13k3Ctz$k>rljP-jOx4c$yhY z43rAjF(cS;V`Pv^%!4d3$mjAK*!GMn^@d3Rwc{U5m%L&FHh2edeBM$9W{y|9;)SF= zc9wsfG{Vtqh|!*$8eI7*suWB8A4(UJ`sU< z1HeUnkfnyWxyrsUITnu=a2<&s>@-7~q`sEepZfe!emTVyuDW7_dy|;uq|->Z-`rhp z>XnO=dyFBqRDx=jF+?U=e8RA@Gogqjy!K-}mUN{s+u?=Fz=db2o;+E$MGsJlrRC^h z1^ACW=kR1+(kM|3*El9V`e*`7)*yyKMzLmuUW0hEa-yTYwkLWh-A(aJlE(Rxi~10#F^ zEO59NTlnsz=e}l5bY=0zGJWP8l$7Z9^)e zOE0d3yYEa@;m)B=u=*4gj9c_W8$^kWy_^dC%ap{6^tYoN7sq)OH5ccZEIX?GzHv`oFR- z7<&O?e^U#<#1M=;m06%d;m#ZDN6#Xo&u;G=ILbxtDA>O)n^K(9s;K|g?B?mRGlwRS!w7g$V4D=LI3Yh19- zWB7HFWG!#C7WW(;&15-fP8LEQbL&){TtSWnQ4LlJrLuOf#wE-Au5wp%JQiz1-8Dp4 zkllq$iHEnAP#^FUx9tO&l&iFb?ev^sMk6)KtRRck1A_)rSnZYkuBQGYouay46bx=ReU7x?2}NeM*^F}PG>!%b z<;J)3-4LFLWaX9HrG*5LloiLfelMgC$%Vk&+`8RZy{XvERtVFcYqfVnmVV zxIqgll`lFgOt;{JD#8eR95mepf|@lzcbF6tXu~&X0-z33qqnIY>@(la;n|c**M4PzzJ|%z!7JO?C8a60_QKvK>g_U|SX3&A_;rI(R;RDk`(;m=5g`+)CHJ zJ(LOkS!{QOj?Fk||Ha34=SJ4@SAS~4jT(%^KX6~!XR=w+ZP1>_Gi9q*fQB2OUq-Qq z9Y1)%w_`?S`_7Y8tJuQUQ4R>~tia*7pwZC>Ymt_BlOHps&^}=cG_?lmJxl1_5gN)L zJ_%rned|w1b9dzv_tW6a>F@{XIj(1m-Pc?37REZaR?NP?6Ihg8GK087HUH7L4K1#u zy8Y~HkEwkP7onIrwc6oTflxDhsVyn&)zazqdN3kX7wtfg4Ojw|am=4p+W#)U>KXO_ zeIQbeo0k1al2t1FRcX)6SzGw8oy!oPN1KwcFEuneAetPhp1cDFDeI+E2uAd1L|rQ; zW~iop&ZxLR@3h#7!4P@#z`7H4$AA1(?^|7c3>;G^aE_2`Q>YeYj}6uauvZVt1L$Gu z?)4$`6XZ^x$cpvJap%ICJ8PF*IRkbMbE$y^=C7|AQv#>}73fJ9E}d>;mwPpqlZU?Ve7d5&`skPKVIe4g74;@oVQBwU;?XS1>_%umi5eO zt_+=c%ekPS#!N!hrR*A;A@8VuDBj`?*YEyJ>12fV zcDPdy#gSH50IrCqt0sn2{4)BZ$`M&X3ooAaFxbn6#JZ zJ^{liBb~>Idl-B@dlI)XzVDaO)!`qGeY?`DhPm8@HxoBB;=zHzpiveQoHX3&VpSzS zzbs_8F)h1IG+CobPt1uGFijx-?;FuhMrpz`=iK)$9dMGl<4liw&kaTy%^4r1U|HDs zn;zyXw{D<;L4HtR1hJ>UA{vHp&YcuhA+AgVhiieSW)?$1d1^Tnrnm>|Pt=3|HA|TA zcal%J7$nL_+5ShE&^2Zp!K2Xrk+Jnn4@8DN=h1 zdmYY(VaBl(oAj?n@D^AIHfRrT}on z+Xw&yN=_d6TOs_!ED_W|kkcC+$;(_3gpQ#IxWi865qH=uK?B)&M>)v~#J)9pf%vu! zgN`n9@ZP-$#4j&NRB`}xLWDt9qC2_q|4h#x>8Wf74fyj*V@aF}-kv_-G{!jA;zu^X z@DbVjbnV4NHn>5VEYlt(CgZyir3Dtm749V{k9IAB%j4n<4?xEt?D=z=XC7;Ybn}8F z1;a1f_E<*LYd-*%xV_mOCz+EW*~K?w!>`*}l1Q56tRK-z*aL#y?E(?%S={3H8R$Whn`)iflF{`pgX_y>~H-EB% zFZ!pq$%q%vwNa@zW!QWqS;MFlecQwxanWoL)MKq3H^4_fq_9+F^rq~|Mpy~ahlT8% z$x_^tPRhhrbTuANZM_UbCU-SP|3N9M&1(cZ_0O-(0!INeGqRjGrQp2|r>jy>JL;>Q z!$pWiOeN(-{wI%fV~xhA@?_0PImvZTZAtDN3=Ju(?VLlhW)gF@vxTft9&l$5m7ip_aQ`UK)R-UE z{62VQ5(+9mBt_AF!4}N41GOIO1uL#2XjkZJfk;iGz8Jqp2{%IOVgXmCIc8~3B_y!k zH!L^p>{ZBc%K~R8^>Q3_ARYr^t3HNFjc>|q3Y^AfztMxVsVdbB7&7xX;jkUESo6w* zHN~@F8aN0ClDIit&e-LSwk3bgjYaOK0YW`S#6vr|72l!g=<~7N7j091mDG|w*B4*e zRM)z!llU+jNW^l%u?)BXPXgi%3uycOZ^?&IYHJ+#_{p-L?&9~Hr=lrE%;8HzgsJ9i z$`c&n8&LF*knPF!rG{syuWO%%BeXyI$B@-Wi1HZD`pFrl=A8IZQpb9?Xm4%39-Zf3 z4*2{w7~E`n3LoSe`TR$GQZ2^<6uDa;HT1exNQ`^BUp(fXP`vTs&K$9#vJ|NuO(81d z!?C#hsk0zV#v4FvS~<}N#a7qY&9h$PM}Ej`kCl3#Ln)PYRcvgS{5w1~3PBe98#r;t$k?Qu(%ny_ z*s97oY0%S&X^Z~65ni=+N3ry7avBGg6};~ICJ3~w=H z>of<|N~)wZ&}>PlEXjgc5DYd>FsEj@UXhU9A@)Dz2@IU&5dMTt7bzKnifsOs6SAjt zS)_uR8(y*KKhHl-$3fDej^%mY!>({-C9*&HICVC&Axw8rd=|rp^%t&<%Q502`>IGr zZ>fnk*7;j$HFB~AkQ$SJd!D_H#jKsb9mc+u3tej>tHYHrkDa&4IL zWj%$5Jo5ZOjuU=dGb{y@qFsI|Rk0sGyJ zmZ{H5?({C}8`Bz`OMLUgUm!2y%NaIuaqRTrnm}{fe{;XB32OZ_cS?e6+b;yhMKn7v zY%pr5xGx~;j|7%sQasT|w)Bc4EL8LdB-ULLv)wIzCSQ<_`VaJ1XvNa)!I%C>QZ77C z7^4|JzV24g5Ty`4s$nSA4$Zyt;9N2(zeFT7LwGztYK!Ula^+KgkYC4${>8o--{SWO zrMo3snRD&%edm8_7gQu2skINR@ohD>Qpj2zk=4Bu*Uq%$&M&7v>dx~+-{G?;y~5$M zcDXbYeqyHC9|aXB!5b8}X*@S<%!C#wqq{aqnt%3Y(?18nWl}&!6052zpQ-MlT@zwE zBc@?nUG!l28(uf^^iTQS2XSJ^?TbC)i?JZ3p0LR4UVz8 z85m?d7uh3Q$EtzUr_%I!G5+_`SO$wyW%@YJR#Lse&s)9I2L5<8?uf-+@`djV8G9M3 zhO{j8xAkm-p~x(AiD;(hTU*I@o`amGB7VVM!X#6g%P~A@GpFh(vWu}hautxQKVyOH zB*viG?s(W5#cY@ym>45W$nUV1cV}FY;Kl`9af}sxPHz^ZQYVSds*hLt=Z!PseuuPn zD1b7{z%u7I<#bh*L-<<5NCgH6S4mcsF9_*J8=ku@W!vGNBS)$8ORnB#bE_a)ch=^g zmzJhx%};$7VqvG-zWm$#Na-SC4z20 zXVyHAj-p(co0VY5nl68t6W*QVTrjwmnP^;S{l$v5MqbyIIu(4|8ls%;NpiH>IMdSL&C%q7{^uM&$zmaF`EKurpb>Ml72Eal z3=`x0cqoxR#zw5G*y4ft#$BiNEd}ZiH67?GYf4!4#Brh|3C@B?t|eM~Z)U!Q*+W*I0w-Hbivm>>uCHRx-_Q2ov4Y;PZQ0w2EP z%{rGn>E}Lwu;L{5M)+A)+kQ`^s;(&k$KqkY{blJVm@xLUI&r0{nrt%i+aa_R_f@+d z%tbtfjqLJ7g3NQa_B6>N=Lvi_Z3gO8S4K(~z(p+r2c?xDX#){(nX>7-s@SR?(SA6U z^sRw%zx&J0FkYg|>ub7)uGIV)ASzq^e~8%D=-bC6a%hanqinIw7_75j>HMU+4chrs zDcSL7)PFL0g75uWmUNwu`gQkI^cRy&=Cg8y*DFDV9Y8m3oHGu=%0WdMYZp+vA3~N> zf)fCWLOFNSGM?Jsn_G*#}S+!zWo_aXmwLi!7$Q}{IoiTIz7JB28PyI=P zw;m7v`(SPdj@6Xm=UcuZ$Ys7AAK0YF4F5FbY;vHoa$O)u6}b{EpX0Db4?SU zhH{K2Qqr7LKrX*2VvC;rao##qm)wJENtXj?u~CVmnpR^OegO6t8N%l_0T#Mj9{Har zf9|XqSNhPNb4P=OeqV@aF34Z3LN}eEl5dBGD|JHKGJN~BV>UsDqu=4jOtX+#!|c&3RqO6O?o3|%$d@5IF-(wC z{TQEg&&+%f=<(tL<-Ggy)HjlH=fVzPRyh(Fk5%*;Rd+Bj>`S2%F)|l!V0MYS7Sl4 zFfTZ5y~kkY+uome`TiI>dlv`8MLOYUN&09NHh#Z7dF$gB?Hf{uCxp?r5?1L#-s65b zmZEub&Vj~oV=a)UZ872WV{>(HX@h%y=F=3w7~dM?$Wu}#Q#`w%{%@=H%>!i=d__|s z+t3SiH8M75CmEv5mcZ?&_>i+9r`k7Lwxki(E^J1K7bcl4^=K z9Sq(WL1iKzE2W?QFyU9>z0YeGM~;j)>Acv;+ZdvHrnjwMyJHq%XL9H?x4=Y~(51TH z|Bf1u3%g#L|Bu7^FQjzTB074F6TjTNTt+ZN=JZkBH^>t6RY`Jh7Q?ZUrXJe!PpnQ7 zV$7=$A_R>(d#K^aGIFoY6v{5~r_u|Gl8nt(112gzBSp-FHzdqyNP_wxbUDelXLW+p zMPZBO<+oUW=)=i9NE^}=F;XH2^Z8Tz#svIgadc}{q*}Xl_sY6RhBe$};IU;e4P?og3R!D6MZkyHKAdr_2lCBi<(T}xvfXBh zcMXp;{AS*iJ!E&lB1K#DF~dbOw7=A<9S~!yO%flRut{Yz$!?jg*wJms?K@G_J35dX zOxN3Sf-G5zxVG$<&TvXPo`3Jp@P6h@_ihQ2&dRMByYqq(Ss(0c2^NCiNz--fxvQFi z(@=e*)9S>*RwUoBb3BH0Ix$2-kT#fpRxIF9HozcHTini4#j+! zxZ&+9;y-}aA44S}*U`38CDn^>bM%YyOU4x}pZRY*uldjZgg-!2JBf zA5X5*xmUBN1!sPp5s|ca3v{fp-=%o>Qop@IoGqQ0d9j}LJoF{0;PNlFh`be0@*aK& zeH=ee_fz{Hx;Egl37rknS)3H=4Lm<-ZSS5O0LhV{!eQ#BW(V*0{B!WGp9K|z$Ztq~ zo{U;?k2htvT$_dK=E-gOlLWSeIKLAp`1+T(KYM2Pp_<4|Gp8|gRNU;;=Bnt&l%rRq zaCMhc><#A#eF3u60*sNkm;K(V(`aGFaC{eWrM)AWa*QZzo`g?zijtw@Qz43DPwVF)W{)g?l5EMl05wufCbM+HI$RA0d zahR;|2~HC$b~puyd@OwAJo{r=itv9sFVe0!Ty$KXEpN(rF@Rkz50+7|UMbw~XYwR2QrHdDxOMo3&Y(haY|04It!Vb9D|#ex}$fnBxXl z_k>Q+3CJ^NCmSw0^*^!?AxSEzOKrYtU>2o@I(+HFiA#YS2p#2{qAvSG=wxb^M&+QN zdgolOm?dwvtT~+lZ=Dm+!jC#Vrkueva8~tuf=)t<-&2guPHNLmT+bF2f1?Y%45>%n z`|(5I>IgN!mK4MBCf`|}CWYzz=J256A$U*O4^1e!mn>IWh=Ng%6g!?MnH*8KGMMe- zw~$)JCCTY0mq^67%|&hOGr%6*)1Rm97EY!p+VU6e4Z_6|)-Il-mC9khsoU$15ginl zA@-7X$_(lC>tbhrQpf484Z>JzWFH45!<;Y#ag)GXKN-PLVH3c1n&%Boo3wvshJi)M ze^TS2>)ps@e|rRHi;|JjGwc*Lj~8Cgu&3!91eQ58AV?NE|Iou%daOPnhA+^+hE6pe z?+@V4O4vc+(-~HbKwUkmy!vXSiiD#zYjSI(sIcETL{Zd{q(B%v={C`l+wDrH0il~) z*YntqG?R=Du;2=s`)VVG{nN{BGVQsHwvNHAa#p4Pv8t)jb?W?Z1hz|70b)df9J5i% z#bd1~z8vM0wq&qes2S$o{e~SX^z;q5${k?!&%WC}R@?m6GbUA5(ZLNr7g?s&XcIBx zX_b9^^iI)=TRI!{Wn*X>0K`6~ZBNu_o4w$kKc34q1-}cTJ*5Aj{_n2~Uh_+x8yZ3SqCGhOWSMh6g?Sjad-*5N`k^->~1 zbSyjDS+&74F%FMLmYOQR9gv+X1u5igr}er5`-ECHU|+u|*&oNxe6DMBrlUVAYUC@Q zi|+Ty)!+2MPfLQt2p3DaOBC_X&)UOJl~ATa36y5_V7UFXkPOki?v7cd!`O5G8-E*( zG4*Q{gjFa7DO!udHWPJxH@;)@_P;1M-Te89$oDqO=X7_G31fDQx1`68bz5aD+VX{Z zkIxiwY?#OSn4+`-{IsPUXA%|&R2EH}O$QSeQS`9Vu2gGcr)Y+A5OtQ{B-pjI@9hW~ zN%r|dLwIl&Vgs3;e-X$(aKEH~_`<-i{hW+OjXf`4TlX!=PI7Zx%Mca5i2gIb{BGy` zGEIAps}8}rRE5++eO3aG`si-rYLYrK9}BK)uJ9=WLyQxIp#x7&n*R#HS(rayS z`Km5?Snm0Bb5q1{T4Stw?{t2yR4ND#JVYk(4@Hl0&;I#(>t|^3aWA9fx$m-QxOa90 zX(?xb+RDf;k%RR~uL}L9da??7Z|UFRRq`I(HVCjazgBAx)Mr(xarHCU?ye*CWf~rX zHvS=pPXD9Ny(V-{g37iKYpo0XF;`egxNY@;7{i7;!(a*n;OGff+vpOupJ`q~`fs^f zpXRrh5@DS8%(m~&qFXlF66hv}1b|RG2z=?`c__x0uA_N2oHQ;5YlI>qRMkoY6j9@& ztE=urZVMqYoX%>A!3-O|Jbx5Txvt!PgX6r)V96 z%CZCm}J0`xKZ++25$WYUc3Et<{e;zc{Wxw}9CCM^g*t;YXYqMBo`|wrA z3Ch!!ZQloYPcnVhgn^tv;svtA{epO1r#$_$A7_6b%;l9dlHf-QCc0YSCMoPF?1k(x zN05@UqcW|coXt-?O@0 zTC^oq=f=IdK=qIBO*)sDXfuS}ekFKJaCy8rDUlo5r} zQL&O(>d;fU&@Azkhsx^Csu`X#UhXkq59}cUU}#R8hywXXQ<}+p&nYgr!gMbsavzoT zHv7|p2q@8*>{#1;u+wp&k9NV3z>~Mb*_;L8S5#2&ELb+h6y2J!q)bG`|K?Q(2O+(} zRi&)7&AQ;z(WmG}cbdR)n#U@$M?cHk1c7~U>uC9R(LEJ@#~0@b>?ABvH0=WDOpFU(t#me z&ZFVA!{sTm%+rL3gCJsmExN$B*#s#G3toeqcr5=SuZrm4lIS}c9ojicS{D*ez*m=I z?Xys@b;RZJC|?VHfKXpY7V99QIDmX?Y#izlH!6tg zRe`*o*K3&G6ZZTXF1%Se{3DtISfVtyppd;l=7NOjR}mv}Dezuy=eaJ5ho)VktFQT- zHI6?-gWR@#rBe|3Rn=kzc8IfYaKt|EOP$S!;2cH;nsV(~5|jzc{jdB&Pn;Isq`jE^ zTeFta9E^%$l0*pHg=vV(%yIDFGR8ZCS^R|7=n{0YC zr_#yWRiW#gH&`h%2~2@8FP=khpm1E#;6z24=j$Vz$*%hkcO}VxR@p2&B?y8#)>kLf zdB_D2V5FiOlNUq%SZNRK=_xX zey&B;{IZ!9^%e`Vdz7t7y=Yew*b;hQvZ+~cIQ(>&%UX%HcB&Zy>ZL4lY0q~LN6H*k zulUuQb+Mf@PPfyN-kM__TdPB2$@2I3>!__R?$Rm_T+1&bit!_^!QsP)=@k7F{Oz!7 zktwkzf=ja@yx4ML1NZKg5I&sG>6jt>4U$bUZ2cz`&az5|!Y;*zh|x8KZqHeG&B>J6 zsvJqi_(-Ggi6*s8HjUDnI}1auM@ zJOL!~jnDzvuTelH=W2_ZSmtzjcGhCb0`L6Umn~=Kr5n;aBatb+e>R^5qnha-y5a*^ zomL_RM^m>p8nD2e{s+K)Cmj|Y8~{L3P+>D@z?z>ICOwzM|1G}w=2zq;P{-0=wjg(( zVqL!2^s|uIEG5E4UDn$zwErRIcMXNT-R3zb-wAY5^9AoPrQ~&|pvYW^wUi=3GbJFs z@4QCNVsH04qd)%Z;Ekx^3~ah*vLymYqMQBMtkf3Nr?1mGfxnLC2&1{&UoR)b4(vq{ zM3r0*M$4S1j>&xHos~wMHu9>ry|g_&emVogI1u)Zkt1OMQA=)b8T&0{FZsEzL-5Fd z?s>?Vh(zOo0$mw)A&%X`w}IY^LIMu@veIBkZ!d}&!*)^Qh~!OEf&8Q;Ly*|=7L{HL z-kTDnQ)$bY&L8^D(jGudfS`Oq`CJj0S<5^j+T)EZ6tQ&VHVsU#5=bX1EfD3d_0$O=h26P3kin|iOo{Ku6sGfZ0s|UBd*3#kF=8i3hc7ZNj@}OC;g6WmD=FPb>R=AEx3!a|$CsJ12Asd|_HR5(iLQ8Ikt3Pp?=I zrdKt;P!Zpa+3+K65}6KUuf`+x@jH@MI|NV?>zFG!@y-0O6XPJhER}boy-+x8n+~P8 z@njUI<~=2x;Db%Hl*!ZvmI-W&tfw$%d)`?*Xu_JE+qYhn)`MBmar><81FM8_GzCpO zgxU>$huU68Oa1a0k!osC>}f&u*L2|_vQ;@_m=2SD%@Z(a+N`=^Q>N&a~4v0;4g>#{+C+s`XkyyJGV zJ7O>bMvvvE#9Mw@LimwSNindU4yPCyEZCjP*dm%j;57@^D~3*Cd@ZUJ9xVjvk0f~n z#EM*bF2hZvQ7-jsv_58g|b5L{TREJe&(lS+I5h; zUl*UfRHW!*-OmDhFy(G9ag=XTx;aU+cHrhM{P|ePWNat%{a-ciJ74dh$g}xTs8r+T z7SwC3*VOrkw(kCq!6VNF@JF}P5F%d(nn)jk;Na{5RuV_Lqh}y<^nJeto-`0Ng{v=} zZM@Acba9e#iqvct$K+>Ul9^qUJB2ZT{oxzyT==eihbm*#qOcdzAo7klu0i7JS*2(e zl>nItvLKmc`4a(HnIKI4=RAQ6J?<2_D~RPqN*4!Rz(U z!#gp3?nDN&ZFVHfG;T@NK+d(x1^%>oESJUd2JDjBjadKtBp(@R7EIp>6y-~(!ezG5 z6v@tc6&Y=THU0$i$7;X*|FqQA=(d(Z-eR%^9v?Sn7EqRk*(;nU#MY;WH@!I@pg4y) z-?sQ|eyvF_=!E)o(J)9|Ab#S*G18X72+$L%10^~EuqDZH?uxQ6iJy4;)lC{EgR6=o zzW2Yq0t%$J^?ZfJhy)Q2OAIKc{7hZWWm$|iAUuD!u$^<|p&P!7ypq0~7Ccj=Q6t7R z@Wq=qYv*yt72o}`HlM2IC>HJboXBj-2A=v)!+wdjQ*j-_=Ukq-CpjDp{MGm_t>}Hj|)4z z?}U8VGCdEW*lATg+OnS%$hAK>~Sy4o@QzeMA`b-}GH zbS@m>r)5vc_COn(aylei?Wh$kC+1rLYd9xPd-9DLk8L7cEIL3t}r6F4DAtst?(u(k0??i1*1%PMc*5{8w|aCR z5j$z!1XAyVxA6@`<$B9fR7T%!))K$q$uHTkbuQtOp`h9Q$JN$ic}Q${UcJ zN|grHO~AP$wru<42#(uFn1QGDLieM${;H#i4qj+ix~d>Zt|x`4>A>G1oY%-NA9vbP ztqm1hj#1@iJ+^OtPSkYz@bq1u#BIaR>Fqwoblc9=q3h=BtHuuzV%FDApRX-0)`wF3 z5kmckB8d;G2#R(z1c5z#kQ1~9O%9ZC=8%|(OsU(1DwzNpl&bGPC=L*6;qrK{gYK;LwNl4bbbzwwtXP%!n<$xiS~t2 zc=YoT(}wQ@- z9Q(XY`NZr8j7P}3)dvo*ML+3h&4}H$(&(Nqrs=~q$3c*)E81gd*&;c=9Ybowlq%6mfD(Um!5?v(QBb#q4HHStL-oy9ScyyZwQZWeZ4@$;!zzH`o zu!#JSf>3`Gwm*RaGX0}1X<+(c>!TZ)xM*vfYAW(ndQUvY9x4}yp-1cD9IjEU@rw$w zp3jSZa{*=&5zTXa6mB3`9awH zDW3OuS}zMD2_1Z*pzMtK>_YzzFNq+a;HU#G)#qMzR>#e2zqjk-~0RXp|wo6Qnc_nmncYC zt+?+6){<()T=+8&qKVte0Y`E6wJ22%BPD{JBn)B(0ob0f1=-F&0Sk5e7yT9Zr!M8& z9>^C|EWt6QQ##fj;4n;oUFmsy!F&DCyJZS>Rvz4NZFcVd`yV8)4=_6bm123TIdcr_ z^B)I#ezz0;O&2)p)i%=Z^9T&Ny?%}c>~5M6Y>q_O_$9ge-*LjQr$R7!reqjU&PVht zC$W|fx6wF1AUO3sV+H;{$+fgT7P68ApI{b?55N#kH!i-kD5&+v`}hwbjEa+e9F^@5 z%4zx!bdP`0Sl|RdIJRyHVpd`1^m9??^8w`09X{WIMWsLrBu7yM8XO+~sHZRxX@NhBw%Bd57(S=NpQl5Jv{mmla4a9Yt2->s z+##M?#YSJtpGSi#x&7FW@^2$RYS=n@6lk8n)G(9m1kZ`U4GXIOd{F2Sy<`*2Wq~OE zaO6!kDzZXyVu~|Ri>opMcpfTi+_bSA(N&+CC&D~3Ks>!pB%eVF7NzY1S1@Ix9wuG) z29DRm_B4@(U_f9P_nFAY@ji<8d4i#wh@{y7P+l$I0AamvInc6F7g{FVNv+YdL5*

+ + Get it on Google Play + + + Get it on IzzyOnDroid + + + Get it on Obtainium + + + Get it on GitHub + +

+ +Due to different package names, Lawnicons on the Play Store will install as a different app from other sources. + +**Development Builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) ## Contributing Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. @@ -23,6 +41,3 @@ Android developers can find tasks [in our issues](https://github.com/LawnchairLa Please use **Lawnicons 2.10+**: `Open Lawnicons → Tap "Request icons" → Submit the response`. You can also use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml). - - - From 90fb478bdd84ce9c878e55888b7774e9a473c547 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:54:42 +0300 Subject: [PATCH 367/527] Improving the repo description (#2349) * Improving the repo description * Update README.md * Update README.md --- README.md | 17 ++++++++--------- docs/images/badge-github.png | Bin 0 -> 7198 bytes docs/images/badge-google-play.png | Bin 0 -> 11994 bytes docs/images/badge-izzyondroid.png | Bin 0 -> 25025 bytes docs/images/badge-obtainium.png | Bin 0 -> 16470 bytes 5 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 docs/images/badge-github.png create mode 100644 docs/images/badge-google-play.png create mode 100644 docs/images/badge-izzyondroid.png create mode 100644 docs/images/badge-obtainium.png diff --git a/README.md b/README.md index 1a44311b94a..5148f25aa2e 100644 --- a/README.md +++ b/README.md @@ -5,31 +5,30 @@ [![Discord](https://img.shields.io/discord/803299970169700402?label=server&logo=discord)](https://discord.gg/lawnchair-803299970169700402) [![License is Apache 2](https://img.shields.io/github/license/LawnchairLauncher/lawnicons)](LICENSE) -**Lawnicons** is an icon pack developed by the Lawnchair team and supported by our community. -Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. +Lawnicons is an icon pack developed by the Lawnchair team and supported by our community. Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. -Lawnicons is best used [on the latest version of Lawnchair](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style → Themed Icons → "Home screen" or "Home screen and App Drawer"`. +Lawnicons is best used [on the latest version of Lawnchair](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style` and choosing the desired option. ## Download

- Get it on Google Play + Get it on Google Play - Get it on IzzyOnDroid + Get it on IzzyOnDroid - Get it on Obtainium + Get it on Obtainium - Get it on GitHub + Get it on GitHub

Due to different package names, Lawnicons on the Play Store will install as a different app from other sources. -**Development Builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) +**Development builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) ## Contributing Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. @@ -38,6 +37,6 @@ Designers who have studied our guidelines can fulfill [the popular icon requests Android developers can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). ## Requesting icons -Please use **Lawnicons 2.10+**: `Open Lawnicons → Tap "Request icons" → Submit the response`. +`Open Lawnicons 2.10+ → Tap "Request icons" → Submit the response` You can also use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml). diff --git a/docs/images/badge-github.png b/docs/images/badge-github.png new file mode 100644 index 0000000000000000000000000000000000000000..6e1e822becf96f7feb6191a50ca2cf280e3963a7 GIT binary patch literal 7198 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 B@JRpw literal 0 HcmV?d00001 diff --git a/docs/images/badge-izzyondroid.png b/docs/images/badge-izzyondroid.png new file mode 100644 index 0000000000000000000000000000000000000000..c99bafbe894a729d91c9f5d0b11c084d663dcd2b GIT binary patch literal 25025 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 Date: Wed, 18 Sep 2024 16:16:14 +0300 Subject: [PATCH 368/527] Fixing badges in the repo description (#2350) * Fixing badges in the repo description * Update README.md * Update README.md * Update README.md --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5148f25aa2e..95b86334a6d 100644 --- a/README.md +++ b/README.md @@ -11,18 +11,18 @@ Lawnicons is best used [on the latest version of Lawnchair](https://github.com/L ## Download -

+

- Get it on Google Play + Get it on Google Play - Get it on IzzyOnDroid + Get it on IzzyOnDroid - Get it on Obtainium + Get it on Obtainium - Get it on GitHub + Get it on GitHub

@@ -33,8 +33,7 @@ Due to different package names, Lawnicons on the Play Store will install as a di ## Contributing Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. -Designers who have studied our guidelines can fulfill [the popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). -Android developers can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). +**Contribute:** [Popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103) • [Development tasks](https://github.com/LawnchairLauncher/lawnicons/issues) ## Requesting icons `Open Lawnicons 2.10+ → Tap "Request icons" → Submit the response` From d3c428056a05d3de10f712925867a1e0907a85a4 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:24:24 +0300 Subject: [PATCH 369/527] Resized badges (#2351) * Resized badges * Update badge-github.png --- docs/images/badge-github.png | Bin 7198 -> 7118 bytes docs/images/badge-google-play.png | Bin 11994 -> 11911 bytes docs/images/badge-izzyondroid.png | Bin 25025 -> 24785 bytes docs/images/badge-obtainium.png | Bin 16470 -> 16322 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/badge-github.png b/docs/images/badge-github.png index 6e1e822becf96f7feb6191a50ca2cf280e3963a7..cd70b9325a2a3b7d3b4ac4d45f85ed63161687f2 100644 GIT binary patch literal 7118 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 Q-}9K8TK`pH?4I!d0AqaM%K!iX literal 7198 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 B@JRpw diff --git a/docs/images/badge-izzyondroid.png b/docs/images/badge-izzyondroid.png index c99bafbe894a729d91c9f5d0b11c084d663dcd2b..f0127c6b0e0b250a017e5d99e27da3cfe8dcd506 100644 GIT binary patch literal 24785 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 TVvK=*Ai#Q|q@`G;VEO)kBgv_q literal 25025 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�u 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 Date: Thu, 19 Sep 2024 02:24:52 +0300 Subject: [PATCH 370/527] Badges update, +4 links (#2356) --- app/assets/appfilter.xml | 6 +++++- docs/images/badge-github.png | Bin 7118 -> 6930 bytes docs/images/badge-google-play.png | Bin 11911 -> 11693 bytes docs/images/badge-izzyondroid.png | Bin 24785 -> 24397 bytes docs/images/badge-obtainium.png | Bin 16322 -> 16050 bytes svgs/obtainium.svg | 2 +- 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index bd300c1726b..fc0ecc123d8 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4191,7 +4191,7 @@ - + @@ -5559,6 +5559,7 @@ + @@ -7467,6 +7468,7 @@ + @@ -9848,6 +9850,7 @@ + @@ -12641,6 +12644,7 @@ + diff --git a/docs/images/badge-github.png b/docs/images/badge-github.png index cd70b9325a2a3b7d3b4ac4d45f85ed63161687f2..5129ff38b7182d0daccacea2a148742cb9d4a68f 100644 GIT binary patch literal 6930 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

Fy4IIj&2H2AE_|b|8p`j0w_-0nM5$P=KwD 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 Q-}9K8TK`pH?4I!d0AqaM%K!iX diff --git a/docs/images/badge-google-play.png b/docs/images/badge-google-play.png index 0ef784c98f2684601f402a034e7a8aeefd434c7f..1d17b6aa53aa7e4e740013b5cc5219ae7fc96f34 100644 GIT binary patch literal 11693 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 Sr4eAiM|vr*Dpw_A7W6;5H}PWt literal 24785 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 TVvK=*Ai#Q|q@`G;VEO)kBgv_q diff --git a/docs/images/badge-obtainium.png b/docs/images/badge-obtainium.png index 20fc752ecabc6580e5e857f74a6ae99ccd6076d2..c5cee26fca89e9be538966e69e6e8aa6d40cf71e 100644 GIT binary patch literal 16050 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�u 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 \ No newline at end of file + \ No newline at end of file From 42b2e60c7996c8a973d5449e2f2124e8664c2f00 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 19 Sep 2024 02:41:10 +0300 Subject: [PATCH 371/527] Minor badges fix (#2358) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 95b86334a6d..72ff7a935b8 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,16 @@ Lawnicons is best used [on the latest version of Lawnchair](https://github.com/L

- Get it on Google Play + Get it on Google Play - Get it on IzzyOnDroid + Get it on IzzyOnDroid - Get it on Obtainium + Get it on Obtainium - Get it on GitHub + Get it on GitHub

From de40d3d95d6bd1b896e78f5e9717f1a0719bcc24 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 08:27:27 +0800 Subject: [PATCH 372/527] Update dependency androidx.compose:compose-bom to v2024.09.02 (#2353) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 349c0b3fc72..277c13ca6a8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.2") - implementation(platform("androidx.compose:compose-bom:2024.09.01")) + implementation(platform("androidx.compose:compose-bom:2024.09.02")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From fd4a0f77f67f00ddc3e5acc54b2ecd17ff9bd41c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 08:27:36 +0800 Subject: [PATCH 373/527] Update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.6 (#2354) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 277c13ca6a8..1f941b58c1b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -153,7 +153,7 @@ dependencies { implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.0") - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") From 27b7b54e06d8800cd9b6a83e3f38fefc89b9b1c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 08:27:58 +0800 Subject: [PATCH 374/527] Update dependency commons-io:commons-io to v2.17.0 (#2357) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- svg-processor/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 3be504e8e2e..1778d5ae5d2 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -10,5 +10,5 @@ application { dependencies { implementation("com.android.tools:sdk-common:31.6.1") implementation("org.dom4j:dom4j:2.1.4") - implementation("commons-io:commons-io:2.16.1") + implementation("commons-io:commons-io:2.17.0") } From e19f70a5e0e626a0232692c18ab5480b1760e2b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 08:28:27 +0800 Subject: [PATCH 375/527] Update dependency androidx.navigation:navigation-compose to v2.8.1 (#2355) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1f941b58c1b..f8c62e2cb83 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.0") + implementation("androidx.navigation:navigation-compose:2.8.1") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") From ca9c4bad8782200d455eb7504ba581e9d416c8d3 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:04:22 +1000 Subject: [PATCH 376/527] Update README Badges (#2360) * Update README badges * Simplify README badges * Add GitHub to development builds download links * Add back release APK workflow status --- README.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 72ff7a935b8..d4876fb92da 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,22 @@ # Lawnicons -[![Build debug APK](https://github.com/LawnchairLauncher/lawnicons/actions/workflows/build_debug_apk.yml/badge.svg)](https://github.com/LawnchairLauncher/lawnicons/actions/workflows/build_debug_apk.yml) -[![Build release APK](https://github.com/LawnchairLauncher/lawnicons/actions/workflows/build_release_apk.yml/badge.svg)](https://github.com/LawnchairLauncher/lawnicons/actions/workflows/build_release_apk.yml) -[![Discord](https://img.shields.io/discord/803299970169700402?label=server&logo=discord)](https://discord.gg/lawnchair-803299970169700402) -[![License is Apache 2](https://img.shields.io/github/license/LawnchairLauncher/lawnicons)](LICENSE) + + +
Lawnicons is an icon pack developed by the Lawnchair team and supported by our community. Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. @@ -28,7 +41,7 @@ Lawnicons is best used [on the latest version of Lawnchair](https://github.com/L Due to different package names, Lawnicons on the Play Store will install as a different app from other sources. -**Development builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) +**Development builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) • [GitHub](https://github.com/LawnchairLauncher/lawnicons/releases/tag/nightly) ## Contributing Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. From 16f4bf63662d0c646a580cec6232bca8737518e8 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 19 Sep 2024 11:08:15 +0300 Subject: [PATCH 377/527] Small badges alignment fix (#2361) So that the description is designed in the same style. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4876fb92da..1e845234bfd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Lawnicons -
+
GitHub License From dcf3e888b6bf4c6b57760f4465ef64ec74be7e6b Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:40:06 +1000 Subject: [PATCH 378/527] Stop debug APK builds when there are no relevant changes (#2359) * Add localisation to auto-generated release notes * Don't build on certain paths * Add more paths to ignore * Remove workflows from paths to ignore Co-authored-by: Zongle Wang * Fix spelling --------- Co-authored-by: Zongle Wang --- .github/release.yml | 3 +++ .github/workflows/build_debug_apk.yml | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/.github/release.yml b/.github/release.yml index 6d1afe45003..83c6d122036 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -12,3 +12,6 @@ changelog: - title: 🧑‍💻 Dependencies labels: - dependencies + - title: 💬 Localization + labels: + - locale diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index 77bd320cb55..611c982ff26 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -5,7 +5,27 @@ on: push: branches: - develop + paths-ignore: + - '**.md' + - 'LICENSE' + - '.idea/**' + - 'docs/**' + - '.github/ISSUE_TEMPLATE/**' + - '.gitignore' + - '.gitattributes' + - '.github/labeler.yml' + - '.github/release.yml' pull_request: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.idea/**' + - 'docs/**' + - '.github/ISSUE_TEMPLATE/**' + - '.gitignore' + - '.gitattributes' + - '.github/labeler.yml' + - '.github/release.yml' jobs: build-debug-apk: From 26750df98409a9917bb1fd03e8ac2eeb39e72b22 Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Thu, 19 Sep 2024 20:46:01 +0700 Subject: [PATCH 379/527] Replace find with findstr (#2362) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 82dceff8ba8..baf8ac3ee5b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -178,7 +178,7 @@ Please check [the icon tool guide](/docs/icontool_guide.md) for more information **For Windows**: ```console - adb shell dumpsys window | find "mCurrentFocus" + adb shell dumpsys window | findstr "mCurrentFocus" ``` ![](docs/images/contributing-image-3.png) From 8c8098e23e16e452db97e9b89f230f1b9cc32567 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 07:55:01 +0800 Subject: [PATCH 380/527] Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.7.3 (#2364) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f8c62e2cb83..9160a0a1ada 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -155,7 +155,7 @@ dependencies { implementation("androidx.navigation:navigation-compose:2.8.1") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") val hiltVersion = "2.52" implementation("com.google.dagger:hilt-android:$hiltVersion") From d26520e61c4ddd371d49967857854dfc66f3a2d7 Mon Sep 17 00:00:00 2001 From: T Pratham <66767767+Pratham-T@users.noreply.github.com> Date: Fri, 20 Sep 2024 23:26:29 +0530 Subject: [PATCH 381/527] +3 icons (#2336) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added Icons for Entrust Identity, Geogebra 3D Calculator and HungerBox Cafe * Enlarged Entrust Identity icon * Modified HungerBox Cafe icon * Remade 3d calculator icon * Re-made entrust identity icon * Re-made hungerbox icon * Icon size fix – entrust_identity.svg * Icon size + visual center fix – geogebra_3d_calculator.svg * Less density + center alignment — hungerbox_cafe.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 3 +++ svgs/entrust_identity.svg | 1 + svgs/geogebra_3d_calculator.svg | 1 + svgs/hungerbox_cafe.svg | 1 + 4 files changed, 6 insertions(+) create mode 100644 svgs/entrust_identity.svg create mode 100644 svgs/geogebra_3d_calculator.svg create mode 100644 svgs/hungerbox_cafe.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index fc0ecc123d8..2c28322301f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -3107,6 +3107,7 @@ + @@ -3891,6 +3892,7 @@ + @@ -4543,6 +4545,7 @@ + diff --git a/svgs/entrust_identity.svg b/svgs/entrust_identity.svg new file mode 100644 index 00000000000..2d7d0593f3e --- /dev/null +++ b/svgs/entrust_identity.svg @@ -0,0 +1 @@ + diff --git a/svgs/geogebra_3d_calculator.svg b/svgs/geogebra_3d_calculator.svg new file mode 100644 index 00000000000..355f5776d14 --- /dev/null +++ b/svgs/geogebra_3d_calculator.svg @@ -0,0 +1 @@ + diff --git a/svgs/hungerbox_cafe.svg b/svgs/hungerbox_cafe.svg new file mode 100644 index 00000000000..34af88a0b15 --- /dev/null +++ b/svgs/hungerbox_cafe.svg @@ -0,0 +1 @@ + From 4f3019bf02b5ba23dfdde9e24110e0925e28f0b1 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:02:02 +0300 Subject: [PATCH 382/527] 2 updates, +14 links (#2369) --- app/assets/appfilter.xml | 22 +++++++++++++++---- svgs/dubizzle.svg | 1 + ...iaomi_games.svg => xiaomi_game_center.svg} | 0 svgs/zomato.svg | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 svgs/dubizzle.svg rename svgs/{xiaomi_games.svg => xiaomi_game_center.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 2c28322301f..cbdb4544e58 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -825,6 +825,8 @@ + + @@ -1011,6 +1013,7 @@ + @@ -2953,6 +2956,7 @@ + @@ -3017,6 +3021,7 @@ + @@ -3905,6 +3910,7 @@ + @@ -4211,6 +4217,7 @@ + @@ -4460,6 +4467,7 @@ + @@ -5256,6 +5264,7 @@ + @@ -6936,6 +6945,7 @@ + @@ -7146,7 +7156,6 @@ - @@ -7362,6 +7371,7 @@ + @@ -11271,9 +11281,11 @@ + + @@ -12203,9 +12215,10 @@ - - - + + + + @@ -12519,6 +12532,7 @@ + diff --git a/svgs/dubizzle.svg b/svgs/dubizzle.svg new file mode 100644 index 00000000000..4d253588b6e --- /dev/null +++ b/svgs/dubizzle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/xiaomi_games.svg b/svgs/xiaomi_game_center.svg similarity index 100% rename from svgs/xiaomi_games.svg rename to svgs/xiaomi_game_center.svg diff --git a/svgs/zomato.svg b/svgs/zomato.svg index a5995218889..b308151243d 100644 --- a/svgs/zomato.svg +++ b/svgs/zomato.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 12093522099997b6136b445836aff87419e5bcd4 Mon Sep 17 00:00:00 2001 From: Euan McIntosh <55203189+McIntoshEuan@users.noreply.github.com> Date: Tue, 24 Sep 2024 03:43:59 +0900 Subject: [PATCH 383/527] + 8 icons (#2370) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added 8 icons (ICOCA, JOYFIT, Kura Sushi, montbell, Mynaportal, Pixel Screenshots, Pixel Studio, Yamareco) * Update appfilter.xml Fix spacing in appfilter.xml * Name fix * Icon size, recognizability and consistency fix – google_pixel_studio.svg * Icon size and consistency fix – joyfit.svg * Icon size and consistency fix – mynaportal.svg * Icon size and consistency fix – yamareco.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 8 ++++++++ svgs/google_pixel_studio.svg | 1 + svgs/icoca.svg | 11 +++++++++++ svgs/joyfit.svg | 1 + svgs/kurasushi.svg | 3 +++ svgs/montbell.svg | 3 +++ svgs/mynaportal.svg | 1 + svgs/pixel_screenshots.svg | 5 +++++ svgs/yamareco.svg | 1 + 9 files changed, 34 insertions(+) create mode 100644 svgs/google_pixel_studio.svg create mode 100644 svgs/icoca.svg create mode 100644 svgs/joyfit.svg create mode 100644 svgs/kurasushi.svg create mode 100644 svgs/montbell.svg create mode 100644 svgs/mynaportal.svg create mode 100644 svgs/pixel_screenshots.svg create mode 100644 svgs/yamareco.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index cbdb4544e58..faa8ffa7d60 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4599,6 +4599,7 @@ + @@ -4963,6 +4964,7 @@ + @@ -5255,6 +5257,7 @@ + @@ -6306,6 +6309,7 @@ + @@ -6640,6 +6644,7 @@ + @@ -7935,8 +7940,10 @@ + + @@ -12255,6 +12262,7 @@ + diff --git a/svgs/google_pixel_studio.svg b/svgs/google_pixel_studio.svg new file mode 100644 index 00000000000..4da0e3e85d2 --- /dev/null +++ b/svgs/google_pixel_studio.svg @@ -0,0 +1 @@ + diff --git a/svgs/icoca.svg b/svgs/icoca.svg new file mode 100644 index 00000000000..0693a0c80e7 --- /dev/null +++ b/svgs/icoca.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/svgs/joyfit.svg b/svgs/joyfit.svg new file mode 100644 index 00000000000..1d884fb39c8 --- /dev/null +++ b/svgs/joyfit.svg @@ -0,0 +1 @@ + diff --git a/svgs/kurasushi.svg b/svgs/kurasushi.svg new file mode 100644 index 00000000000..990a80b386b --- /dev/null +++ b/svgs/kurasushi.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/montbell.svg b/svgs/montbell.svg new file mode 100644 index 00000000000..284c170deec --- /dev/null +++ b/svgs/montbell.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/mynaportal.svg b/svgs/mynaportal.svg new file mode 100644 index 00000000000..6e8c406b972 --- /dev/null +++ b/svgs/mynaportal.svg @@ -0,0 +1 @@ + diff --git a/svgs/pixel_screenshots.svg b/svgs/pixel_screenshots.svg new file mode 100644 index 00000000000..803c4682186 --- /dev/null +++ b/svgs/pixel_screenshots.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/svgs/yamareco.svg b/svgs/yamareco.svg new file mode 100644 index 00000000000..46f73504710 --- /dev/null +++ b/svgs/yamareco.svg @@ -0,0 +1 @@ + From c3741734e57c2a069eeb96d9f39b30711bf0d7a9 Mon Sep 17 00:00:00 2001 From: John <136599603+Johny-adri2@users.noreply.github.com> Date: Mon, 23 Sep 2024 21:55:11 +0300 Subject: [PATCH 384/527] +1 icon (#2352) * Update appfilter.xml * Add files via upload * Add files via upload * Add files via upload * Update appfilter.xml * Name fix * Fixing everything except the color --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/dns.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/dns.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index faa8ffa7d60..8f8f0aeb43f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -12949,4 +12949,5 @@ + diff --git a/svgs/dns.svg b/svgs/dns.svg new file mode 100644 index 00000000000..11fe40d15e3 --- /dev/null +++ b/svgs/dns.svg @@ -0,0 +1 @@ + From 4b7d5f8cacf5fd404941e5fc25cbea03417fd7b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 07:57:27 +0800 Subject: [PATCH 385/527] Update dependency gradle to v8.10.2 (#2371) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8e876e1c557..fb602ee2af0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionSha256Sum=31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From f60ab27727c921a5328c333d83357ec53876d5b4 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 24 Sep 2024 07:30:34 +0300 Subject: [PATCH 386/527] +11 links (#2372) * +11 links * Update appfilter.xml * Update appfilter.xml --- app/assets/appfilter.xml | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8f8f0aeb43f..38790376a3f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1082,6 +1082,7 @@ + @@ -1914,6 +1915,7 @@ + @@ -2672,6 +2674,7 @@ + @@ -2764,6 +2767,7 @@ + @@ -4138,6 +4142,7 @@ + @@ -5257,7 +5262,6 @@ - @@ -5626,6 +5630,7 @@ + @@ -5657,6 +5662,7 @@ + @@ -6309,7 +6315,6 @@ - @@ -7903,6 +7908,7 @@ + @@ -7943,7 +7949,6 @@ - @@ -8602,6 +8607,7 @@ + @@ -9240,6 +9246,7 @@ + @@ -9253,6 +9260,7 @@ + @@ -11629,6 +11637,7 @@ + @@ -12262,7 +12271,6 @@ - @@ -12723,6 +12731,7 @@ + @@ -12748,6 +12757,9 @@ + + + @@ -12949,5 +12961,4 @@ - From 7a6b8ee2d78f7a16a0f1efc464b49353ada859c8 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:43:26 +0300 Subject: [PATCH 387/527] +9 links (#2375) --- app/assets/appfilter.xml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 38790376a3f..234cafab49a 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4831,6 +4831,7 @@ + @@ -5416,9 +5417,10 @@ - - - + + + + @@ -6479,6 +6481,7 @@ + @@ -6989,6 +6992,7 @@ + @@ -7834,6 +7838,7 @@ + @@ -8311,6 +8316,7 @@ + @@ -8757,6 +8763,7 @@ + @@ -11149,6 +11156,7 @@ + @@ -11792,6 +11800,7 @@ + From 47ca824761a5827574ee6b9fe90852c94185e7bd Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 25 Sep 2024 18:14:12 +0300 Subject: [PATCH 388/527] Repo cover, +3 links (#2373) * Repo cover * Update README.md * Update README.md * +3 links To start the workflow. * Minor fix --- README.md | 14 +++++++++----- app/assets/appfilter.xml | 3 +++ docs/images/repo_cover.png | Bin 0 -> 652282 bytes 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 docs/images/repo_cover.png diff --git a/README.md b/README.md index 1e845234bfd..3e5c33613cd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# Lawnicons +

+Lawnicons repository cover +

+ +
@@ -26,16 +30,16 @@ Lawnicons is best used [on the latest version of Lawnchair](https://github.com/L

- Get it on Google Play + Get it on Google Play - Get it on IzzyOnDroid + Get it on IzzyOnDroid - Get it on Obtainium + Get it on Obtainium - Get it on GitHub + Get it on GitHub

diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 234cafab49a..e8dab68b692 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -9895,6 +9895,7 @@ + @@ -9907,6 +9908,7 @@ + @@ -10575,6 +10577,7 @@ + diff --git a/docs/images/repo_cover.png b/docs/images/repo_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..42ad4c4d4eca3cff18fd0ebbde47f81208a34438 GIT binary patch literal 652282 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�wN}UaxkzRR6>b(OAM^NZ^nFik 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 JLN|7o+%67%lPWtnp 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 DtVcON literal 0 HcmV?d00001 From e1d930d732ac0f2670a683e7b40b7008d1115b01 Mon Sep 17 00:00:00 2001 From: John <136599603+Johny-adri2@users.noreply.github.com> Date: Wed, 25 Sep 2024 23:34:31 +0300 Subject: [PATCH 389/527] +1 icon (#2374) * Update appfilter.xml * Add files via upload * Add files via upload * Add files via upload * Update appfilter.xml * Name fix * Fixing everything except the color * Rec Room icon addition * Update appfilter.xml * Add files via upload * fixed the stroke joins and end caps * Add files via upload * fixed the size * Fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 2 ++ svgs/rec_room.svg | 1 + 2 files changed, 3 insertions(+) create mode 100644 svgs/rec_room.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index e8dab68b692..fe3e3ca9dfd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -12973,4 +12973,6 @@ + + diff --git a/svgs/rec_room.svg b/svgs/rec_room.svg new file mode 100644 index 00000000000..6d131a086c6 --- /dev/null +++ b/svgs/rec_room.svg @@ -0,0 +1 @@ + From 9d2789d0d6f070227a21c755fb54cf78ab0acdb8 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:47:56 +0300 Subject: [PATCH 390/527] [Barter 7] +100 icons: BDV, G2A, Zillow (#2378) * [Barter 7] +100 icons: BDV, G2A, Zillow * Minor style fix * Minor style fix --- app/assets/appfilter.xml | 104 +++++++++++++++++++++++++- svgs/agen_pulsa_termurah.svg | 1 + svgs/airalo.svg | 1 + svgs/anyconnect.svg | 1 + svgs/apowermirror.svg | 1 + svgs/asr_voice_recorder.svg | 1 + svgs/audiomack.svg | 1 + svgs/autotrader.svg | 1 + svgs/balance.svg | 1 + svgs/bdv.svg | 1 + svgs/belfius.svg | 1 + svgs/blusmart.svg | 1 + svgs/brain_it_on.svg | 1 + svgs/captions.svg | 1 + svgs/casas_bahia.svg | 1 + svgs/castle.svg | 1 + svgs/cinepolis.svg | 1 + svgs/crookcatcher.svg | 1 + svgs/cube_escape_collection.svg | 1 + svgs/cync.svg | 1 + svgs/d_point_club.svg | 1 + svgs/das_e_rezept.svg | 1 + svgs/digitales_amt.svg | 1 + svgs/dmss.svg | 1 + svgs/doku.svg | 1 + svgs/downdetector.svg | 1 + svgs/driefcase_abha.svg | 1 + svgs/drops.svg | 1 + svgs/emias_info.svg | 1 + svgs/erudite.svg | 1 + svgs/famipay.svg | 1 + svgs/filmic_pro.svg | 1 + svgs/fineasy.svg | 1 + svgs/floating_apps.svg | 1 + svgs/flow.svg | 1 + svgs/fred_meyer.svg | 1 + svgs/g2a.svg | 1 + svgs/geogebra.svg | 1 + svgs/gett.svg | 1 + svgs/greentuber.svg | 1 + svgs/greggs.svg | 1 + svgs/headway.svg | 1 + svgs/hero_fincorp.svg | 1 + svgs/hushed.svg | 1 + svgs/hvv.svg | 1 + svgs/hyperos_calculator_go.svg | 1 + svgs/indianoil_one.svg | 1 + svgs/insget.svg | 1 + svgs/inshare.svg | 1 + svgs/intra.svg | 1 + svgs/jr.svg | 1 + svgs/k_plus.svg | 1 + svgs/khatabook.svg | 1 + svgs/knowunity.svg | 1 + svgs/kotak811.svg | 1 + svgs/lingotube.svg | 1 + svgs/mahavitaran.svg | 1 + svgs/minimalist_phone.svg | 1 + svgs/moscow_metro.svg | 1 + svgs/my_ooredoo.svg | 1 + svgs/myasus.svg | 1 + svgs/mygov.svg | 1 + svgs/nectar.svg | 1 + svgs/nicelock.svg | 1 + svgs/nobroker.svg | 1 + svgs/nu_online.svg | 1 + svgs/op_mobiili.svg | 1 + svgs/oyo.svg | 1 + svgs/pickme.svg | 1 + svgs/pixelful_icons.svg | 1 + svgs/podsbattery.svg | 1 + svgs/primer.svg | 1 + svgs/resolution_changer.svg | 1 + svgs/sainsburys.svg | 1 + svgs/screen_check.svg | 1 + svgs/sensibull.svg | 1 + svgs/skycash.svg | 1 + svgs/snitch.svg | 1 + svgs/spar.svg | 1 + svgs/status_download.svg | 1 + svgs/supervpn.svg | 1 + svgs/swap.svg | 1 + svgs/telda.svg | 1 + svgs/televizo.svg | 1 + svgs/tiptop_vpn.svg | 1 + svgs/toggl_track.svg | 1 + svgs/transperth.svg | 1 + svgs/turkish_airlines.svg | 1 + svgs/tv_2_play.svg | 1 + svgs/ux_led.svg | 1 + svgs/verizon_call_filter.svg | 1 + svgs/versa.svg | 1 + svgs/vesync.svg | 1 + svgs/video_downloader_story_video.svg | 1 + svgs/vk_video.svg | 1 + svgs/vr_media_player.svg | 1 + svgs/vysor.svg | 1 + svgs/whatnot.svg | 1 + svgs/wienmobil.svg | 1 + svgs/xiaomi_service_plus.svg | 1 + svgs/zillow.svg | 1 + 101 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 svgs/agen_pulsa_termurah.svg create mode 100644 svgs/airalo.svg create mode 100644 svgs/anyconnect.svg create mode 100644 svgs/apowermirror.svg create mode 100644 svgs/asr_voice_recorder.svg create mode 100644 svgs/audiomack.svg create mode 100644 svgs/autotrader.svg create mode 100644 svgs/balance.svg create mode 100644 svgs/bdv.svg create mode 100644 svgs/belfius.svg create mode 100644 svgs/blusmart.svg create mode 100644 svgs/brain_it_on.svg create mode 100644 svgs/captions.svg create mode 100644 svgs/casas_bahia.svg create mode 100644 svgs/castle.svg create mode 100644 svgs/cinepolis.svg create mode 100644 svgs/crookcatcher.svg create mode 100644 svgs/cube_escape_collection.svg create mode 100644 svgs/cync.svg create mode 100644 svgs/d_point_club.svg create mode 100644 svgs/das_e_rezept.svg create mode 100644 svgs/digitales_amt.svg create mode 100644 svgs/dmss.svg create mode 100644 svgs/doku.svg create mode 100644 svgs/downdetector.svg create mode 100644 svgs/driefcase_abha.svg create mode 100644 svgs/drops.svg create mode 100644 svgs/emias_info.svg create mode 100644 svgs/erudite.svg create mode 100644 svgs/famipay.svg create mode 100644 svgs/filmic_pro.svg create mode 100644 svgs/fineasy.svg create mode 100644 svgs/floating_apps.svg create mode 100644 svgs/flow.svg create mode 100644 svgs/fred_meyer.svg create mode 100644 svgs/g2a.svg create mode 100644 svgs/geogebra.svg create mode 100644 svgs/gett.svg create mode 100644 svgs/greentuber.svg create mode 100644 svgs/greggs.svg create mode 100644 svgs/headway.svg create mode 100644 svgs/hero_fincorp.svg create mode 100644 svgs/hushed.svg create mode 100644 svgs/hvv.svg create mode 100644 svgs/hyperos_calculator_go.svg create mode 100644 svgs/indianoil_one.svg create mode 100644 svgs/insget.svg create mode 100644 svgs/inshare.svg create mode 100644 svgs/intra.svg create mode 100644 svgs/jr.svg create mode 100644 svgs/k_plus.svg create mode 100644 svgs/khatabook.svg create mode 100644 svgs/knowunity.svg create mode 100644 svgs/kotak811.svg create mode 100644 svgs/lingotube.svg create mode 100644 svgs/mahavitaran.svg create mode 100644 svgs/minimalist_phone.svg create mode 100644 svgs/moscow_metro.svg create mode 100644 svgs/my_ooredoo.svg create mode 100644 svgs/myasus.svg create mode 100644 svgs/mygov.svg create mode 100644 svgs/nectar.svg create mode 100644 svgs/nicelock.svg create mode 100644 svgs/nobroker.svg create mode 100644 svgs/nu_online.svg create mode 100644 svgs/op_mobiili.svg create mode 100644 svgs/oyo.svg create mode 100644 svgs/pickme.svg create mode 100644 svgs/pixelful_icons.svg create mode 100644 svgs/podsbattery.svg create mode 100644 svgs/primer.svg create mode 100644 svgs/resolution_changer.svg create mode 100644 svgs/sainsburys.svg create mode 100644 svgs/screen_check.svg create mode 100644 svgs/sensibull.svg create mode 100644 svgs/skycash.svg create mode 100644 svgs/snitch.svg create mode 100644 svgs/spar.svg create mode 100644 svgs/status_download.svg create mode 100644 svgs/supervpn.svg create mode 100644 svgs/swap.svg create mode 100644 svgs/telda.svg create mode 100644 svgs/televizo.svg create mode 100644 svgs/tiptop_vpn.svg create mode 100644 svgs/toggl_track.svg create mode 100644 svgs/transperth.svg create mode 100644 svgs/turkish_airlines.svg create mode 100644 svgs/tv_2_play.svg create mode 100644 svgs/ux_led.svg create mode 100644 svgs/verizon_call_filter.svg create mode 100644 svgs/versa.svg create mode 100644 svgs/vesync.svg create mode 100644 svgs/video_downloader_story_video.svg create mode 100644 svgs/vk_video.svg create mode 100644 svgs/vr_media_player.svg create mode 100644 svgs/vysor.svg create mode 100644 svgs/whatnot.svg create mode 100644 svgs/wienmobil.svg create mode 100644 svgs/xiaomi_service_plus.svg create mode 100644 svgs/zillow.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index fe3e3ca9dfd..09697d4c869 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -246,6 +246,7 @@ + @@ -270,6 +271,7 @@ + @@ -543,6 +545,7 @@ + @@ -581,6 +584,7 @@ + @@ -711,6 +715,7 @@ + @@ -745,6 +750,7 @@ + @@ -793,6 +799,7 @@ + @@ -864,6 +871,7 @@ + @@ -981,6 +989,7 @@ + @@ -1007,6 +1016,7 @@ + @@ -1215,6 +1225,7 @@ + @@ -1305,6 +1316,7 @@ + @@ -1816,6 +1828,7 @@ + @@ -1848,6 +1861,7 @@ + @@ -1856,6 +1870,7 @@ + @@ -1994,6 +2009,7 @@ + @@ -2413,6 +2429,7 @@ + @@ -2433,6 +2450,7 @@ + @@ -2452,8 +2470,10 @@ + + @@ -2486,6 +2506,7 @@ + @@ -2663,6 +2684,7 @@ + @@ -2766,8 +2788,10 @@ + + @@ -2776,6 +2800,7 @@ + @@ -2858,6 +2883,7 @@ + @@ -2929,6 +2955,7 @@ + @@ -2949,6 +2976,7 @@ + @@ -3129,6 +3157,7 @@ + @@ -3404,6 +3433,7 @@ + @@ -3424,6 +3454,7 @@ + @@ -3540,6 +3571,7 @@ + @@ -3550,6 +3582,7 @@ + @@ -3688,6 +3721,7 @@ + @@ -3757,6 +3791,7 @@ + @@ -3901,6 +3936,7 @@ + @@ -3946,6 +3982,7 @@ + @@ -4274,6 +4311,8 @@ + + @@ -4386,6 +4425,7 @@ + @@ -4404,6 +4444,7 @@ + @@ -4561,8 +4602,10 @@ + + @@ -4570,6 +4613,7 @@ + @@ -4732,6 +4776,7 @@ + @@ -4781,6 +4826,8 @@ + + @@ -4831,6 +4878,7 @@ + @@ -4972,6 +5020,7 @@ + @@ -5012,6 +5061,7 @@ + @@ -5165,6 +5215,7 @@ + @@ -5227,6 +5278,7 @@ + @@ -5249,6 +5301,7 @@ + @@ -5473,6 +5526,7 @@ + @@ -5650,6 +5704,7 @@ + @@ -6203,6 +6258,7 @@ + @@ -6535,6 +6591,7 @@ + @@ -6606,6 +6663,7 @@ + @@ -6634,6 +6692,7 @@ + @@ -6774,6 +6833,7 @@ + @@ -6911,6 +6971,7 @@ + @@ -6934,6 +6995,7 @@ + @@ -7070,6 +7132,7 @@ + @@ -7311,6 +7374,7 @@ + @@ -7463,6 +7527,7 @@ + @@ -7880,6 +7945,7 @@ + @@ -7966,6 +8032,7 @@ + @@ -8138,6 +8205,7 @@ + @@ -8247,6 +8315,7 @@ + @@ -8550,6 +8619,7 @@ + @@ -8687,6 +8757,7 @@ + @@ -8851,6 +8922,7 @@ + @@ -9062,6 +9134,7 @@ + @@ -9113,6 +9186,7 @@ + @@ -9791,6 +9865,7 @@ + @@ -9941,6 +10016,7 @@ + @@ -10049,6 +10125,7 @@ + @@ -10189,6 +10266,7 @@ + @@ -10330,6 +10408,7 @@ + @@ -10345,6 +10424,7 @@ + @@ -10534,6 +10614,7 @@ + @@ -10603,6 +10684,7 @@ + @@ -11003,6 +11085,7 @@ + @@ -11035,6 +11118,7 @@ + @@ -11144,6 +11228,7 @@ + @@ -11256,6 +11341,7 @@ + @@ -11267,6 +11353,7 @@ + @@ -11456,6 +11543,7 @@ + @@ -11534,14 +11622,17 @@ + + + @@ -11579,6 +11670,7 @@ + @@ -11666,6 +11758,7 @@ + @@ -11726,6 +11819,7 @@ + @@ -11763,6 +11857,7 @@ + @@ -11911,6 +12006,7 @@ + @@ -12065,6 +12161,7 @@ + @@ -12248,6 +12345,7 @@ + @@ -12484,6 +12582,7 @@ + @@ -12597,6 +12696,7 @@ + @@ -12615,6 +12715,7 @@ + @@ -12763,6 +12864,7 @@ + @@ -12973,6 +13075,4 @@ - - diff --git a/svgs/agen_pulsa_termurah.svg b/svgs/agen_pulsa_termurah.svg new file mode 100644 index 00000000000..85214455e7d --- /dev/null +++ b/svgs/agen_pulsa_termurah.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/airalo.svg b/svgs/airalo.svg new file mode 100644 index 00000000000..d10f15ed6e5 --- /dev/null +++ b/svgs/airalo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/anyconnect.svg b/svgs/anyconnect.svg new file mode 100644 index 00000000000..07a8eb6a38e --- /dev/null +++ b/svgs/anyconnect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/apowermirror.svg b/svgs/apowermirror.svg new file mode 100644 index 00000000000..e092da93e8e --- /dev/null +++ b/svgs/apowermirror.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/asr_voice_recorder.svg b/svgs/asr_voice_recorder.svg new file mode 100644 index 00000000000..f86df27f551 --- /dev/null +++ b/svgs/asr_voice_recorder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/audiomack.svg b/svgs/audiomack.svg new file mode 100644 index 00000000000..969dd3e33f5 --- /dev/null +++ b/svgs/audiomack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/autotrader.svg b/svgs/autotrader.svg new file mode 100644 index 00000000000..6cd2bbabffd --- /dev/null +++ b/svgs/autotrader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/balance.svg b/svgs/balance.svg new file mode 100644 index 00000000000..72a2546652c --- /dev/null +++ b/svgs/balance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bdv.svg b/svgs/bdv.svg new file mode 100644 index 00000000000..476128b51f4 --- /dev/null +++ b/svgs/bdv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/belfius.svg b/svgs/belfius.svg new file mode 100644 index 00000000000..1e7b5d8db5c --- /dev/null +++ b/svgs/belfius.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/blusmart.svg b/svgs/blusmart.svg new file mode 100644 index 00000000000..a1884feaeed --- /dev/null +++ b/svgs/blusmart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/brain_it_on.svg b/svgs/brain_it_on.svg new file mode 100644 index 00000000000..31ce92bee11 --- /dev/null +++ b/svgs/brain_it_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/captions.svg b/svgs/captions.svg new file mode 100644 index 00000000000..53b8b0fb47d --- /dev/null +++ b/svgs/captions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/casas_bahia.svg b/svgs/casas_bahia.svg new file mode 100644 index 00000000000..c37ec25d248 --- /dev/null +++ b/svgs/casas_bahia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/castle.svg b/svgs/castle.svg new file mode 100644 index 00000000000..fc2775504c9 --- /dev/null +++ b/svgs/castle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cinepolis.svg b/svgs/cinepolis.svg new file mode 100644 index 00000000000..e5fbc184e46 --- /dev/null +++ b/svgs/cinepolis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/crookcatcher.svg b/svgs/crookcatcher.svg new file mode 100644 index 00000000000..63acf576c74 --- /dev/null +++ b/svgs/crookcatcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cube_escape_collection.svg b/svgs/cube_escape_collection.svg new file mode 100644 index 00000000000..98dfa59673f --- /dev/null +++ b/svgs/cube_escape_collection.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cync.svg b/svgs/cync.svg new file mode 100644 index 00000000000..5a500ad792d --- /dev/null +++ b/svgs/cync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/d_point_club.svg b/svgs/d_point_club.svg new file mode 100644 index 00000000000..f3d1378aa46 --- /dev/null +++ b/svgs/d_point_club.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/das_e_rezept.svg b/svgs/das_e_rezept.svg new file mode 100644 index 00000000000..3e02f12ab06 --- /dev/null +++ b/svgs/das_e_rezept.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/digitales_amt.svg b/svgs/digitales_amt.svg new file mode 100644 index 00000000000..63f335ef11a --- /dev/null +++ b/svgs/digitales_amt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dmss.svg b/svgs/dmss.svg new file mode 100644 index 00000000000..f00c146ff6e --- /dev/null +++ b/svgs/dmss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/doku.svg b/svgs/doku.svg new file mode 100644 index 00000000000..6793170203c --- /dev/null +++ b/svgs/doku.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/downdetector.svg b/svgs/downdetector.svg new file mode 100644 index 00000000000..dcd397bf681 --- /dev/null +++ b/svgs/downdetector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/driefcase_abha.svg b/svgs/driefcase_abha.svg new file mode 100644 index 00000000000..d2f1189d997 --- /dev/null +++ b/svgs/driefcase_abha.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/drops.svg b/svgs/drops.svg new file mode 100644 index 00000000000..c792fbcd9e3 --- /dev/null +++ b/svgs/drops.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/emias_info.svg b/svgs/emias_info.svg new file mode 100644 index 00000000000..3e1efdeba12 --- /dev/null +++ b/svgs/emias_info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/erudite.svg b/svgs/erudite.svg new file mode 100644 index 00000000000..edb259350e5 --- /dev/null +++ b/svgs/erudite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/famipay.svg b/svgs/famipay.svg new file mode 100644 index 00000000000..e8fc96bcf3f --- /dev/null +++ b/svgs/famipay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/filmic_pro.svg b/svgs/filmic_pro.svg new file mode 100644 index 00000000000..770dd34d17f --- /dev/null +++ b/svgs/filmic_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fineasy.svg b/svgs/fineasy.svg new file mode 100644 index 00000000000..7520eaa4201 --- /dev/null +++ b/svgs/fineasy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/floating_apps.svg b/svgs/floating_apps.svg new file mode 100644 index 00000000000..3fb45defe7e --- /dev/null +++ b/svgs/floating_apps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/flow.svg b/svgs/flow.svg new file mode 100644 index 00000000000..d97e9ebd919 --- /dev/null +++ b/svgs/flow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fred_meyer.svg b/svgs/fred_meyer.svg new file mode 100644 index 00000000000..3de743ea307 --- /dev/null +++ b/svgs/fred_meyer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/g2a.svg b/svgs/g2a.svg new file mode 100644 index 00000000000..f0008c363f0 --- /dev/null +++ b/svgs/g2a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/geogebra.svg b/svgs/geogebra.svg new file mode 100644 index 00000000000..e57cb0cda7f --- /dev/null +++ b/svgs/geogebra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gett.svg b/svgs/gett.svg new file mode 100644 index 00000000000..944033e0197 --- /dev/null +++ b/svgs/gett.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/greentuber.svg b/svgs/greentuber.svg new file mode 100644 index 00000000000..63d26370245 --- /dev/null +++ b/svgs/greentuber.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/greggs.svg b/svgs/greggs.svg new file mode 100644 index 00000000000..91ec00d8c32 --- /dev/null +++ b/svgs/greggs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/headway.svg b/svgs/headway.svg new file mode 100644 index 00000000000..7e05a6ce04c --- /dev/null +++ b/svgs/headway.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hero_fincorp.svg b/svgs/hero_fincorp.svg new file mode 100644 index 00000000000..ba0526d32aa --- /dev/null +++ b/svgs/hero_fincorp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hushed.svg b/svgs/hushed.svg new file mode 100644 index 00000000000..fc349241537 --- /dev/null +++ b/svgs/hushed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hvv.svg b/svgs/hvv.svg new file mode 100644 index 00000000000..2fd0853f20e --- /dev/null +++ b/svgs/hvv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hyperos_calculator_go.svg b/svgs/hyperos_calculator_go.svg new file mode 100644 index 00000000000..cbd44f4a018 --- /dev/null +++ b/svgs/hyperos_calculator_go.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/indianoil_one.svg b/svgs/indianoil_one.svg new file mode 100644 index 00000000000..38b980c67fb --- /dev/null +++ b/svgs/indianoil_one.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/insget.svg b/svgs/insget.svg new file mode 100644 index 00000000000..d67b1c62e70 --- /dev/null +++ b/svgs/insget.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/inshare.svg b/svgs/inshare.svg new file mode 100644 index 00000000000..8f528341bee --- /dev/null +++ b/svgs/inshare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/intra.svg b/svgs/intra.svg new file mode 100644 index 00000000000..36ae93ba2d3 --- /dev/null +++ b/svgs/intra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jr.svg b/svgs/jr.svg new file mode 100644 index 00000000000..7377ab2edf5 --- /dev/null +++ b/svgs/jr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/k_plus.svg b/svgs/k_plus.svg new file mode 100644 index 00000000000..a01632d4355 --- /dev/null +++ b/svgs/k_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/khatabook.svg b/svgs/khatabook.svg new file mode 100644 index 00000000000..99958c69b20 --- /dev/null +++ b/svgs/khatabook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/knowunity.svg b/svgs/knowunity.svg new file mode 100644 index 00000000000..476c11ea9a7 --- /dev/null +++ b/svgs/knowunity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kotak811.svg b/svgs/kotak811.svg new file mode 100644 index 00000000000..743ef3274db --- /dev/null +++ b/svgs/kotak811.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lingotube.svg b/svgs/lingotube.svg new file mode 100644 index 00000000000..e74f9d094a3 --- /dev/null +++ b/svgs/lingotube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mahavitaran.svg b/svgs/mahavitaran.svg new file mode 100644 index 00000000000..a29c108f40a --- /dev/null +++ b/svgs/mahavitaran.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/minimalist_phone.svg b/svgs/minimalist_phone.svg new file mode 100644 index 00000000000..c87837c0e1e --- /dev/null +++ b/svgs/minimalist_phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/moscow_metro.svg b/svgs/moscow_metro.svg new file mode 100644 index 00000000000..8a81b21bf6b --- /dev/null +++ b/svgs/moscow_metro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_ooredoo.svg b/svgs/my_ooredoo.svg new file mode 100644 index 00000000000..64bbe4c2f8b --- /dev/null +++ b/svgs/my_ooredoo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/myasus.svg b/svgs/myasus.svg new file mode 100644 index 00000000000..72283851f31 --- /dev/null +++ b/svgs/myasus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mygov.svg b/svgs/mygov.svg new file mode 100644 index 00000000000..1dbdc965672 --- /dev/null +++ b/svgs/mygov.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nectar.svg b/svgs/nectar.svg new file mode 100644 index 00000000000..2b4f6acd724 --- /dev/null +++ b/svgs/nectar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nicelock.svg b/svgs/nicelock.svg new file mode 100644 index 00000000000..b65bd91f0a6 --- /dev/null +++ b/svgs/nicelock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nobroker.svg b/svgs/nobroker.svg new file mode 100644 index 00000000000..bdc36da3958 --- /dev/null +++ b/svgs/nobroker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nu_online.svg b/svgs/nu_online.svg new file mode 100644 index 00000000000..9f1041b0a4c --- /dev/null +++ b/svgs/nu_online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/op_mobiili.svg b/svgs/op_mobiili.svg new file mode 100644 index 00000000000..76c480c1ef7 --- /dev/null +++ b/svgs/op_mobiili.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oyo.svg b/svgs/oyo.svg new file mode 100644 index 00000000000..a1b4897d6b5 --- /dev/null +++ b/svgs/oyo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pickme.svg b/svgs/pickme.svg new file mode 100644 index 00000000000..fd353256431 --- /dev/null +++ b/svgs/pickme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixelful_icons.svg b/svgs/pixelful_icons.svg new file mode 100644 index 00000000000..5f3e227ac27 --- /dev/null +++ b/svgs/pixelful_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/podsbattery.svg b/svgs/podsbattery.svg new file mode 100644 index 00000000000..485cf4c9635 --- /dev/null +++ b/svgs/podsbattery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/primer.svg b/svgs/primer.svg new file mode 100644 index 00000000000..bc5d4af3b29 --- /dev/null +++ b/svgs/primer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/resolution_changer.svg b/svgs/resolution_changer.svg new file mode 100644 index 00000000000..4537e62171d --- /dev/null +++ b/svgs/resolution_changer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sainsburys.svg b/svgs/sainsburys.svg new file mode 100644 index 00000000000..818e6aac57b --- /dev/null +++ b/svgs/sainsburys.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/screen_check.svg b/svgs/screen_check.svg new file mode 100644 index 00000000000..978d4c35473 --- /dev/null +++ b/svgs/screen_check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sensibull.svg b/svgs/sensibull.svg new file mode 100644 index 00000000000..6c9deb6f4ec --- /dev/null +++ b/svgs/sensibull.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/skycash.svg b/svgs/skycash.svg new file mode 100644 index 00000000000..1bdbbc9f121 --- /dev/null +++ b/svgs/skycash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/snitch.svg b/svgs/snitch.svg new file mode 100644 index 00000000000..7d13efb8715 --- /dev/null +++ b/svgs/snitch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/spar.svg b/svgs/spar.svg new file mode 100644 index 00000000000..04b9e791ed7 --- /dev/null +++ b/svgs/spar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/status_download.svg b/svgs/status_download.svg new file mode 100644 index 00000000000..bb8b8823da0 --- /dev/null +++ b/svgs/status_download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/supervpn.svg b/svgs/supervpn.svg new file mode 100644 index 00000000000..783263bb55e --- /dev/null +++ b/svgs/supervpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/swap.svg b/svgs/swap.svg new file mode 100644 index 00000000000..a4c5b98ad12 --- /dev/null +++ b/svgs/swap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/telda.svg b/svgs/telda.svg new file mode 100644 index 00000000000..ba56e6464f0 --- /dev/null +++ b/svgs/telda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/televizo.svg b/svgs/televizo.svg new file mode 100644 index 00000000000..8dc010a0567 --- /dev/null +++ b/svgs/televizo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tiptop_vpn.svg b/svgs/tiptop_vpn.svg new file mode 100644 index 00000000000..f7f967e6fe0 --- /dev/null +++ b/svgs/tiptop_vpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/toggl_track.svg b/svgs/toggl_track.svg new file mode 100644 index 00000000000..40ca51cfac1 --- /dev/null +++ b/svgs/toggl_track.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/transperth.svg b/svgs/transperth.svg new file mode 100644 index 00000000000..a0986cd4ead --- /dev/null +++ b/svgs/transperth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/turkish_airlines.svg b/svgs/turkish_airlines.svg new file mode 100644 index 00000000000..02df3d4eb79 --- /dev/null +++ b/svgs/turkish_airlines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tv_2_play.svg b/svgs/tv_2_play.svg new file mode 100644 index 00000000000..2a5d7f32885 --- /dev/null +++ b/svgs/tv_2_play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ux_led.svg b/svgs/ux_led.svg new file mode 100644 index 00000000000..cc511b13ef8 --- /dev/null +++ b/svgs/ux_led.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/verizon_call_filter.svg b/svgs/verizon_call_filter.svg new file mode 100644 index 00000000000..0b1b1f652f0 --- /dev/null +++ b/svgs/verizon_call_filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/versa.svg b/svgs/versa.svg new file mode 100644 index 00000000000..eacf7ed7feb --- /dev/null +++ b/svgs/versa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vesync.svg b/svgs/vesync.svg new file mode 100644 index 00000000000..da0402c12e7 --- /dev/null +++ b/svgs/vesync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/video_downloader_story_video.svg b/svgs/video_downloader_story_video.svg new file mode 100644 index 00000000000..a2b80daafa6 --- /dev/null +++ b/svgs/video_downloader_story_video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vk_video.svg b/svgs/vk_video.svg new file mode 100644 index 00000000000..fc60f68f42c --- /dev/null +++ b/svgs/vk_video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vr_media_player.svg b/svgs/vr_media_player.svg new file mode 100644 index 00000000000..4f02038556a --- /dev/null +++ b/svgs/vr_media_player.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vysor.svg b/svgs/vysor.svg new file mode 100644 index 00000000000..cff60ad6bc6 --- /dev/null +++ b/svgs/vysor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/whatnot.svg b/svgs/whatnot.svg new file mode 100644 index 00000000000..2fadbec2498 --- /dev/null +++ b/svgs/whatnot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wienmobil.svg b/svgs/wienmobil.svg new file mode 100644 index 00000000000..c51619f4bbf --- /dev/null +++ b/svgs/wienmobil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/xiaomi_service_plus.svg b/svgs/xiaomi_service_plus.svg new file mode 100644 index 00000000000..a6e87182de8 --- /dev/null +++ b/svgs/xiaomi_service_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zillow.svg b/svgs/zillow.svg new file mode 100644 index 00000000000..adca9d0b8f3 --- /dev/null +++ b/svgs/zillow.svg @@ -0,0 +1 @@ + \ No newline at end of file From 831a9dd1855c2978e54ce637c03d165bd4eb3037 Mon Sep 17 00:00:00 2001 From: Aditya <111834313+Aditya137x@users.noreply.github.com> Date: Sun, 29 Sep 2024 00:08:31 +0530 Subject: [PATCH 391/527] Update appfilter.xml (#2379) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 09697d4c869..5212176b128 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1040,6 +1040,7 @@ + From 006b86e2f33d798d3ec6329ce364a8b12e7eff71 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 28 Sep 2024 23:44:31 +0300 Subject: [PATCH 392/527] +1 icon, +10 links (#2380) * +1 icon, +9 links * +1 link --- app/assets/appfilter.xml | 11 +++++++++++ svgs/grapheneos_info.svg | 1 + 2 files changed, 12 insertions(+) create mode 100644 svgs/grapheneos_info.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5212176b128..2488161dfe5 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -239,6 +239,7 @@ + @@ -1916,6 +1917,7 @@ + @@ -2478,6 +2480,7 @@ + @@ -4289,6 +4292,7 @@ + @@ -4312,6 +4316,7 @@ + @@ -5911,6 +5916,7 @@ + @@ -7671,6 +7677,7 @@ + @@ -7946,6 +7953,7 @@ + @@ -10425,6 +10433,7 @@ + @@ -10615,6 +10624,7 @@ + @@ -12697,6 +12707,7 @@ + diff --git a/svgs/grapheneos_info.svg b/svgs/grapheneos_info.svg new file mode 100644 index 00000000000..03c96fda18f --- /dev/null +++ b/svgs/grapheneos_info.svg @@ -0,0 +1 @@ + \ No newline at end of file From bf53d323b3e00c7cead2c748162d6492ce932fcc Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 29 Sep 2024 11:44:29 +0300 Subject: [PATCH 393/527] +8 links (#2381) * +8 links * Minor fix * Name fix --- app/assets/appfilter.xml | 58 +++++++++++++++----------- svgs/{allen.svg => allen_digital.svg} | 0 svgs/revanced_extended.svg | 2 +- svgs/{sync.svg => sync_for_reddit.svg} | 0 4 files changed, 34 insertions(+), 26 deletions(-) rename svgs/{allen.svg => allen_digital.svg} (100%) rename svgs/{sync.svg => sync_for_reddit.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 2488161dfe5..b01c8bc7511 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -387,7 +387,7 @@ - + @@ -833,6 +833,7 @@ + @@ -4378,6 +4379,7 @@ + @@ -6061,6 +6063,7 @@ + @@ -10460,33 +10463,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -10509,6 +10512,7 @@ + @@ -11046,6 +11050,7 @@ + @@ -11685,6 +11690,7 @@ + @@ -11956,6 +11962,7 @@ + @@ -12475,6 +12482,7 @@ + diff --git a/svgs/allen.svg b/svgs/allen_digital.svg similarity index 100% rename from svgs/allen.svg rename to svgs/allen_digital.svg diff --git a/svgs/revanced_extended.svg b/svgs/revanced_extended.svg index e354b6662a7..aabb8c87497 100644 --- a/svgs/revanced_extended.svg +++ b/svgs/revanced_extended.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/sync.svg b/svgs/sync_for_reddit.svg similarity index 100% rename from svgs/sync.svg rename to svgs/sync_for_reddit.svg From fd9868d264d08f000b53efc5c9592a851d3fdac2 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 2 Oct 2024 03:36:16 +0300 Subject: [PATCH 394/527] +3 links (#2383) --- app/assets/appfilter.xml | 3 +++ svgs/sync_for_lemmy.svg | 2 +- svgs/tix_id.svg | 2 +- svgs/vinyl_music_player.svg | 2 +- svgs/vlc.svg | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b01c8bc7511..86073acd87e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1218,6 +1218,7 @@ + @@ -10762,6 +10763,7 @@ + @@ -11962,6 +11964,7 @@ + diff --git a/svgs/sync_for_lemmy.svg b/svgs/sync_for_lemmy.svg index f664cdca418..097e29fd027 100644 --- a/svgs/sync_for_lemmy.svg +++ b/svgs/sync_for_lemmy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/tix_id.svg b/svgs/tix_id.svg index 9dcbe615b9f..ec67e0f7618 100644 --- a/svgs/tix_id.svg +++ b/svgs/tix_id.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/vinyl_music_player.svg b/svgs/vinyl_music_player.svg index 7e79c9d61b5..58db67dae9f 100644 --- a/svgs/vinyl_music_player.svg +++ b/svgs/vinyl_music_player.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/vlc.svg b/svgs/vlc.svg index 1cb1eb5f864..ac50c92b107 100644 --- a/svgs/vlc.svg +++ b/svgs/vlc.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From e257577bc504b260c71e4eaeb425be3875ea29ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:34:53 +0800 Subject: [PATCH 395/527] Update AGP (#2382) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d7c3c2bb4db..df58c8f55ba 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.6.1" apply false + id("com.android.application") version "8.7.0" apply false id("org.jetbrains.kotlin.android") version "2.0.20" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 1778d5ae5d2..559280ca5f8 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.6.1") + implementation("com.android.tools:sdk-common:31.7.0") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.17.0") } From 8a1612700e709bbca1eba8923b6311c6bc02a300 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 2 Oct 2024 19:44:22 +0300 Subject: [PATCH 396/527] +7 links (#2384) --- app/assets/appfilter.xml | 7 +++++++ svgs/magisk_module_repo_loader.svg | 2 +- svgs/messages.svg | 2 +- svgs/play_integrity_api_checker.svg | 2 +- svgs/u_jing.svg | 2 +- svgs/ulike.svg | 2 +- 6 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 86073acd87e..602850ce4c6 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -865,6 +865,7 @@ + @@ -5076,6 +5077,7 @@ + @@ -5711,6 +5713,7 @@ + @@ -6823,6 +6826,7 @@ + @@ -11171,6 +11175,7 @@ + @@ -12723,6 +12728,7 @@ + @@ -12788,6 +12794,7 @@ + diff --git a/svgs/magisk_module_repo_loader.svg b/svgs/magisk_module_repo_loader.svg index 48fb05f52a1..0aa49fe68b7 100644 --- a/svgs/magisk_module_repo_loader.svg +++ b/svgs/magisk_module_repo_loader.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/messages.svg b/svgs/messages.svg index 95f9107f6b2..2bebd8c8da9 100644 --- a/svgs/messages.svg +++ b/svgs/messages.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/play_integrity_api_checker.svg b/svgs/play_integrity_api_checker.svg index eee04178109..b6a480ae01f 100644 --- a/svgs/play_integrity_api_checker.svg +++ b/svgs/play_integrity_api_checker.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/u_jing.svg b/svgs/u_jing.svg index 20aa4a1797a..77c371fcb73 100644 --- a/svgs/u_jing.svg +++ b/svgs/u_jing.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/ulike.svg b/svgs/ulike.svg index 55c2ff73e3f..0046d214834 100644 --- a/svgs/ulike.svg +++ b/svgs/ulike.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From f3c7f6ccd66e57aef97be2374b1d932d1540b936 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 3 Oct 2024 01:28:59 +0300 Subject: [PATCH 397/527] +43 links (#2387) --- app/assets/appfilter.xml | 57 +++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 602850ce4c6..fcf5b88adf8 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -309,6 +309,7 @@ + @@ -636,6 +637,7 @@ + @@ -865,6 +867,7 @@ + @@ -1212,6 +1215,7 @@ + @@ -1222,11 +1226,13 @@ + + @@ -1336,6 +1342,7 @@ + @@ -1621,6 +1628,10 @@ + + + + @@ -1862,6 +1873,7 @@ + @@ -2081,6 +2093,7 @@ + @@ -2653,6 +2666,7 @@ + @@ -2812,11 +2826,13 @@ + + @@ -3523,6 +3539,7 @@ + @@ -4184,6 +4201,7 @@ + @@ -4532,10 +4550,10 @@ - + @@ -4584,6 +4602,7 @@ + @@ -4686,6 +4705,7 @@ + @@ -6151,6 +6171,7 @@ + @@ -6312,6 +6333,7 @@ + @@ -6487,6 +6509,7 @@ + @@ -7500,6 +7523,7 @@ + @@ -7534,6 +7558,7 @@ + @@ -8207,6 +8232,7 @@ + @@ -8615,6 +8641,7 @@ + @@ -8801,6 +8828,7 @@ + @@ -9106,6 +9134,7 @@ + @@ -9803,6 +9832,7 @@ + @@ -10169,6 +10199,7 @@ + @@ -10718,7 +10749,8 @@ - + + @@ -11056,12 +11088,14 @@ + + @@ -12370,6 +12404,7 @@ + @@ -12484,8 +12519,9 @@ - - + + + @@ -12494,12 +12530,14 @@ + + @@ -12583,9 +12621,6 @@ - - - @@ -12772,6 +12807,7 @@ + @@ -12969,6 +13005,8 @@ + + @@ -13013,6 +13051,7 @@ + @@ -13037,6 +13076,10 @@ + + + + From 437d9fd23f73ce662ba4e04ac8825dcacf710a9c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:15:15 +0800 Subject: [PATCH 398/527] Update dependency androidx.compose:compose-bom to v2024.09.03 (#2385) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9160a0a1ada..1b165152303 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.2") - implementation(platform("androidx.compose:compose-bom:2024.09.02")) + implementation(platform("androidx.compose:compose-bom:2024.09.03")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From 81431841a35b537d1839c12715e6cd679d869207 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:15:24 +0800 Subject: [PATCH 399/527] Update dependency androidx.navigation:navigation-compose to v2.8.2 (#2386) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1b165152303..cbee5cf349c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.1") + implementation("androidx.navigation:navigation-compose:2.8.2") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") From 2cce8e049d04bbbff1f8f1b44762b3c3c347093b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:27:29 +0000 Subject: [PATCH 400/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.15 (#2388) * Update dependency io.nlopez.compose.rules:ktlint to v0.4.15 * Disable rules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Goooler --- build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index df58c8f55ba..3f3a23a9fc3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,11 +31,13 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.12", + "io.nlopez.compose.rules:ktlint:0.4.15", ), ).editorConfigOverride( mapOf( "ktlint_compose_compositionlocal-allowlist" to "disabled", + "ktlint_compose_lambda-param-event-trailing" to "disabled", + "ktlint_compose_content-slot-reused" to "disabled", ), ) } From cdeee252327ffcc5cab0ac34315e205dd0efe609 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 7 Oct 2024 02:45:13 +0300 Subject: [PATCH 401/527] +18 links (#2389) --- app/assets/appfilter.xml | 20 +++++++++++++++++++- svgs/{cinemark_hoyts.svg => cinemark.svg} | 0 2 files changed, 19 insertions(+), 1 deletion(-) rename svgs/{cinemark_hoyts.svg => cinemark.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index fcf5b88adf8..ff633ea46eb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -736,6 +736,7 @@ + @@ -1378,6 +1379,7 @@ + @@ -1873,6 +1875,7 @@ + @@ -1883,6 +1886,7 @@ + @@ -2023,7 +2027,10 @@ - + + + + @@ -2755,6 +2762,7 @@ + @@ -3038,6 +3046,7 @@ + @@ -3775,6 +3784,7 @@ + @@ -4602,6 +4612,7 @@ + @@ -6098,6 +6109,7 @@ + @@ -6777,6 +6789,7 @@ + @@ -6853,6 +6866,7 @@ + @@ -8068,6 +8082,7 @@ + @@ -11679,6 +11694,7 @@ + @@ -12807,6 +12823,7 @@ + @@ -13038,6 +13055,7 @@ + diff --git a/svgs/cinemark_hoyts.svg b/svgs/cinemark.svg similarity index 100% rename from svgs/cinemark_hoyts.svg rename to svgs/cinemark.svg From 345f6f86aed62e11f1fb2513ed3e7a9018ac906b Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 7 Oct 2024 18:07:00 +0300 Subject: [PATCH 402/527] Alphabet icons (#2390) * Alphabet icons * Minor fix --- app/assets/appfilter.xml | 26 ++++++++++++++++++++++++++ svgs/alphabet_a.svg | 1 + svgs/alphabet_b.svg | 1 + svgs/alphabet_c.svg | 1 + svgs/alphabet_d.svg | 1 + svgs/alphabet_e.svg | 1 + svgs/alphabet_f.svg | 1 + svgs/alphabet_g.svg | 1 + svgs/alphabet_h.svg | 1 + svgs/alphabet_i.svg | 1 + svgs/alphabet_j.svg | 1 + svgs/alphabet_k.svg | 1 + svgs/alphabet_l.svg | 1 + svgs/alphabet_m.svg | 1 + svgs/alphabet_n.svg | 1 + svgs/alphabet_o.svg | 1 + svgs/alphabet_p.svg | 1 + svgs/alphabet_q.svg | 1 + svgs/alphabet_r.svg | 1 + svgs/alphabet_s.svg | 1 + svgs/alphabet_t.svg | 1 + svgs/alphabet_u.svg | 1 + svgs/alphabet_v.svg | 1 + svgs/alphabet_w.svg | 1 + svgs/alphabet_x.svg | 1 + svgs/alphabet_y.svg | 1 + svgs/alphabet_z.svg | 1 + 27 files changed, 52 insertions(+) create mode 100644 svgs/alphabet_a.svg create mode 100644 svgs/alphabet_b.svg create mode 100644 svgs/alphabet_c.svg create mode 100644 svgs/alphabet_d.svg create mode 100644 svgs/alphabet_e.svg create mode 100644 svgs/alphabet_f.svg create mode 100644 svgs/alphabet_g.svg create mode 100644 svgs/alphabet_h.svg create mode 100644 svgs/alphabet_i.svg create mode 100644 svgs/alphabet_j.svg create mode 100644 svgs/alphabet_k.svg create mode 100644 svgs/alphabet_l.svg create mode 100644 svgs/alphabet_m.svg create mode 100644 svgs/alphabet_n.svg create mode 100644 svgs/alphabet_o.svg create mode 100644 svgs/alphabet_p.svg create mode 100644 svgs/alphabet_q.svg create mode 100644 svgs/alphabet_r.svg create mode 100644 svgs/alphabet_s.svg create mode 100644 svgs/alphabet_t.svg create mode 100644 svgs/alphabet_u.svg create mode 100644 svgs/alphabet_v.svg create mode 100644 svgs/alphabet_w.svg create mode 100644 svgs/alphabet_x.svg create mode 100644 svgs/alphabet_y.svg create mode 100644 svgs/alphabet_z.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ff633ea46eb..0cc7d97d82e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -400,6 +400,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/svgs/alphabet_a.svg b/svgs/alphabet_a.svg new file mode 100644 index 00000000000..0a9b299151a --- /dev/null +++ b/svgs/alphabet_a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_b.svg b/svgs/alphabet_b.svg new file mode 100644 index 00000000000..49c2a8c6199 --- /dev/null +++ b/svgs/alphabet_b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_c.svg b/svgs/alphabet_c.svg new file mode 100644 index 00000000000..991ecd38a83 --- /dev/null +++ b/svgs/alphabet_c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_d.svg b/svgs/alphabet_d.svg new file mode 100644 index 00000000000..477e26b8201 --- /dev/null +++ b/svgs/alphabet_d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_e.svg b/svgs/alphabet_e.svg new file mode 100644 index 00000000000..d62717bea5a --- /dev/null +++ b/svgs/alphabet_e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_f.svg b/svgs/alphabet_f.svg new file mode 100644 index 00000000000..a40790fb7e4 --- /dev/null +++ b/svgs/alphabet_f.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_g.svg b/svgs/alphabet_g.svg new file mode 100644 index 00000000000..371337afe46 --- /dev/null +++ b/svgs/alphabet_g.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_h.svg b/svgs/alphabet_h.svg new file mode 100644 index 00000000000..c0b44a90430 --- /dev/null +++ b/svgs/alphabet_h.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_i.svg b/svgs/alphabet_i.svg new file mode 100644 index 00000000000..d32d37790d8 --- /dev/null +++ b/svgs/alphabet_i.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_j.svg b/svgs/alphabet_j.svg new file mode 100644 index 00000000000..20593267d14 --- /dev/null +++ b/svgs/alphabet_j.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_k.svg b/svgs/alphabet_k.svg new file mode 100644 index 00000000000..d5bfb5fdcf7 --- /dev/null +++ b/svgs/alphabet_k.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_l.svg b/svgs/alphabet_l.svg new file mode 100644 index 00000000000..1cdc49d7709 --- /dev/null +++ b/svgs/alphabet_l.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_m.svg b/svgs/alphabet_m.svg new file mode 100644 index 00000000000..2222d8bf6e3 --- /dev/null +++ b/svgs/alphabet_m.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_n.svg b/svgs/alphabet_n.svg new file mode 100644 index 00000000000..593fe75ccf1 --- /dev/null +++ b/svgs/alphabet_n.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_o.svg b/svgs/alphabet_o.svg new file mode 100644 index 00000000000..340eceebb28 --- /dev/null +++ b/svgs/alphabet_o.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_p.svg b/svgs/alphabet_p.svg new file mode 100644 index 00000000000..d910090f5ad --- /dev/null +++ b/svgs/alphabet_p.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_q.svg b/svgs/alphabet_q.svg new file mode 100644 index 00000000000..deb3d04b978 --- /dev/null +++ b/svgs/alphabet_q.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_r.svg b/svgs/alphabet_r.svg new file mode 100644 index 00000000000..9d510a7ca03 --- /dev/null +++ b/svgs/alphabet_r.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_s.svg b/svgs/alphabet_s.svg new file mode 100644 index 00000000000..8f7946c440a --- /dev/null +++ b/svgs/alphabet_s.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_t.svg b/svgs/alphabet_t.svg new file mode 100644 index 00000000000..9cbf74ec0a6 --- /dev/null +++ b/svgs/alphabet_t.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_u.svg b/svgs/alphabet_u.svg new file mode 100644 index 00000000000..2e4d966a5e9 --- /dev/null +++ b/svgs/alphabet_u.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_v.svg b/svgs/alphabet_v.svg new file mode 100644 index 00000000000..57fcb6eb62f --- /dev/null +++ b/svgs/alphabet_v.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_w.svg b/svgs/alphabet_w.svg new file mode 100644 index 00000000000..547975748c9 --- /dev/null +++ b/svgs/alphabet_w.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_x.svg b/svgs/alphabet_x.svg new file mode 100644 index 00000000000..57b784b77ca --- /dev/null +++ b/svgs/alphabet_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_y.svg b/svgs/alphabet_y.svg new file mode 100644 index 00000000000..a6d1864ed10 --- /dev/null +++ b/svgs/alphabet_y.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/alphabet_z.svg b/svgs/alphabet_z.svg new file mode 100644 index 00000000000..b09bf1769d7 --- /dev/null +++ b/svgs/alphabet_z.svg @@ -0,0 +1 @@ + \ No newline at end of file From d3dc4750e84a75cd930471c72634ac86629430fc Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 7 Oct 2024 20:34:09 +0300 Subject: [PATCH 403/527] Minor icons update (#2391) --- app/assets/appfilter.xml | 2 +- svgs/mi_remote.svg | 2 +- svgs/microsoft_authenticator.svg | 2 +- svgs/opentracks.svg | 2 +- svgs/paypal.svg | 2 +- svgs/pokemon_go.svg | 2 +- svgs/pokemon_unite.svg | 2 +- svgs/solid_explorer.svg | 2 +- svgs/sparkasse.svg | 2 +- svgs/swisscom_mycloud.svg | 2 +- svgs/via_browser.svg | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 0cc7d97d82e..d4f80a444cf 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -409,7 +409,7 @@ - + diff --git a/svgs/mi_remote.svg b/svgs/mi_remote.svg index 68b3f731c6b..92c237d0384 100644 --- a/svgs/mi_remote.svg +++ b/svgs/mi_remote.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/microsoft_authenticator.svg b/svgs/microsoft_authenticator.svg index ff14ca7beee..706f630ded8 100644 --- a/svgs/microsoft_authenticator.svg +++ b/svgs/microsoft_authenticator.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/opentracks.svg b/svgs/opentracks.svg index b7936509502..ccc4ddbd622 100644 --- a/svgs/opentracks.svg +++ b/svgs/opentracks.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/paypal.svg b/svgs/paypal.svg index c06abfb6f64..08eac043c86 100644 --- a/svgs/paypal.svg +++ b/svgs/paypal.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pokemon_go.svg b/svgs/pokemon_go.svg index fee8b24a242..4dbb861c787 100644 --- a/svgs/pokemon_go.svg +++ b/svgs/pokemon_go.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pokemon_unite.svg b/svgs/pokemon_unite.svg index 634c9afa964..b219c525765 100644 --- a/svgs/pokemon_unite.svg +++ b/svgs/pokemon_unite.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/solid_explorer.svg b/svgs/solid_explorer.svg index 63b0c08dcef..18751840ba0 100644 --- a/svgs/solid_explorer.svg +++ b/svgs/solid_explorer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/sparkasse.svg b/svgs/sparkasse.svg index 546b0f66fd3..5a74d5daa85 100644 --- a/svgs/sparkasse.svg +++ b/svgs/sparkasse.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/swisscom_mycloud.svg b/svgs/swisscom_mycloud.svg index 3ffefe671c7..02559dc4aa0 100644 --- a/svgs/swisscom_mycloud.svg +++ b/svgs/swisscom_mycloud.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/via_browser.svg b/svgs/via_browser.svg index 799f130a883..2ce5d3d00d6 100644 --- a/svgs/via_browser.svg +++ b/svgs/via_browser.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 2d9b2fb20a121049ab8ce88a8fe1695977dc2256 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:15:17 +0300 Subject: [PATCH 404/527] [Barter 8] +100 icons: Arena Breakout, Miele, Sahl (#2392) * [Barter 8] +100 icons: Arena Breakout, Miele, Sahl * Minor change * Update about_you.svg --- app/assets/appfilter.xml | 100 ++++++++++++++++++++++++ svgs/_1_2_3_4_player_games.svg | 1 + svgs/about_you.svg | 1 + svgs/apk_installer.svg | 1 + svgs/arena_breakout.svg | 1 + svgs/at_mobile.svg | 1 + svgs/au_plus_messages.svg | 1 + svgs/audio_widget_pack.svg | 1 + svgs/auto_ru.svg | 1 + svgs/autodoc.svg | 1 + svgs/ayah.svg | 1 + svgs/bank_hapoalim.svg | 1 + svgs/betternet.svg | 1 + svgs/blurrr.svg | 1 + svgs/bookmory.svg | 1 + svgs/boost_visual_voicemail.svg | 1 + svgs/chaton.svg | 1 + svgs/chewy.svg | 1 + svgs/cloudedge.svg | 1 + svgs/coding_c_plus_plus.svg | 1 + svgs/cometin.svg | 1 + svgs/craigslist.svg | 1 + svgs/crosshair_hero.svg | 1 + svgs/dcard.svg | 1 + svgs/digi_yatra.svg | 1 + svgs/download_video_no_watermark.svg | 1 + svgs/eatclub.svg | 1 + svgs/efood.svg | 1 + svgs/familyalbum.svg | 1 + svgs/fasting.svg | 1 + svgs/file_manager.svg | 1 + svgs/flip_clock.svg | 1 + svgs/fooview.svg | 1 + svgs/freeletics.svg | 1 + svgs/gcmob.svg | 1 + svgs/handshake.svg | 1 + svgs/haylou_fun.svg | 1 + svgs/hiwatchpro.svg | 1 + svgs/interbank.svg | 1 + svgs/ips_exporter.svg | 1 + svgs/iyox_wormhole.svg | 1 + svgs/kentkart.svg | 1 + svgs/kingdraw.svg | 1 + svgs/kufar.svg | 1 + svgs/kyiv_digital.svg | 1 + svgs/laban_key.svg | 1 + svgs/lapse_2_before_zero.svg | 1 + svgs/liveuamap.svg | 1 + svgs/mail_com.svg | 1 + svgs/mapgenie_elden_ring.svg | 1 + svgs/material_islands.svg | 1 + svgs/metro.svg | 1 + svgs/miele.svg | 1 + svgs/minma_icons.svg | 1 + svgs/mobitel_selfcare.svg | 1 + svgs/money.svg | 1 + svgs/monica_ai.svg | 1 + svgs/morse_code.svg | 1 + svgs/my_data_manager.svg | 1 + svgs/my_moscow.svg | 1 + svgs/my_mts.svg | 1 + svgs/mynoise.svg | 1 + svgs/myprotein.svg | 1 + svgs/navi.svg | 1 + svgs/nextbike.svg | 1 + svgs/nicehash.svg | 1 + svgs/nova_post.svg | 1 + svgs/npo_start.svg | 1 + svgs/opay.svg | 1 + svgs/paybox.svg | 1 + svgs/perfect_ear.svg | 1 + svgs/phase6_german_vocabulary.svg | 1 + svgs/posten.svg | 1 + svgs/pricespy.svg | 1 + svgs/qubo.svg | 1 + svgs/quitzilla.svg | 1 + svgs/quranly.svg | 1 + svgs/rejseplanen.svg | 1 + svgs/remote_mouse.svg | 1 + svgs/renderz.svg | 1 + svgs/rentcafe_resident.svg | 1 + svgs/repont.svg | 1 + svgs/resilio_sync.svg | 1 + svgs/sahl.svg | 1 + svgs/satellite.svg | 1 + svgs/scotiabank.svg | 1 + svgs/screen_recorder_video_recorder.svg | 1 + svgs/settle_up.svg | 1 + svgs/shpock.svg | 1 + svgs/singpass.svg | 1 + svgs/songkick.svg | 1 + svgs/sophos_intercept_x.svg | 1 + svgs/stockx.svg | 1 + svgs/superbank.svg | 1 + svgs/sync.svg | 1 + svgs/timestamp_camera.svg | 1 + svgs/txtpad.svg | 1 + svgs/uc_browser.svg | 1 + svgs/universal_remote_control.svg | 1 + svgs/wallcraft.svg | 1 + svgs/wikiloc.svg | 1 + 101 files changed, 200 insertions(+) create mode 100644 svgs/_1_2_3_4_player_games.svg create mode 100644 svgs/about_you.svg create mode 100644 svgs/apk_installer.svg create mode 100644 svgs/arena_breakout.svg create mode 100644 svgs/at_mobile.svg create mode 100644 svgs/au_plus_messages.svg create mode 100644 svgs/audio_widget_pack.svg create mode 100644 svgs/auto_ru.svg create mode 100644 svgs/autodoc.svg create mode 100644 svgs/ayah.svg create mode 100644 svgs/bank_hapoalim.svg create mode 100644 svgs/betternet.svg create mode 100644 svgs/blurrr.svg create mode 100644 svgs/bookmory.svg create mode 100644 svgs/boost_visual_voicemail.svg create mode 100644 svgs/chaton.svg create mode 100644 svgs/chewy.svg create mode 100644 svgs/cloudedge.svg create mode 100644 svgs/coding_c_plus_plus.svg create mode 100644 svgs/cometin.svg create mode 100644 svgs/craigslist.svg create mode 100644 svgs/crosshair_hero.svg create mode 100644 svgs/dcard.svg create mode 100644 svgs/digi_yatra.svg create mode 100644 svgs/download_video_no_watermark.svg create mode 100644 svgs/eatclub.svg create mode 100644 svgs/efood.svg create mode 100644 svgs/familyalbum.svg create mode 100644 svgs/fasting.svg create mode 100644 svgs/file_manager.svg create mode 100644 svgs/flip_clock.svg create mode 100644 svgs/fooview.svg create mode 100644 svgs/freeletics.svg create mode 100644 svgs/gcmob.svg create mode 100644 svgs/handshake.svg create mode 100644 svgs/haylou_fun.svg create mode 100644 svgs/hiwatchpro.svg create mode 100644 svgs/interbank.svg create mode 100644 svgs/ips_exporter.svg create mode 100644 svgs/iyox_wormhole.svg create mode 100644 svgs/kentkart.svg create mode 100644 svgs/kingdraw.svg create mode 100644 svgs/kufar.svg create mode 100644 svgs/kyiv_digital.svg create mode 100644 svgs/laban_key.svg create mode 100644 svgs/lapse_2_before_zero.svg create mode 100644 svgs/liveuamap.svg create mode 100644 svgs/mail_com.svg create mode 100644 svgs/mapgenie_elden_ring.svg create mode 100644 svgs/material_islands.svg create mode 100644 svgs/metro.svg create mode 100644 svgs/miele.svg create mode 100644 svgs/minma_icons.svg create mode 100644 svgs/mobitel_selfcare.svg create mode 100644 svgs/money.svg create mode 100644 svgs/monica_ai.svg create mode 100644 svgs/morse_code.svg create mode 100644 svgs/my_data_manager.svg create mode 100644 svgs/my_moscow.svg create mode 100644 svgs/my_mts.svg create mode 100644 svgs/mynoise.svg create mode 100644 svgs/myprotein.svg create mode 100644 svgs/navi.svg create mode 100644 svgs/nextbike.svg create mode 100644 svgs/nicehash.svg create mode 100644 svgs/nova_post.svg create mode 100644 svgs/npo_start.svg create mode 100644 svgs/opay.svg create mode 100644 svgs/paybox.svg create mode 100644 svgs/perfect_ear.svg create mode 100644 svgs/phase6_german_vocabulary.svg create mode 100644 svgs/posten.svg create mode 100644 svgs/pricespy.svg create mode 100644 svgs/qubo.svg create mode 100644 svgs/quitzilla.svg create mode 100644 svgs/quranly.svg create mode 100644 svgs/rejseplanen.svg create mode 100644 svgs/remote_mouse.svg create mode 100644 svgs/renderz.svg create mode 100644 svgs/rentcafe_resident.svg create mode 100644 svgs/repont.svg create mode 100644 svgs/resilio_sync.svg create mode 100644 svgs/sahl.svg create mode 100644 svgs/satellite.svg create mode 100644 svgs/scotiabank.svg create mode 100644 svgs/screen_recorder_video_recorder.svg create mode 100644 svgs/settle_up.svg create mode 100644 svgs/shpock.svg create mode 100644 svgs/singpass.svg create mode 100644 svgs/songkick.svg create mode 100644 svgs/sophos_intercept_x.svg create mode 100644 svgs/stockx.svg create mode 100644 svgs/superbank.svg create mode 100644 svgs/sync.svg create mode 100644 svgs/timestamp_camera.svg create mode 100644 svgs/txtpad.svg create mode 100644 svgs/uc_browser.svg create mode 100644 svgs/universal_remote_control.svg create mode 100644 svgs/wallcraft.svg create mode 100644 svgs/wikiloc.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index d4f80a444cf..f518c257deb 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -40,6 +40,7 @@ + @@ -135,6 +136,7 @@ + @@ -599,6 +601,7 @@ + @@ -719,6 +722,7 @@ + @@ -758,6 +762,7 @@ + @@ -779,6 +784,7 @@ + @@ -816,6 +822,7 @@ + @@ -834,6 +841,7 @@ + @@ -862,6 +870,7 @@ + @@ -932,6 +941,7 @@ + @@ -1067,6 +1077,7 @@ + @@ -1263,6 +1274,7 @@ + @@ -1301,6 +1313,7 @@ + @@ -1318,6 +1331,7 @@ + @@ -1982,6 +1996,7 @@ + @@ -2027,6 +2042,7 @@ + @@ -2215,6 +2231,7 @@ + @@ -2230,6 +2247,7 @@ + @@ -2276,6 +2294,7 @@ + @@ -2465,6 +2484,7 @@ + @@ -2483,6 +2503,7 @@ + @@ -2593,6 +2614,7 @@ + @@ -2725,6 +2747,7 @@ + @@ -2947,6 +2970,7 @@ + @@ -3118,6 +3142,7 @@ + @@ -3146,6 +3171,7 @@ + @@ -3360,6 +3386,7 @@ + @@ -3379,6 +3406,7 @@ + @@ -3435,6 +3463,7 @@ + @@ -3618,6 +3647,7 @@ + @@ -3708,6 +3738,7 @@ + @@ -3795,6 +3826,7 @@ + @@ -3970,6 +4002,7 @@ + @@ -4461,6 +4494,7 @@ + @@ -4472,6 +4506,7 @@ + @@ -4556,6 +4591,7 @@ + @@ -4935,6 +4971,7 @@ + @@ -4967,6 +5004,7 @@ + @@ -5010,6 +5048,7 @@ + @@ -5188,6 +5227,7 @@ + @@ -5306,6 +5346,7 @@ + @@ -5413,6 +5454,7 @@ + @@ -5422,6 +5464,7 @@ + @@ -5646,6 +5689,7 @@ + @@ -5787,6 +5831,7 @@ + @@ -5817,6 +5862,7 @@ + @@ -5856,6 +5902,7 @@ + @@ -6114,6 +6161,7 @@ + @@ -6271,6 +6319,7 @@ + @@ -6334,6 +6383,7 @@ + @@ -6395,6 +6445,7 @@ + @@ -6431,6 +6482,7 @@ + @@ -6438,6 +6490,7 @@ + @@ -6475,6 +6528,7 @@ + @@ -6640,6 +6694,7 @@ + @@ -6788,11 +6843,13 @@ + + @@ -6891,6 +6948,7 @@ + @@ -6997,6 +7055,7 @@ + @@ -7049,6 +7108,7 @@ + @@ -7200,6 +7260,7 @@ + @@ -7456,6 +7517,7 @@ + @@ -7757,6 +7819,7 @@ + @@ -7786,6 +7849,7 @@ + @@ -8337,6 +8401,7 @@ + @@ -8399,6 +8464,7 @@ + @@ -8554,6 +8620,7 @@ + @@ -8581,6 +8648,7 @@ + @@ -8600,6 +8668,7 @@ + @@ -8808,6 +8877,7 @@ + @@ -8826,13 +8896,16 @@ + + + @@ -8841,7 +8914,9 @@ + + @@ -9005,6 +9080,7 @@ + @@ -9166,6 +9242,7 @@ + @@ -9219,6 +9296,7 @@ + @@ -9226,6 +9304,7 @@ + @@ -9386,6 +9465,7 @@ + @@ -9451,6 +9531,7 @@ + @@ -9920,6 +10001,7 @@ + @@ -10126,6 +10208,7 @@ + @@ -10171,6 +10254,7 @@ + @@ -10393,6 +10477,7 @@ + @@ -10482,6 +10567,7 @@ + @@ -10540,6 +10626,7 @@ + @@ -11164,6 +11251,7 @@ + @@ -11482,6 +11570,7 @@ + @@ -11512,6 +11601,7 @@ + @@ -11564,6 +11654,7 @@ + @@ -11977,6 +12068,7 @@ + @@ -12277,6 +12369,7 @@ + @@ -12755,6 +12848,7 @@ + @@ -12812,8 +12906,10 @@ + + @@ -12826,9 +12922,12 @@ + + + @@ -12909,6 +13008,7 @@ + diff --git a/svgs/_1_2_3_4_player_games.svg b/svgs/_1_2_3_4_player_games.svg new file mode 100644 index 00000000000..e9773df446d --- /dev/null +++ b/svgs/_1_2_3_4_player_games.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/about_you.svg b/svgs/about_you.svg new file mode 100644 index 00000000000..3269458f1a1 --- /dev/null +++ b/svgs/about_you.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/apk_installer.svg b/svgs/apk_installer.svg new file mode 100644 index 00000000000..e0af5dd7a66 --- /dev/null +++ b/svgs/apk_installer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/arena_breakout.svg b/svgs/arena_breakout.svg new file mode 100644 index 00000000000..d1e29da78dc --- /dev/null +++ b/svgs/arena_breakout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/at_mobile.svg b/svgs/at_mobile.svg new file mode 100644 index 00000000000..069d299018a --- /dev/null +++ b/svgs/at_mobile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/au_plus_messages.svg b/svgs/au_plus_messages.svg new file mode 100644 index 00000000000..e13f5c7ff44 --- /dev/null +++ b/svgs/au_plus_messages.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/audio_widget_pack.svg b/svgs/audio_widget_pack.svg new file mode 100644 index 00000000000..5e8e6d15c41 --- /dev/null +++ b/svgs/audio_widget_pack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/auto_ru.svg b/svgs/auto_ru.svg new file mode 100644 index 00000000000..7b0a95849da --- /dev/null +++ b/svgs/auto_ru.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/autodoc.svg b/svgs/autodoc.svg new file mode 100644 index 00000000000..e1b8c3898b4 --- /dev/null +++ b/svgs/autodoc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ayah.svg b/svgs/ayah.svg new file mode 100644 index 00000000000..3187d16c27c --- /dev/null +++ b/svgs/ayah.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bank_hapoalim.svg b/svgs/bank_hapoalim.svg new file mode 100644 index 00000000000..a18b062192e --- /dev/null +++ b/svgs/bank_hapoalim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/betternet.svg b/svgs/betternet.svg new file mode 100644 index 00000000000..27a4aed4484 --- /dev/null +++ b/svgs/betternet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/blurrr.svg b/svgs/blurrr.svg new file mode 100644 index 00000000000..1ee55e21d89 --- /dev/null +++ b/svgs/blurrr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bookmory.svg b/svgs/bookmory.svg new file mode 100644 index 00000000000..fc19696065e --- /dev/null +++ b/svgs/bookmory.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/boost_visual_voicemail.svg b/svgs/boost_visual_voicemail.svg new file mode 100644 index 00000000000..07c55f8a56d --- /dev/null +++ b/svgs/boost_visual_voicemail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/chaton.svg b/svgs/chaton.svg new file mode 100644 index 00000000000..60de1c20624 --- /dev/null +++ b/svgs/chaton.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/chewy.svg b/svgs/chewy.svg new file mode 100644 index 00000000000..a90edbc9cb6 --- /dev/null +++ b/svgs/chewy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cloudedge.svg b/svgs/cloudedge.svg new file mode 100644 index 00000000000..f473de78db3 --- /dev/null +++ b/svgs/cloudedge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/coding_c_plus_plus.svg b/svgs/coding_c_plus_plus.svg new file mode 100644 index 00000000000..11375058c1b --- /dev/null +++ b/svgs/coding_c_plus_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cometin.svg b/svgs/cometin.svg new file mode 100644 index 00000000000..1d645053d4b --- /dev/null +++ b/svgs/cometin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/craigslist.svg b/svgs/craigslist.svg new file mode 100644 index 00000000000..32f1019ef23 --- /dev/null +++ b/svgs/craigslist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/crosshair_hero.svg b/svgs/crosshair_hero.svg new file mode 100644 index 00000000000..b21aeb0f267 --- /dev/null +++ b/svgs/crosshair_hero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dcard.svg b/svgs/dcard.svg new file mode 100644 index 00000000000..4b40559facb --- /dev/null +++ b/svgs/dcard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/digi_yatra.svg b/svgs/digi_yatra.svg new file mode 100644 index 00000000000..d5a3b005748 --- /dev/null +++ b/svgs/digi_yatra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/download_video_no_watermark.svg b/svgs/download_video_no_watermark.svg new file mode 100644 index 00000000000..b9fe35a8c4c --- /dev/null +++ b/svgs/download_video_no_watermark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/eatclub.svg b/svgs/eatclub.svg new file mode 100644 index 00000000000..3e9e1d53d5a --- /dev/null +++ b/svgs/eatclub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/efood.svg b/svgs/efood.svg new file mode 100644 index 00000000000..dd7eb73241b --- /dev/null +++ b/svgs/efood.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/familyalbum.svg b/svgs/familyalbum.svg new file mode 100644 index 00000000000..b72a5ff0753 --- /dev/null +++ b/svgs/familyalbum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fasting.svg b/svgs/fasting.svg new file mode 100644 index 00000000000..6e45c1cc1e2 --- /dev/null +++ b/svgs/fasting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/file_manager.svg b/svgs/file_manager.svg new file mode 100644 index 00000000000..991a713477f --- /dev/null +++ b/svgs/file_manager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/flip_clock.svg b/svgs/flip_clock.svg new file mode 100644 index 00000000000..ed15475d3f5 --- /dev/null +++ b/svgs/flip_clock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fooview.svg b/svgs/fooview.svg new file mode 100644 index 00000000000..d7f1f317d13 --- /dev/null +++ b/svgs/fooview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/freeletics.svg b/svgs/freeletics.svg new file mode 100644 index 00000000000..ea37a6f36f8 --- /dev/null +++ b/svgs/freeletics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gcmob.svg b/svgs/gcmob.svg new file mode 100644 index 00000000000..6b0288a69d9 --- /dev/null +++ b/svgs/gcmob.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/handshake.svg b/svgs/handshake.svg new file mode 100644 index 00000000000..87cff42f957 --- /dev/null +++ b/svgs/handshake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/haylou_fun.svg b/svgs/haylou_fun.svg new file mode 100644 index 00000000000..75586294d78 --- /dev/null +++ b/svgs/haylou_fun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hiwatchpro.svg b/svgs/hiwatchpro.svg new file mode 100644 index 00000000000..a6e3975e639 --- /dev/null +++ b/svgs/hiwatchpro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/interbank.svg b/svgs/interbank.svg new file mode 100644 index 00000000000..1c31eaa9cfa --- /dev/null +++ b/svgs/interbank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ips_exporter.svg b/svgs/ips_exporter.svg new file mode 100644 index 00000000000..73626763ab4 --- /dev/null +++ b/svgs/ips_exporter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iyox_wormhole.svg b/svgs/iyox_wormhole.svg new file mode 100644 index 00000000000..5a95c4232a9 --- /dev/null +++ b/svgs/iyox_wormhole.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kentkart.svg b/svgs/kentkart.svg new file mode 100644 index 00000000000..d19863eec1b --- /dev/null +++ b/svgs/kentkart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kingdraw.svg b/svgs/kingdraw.svg new file mode 100644 index 00000000000..e6dcf3d47c9 --- /dev/null +++ b/svgs/kingdraw.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kufar.svg b/svgs/kufar.svg new file mode 100644 index 00000000000..25d2d2b2d81 --- /dev/null +++ b/svgs/kufar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kyiv_digital.svg b/svgs/kyiv_digital.svg new file mode 100644 index 00000000000..ce02602ec7f --- /dev/null +++ b/svgs/kyiv_digital.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/laban_key.svg b/svgs/laban_key.svg new file mode 100644 index 00000000000..ce1fd87a0e4 --- /dev/null +++ b/svgs/laban_key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lapse_2_before_zero.svg b/svgs/lapse_2_before_zero.svg new file mode 100644 index 00000000000..fd246e00a89 --- /dev/null +++ b/svgs/lapse_2_before_zero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/liveuamap.svg b/svgs/liveuamap.svg new file mode 100644 index 00000000000..d5a9a87fab8 --- /dev/null +++ b/svgs/liveuamap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mail_com.svg b/svgs/mail_com.svg new file mode 100644 index 00000000000..fe9007dd186 --- /dev/null +++ b/svgs/mail_com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mapgenie_elden_ring.svg b/svgs/mapgenie_elden_ring.svg new file mode 100644 index 00000000000..9366d7641b0 --- /dev/null +++ b/svgs/mapgenie_elden_ring.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/material_islands.svg b/svgs/material_islands.svg new file mode 100644 index 00000000000..d4b0f07181f --- /dev/null +++ b/svgs/material_islands.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/metro.svg b/svgs/metro.svg new file mode 100644 index 00000000000..d6858910d8b --- /dev/null +++ b/svgs/metro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/miele.svg b/svgs/miele.svg new file mode 100644 index 00000000000..ff7ceb3ae0f --- /dev/null +++ b/svgs/miele.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/minma_icons.svg b/svgs/minma_icons.svg new file mode 100644 index 00000000000..45165c09df5 --- /dev/null +++ b/svgs/minma_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mobitel_selfcare.svg b/svgs/mobitel_selfcare.svg new file mode 100644 index 00000000000..41456c14bcb --- /dev/null +++ b/svgs/mobitel_selfcare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/money.svg b/svgs/money.svg new file mode 100644 index 00000000000..0ecfb1e1269 --- /dev/null +++ b/svgs/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/monica_ai.svg b/svgs/monica_ai.svg new file mode 100644 index 00000000000..8655d0f6a2c --- /dev/null +++ b/svgs/monica_ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/morse_code.svg b/svgs/morse_code.svg new file mode 100644 index 00000000000..fb6bfed3c6a --- /dev/null +++ b/svgs/morse_code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_data_manager.svg b/svgs/my_data_manager.svg new file mode 100644 index 00000000000..3bf14196399 --- /dev/null +++ b/svgs/my_data_manager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_moscow.svg b/svgs/my_moscow.svg new file mode 100644 index 00000000000..018512669ab --- /dev/null +++ b/svgs/my_moscow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_mts.svg b/svgs/my_mts.svg new file mode 100644 index 00000000000..0c7dcfecf3c --- /dev/null +++ b/svgs/my_mts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mynoise.svg b/svgs/mynoise.svg new file mode 100644 index 00000000000..133019a4248 --- /dev/null +++ b/svgs/mynoise.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/myprotein.svg b/svgs/myprotein.svg new file mode 100644 index 00000000000..829e3018a3d --- /dev/null +++ b/svgs/myprotein.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/navi.svg b/svgs/navi.svg new file mode 100644 index 00000000000..049af87cbdc --- /dev/null +++ b/svgs/navi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nextbike.svg b/svgs/nextbike.svg new file mode 100644 index 00000000000..b310742a523 --- /dev/null +++ b/svgs/nextbike.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nicehash.svg b/svgs/nicehash.svg new file mode 100644 index 00000000000..66ae0049eef --- /dev/null +++ b/svgs/nicehash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nova_post.svg b/svgs/nova_post.svg new file mode 100644 index 00000000000..21b525ebe49 --- /dev/null +++ b/svgs/nova_post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/npo_start.svg b/svgs/npo_start.svg new file mode 100644 index 00000000000..c3a09d6d143 --- /dev/null +++ b/svgs/npo_start.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/opay.svg b/svgs/opay.svg new file mode 100644 index 00000000000..a4e790861fd --- /dev/null +++ b/svgs/opay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/paybox.svg b/svgs/paybox.svg new file mode 100644 index 00000000000..2465fbd9a66 --- /dev/null +++ b/svgs/paybox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/perfect_ear.svg b/svgs/perfect_ear.svg new file mode 100644 index 00000000000..fe3afb3d66c --- /dev/null +++ b/svgs/perfect_ear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/phase6_german_vocabulary.svg b/svgs/phase6_german_vocabulary.svg new file mode 100644 index 00000000000..c243b0d386a --- /dev/null +++ b/svgs/phase6_german_vocabulary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/posten.svg b/svgs/posten.svg new file mode 100644 index 00000000000..5b70e67028b --- /dev/null +++ b/svgs/posten.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pricespy.svg b/svgs/pricespy.svg new file mode 100644 index 00000000000..b8cd534acf2 --- /dev/null +++ b/svgs/pricespy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/qubo.svg b/svgs/qubo.svg new file mode 100644 index 00000000000..2b9a15839c3 --- /dev/null +++ b/svgs/qubo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/quitzilla.svg b/svgs/quitzilla.svg new file mode 100644 index 00000000000..f434c1ac003 --- /dev/null +++ b/svgs/quitzilla.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/quranly.svg b/svgs/quranly.svg new file mode 100644 index 00000000000..de64ae2bb4f --- /dev/null +++ b/svgs/quranly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rejseplanen.svg b/svgs/rejseplanen.svg new file mode 100644 index 00000000000..08bb03c21fd --- /dev/null +++ b/svgs/rejseplanen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/remote_mouse.svg b/svgs/remote_mouse.svg new file mode 100644 index 00000000000..bf1166027e8 --- /dev/null +++ b/svgs/remote_mouse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/renderz.svg b/svgs/renderz.svg new file mode 100644 index 00000000000..e855148e571 --- /dev/null +++ b/svgs/renderz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rentcafe_resident.svg b/svgs/rentcafe_resident.svg new file mode 100644 index 00000000000..c9d978001cd --- /dev/null +++ b/svgs/rentcafe_resident.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/repont.svg b/svgs/repont.svg new file mode 100644 index 00000000000..4e9e7968fea --- /dev/null +++ b/svgs/repont.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/resilio_sync.svg b/svgs/resilio_sync.svg new file mode 100644 index 00000000000..e4a5d1b574d --- /dev/null +++ b/svgs/resilio_sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sahl.svg b/svgs/sahl.svg new file mode 100644 index 00000000000..fadd9da09e3 --- /dev/null +++ b/svgs/sahl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/satellite.svg b/svgs/satellite.svg new file mode 100644 index 00000000000..2846bca274d --- /dev/null +++ b/svgs/satellite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/scotiabank.svg b/svgs/scotiabank.svg new file mode 100644 index 00000000000..a4437844209 --- /dev/null +++ b/svgs/scotiabank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/screen_recorder_video_recorder.svg b/svgs/screen_recorder_video_recorder.svg new file mode 100644 index 00000000000..811e08e7cbe --- /dev/null +++ b/svgs/screen_recorder_video_recorder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/settle_up.svg b/svgs/settle_up.svg new file mode 100644 index 00000000000..f347a66ccb3 --- /dev/null +++ b/svgs/settle_up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shpock.svg b/svgs/shpock.svg new file mode 100644 index 00000000000..ccf27deedea --- /dev/null +++ b/svgs/shpock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/singpass.svg b/svgs/singpass.svg new file mode 100644 index 00000000000..5347dc471de --- /dev/null +++ b/svgs/singpass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/songkick.svg b/svgs/songkick.svg new file mode 100644 index 00000000000..e61dbf2a3ee --- /dev/null +++ b/svgs/songkick.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sophos_intercept_x.svg b/svgs/sophos_intercept_x.svg new file mode 100644 index 00000000000..24dea648e5c --- /dev/null +++ b/svgs/sophos_intercept_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stockx.svg b/svgs/stockx.svg new file mode 100644 index 00000000000..c9d41cad250 --- /dev/null +++ b/svgs/stockx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/superbank.svg b/svgs/superbank.svg new file mode 100644 index 00000000000..8e48832d230 --- /dev/null +++ b/svgs/superbank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/sync.svg b/svgs/sync.svg new file mode 100644 index 00000000000..5583fc61662 --- /dev/null +++ b/svgs/sync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/timestamp_camera.svg b/svgs/timestamp_camera.svg new file mode 100644 index 00000000000..be577482703 --- /dev/null +++ b/svgs/timestamp_camera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/txtpad.svg b/svgs/txtpad.svg new file mode 100644 index 00000000000..b202d292b8c --- /dev/null +++ b/svgs/txtpad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/uc_browser.svg b/svgs/uc_browser.svg new file mode 100644 index 00000000000..71bc4b568f3 --- /dev/null +++ b/svgs/uc_browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/universal_remote_control.svg b/svgs/universal_remote_control.svg new file mode 100644 index 00000000000..66bd2c537fe --- /dev/null +++ b/svgs/universal_remote_control.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wallcraft.svg b/svgs/wallcraft.svg new file mode 100644 index 00000000000..af689e764a7 --- /dev/null +++ b/svgs/wallcraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wikiloc.svg b/svgs/wikiloc.svg new file mode 100644 index 00000000000..94993002a6b --- /dev/null +++ b/svgs/wikiloc.svg @@ -0,0 +1 @@ + \ No newline at end of file From e15239f5c427d301bb85c596714216abb4f91907 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:45:57 +0300 Subject: [PATCH 405/527] +11 links (#2393) --- app/assets/appfilter.xml | 65 +++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index f518c257deb..68b8031d597 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -402,32 +402,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -941,7 +941,6 @@ - @@ -993,6 +992,7 @@ + @@ -2479,6 +2479,7 @@ + @@ -3322,6 +3323,7 @@ + @@ -3400,6 +3402,7 @@ + @@ -6843,6 +6846,7 @@ + @@ -8464,6 +8468,7 @@ + @@ -8648,6 +8653,7 @@ + @@ -8914,6 +8920,7 @@ + @@ -9242,6 +9249,7 @@ + @@ -10208,6 +10216,7 @@ + @@ -11654,6 +11663,7 @@ + @@ -13007,6 +13017,7 @@ + From 69c1c48bae55a91e7ffae0227cd0630cf24dc912 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 11 Oct 2024 02:29:47 +0300 Subject: [PATCH 406/527] +4 links (#2398) --- app/assets/appfilter.xml | 28 +++++++++++-------- ...oner_plus.svg => app_cloner_plus_plus.svg} | 0 svgs/gos_uslugi.svg | 1 - svgs/gosuslugi.svg | 1 + svgs/meta_horizon.svg | 1 + svgs/meta_quest.svg | 1 - svgs/qantas_entertainment.svg | 1 - svgs/sony_sound_connect.svg | 1 + 8 files changed, 19 insertions(+), 15 deletions(-) rename svgs/{app_cloner_plus.svg => app_cloner_plus_plus.svg} (100%) delete mode 100644 svgs/gos_uslugi.svg create mode 100644 svgs/gosuslugi.svg create mode 100644 svgs/meta_horizon.svg delete mode 100644 svgs/meta_quest.svg delete mode 100644 svgs/qantas_entertainment.svg create mode 100644 svgs/sony_sound_connect.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 68b8031d597..adefbda5a1e 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -624,7 +624,8 @@ - + + @@ -1419,6 +1420,7 @@ + @@ -6153,8 +6155,8 @@ - - + + @@ -6861,6 +6863,7 @@ + @@ -8559,8 +8562,8 @@ - - + + @@ -10247,8 +10250,6 @@ - - @@ -10259,6 +10260,8 @@ + + @@ -11630,6 +11633,7 @@ + @@ -12889,11 +12893,11 @@ - - - - - + + + + + diff --git a/svgs/app_cloner_plus.svg b/svgs/app_cloner_plus_plus.svg similarity index 100% rename from svgs/app_cloner_plus.svg rename to svgs/app_cloner_plus_plus.svg diff --git a/svgs/gos_uslugi.svg b/svgs/gos_uslugi.svg deleted file mode 100644 index ddeb88b2010..00000000000 --- a/svgs/gos_uslugi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/gosuslugi.svg b/svgs/gosuslugi.svg new file mode 100644 index 00000000000..aaef008eb34 --- /dev/null +++ b/svgs/gosuslugi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meta_horizon.svg b/svgs/meta_horizon.svg new file mode 100644 index 00000000000..e194ca73c7a --- /dev/null +++ b/svgs/meta_horizon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meta_quest.svg b/svgs/meta_quest.svg deleted file mode 100644 index 23145231182..00000000000 --- a/svgs/meta_quest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/qantas_entertainment.svg b/svgs/qantas_entertainment.svg deleted file mode 100644 index 1ba76710483..00000000000 --- a/svgs/qantas_entertainment.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/sony_sound_connect.svg b/svgs/sony_sound_connect.svg new file mode 100644 index 00000000000..e68c21f91d0 --- /dev/null +++ b/svgs/sony_sound_connect.svg @@ -0,0 +1 @@ + \ No newline at end of file From 8844376a056b8a00b1b16ae47dbbbc683693b597 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:06:17 +0300 Subject: [PATCH 407/527] +26 links (#2402) * +26 links * Update appfilter.xml * Update yuzu.svg --- app/assets/appfilter.xml | 33 +++++++++++++++++-- svgs/bell_wifi.svg | 2 +- svgs/{free_ligue_1.svg => free.svg} | 0 ...rcle_icons.svg => one_ui_circle_icons.svg} | 0 ...{oneui_dark_icons.svg => one_ui_icons.svg} | 0 svgs/ppsspp.svg | 2 +- svgs/yuzu.svg | 2 +- 7 files changed, 33 insertions(+), 6 deletions(-) rename svgs/{free_ligue_1.svg => free.svg} (100%) rename svgs/{oneui_circle_icons.svg => one_ui_circle_icons.svg} (100%) rename svgs/{oneui_dark_icons.svg => one_ui_icons.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index adefbda5a1e..8926448e244 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4,6 +4,7 @@ + @@ -504,12 +505,14 @@ + + @@ -1434,6 +1437,7 @@ + @@ -2567,6 +2571,7 @@ + @@ -2862,6 +2867,7 @@ + @@ -3817,10 +3823,11 @@ + - + @@ -4192,6 +4199,7 @@ + @@ -4627,9 +4635,12 @@ + + + @@ -4678,6 +4689,7 @@ + @@ -4695,6 +4707,7 @@ + @@ -5526,6 +5539,7 @@ + @@ -5801,6 +5815,7 @@ + @@ -7138,6 +7153,7 @@ + @@ -7460,6 +7476,9 @@ + + + @@ -7506,8 +7525,6 @@ - - @@ -7635,6 +7652,7 @@ + @@ -7812,6 +7830,7 @@ + @@ -8536,6 +8555,7 @@ + @@ -9151,6 +9171,7 @@ + @@ -9897,6 +9918,7 @@ + @@ -10619,6 +10641,7 @@ + @@ -11574,6 +11597,7 @@ + @@ -11747,6 +11771,7 @@ + @@ -12373,6 +12398,7 @@ + @@ -12470,6 +12496,7 @@ + diff --git a/svgs/bell_wifi.svg b/svgs/bell_wifi.svg index fccbbbc6eed..d160fc38a55 100644 --- a/svgs/bell_wifi.svg +++ b/svgs/bell_wifi.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/free_ligue_1.svg b/svgs/free.svg similarity index 100% rename from svgs/free_ligue_1.svg rename to svgs/free.svg diff --git a/svgs/oneui_circle_icons.svg b/svgs/one_ui_circle_icons.svg similarity index 100% rename from svgs/oneui_circle_icons.svg rename to svgs/one_ui_circle_icons.svg diff --git a/svgs/oneui_dark_icons.svg b/svgs/one_ui_icons.svg similarity index 100% rename from svgs/oneui_dark_icons.svg rename to svgs/one_ui_icons.svg diff --git a/svgs/ppsspp.svg b/svgs/ppsspp.svg index 3183861aacb..91a1222a16f 100644 --- a/svgs/ppsspp.svg +++ b/svgs/ppsspp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/yuzu.svg b/svgs/yuzu.svg index f3465cd8649..2384da94177 100644 --- a/svgs/yuzu.svg +++ b/svgs/yuzu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 65fa62d183f212444fdfef4ec0026b0dc7726db5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 10:33:11 +0800 Subject: [PATCH 408/527] Update Kotlin and KSP (#2397) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3f3a23a9fc3..fb51126b3cb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,10 +3,10 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.7.0" apply false - id("org.jetbrains.kotlin.android") version "2.0.20" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" - id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false - id("com.google.devtools.ksp") version "2.0.20-1.0.25" apply false + id("org.jetbrains.kotlin.android") version "2.0.21" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" + id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false + id("com.google.devtools.ksp") version "2.0.21-1.0.25" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.11.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From a79ffb4afab43176911b1103577c890978466c7e Mon Sep 17 00:00:00 2001 From: Euan McIntosh <55203189+McIntoshEuan@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:15:42 +0900 Subject: [PATCH 409/527] +3 icons (#2376) * Added NITORI, JINS and LUUP Added icons for 3 common Japanese apps (major furniture store, eyewear store and bicycle/scooter rental service) * Update luup.svg * Update jins.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 3 +++ svgs/jins.svg | 1 + svgs/luup.svg | 1 + svgs/nitori.svg | 9 +++++++++ 4 files changed, 14 insertions(+) create mode 100644 svgs/jins.svg create mode 100644 svgs/luup.svg create mode 100644 svgs/nitori.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8926448e244..bf3deee392c 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5109,6 +5109,7 @@ + @@ -5770,6 +5771,7 @@ + @@ -7145,6 +7147,7 @@ + diff --git a/svgs/jins.svg b/svgs/jins.svg new file mode 100644 index 00000000000..a95d628470d --- /dev/null +++ b/svgs/jins.svg @@ -0,0 +1 @@ + diff --git a/svgs/luup.svg b/svgs/luup.svg new file mode 100644 index 00000000000..54925df9730 --- /dev/null +++ b/svgs/luup.svg @@ -0,0 +1 @@ + diff --git a/svgs/nitori.svg b/svgs/nitori.svg new file mode 100644 index 00000000000..fb56766fa1f --- /dev/null +++ b/svgs/nitori.svg @@ -0,0 +1,9 @@ + + + + + + + + + From b87bcedb9ee1c2d01757245d93b9f904a1e38006 Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Sat, 12 Oct 2024 21:08:47 +0300 Subject: [PATCH 410/527] Added 7, Linked 1 (#2377) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Icon size reduction Reduced the size of 3 icons from 50KB to ~2KB. almanea.svg hungerstation.svg mada_pay.svg * +7 icons * 150X Duplicate Remover Pro (`com.nutuvamapp.onefivexduplicatexapp/com.nutuvamapp.onefivexduplicatexapp.activity.SplashActivity`) * AlDawaa Pharmacies (`com.kr.aldawaa/com.kr.aldawaa.view.SplashActivity`) * مطاعم الرومانسية (`com.tech_world.romansia/com.tech_world.romansia.ui.splash.SplashActivity`) * AlinmaPay E Wallet (`com.alinma.pay.consumer/com.alinma.pay.consumer.MainActivity`) * barq (`sa.com.barraq/com.globalfinancingsolutions.ui.splash.SplashActivity`) * BCare (`com.app.bcare/com.nqdi.app.MainActivity`) * Core | Crypto Wallet and NFTs (`com.avaxwallet/com.avaxwallet.MainActivity`) * Linked 1 icon * Made some modifications required. * Update appfilter.xml, al_dawaa.svg, al_romansiah.svg, and 2 more files Changed the stroke width to 10px for alinmapay.svg * Updated the icons requested. * Update bcare.svg * Update alinmapay.svg * Update al_dawaa.svg * Update al_dawaa.svg * Update bcare.svg * Added 6, Linked 1 * Update elite_hospital.svg, gateio.svg, meem_ksa.svg, and 1 more file * Update elite_hospital.svg * Update meem_ksa.svg * Update and rename gateio.svg to gate_io.svg * Update appfilter.xml --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 8 ++++++++ svgs/elite_hospital.svg | 1 + svgs/gate_io.svg | 1 + svgs/meem_ksa.svg | 1 + svgs/mp3quran.svg | 4 ++++ svgs/mrsool.svg | 3 +++ svgs/myus.svg | 3 +++ svgs/ninja.svg | 3 +++ 8 files changed, 24 insertions(+) create mode 100644 svgs/elite_hospital.svg create mode 100644 svgs/gate_io.svg create mode 100644 svgs/meem_ksa.svg create mode 100644 svgs/mp3quran.svg create mode 100644 svgs/mrsool.svg create mode 100644 svgs/myus.svg create mode 100644 svgs/ninja.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index bf3deee392c..f6f45712df3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -3206,6 +3206,7 @@ + @@ -3999,6 +4000,7 @@ + @@ -6048,6 +6050,7 @@ + @@ -6901,6 +6904,7 @@ + @@ -13059,6 +13063,7 @@ + @@ -13086,6 +13091,8 @@ + + @@ -13095,6 +13102,7 @@ + diff --git a/svgs/elite_hospital.svg b/svgs/elite_hospital.svg new file mode 100644 index 00000000000..052ccbd9d09 --- /dev/null +++ b/svgs/elite_hospital.svg @@ -0,0 +1 @@ + diff --git a/svgs/gate_io.svg b/svgs/gate_io.svg new file mode 100644 index 00000000000..078fc2c0946 --- /dev/null +++ b/svgs/gate_io.svg @@ -0,0 +1 @@ + diff --git a/svgs/meem_ksa.svg b/svgs/meem_ksa.svg new file mode 100644 index 00000000000..043c922978d --- /dev/null +++ b/svgs/meem_ksa.svg @@ -0,0 +1 @@ + diff --git a/svgs/mp3quran.svg b/svgs/mp3quran.svg new file mode 100644 index 00000000000..de821cecf30 --- /dev/null +++ b/svgs/mp3quran.svg @@ -0,0 +1,4 @@ + + + + diff --git a/svgs/mrsool.svg b/svgs/mrsool.svg new file mode 100644 index 00000000000..00241d25c37 --- /dev/null +++ b/svgs/mrsool.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/myus.svg b/svgs/myus.svg new file mode 100644 index 00000000000..abfcc9c20af --- /dev/null +++ b/svgs/myus.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/ninja.svg b/svgs/ninja.svg new file mode 100644 index 00000000000..28be245f372 --- /dev/null +++ b/svgs/ninja.svg @@ -0,0 +1,3 @@ + + + From 17d25965208f27d22b5a5ddd9e7976294e25861f Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sun, 13 Oct 2024 05:12:57 +1100 Subject: [PATCH 411/527] + 2 icons (#2399) * + 2 icons * Small fix * Small fixes * Update bc_wildfire_service.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 2 ++ svgs/bc_wildfire_service.svg | 1 + svgs/princh.svg | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 svgs/bc_wildfire_service.svg create mode 100644 svgs/princh.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index f6f45712df3..692efe637de 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1024,6 +1024,7 @@ + @@ -8500,6 +8501,7 @@ + diff --git a/svgs/bc_wildfire_service.svg b/svgs/bc_wildfire_service.svg new file mode 100644 index 00000000000..fbaad5f26ff --- /dev/null +++ b/svgs/bc_wildfire_service.svg @@ -0,0 +1 @@ + diff --git a/svgs/princh.svg b/svgs/princh.svg new file mode 100644 index 00000000000..b33f89d8fbe --- /dev/null +++ b/svgs/princh.svg @@ -0,0 +1,20 @@ + + From d1a674ee0f086858895afb8ec0b8dd0844919882 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Sun, 13 Oct 2024 10:18:43 +1100 Subject: [PATCH 412/527] Add Arc Search (#2404) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * + 1 icon * Update arc_search.svg — Reduced the black spot --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/arc_search.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/arc_search.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 692efe637de..aedf182d1c6 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -713,6 +713,7 @@ + diff --git a/svgs/arc_search.svg b/svgs/arc_search.svg new file mode 100644 index 00000000000..20255730760 --- /dev/null +++ b/svgs/arc_search.svg @@ -0,0 +1 @@ + From fd074bb0a08d324dcc90cf8d1cedd31b61d831d6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 13 Oct 2024 13:31:05 +0300 Subject: [PATCH 413/527] +10 links (#2405) --- app/assets/appfilter.xml | 10 ++++++++++ svgs/ather.svg | 2 +- svgs/corona_warn.svg | 2 +- svgs/endel.svg | 2 +- svgs/enpass.svg | 2 +- svgs/taichi.svg | 2 +- 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index aedf182d1c6..5002d3b4a91 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -876,6 +876,7 @@ + @@ -905,6 +906,7 @@ + @@ -1285,6 +1287,7 @@ + @@ -2869,6 +2872,7 @@ + @@ -4610,6 +4614,7 @@ + @@ -4644,6 +4649,7 @@ + @@ -5800,6 +5806,7 @@ + @@ -7161,6 +7168,7 @@ + @@ -12138,6 +12146,7 @@ + @@ -13023,6 +13032,7 @@ + diff --git a/svgs/ather.svg b/svgs/ather.svg index 467330650df..3dd6c4f412b 100644 --- a/svgs/ather.svg +++ b/svgs/ather.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/corona_warn.svg b/svgs/corona_warn.svg index 6020d47998b..a2d409a0b80 100644 --- a/svgs/corona_warn.svg +++ b/svgs/corona_warn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/endel.svg b/svgs/endel.svg index 909d89138fc..51017b04454 100644 --- a/svgs/endel.svg +++ b/svgs/endel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/enpass.svg b/svgs/enpass.svg index c738eb6dca2..8dcfae60669 100644 --- a/svgs/enpass.svg +++ b/svgs/enpass.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/taichi.svg b/svgs/taichi.svg index 511bc199bc4..aa2c797d0b1 100644 --- a/svgs/taichi.svg +++ b/svgs/taichi.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 61bfce3ff3fedfc966f5e4d5447cbaf299cc8491 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:30:10 +0800 Subject: [PATCH 414/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.16 (#2407) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fb51126b3cb..e4f234cccfb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.15", + "io.nlopez.compose.rules:ktlint:0.4.16", ), ).editorConfigOverride( mapOf( From 6e16d20df2dd553e624523f109793bbbac089c6a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:30:20 +0800 Subject: [PATCH 415/527] Update AGP (#2406) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e4f234cccfb..2ec6004ecfc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.7.0" apply false + id("com.android.application") version "8.7.1" apply false id("org.jetbrains.kotlin.android") version "2.0.21" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 559280ca5f8..32423d981a8 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.7.0") + implementation("com.android.tools:sdk-common:31.7.1") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.17.0") } From bb813a920874f23f1b35ba5f130b0483c97455bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:20:04 +0800 Subject: [PATCH 416/527] Update plugin app.cash.licensee to v1.12.0 (#2408) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2ec6004ecfc..ef886193c11 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false id("com.google.devtools.ksp") version "2.0.21-1.0.25" apply false id("com.google.dagger.hilt.android") version "2.52" apply false - id("app.cash.licensee") version "1.11.0" apply false + id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false } From fbd2e7e82d863928041364ddb4f1043b8cee7b8e Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:58:53 +0300 Subject: [PATCH 417/527] [Barter 9] +100 icons: Arby's, Kroger, WeTransfer (#2409) * [Barter 9] +100 icons: Arby's, Kroger, WeTransfer * Fix * Fix --- app/assets/appfilter.xml | 100 ++++++++++++++++++++++++ svgs/adobe_capture.svg | 1 + svgs/affirm.svg | 1 + svgs/algida.svg | 1 + svgs/allen.svg | 1 + svgs/aloha_browser.svg | 1 + svgs/animal_crossing.svg | 1 + svgs/appsfree.svg | 1 + svgs/arbys.svg | 1 + svgs/atlas_obscura.svg | 1 + svgs/au_mail.svg | 1 + svgs/autozen.svg | 1 + svgs/az_screen_recorder.svg | 1 + svgs/beanstack.svg | 1 + svgs/bilal.svg | 1 + svgs/bitdefender_antivirus.svg | 1 + svgs/blibli_belanja.svg | 1 + svgs/boosty.svg | 1 + svgs/bus_nearby.svg | 1 + svgs/carinfo.svg | 1 + svgs/cashkaro.svg | 1 + svgs/check24.svg | 1 + svgs/clip_studio_paint.svg | 1 + svgs/cloud_mail_ru.svg | 1 + svgs/complete_music_reading_trainer.svg | 1 + svgs/daily_dev.svg | 1 + svgs/data_wing.svg | 1 + svgs/dayforce.svg | 1 + svgs/dazn.svg | 1 + svgs/dhan.svg | 1 + svgs/discover_from_facebook.svg | 1 + svgs/dom_ru.svg | 1 + svgs/eand.svg | 1 + svgs/easybrain.svg | 1 + svgs/enki.svg | 1 + svgs/espncricinfo.svg | 1 + svgs/fake_gps_byterev.svg | 1 + svgs/fondea.svg | 1 + svgs/gartic.svg | 1 + svgs/gazprombank.svg | 1 + svgs/gesture_control.svg | 1 + svgs/google_kids_space.svg | 1 + svgs/gosuslugi_auto.svg | 1 + svgs/gosuslugi_decide_together.svg | 1 + svgs/height_increase_workout.svg | 1 + svgs/heyconad.svg | 1 + svgs/hiddify.svg | 1 + svgs/honor_health.svg | 1 + svgs/iheart.svg | 1 + svgs/infinite_japanese.svg | 1 + svgs/invoice_maker_and_estimate.svg | 1 + svgs/japan_vpn.svg | 1 + svgs/jbl_partybox.svg | 1 + svgs/jmo.svg | 1 + svgs/keepsafe.svg | 1 + svgs/kroger.svg | 1 + svgs/lenovo.svg | 1 + svgs/lifepoints.svg | 1 + svgs/lukoil.svg | 1 + svgs/m10.svg | 1 + svgs/macrofactor.svg | 1 + svgs/mb_bank.svg | 1 + svgs/meroshare.svg | 1 + svgs/mi_pay.svg | 1 + svgs/mojeikp.svg | 1 + svgs/network_speed_speed_meter.svg | 1 + svgs/node_video.svg | 1 + svgs/oken.svg | 1 + svgs/onet_poczta.svg | 1 + svgs/panels.svg | 1 + svgs/park_plus_rto.svg | 1 + svgs/really_bad_chess.svg | 1 + svgs/schoolfox.svg | 1 + svgs/screener.svg | 1 + svgs/shadow_fight_2.svg | 1 + svgs/shuffles_by_pinterest.svg | 1 + svgs/snipd.svg | 1 + svgs/softlist.svg | 1 + svgs/southwest_airlines.svg | 1 + svgs/the_guardian.svg | 1 + svgs/tier.svg | 1 + svgs/trip_com.svg | 1 + svgs/twisty_timer.svg | 1 + svgs/upside.svg | 1 + svgs/video_downloader_for_pinterest.svg | 1 + svgs/video_to_wallpaper.svg | 1 + svgs/vipps.svg | 1 + svgs/vk_mail.svg | 1 + svgs/vk_music.svg | 1 + svgs/voi.svg | 1 + svgs/vpn_proxy_master.svg | 1 + svgs/wallzen.svg | 1 + svgs/web_de.svg | 1 + svgs/wetransfer.svg | 1 + svgs/weward.svg | 1 + svgs/whats_up.svg | 1 + svgs/wibuku.svg | 1 + svgs/wifi_ar.svg | 1 + svgs/wled.svg | 1 + svgs/zelle.svg | 1 + svgs/zoom_earth.svg | 1 + 101 files changed, 200 insertions(+) create mode 100644 svgs/adobe_capture.svg create mode 100644 svgs/affirm.svg create mode 100644 svgs/algida.svg create mode 100644 svgs/allen.svg create mode 100644 svgs/aloha_browser.svg create mode 100644 svgs/animal_crossing.svg create mode 100644 svgs/appsfree.svg create mode 100644 svgs/arbys.svg create mode 100644 svgs/atlas_obscura.svg create mode 100644 svgs/au_mail.svg create mode 100644 svgs/autozen.svg create mode 100644 svgs/az_screen_recorder.svg create mode 100644 svgs/beanstack.svg create mode 100644 svgs/bilal.svg create mode 100644 svgs/bitdefender_antivirus.svg create mode 100644 svgs/blibli_belanja.svg create mode 100644 svgs/boosty.svg create mode 100644 svgs/bus_nearby.svg create mode 100644 svgs/carinfo.svg create mode 100644 svgs/cashkaro.svg create mode 100644 svgs/check24.svg create mode 100644 svgs/clip_studio_paint.svg create mode 100644 svgs/cloud_mail_ru.svg create mode 100644 svgs/complete_music_reading_trainer.svg create mode 100644 svgs/daily_dev.svg create mode 100644 svgs/data_wing.svg create mode 100644 svgs/dayforce.svg create mode 100644 svgs/dazn.svg create mode 100644 svgs/dhan.svg create mode 100644 svgs/discover_from_facebook.svg create mode 100644 svgs/dom_ru.svg create mode 100644 svgs/eand.svg create mode 100644 svgs/easybrain.svg create mode 100644 svgs/enki.svg create mode 100644 svgs/espncricinfo.svg create mode 100644 svgs/fake_gps_byterev.svg create mode 100644 svgs/fondea.svg create mode 100644 svgs/gartic.svg create mode 100644 svgs/gazprombank.svg create mode 100644 svgs/gesture_control.svg create mode 100644 svgs/google_kids_space.svg create mode 100644 svgs/gosuslugi_auto.svg create mode 100644 svgs/gosuslugi_decide_together.svg create mode 100644 svgs/height_increase_workout.svg create mode 100644 svgs/heyconad.svg create mode 100644 svgs/hiddify.svg create mode 100644 svgs/honor_health.svg create mode 100644 svgs/iheart.svg create mode 100644 svgs/infinite_japanese.svg create mode 100644 svgs/invoice_maker_and_estimate.svg create mode 100644 svgs/japan_vpn.svg create mode 100644 svgs/jbl_partybox.svg create mode 100644 svgs/jmo.svg create mode 100644 svgs/keepsafe.svg create mode 100644 svgs/kroger.svg create mode 100644 svgs/lenovo.svg create mode 100644 svgs/lifepoints.svg create mode 100644 svgs/lukoil.svg create mode 100644 svgs/m10.svg create mode 100644 svgs/macrofactor.svg create mode 100644 svgs/mb_bank.svg create mode 100644 svgs/meroshare.svg create mode 100644 svgs/mi_pay.svg create mode 100644 svgs/mojeikp.svg create mode 100644 svgs/network_speed_speed_meter.svg create mode 100644 svgs/node_video.svg create mode 100644 svgs/oken.svg create mode 100644 svgs/onet_poczta.svg create mode 100644 svgs/panels.svg create mode 100644 svgs/park_plus_rto.svg create mode 100644 svgs/really_bad_chess.svg create mode 100644 svgs/schoolfox.svg create mode 100644 svgs/screener.svg create mode 100644 svgs/shadow_fight_2.svg create mode 100644 svgs/shuffles_by_pinterest.svg create mode 100644 svgs/snipd.svg create mode 100644 svgs/softlist.svg create mode 100644 svgs/southwest_airlines.svg create mode 100644 svgs/the_guardian.svg create mode 100644 svgs/tier.svg create mode 100644 svgs/trip_com.svg create mode 100644 svgs/twisty_timer.svg create mode 100644 svgs/upside.svg create mode 100644 svgs/video_downloader_for_pinterest.svg create mode 100644 svgs/video_to_wallpaper.svg create mode 100644 svgs/vipps.svg create mode 100644 svgs/vk_mail.svg create mode 100644 svgs/vk_music.svg create mode 100644 svgs/voi.svg create mode 100644 svgs/vpn_proxy_master.svg create mode 100644 svgs/wallzen.svg create mode 100644 svgs/web_de.svg create mode 100644 svgs/wetransfer.svg create mode 100644 svgs/weward.svg create mode 100644 svgs/whats_up.svg create mode 100644 svgs/wibuku.svg create mode 100644 svgs/wifi_ar.svg create mode 100644 svgs/wled.svg create mode 100644 svgs/zelle.svg create mode 100644 svgs/zoom_earth.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5002d3b4a91..36c5edc8192 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -38,6 +38,7 @@ + @@ -209,6 +210,7 @@ + @@ -241,6 +243,7 @@ + @@ -330,6 +333,7 @@ + @@ -391,6 +395,7 @@ + @@ -400,6 +405,7 @@ + @@ -540,6 +546,7 @@ + @@ -687,6 +694,7 @@ + @@ -712,6 +720,7 @@ + @@ -774,6 +783,7 @@ + @@ -845,7 +855,9 @@ + + @@ -899,6 +911,7 @@ + @@ -1047,6 +1060,7 @@ + @@ -1163,6 +1177,7 @@ + @@ -1216,6 +1231,7 @@ + @@ -1342,6 +1358,7 @@ + @@ -1545,6 +1562,7 @@ + @@ -1916,6 +1934,7 @@ + @@ -1939,6 +1958,7 @@ + @@ -2010,6 +2030,7 @@ + @@ -2147,6 +2168,7 @@ + @@ -2326,6 +2348,7 @@ + @@ -2570,6 +2593,7 @@ + @@ -2603,6 +2627,7 @@ + @@ -2616,8 +2641,10 @@ + + @@ -2733,6 +2760,7 @@ + @@ -2846,6 +2874,7 @@ + @@ -3121,6 +3150,7 @@ + @@ -3149,6 +3179,7 @@ + @@ -3236,6 +3267,7 @@ + @@ -3277,6 +3309,7 @@ + @@ -3384,6 +3417,7 @@ + @@ -3749,6 +3783,7 @@ + @@ -4003,6 +4038,7 @@ + @@ -4083,6 +4119,7 @@ + @@ -4260,6 +4297,7 @@ + @@ -4552,6 +4590,7 @@ + @@ -4571,6 +4610,7 @@ + @@ -4591,6 +4631,7 @@ + @@ -4649,6 +4690,7 @@ + @@ -4805,6 +4847,7 @@ + @@ -4916,6 +4959,7 @@ + @@ -5023,6 +5067,7 @@ + @@ -5094,11 +5139,13 @@ + + @@ -5142,6 +5189,7 @@ + @@ -5256,6 +5304,7 @@ + @@ -5449,6 +5498,7 @@ + @@ -5550,6 +5600,7 @@ + @@ -5632,6 +5683,7 @@ + @@ -5792,6 +5844,7 @@ + @@ -5812,6 +5865,7 @@ + @@ -5966,6 +6020,7 @@ + @@ -6106,6 +6161,7 @@ + @@ -6250,6 +6306,7 @@ + @@ -6497,6 +6554,7 @@ + @@ -7071,6 +7129,7 @@ + @@ -7176,6 +7235,7 @@ + @@ -7400,6 +7460,7 @@ + @@ -7542,6 +7603,7 @@ + @@ -7741,6 +7803,7 @@ + @@ -7772,6 +7835,7 @@ + @@ -8811,6 +8875,7 @@ + @@ -9335,6 +9400,7 @@ + @@ -9359,6 +9425,7 @@ + @@ -9520,6 +9587,7 @@ + @@ -9582,6 +9650,7 @@ + @@ -10237,6 +10306,7 @@ + @@ -10252,6 +10322,7 @@ + @@ -10334,6 +10405,7 @@ + @@ -11207,6 +11279,7 @@ + @@ -11273,6 +11346,7 @@ + @@ -11494,6 +11568,7 @@ + @@ -11607,6 +11682,7 @@ + @@ -11750,6 +11826,7 @@ + @@ -11915,6 +11992,7 @@ + @@ -11927,6 +12005,7 @@ + @@ -11960,6 +12039,7 @@ + @@ -12011,6 +12091,8 @@ + + @@ -12024,6 +12106,7 @@ + @@ -12062,6 +12145,7 @@ + @@ -12148,6 +12232,7 @@ + @@ -12223,6 +12308,7 @@ + @@ -12250,12 +12336,15 @@ + + + @@ -12410,6 +12499,7 @@ + @@ -12417,6 +12507,7 @@ + @@ -12468,6 +12559,7 @@ + @@ -12811,6 +12903,7 @@ + @@ -12886,6 +12979,7 @@ + @@ -12939,17 +13033,21 @@ + + + + @@ -12972,6 +13070,7 @@ + @@ -12991,6 +13090,7 @@ + diff --git a/svgs/adobe_capture.svg b/svgs/adobe_capture.svg new file mode 100644 index 00000000000..3dfda0be40a --- /dev/null +++ b/svgs/adobe_capture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/affirm.svg b/svgs/affirm.svg new file mode 100644 index 00000000000..ef76ecc882d --- /dev/null +++ b/svgs/affirm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/algida.svg b/svgs/algida.svg new file mode 100644 index 00000000000..64dcd2b2508 --- /dev/null +++ b/svgs/algida.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/allen.svg b/svgs/allen.svg new file mode 100644 index 00000000000..28ceb8cab47 --- /dev/null +++ b/svgs/allen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/aloha_browser.svg b/svgs/aloha_browser.svg new file mode 100644 index 00000000000..7428657874a --- /dev/null +++ b/svgs/aloha_browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/animal_crossing.svg b/svgs/animal_crossing.svg new file mode 100644 index 00000000000..c651bd61413 --- /dev/null +++ b/svgs/animal_crossing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/appsfree.svg b/svgs/appsfree.svg new file mode 100644 index 00000000000..57496577283 --- /dev/null +++ b/svgs/appsfree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/arbys.svg b/svgs/arbys.svg new file mode 100644 index 00000000000..a8d8671406f --- /dev/null +++ b/svgs/arbys.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/atlas_obscura.svg b/svgs/atlas_obscura.svg new file mode 100644 index 00000000000..28a1e6ef641 --- /dev/null +++ b/svgs/atlas_obscura.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/au_mail.svg b/svgs/au_mail.svg new file mode 100644 index 00000000000..8ec8ef9a1f1 --- /dev/null +++ b/svgs/au_mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/autozen.svg b/svgs/autozen.svg new file mode 100644 index 00000000000..1925686a97e --- /dev/null +++ b/svgs/autozen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/az_screen_recorder.svg b/svgs/az_screen_recorder.svg new file mode 100644 index 00000000000..b5de55f93d2 --- /dev/null +++ b/svgs/az_screen_recorder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/beanstack.svg b/svgs/beanstack.svg new file mode 100644 index 00000000000..fd760b0ae94 --- /dev/null +++ b/svgs/beanstack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bilal.svg b/svgs/bilal.svg new file mode 100644 index 00000000000..908a82e1674 --- /dev/null +++ b/svgs/bilal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bitdefender_antivirus.svg b/svgs/bitdefender_antivirus.svg new file mode 100644 index 00000000000..5946621d0cc --- /dev/null +++ b/svgs/bitdefender_antivirus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/blibli_belanja.svg b/svgs/blibli_belanja.svg new file mode 100644 index 00000000000..fddaaff69ec --- /dev/null +++ b/svgs/blibli_belanja.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/boosty.svg b/svgs/boosty.svg new file mode 100644 index 00000000000..b12caa02137 --- /dev/null +++ b/svgs/boosty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bus_nearby.svg b/svgs/bus_nearby.svg new file mode 100644 index 00000000000..222cb0ca11f --- /dev/null +++ b/svgs/bus_nearby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/carinfo.svg b/svgs/carinfo.svg new file mode 100644 index 00000000000..df83a280bdd --- /dev/null +++ b/svgs/carinfo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cashkaro.svg b/svgs/cashkaro.svg new file mode 100644 index 00000000000..5dad274a73c --- /dev/null +++ b/svgs/cashkaro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/check24.svg b/svgs/check24.svg new file mode 100644 index 00000000000..1616fea9eb4 --- /dev/null +++ b/svgs/check24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/clip_studio_paint.svg b/svgs/clip_studio_paint.svg new file mode 100644 index 00000000000..5175591a508 --- /dev/null +++ b/svgs/clip_studio_paint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cloud_mail_ru.svg b/svgs/cloud_mail_ru.svg new file mode 100644 index 00000000000..feab2a9b545 --- /dev/null +++ b/svgs/cloud_mail_ru.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/complete_music_reading_trainer.svg b/svgs/complete_music_reading_trainer.svg new file mode 100644 index 00000000000..f6ae802f458 --- /dev/null +++ b/svgs/complete_music_reading_trainer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/daily_dev.svg b/svgs/daily_dev.svg new file mode 100644 index 00000000000..ac0cf79912f --- /dev/null +++ b/svgs/daily_dev.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/data_wing.svg b/svgs/data_wing.svg new file mode 100644 index 00000000000..2336e90b75c --- /dev/null +++ b/svgs/data_wing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dayforce.svg b/svgs/dayforce.svg new file mode 100644 index 00000000000..5d62e012e15 --- /dev/null +++ b/svgs/dayforce.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dazn.svg b/svgs/dazn.svg new file mode 100644 index 00000000000..e3ef1f84ee5 --- /dev/null +++ b/svgs/dazn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dhan.svg b/svgs/dhan.svg new file mode 100644 index 00000000000..5efc2a56618 --- /dev/null +++ b/svgs/dhan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/discover_from_facebook.svg b/svgs/discover_from_facebook.svg new file mode 100644 index 00000000000..a8482bc7727 --- /dev/null +++ b/svgs/discover_from_facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dom_ru.svg b/svgs/dom_ru.svg new file mode 100644 index 00000000000..c78b74cb711 --- /dev/null +++ b/svgs/dom_ru.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/eand.svg b/svgs/eand.svg new file mode 100644 index 00000000000..454895e2972 --- /dev/null +++ b/svgs/eand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/easybrain.svg b/svgs/easybrain.svg new file mode 100644 index 00000000000..79c28033078 --- /dev/null +++ b/svgs/easybrain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/enki.svg b/svgs/enki.svg new file mode 100644 index 00000000000..10fb47d351f --- /dev/null +++ b/svgs/enki.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/espncricinfo.svg b/svgs/espncricinfo.svg new file mode 100644 index 00000000000..53f108db5d0 --- /dev/null +++ b/svgs/espncricinfo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fake_gps_byterev.svg b/svgs/fake_gps_byterev.svg new file mode 100644 index 00000000000..14e79d785cc --- /dev/null +++ b/svgs/fake_gps_byterev.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fondea.svg b/svgs/fondea.svg new file mode 100644 index 00000000000..f324850dbb7 --- /dev/null +++ b/svgs/fondea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gartic.svg b/svgs/gartic.svg new file mode 100644 index 00000000000..02ae5c0d3f6 --- /dev/null +++ b/svgs/gartic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gazprombank.svg b/svgs/gazprombank.svg new file mode 100644 index 00000000000..07f00ec1bab --- /dev/null +++ b/svgs/gazprombank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gesture_control.svg b/svgs/gesture_control.svg new file mode 100644 index 00000000000..a593b5a8023 --- /dev/null +++ b/svgs/gesture_control.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/google_kids_space.svg b/svgs/google_kids_space.svg new file mode 100644 index 00000000000..0bfd4e97141 --- /dev/null +++ b/svgs/google_kids_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gosuslugi_auto.svg b/svgs/gosuslugi_auto.svg new file mode 100644 index 00000000000..23462c51004 --- /dev/null +++ b/svgs/gosuslugi_auto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gosuslugi_decide_together.svg b/svgs/gosuslugi_decide_together.svg new file mode 100644 index 00000000000..6669b2886ba --- /dev/null +++ b/svgs/gosuslugi_decide_together.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/height_increase_workout.svg b/svgs/height_increase_workout.svg new file mode 100644 index 00000000000..a9804126a23 --- /dev/null +++ b/svgs/height_increase_workout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/heyconad.svg b/svgs/heyconad.svg new file mode 100644 index 00000000000..bce5939148e --- /dev/null +++ b/svgs/heyconad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hiddify.svg b/svgs/hiddify.svg new file mode 100644 index 00000000000..39566b71645 --- /dev/null +++ b/svgs/hiddify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honor_health.svg b/svgs/honor_health.svg new file mode 100644 index 00000000000..7b48713bf18 --- /dev/null +++ b/svgs/honor_health.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iheart.svg b/svgs/iheart.svg new file mode 100644 index 00000000000..ac13ed22153 --- /dev/null +++ b/svgs/iheart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/infinite_japanese.svg b/svgs/infinite_japanese.svg new file mode 100644 index 00000000000..40f069c2c5b --- /dev/null +++ b/svgs/infinite_japanese.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/invoice_maker_and_estimate.svg b/svgs/invoice_maker_and_estimate.svg new file mode 100644 index 00000000000..2d1b98f8fa0 --- /dev/null +++ b/svgs/invoice_maker_and_estimate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/japan_vpn.svg b/svgs/japan_vpn.svg new file mode 100644 index 00000000000..dab5f6b91f5 --- /dev/null +++ b/svgs/japan_vpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jbl_partybox.svg b/svgs/jbl_partybox.svg new file mode 100644 index 00000000000..8f6b298f363 --- /dev/null +++ b/svgs/jbl_partybox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jmo.svg b/svgs/jmo.svg new file mode 100644 index 00000000000..b28c25ee449 --- /dev/null +++ b/svgs/jmo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/keepsafe.svg b/svgs/keepsafe.svg new file mode 100644 index 00000000000..e152b8d2ab3 --- /dev/null +++ b/svgs/keepsafe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kroger.svg b/svgs/kroger.svg new file mode 100644 index 00000000000..ad145e7f4f7 --- /dev/null +++ b/svgs/kroger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lenovo.svg b/svgs/lenovo.svg new file mode 100644 index 00000000000..034763acba5 --- /dev/null +++ b/svgs/lenovo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lifepoints.svg b/svgs/lifepoints.svg new file mode 100644 index 00000000000..dda339d4933 --- /dev/null +++ b/svgs/lifepoints.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lukoil.svg b/svgs/lukoil.svg new file mode 100644 index 00000000000..b4d6fd1defa --- /dev/null +++ b/svgs/lukoil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/m10.svg b/svgs/m10.svg new file mode 100644 index 00000000000..a311c4640ef --- /dev/null +++ b/svgs/m10.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/macrofactor.svg b/svgs/macrofactor.svg new file mode 100644 index 00000000000..41cf74b214c --- /dev/null +++ b/svgs/macrofactor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mb_bank.svg b/svgs/mb_bank.svg new file mode 100644 index 00000000000..32f61d22149 --- /dev/null +++ b/svgs/mb_bank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meroshare.svg b/svgs/meroshare.svg new file mode 100644 index 00000000000..a139c4573ae --- /dev/null +++ b/svgs/meroshare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mi_pay.svg b/svgs/mi_pay.svg new file mode 100644 index 00000000000..fbeddda3d60 --- /dev/null +++ b/svgs/mi_pay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mojeikp.svg b/svgs/mojeikp.svg new file mode 100644 index 00000000000..695f0452962 --- /dev/null +++ b/svgs/mojeikp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/network_speed_speed_meter.svg b/svgs/network_speed_speed_meter.svg new file mode 100644 index 00000000000..a3265054bd6 --- /dev/null +++ b/svgs/network_speed_speed_meter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/node_video.svg b/svgs/node_video.svg new file mode 100644 index 00000000000..c7bc74908ba --- /dev/null +++ b/svgs/node_video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oken.svg b/svgs/oken.svg new file mode 100644 index 00000000000..a59568068e6 --- /dev/null +++ b/svgs/oken.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/onet_poczta.svg b/svgs/onet_poczta.svg new file mode 100644 index 00000000000..a837b663806 --- /dev/null +++ b/svgs/onet_poczta.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/panels.svg b/svgs/panels.svg new file mode 100644 index 00000000000..5cdca0c3795 --- /dev/null +++ b/svgs/panels.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/park_plus_rto.svg b/svgs/park_plus_rto.svg new file mode 100644 index 00000000000..d0aa1bf238b --- /dev/null +++ b/svgs/park_plus_rto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/really_bad_chess.svg b/svgs/really_bad_chess.svg new file mode 100644 index 00000000000..518c8e0437d --- /dev/null +++ b/svgs/really_bad_chess.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/schoolfox.svg b/svgs/schoolfox.svg new file mode 100644 index 00000000000..3cb63fcf372 --- /dev/null +++ b/svgs/schoolfox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/screener.svg b/svgs/screener.svg new file mode 100644 index 00000000000..45d06e5fcf0 --- /dev/null +++ b/svgs/screener.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shadow_fight_2.svg b/svgs/shadow_fight_2.svg new file mode 100644 index 00000000000..76584932366 --- /dev/null +++ b/svgs/shadow_fight_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shuffles_by_pinterest.svg b/svgs/shuffles_by_pinterest.svg new file mode 100644 index 00000000000..36729dbbd45 --- /dev/null +++ b/svgs/shuffles_by_pinterest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/snipd.svg b/svgs/snipd.svg new file mode 100644 index 00000000000..bd56f8678b6 --- /dev/null +++ b/svgs/snipd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/softlist.svg b/svgs/softlist.svg new file mode 100644 index 00000000000..c507168cb8f --- /dev/null +++ b/svgs/softlist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/southwest_airlines.svg b/svgs/southwest_airlines.svg new file mode 100644 index 00000000000..974c68196f9 --- /dev/null +++ b/svgs/southwest_airlines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/the_guardian.svg b/svgs/the_guardian.svg new file mode 100644 index 00000000000..7757af2c072 --- /dev/null +++ b/svgs/the_guardian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tier.svg b/svgs/tier.svg new file mode 100644 index 00000000000..4eeaa071194 --- /dev/null +++ b/svgs/tier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/trip_com.svg b/svgs/trip_com.svg new file mode 100644 index 00000000000..dec340ed834 --- /dev/null +++ b/svgs/trip_com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/twisty_timer.svg b/svgs/twisty_timer.svg new file mode 100644 index 00000000000..976dd9b763f --- /dev/null +++ b/svgs/twisty_timer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/upside.svg b/svgs/upside.svg new file mode 100644 index 00000000000..d41ee6ca4cd --- /dev/null +++ b/svgs/upside.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/video_downloader_for_pinterest.svg b/svgs/video_downloader_for_pinterest.svg new file mode 100644 index 00000000000..02d34c932c7 --- /dev/null +++ b/svgs/video_downloader_for_pinterest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/video_to_wallpaper.svg b/svgs/video_to_wallpaper.svg new file mode 100644 index 00000000000..9965719f1a6 --- /dev/null +++ b/svgs/video_to_wallpaper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vipps.svg b/svgs/vipps.svg new file mode 100644 index 00000000000..c97df3ecab2 --- /dev/null +++ b/svgs/vipps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vk_mail.svg b/svgs/vk_mail.svg new file mode 100644 index 00000000000..b572f598590 --- /dev/null +++ b/svgs/vk_mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vk_music.svg b/svgs/vk_music.svg new file mode 100644 index 00000000000..9465edcf375 --- /dev/null +++ b/svgs/vk_music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/voi.svg b/svgs/voi.svg new file mode 100644 index 00000000000..4d70347f5a6 --- /dev/null +++ b/svgs/voi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vpn_proxy_master.svg b/svgs/vpn_proxy_master.svg new file mode 100644 index 00000000000..89afaba0680 --- /dev/null +++ b/svgs/vpn_proxy_master.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wallzen.svg b/svgs/wallzen.svg new file mode 100644 index 00000000000..e025a850875 --- /dev/null +++ b/svgs/wallzen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/web_de.svg b/svgs/web_de.svg new file mode 100644 index 00000000000..70144786218 --- /dev/null +++ b/svgs/web_de.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wetransfer.svg b/svgs/wetransfer.svg new file mode 100644 index 00000000000..e7457823c28 --- /dev/null +++ b/svgs/wetransfer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/weward.svg b/svgs/weward.svg new file mode 100644 index 00000000000..22af0fbe40a --- /dev/null +++ b/svgs/weward.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/whats_up.svg b/svgs/whats_up.svg new file mode 100644 index 00000000000..389aea5105a --- /dev/null +++ b/svgs/whats_up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wibuku.svg b/svgs/wibuku.svg new file mode 100644 index 00000000000..566ff34fadb --- /dev/null +++ b/svgs/wibuku.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wifi_ar.svg b/svgs/wifi_ar.svg new file mode 100644 index 00000000000..54ef0765821 --- /dev/null +++ b/svgs/wifi_ar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wled.svg b/svgs/wled.svg new file mode 100644 index 00000000000..e4cb51c9267 --- /dev/null +++ b/svgs/wled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zelle.svg b/svgs/zelle.svg new file mode 100644 index 00000000000..c45642ca532 --- /dev/null +++ b/svgs/zelle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zoom_earth.svg b/svgs/zoom_earth.svg new file mode 100644 index 00000000000..55c83e5ae82 --- /dev/null +++ b/svgs/zoom_earth.svg @@ -0,0 +1 @@ + \ No newline at end of file From 61705bf5d08be1752aabf14a94cad51bcbc21fcd Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:46:48 +0300 Subject: [PATCH 418/527] +17 links (#2410) * +17 links * Fix --- app/assets/appfilter.xml | 25 +++++++++++++++++++++---- svgs/seriesguide.svg | 2 +- svgs/shopee.svg | 2 +- svgs/skype.svg | 2 +- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 36c5edc8192..f2c15dc11cc 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -405,6 +405,8 @@ + + @@ -888,6 +890,7 @@ + @@ -1239,6 +1242,7 @@ + @@ -3333,6 +3337,7 @@ + @@ -3460,6 +3465,7 @@ + @@ -6020,6 +6026,7 @@ + @@ -6775,6 +6782,7 @@ + @@ -7632,7 +7640,7 @@ - + @@ -8377,7 +8385,7 @@ - + @@ -8781,7 +8789,7 @@ - + @@ -9587,6 +9595,8 @@ + + @@ -9594,6 +9604,7 @@ + @@ -11346,6 +11357,7 @@ + @@ -12021,7 +12033,8 @@ - + + @@ -12040,6 +12053,7 @@ + @@ -12088,10 +12102,12 @@ + + @@ -13132,6 +13148,7 @@ + diff --git a/svgs/seriesguide.svg b/svgs/seriesguide.svg index 6ad5f38bcd8..a021a3de779 100644 --- a/svgs/seriesguide.svg +++ b/svgs/seriesguide.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/shopee.svg b/svgs/shopee.svg index 87e15b6a664..4af87a00f6f 100644 --- a/svgs/shopee.svg +++ b/svgs/shopee.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/skype.svg b/svgs/skype.svg index 3306c319357..85f2fceb3ec 100644 --- a/svgs/skype.svg +++ b/svgs/skype.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 8f065a8e077eccc1a85e70f9cee4f84892ffae9a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:01:50 +0800 Subject: [PATCH 419/527] Update dependency androidx.activity:activity-compose to v1.9.3 (#2411) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cbee5cf349c..c6d504e9d64 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,7 +142,7 @@ licensee { dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") - implementation("androidx.activity:activity-compose:1.9.2") + implementation("androidx.activity:activity-compose:1.9.3") implementation(platform("androidx.compose:compose-bom:2024.09.03")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") From 075e10edf8aa643860bd326d7616f76e8e24447d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:01:58 +0800 Subject: [PATCH 420/527] Update dependency androidx.navigation:navigation-compose to v2.8.3 (#2412) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c6d504e9d64..06c875eb4fe 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.2") + implementation("androidx.navigation:navigation-compose:2.8.3") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") From 6d61e7f7be77f3cc620495becc588dc972d67682 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:03:03 +0800 Subject: [PATCH 421/527] Update dependency androidx.compose:compose-bom to v2024.10.00 (#2413) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 06c875eb4fe..401f7ce08c5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.3") - implementation(platform("androidx.compose:compose-bom:2024.09.03")) + implementation(platform("androidx.compose:compose-bom:2024.10.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From d126cb719b82a0ccebf7fe5295019356ec3df70b Mon Sep 17 00:00:00 2001 From: Aditya <111834313+Aditya137x@users.noreply.github.com> Date: Fri, 18 Oct 2024 05:21:46 +0530 Subject: [PATCH 422/527] +1 icon (#2414) * Add flexify.svg * Update appfilter.xml to map flexify.svg * Update appfilter.xml * Minor fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/flexify.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/flexify.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index f2c15dc11cc..0c1e6c1f109 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -3694,6 +3694,7 @@ + diff --git a/svgs/flexify.svg b/svgs/flexify.svg new file mode 100644 index 00000000000..d6a1dfdeebd --- /dev/null +++ b/svgs/flexify.svg @@ -0,0 +1 @@ + From 2fdac3d05969cb0835f4d33d78757998c08fe781 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 20 Oct 2024 13:25:02 +0300 Subject: [PATCH 423/527] +21 links (#2418) --- app/assets/appfilter.xml | 21 +++++++++++++++++++++ svgs/musescore.svg | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 0c1e6c1f109..23f1fc61170 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -55,6 +55,7 @@ + @@ -1596,6 +1597,7 @@ + @@ -2072,6 +2074,7 @@ + @@ -2276,6 +2279,7 @@ + @@ -2923,6 +2927,7 @@ + @@ -4147,10 +4152,12 @@ + + @@ -4757,6 +4764,7 @@ + @@ -5023,6 +5031,7 @@ + @@ -5600,6 +5609,7 @@ + @@ -5982,6 +5992,7 @@ + @@ -6642,6 +6653,7 @@ + @@ -6843,6 +6855,7 @@ + @@ -7220,6 +7233,7 @@ + @@ -7698,6 +7712,7 @@ + @@ -10553,6 +10568,7 @@ + @@ -11345,6 +11361,7 @@ + @@ -12725,6 +12742,8 @@ + + @@ -13098,10 +13117,12 @@ + + diff --git a/svgs/musescore.svg b/svgs/musescore.svg index b1e51c827e6..f5446babb96 100644 --- a/svgs/musescore.svg +++ b/svgs/musescore.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From ba02a471acd1f45636395f7bc1960373ce18ddb1 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 23 Oct 2024 14:48:04 +0300 Subject: [PATCH 424/527] +12 links (#2419) --- app/assets/appfilter.xml | 20 ++++++++++++++++---- svgs/asd_player.svg | 1 - svgs/xplayer.svg | 1 - 3 files changed, 16 insertions(+), 6 deletions(-) delete mode 100644 svgs/asd_player.svg delete mode 100644 svgs/xplayer.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 23f1fc61170..1d73f8b2b80 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -202,6 +202,7 @@ + @@ -754,8 +755,8 @@ - - + + @@ -1494,6 +1495,7 @@ + @@ -2860,6 +2862,7 @@ + @@ -4705,6 +4708,7 @@ + @@ -5287,6 +5291,7 @@ + @@ -6980,6 +6985,7 @@ + @@ -7712,6 +7718,8 @@ + + @@ -8303,6 +8311,7 @@ + @@ -11300,6 +11309,7 @@ + @@ -12736,12 +12746,13 @@ - - + + + @@ -13032,6 +13043,7 @@ + diff --git a/svgs/asd_player.svg b/svgs/asd_player.svg deleted file mode 100644 index 8efdf8efb81..00000000000 --- a/svgs/asd_player.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/xplayer.svg b/svgs/xplayer.svg deleted file mode 100644 index 3eb5026c48a..00000000000 --- a/svgs/xplayer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 14fb25ce0caa4a503a40d6d24215e769bca9c037 Mon Sep 17 00:00:00 2001 From: flame-0 <40175769+flame-0@users.noreply.github.com> Date: Thu, 24 Oct 2024 04:49:13 +0800 Subject: [PATCH 425/527] Link Revenge (#2420) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1d73f8b2b80..9a42e938e6d 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4347,6 +4347,7 @@ + From 7f93b3a492956bd230208322ce29ab0350fc5aa3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 14:11:12 +0800 Subject: [PATCH 426/527] Update plugin com.google.devtools.ksp to v2.0.21-1.0.26 (#2421) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ef886193c11..10e55492d78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.21" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false - id("com.google.devtools.ksp") version "2.0.21-1.0.25" apply false + id("com.google.devtools.ksp") version "2.0.21-1.0.26" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From 6077a9d8c2c08571a99195143053ceb0dd014147 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 27 Oct 2024 13:43:39 +0300 Subject: [PATCH 427/527] +29 links (#2424) --- app/assets/appfilter.xml | 33 ++++++++++++++++++++++-- svgs/{mr_gun_ketchapp.svg => mr_gun.svg} | 0 2 files changed, 31 insertions(+), 2 deletions(-) rename svgs/{mr_gun_ketchapp.svg => mr_gun.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9a42e938e6d..131b19257bf 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -557,6 +557,7 @@ + @@ -892,6 +893,7 @@ + @@ -1111,6 +1113,7 @@ + @@ -1258,6 +1261,7 @@ + @@ -1394,9 +1398,11 @@ + + @@ -1451,6 +1457,7 @@ + @@ -2802,6 +2809,7 @@ + @@ -3467,6 +3475,7 @@ + @@ -3704,6 +3713,7 @@ + @@ -4053,6 +4063,7 @@ + @@ -4065,6 +4076,7 @@ + @@ -4165,6 +4177,7 @@ + @@ -4347,7 +4360,6 @@ - @@ -4504,6 +4516,7 @@ + @@ -5015,6 +5028,7 @@ + @@ -5217,6 +5231,7 @@ + @@ -5751,6 +5766,7 @@ + @@ -6088,6 +6104,7 @@ + @@ -6680,6 +6697,7 @@ + @@ -6690,7 +6708,8 @@ - + + @@ -7933,6 +7952,7 @@ + @@ -7952,6 +7972,7 @@ + @@ -9092,6 +9113,7 @@ + @@ -9154,6 +9176,7 @@ + @@ -9478,6 +9501,7 @@ + @@ -9692,6 +9716,7 @@ + @@ -12235,6 +12260,7 @@ + @@ -12904,6 +12930,7 @@ + @@ -12980,6 +13007,7 @@ + @@ -13183,6 +13211,7 @@ + diff --git a/svgs/mr_gun_ketchapp.svg b/svgs/mr_gun.svg similarity index 100% rename from svgs/mr_gun_ketchapp.svg rename to svgs/mr_gun.svg From 0173273692465f522d27f5305102ae38e2951a27 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 28 Oct 2024 02:14:30 +0300 Subject: [PATCH 428/527] Various changes to the Lawnicons docs, +2 links (#2425) * Update repo_cover.png * Update repo_cover.png * Update repo_cover.png * Update README.md * Update README.md * Update CONTRIBUTING.md * Added 2 links to start the workflow --- CONTRIBUTING.md | 5 ++--- README.md | 12 +++++------- app/assets/appfilter.xml | 2 ++ docs/images/repo_cover.png | Bin 652282 -> 455327 bytes 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index baf8ac3ee5b..cff2b6dd986 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,14 +6,13 @@ Before you start, please [fork](https://github.com/LawnchairLauncher/lawnicons/f ## Contributing icons For beginners, it is faster to create icons [in Figma](https://www.figma.com/), although [Inkscape](https://inkscape.org/) and similar software will do. A file explorer, a text editor, and a terminal window will also be useful. -For additional information on designing icons and samples, see [the Lawnicons Figma repository](https://www.figma.com/community/file/1227718471680779613) made by [Grabstertv](https://github.com/Grabstertv). - Need help? [Join Lawnchair on Discord](https://discord.com/invite/3x8qNWxgGZ). ### TL;DR on icon design > [!NOTE] -> Upload no more than 10 icons at a time, because reviewers only have time for small pull requests. +> Upload no more than 10 icons at a time. +> For icon samples, see [the Lawnicons Figma repository](https://www.figma.com/community/file/1227718471680779613) made by [Grabstertv](https://github.com/Grabstertv). The canvas is `192×192px`. The content area for most icons is `160×160px`, meaning the long side of an icon should be `160px`. Square icons should be `154×154px`. No fill, the stroke width is `12px`. All shapes should be black `#000` with rounded ends and joins. Round 90° angles by `6-32px`. Avoid noticable black spots, close distances between strokes, and drastic changes in stroke widths. Simplify details, but don't lose recognizability. Provide original and localized names, so the icons can be found. diff --git a/README.md b/README.md index 3e5c33613cd..e622d77193b 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@

-Lawnicons repository cover +Lawnicons repository cover

-
- -
+
GitHub License @@ -48,11 +46,11 @@ Due to different package names, Lawnicons on the Play Store will install as a di **Development builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) • [GitHub](https://github.com/LawnchairLauncher/lawnicons/releases/tag/nightly) ## Contributing -Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. +Please see our guidelines for information on contributing icons or code, it will save you time. We put the quality of icons first, so the requirements are relatively strict. Let us know if the guidelines are unclear somewhere so that we can clarify them. -**Contribute:** [Popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103) • [Development tasks](https://github.com/LawnchairLauncher/lawnicons/issues) +[Lawnicons guidelines](CONTRIBUTING.md) • [Icon samples in Figma](https://www.figma.com/community/file/1227718471680779613) • [Popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey=&gid=609680142#gid=609680142) • [Development issues](https://github.com/LawnchairLauncher/lawnicons/issues) ## Requesting icons `Open Lawnicons 2.10+ → Tap "Request icons" → Submit the response` -You can also use [the icon request form](https://forms.gle/xt7sJhgWEasuo9TR9). If a previously added icon has a design change, create [an issue](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml). +[Icon request form](https://forms.gle/xt7sJhgWEasuo9TR9) • [Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 131b19257bf..7b84e0e1b70 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -7652,6 +7652,7 @@ + @@ -11506,6 +11507,7 @@ + diff --git a/docs/images/repo_cover.png b/docs/images/repo_cover.png index 42ad4c4d4eca3cff18fd0ebbde47f81208a34438..72fb706f92c08d29e3fb466d81259f98ca0701a5 100644 GIT binary patch literal 455327 zcmeEt_g7O})Gc1SfXGEasg|oK(z{dv!A6tbks7K2DWQWRpme3z2m%oiLazx?dJjlX zAQ3{35JG^^65dho{oeZr-f!O-gTWw!?6US+bFMwtI&bxK9x$KdI>*4k!2IapeSHRo zQyUBnC$6121$+`>*0c!xI_vq+%$tFMk?q&dF@~(1OTdT6y!9WbF_aJTtN?$U0I6!L zGB8voG9KEVWH_}c_2|B;q5rX;wA0}{UA{|+sJzU9V|V}lhvC$_*Y}gIY3TPe+_-tt z;ze4>&W!G0RnGjOx14<5T6GBM2))yD#Ha&;dh7{3kvA~Apz*fwAN{KP@7`Zh4L`y9 zCeF$|Yj2F0DSJ?-rzF|@hA~+AS#?lzX=!Pjj|mctG`R*W=YOC7wZQ*c;QyZmmUuG1 zBIfh7v&S7$dkcE>U7qfG2b39G=!<~buH87>_oS^UPye>f`aqSt9(5R1I_3)5ZAR0L z)wn{=2mTYtr`8m_=>jV*?k(AL*ycR}EcA!v)zSR-M0I2d$EsdF#>k`iN#PhfA#2e1 zbzs_HLKLmbN0rKQzz8rp0yqML$4$*E?kB2S<8g&9yT=j1jXR zMK7r}wY_L8oU_Q#Dm1t-|Ldzie4f3sQTt)w1r|CJc)D$~yaHhZt2hjPNbla=-BnT9 z_*{zdm|_3dr44;)d0M;-@Ve_0FIS$`H<>;1)w4ArpQ zHymKn{S?Za)pZ^x1BWM(eOd#AU?)jFs1Ea0UBCf-10;k<%p+{J*yO8I0_wTjZ2U*N zT{ai~EQKLM`jh0@^~R;V+2P^g*%yt$1{W$qr7R1#ZMg(f`&J!I1hbt@#Eh+kK4dO) z?05{)syJ64zdIwxEh^V81B?;w9WfQ-LBh_%%|7f-#s_sN;7{ z0UYphuw9Og;_m8?kv`dCxU4IB;nY?1&hY){)_s=OH02A6Hi#qo0rbE9-#T$jclD}7 zUq}cTKJJo-;a3K(O}Az=Ox&>Qi$`LW4gI$ z1j7af1{O9q2Sw>kBoyF!O2i)@UQ9Hx>vL7C44(7Sn)7^sV{iz#$jWUklsIxZuX>CO zGN^0J>snDhYV<@nKCeIOX}FoTRD!_KP3e#qO>#5n{gqy-{|__hjJSu{T?6QLa;~nx zL4OyOp4pwb@ddhmkRhnv++^<>Y|oF(cXprmKb+S|3&GL-LvcNK&6oShWb&dzUSNy0 zi%WmD?&fFE_N-VKl+W=yku*J=jf6kd@h&4TdPJH~Q^$Cn686&l6QR{b*2ZoyWlvEHBVi>p!zT9Sl4M z29ONN{%+#LlQz-QrC)QKbmEyC#S5C7r$$Vd1SeMt=W@9OV#JQWW#M!{#todw?^`rl zQd+fpH`r@$D-0Ya*kU|5_?8y7yh~jD@%4Y6hFW_qUqgZ44L_c+c=H>wu*i!7KQ0{9sE|-0Xhy?^bf`bH@I{S!K(jUVOHsPd%H} zn|)ryb@9dV`|1q_A767_+27yK!uf^9v35k~jP@XwM|Yo{I%6U8F@hf?vd-*r&5}oC zBs=`){ z0K1QAXW!Ggipm3?wva>V!H2YsfQ~*5;vqh?S+qG7p8$Ofa+YrvEeVbt?10P8j@vZv zVpf}Y75uvMl!D9?(g8Z~R>z|lIfRm=-NxsA6a6g?XC8a#hV&io>{>jVgnU?THrhf` z_PP#gWA!eOxWP|SrH#%XF;fBxTcXLbD&`y@NolpSe!kQh4!x zdHW80D7IM5IGANXU7O739{S~OsfGCiiMC$Q_Cp2mod_Tik$3vcH$UR9iiW%*I^;M5 zUao{0{I)t8PYJm@?-gcB9n=lm9})dc7y!55Z8y9914-Y8qptL~R2!Ft+Bk2)SqvV< zpV^c1WB&Mx>(c(gfwz6cwzbaXNG%7+%I6Lag;Q>mYWAJ2*$YKPyNK79AI{;11h4Jq z^_z<@8Wk?=6zG4Z`nYdYZ64USYYNy5jw)A*amHHIiC9DbUa8{v%jTUkJ3KMo!Fo3) z@!j8Zb898uHHx&mt2Bz{r<8E#g~w;XJGz7aU`hn#KF#5 zGVOpW0JmAS?&{KBV+#uHMB5xfhWAsBHKrb$JQ4{BCD&42gpT~JSW7@<-3)vrwxc!b zTMeRNruk)D{I!oEu6K<%!oG}dQ--+k+NwI^Kw@3vN_3|X+C4C=W^IY#{qMi>=` z?1#`Q35qo8piTB@Z45jhM@Bip&M_WCZqVP7(tdV=6Br*ibyhM@B|9P|~3Ek^A{+EN~PRo^^Km@Hf!a$qL!`bS0 zjzAF()cqlxsF|o88_7pmOe~3;-TX3}kW?`jn_-RQ>|o%%porMZ4=*wvebhWXfJYpR zCgmq{Nt`-;n&KOf$z}i6-#%7b`OwilXBbs>=!N!zipYHESjz0JHhwl8f06f+OhXUU1C)SmRU5+JvC2uDy0^S6s$2JS-SFCjpBaD=Rk$=A&oa zK3=q7i#F(;%>4V7!9@GuSY5|8r`{hVQe@gUMW(|_VVf`}$$K1D*`tlcOcS^aZpLzQ zi1uYI0!Y-CU$JCKIy5h&@sI>tu4f|=D=Ae$vlNjgr`rU$EiM0mPN3mR=h7_Ba8pXkS(#Kj_(l@_V7cy+RLT%t*7EvG%Q%R2`g ztOZ5cfY6cDoP?9oHfg)Emtkb=+|t+HpVU|daN!#`OeHK#L<9Y3bt(ZZ>WebK{g9_F zEmPi7s1t2q;ymvKo5X8Zk;}U!L`O%H;9HOQ&A+G78hX8=zZg>|R8(3NHArShin~%q zoV8!+#^nA^n88c5{FfDn{8``T;<3O|Uy175<@IK#rP#wjrl-o%=q#QogE zEGcqK2g@h@<+N1zS4UXz5PV2n;^{xw4Uz`MheLi{7DkJUeR7&fOq$`+wnk~u-J^QS z-`*qzO`n_IorYVQu-qBt0&-u$`XHx&d6>Db)MzH?yoxQ(aHtuQ?6=3ox{-jmvv-`_wxG4W(yDY8? zDU;8hy~^S`=cC{DdV6>K6t`8Kr@B+pB|g5v4*6U|MD@1Q2eKwV$rhw$g&0h5$rGsz z=cLBS+Nr;n9cJhejKK~6|sR5w^yKk5noI)3vF8cpJcf(md2}l!+Y&0tRLE8^{!AL?x&fSQX4tw`gR;-^SSeq z*F~tVW#{O@b&Yod?>(M`Jc-$uP~28{GqQK6k9s#s$$QLg;1fox8*RR`ouEI5*FF4F zv|jzUO@wL2ddeuhIwT#YICJ=-*BigNg|=I@vg<3s2d)0q#W!Wrr9CY|qBq3e4MTN76nz?DTEhz5E6q3rD$z z?0tQCJfOj&jN2kws?6Ksp|*_-rFZ1vCBgZXX*KWS&@PS^oZ18tKVBm80SAGeS;6tX zMzCC;|3e~Qr@9dw8>2)Ksktygp_c18-RG=8$nY_WPNV`as59=kxD$_X^B?VyLaQ^;O3<8v_bxl%T4TSOG*NVNtd$D=-84c6GiA1dyRQS?!ut;vgk`hi}?CFOwnqXkd z90WWp=~{S#;(xRoGE31;9RXZwiQ)laA>h4BK{tE{3`ohlp5F%Ep?o~ZwV^zH0+&) zNo(pP2Oj-2Cyefh81QFR$GlP;GbBB`i9n-sw6x(=$cjbAzP$bP`+Y+T5Ix&T( z2NvDL+7Q2E&gyibYX?0!G_BD#=>w9wN5){KG6OfI8N{YOK5W23LxFM4MJ?}b|VW&&n{>H-# z4!H1byUodg>vJzIld0E5yjKq{rC$%#^su@kE*M&Fr;nFL*#svVtOW1bUA-MDu(xRz zXk*Q`lhR<2&bjVxb9C^~x6{=K^hAk34kcGFp*!-P9yNb&EUMn#$=z=Kz&5=3q7;&= zSv++9x%`UX_Tb2V-MFvEp(6XdkOR^;hhl%abK8&Y&}SVU^pS^V+a&TuA#8hfjO97D zZtZ{Wg*O}|SOR8>wefsHS5VyN!d}wLm_xR!h;FYJo)TV0R>W0Wx4P;LJxcfJ7tO6P zA>oig-p3<%&L|%pQoPB7ffo++9ytY9dTDKC;IcK|GP64UGi;wFt`~o4(F>Fp5W_Ni zIq~USP;vIK=0xVVj#%s4@Qd8U{_h;D+$WK&J>Vw+EPGY85^6Ppi92=%i7Dt3b|9%)V*oJT3>Ghdr zO2Ugkr8FTkiR=7GW%DrES>4Ec%{pYsPjgVea)YOO#0_&WWP-exL-xPQE+I*@<_%$mWzG#$}?Mu zv4#(`;=(FyT2jc%&o&9NOcF8MOm#lE@VQ7fw)HO$s$;}BbR=(VnDIG16u0cwn4laM*tzAi+^J0(Pc!iu3K1$#pNS+KE^lIQz~NwWydcbwMy)B5{|(lf49as zJ2Gge-cf$OdKk-8z1BNReH)Lc?rA$(OE>6L0l(I|Y+o(3R%=f@^opVDFt3^{MScz86JL^@D8oMj=z|9dr|WCdLRfwUbdPPI4Np?$lsVepNs z;@+s--(1@v$Bzft+aTBb{qy|^Z)CPSEYCBhuEdK9E|+u{5xkct{nFCU`rgFtiEDj{ zuD$Fa6wkT;bJu!E648|#zmVU_oJ+)Gs!iL@nN41`0$q*Ps*(H{C!3e??&kS-4vyp~ zuIshuf3csAh(>NpaIQEX2o0y$6EpQb`I_bmITVQi85VnIFt0JWtG>z673UgrUE@~C zc^TubG5N;9TKDl|y2OUS^X5)vvDrzW1*2eG7Ou0x7_2z)Xsx4yhI+k#Y5|1o`m=v1 z_N$_!^%?(c8ILBxH@+w~a}s0~AHYHw`oVuDo)#I)v0w{{L9CC;eaM$EDl}l#<)%6v z4sAE-FrVbAdJuV!ZDln4LbRd;E1LQ`K|`6}e1zIi=Naw#Y{-7K&`~n+o`td3aNxCH z^&N(shc)Nju4Rtr`%WQd4Ihr|!vl6Q<(4AlJ7Pm(%BZ+~WshD9{p&WSR@0sEai1pW zIJ8!ai&=ewxRWBAS1hfnM;yjX4HN}j5jt81RN|Iff40CtNs_ewiUqV+=>`22mFSL% zsFDKagLTa}ydFcP`B$Z*vfnz&FGlV3Z_i3>gQYn>z55nO`&`+2LV?k$&|CV7DcXj+ z?;nosVE=!xT_+TU+n$IbQ=*yl39rsV0_p$kt>9Go%Z0!y3XB9WX|l(keuj%I*}@P&h$|_*e#wV0cG-AUB&+@`;<6Ik-{828Cu#GY zC)h9-`OP12uP^$-;sc}^G6bdva}~VBbt%I=LDPE`nRU2MF>$y8>E)7!a&G^pe7l*Q zHS9tpr*${;Il<8>Q^;>~f#f-?)QC+SPB^sz3nZrVsZJzzi2Qmg;3-3z`k~uXw`ess`Z{%3u<@I^RRpk>}45EHZ-%!y#xT z>Q-E0BL4lDD~jKIncLTjgNsD_=3jA33RlYtzAD5_>?pl@3$lhumBsl^wM$E%aVA+? zjq9m4p)PX>#h(qd{$lVkvP@D`NpyaN4meoQ;re9db!y#+qayLwOh4S!h*+*hwGJuv zDW55|DeUfGiB}dfDV>WOy*Yl1-8^x8&@T%WNY9kb<26B&4fSfy@U#qisC|fpLG0DQ zjM&hBcnHe(|Gj}`h^8zs0ZN%0p39s-IxoBzyG@!ly%2Z2FHIC3M9cDr5ru<`WQJyaxo@gWvYscZM1Ja*5V z-VOcYYGYHc_d(u8p0hkub<)qm6vyRn`Fkh^hQ(u`l+(Yi&4M!vn-;~cwMV>MQ;iL# zu1t0)#WxVwOK-SWVq%FyBIP|kxwTmZ;XZq*a_?exsY>A?-Tah>YVn`_Y-q)e z;7{7jZ}+CX(bDQ(zgaJb=xh}*kR=^Z$h77OBFtw#TT&Qs;l*_hReNTHKF1DlgBN;J z0~GF^ygO5z7l4r&^4j+aam`WkIPGkBexNO~l11ZF=mTd?1gYg<{o^&3KZ^!Qf#Oc* z#XwXaHVa50kL0BKIhW-z-V!t&9)h!LSg>4;A(tgqHNd4y8WgH6E58MC=)ws5lKSLw|^eA?{5>K0YEA9 z^MAY_^`i5PzuQDPve;6PX5?%Lg@s`+abpO^OE+=1>%PQ$G0)h~#_9`04X99XHEJ2?;#Rz7suHp2aT`efeA~B$Q=D#>|Zp z_;~v|s*WG9bT1EoY^=x3sz2Ba7HA6{D_Iqvy`g)&KjVn{gXM_lcskL>ivO z8*(j;j$qmDHy*ppl$;=3^(;R@Tw;`o^>;}H#KCD5Je*VK+dDd+@^e6=SzWb8K`_WV z^e#1+TdCkL+-t2k-QMw~`W_R$Aj`af#miH*-t|0+7w@-{&)#Ks=C%B24^+hv3HthTnyiRz<1f+o?`;oNJM$VRPUv_BTGA}AOz{ZL*DEY) z7~0hy*uT9EKbQzLfxnA8VZLSNG-8E+fUyAB2X0yW`L2_u^+N%i%SS79b8{ARZJ6~7 z!PSx^$E%V91QGV)2g8jEZe7E^g3~UfrR1yA3#Z<^coY~E=$%;i@}=rsl`}pjHX*6g zK9u+uUSe~Gf{wSNAEDb4@xK!-F;4gXhRTn&%Hr=P-a*!;Z&)aMp%k}$z4;Cb9qcc_gmt@9youmNv%>;m%Rb8kXUmZnwK0nTV`5$4b1Pnb(Vc=Q03?_ z7|D5-J(nmwX;KsAR7SCnv{1|(L#R|S~5j9^Mb|cJmM1}h!6gm>)^N|6*$f)sQT(1C7 zV`P24hGCqKxdTs1y_440v`w5B1_x9NS+x8qw(7`QK!dFLf;X=2ZKm@j1LeQokBN$c zqKJ(Geueed`E!`>MNhKTviYv_K{1dz3VeTLjP-+NvYa`o^YKX1MdG*8yg*En%CI%W)zp-=y{Vbh zC`l~`1e38B3q~fV@+(b#&ogM)+1a`9#Ag4!BK4003JkV4UbHtDg~6*&O6gNi8-09d}=YK|pD6 z^TE+x;(|AnhESw!RlnHyp?de}@}$2xY+}EO^akdC3>`FAvJ84BRa5rC?nB_5i?g6<(E>_Z;v)7o@HH`G#uOtRYNLO)4t3WZTS6}7a-Hs{=y2m!17LHxI~ik9O)@wS1dzIM#zNAdZ(m_d zCn_=pT8TPc)y>4b=K136=Sd3d4OYg`dh&3PA#d)QN1(Qo~mJbK>W&}J1)=*;iqim}m9jBg)) zCio@H?E)Dm`mZy=GOKdbtRYyB>}nvNj?|>SpkcYjW7{08z3QyF7cm*em4mHLuAj8F zTSqEnIbPI$Q_$Lc*w!UN>-qPE=I%Z>;&@exKOH zEo*(Xe)>i7G|$b2w_T{f>D;-Ra=33;8J?IDQ((L6c@VQ^kMrS@AK4s{+OIzw7AoYv z_V80!>F$InTyVB@qTK3Wcf8C33Uu%OdcsG#Z?kPYN6~g_^NS9%i-ek=wmF@;s>>m4 znL&*ajy_dC7c}7-5ky^|X$*%kdwTd2tD>4KH5=YSIG%U01ga4J;kI}D_t0TmL7O8gl;o=CH2D=rcZFY*$vwDqi6?2BIMI`hnvH*fEw*r&7@P@E z3UP2ST#OkXuEl}vr!((?GIpKv0<7ZmsbIJ16I)dId! zlRMN6amh$4v#4K}1k&f}(EqBc+Bp)(M5SICAr3?sBSuujlA;GklQNSB76U-`xXdoApT3~wDrvg!7lpM{?%1Ge)jq$88Avaf9&MA%PpgDP>0FJ(JOu|rs>!@B6_gk1H|YC(27Ot*SjWA?F2 z5dfV{EQ-Rt$)>WWGgUFW8O-~8j)%D0q`6qp_XBY3KY-ew)YWq6kGl;n2ee}s!E&=) zYqGr~j9ynsuA$_uf6P6q;r;MV!6%!}3;8OUucvTeR+vyhItiq8GfkniefY_%;B_U2 zf6cwv4J=i0E1X| zk9Y}cRm7@0?I+1E_Q0G8R@`gej(ahVn`!l-_UpdXeTC=fzCZlh^__F|=LBj;elLNv zYkb#dxk7P!bfhs!mea6(B(SCKm>ny+!ZRx>a%6Oi3#pF1ASjX*o$GgI6h#Qpx>fUr z*Vf7=V>~fFJ|qx;uIB$p`=Yo0NrYQ@V=)Q_C#9-sX5}p1;iAL%yB*vXL!}lOC(C0?VqO2j{Zi zS`w__!vo5=FNW`FKKvcNx1uHN+pClOGmYL$uYaE*AOfiAd=7^IxEZSJy!APJA~!K; z0x#NU@};{&&doBrK1U`++I2>cRLt*zgwSP2H*Bp8-o93f%m<+(hrSwbJ=U&O8EH*!HN8LC9YL>#QJl5YXf9{&YgZX zUFwKVi0W&%1UM|fIRsTYoIiy5yU7~36BMwvN-|=tFJt}^b)RY4X8kV`BXgvVk;W~+ zA-;`<`ya0i3XhfVAfgSEvYgh<62WDWThqsZY#@^-UUp1?8cvKB5wZlOK8<4wmv3t7^`3eM` zw%I4Tln2JVNl!pj_Edn zCa8VEsXE%pshvZaOyTjjx)h1T=1ZchW)^K2?j~rRv|-Ljh|yP|S76C8pVrmcxq1F2 zbAE+De^6@+{}eKan)2^rbNzwnv;1#Nqxr?a#?<=e~9 zyGO4m-f&j{wxP=RI100%CkE&yFx@c1BA@xsK+MFYb{Y^MXs>K;fLV=eLsqSXJ!Rtgg>SrCGd8+6<%H zT&njKSYy8w_Bg7R&A4?kWh+^a1OWm2oK@1`W_uKG;~A{}#=c zrqm2s%KH(@V+@>g2oux!?%IhK&A_0b`QZmB=WAwNpDKz!iA{*46!Wuy9UT6lejTZc zuDe>}k>7`TCx){@aSDoWyd( zdI7r$9j{2Z%A&Me@pF=_FLnt(c_?!X`2U5uCnE0``qFz~%G;S{iEm-8S#|tE4#l&m zp-NKw$!IbCkK17gR3z@3sWq zvfcdQ(J=qMRGpEEKTUofDdRJCpu^p9JR(ApsT`AR6x8$?@ZeCR_I)V`Io z9YYV1`V4fHZvY*wCj$m*;qOk)X6wy=0~`rgM+n>hHWJALNd#3Zg!rYV-!-&KR@Eu~U4?4HR*?Ecq^`A1%1QS6^kx z-m{=C&gG^8nvRYr*W~-^`r<*se z_|pXS*Cm%5KAjO10`gvU=8IIm)2Nqu<2Dg7uMSGfx+()I9(aGv+Eu79R{_$Kj@rsV ztSO+ZeudLV5;<0+MQ=POtVMAbh_{zz28Q7VwmPte_zTg`jBAvh*<*!GE3T-d)u~FE zN1qF5Ii7zu5EGy`BD;y&eE&pbFBvEx7gI8z|8A)IN5jcqa)i-ivmJ|k+n|VmDP~y& z$ZcJ8`3W();19FcEZcJnS1k zT$%`EEDbgKg0yGGg1OKje558^=2h)1u`6rnQP&rPLipi!bDswnGEOT`Kw?Kc5Ro-jlumf(1E!2mWK%_v4rD9S`gRf-;!Q3`YP8`;Yz~ zsk6Cd~vTdC{ZG*`lLfL#nLqX}7CjH0kY+8>Jl7}*oic&W4I!#X#NID>!N^^IQHyd#yR_{XQyWdT7>uSic z6KcHNncXE@Io?86^I-@5QKj(E+UbK*lu)0E5Fj1PNe)5wf{xHCedA@=X>(G5z_$20 z7m2PO{lLLt%UPt~C1derzUm4;)2VTK=nD5TOCL?*()jkycCXC8NE4wg*c{d>9`slLww*cTsMh9)y>UOQ6jTe1@f7R^$Qf*~TUqOo8xyjx{k{9j zDh+14Upr8M=Zn2ruxzQm=@!U1#WQ)Sc#8esmtj7rC-faBrCB^TV>d_1?*L8gKl}jy z1+M%ce|*WWG+z0)bakp~$8`({anJFnipasy#yRdW4!Y(N*IZ}xsC(CdEdEN^4xWDB zxXk(nfSQXNE2ovOqmG)xlDN&-8H3EmE7z)A(08}%6oMW8IZD`K-ddQ;{Tx)gYB=MK zEq0x`XK{W-O1rU?XWYb5ij(I0?UqFk#i;*!8@HnkrqST>Ld>)uR`~a}G2#U77V^O6 zHJDH1cB)vJWwq15 z={gUr-~Io<=t|eZOHQs1PEgVJ8zVT#Oyh%Gez4kv+i{aNkZao{R}ZGyXkr^}`h5e3kw=S)}*wOg?5`CXewtCuQ;V~$mSE?8zvxGm73rAeu~U_S z=n@85MMWWOJs8d1vig)Ydcb{NLH+B9=B{(w5cVukO-qLEH9~r};Yc9m`q4j^34^BU zKHr-cw`bjZggkoAGaVNjMvQ_f5PJgABqHl|C^}&dHl;d;A6=?hsE$FvB*ISl!_A;TgM=M0)nm<47 zyfgOtPHSx24$*RCS@wR{>UdpDOd!T@Sg}T!pb)wY(ZGsxJeJf-t=I3W!afQr--}@4hU!ug&`} zhOe0&Du**cue@sLI*E}AY$FLgmj_T+m5@r?dYSr+c2+1R5z|}hea5{*F=G-9K8;)F zMU%?&tZ%1286fFE(gQV990e~uH###azS)~v6&Lp!{5B?h-84!#Y)hS=`9K?}1?89p zFF}ynEo)d*5n*e8t->>-gk0ylF5uCYv6L6%%_V#vxp9#c3F{kA7+yG4?}mN&XI~6D zSG+kk0s&3@u9PLGv%z?0V_(2{U%1b=&df26 z_r3Q`f4vu3^{gY{yONwxYK2vn?RVGN?2B<_v)lzZ&f1DF-8O~bVE4d&rR;+RD}ZRn z%g~I!Hn&Bk_OQ@5Smp_%zA<$wJ~7CRVD9$f^6Bhmp=Q6eUhHk)ifK_JJaRU zTYW)k>HDC8lG&P+)IwO8UQ~K{QV~(~-B>y}rPjpq#*#;aewtNq36rqRZL5&u`hq6K z@s;sO&b{|9kb7sdN5^K^+rN=5FVqlL9OMhuVNuv$Rn1?(#K$dTc@srFjmnMgBc1S2 zcfJ%#5>7vd1&5V_a_g+LYDQ$@>a4z07esy^l}U{8AGba`@@&$tZ+pTEU193 z<|(ZVzoWg0;VuV6RXNEia%=3jD}f*Os6LmTNQcL0>1Z#`O8fp)U=Ay`%TA~?e`>!n z^w(v}Dyd7)O}ewjmU^n#?>KmpC02}B5P4Cj^FAF}Y4_KQ9&wC)ZWQ}uU$dD1J!@70 zCSZRp7?P0Sx4z8`B)Mr8;AV~WmV*SuI{qvsPfu0kd^S(?(C8z|XkB#F@D{IIuWVp|e)2Gs&KVlzMFODlS&cz7mu4a})GUlz>YpAh!Ki7-j@bl1ZcGUS zNo*GoKL;r>F)=*^>%t9R4Vma)UuU`@VnB3Nc9iER9c8W+JmHEz z@_;`4s-WU-Bk=zoU9C`%w{xMfP;ha=<$MFl5&hdxsT1)sfxc$k9sBj?+$%koxY3J9 z5YkaWm3vZU-=37Ta7Uh>4d}7aQ3BGsMo{i${WT|b`gx?e)<@#oq1 z-KPP*|#z%E;k^K0-YiXANl}6J=7sBU2w06(@FzekaNaD{R zuWUrk_T{OaeuK^L)#z^A8oKXYh-lyLvhzcg8?{$3V^V#Vh&v0Eex~xqx^(FTDPAW@ z8^Y^$Es0+-p546O@?^b%xXoKsTe;!>#Y2UozV?Z`gsM&#Y9t{VldrCUFsFwIqMa%2 z*8W!qn1NXR^?1I@s11h@;$_R3nMaKV$RssFtpcmEK~STsy-5(NQorHg)C4+Pj{&;=|}ibm6B2cjXd0lfiUuF9}dW@kKP zOb+BZjm-#^U8IEAklAjqhs~$c{y%G%uD{Iq3d{55x?9*R&R6R9c$8L~TmY^%70?uz z6K-BevoQXz!{F?*@xQE{b3zTAbDWAaSqvHTOESV?$x&IuQE(Zb+OATW(6V<#q^R97 zbi0Z+{;Y|Ocj~lfo9{0GQ|4-|vdp4ywcBN~l$yyVjT;yW2sj4MSMcDf4R*j-!Jxd5 z$2-bLUwEc#)o&*7_0%uX182GQSJvK@zdW|W$Ca{9#|6hBUf6#Z-${6S0d#1VJe!}N z&{p;9s!xdG1}6cKQS`9}Q>O=RYPfF8qi?X3dKe_0TK`B2S?5xtL}+zfG(DqDSsjtl z@237=Mi4u=kX4I`ZyXxGuqqf&CLtJL-pnsc;vGB~N;6=e!eP5fE_84BoQG(av1o$R_~pf~?^C34HQbKAxub47Z(j zJY4>yrLFZ)tnC!J{2wb?2ta#Rlo+E5A^r~oTMf_R^B#lYDQ#ZTJTN|W71;rD;^&bl zi2HOGB>LDv$!q(V9nfWRjFaab(u;DLAPziwis0t}+88pWv?g z5Ugw;P?EC-wCB(YpDBH_iVwJzYnn&ru`i$#1j|1+g z0Ln{*S?(<9j`|n&+^E5fm>E>|I4~7TQJZ1-Q0j1yL|>i1vwk7X)CV2)yO=?;fZO79?yFXVv}Tc8>$Td0#-@|?^iDpi zv`3Eq%t?v&q*Hp|qLVXutx`NjZ=@GZPBAZ~Zi(w#7mN0Rk@3T7-y)(LL%kloJ=1Ho)J38mvS6%R zYsefXT+17FV&VW7sFxn7rZsB|PPnSmTFcE!`Fn)M6Uu0mI}<+{KYr-8coUVqiu#>z z?9)d*lYN@>FuM!Kn;SL?FH{3U1&Yw(80TjVatjkjl1#R!f=I0<8=pTD)16-w0bF+F zzyTTrI5{i?edZ(1k2kj&gzO;%A?zlM-{3wgjM1F;@R!H=&mEWS$~imbiEYesj^!c> z@v=D`$u1PstfyYM?oJ|3%hN(#Gp>MoIXij{8IXg6nLvrt4g;M^^12UXA z?%;)=h*G{ineEK#LpWHdm8qClzxhMFrtQS*zr!I2^9iGgr9U1Bpg@&vWDE%RCBoJB znmClgVV0(o)+8GC8#b+4t$jauQA58c174`P8cpSN${@?nTlUJ_@r9QgAw1vED~8jk zso>~5yyM9bY24J5L9Kk1$Gk>MSun&#p|25#@l*SmurW*|dR--RNigxK-rrvixN~w5XKxAOQn1`PF z`9WCYO7Y0E#A6%_C%r8Jm|7BFw_X%8x>5)vE8<~*tKD;O)_fo+=Jo4psxq|=KZ%js z?&UqE$P9JteIZKT#6RkPJBJROK`S*6JU<%4E&J>(W+(q4j{HZ8+d*p(Ei%g zG@VTeQQFWRUK+1Bs+zn8fd7{1#|3Nls*=PM^XVWI_kUF@K|3DcTZa1s*=KWCb9(C1 zDq)wo6j5vfl~qq5*D$bl!EEV$obDOSs;d9)Rp@ zF2CvgIJJE_aoVG@iqokR-{E~qd$~Gs!2Xsgs@VyqT5tHIb$7-ONKfnkqPg>B@^G+p z`3{JHIShM7$iexYvJr z0l?0_(jU*!1L=-<#A&A(?CFI=MQgYZC764+=eTb$EQtNLwVv#RFoo*yzCbz>Y&F8W z-Qs(T?*AG}rD7Jx^H;YN`)!Mcwo^O#ZJujazAVT{fx~isL!@QrQ|>@gLSfYweePw; zrviV*LC&GoDFj_ea#68ozK}HAbFb7Sn(@^=S9*WHxVl>GV1P~oyR~gFxF<0s;l2`a zJi^r|ip6Lih*OQhUhLnP+fs->a0S1H8Kp(zv2SIb*m-OVNL%`^fxr#QKsFd~I-kLG zYHhMOji#q@ed5~>@m2UJ<3U-#j@rA1VzryqPK6CD6xHo^(QPK>1 zl2LVSt+LdWBk&Wz%@jW~`9UD`Y#`2af|gc-U7nb>Kc_VEeS)xPs^W$O zxT4~jZ6l*8V{+^o?D+7+u&B;R?74W~KWlkDjGkddY==m(#x=};J-#cn|E`d?J;l8n z1O|5v41Bvsyt~qKyf)z2cR2X{=z03h(Gth4kCeV*N)uBCU2S!BD+ZO4`vzvov~<*8 zvFFt@Z0qRD?!;eALWXT!up4gitSKGxx8E1gnhwgk(yzO&N^GB!UgJjU{V%W;Ue#_U zgb(I>@o4Nd;nOWRe}(QVjDt zyTA2NVB7nG#5=742X_Rvzp$7v4^#zJ)cDO_6#i&ljI4c*KSq3Bq4k=I*aI7y4pG|U zXNgAxSK)z7RoqZV?*C;&FXx)4WIUj|qLgmuEj3(EAUcoK(p2$Bd=7jnnCxW!BMT5P z(5ST9-KviOG*Ev^zZq=NbCWYs`HhxI&`RV4<#yiJ?GvX#%Xdmt%6? z1XE=pO1435l1hnH->pADd&_#y1|WwBVHjV zBPDy#9)&7hWeTo@XO!+fs-XFMSi?fPIfsas;e-BGS|8{5?fFQ=4N!D>!5;H$7UFv? zDFP9dxJidoG5i0Db!#)eM+gI_2vKvk-*bO&bIQZ+czfr$ByI$gAgaLHoG@6Yq?5u(z$iJozzmoA3l1L(*OT6V(eZ1%UsO1_+r4?tr$E`>VZx1fB zVSY%f)A1Al3srle!N47yoT6XjZ9u15OMYxnvLB2!vx4bO{A$1h`NB&;@roEP`}DQq zK|%H@D84V`U(W19nCpMDn=^T`|#7rVG;?R?8r)a4Y)1xI%*lUNHwVP`;P#KHcZt#+L&^6mB8Xk&uXimgdszdEgH^)-I zH166C7<;5QR&fNp{Cz5qbA+x7bvjvzRY)Vqy&sEX-B&J9{ej0yyjN5vgzGjsn#-#q z>B&@9UT)Ou{9RsxWrZAu=R76tKOP8a+wWXW-Lu-0PJ0jz%UPA&l(r%!A_6^s0zia& zVNEBVO>YbjjwhB%d8Alir}8jHAnB#f|Gb=UboHKUe#eNN$12r695`1tN7GnXy*~J? zvdsIe&a??|HJmI=9CzPZg!?PfJ+`9%S@tv(CQh81RY@EoX!gmz+_lLk<3W>1T)^1L zzmxre*p+>@aOgsSCX46_5(ShKXn}?hmB#sSBOw0zt^E)ng;JW~hGv(!(azHnG}r#Z zjOOpGjRS@}C(T<|a+ilbR-WEVeSdR`M?UOvKY~^5_^gwtFkyFhUqMBs`W^{U4+j9d z0|*#$^qb~X0W?UiI{R%f0l~@xTU0Wu(Zz8T*KmA?+hd(yo(np9aub}?Lq-S*RQj(R zuGLvc`oH<>jSRcqpjud!w@CecNuima=eAUHy?|Ziplzc%zM;i?wEa-FPB~8O{bN>%H38SVCy3+nFy*ov_2 zqHef`)P72zz1P;u!Q0hi!4nSk8bH4$*T9^-ueD!~RACoJNS)_ohwp!$3!O7I=Gsz!&=hF{$$u6X_HZt?wrl_~v0; zC=~e@!1sx2s9Ys7KcEZq@YntA-8Sa*fzJCf>hqIZtG>^kdC?^yIe(1Qj@c zvE|NPg+|}E#s9L;cr{^JqR-9qKl3RvpxI1FG%`0pu!)ENhCpx8^Z*QMQ$-SLo}Qj~ z*Sh|IZ$SsP03ycdKOpf9I5a>T2)jJXs~LcQtM;-V%n~X_i_w?Ze!E&unnYdSK`J*<&tfmA%R36?2$A^bbR*Tt2@BqgVJ4jGg-Pb(=ER7mLlzGJRX zS1va&Oq&zEEN+t=cdNNXThJQDs};cKOL?~|WHKDeKOz9APMhbfz$(db#NY7{^nTvI zY8boc3t(&f3mt!WTtPOhoeJMa5rnnX>-Y{NV~V2x-Ut0JossoxKWJ-1DbI_{3uPOM zin{L=*F60AJOXkmCOh$*LV9=~$MF2D$y=nt$CVT-`MexF92FU7se1=xkj4k(2b_t$T5U$W(V;=kb$tyu@#UX6L^J9OLM9c6 z;$p2opPfxkA6(+0#IWoc*(>G=kR!9HHzOR@`q@=cl0gFYMkB3f6HV;Xd;9yHot+AE zywF>};)TBiR)Gub$vkHh1}qtkOpENf{)ZrnCj*A1Yhd4FGT6VJZpLYsEojB155MF3 z@ftcj1|1x+JkUJb%=l*#KDk`C7rH)I^qhfg^p420kMF{i>0$266i))_*)I#%>j z%~!VZVLE7|dGshEJ^g2F2j3N>=p&E$h`{%OFzqJ!vYc4tz- z<>o1@fIJJ_2;Yo1eqN}Rhg}=z_O(!uQoR1BSm2Y3-;)S)4XS)PqWLL9V0vD#a74Xq zNb0U0O`@;-Hm9*<1yVPpONuCRu6EsXea*Hmc;g+#J)Q_ZLdptBRVMa8CGP@<@G8rS zh4e~uyRij)f?-T0t;^%TJ$WK~a?`waQs_GawO@3pQzErod-&&^b+1QCKwV--%%FO=RFv(=T7A=`?yV6TrjU^dIhkTDG zMkTPAi=LIyfv*YOUw&vMejOZFAUzFRH1rV24H(dW_M8*2YIdGAzt{Uou6@AQz{vpj zdr=#QhMl1e{tl1e*&ER{qQq*Cq>Plz8zN-er-!5fIng!531Z=0BG;or^>Ml5Kjz|- zyE1ozxkm2IpAL3AR@x|mbgpzYt_p@7h9$+L5xY3wU9!2E)x{rg$8LKVqlSmM3}W`j z6G-+PH)9}^SmB23nU26l9JMOc%+3#na0*pQCcWGx?pkF+79x<%MEBQ>2S`R{WdHp5FAMN#j&h)6kXm&eGaSfBZjq2kqf`=zaPAyiWSuks=%(mw_K&3QEIgx+ZG zwLyvJh8t^<6j-xKFJuXlXWN`>3FOy4O{`K+i8R&9I@@*;tV%IifUJnr5eL_C-~M>y zX5eU__WK$S9sXZ9_MymisHI?$XtQQM`2z<`op1N&ZlD5Jcpv-Md5rF=ipT{w7ccj0&%1tIH z>!nSvbC2?mdK6VLWs3dx_XFi-R*({V>UFC}0Q&?&je%be?nT*mB9nCM%Abu!KwzPy zN768$og%X8F>=a@0bywBb9tF7A}5V+|Ei!b?@LZIr_Qs6Z}y4WH6a~8 z%U@3jqx=V#)H5T6f!O%6eX1P_3Kle-4J_z;3TXn{cz^PzOuY~zE*$f}^LLxZGXoW$ z_QMa|hus~;q?!)w8nAhzm=9JL|GX4}53#PxH_=}-O=lCFC<)y#2{}EXpZ|63d!I@yx^=HmTc1s<+_CMIQN`Z!40BTHFH>EG1@46?!Oqx_mlv6$XUHC1lu&cAPlV zhl$2UwB4Ex^0+!oUjfn9%fhzf#EO~fX9lcP$uD$cmxOnKtNYWie4bjy9S=b_aQ8K2 ztX`#UOO>L6OzXdevQV1f-Tu;|m0HR;_+r%GR`FLpD>Ce;Uc-YxxW4O4-`( z%-NNlnj|OA1Fyc#yoVpLoQp7yLFI(RL>rE2f&Kh}kN@6Xm!u*QTI5lGlSDu1TuVB68L{^?&hVj zCCicBCw7Wo1@P3*N$Lx>+|f@xCI0)tJ<`@($7E=&X~GEnM6&kVX0?~f5}R-1@fikr z3k=i$%%&5ch{F}6kp9BwX)b6sSB^(vm8qTG#`;wPd~Dsp_-?1u-p83Ti|F3GT+=GX zgLeMXqKC^_a*u#xAta%my2*!+-!$aXIYvSdRDvRuENZQWu{LV8+uGe7CHcx}GJP$U zC~8B4Rz0n0M1fsw`dx5r7(dp`E=m=CL4Dz0Oi_))lnSIkU z+XEiVNjH473Mh0CHS8fC`9sWPFISW9jT;!$L=}v0GZug?-tjaQ#ESA=F1F1nWJ+=a z@%hvL)5EH(hFoPX$ZQ;S0Q&725rL&pEjBUiDAs)M!`Fo8jRVExo&ozJ4t=wSXp{FUne-TA`>0Rbf z5~k!vc}%V~km16%|N5H*PJC;>t`$GWBm1e-QQGj1W?P|0;snWlX2Ys6!A8{LJ64td z>5;g0NkMa?LySz-)=JmI?qeqF3Z59Sr}g@E^iH0$IZEhRVZKxn|p#?VB63 z{{g=@oB3grjGpaR$(}6ZU_S#)%lm=NEfeZ-d)- z$+HPx%(nP}zjgZgW_t-w0Ekd}+yQp)Ld-go%detGZ7DY(y92;_11UCQuJJqa(o<^@ zL?W6IZhRw^#J<+j7XuaW-CM0qOb%0X5zCz;Bhjdi_Et<|dcRgu^24bEtKWu16K=Gk zu2#E|@^m6kp7A93eA3d#DZ@Wg2E>*c7M?TQ_;e)u*mQ>xSM?E(OaOrm3k?E@~_l`i{JEJ8OSzd18ofnX& z+Oo&p&TVB5Yq`pTMKW9$S}J<2CjisY?DGfV?v&LA^B`}%{IDQbU0!S$|homyfYKOnaIR74CPW9Zx^#{=wDEY*B&qs{9QeU$ySn_~srpQLLEM!L?u4 zn#EZtMyNlsuUmYPgLKL@bm<;8(&z4XvZh%Ff&<1E(GF*JL)lfVEgw+2nPL{6HnNO` zsVnp|JUg3OaZ9m;uWpvHt*PGO(K^ceV=F9gqXcor&(G@AkE79aFT@1xeh)M{FLi6Y zjMpPiOLU)&VxRWl&0`IjvMB&5T+pb*Qn5$C{_Tux+baW1s?)1^6$^v8lRPIAI zHK!=%;g_Ino3VE^GCFGBGwMH(W9V7$6YKKC&a<|<8jMTQgc0Dos%d~nSr;&RtBkUru zGfX+TYK2ADX3iZb1xPutU>_23 zeCKER$E#JoUcO3@9W&UL4lft(MJF|*r=|+=xldMewWbwFam1??jx$YX#jvw=1RV;- zwz&5j$S+aSL$`mv|4i0$hkV-v8m`eEKp?CYXn0(CTmxRnayXhvBXehCo*vCCABanF zVl))kg7CN4P}HrH7q}cXxV~FF3y)dcnW)cvF2Wt7DgxY&_Sc7hJqLD})A7@tOnwFu zN7mI(L+i!07EfuY>;8M{w4znMQRW=m$j%W{MEqsa&luC+5z7&0DX!IVa<9!)u)Sxq z9sG7PX*^Yw8z}|MOEYdzS%__XOYA}R<6PCq`+8hCPpz1&)dP)FTFyB(gSw7|BT#AWerpOo9yD2Uya>=0MxuRBI+fNyHAD) z8PnX0IIEM3x!0oR8ioB1fD-IxYZh{Lep@oh;iuzrdMlFvJDSoP4jngmbWgQe<+%To zX#-X67)@}DB4JOAA{*uAuDcDyt%`{`FG1_a0kKjc9yW1a`UxErAIJWtzUiF+xZEiA5^phrUM*@KtO8e0;=)WViG0M5 z{V>f%G9%;=1FNhkvFzB_j0THx*!%ciilu~fs`j-EFJgEw^my&9VPhR9;Tufc4=tyi z`1Q+pJSQweF89oUoz&2-KwP-`_7?-kc&-iZ7{m8HWsZa@T@rIgkBH?$em>i~IaoAC zp{bf`kJBH{8)QnID9Z{;Ya4_7WT?6{ImtAx;|b4}8grs-gjtr?9=@u9I?%aQNjk{8 z({{Qt5YkHQ{!x-Q4L7RB zUaM#l#FISF%=hQcS*SIy^f&$%D{!kbsUT)?aFf{`_o??`MZ@pW*TUTpMDzg4VMg=l zb%?l)YP@BvsM|{_TaCyLa3B<9$$~B>mP;8|cexC@lj#Z~b4^~0yB*lws3Rk%xZf}S z#i_bXHCLaElT;{x<`h_H`=>EJ`Z>~iq?_IBMa;hpFQ5s}v<7#HK65jV9C@i+FO=pd z4;s#OtpEUtfOAD(KB!?qbM*6jsw-VFHXdSWlB&eM=_HvBvhqcK9@N_PUjK#wm+h zhj}akcUMEZV!ysN~U5PAuw^l8VgaT3wck^Tb39+&C+xyFT`t~{7FA5i>HLXEXZs* z@31~~X7{aAQG0028>2EgjY}8qbKwbeIm*mP?N{2xyIY-Uqy08xp5vI$T&$5r@i6b2DIx`rKlQbW7Sl`klRy3$4gG^*p|@|i z+POJ&XSx^e^g{(5CWTAv#>$B1w$6bzh|J?nCW?{ZcDel?Nlwpv^R#NI)U*@6gr_-HUcdVX zrJcgU!&jp2c_iGe4kj;Ny znR>ba+BdB*hpAopaL%_0Tbb%BTW3T~H-1AvJjP@Of{B`XF*hSGuiYEC z{0GZR&y@Vo2WIhdEEr?ojTz@Sd*oL{C|XOfCGE<>%Fw@87*?5i_nuo zsU-juF4Ned#+*lXve0H;qwtiTw92xHnwDoh#{= z%r&s{Y@x9$QrCQVQKI0Mirns#u)Q+sK@P;CNpgE9Vs=<71G~Rg%$sC zHTB%!qH`$a(uMAQGWxwTro$&I1pmoh-VKlrFr*&;A@zVd&#_N2OG7td^RE9*eirRw zGjfc2&2Vaq0sL8FN}$`cOTPzg{zvJ!Laj1tUX%2G&xuO1rBhu0f6yGmcvy1h379?A zZ&(KvG8yZmF zIH_M>4<3-bl{iCq>(x0jPF50UHnpzu>Z{B&Gmo07B!wjJPi3Yo-9x9P9a`EyaWEw+ zb?~Mo>)g3ox~ZyrOG3EEBoPsjfi7Fj^!t=V4^QpUD4ro9Ga^X=VWQE@R(S~WFt zYOC>&ND!B61b4o$rF7~+X2=A(37?OgxUlb`2<{B=4yNl!wKdS(ZP=*6l@>G_j`UZP zrU1r)z{#Yf-z4`~Yx)TBp}x}CZfr$#gtazD~b_l>2yj>H(Fs+GjpGRw|d z^n<+(sH-Oo1~WvAi0-VeT1lcs^OvSpcdNKFbtwBcm5dP=P44*Riwl4qGtKK1*U_=W zx#Ao4c?H*aT|zdPhoIL8lWOLzRLB;qG-}~rX_vhnY#_MF0KR8DyMNXC zH8V6vlOzP%p}|;uFJqE^+9-*_FMs8C1qG+;Jj{C74-NLU2mIh8ZIuCSaW;&^ zcoCj)e(Lm6SdPPIZjQAjWtgs!($7=73x1ubSd1_-HzQ^5YFNPMZ3b45YI^@KQO8fu zn0ya@sLfZE201070Gf~qR2719w)gftoQ+~y0r~S%!f4F>7+-oOA;}p<+kquJ*w{yB zt_qFhwH6~=v1xZHmxAEBEDFcA(RItRN9`wVOUi!q@E+ZY{)^4(4zxy(V~0u>|ML{8 zZPg=+lsB01Lt9ECJ%eh~4&t$LOOp37fL*_Od~Q(k;d6mbIZLtUuL;$e?+{On-f}gi z7rNk@${@H0mK5A%fb&jqgK*?I=5#0KQD!Fl1^?gTMN8}Ax%glN)~yi!TdXgj=y?IZ z=ILg&%ZR8sltg2)%vslK7^P=0go#~VvpB>d8b4W@m(*nxn~sA@m5tBGb*On(ttE6> z$qqOTphTdQyY7ja>%*GiRnDt8Y7oY6?of)#?Wi4~2Y@+QS*=pidmqmEI8(Uj15f8Z zsV!2wiuv>`1ihAJ?NV8~2WX({+E-NgHtl>-ZR>nKA2TxGBsujKOIQn8hd z@psP3V`sM^yFlEFPk5y-!96gHNH${%;mqEOwVOE~dF}8ztPGD`JWN&YHsSdiMdgG_ zog2Qe1ALO7LLbQalQ{~h*Kp47J%sshw@iJgDRv|VujaH?FihqfHX;G}C1cfv&j44g z4t6Q}eP<{m3u^5-AKzCR`H{|V?E%r-7Mnof%JAz0-fOQXX*`^qoa9t21njgEKsz_H z)Uj*7XU&%mIs%EjB#|SMl12zFLF(*#hHR1CO;v16DLFB70{|WO9M>K=GM%q~I0xrn zrS5*}`5%aD!Da7er+UJv$Wa5-T`UMICI2*FN9~Qrv^7$ja#QmMM zG7T1c>c{}dXdKk6o-H15)KTIp0ncJYBr{BBw?DY}&7f!2a6<#GY4vf)4mZ0?KHdSu zEsIVc6{)T#mR&J$wbz|$&6sg`i>aQ%2*r!uy6CryL(EjKN|-_>j+&c40rWeZ7h9A| zSachj$q-wdem_KAHZxToCT^5{c>c@$084d|w2ww%*Te6xtRcYX_{!##lx|jRu+U*XK3Az%X*#!|UDy>tpQ)Lof-;7og<*Dkwn`I^ zgo+=Afj=sow=y7;q|eStT4%7Hv!8G6cj>eF7Q6lS zvml(ZJUD4+#)dA(84|0EC}v@?b+#&CHzjMsW;=Jf zjX7mmj~i7hEG9-=;Cav%(G6;O9y(=Y9G)7jmD6QQQ9C3T+o|Hn9_~g!BHCPHY8(Ql-H(8CM2hKDOV~6 z85a{?celCri$I2HYi*wxubpchoics8vC-Py(bj>Ti!CQ`6HfuAny!%rU=Jd?Yoo8Q zcTaP7TG#5W01F^x^

(#M1P)J5$WLeLD#aUKviEh@j%Fs4i8uDR@_^j9xOg31v1h z^qlrVdd{@9Q=Lt8r`@g2g?x{u(h~;+rSKIlAw;lJf>}6-&A8o21;H(--Es4s;;-L}p@TmL2 zRk`=)0A>5R(CUmM#yGdXYUpV+Q5CXbMfc#^G{W&^CjQKa`|AONHtbIDGXms;m=|go5?y!`mt{R=T7J zbB|wQXlKL8rLK7!!KTlTe{~!n?J;0%akxsHhg3V#r});dROj>GO;AxC`R9mY7~QEz zhiI7lMgn?zt~CHJTCBuEKqu<@L&vC0v_i>4T*;I%86K0fXSmLp1De^AyME7zg#&@= zt8}oVU8;~QTo*vT^LG~B&zJdl@!#UdgXO*?7}Lf{Ww|}HVd25HDv47A*Pban?#c)6 z`$;pFrzscvSybG77rB(y;%s8IE>xaab4Md3xR>{>qe!#FAunCA-n@BKj+Rne4^-S@lX4#8Lc(I^Ysteh6a2C>j zqN?i__T)pV8RtcON`WH^3JXZ1T9SGk>P;ebS|Sdp*Opn$G1e|)@?BIK#&{=KSIt(W zjJgLfk4D}T^vgo)+dN;ASL&(y3k&lDTCScREbZ;nhCOBUw_#0+&v)wfAEBlje+GVQ z(SfxJ&&rs$%P9${|0sPSE0!`6G1s^XXdEo`{x-gvT7-_!zGUb1MCk=S;Wzv-Cq1ka zZbhc0?pwBSg4=0$wkTsW?qZu^j1hqorO6`Q?P@~dLAkqyRaw4~8Gs(wsRxhXxU-#| zjl5lsLQGpurEPA-4(1JQ>+3#_g>)DDWm`jAq(|DOKphF<;Kmq5b(W zM&$4#g{e%50X>Ziueq7#DJYm|F4sk2iHxRm!IC>>nnty8V5^#v$};3$9c~}ecxKqh zD*>8PySby88QRO{1A0F`g1>J>&m%eR_4=&o6k9SXQEn;0Esycg@nH65(WUK(<6-`C zJmaXpb(mOPr;Mv-Z92~t4^HKQodO~{o3e-a@)<1**bL3g9gd*PUE$YQ&HyW64$|0F z29MehH<-xhxIml1MR21ku+qlT?=Hu-BI8ryinE5NX4qEErR|wG?cMMj%=OiV8>P=n zKW)KmbJy>~ii4-W%VGg_rznqeHN%#3KpsSS5Uhe^YqFGGIzaf0NbDk=#KY49qD!>Y z`=bLl*RSkvmWFYjr;aHdOCtRJ$39(HGp~JM2=??Vt-zLURccykUbd{ zuly!OCVojA4H*?Pk~n%uh6Bou-H{2~IcpW?`Bzhw5>dY5FvGfjM%5n?IUU2!HKkc6 zGDiru|BT48FRF}N{SgvL?d?fEpW=$Pv$p9;E{q+j>4A`RBvD%3LvKNiVTjwo%+x@_ zyzmHonA}BV%fIHrfB@4cM_(LuUE9I2wr8mWF>gbiiUAiTPLdjR0HTioPgiRDd#uwd zO)ihrKA2ocART|DDX)t$F3BKcW**X`^)4wG(Ke(a@2(#<|2 z4}|Go1a$jsyJ#S~?j~6ti6@&*9<|Gfwsl{u+}eH}9u}Kt4K3?dj>pCH=%|3TNHKL; z)eNb*@1==uE80EbeW^rrW4u)xPGnKBee=D6;74T39WJ2WJQg4kA#`J(9`m3XZm02m zTY>j?=Ff;P?F*eK{Vb?VU)^ZRR3_99@yV2OL;$%+*)$YAtNHc436pDDktyHEzT0p< zb+vKXM&LB%ED(M7>`D*dSaTyY-|#jS9^bLb6412&d~upohqA8(Ox%$mtS9@B?#M0l zH-zfow~7Qw>HS(wTWsTOngMJ>m`5ybq?|Gh(BU{UDT z#CIH?MhaHSEAHKXdctr%)!wn|ezYPXc(5C&Yu3BJM$sAJ<5aU zm@m7DS@!o{rF-Oo+2G#JFYMMxIbBXT9>1>2AhB?ugQ3mJ6tz8cl)*?&oSzGyLoIxG z0;CLs4^Lt}ZXJrBIYZA`)Q>C&FH+}M28|XDPae_dta@ZM$$QhK+3Kh5?C}DO?XX{a zPsMm(XY=N;&_i%yoe=IsxT)$RtN&rjYL8<|z`QN}${ex_frUN=8x(^K0F-?cDvso_ za0H>pvIwyM`|Yo$#K=_JicV#lq~8TmBrxu8S9?_4aTi^ifj|2;mEJ4lpQ#0~PtUhM zJ2Mwvd?EtT}T09-gc*;6E=TJQ84ldsJ7=Des+YM1;X5UHH3W8pzNYS!k&MdG64 z=2nW75@VtFg1%*WwZIX#&fJN4kh(~p`1XA1jj8il+jr*^j$1ok&mYVIu_eWUhWW}| zgsPN@s$_P74jc5v?t%@ye>=oE(UH4HpnW$PxA@&$!K;Dk7VX*sjXNYOL>mr zaw6>yl;{R!^1WbnOpU6xQ878Cz$%wPmHH*9^Yi%?pprr@M4-8F5OeD*58o5FM4n{H zKd(<_b1l_3hFev9rHbzz2yqCtudiA|nylkL(o{3arQH&^37J!dUq|Ind7vf^!R*b} z-js$AV>;b;o^0!8NHx3NO4DEd&#)SCx`GX?hLOC;>e>+TPaD|ir{vXZ_FHfVKsXaA zq(Nb{^*f)DMKJhiue4Oue0v|(A#t#PXw>%p|`l{|&<357Su^|lJDyi}Y+p~^Di_>`-vhns#U{#k!H!TSEJDvie zhS>Mj+HKfLS(|%y!z|~;;q>v0ap-}57#?@EbfCMD3t&@>`z|Op zW2GleCEs#HAxJsby+J}!?zEr#0n4dCAd-J?T4SCx7&QbZ%`$c8WgQf(zZc;^;v19>yP| z*{A_HP{XIh=J2KLZ_x^N#nI!t{l|{)9W`R_^*#) zC#e&oA}Pr=%NBC0OdOGN>&@}r*X+1N9%%~pk69k6{EM;eB4+$|*SmEqO)ZC4sM4Zp z@KTy+vGm0NBr@HwNZlO&%BkQ#(D6>nrsNhb8RVTp%h9yl<_T2ns(Wv(cx#5y6^8qL zCr?&9^4%|d9m{Q7T4Yr_+%TS%(j&P!q!6&C+|Ex(fKU7V!mOP)OCu>O#+X$wwK>-u zNYVHhEbUzAjkbHnat)unx86mK-n`h}c5+S@r$Pl{A>QgV{SDAHREit;&N~e{AWUI?Hx+|ir@zftxA|v}%uIJK!11M5+G&zb z@moaSaJ(V+BBmpjVEmuGX52Vx5i49jXi-u!!5bdQz9gafRG7)mIEKP2?3**k11O+PN#+Q7` zG*ZJjT*C{p3vN|3qj~6l=JZ)pL6d&2>B)?~;(&_5ur|T|fhdp@kgWQdRg|v!@O;z= zaX6lN4=cM8!)|)&{ghAgWQY7rGNc=jCuaNnWY2SNWfos<&Jh5+IQDd0Td2sjP4Zaz zg*`q5&*POFqg1g2hfPOd!~2EafVw3E2dTvTj5@TKs}NC@Yxxs(v@#Nh7?&G4SU(f` zzDh$uC|6o-j-j0!&h9T>71G+R-$xoXz%Y+;J;yO;^gJiF?-q5|@xj4|0R&KALF%xF)<8|7fLejn; z)>bVYHk?j6hQn^1Cw8D`q;jhI7%5hrr`@^VvUiR>8mb3l``3r+!hsOtya41#4kjEI112 z40^wv*Y}{^jFk3G15}<_?AdeL>^@vE zCT}_(1y~g8$Woeaai^&+=%1c-g&XD9vf5dk4|Pg`Xl-@edXG8rVXn^^U*vF z{`U24Igu2*$7B-Olv2^Z;~&!;ni?yvNM8K@@qk8rVdeKL9x_Uhfj(VZyEU(j#(g%X zT%P>8M&BREDPP|}x1D5${w)0{ zA;{gn(2*5pdob!5l0E(U{P9`5W$FD1sW;QYlv3bW6{uvTuI}U4LDwuY!_&+!8Yb$r ze}uxc&OO@v0hz2%LALW)V><$+rTg?!Z9I&)AK(Dy5W-{Sq`ea4ioAMXB6%o}?LwQkkCh^*@I}AC9 zYFl4WmaUpX*W0DIhptUx67~yDz_FXA?uX7f-sPGBAy|zK>$ULvu<)~Ta;cD5lz536 zmQXDA%#AZ;w5w9NU=IgcM|Gu2cqT>}5|XcT!iaw6GNz(B0BUn$EVb@1iTek%>WvrV zcPh_|j%>XQC5~G@#{D0*-ukcUH*Eh`K|qlfkS-As38hCjlG0tG(miUFbc0Gs4e4gm zwb3atV01Sd-N<0@+55il?{DA7Xzn zV|V+=MZ-QbK>0S5to`_b<=s2ED0}j9&$&3M1==15M1&XRd|!XLJJ3`L7h�c+*Pj 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

*!T8g}o?-ZZ6G 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

POBkeAq1_BiTBRNK_zU(bi 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%0D6fPEkV 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

&Pq^pS)-MnkE(ZyP6myqO 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�wN}UaxkzRR6>b(OAM^NZ^nFik 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 JLN|7o+%67%lPWtnp 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 DtVcON From f4d5fbf61282e4235720619244765ab89c70856f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 12:23:51 +0800 Subject: [PATCH 429/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.17 (#2426) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 10e55492d78..74ab024cb38 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.16", + "io.nlopez.compose.rules:ktlint:0.4.17", ), ).editorConfigOverride( mapOf( From af11f82d6b3698f7440d01185b9e7944a7f19bd8 Mon Sep 17 00:00:00 2001 From: atzix <47281378+atzix@users.noreply.github.com> Date: Tue, 29 Oct 2024 18:55:46 +0100 Subject: [PATCH 430/527] fix SimpleLogin icon (#2428) --- app/assets/appfilter.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 7b84e0e1b70..ec332cdc188 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -10162,8 +10162,8 @@ - - + + From f408300eafeeb73f060aa3cc85eb04c483107a98 Mon Sep 17 00:00:00 2001 From: Christoph <47949835+Sir-Photch@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:22:39 +0100 Subject: [PATCH 431/527] Add fi.skyjake.lagrange (#2423) * Add fi.skyjake.lagrange * Update lagrange.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/lagrange.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/lagrange.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ec332cdc188..ed504112af1 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5576,6 +5576,7 @@ + diff --git a/svgs/lagrange.svg b/svgs/lagrange.svg new file mode 100644 index 00000000000..203d973779a --- /dev/null +++ b/svgs/lagrange.svg @@ -0,0 +1 @@ + From 66e9c985667647f2230f5f7de354fd2aebcac551 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 31 Oct 2024 03:57:42 +0300 Subject: [PATCH 432/527] +28 links (#2431) --- app/assets/appfilter.xml | 40 +++++++++++++++++++++++----- svgs/feedly.svg | 2 +- svgs/{hdfc.svg => hdfc_bank.svg} | 0 svgs/ho.svg | 2 +- svgs/myjio.svg | 2 +- svgs/{my_ooredoo.svg => ooredoo.svg} | 0 svgs/{td_canada.svg => td_bank.svg} | 0 7 files changed, 37 insertions(+), 9 deletions(-) rename svgs/{hdfc.svg => hdfc_bank.svg} (100%) rename svgs/{my_ooredoo.svg => ooredoo.svg} (100%) rename svgs/{td_canada.svg => td_bank.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ed504112af1..4073e56b678 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -639,6 +639,7 @@ + @@ -798,6 +799,7 @@ + @@ -893,6 +895,7 @@ + @@ -1464,6 +1467,7 @@ + @@ -1482,6 +1486,7 @@ + @@ -2171,6 +2176,7 @@ + @@ -2505,6 +2511,7 @@ + @@ -2537,6 +2544,7 @@ + @@ -3190,6 +3198,7 @@ + @@ -3596,6 +3605,7 @@ + @@ -4139,6 +4149,7 @@ + @@ -4526,6 +4537,7 @@ + @@ -4601,10 +4613,11 @@ - - - - + + + + + @@ -4623,6 +4636,7 @@ + @@ -5252,6 +5266,7 @@ + @@ -6698,6 +6713,7 @@ + @@ -6860,7 +6876,6 @@ - @@ -7666,6 +7681,8 @@ + + @@ -7975,6 +7992,7 @@ + @@ -8244,6 +8262,7 @@ + @@ -8469,6 +8488,7 @@ + @@ -8477,6 +8497,7 @@ + @@ -9178,6 +9199,7 @@ + @@ -10713,6 +10735,7 @@ + @@ -10727,6 +10750,7 @@ + @@ -10965,7 +10989,8 @@ - + + @@ -11445,6 +11470,7 @@ + @@ -11720,6 +11746,7 @@ + @@ -13470,6 +13497,7 @@ + diff --git a/svgs/feedly.svg b/svgs/feedly.svg index 633c20abbdb..1239df1d9aa 100644 --- a/svgs/feedly.svg +++ b/svgs/feedly.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/hdfc.svg b/svgs/hdfc_bank.svg similarity index 100% rename from svgs/hdfc.svg rename to svgs/hdfc_bank.svg diff --git a/svgs/ho.svg b/svgs/ho.svg index ba6ad3c1c70..9e15898a976 100644 --- a/svgs/ho.svg +++ b/svgs/ho.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/myjio.svg b/svgs/myjio.svg index 18cca201f39..0ce61874ce7 100644 --- a/svgs/myjio.svg +++ b/svgs/myjio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/my_ooredoo.svg b/svgs/ooredoo.svg similarity index 100% rename from svgs/my_ooredoo.svg rename to svgs/ooredoo.svg diff --git a/svgs/td_canada.svg b/svgs/td_bank.svg similarity index 100% rename from svgs/td_canada.svg rename to svgs/td_bank.svg From 36386b448d3842840e7def5075825de9c8d47905 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:32:30 +0800 Subject: [PATCH 433/527] Update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.7 (#2429) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 401f7ce08c5..ebac4828267 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -153,7 +153,7 @@ dependencies { implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") implementation("androidx.navigation:navigation-compose:2.8.3") - implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") From c9dca7bb6fb3961a6e9580e2bc9cfbc1e4d37be3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:32:42 +0800 Subject: [PATCH 434/527] Update dependency androidx.core:core-ktx to v1.15.0 (#2430) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ebac4828267..e1a18573191 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -140,7 +140,7 @@ licensee { } dependencies { - implementation("androidx.core:core-ktx:1.13.1") + implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.3") implementation(platform("androidx.compose:compose-bom:2024.10.00")) From a44d57a977db6bd9ee76f90ed76d5e2e235af1bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 10:08:40 +0800 Subject: [PATCH 435/527] Update AGP (#2432) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 74ab024cb38..cc94199c53e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.7.1" apply false + id("com.android.application") version "8.7.2" apply false id("org.jetbrains.kotlin.android") version "2.0.21" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 32423d981a8..18f8cc218f6 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.7.1") + implementation("com.android.tools:sdk-common:31.7.2") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.17.0") } From ababb6e730882160fb0c20734ef3103c9062ecb5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 10:08:48 +0800 Subject: [PATCH 436/527] Update dependency androidx.compose:compose-bom to v2024.10.01 (#2433) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e1a18573191..d922e1ba4ff 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.3") - implementation(platform("androidx.compose:compose-bom:2024.10.00")) + implementation(platform("androidx.compose:compose-bom:2024.10.01")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From 42cf2cd5fa414b65e9e86d91219d8e2b5dded761 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:58:15 +0800 Subject: [PATCH 437/527] `build_debug_apk.yml` - implement test fix for actions --- .github/workflows/build_debug_apk.yml | 53 +++++++++++++++------------ 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index 611c982ff26..a9c6f8d2c74 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -5,31 +5,35 @@ on: push: branches: - develop - paths-ignore: - - '**.md' - - 'LICENSE' - - '.idea/**' - - 'docs/**' - - '.github/ISSUE_TEMPLATE/**' - - '.gitignore' - - '.gitattributes' - - '.github/labeler.yml' - - '.github/release.yml' pull_request: - paths-ignore: - - '**.md' - - 'LICENSE' - - '.idea/**' - - 'docs/**' - - '.github/ISSUE_TEMPLATE/**' - - '.gitignore' - - '.gitattributes' - - '.github/labeler.yml' - - '.github/release.yml' jobs: + check-paths: + runs-on: ubuntu-latest + outputs: + skip_steps: ${{ steps.check.outputs.skip_steps }} + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + submodules: true + - name: Check for ignored paths + id: check + run: | + git fetch origin ${{ github.base_ref }} + modified_paths=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }}) + echo "$modified_paths" | grep -q -v -E '(^\.github/|\.md$|LICENSE|\.idea/|docs/|\.gitignore|\.gitattributes|\.github/ISSUE_TEMPLATE/)' + if [ $? -eq 0 ]; then + echo "skip_steps=false" >> $GITHUB_ENV + echo "false" >> $GITHUB_ENV + else + echo "skip_steps=true" >> $GITHUB_ENV + echo "true" >> $GITHUB_ENV + fi build-debug-apk: runs-on: ubuntu-latest + needs: check-paths + if: needs.check-paths.outputs.skip_steps == 'false' continue-on-error: true steps: - name: Check out repository @@ -63,6 +67,8 @@ jobs: check-style: runs-on: ubuntu-latest + needs: check-paths + if: needs.check-paths.outputs.skip_steps == 'false' steps: - uses: actions/checkout@v4 with: @@ -76,7 +82,8 @@ jobs: send-notifications: runs-on: ubuntu-latest - needs: [ build-debug-apk, check-style ] + needs: [build-debug-apk, check-style, check-paths] + if: needs.check-paths.outputs.skip_steps == 'false' steps: - name: Check out repository uses: actions/checkout@v4 @@ -104,11 +111,11 @@ jobs: TELEGRAM_CI_CHANNEL_ID: ${{ secrets.TELEGRAM_CI_CHANNEL_ID }} ARTIFACT_DIRECTORY: artifacts/debug-apk GITHUB_REF: ${{ github.ref }} - DISCORD_CI_BOT_TOKEN: ${{ secrets.DISCORD_CI_BOT_TOKEN}} + DISCORD_CI_BOT_TOKEN: ${{ secrets.DISCORD_CI_BOT_TOKEN }} nightly-release: runs-on: ubuntu-latest - if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' + if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' && needs.check-paths.outputs.skip_steps == 'false' needs: build-debug-apk permissions: contents: write From b065942e9d13139d797530cea3d46f9a6669269e Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:09:48 +0800 Subject: [PATCH 438/527] `build_debug_apk.yml` - Fix workflow --- .github/workflows/build_debug_apk.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index a9c6f8d2c74..db09477f2a7 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -24,11 +24,9 @@ jobs: modified_paths=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }}) echo "$modified_paths" | grep -q -v -E '(^\.github/|\.md$|LICENSE|\.idea/|docs/|\.gitignore|\.gitattributes|\.github/ISSUE_TEMPLATE/)' if [ $? -eq 0 ]; then - echo "skip_steps=false" >> $GITHUB_ENV - echo "false" >> $GITHUB_ENV + echo skip_steps='false >> $GITHUB_ENV else - echo "skip_steps=true" >> $GITHUB_ENV - echo "true" >> $GITHUB_ENV + echo skip_steps='true' >> $GITHUB_ENV fi build-debug-apk: runs-on: ubuntu-latest From aa1246b274451a8e3043020318f29e8c6bf7bbd6 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:15:13 +0800 Subject: [PATCH 439/527] `build_debug_apk.yml` - Fix variable --- .github/workflows/build_debug_apk.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index db09477f2a7..c03f4da47ad 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -24,9 +24,9 @@ jobs: modified_paths=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }}) echo "$modified_paths" | grep -q -v -E '(^\.github/|\.md$|LICENSE|\.idea/|docs/|\.gitignore|\.gitattributes|\.github/ISSUE_TEMPLATE/)' if [ $? -eq 0 ]; then - echo skip_steps='false >> $GITHUB_ENV + echo "skip_steps=false" >> "$GITHUB_OUTPUT" else - echo skip_steps='true' >> $GITHUB_ENV + echo "skip_steps=true" >> "$GITHUB_OUTPUT" fi build-debug-apk: runs-on: ubuntu-latest From 22bb3223fedbb95e2ca4878bbad9dfaa45447d8c Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:28:49 +0800 Subject: [PATCH 440/527] `build_debug_apk.yml` - Use custom action (temporary fix) --- .github/workflows/build_debug_apk.yml | 34 +++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index c03f4da47ad..ef6cb2d7a30 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -11,27 +11,31 @@ jobs: check-paths: runs-on: ubuntu-latest outputs: - skip_steps: ${{ steps.check.outputs.skip_steps }} + skip_steps: ${{ steps.filter.outputs.workflows }} steps: - name: Check out repository uses: actions/checkout@v4 with: submodules: true - name: Check for ignored paths - id: check - run: | - git fetch origin ${{ github.base_ref }} - modified_paths=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }}) - echo "$modified_paths" | grep -q -v -E '(^\.github/|\.md$|LICENSE|\.idea/|docs/|\.gitignore|\.gitattributes|\.github/ISSUE_TEMPLATE/)' - if [ $? -eq 0 ]; then - echo "skip_steps=false" >> "$GITHUB_OUTPUT" - else - echo "skip_steps=true" >> "$GITHUB_OUTPUT" - fi + uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + workflows: + - '**.md' + - 'LICENSE' + - '.idea/**' + - 'docs/**' + - '.github/ISSUE_TEMPLATE/**' + - '.gitignore' + - '.gitattributes' + - '.github/labeler.yml' + - '.github/release.yml' build-debug-apk: runs-on: ubuntu-latest needs: check-paths - if: needs.check-paths.outputs.skip_steps == 'false' + if: needs.check-paths.outputs.skip_steps != 'true' continue-on-error: true steps: - name: Check out repository @@ -66,7 +70,7 @@ jobs: check-style: runs-on: ubuntu-latest needs: check-paths - if: needs.check-paths.outputs.skip_steps == 'false' + if: needs.check-paths.outputs.skip_steps != 'true' steps: - uses: actions/checkout@v4 with: @@ -81,7 +85,7 @@ jobs: send-notifications: runs-on: ubuntu-latest needs: [build-debug-apk, check-style, check-paths] - if: needs.check-paths.outputs.skip_steps == 'false' + if: needs.check-paths.outputs.skip_steps != 'true' steps: - name: Check out repository uses: actions/checkout@v4 @@ -113,7 +117,7 @@ jobs: nightly-release: runs-on: ubuntu-latest - if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' && needs.check-paths.outputs.skip_steps == 'false' + if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' && needs.check-paths.outputs.skip_steps != 'true' needs: build-debug-apk permissions: contents: write From cdd76a37a58218d072ac27695b1d8c978d63fc4a Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:39:05 +0300 Subject: [PATCH 441/527] Refinement of the template for requesting icon updates (#2436) * Simplification and refinement of the template for requesting icon updates * Update icon_rebrand.yml --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index 9e817d426a5..6e1589dbac5 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -8,19 +8,17 @@ body: label: Icons description: | **Please specify for each icon** - - the current application name in Lawnicons (search in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml)); - - [the link to the icon](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs) in Lawnicons; - - the new application name, if changed; - - the image of the new icon. + – The current icon and application name in Lawnicons (search in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml)). + For example, you found **...drawable="ladb" name="ADB Shell" />**. The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg). The application name is **ADB Shell**. + + – The image of the new icon and the new application name, if changed. **Example** - Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) → X, [the X logo](https://commons.wikimedia.org/wiki/File:X_logo_2023_original.svg) + Now + Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) + New + X, [fresh icon](https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png) placeholder: Tell us what should be changed and how validations: required: true - - type: textarea - id: additional-info - attributes: - label: Additional information - placeholder: Specify what else is worth considering. For example, the application has a new activity From d745f39355742541c9a502587524683bc876a5da Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 3 Nov 2024 09:55:15 +0800 Subject: [PATCH 442/527] `build_debug_apk.yml` - improve workflow filtering This commit improves the workflow filtering logic, allowing the actions to run if both non-filtered files and filtered files are changed. --- .github/workflows/build_debug_apk.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index ef6cb2d7a30..22644a25873 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -11,7 +11,7 @@ jobs: check-paths: runs-on: ubuntu-latest outputs: - skip_steps: ${{ steps.filter.outputs.workflows }} + skip_steps: ${{ steps.filter.outputs.workflows && !steps.nofilter.outputs.workflows }} steps: - name: Check out repository uses: actions/checkout@v4 @@ -32,6 +32,21 @@ jobs: - '.gitattributes' - '.github/labeler.yml' - '.github/release.yml' + - name: Check for non ignored paths + uses: dorny/paths-filter@v3 + id: nofilter + with: + filters: | + workflows: + - '!**.md' + - '!LICENSE' + - '!.idea/**' + - '!docs/**' + - '!.github/ISSUE_TEMPLATE/**' + - '!.gitignore' + - '!.gitattributes' + - '!.github/labeler.yml' + - '!.github/release.yml' build-debug-apk: runs-on: ubuntu-latest needs: check-paths @@ -66,7 +81,6 @@ jobs: with: name: Debug APK path: app/build/outputs/apk/app/debug/*.apk - check-style: runs-on: ubuntu-latest needs: check-paths From af05add398648e577ef658531dd73c6b4115b352 Mon Sep 17 00:00:00 2001 From: SchweGELBin <67663319+SchweGELBin@users.noreply.github.com> Date: Sun, 3 Nov 2024 19:55:43 +0100 Subject: [PATCH 443/527] +1 link (#2438) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 4073e56b678..3911bc8473b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -7707,6 +7707,7 @@ + From 5afd90dcbbf57894e21bc51a50201b7da180d513 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:10:15 +0800 Subject: [PATCH 444/527] Update plugin com.google.devtools.ksp to v2.0.21-1.0.27 (#2440) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cc94199c53e..a13896ef0b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.21" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false - id("com.google.devtools.ksp") version "2.0.21-1.0.26" apply false + id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From bb526cdad5d17b6b032807610f2ee9b68eaf1ff8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 08:49:06 +0000 Subject: [PATCH 445/527] Update dependency gradle to v8.11 (#2442) * Update dependency gradle to v8.11 * Update gradle.properties --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Zongle Wang --- gradle.properties | 1 + gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index b13e7169c13..747a475b662 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,3 +9,4 @@ org.gradle.caching=true org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fb602ee2af0..82dd18b2043 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionSha256Sum=57dafb5c2622c6cc08b993c85b7c06956a2f53536432a30ead46166dbca0f1e9 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 065fc7b3eb3679eb22d3beb455550fe9158d0429 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 21:10:02 +0800 Subject: [PATCH 446/527] Update plugin com.gradle.develocity to v3.18.2 (#2443) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 5db0dbe5893..e32e7c13292 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.18.1" + id("com.gradle.develocity") version "3.18.2" } develocity { From f611aa0050d2678028ce2d0830f8ebc075d89912 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 11:47:14 +0800 Subject: [PATCH 447/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.18 (#2444) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a13896ef0b1..165293c9b77 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.17", + "io.nlopez.compose.rules:ktlint:0.4.18", ), ).editorConfigOverride( mapOf( From 56faf82c4dadbe4ecf8bb8c15fb6e5255e80b1d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 11:47:21 +0800 Subject: [PATCH 448/527] Update dependency androidx.navigation:navigation-compose to v2.8.4 (#2445) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d922e1ba4ff..586e8dabb3f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.3") + implementation("androidx.navigation:navigation-compose:2.8.4") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") From d399e90a282349d7484850f7154f3bc1fb128a83 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 11:47:30 +0800 Subject: [PATCH 449/527] Update dependency androidx.compose:compose-bom to v2024.11.00 (#2446) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 586e8dabb3f..2ff9d0d265f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.3") - implementation(platform("androidx.compose:compose-bom:2024.10.01")) + implementation(platform("androidx.compose:compose-bom:2024.11.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From 168e687ce97a239b612748cb014ba3e23181b32b Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:14:23 +0900 Subject: [PATCH 450/527] +2 links (#2441) > `Lawnchair`, `Lawnchair` --- app/assets/appfilter.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 3911bc8473b..ce67c7c93e9 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5617,6 +5617,8 @@ + + From 0b07f6b6193fcd9a1267406ec4367cbc3c2926e7 Mon Sep 17 00:00:00 2001 From: Red6785 <88458171+Red6785@users.noreply.github.com> Date: Sun, 17 Nov 2024 18:15:43 -0600 Subject: [PATCH 451/527] Linked Stratum Auth icon (#2449) * Add stratum_auth.svg Duplicate authenticator_pro.svg for stratum_auth.svg * remove stratum_auth.svg and link stratum to authenticator_pro.svg --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ce67c7c93e9..57336b16f9d 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -13573,4 +13573,5 @@ + From 640467da87dbf5ea29b3c2ab55244192cfcb4eb3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 14:12:18 +0800 Subject: [PATCH 452/527] Update plugin com.google.devtools.ksp to v2.0.21-1.0.28 (#2448) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 165293c9b77..d32f4cdd1a8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("org.jetbrains.kotlin.android") version "2.0.21" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false - id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false + id("com.google.devtools.ksp") version "2.0.21-1.0.28" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From 9947f23c38374941b3819ba02eb9d3fae73bd103 Mon Sep 17 00:00:00 2001 From: Red6785 <88458171+Red6785@users.noreply.github.com> Date: Wed, 20 Nov 2024 12:40:20 -0600 Subject: [PATCH 453/527] Link T-Life app to T-Mobile icon (#2450) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 57336b16f9d..a5325adc8ac 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -10893,6 +10893,7 @@ + From cb628e5579b500fe4c23e2422993918080356841 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:58:17 +0300 Subject: [PATCH 454/527] Error correction and copyediting (#2455) * Error correction and copyediting * Update icon_rebrand.yml * Update icon_checklist.md * Update README.md * Update CONTRIBUTING.md --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 13 ++++--------- .github/icon_checklist.md | 22 ++++++++++++---------- CONTRIBUTING.md | 12 ++++++------ README.md | 2 +- 4 files changed, 23 insertions(+), 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index 6e1589dbac5..edb0aebd97c 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -7,17 +7,12 @@ body: attributes: label: Icons description: | - **Please specify for each icon** - – The current icon and application name in Lawnicons (search in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml)). - For example, you found **...drawable="ladb" name="ADB Shell" />**. The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg). The application name is **ADB Shell**. - - – The image of the new icon and the new application name, if changed. + — search the current icon and application name in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml). For example, you found "...**drawable="ladb" name="ADB Shell" />**". The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg) and the application name is **ADB Shell**. + — provide the new icon and application name (if changed). **Example** - Now - Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) - New - X, [fresh icon](https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png) + Now: Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) + New: X, [fresh icon](https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png) placeholder: Tell us what should be changed and how validations: diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 420645be533..08e4f379045 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -2,23 +2,25 @@ Thanks for your contribution! We hope that you followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and made sure that Lawnicons is built correctly. -While waiting for a brief review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. +> [!Tip] +> While waiting for a brief and strict review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. Additionally, you can find and install [the debug build of your PR](https://github.com/LawnchairLauncher/lawnicons/actions/workflows/build_debug_apk.yml). -### Canvas and sizes +### Lawnicons guidelines +#### Quality +1. Ensure that icons are easily recognizable. +2. Align icons to [the visual center](https://crazybitsstudios.com/another-way-of-aligning-elements-when-creating-icons) as much as possible within the guidelines. The visual center is where your icon looks and feels centered. +3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. +4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. +5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. +#### Canvas and sizes 1. Canvas: `192×192px`. 2. Non-square icons: the long side of the icons should be `160px`. 3. Square icons: `154×154px`. -### Color, stroke width and rounding +#### Color, stroke width and rounding 1. Color: non-transparent black `#000`. 2. No fill. Base stroke width: `12px`. `14px`, `10px`, `8px` — depending on the shape of the icons. `6px` — for fine details. 3. Rounded ends and joins. 90° corners are rounded by `6-32px`. -### Naming +#### Naming 1. Names should match the official app name and contain no additional text. 2. If the first `3` characters of the app name contain letters not from the English alphabet, then add a localized (or transliterated) name via `~~`. Example: `京东 ~~ JD`. 3. The names of the drawables should repeat the names of the apps if nothing prevents it. -### Quality -1. Ensure that icons are easily recognizable. -2. Align icons to [the visual center](https://crazybitsstudios.com/another-way-of-aligning-elements-when-creating-icons) as much as possible within the guidelines. The visual center is where your icon looks and feels centered. -3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. -4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. -5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cff2b6dd986..4952a260029 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -127,9 +127,9 @@ Correct ## Adding an icon to Lawnicons ### Prerequisites -* A fork of the Lawnicons repository; -* Your icon in the SVG format, adhering to the [above guidelines](#contributing-icons). The filename must use snake case (e.g. `spck_editor.svg`). -* The package and activity name of the app; +* A fork of the Lawnicons repository. +* Your icon in the SVG format, adhering to [the above guidelines](#contributing-icons). The filename must use snake case (e.g. `spck_editor.svg`). +* The package and activity name of the app. ### Via `icontool.py` Please check [the icon tool guide](/docs/icontool_guide.md) for more information. @@ -146,12 +146,12 @@ Please check [the icon tool guide](/docs/icontool_guide.md) for more information **The new line** ```xml - + ``` **General template** ```xml - + ``` 4. Done! You're ready to open a pull request. Please set `develop` as the base branch. @@ -160,7 +160,7 @@ Please check [the icon tool guide](/docs/icontool_guide.md) for more information ### Using Lawnicons 1. Install and open [Lawnicons 2.10+](https://github.com/LawnchairLauncher/lawnicons/releases). -2. Tap "Request icons". The button appears when you are missing at least one icon. After that, our request form will open with a response ready to be submit. +2. Tap "Request icons". After that, our request form will open with a response ready to be submit. 3. Submit the response. You can copy the submitted activities [from our table](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey=&gid=1039095616#gid=1039095616) (sorted by date). ### Using `adb` diff --git a/README.md b/README.md index e622d77193b..7adfaf751c7 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Lawnicons is an icon pack developed by the Lawnchair team and supported by our community. Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. -Lawnicons is best used [on the latest version of Lawnchair](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style` and choosing the desired option. +Lawnicons is best used [on the latest version of Lawnchair](https://play.google.com/store/apps/details?id=app.lawnchair.play). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style` and choosing the desired option. ## Download From 3d3f9f35c5d8125ff8c036dfee79348cec367f81 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:10:19 +0800 Subject: [PATCH 455/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.19 (#2453) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d32f4cdd1a8..a8245949469 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.18", + "io.nlopez.compose.rules:ktlint:0.4.19", ), ).editorConfigOverride( mapOf( From db08bb2a91568d6b8727ddc5ecf900d41b78ce8f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:10:27 +0800 Subject: [PATCH 456/527] Update dependency gradle to v8.11.1 (#2454) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 82dd18b2043..eb1a55be0e1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=57dafb5c2622c6cc08b993c85b7c06956a2f53536432a30ead46166dbca0f1e9 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 90eef5af715117895b01dc4df7a3922b260aa2ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:10:36 +0800 Subject: [PATCH 457/527] Update dependency commons-io:commons-io to v2.18.0 (#2456) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- svg-processor/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 18f8cc218f6..9673a1624b1 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -10,5 +10,5 @@ application { dependencies { implementation("com.android.tools:sdk-common:31.7.2") implementation("org.dom4j:dom4j:2.1.4") - implementation("commons-io:commons-io:2.17.0") + implementation("commons-io:commons-io:2.18.0") } From d71c96842230b215fe2ed377c9265675b1bdf3b3 Mon Sep 17 00:00:00 2001 From: FREAKINGDAN Date: Thu, 21 Nov 2024 20:44:10 +0800 Subject: [PATCH 458/527] update the appfilter.xml to have an icon that looks similar (#2458) The Smart app (com.smart.consumer.app) got updated to have its classes to launch the app changed --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a5325adc8ac..a20f8b46bd7 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -10298,6 +10298,7 @@ + From d5ebce38a0adafd713e1945c56639af54d5d6097 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 22 Nov 2024 02:35:53 +0300 Subject: [PATCH 459/527] +3 links and correction of another PR (#2459) Co-authored-by: elisenlebkuch <127782512+elisenlebkuch@users.noreply.github.com> --- app/assets/appfilter.xml | 13 ++- ...ageos_music.svg => lineageos_music_11.svg} | 0 svgs/lineageos_music_12.svg | 61 ++++++++++ svgs/open_note.svg | 105 ++++++++++++++++++ svgs/revenge_manager.svg | 43 +++++++ 5 files changed, 219 insertions(+), 3 deletions(-) rename svgs/{lineageos_music.svg => lineageos_music_11.svg} (100%) create mode 100644 svgs/lineageos_music_12.svg create mode 100644 svgs/open_note.svg create mode 100644 svgs/revenge_manager.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a20f8b46bd7..b6dbdeb0b2b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5767,7 +5767,8 @@ - + + @@ -7704,6 +7705,7 @@ + @@ -7715,6 +7717,7 @@ + @@ -9140,6 +9143,7 @@ + @@ -9716,6 +9720,7 @@ + @@ -10708,6 +10713,7 @@ + @@ -10893,8 +10899,8 @@ - + @@ -11055,6 +11061,7 @@ + @@ -13341,6 +13348,7 @@ + @@ -13575,5 +13583,4 @@ - diff --git a/svgs/lineageos_music.svg b/svgs/lineageos_music_11.svg similarity index 100% rename from svgs/lineageos_music.svg rename to svgs/lineageos_music_11.svg diff --git a/svgs/lineageos_music_12.svg b/svgs/lineageos_music_12.svg new file mode 100644 index 00000000000..136040d9f93 --- /dev/null +++ b/svgs/lineageos_music_12.svg @@ -0,0 +1,61 @@ + + + + + + + + + diff --git a/svgs/open_note.svg b/svgs/open_note.svg new file mode 100644 index 00000000000..bde6644462b --- /dev/null +++ b/svgs/open_note.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + diff --git a/svgs/revenge_manager.svg b/svgs/revenge_manager.svg new file mode 100644 index 00000000000..fbbf8aafe59 --- /dev/null +++ b/svgs/revenge_manager.svg @@ -0,0 +1,43 @@ + + + + + + From c3f882cd1b2c941affbdcce915f6b036837412cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Nov 2024 10:09:13 +0800 Subject: [PATCH 460/527] Update Kotlin and KSP (#2465) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a8245949469..7d4a30b2ad2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,10 +3,10 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.7.2" apply false - id("org.jetbrains.kotlin.android") version "2.0.21" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" - id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21" apply false - id("com.google.devtools.ksp") version "2.0.21-1.0.28" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" + id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false + id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false id("com.google.dagger.hilt.android") version "2.52" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false From c773e058e47a75a4e212232e9af8f5b6056f3bf3 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 28 Nov 2024 14:47:57 +0300 Subject: [PATCH 461/527] Small update for icon_rebrand.yml (#2468) --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index edb0aebd97c..65dfccbf3d0 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -7,10 +7,10 @@ body: attributes: label: Icons description: | - — search the current icon and application name in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml). For example, you found "...**drawable="ladb" name="ADB Shell" />**". The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg) and the application name is **ADB Shell**. - — provide the new icon and application name (if changed). + **Please specify which icon and app name need to be updated and how** + You can find the current icon and application name in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml). For example, you found "...**drawable="ladb" name="ADB Shell" />**". The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg) and the application name is **ADB Shell**. - **Example** + **Sample response** Now: Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) New: X, [fresh icon](https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png) From e93b1f63ffac932c5395b107ffa0a441f4fa4f61 Mon Sep 17 00:00:00 2001 From: John <136599603+Johny-adri2@users.noreply.github.com> Date: Sat, 30 Nov 2024 09:22:09 +0300 Subject: [PATCH 462/527] +3 icons (#2466) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update appfilter.xml * Add files via upload * Add files via upload * Add files via upload * Update appfilter.xml * Name fix * Fixing everything except the color * Rec Room icon addition * Update appfilter.xml * Add files via upload * fixed the stroke joins and end caps * Add files via upload * fixed the size * Fix * +3 SVGs * +3 icons * Rework * Cleaning * animated_sticker_maker.svg update * disabler.svg update * simple_reboot.svg update * disabler.svg — minor fix * disabler.svg — redesigned paths to remove artifacts --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 3 +++ svgs/animated_sticker_maker.svg | 1 + svgs/disabler.svg | 1 + svgs/simple_reboot.svg | 1 + 4 files changed, 6 insertions(+) create mode 100644 svgs/animated_sticker_maker.svg create mode 100644 svgs/disabler.svg create mode 100644 svgs/simple_reboot.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b6dbdeb0b2b..8d869c18dfe 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -13583,4 +13583,7 @@ + + + diff --git a/svgs/animated_sticker_maker.svg b/svgs/animated_sticker_maker.svg new file mode 100644 index 00000000000..8f322f9adbd --- /dev/null +++ b/svgs/animated_sticker_maker.svg @@ -0,0 +1 @@ + diff --git a/svgs/disabler.svg b/svgs/disabler.svg new file mode 100644 index 00000000000..08243326bea --- /dev/null +++ b/svgs/disabler.svg @@ -0,0 +1 @@ + diff --git a/svgs/simple_reboot.svg b/svgs/simple_reboot.svg new file mode 100644 index 00000000000..d9c129e0761 --- /dev/null +++ b/svgs/simple_reboot.svg @@ -0,0 +1 @@ + From 533240b2e0bf70728158a7eb80db21a01c92e38d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 10:57:18 +0800 Subject: [PATCH 463/527] Update AGP (#2472) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7d4a30b2ad2..45f387ad84d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.7.2" apply false + id("com.android.application") version "8.7.3" apply false id("org.jetbrains.kotlin.android") version "2.1.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 9673a1624b1..b9c0002cf76 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.7.2") + implementation("com.android.tools:sdk-common:31.7.3") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.18.0") } From 14fc45a986661d58ad6f0067cce6001d4ae1b052 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 10:57:26 +0800 Subject: [PATCH 464/527] Update Hilt to v2.53 (#2473) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2ff9d0d265f..5409088b39e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,7 +157,7 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") - val hiltVersion = "2.52" + val hiltVersion = "2.53" implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") diff --git a/build.gradle.kts b/build.gradle.kts index 45f387ad84d..51b2342990d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false - id("com.google.dagger.hilt.android") version "2.52" apply false + id("com.google.dagger.hilt.android") version "2.53" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false From 6aef992a9cccc175b665baa1eeb6e7a69dbf0cb0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:57:30 +0800 Subject: [PATCH 465/527] Update dependency androidx.navigation:navigation-compose to v2.8.5 (#2481) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5409088b39e..6963df9e668 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.4") + implementation("androidx.navigation:navigation-compose:2.8.5") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") From 71be5aa189aafdbfaf676fea46ab29153ad14218 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:58:06 +0800 Subject: [PATCH 466/527] Update dependency androidx.compose:compose-bom to v2024.12.01 (#2482) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6963df9e668..c899578802a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.3") - implementation(platform("androidx.compose:compose-bom:2024.11.00")) + implementation(platform("androidx.compose:compose-bom:2024.12.01")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From cb0b27d0dccd50c5166c8046cedebae4518ad7c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:59:05 +0800 Subject: [PATCH 467/527] Update Hilt to v2.53.1 (#2478) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c899578802a..5678fcf45c1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,7 +157,7 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") - val hiltVersion = "2.53" + val hiltVersion = "2.53.1" implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") diff --git a/build.gradle.kts b/build.gradle.kts index 51b2342990d..7538aacbaec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false - id("com.google.dagger.hilt.android") version "2.53" apply false + id("com.google.dagger.hilt.android") version "2.53.1" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false From 4cc6fd540100f7e9e04daec1845f7e6f2da5a371 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 07:06:06 +0000 Subject: [PATCH 468/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.22 (#2480) * Update dependency io.nlopez.compose.rules:ktlint to v0.4.22 * Remove ktlint:compose:modifier-composable-check --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Goooler --- .../lawnicons/ui/components/core/placeholder/Placeholder.kt | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/placeholder/Placeholder.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/placeholder/Placeholder.kt index 122fc8e85c5..975b468365d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/placeholder/Placeholder.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/placeholder/Placeholder.kt @@ -104,7 +104,7 @@ object PlaceholderDefaults { * on/off screen. The boolean parameter defined for the transition is [visible]. */ // TODO: need to migrate to Modifier.Node, see https://mrmans0n.github.io/compose-rules/rules/#avoid-modifier-extension-factory-functions -@Suppress("ktlint:compose:modifier-composable-check", "ktlint:compose:modifier-composed-check") +@Suppress("ktlint:compose:modifier-composed-check") @Composable fun Modifier.placeholder( visible: Boolean, diff --git a/build.gradle.kts b/build.gradle.kts index 7538aacbaec..fd8b7980d91 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.19", + "io.nlopez.compose.rules:ktlint:0.4.22", ), ).editorConfigOverride( mapOf( From 731b009b07b51eec0187df5d2fb4542a2ced46c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:55:58 +0800 Subject: [PATCH 469/527] Update plugin com.gradle.develocity to v3.19 (#2483) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index e32e7c13292..cfd67b7dbb0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.18.2" + id("com.gradle.develocity") version "3.19" } develocity { From 76fdbcf431940f470c392d8faa06ffc6d356225e Mon Sep 17 00:00:00 2001 From: Aditya <111834313+Aditya137x@users.noreply.github.com> Date: Mon, 16 Dec 2024 06:28:46 +0530 Subject: [PATCH 470/527] Update appfilter.xml (#2475) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8d869c18dfe..dea309e7f26 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1117,6 +1117,7 @@ + From a64b01843aab899063c0a6a90fe0a80eecf09753 Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:14:46 +0900 Subject: [PATCH 471/527] +1 icon (#2470) `P:h Diver` `com.NextFloor.phdiver` ![ph_diver](svgs/ph_diver.svg) --- app/assets/appfilter.xml | 1 + svgs/ph_diver.svg | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 svgs/ph_diver.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index dea309e7f26..0be891f6c78 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -7859,6 +7859,7 @@ + diff --git a/svgs/ph_diver.svg b/svgs/ph_diver.svg new file mode 100644 index 00000000000..0f573e395ab --- /dev/null +++ b/svgs/ph_diver.svg @@ -0,0 +1,3 @@ + + + From 2cd40e902d231cc70140acef3b84a318153c697a Mon Sep 17 00:00:00 2001 From: Naga Srinath <73869693+n45dev@users.noreply.github.com> Date: Mon, 16 Dec 2024 07:58:50 +0530 Subject: [PATCH 472/527] +1 icon, + 2 links (#2485) * +2 links Added links for com.neoteric.gamespace & co.aospa.dolby * +1 icon Added icon for Nothing Gallery and also modified link for co.aospa.dolby * Updated links for Wikipedia * Fixed stroke in nothing_gallery.svg * Improved nothing_gallery.svg * Update nothing_gallery.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 5 +++++ svgs/nothing_gallery.svg | 1 + 2 files changed, 6 insertions(+) create mode 100644 svgs/nothing_gallery.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 0be891f6c78..d5976515e74 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2958,6 +2958,7 @@ + @@ -4058,6 +4059,7 @@ + @@ -7372,6 +7374,7 @@ + @@ -12640,6 +12643,8 @@ + + diff --git a/svgs/nothing_gallery.svg b/svgs/nothing_gallery.svg new file mode 100644 index 00000000000..45fba73f8be --- /dev/null +++ b/svgs/nothing_gallery.svg @@ -0,0 +1 @@ + From ce46f2703d65eb386fa7ebf49ab6001aff5edda8 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:01:52 +1100 Subject: [PATCH 473/527] + 5 updates, + 10 links, + 1 icon (#2484) * + 5 updates, + 9 links, + 1 icon * + 1 update * + 1 link, + 1 icon * Update per review [1] --- app/assets/appfilter.xml | 53 ++++++++++++-------- svgs/a101.svg | 41 ++++++++++++++++ svgs/a101_yeni.svg | 1 - svgs/{radarbox.svg => airnav_radar.svg} | 0 svgs/image_toolbox.svg | 42 +++++++++++++++- svgs/innertune_fork.svg | 24 ++++++++++ svgs/skycards.svg | 25 ++++++++++ svgs/telegram_monet.svg | 1 - svgs/tgmonet_theme.svg | 64 +++++++++++++++++++++++++ 9 files changed, 227 insertions(+), 24 deletions(-) create mode 100644 svgs/a101.svg delete mode 100644 svgs/a101_yeni.svg rename svgs/{radarbox.svg => airnav_radar.svg} (100%) create mode 100644 svgs/innertune_fork.svg create mode 100644 svgs/skycards.svg delete mode 100644 svgs/telegram_monet.svg create mode 100644 svgs/tgmonet_theme.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index d5976515e74..3e2eab7768f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -130,8 +130,8 @@ + - @@ -298,6 +298,8 @@ + + @@ -728,6 +730,14 @@ + + + + + + + + @@ -4519,6 +4529,7 @@ + @@ -5042,7 +5053,7 @@ - + @@ -7440,6 +7451,7 @@ + @@ -8879,8 +8891,6 @@ - - @@ -10254,6 +10264,7 @@ + @@ -11071,23 +11082,6 @@ - - - - - - - - - - - - - - - - - @@ -11336,6 +11330,23 @@ + + + + + + + + + + + + + + + + + diff --git a/svgs/a101.svg b/svgs/a101.svg new file mode 100644 index 00000000000..f71ec40fbee --- /dev/null +++ b/svgs/a101.svg @@ -0,0 +1,41 @@ + + + + + + + + + + diff --git a/svgs/a101_yeni.svg b/svgs/a101_yeni.svg deleted file mode 100644 index 93fede66446..00000000000 --- a/svgs/a101_yeni.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/radarbox.svg b/svgs/airnav_radar.svg similarity index 100% rename from svgs/radarbox.svg rename to svgs/airnav_radar.svg diff --git a/svgs/image_toolbox.svg b/svgs/image_toolbox.svg index ebb131b0a89..2eecd466458 100644 --- a/svgs/image_toolbox.svg +++ b/svgs/image_toolbox.svg @@ -1 +1,41 @@ - \ No newline at end of file + + diff --git a/svgs/innertune_fork.svg b/svgs/innertune_fork.svg new file mode 100644 index 00000000000..f678368050b --- /dev/null +++ b/svgs/innertune_fork.svg @@ -0,0 +1,24 @@ + + diff --git a/svgs/skycards.svg b/svgs/skycards.svg new file mode 100644 index 00000000000..52dc19abebc --- /dev/null +++ b/svgs/skycards.svg @@ -0,0 +1,25 @@ + + diff --git a/svgs/telegram_monet.svg b/svgs/telegram_monet.svg deleted file mode 100644 index cfd252505da..00000000000 --- a/svgs/telegram_monet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/tgmonet_theme.svg b/svgs/tgmonet_theme.svg new file mode 100644 index 00000000000..24ad6a834c4 --- /dev/null +++ b/svgs/tgmonet_theme.svg @@ -0,0 +1,64 @@ + + + + + + + + + From 2ed2675694295e74a48ac922527febfcc6672a91 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:15:50 +0800 Subject: [PATCH 474/527] Reorganize project files, cleanup code --- .../app/lawnchair/lawnicons/model/IconInfo.kt | 3 + .../ui/components/ExternalLinkRow.kt | 2 + .../ui/components/core/LawniconsScaffold.kt | 4 +- .../lawnicons/ui/components/core/ListRow.kt | 95 ++++++++----------- .../lawnicons/ui/components/core/TopAppBar.kt | 6 +- .../ui/components/home/ClickableIcon.kt | 6 +- ...conRequestFAB.kt => IconRequestHandler.kt} | 0 .../ui/components/home/PlaceholderUI.kt | 2 + .../home/{ => iconpreview}/IconInfoSheet.kt | 44 ++++++--- .../home/{ => iconpreview}/IconPreview.kt | 18 +++- .../home/{ => iconpreview}/IconPreviewGrid.kt | 18 +++- .../ui/components/home/search/SearchBar.kt | 28 +++--- .../components/home/search/SearchContents.kt | 4 +- .../lawnicons/ui/destination/Contributors.kt | 25 +++++ .../lawnicons/ui/destination/Home.kt | 11 ++- .../lawnicons/ui/destination/NewIcons.kt | 4 +- .../lawnicons/ui/util/ModifierExtensions.kt | 43 +++++++++ .../lawnicons/helper/AppfilterDiffCreator.kt | 2 +- 18 files changed, 210 insertions(+), 105 deletions(-) rename app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/{IconRequestFAB.kt => IconRequestHandler.kt} (100%) rename app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/{ => iconpreview}/IconInfoSheet.kt (90%) rename app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/{ => iconpreview}/IconPreview.kt (86%) rename app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/{ => iconpreview}/IconPreviewGrid.kt (93%) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/ModifierExtensions.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 6661e3118ef..c1ad53e9976 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -1,5 +1,7 @@ package app.lawnchair.lawnicons.model +import kotlinx.serialization.Serializable + /** * Data class to hold information about an icon. * @@ -73,6 +75,7 @@ fun IconInfo.getFirstLabelAndComponent(): LabelAndComponent { * @property label The user-facing label associated with the component. * @property componentName The name of the component, typically a fully qualified class name. */ +@Serializable data class LabelAndComponent( val label: String, val componentName: String, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ExternalLinkRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ExternalLinkRow.kt index 7f8735784cb..590a3324990 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ExternalLinkRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/ExternalLinkRow.kt @@ -18,6 +18,7 @@ fun ExternalLinkRow( background: Boolean = false, first: Boolean = false, last: Boolean = false, + startIcon: @Composable (() -> Unit)? = null, ) { val context = LocalContext.current val onClick = @@ -35,6 +36,7 @@ fun ExternalLinkRow( divider = divider, label = name, onClick = onClick, + startIcon = startIcon, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt index 4bd3d20a073..c70e1612e24 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/LawniconsScaffold.kt @@ -15,7 +15,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.ui.components.home.ClickableIcon +import app.lawnchair.lawnicons.ui.components.home.NavigationIconButton import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.toPaddingValues @@ -39,7 +39,7 @@ fun LawniconsScaffold( scrollBehavior = scrollBehavior, title = title, navigationIcon = { - ClickableIcon( + NavigationIconButton( onClick = onBack, imageVector = Icons.AutoMirrored.Rounded.ArrowBack, size = 40.dp, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt index 9b5cb14ddb2..a74e737b2d3 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/ListRow.kt @@ -20,7 +20,10 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.ui.util.thenIf +import app.lawnchair.lawnicons.ui.util.thenIfNotNull private val basePadding = 16.dp @@ -47,55 +50,47 @@ fun ListRow( val bottomCornerRadius = if (last) 16.dp else 0.dp val basePaddingPx = with(LocalDensity.current) { basePadding.toPx() } + val backgroundColor = MaterialTheme.colorScheme.surfaceContainer + Box( modifier = modifier .fillMaxWidth() - .then( - if (enforceHeight) { - Modifier.height(if (tall) 72.dp else 56.dp) - } else { - Modifier - }, - ) - .then( - if (background) { - Modifier - .padding(horizontal = basePadding) - .clip( - RoundedCornerShape( - topStart = topCornerRadius, - topEnd = topCornerRadius, - bottomStart = bottomCornerRadius, - bottomEnd = bottomCornerRadius, - ), - ) - .background( - MaterialTheme.colorScheme.surfaceContainer, - ) - } else { - Modifier - }, - ) - .then( - if (divider) { - Modifier.drawBehind { - drawLine( - strokeWidth = dividerHeightPx, - color = dividerColor, - start = Offset( - x = basePaddingPx, - y = size.height - dividerHeightPx / 2, - ), - end = Offset( - x = size.width - basePaddingPx, - y = size.height - dividerHeightPx / 2, - ), - ) - } - } else { - Modifier - }, - ), + .semantics( + mergeDescendants = true, + ) {} + .thenIf(enforceHeight) { + Modifier.height(if (tall) 72.dp else 56.dp) + } + .thenIf(background) { + padding(horizontal = basePadding) + .clip( + RoundedCornerShape( + topStart = topCornerRadius, + topEnd = topCornerRadius, + bottomStart = bottomCornerRadius, + bottomEnd = bottomCornerRadius, + ), + ) + .background( + backgroundColor, + ) + } + .thenIf(divider) { + drawBehind { + drawLine( + strokeWidth = dividerHeightPx, + color = dividerColor, + start = Offset( + x = basePaddingPx, + y = size.height - dividerHeightPx / 2, + ), + end = Offset( + x = size.width - basePaddingPx, + y = size.height - dividerHeightPx / 2, + ), + ) + } + }, ) { Content( label = label, @@ -121,13 +116,7 @@ private fun Content( verticalAlignment = Alignment.CenterVertically, modifier = modifier .fillMaxSize() - .then( - if (onClick != null) { - Modifier.clickable(onClick = onClick) - } else { - Modifier - }, - ) + .thenIfNotNull(onClick) { clickable(onClick = it) } .padding(horizontal = basePadding), ) { if (icon != null) { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/TopAppBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/TopAppBar.kt index 79feb3f259f..ea95032f581 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/TopAppBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/core/TopAppBar.kt @@ -12,7 +12,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import app.lawnchair.lawnicons.ui.components.home.ClickableIcon +import app.lawnchair.lawnicons.ui.components.home.NavigationIconButton import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @@ -53,7 +53,7 @@ private fun SmallTopAppBarPreview() { LawniconsTheme { TopAppBar( navigationIcon = { - ClickableIcon( + NavigationIconButton( onClick = {}, imageVector = Icons.AutoMirrored.Rounded.ArrowBack, size = 40.dp, @@ -74,7 +74,7 @@ private fun LargeTopAppBarPreview() { LawniconsTheme { TopAppBar( navigationIcon = { - ClickableIcon( + NavigationIconButton( onClick = {}, imageVector = Icons.AutoMirrored.Rounded.ArrowBack, size = 40.dp, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/ClickableIcon.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/ClickableIcon.kt index be3b3d5e58e..a8ed95cf140 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/ClickableIcon.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/ClickableIcon.kt @@ -20,7 +20,7 @@ import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @Composable -fun ClickableIcon( +fun NavigationIconButton( onClick: () -> Unit, imageVector: ImageVector, modifier: Modifier = Modifier, @@ -44,9 +44,9 @@ fun ClickableIcon( @PreviewLawnicons @Composable -private fun ClickableIconPreview() { +private fun NavigationIconButtonPreview() { LawniconsTheme { - ClickableIcon( + NavigationIconButton( imageVector = Icons.Rounded.Clear, size = 52.dp, onClick = {}, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt similarity index 100% rename from app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt rename to app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt index 36301c012f5..06f43c80a21 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt @@ -47,6 +47,8 @@ import app.lawnchair.lawnicons.ui.components.core.placeholder.PlaceholderHighlig import app.lawnchair.lawnicons.ui.components.core.placeholder.fade import app.lawnchair.lawnicons.ui.components.core.placeholder.placeholder import app.lawnchair.lawnicons.ui.components.core.placeholder.shimmer +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconPreviewGridPadding +import app.lawnchair.lawnicons.ui.components.home.iconpreview.iconColor import app.lawnchair.lawnicons.ui.util.toPaddingValues @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconInfoSheet.kt similarity index 90% rename from app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt rename to app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconInfoSheet.kt index c79a5685d7d..c5ccac6e6ed 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconInfoSheet.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconInfoSheet.kt @@ -1,4 +1,20 @@ -package app.lawnchair.lawnicons.ui.components.home +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.components.home.iconpreview import android.content.Intent import androidx.compose.foundation.layout.Arrangement @@ -214,19 +230,17 @@ private fun IconInfoListRow( label: String, componentNames: List, ) { - ListRow( - label = { - SelectionContainer { + SelectionContainer { + ListRow( + label = { Text( text = label, maxLines = 2, overflow = TextOverflow.Ellipsis, ) - } - }, - description = { - Spacer(Modifier.height(4.dp)) - SelectionContainer { + }, + description = { + Spacer(Modifier.height(4.dp)) Column { componentNames.forEach { Text( @@ -238,12 +252,12 @@ private fun IconInfoListRow( Spacer(Modifier.height(6.dp)) } } - } - }, - divider = false, - enforceHeight = false, - ) - Spacer(Modifier.height(16.dp)) + }, + divider = false, + enforceHeight = false, + ) + Spacer(Modifier.height(16.dp)) + } } @PreviewLawnicons diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt similarity index 86% rename from app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt rename to app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt index 8847e7801de..1b581087158 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt @@ -1,4 +1,20 @@ -package app.lawnchair.lawnicons.ui.components.home +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.components.home.iconpreview import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreviewGrid.kt similarity index 93% rename from app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt rename to app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreviewGrid.kt index 71579804566..aa2002e9ec5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreviewGrid.kt @@ -1,4 +1,20 @@ -package app.lawnchair.lawnicons.ui.components.home +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.components.home.iconpreview import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateFloatAsState diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 00bf7162860..21586cbede0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -44,10 +44,11 @@ import androidx.compose.ui.zIndex import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.SearchMode -import app.lawnchair.lawnicons.ui.components.home.ClickableIcon +import app.lawnchair.lawnicons.ui.components.home.NavigationIconButton import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons import app.lawnchair.lawnicons.ui.util.SampleData +import app.lawnchair.lawnicons.ui.util.thenIf import app.lawnchair.lawnicons.ui.util.toPaddingValues @Composable @@ -112,24 +113,17 @@ fun LawniconsSearchBar( content: @Composable (() -> Unit), ) { var active by rememberSaveable { mutableStateOf(false) } + val padding = WindowInsets.navigationBars.toPaddingValues( + additionalStart = 16.dp, + additionalEnd = 16.dp, + ) Box( modifier = modifier .animateContentSize() - .then( - if (isExpandedScreen) { - Modifier - .padding( - WindowInsets.navigationBars.toPaddingValues( - additionalStart = 16.dp, - additionalEnd = 16.dp, - ), - ) - .statusBarsPadding() - } else { - Modifier - }, - ) + .thenIf(isExpandedScreen) { + padding(padding).statusBarsPadding() + } .semantics { isTraversalGroup = true } @@ -262,7 +256,7 @@ internal fun SearchIcon( onButtonClick: () -> Unit, ) { if (active) { - ClickableIcon( + NavigationIconButton( imageVector = Icons.AutoMirrored.Rounded.ArrowBack, onClick = onButtonClick, ) @@ -282,7 +276,7 @@ internal fun SearchActionButton( if (it) { navigateContent(onNavigate) } else { - ClickableIcon( + NavigationIconButton( onClick = onClear, imageVector = Icons.Rounded.Close, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 62b18cf9e61..755ff0a127d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -41,8 +41,8 @@ import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.model.getFirstLabelAndComponent -import app.lawnchair.lawnicons.ui.components.home.IconInfoSheet -import app.lawnchair.lawnicons.ui.components.home.IconPreview +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconInfoSheet +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconPreview @Composable fun SearchContents( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt index 1a677077f2e..e96890bfc90 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt @@ -3,19 +3,28 @@ package app.lawnchair.lawnicons.ui.destination import android.content.Intent import android.net.Uri import androidx.compose.animation.Crossfade +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -125,6 +134,22 @@ private fun ContributorList( last = true, divider = false, url = CONTRIBUTOR_URL, + startIcon = { + Box( + modifier = Modifier + .size(32.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.surfaceVariant), + contentAlignment = Alignment.Center, + ) { + Icon( + painter = painterResource(R.drawable.github_foreground), + contentDescription = null, + modifier = Modifier + .size(24.dp), + ) + } + }, ) } item { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 8a4981aae31..4daa4346a1a 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -23,16 +23,16 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.repository.preferenceManager -import app.lawnchair.lawnicons.ui.components.home.AppBarListItem import app.lawnchair.lawnicons.ui.components.home.DebugMenu import app.lawnchair.lawnicons.ui.components.home.HomeBottomBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBar import app.lawnchair.lawnicons.ui.components.home.HomeTopBarUiState -import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid -import app.lawnchair.lawnicons.ui.components.home.IconPreviewGridPadding import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB import app.lawnchair.lawnicons.ui.components.home.NewIconsCard import app.lawnchair.lawnicons.ui.components.home.PlaceholderUI +import app.lawnchair.lawnicons.ui.components.home.iconpreview.AppBarListItem +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconPreviewGrid +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconPreviewGridPadding import app.lawnchair.lawnicons.ui.components.home.search.PlaceholderSearchBar import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @@ -85,6 +85,7 @@ private fun Home( val snackbarHostState = remember { SnackbarHostState() } val focusRequester = remember { FocusRequester() } + val prefs = preferenceManager(context) Crossfade( modifier = modifier, @@ -163,7 +164,7 @@ private fun Home( if (isExpandedScreen) { PlaceholderSearchBar() } else { - PlaceholderUI(newIconsInfoModel.iconCount != 0) + PlaceholderUI(prefs.showNewIconsCard.asState().value) } } } @@ -172,7 +173,7 @@ private fun Home( focusRequester.requestFocus() } } - val prefs = preferenceManager(context) + if (prefs.showDebugMenu.asState().value) { DebugMenu( iconInfoModel, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt index 50ecbed8c97..ecd7b957ca5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/NewIcons.kt @@ -28,8 +28,8 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.ui.components.core.LawniconsScaffold -import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid -import app.lawnchair.lawnicons.ui.components.home.IconPreviewGridPadding +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconPreviewGrid +import app.lawnchair.lawnicons.ui.components.home.iconpreview.IconPreviewGridPadding import app.lawnchair.lawnicons.viewmodel.NewIconsViewModel import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/ModifierExtensions.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/ModifierExtensions.kt new file mode 100644 index 00000000000..790969cc0d8 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/ModifierExtensions.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.util + +import androidx.compose.ui.Modifier + +/** + * Conditionally apply a [Modifier] if the [condition] is true. + * + * @param condition the condition to check + * @param other the modifier to apply if the condition is true + * @return the original modifier if the condition is false, otherwise the result of applying the [other] modifier + */ +inline fun Modifier.thenIf( + condition: Boolean, + crossinline other: Modifier.() -> Modifier, +) = if (condition) other() else this + +/** + * Conditionally apply a [Modifier] if the [value] is not null. + * + * @param value the value to check for null + * @param other the modifier to apply if the value is not null + * @return the original modifier if the value is null, otherwise the result of applying the [other] modifier with the value + */ +inline fun Modifier.thenIfNotNull( + value: T?, + crossinline other: Modifier.(T) -> Modifier, +) = if (value != null) other(value) else this diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index 1e49e4d3a24..eaed717ea0f 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -87,7 +87,7 @@ object AppfilterDiffCreator { val schema = "" if (diff.isEmpty()) { - outputFile.writeText("$schema\n") + outputFile.writeText("$schema\n") return } From 62fdfb88c1934e852740b79f8673be88d4c715d5 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 17 Nov 2024 20:23:50 +0800 Subject: [PATCH 475/527] `icontool.py` refactor --- docs/icontool_guide.md | 19 +- icontool.py | 506 +++++++++++++++++------------------------ 2 files changed, 213 insertions(+), 312 deletions(-) diff --git a/docs/icontool_guide.md b/docs/icontool_guide.md index 681b0341b0f..536adb1fb66 100644 --- a/docs/icontool_guide.md +++ b/docs/icontool_guide.md @@ -5,7 +5,7 @@ For Mac/Linux users, you can simply type `./icontool` to run the program. Otherw ## Summary of usage ```console -./icontool [-m] [-h] +./icontool [-h] add (a) svg component name link (l) svg component name remove (r, d) component [-d] @@ -13,17 +13,6 @@ For Mac/Linux users, you can simply type `./icontool` to run the program. Otherw find (f) {duplicates, unused} ``` -## General syntax -Adding the flag `-m` will generate a list item (depending on the subcommand) that looks like this: -``` -* App Name (component info) -``` - -Note that you should add it *before* the other parameters: - -:x: `python3 icontool.py add ... -m`
-:white_check_mark: `python3 icontool.py -m add ...` - ## Adding icons ```console python3 icontool.py add /path/to/icon com.app.app/com.app.app.appActivity "App Name" @@ -62,12 +51,6 @@ Note that the SVG file's name is based on the `drawable` attribute of the first Some common utilities are described below. ### Sorting appfilter.xml -> [!WARNING] -> At the moment, the sorting works with errors: duplicates and extra spaces are added. It is recommended not to use it. -```console -python3 ./icontool.py sort -``` - This will sort the `appfilter.xml` file via the `name` attribute. ### Finding duplicate entries in appfilter.xml diff --git a/icontool.py b/icontool.py index 47e2edd8821..8291def651e 100755 --- a/icontool.py +++ b/icontool.py @@ -1,351 +1,269 @@ #!/usr/bin/env python3 -import xml.etree.ElementTree as ET import argparse -import shutil import os import re - -# -# Global Variables -# -# See https://regex101.com/r/xC9Kh3/2 -PATTERN = re.compile(r"([A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+)\/([A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+)", re.IGNORECASE) - -APPFILTER_PATH = "app/assets/appfilter.xml" -SVGS_FOLDER = "svgs/" -CALENDAR_REGEX = r"(?s) .*? " - -# Helper Functions +import shutil +import xml.etree.ElementTree as ElementTree + +##### +# Global variables +##### +PATTERN = re.compile(r"([A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+)/([A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+)", + re.IGNORECASE) +APPFILTER_PATH = "./app/assets/appfilter.xml" +SVGS_FOLDER = "./svgs/" +CALENDARS_PATTERN = r'( .*?)' +LAWNICONS_PATTERN = r'\s*(.*?)\s*
' + + +##### +# Helper functions +##### def print_error(msg): - print("\033[91merror:\033[0m " + msg + "\n") + print("\033[91m" + "error:\033[0m " + msg + "\n") exit() -def print_success(): - print("\033[96msuccessfully completed task(s)\033[0m") - exit() - -# -# Logic -# -def sort_components(xml_file): - """Sorts XML data by 'name' attribute.""" - def check_calendar_components(): - calendar_stuff = re.findall(CALENDAR_REGEX, xml_file) - return True if calendar_stuff == None else False - - def get_calendar_components(): - # Always get the original file for safety - original_file = open(APPFILTER_PATH, "r", encoding="utf-8").read() - calendar_stuff = re.findall(CALENDAR_REGEX, original_file) - return calendar_stuff - - def remove_calendar_components(has_calendar): - return re.sub(CALENDAR_REGEX, "", xml_file) if has_calendar else xml_file - def read_calendar_components(xml_data, calendar_stuff): - return xml_data[:52] + calendar_stuff[0] + "\n" + xml_data[52:] + "\n" - - calendar_stuff = get_calendar_components() - pure_xml_file = remove_calendar_components(check_calendar_components()) +def check_file_existence(): + if not os.path.exists(SVGS_FOLDER): + print_error("svgs folder does not exist. Please ensure the path is correct.") + if not os.path.isfile(APPFILTER_PATH): + print_error("appfilter.xml file does not exist. Please ensure the path is correct.") - # Sort the XML by the name tag, thanks https://stackoverflow.com/a/25339725 - xml_data = ET.fromstring(pure_xml_file) - xml_data[:] = sorted(xml_data, key=lambda child: child.get("name").casefold()) - sorted_xml_data = ET.tostring(xml_data, encoding="unicode") - sorted_xml_data = '\n\n' + sorted_xml_data +def validate_component_format(component): + if not PATTERN.match(component): + print_error( + "Invalid component entry. Must be in format [PACKAGE_NAME]/[APP_ACTIVITY_NAME], e.g., package.name/component.name") + + +##### +# Primary logic +##### +def sort_xml_file(file, new_item): + # The use of strings instead of XML parsers/ElementTree is to preserve all newlines and comments in the file. + dynamic_calendars_section = re.search(CALENDARS_PATTERN, file, re.DOTALL) + if dynamic_calendars_section: + x = dynamic_calendars_section.group(0) + else: + x = "" - sorted_xml_data = read_calendar_components(sorted_xml_data, calendar_stuff) + lawnicons_section = re.search(LAWNICONS_PATTERN, file, re.DOTALL) + lawnicons_items = lawnicons_section.group(1).strip().splitlines() if lawnicons_section else [] - return sorted_xml_data + if new_item: + lawnicons_items.append(new_item) -def check_lawnicons_corruption(): - reply_reason = "this may be due to a broken local copy of lawnicons. please clone lawnicons again." + lawnicons_items_sorted = sorted( + [" " + line.strip() for line in lawnicons_items if ' 1) and not ("calendar" in i)} - - if len(duplicates) == 0: - print("no duplicates found") - return - - print("duplicates:") - for i in duplicates: - print("* " + i) - - def find_unused_icons(): - drawables = [] - - for i in root: - drawable = str(i.attrib.get("drawable", None)) + ".svg" - drawables.append(drawable) - - unused_list = [] - - for i in svgs: - if i not in drawables: - if not i.startswith("themed_icon_calendar_"): - unused_list.append(i) - - if len(unused_list) == 0: - print("no unused svg files found") - return - - print("unused svg files:") - for i in unused_list: print("* " + i) - - match mode: - case "duplicates": - find_duplicates() - - case "unused": - find_unused_icons() - - case _: - print_error("you must specify a mode {duplicates,unused}") +def add_or_link_component(link_mode, svg, component, name): + validate_component_format(component) -def sort_logic(): - # print("sorting icons...") - print("due to several issues, sorting icons manually is temporalily disabled. an alternative is to add an icon first to automatically sort appfilter.xml") - exit() - # xml_file = open(APPFILTER_PATH, "r", encoding="utf-8").read() - # sorted_data = sort_components(xml_file) + def is_readable(file_path): + return os.path.isfile(file_path) and os.access(file_path, os.R_OK) - # with open(APPFILTER_PATH, "w", encoding="utf-8") as f: - # f.write(sorted_data) + def prompt_user_for_replacement(svg_file): + options = ["y", "n", "l"] + while True: + user_input = input( + f"\033[93mwarning\033[0m: svg \033[4m{svg_file}\033[0m already exists in the svgs directory. Replace? (Yes/No/Link) [N] ").lower() + if user_input in options: + return user_input + print("Invalid input, please enter 'y', 'n', or 'l'.") -def parse_component(link_mode, svg, component, name, show_message): - # - # Initialization - # + def copy_svg_to_svgs_folder(svg_file, svg_file_in_folder): + try: + shutil.copyfile(svg_file, svg_file_in_folder) + except shutil.SameFileError: + print_error( + f"The source and destination SVG are identical: '{os.path.basename(svg_file)}'") + except (PermissionError, FileNotFoundError) as e: + print_error(f"Error copying file: {str(e)}") + except Exception as e: + print_error(f"Unexpected error while copying file: {str(e)}") + + # SVG checks if not svg.endswith(".svg"): svg += ".svg" - basename = os.path.basename(svg) - if not PATTERN.match(component): - print_error("invalid component entry. must be in format \033[4m[PACKAGE_NAME]/[APP_ACTIVITY_NAME]\033[0m, i.e: package.name/component.name") - - # Link mode true if link_mode: - if not os.path.isfile(SVGS_FOLDER + svg): - print_error(f"svg '{svg}' doesn't exist in the svgs directory.") - - # Link mode false + if not is_readable(os.path.join(SVGS_FOLDER, svg)): + print_error(f"SVG '{svg}' doesn't exist in the svgs directory.") else: - if not os.path.isfile(svg): - path = f"directory `{os.path.dirname(svg)}/`" - print(path) - if path == "directory `.`" or path == "directory ``": - path = "current directory" - - print_error(f"svg '{basename}' doesn't exist in {path}. check if the file exists and try again.") - - if os.path.isfile(SVGS_FOLDER + basename): - user_input = input(f"\033[93mwarning\033[0m: svg \033[4m{basename}\033[0m already exists in the svgs directory. replace? (Yes/No/Link) [N] ").lower() - if user_input == "" or user_input[0] == "n": + if not is_readable(svg): + print_error(f"SVG '{basename}' doesn't exist in the current directory.") + + # Handle file replacement + if is_readable(os.path.join(SVGS_FOLDER, basename)): + prompt_input = prompt_user_for_replacement(basename) + if prompt_input == "n": exit() - - if user_input[0] == "l": - parse_component(True, basename, component, name, show_message) + elif prompt_input == "l": + add_or_link_component(True, basename, component, name) return - - if user_input[0] != "y": exit() - - print(f"replacing {basename} in svgs folder...") - - svg_in_svgs_folder = SVGS_FOLDER + basename - - try: - shutil.copyfile(svg, svg_in_svgs_folder) - except shutil.SameFileError: - print_error(f"\033[4m{basename}\033[0m has the same contents as \033[4m{svg_in_svgs_folder}\033[0m. cannot continue") + elif prompt_input == "y": + print(f"Replacing {basename} in svgs folder...") - # - # Writing to file - # + svg_in_svgs_folder = os.path.join(SVGS_FOLDER, basename) + copy_svg_to_svgs_folder(svg, svg_in_svgs_folder) - # Remove .svg extension drawable = basename[:-4] - # xml_file the actual xml file - # line the actual xml element in string form - # pure_xml_file the xml file without the calendar declarations - xml_file = open(APPFILTER_PATH, "r", encoding="utf-8").read() - line = f' ' - pure_xml_file = re.sub(CALENDAR_REGEX, "", xml_file) - - # Add the line - edited_xml_file = pure_xml_file[:52] + line + pure_xml_file[52:] - - # Sort - sorted_xml_data = sort_components(edited_xml_file) - with open(APPFILTER_PATH, "w", encoding="utf-8") as f: - f.write(sorted_xml_data) + with open(APPFILTER_PATH, "r", encoding="utf-8") as file: + sorted_lines = sort_xml_file(file.read(), line) + with open(APPFILTER_PATH, "w", encoding="utf-8") as f: + f.write(sorted_lines) - # - # Print success message - # - with open(APPFILTER_PATH, encoding="utf-8") as file: + with open(APPFILTER_PATH, "r", encoding="utf-8") as file: lines = file.readlines() - - for number, line in enumerate(lines, 1): - if component in line: - if link_mode: - action = "linked" - else: - action = "added" - print( - f"{action} \033[92m{name}\033[0m app to \033[92m`@drawable/{drawable}`\033[0m in line \033[92m{number}\033[0m of appfilter.xml" - ) - - if show_message: - if link_mode: - print( - f"* {name} (linked `{component}` to `@drawable/{drawable}`)" - ) - continue - + for number, line in enumerate(lines, 1): + if component in line: + action = "Link" if link_mode else "Add" print( - f"* {name} (`{component}`)" + f"{action}ed \033[92m{name}\033[0m app to \033[92m`@drawable/{drawable}`\033[0m in line \033[92m{number}\033[0m of appfilter.xml" ) -def remove_component(component, do_delete, message): - pattern1 = re.compile(r"([A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+)", re.IGNORECASE) - pattern2 = PATTERN - error_msg = "invalid component name. format must be either \033[4m[PACKAGE_NAME]\033[0m or \033[4m[PACKAGE_NAME]/[APP_ACTIVITY_NAME]\033[0m" - if not pattern1.match(component): - print_error(error_msg) - elif not pattern2.match(component): - if ("/" in component): - print_error(error_msg) +def remove_component(component, delete_svg): + validate_component_format(component) with open(APPFILTER_PATH, "r", encoding="utf-8") as file: lines = file.readlines() + component_found = False with open(APPFILTER_PATH, "w", encoding="utf-8") as f: for linenumber, line in enumerate(lines, 1): if component not in line: f.write(line) - - elif component in line: + else: deleted_line = line - number = linenumber + component_found = True print( - f"removed \033[92m{component}\033[0m icon in line \033[92m{number}\033[0m" + f"Removed \033[92m{component}\033[0m icon in line \033[92m{linenumber}\033[0m") + + if not component_found: + print_error(f"Component {component} not found.") + + if delete_svg: + drawable = ElementTree.fromstring(deleted_line).get("drawable") + ".svg" + try: + os.remove(os.path.join(SVGS_FOLDER, drawable)) + print(f"Deleted \033[92m{drawable}\033[0m") + except FileNotFoundError: + print_error(f"SVG file \033[92m{drawable}\033[0m not found for deletion.") + + +def find_logic(mode): + root = ElementTree.parse(APPFILTER_PATH).getroot() + svgs = os.listdir(SVGS_FOLDER) + + def find_duplicates(root_file): + packages = [item.attrib["component"] for item in root_file] + duplicate_elements = {pkg for pkg in packages if + packages.count(pkg) > 1 and "calendar" not in pkg} + return duplicate_elements + + def find_unused_icons(root_file, svgs_list): + drawables = [f"{item.attrib.get('drawable', None)}.svg" for item in root_file] + unused_list = [ + svg_item for svg_item in svgs_list + if (svg_item not in drawables and not svg_item.startswith("themed_icon_calendar_") ) + ] + return unused_list - if message: - print(f"* {component} (removed)") - - if do_delete: - deleted_file = ET.fromstring(deleted_line).get("drawable") + ".svg" - os.remove(SVGS_FOLDER + deleted_file) - print(f"deleted \033[92m{deleted_file}\033[0m") - -# Parser Logic -def add_parser(args): - parse_component(False, args.svg, args.component, args.name, args.message) - -def link_parser(args): - parse_component(True, args.svg, args.component, args.name, args.message) - -def remove_parser(args): - remove_component(args.component, args.delete, args.message) - -def sort_parser(): - sort_logic() - -def find_parser(args): - find_logic(args.mode) - -# -# Parser Initialization -# -parser = argparse.ArgumentParser( - prog="icontool", description="a CLI tool to help contributors with adding icons. requires the use of subcommands {add,link,remove,sort,find}. for help with a specific subcommand, type 'icontool.py -h'") -parser.add_argument( - "-m", "--message", action="store_true", help="shows a list item for use in a pull request") - -subparsers = parser.add_subparsers( - help='what action icontool should use', dest="subcommand") - -parser_add = subparsers.add_parser( - "add", help='adds an icon SVG and an entry to appfilter.xml, links SVG to component', aliases=['a']) -parser_link = subparsers.add_parser( - "link", help='adds an entry to appfilter.xml, links SVG to component', aliases=['l']) -parser_remove = subparsers.add_parser( - "remove", help='removes an entry on appfilter.xml, can optionally delete SVG', aliases=['d', 'r']) -parser_sort = subparsers.add_parser( - "sort", help='sorts the appfilter.xml file by component name', aliases=['s']) -parser_find = subparsers.add_parser( - "find", help='find either duplicates in appfilter.xml or unlinked SVGs', aliases=['f']) - -# Remove parser -parser_remove.add_argument( - "component", help="the component to remove. can be [PACKAGE_NAME]/[APP_ACTIVITY_NAME] or [PACKAGE_NAME]") -parser_remove.add_argument( - "-d", "--delete", help="enables SVG deletion. SVG derived from `drawable` entry in each ``", action="store_true") - -# Add parser -parser_add.add_argument( - "svg", help="the path of the SVG file that will be added") -parser_add.add_argument( - "component", help="the component name. format must be `[PACKAGE_NAME]/[APP_ACTIVITY_NAME]`") -parser_add.add_argument( - "name", help="the displayed name of the app. if multiple lines, use a string like ``\"App Name\"`") - -# Link parser -parser_link.add_argument("svg", help="the file name of the SVG icon.") -parser_link.add_argument( - "component", help="the component name. format must be `[PACKAGE_NAME]/[APP_ACTIVITY_NAME]`") -parser_link.add_argument( - "name", help="the displayed name of the app. if multiple lines, use a string like ``\"App Name\"`") - -# No additional arguments for `sort` parser - -# Find parser -parser_find.add_argument("mode", help="the mode to use {duplicates, unused}.`duplicates` = find duplicates in appfilter.xml.`unused` = find unused files in svgs/") - -args = parser.parse_args() - -# -# Main Functions -# -check_lawnicons_corruption() - -# Match proper subcommand -match args.subcommand: - case "add" | "a": - add_parser(args) + match mode: + case "duplicates": + duplicates = find_duplicates(root) + if duplicates: + print("Duplicates found:") + for dup in duplicates: + print("* " + dup) + else: + print("No duplicates found.") - case "link" | "l": - link_parser(args) + case "unused": + unused = find_unused_icons(root, svgs) + if unused: + print("Unused SVG files:") + for svg in unused: + print("* " + svg) + else: + print("No unused SVG files found.") - case "remove" | "r" | "d": - remove_parser(args) - case "sort" | "s": - sort_parser() - - case "find" | "f": - find_parser(args) +def sort_logic(): + with open(APPFILTER_PATH, "r", encoding="utf-8") as file: + sorted_lines = sort_xml_file(file.read(), False) + with open(APPFILTER_PATH, "w", encoding="utf-8") as f: + f.write(sorted_lines) - case _: - print_error("you must specify a subcommand {add,link,remove,sort,find}") -print_success() +##### +# Parser logic +##### + +def parse_args(): + parser = argparse.ArgumentParser(prog="icontool", description="A CLI tool for managing icons.") + subparsers = parser.add_subparsers(dest="command") + + add_parser = subparsers.add_parser("add", help="Add a new component.", aliases=['a']) + add_parser.add_argument("svg", help="The name of the SVG file (without .svg extension).") + add_parser.add_argument("component", + help="Component name in format PACKAGE_NAME/ACTIVITY_NAME.") + add_parser.add_argument("name", help="Display name for the component.") + + link_parser = subparsers.add_parser("link", help="Link an existing SVG to a component.", + aliases=['l']) + link_parser.add_argument("svg", help="The name of the SVG file (without .svg extension).") + link_parser.add_argument("component", + help="Component name in format PACKAGE_NAME/ACTIVITY_NAME.") + link_parser.add_argument("name", help="Display name for the component.") + + remove_parser = subparsers.add_parser("remove", help="Remove a component.", aliases=['r', 'd']) + remove_parser.add_argument("component", help="Component name to remove.") + remove_parser.add_argument("--delete", action="store_true", + help="Delete the associated SVG file.") + + find_parser = subparsers.add_parser("find", help="Find duplicates or unused SVGs.", + aliases=['f']) + find_parser.add_argument("mode", choices=["duplicates", "unused"], + help="Mode to find duplicates or unused SVGs.") + + subparsers.add_parser("sort", help='sorts the appfilter.xml file by component name', + aliases=['s']) + + return parser.parse_args() + + +# Main Logic +check_file_existence() +args = parse_args() + +match args.command: + case "add" | "a": + add_or_link_component(False, args.svg, args.component, args.name) + case "link" | "l": + add_or_link_component(True, args.svg, args.component, args.name) + case "remove" | "r" | "d": + remove_component(args.component, args.delete) + case "find" | "f": + find_logic(args.mode) + case "sort" | "s": + sort_logic() + case _: + print_error("Invalid command. Please use add, link, remove, sort, or find.") From 2d407719e06091b3b6e53ef157642aa27de11c2f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:37:44 +0800 Subject: [PATCH 476/527] Add missing flag Fixes #2474 --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b40f1576d1f..ed7932b24fa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + From fcc7be42104eca7774e25e5f8ea3c7b1b43f4599 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 21 Dec 2024 19:35:34 +0300 Subject: [PATCH 477/527] Removed the deleted form (#2494) * Removed the deleted form * Update icon_rebrand.yml --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 4 ++-- README.md | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index 65dfccbf3d0..90fef3c5381 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -11,8 +11,8 @@ body: You can find the current icon and application name in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml). For example, you found "...**drawable="ladb" name="ADB Shell" />**". The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg) and the application name is **ADB Shell**. **Sample response** - Now: Twitter, [twitter.svg](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/) - New: X, [fresh icon](https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png) + Now: Twitter, https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/twitter.svg + New: X, https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png placeholder: Tell us what should be changed and how validations: diff --git a/README.md b/README.md index 7adfaf751c7..c4ee1c01156 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,9 @@ Please see our guidelines for information on contributing icons or code, it will [Lawnicons guidelines](CONTRIBUTING.md) • [Icon samples in Figma](https://www.figma.com/community/file/1227718471680779613) • [Popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey=&gid=609680142#gid=609680142) • [Development issues](https://github.com/LawnchairLauncher/lawnicons/issues) ## Requesting icons +> [!NOTE] +> Request acceptance is currently closed. + `Open Lawnicons 2.10+ → Tap "Request icons" → Submit the response` -[Icon request form](https://forms.gle/xt7sJhgWEasuo9TR9) • [Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) +[Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) From 6b371f907ef062e4d19a8d10a9f9e278a36761be Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:47:58 +0800 Subject: [PATCH 478/527] feat: Allow enabling/disabling icon requests This can be done via the flag at the website repo, or via the local prefs override at the debug menu. TODO: Update link once new form is placed. --- .../api/{ApiModule.kt => GithubApiModule.kt} | 2 +- .../lawnicons/api/IconRequestSettingsAPI.kt | 25 +++++++++ .../lawnicons/api/WebsiteApiModule.kt | 43 ++++++++++++++ .../lawnicons/model/IconRequestSettings.kt | 24 ++++++++ .../IconRequestSettingsRepository.kt | 26 +++++++++ .../lawnicons/repository/PreferenceManager.kt | 3 + .../lawnicons/ui/components/home/DebugMenu.kt | 14 ++++- .../ui/components/home/HomeBottomBar.kt | 2 + .../ui/components/home/IconRequestHandler.kt | 56 ++++++++++++++++--- .../lawnicons/ui/destination/Home.kt | 2 + .../lawnchair/lawnicons/ui/util/Constants.kt | 2 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 33 +++++++++++ app/src/main/res/values/strings.xml | 1 + 13 files changed, 221 insertions(+), 12 deletions(-) rename app/src/main/kotlin/app/lawnchair/lawnicons/api/{ApiModule.kt => GithubApiModule.kt} (97%) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/api/IconRequestSettingsAPI.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestSettings.kt create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRequestSettingsRepository.kt diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/ApiModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt similarity index 97% rename from app/src/main/kotlin/app/lawnchair/lawnicons/api/ApiModule.kt rename to app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt index add7a7d318a..3642d46628c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/api/ApiModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt @@ -13,7 +13,7 @@ import retrofit2.create @Module @InstallIn(SingletonComponent::class) -class ApiModule { +class GithubApiModule { @Provides @Singleton diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/IconRequestSettingsAPI.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/IconRequestSettingsAPI.kt new file mode 100644 index 00000000000..c8574dabaef --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/IconRequestSettingsAPI.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.api + +import app.lawnchair.lawnicons.model.IconRequestSettings +import retrofit2.http.GET + +interface IconRequestSettingsAPI { + @GET("lawnicons-request/settings.json") + suspend fun getIconRequestSettings(): IconRequestSettings +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt new file mode 100644 index 00000000000..4826fe1dda9 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.api + +import app.lawnchair.lawnicons.util.kotlinxJson +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton +import okhttp3.MediaType.Companion.toMediaType +import retrofit2.Retrofit +import retrofit2.converter.kotlinx.serialization.asConverterFactory +import retrofit2.create + +@Module +@InstallIn(SingletonComponent::class) +class WebsiteApiModule { + + @Provides + @Singleton + fun providesWebsiteIconRequestApi(): IconRequestSettingsAPI { + return Retrofit.Builder() + .baseUrl("https://lawnchair.app/") + .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) + .build() + .create() + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestSettings.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestSettings.kt new file mode 100644 index 00000000000..95750461f86 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconRequestSettings.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.model + +import kotlinx.serialization.Serializable + +@Serializable +data class IconRequestSettings( + val enabled: Boolean, +) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRequestSettingsRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRequestSettingsRepository.kt new file mode 100644 index 00000000000..1c4476fff2c --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRequestSettingsRepository.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.repository + +import app.lawnchair.lawnicons.api.IconRequestSettingsAPI +import javax.inject.Inject + +class IconRequestSettingsRepository @Inject constructor( + private val api: IconRequestSettingsAPI, +) { + suspend fun getEnabledState() = api.getIconRequestSettings().enabled +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index 700a06057cd..a359d03c164 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -11,6 +11,8 @@ import app.lawnchair.lawnicons.BuildConfig /** * A class that abstracts the functionality of SharedPreferences + * We use SharedPreferences to avoid the unneccesary complexity Preference DataStore has + * * @param prefs The SharedPreferences instance to use */ abstract class BasePreferenceManager( @@ -83,6 +85,7 @@ class PreferenceManager private constructor( val showFirstLaunchSnackbar = BoolPref("show_first_launch_snackbar", true) val showNewIconsCard = BoolPref("show_new_icons_card", true) val showDebugMenu = BoolPref("debug_menu", false) + val forceEnableIconRequest = BoolPref("force_icon_request", false) val currentLawniconsVersion = IntPref("current_lawnicons_version", BuildConfig.VERSION_CODE) /** diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt index e78673b78a0..1000b3399ec 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt @@ -17,7 +17,9 @@ package app.lawnchair.lawnicons.ui.components.home import android.content.Context +import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -33,6 +35,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -108,6 +111,7 @@ private fun SheetContent( SwitchPref(prefs.showDebugMenu) SwitchPref(prefs.showNewIconsCard) + SwitchPref(prefs.forceEnableIconRequest) SwitchPref(prefs.showFirstLaunchSnackbar) SimpleListRow( @@ -159,14 +163,22 @@ private fun SwitchPref( pref: BasePreferenceManager.BoolPref, modifier: Modifier = Modifier, ) { + val interactionSource = remember { MutableInteractionSource() } SimpleListRow( pref.key, endIcon = { Switch( checked = pref.asState().value, onCheckedChange = { pref.set(it) }, + interactionSource = interactionSource, ) }, - modifier = modifier, + modifier = modifier.clickable( + interactionSource = interactionSource, + indication = null, + enabled = true, + onClickLabel = null, + onClick = {}, + ), ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt index d355b29cebf..d7b5631082b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeBottomBar.kt @@ -31,6 +31,7 @@ import app.lawnchair.lawnicons.ui.util.Constants @Composable fun HomeBottomBar( context: Context, + iconRequestsEnabled: Boolean, iconRequestModel: IconRequestModel?, snackbarHostState: SnackbarHostState, onNavigate: () -> Unit, @@ -61,6 +62,7 @@ fun HomeBottomBar( IconRequestIconButton( snackbarHostState = snackbarHostState, + iconRequestsEnabled = iconRequestsEnabled, iconRequestModel = iconRequestModel, ) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt index 45bc7d3b97c..90d64cc3ded 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt @@ -48,16 +48,20 @@ import kotlinx.coroutines.launch @Composable fun IconRequestFAB( + iconRequestsEnabled: Boolean, iconRequestModel: IconRequestModel?, lazyGridState: LazyGridState, snackbarHostState: SnackbarHostState, modifier: Modifier = Modifier, ) { + val prefs = preferenceManager() val list = iconRequestModel?.list ?: emptyList() val enabled = iconRequestModel != null + val requestsEnabled = iconRequestsEnabled || prefs.forceEnableIconRequest.get() RequestHandler( enabled = enabled, + iconRequestsEnabled = requestsEnabled, iconRequestList = list, snackbarHostState = snackbarHostState, onLongClick = {}, @@ -85,17 +89,22 @@ fun IconRequestFAB( @Composable fun IconRequestIconButton( snackbarHostState: SnackbarHostState, + iconRequestsEnabled: Boolean, iconRequestModel: IconRequestModel?, modifier: Modifier = Modifier, ) { + val prefs = preferenceManager() + val list = iconRequestModel?.list ?: emptyList() val enabled = iconRequestModel != null + val requestsEnabled = iconRequestsEnabled || prefs.forceEnableIconRequest.get() val tooltipState = rememberTooltipState() val scope = rememberCoroutineScope() RequestHandler( enabled = enabled, + iconRequestsEnabled = requestsEnabled, iconRequestList = list, snackbarHostState = snackbarHostState, onLongClick = { @@ -133,6 +142,7 @@ fun IconRequestIconButton( @Composable fun RequestHandler( enabled: Boolean, + iconRequestsEnabled: Boolean, iconRequestList: List, snackbarHostState: SnackbarHostState, onLongClick: () -> Unit, @@ -151,6 +161,7 @@ fun RequestHandler( HandleTouchInteractions( enabled = enabled, + iconRequestsEnabled = iconRequestsEnabled, interactionSource = interactionSource, viewConfiguration = LocalViewConfiguration.current, context = context, @@ -180,6 +191,7 @@ fun RequestHandler( @Composable private fun HandleTouchInteractions( enabled: Boolean, + iconRequestsEnabled: Boolean, interactionSource: MutableInteractionSource, viewConfiguration: ViewConfiguration, context: Context, @@ -208,15 +220,23 @@ private fun HandleTouchInteractions( is PressInteraction.Release -> { if (!isLongClick) { - handleRequestClick( - iconRequestList, - context, - directLinkEnabled, - encodedRequestList, - requestList, - coroutineScope, - snackbarHostState, - ) + if (iconRequestsEnabled) { + handleRequestClick( + iconRequestList, + context, + directLinkEnabled, + encodedRequestList, + requestList, + coroutineScope, + snackbarHostState, + ) + } else { + openSnackbarRequestsDisabled( + context, + coroutineScope, + snackbarHostState, + ) + } } } @@ -274,6 +294,23 @@ private fun openSnackbarFirstLaunchContent( } } +private fun openSnackbarRequestsDisabled( + context: Context, + coroutineScope: CoroutineScope, + snackbarHostState: SnackbarHostState, +) { + coroutineScope.launch { + val result = snackbarHostState + .showSnackbar( + message = context.getString(R.string.icon_requests_suspended), + duration = SnackbarDuration.Short, + ) + if (result == SnackbarResult.Dismissed) { + snackbarHostState.currentSnackbarData?.dismiss() + } + } +} + private fun openSnackbarWarningContent( context: Context, list: String, @@ -308,5 +345,6 @@ private fun openLink(context: Context, link: String) { } private fun buildForm(string: String): String { + // TODO: override with new link once available return "https://docs.google.com/forms/d/e/1FAIpQLSe8ItNYse9f4z2aT1QgXkKeueVTucRdUYNhUpys5ShHPyRijg/viewform?entry.1759726669=$string" } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 4daa4346a1a..92865ee8c70 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -117,6 +117,7 @@ private fun Home( if (!isExpandedScreen) { HomeBottomBar( context = context, + iconRequestsEnabled = iconRequestsEnabled, iconRequestModel = iconRequestModel, snackbarHostState = snackbarHostState, onNavigate = onNavigateToAbout, @@ -127,6 +128,7 @@ private fun Home( floatingActionButton = { if (isExpandedScreen) { IconRequestFAB( + iconRequestsEnabled = iconRequestsEnabled, iconRequestModel = iconRequestModel, lazyGridState = lazyGridState, snackbarHostState = snackbarHostState, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt index 871c7701a12..9e1b5c60c7f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/util/Constants.kt @@ -1,7 +1,7 @@ package app.lawnchair.lawnicons.ui.util object Constants { - const val ICON_REQUEST_FORM = "https://forms.gle/xt7sJhgWEasuo9TR9" + const val ICON_REQUEST_FORM = "https://lawnchair.app/lawnicons-request" const val GITHUB = "https://github.com/LawnchairLauncher/lawnicons" const val ICON_PICKER_INTENT_ACTION = "com.novalauncher.THEME" diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index c5510c80bdb..99917aa4c18 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -1,5 +1,6 @@ package app.lawnchair.lawnicons.viewmodel +import android.util.Log import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue @@ -9,6 +10,7 @@ import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.IconRequestModel import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.repository.IconRepository +import app.lawnchair.lawnicons.repository.IconRequestSettingsRepository import app.lawnchair.lawnicons.repository.NewIconsRepository import app.lawnchair.lawnicons.ui.util.SampleData import dagger.hilt.android.lifecycle.HiltViewModel @@ -24,6 +26,8 @@ interface LawniconsViewModel { val iconRequestModel: StateFlow val newIconsInfoModel: StateFlow + var iconRequestsEnabled: Boolean + var expandSearch: Boolean val searchMode: SearchMode @@ -38,12 +42,15 @@ interface LawniconsViewModel { class LawniconsViewModelImpl @Inject constructor( private val iconRepository: IconRepository, private val newIconsRepository: NewIconsRepository, + private val iconRequestSettingsRepository: IconRequestSettingsRepository, ) : LawniconsViewModel, ViewModel() { override val iconInfoModel = iconRepository.iconInfoModel override val searchedIconInfoModel = iconRepository.searchedIconInfoModel override val iconRequestModel = iconRepository.iconRequestList override val newIconsInfoModel = newIconsRepository.newIconsInfoModel + override var iconRequestsEnabled = false + override var expandSearch by mutableStateOf(false) private var _searchMode by mutableStateOf(SearchMode.LABEL) @@ -55,6 +62,30 @@ class LawniconsViewModelImpl @Inject constructor( override val searchTerm: String get() = _searchTerm + init { + viewModelScope.launch { + val result = runCatching { + iconRequestSettingsRepository.getEnabledState() + } + + iconRequestsEnabled = when { + result.isSuccess -> { + result.getOrThrow() + } + + else -> { + // Disable icon requests, as we can't access the internet + Log.e( + "LawniconsViewModel", + "Failed to load icon request settings", + result.exceptionOrNull(), + ) + false + } + } + } + } + override fun searchIcons(query: String) { _searchTerm = query viewModelScope.launch { @@ -85,6 +116,8 @@ class DummyLawniconsViewModel : LawniconsViewModel { override val iconRequestModel = MutableStateFlow(IconRequestModel(list = listOf(), iconCount = 0)).asStateFlow() override val newIconsInfoModel = MutableStateFlow(IconInfoModel(iconInfo = list, iconCount = list.size)).asStateFlow() + override var iconRequestsEnabled = true + override var expandSearch by mutableStateOf(false) override val searchMode = SearchMode.LABEL diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 976cffe6bc0..239a9838ec9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,7 @@ Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form From ddc86418198aa46bd229817bdf3083e1410e8ee9 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 27 Dec 2024 11:57:56 +0800 Subject: [PATCH 479/527] Cleanup preferences handling --- .../lawnicons/repository/PreferenceManager.kt | 2 +- .../lawnicons/ui/components/home/DebugMenu.kt | 17 ++++++++--------- .../ui/components/home/IconRequestHandler.kt | 4 ++-- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index a359d03c164..5317e75d3e9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -11,7 +11,7 @@ import app.lawnchair.lawnicons.BuildConfig /** * A class that abstracts the functionality of SharedPreferences - * We use SharedPreferences to avoid the unneccesary complexity Preference DataStore has + * We use SharedPreferences to avoid the unnecessary complexity Preference DataStore has * * @param prefs The SharedPreferences instance to use */ diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt index 1000b3399ec..79d86b11616 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/DebugMenu.kt @@ -17,13 +17,14 @@ package app.lawnchair.lawnicons.ui.components.home import android.content.Context -import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -70,6 +71,9 @@ fun DebugMenu( ModalBottomSheet( onDismissRequest = { prefs.showDebugMenu.set(false) }, sheetState = sheetState, + dragHandle = { + Spacer(Modifier.height(22.dp)) + }, ) { SheetContent( iconInfoCount = iconInfoModel.iconInfo.size, @@ -169,16 +173,11 @@ private fun SwitchPref( endIcon = { Switch( checked = pref.asState().value, - onCheckedChange = { pref.set(it) }, + onCheckedChange = pref::set, interactionSource = interactionSource, ) }, - modifier = modifier.clickable( - interactionSource = interactionSource, - indication = null, - enabled = true, - onClickLabel = null, - onClick = {}, - ), + onClick = pref::toggle, + modifier = modifier, ) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt index 90d64cc3ded..a499bf480ee 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt @@ -57,7 +57,7 @@ fun IconRequestFAB( val prefs = preferenceManager() val list = iconRequestModel?.list ?: emptyList() val enabled = iconRequestModel != null - val requestsEnabled = iconRequestsEnabled || prefs.forceEnableIconRequest.get() + val requestsEnabled = iconRequestsEnabled || prefs.forceEnableIconRequest.asState().value RequestHandler( enabled = enabled, @@ -97,7 +97,7 @@ fun IconRequestIconButton( val list = iconRequestModel?.list ?: emptyList() val enabled = iconRequestModel != null - val requestsEnabled = iconRequestsEnabled || prefs.forceEnableIconRequest.get() + val requestsEnabled = iconRequestsEnabled || prefs.forceEnableIconRequest.asState().value val tooltipState = rememberTooltipState() val scope = rememberCoroutineScope() From 628911644b09b95391a0177a2f292555868f542b Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Fri, 27 Dec 2024 13:35:12 +0800 Subject: [PATCH 480/527] Search improvements - Improve animations when opening search bar - Temporary fix to search bar showing on tall devices; fixes #2495 - Open first item when pressing search button in IME --- .../ui/components/home/HomeTopBar.kt | 48 ++++++++++------- .../home/iconpreview/IconPreview.kt | 32 +++++++++--- .../ui/components/home/search/SearchBar.kt | 37 ++----------- .../components/home/search/SearchContents.kt | 52 ++++++++++++------- .../lawnicons/ui/destination/Home.kt | 26 +++++++--- 5 files changed, 112 insertions(+), 83 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt index 9c2b6afae38..5c82c42b366 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/HomeTopBar.kt @@ -1,11 +1,14 @@ package app.lawnchair.lawnicons.ui.components.home import androidx.compose.animation.core.animateDpAsState +import androidx.compose.animation.core.tween import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.offset import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -41,26 +44,16 @@ fun HomeTopBar( ) { val (isSearchExpanded, isExpandedScreen, searchTerm, searchMode, searchedIconInfoModel, isIconPicker) = uiState - val offset = animateDpAsState( - targetValue = if (isSearchExpanded || isExpandedScreen) { - 0.dp - } else { - (-100).dp - }, - label = "move search bar", - ) - searchedIconInfoModel?.let { - SearchBar( - modifier = modifier - .offset { - IntOffset(0, offset.value.roundToPx()) - }, + searchedIconInfoModel?.let { iconInfoModel -> + AnimatedSearchBar( + modifier = modifier, searchTerm = searchTerm, onClearSearch = onClearSearch, onModeChange = onChangeMode, onSearch = onSearchIcons, - iconInfoModel = it, + iconInfoModel = iconInfoModel, onNavigate = onNavigate, + isSearchExpanded = isSearchExpanded, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, searchMode = searchMode, @@ -72,13 +65,14 @@ fun HomeTopBar( } @Composable -private fun SearchBar( +private fun AnimatedSearchBar( searchMode: SearchMode, searchTerm: String, onSearch: (String) -> Unit, onClearSearch: () -> Unit, onModeChange: (SearchMode) -> Unit, onNavigate: () -> Unit, + isSearchExpanded: Boolean, isExpandedScreen: Boolean, isIconPicker: Boolean, onSendResult: (IconInfo) -> Unit, @@ -87,18 +81,34 @@ private fun SearchBar( modifier: Modifier = Modifier, inputFieldModifier: Modifier = Modifier, ) { + val offset = animateDpAsState( + targetValue = (if (isSearchExpanded || isExpandedScreen) 0 else -1000).dp, + label = "move search bar", + animationSpec = tween( + durationMillis = 600, + ), + ) + Column( - modifier = modifier.fillMaxWidth(), + modifier = modifier + .fillMaxWidth() + .offset { + IntOffset(0, offset.value.roundToPx()) + }, verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { + val isIconInfoShown = rememberSaveable { mutableStateOf(false) } LawniconsSearchBar( query = searchTerm, isQueryEmpty = searchTerm == "", onClear = onClearSearch, onBack = onFocusChange, + onSearch = { + isIconInfoShown.value = true + }, onQueryChange = onSearch, - iconInfoModel = iconInfoModel, + iconCount = iconInfoModel.iconCount, onNavigate = onNavigate, isExpandedScreen = isExpandedScreen, isIconPicker = isIconPicker, @@ -109,6 +119,8 @@ private fun SearchBar( onModeChange = onModeChange, iconInfo = iconInfoModel.iconInfo, onSendResult = onSendResult, + showSheet = isIconInfoShown.value, + onToggleSheet = { isIconInfoShown.value = it }, ) }, inputFieldModifier = inputFieldModifier, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt index 1b581087158..d731e3997a5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/iconpreview/IconPreview.kt @@ -65,7 +65,27 @@ fun IconPreview( isIconPicker: Boolean = false, ) { val isIconInfoShown = rememberSaveable { mutableStateOf(false) } + IconPreview( + iconInfo = iconInfo, + onSendResult = onSendResult, + modifier = modifier, + iconBackground = iconBackground, + isIconPicker = isIconPicker, + showSheet = isIconInfoShown.value, + onToggleSheet = { isIconInfoShown.value = it }, + ) +} +@Composable +fun IconPreview( + iconInfo: IconInfo, + onSendResult: (IconInfo) -> Unit, + modifier: Modifier = Modifier, + iconBackground: Color? = null, + isIconPicker: Boolean = false, + showSheet: Boolean = false, + onToggleSheet: (Boolean) -> Unit = {}, +) { Box( contentAlignment = Alignment.Center, modifier = modifier @@ -77,12 +97,12 @@ fun IconPreview( if (isIconPicker) { onSendResult(iconInfo) } else { - isIconInfoShown.value = true + onToggleSheet(true) } }, ) .background( - color = iconBackground ?: if (isIconInfoShown.value) { + color = iconBackground ?: if (showSheet) { MaterialTheme.colorScheme.surfaceVariant } else { MaterialTheme.colorScheme.iconColor @@ -100,7 +120,7 @@ fun IconPreview( icon, contentDescription = null, modifier = Modifier.fillMaxSize(0.6f), - tint = if (isIconInfoShown.value) { + tint = if (showSheet) { MaterialTheme.colorScheme.onSurfaceVariant } else { MaterialTheme.colorScheme.onPrimaryContainer @@ -111,7 +131,7 @@ fun IconPreview( painter = painterResource(iconInfo.id), contentDescription = null, modifier = Modifier.fillMaxSize(0.6f), - tint = if (isIconInfoShown.value) { + tint = if (showSheet) { MaterialTheme.colorScheme.onSurfaceVariant } else { MaterialTheme.colorScheme.onPrimaryContainer @@ -119,11 +139,11 @@ fun IconPreview( ) } } - AnimatedVisibility(isIconInfoShown.value) { + AnimatedVisibility(showSheet) { IconInfoSheet( iconInfo = iconInfo, ) { - isIconInfoShown.value = it + onToggleSheet(it) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt index 21586cbede0..bf87a7222ea 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchBar.kt @@ -42,7 +42,6 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import app.lawnchair.lawnicons.R -import app.lawnchair.lawnicons.model.IconInfoModel import app.lawnchair.lawnicons.model.SearchMode import app.lawnchair.lawnicons.ui.components.home.NavigationIconButton import app.lawnchair.lawnicons.ui.theme.LawniconsTheme @@ -51,37 +50,6 @@ import app.lawnchair.lawnicons.ui.util.SampleData import app.lawnchair.lawnicons.ui.util.thenIf import app.lawnchair.lawnicons.ui.util.toPaddingValues -@Composable -fun LawniconsSearchBar( - query: String, - isQueryEmpty: Boolean, - onClear: () -> Unit, - onBack: () -> Unit, - onQueryChange: (String) -> Unit, - iconInfoModel: IconInfoModel, - onNavigate: () -> Unit, - modifier: Modifier = Modifier, - inputFieldModifier: Modifier = Modifier, - isExpandedScreen: Boolean = false, - isIconPicker: Boolean = false, - content: @Composable (() -> Unit), -) { - LawniconsSearchBar( - query = query, - isQueryEmpty = isQueryEmpty, - onClear = onClear, - onBack = onBack, - onQueryChange = onQueryChange, - iconCount = iconInfoModel.iconCount, - onNavigate = onNavigate, - content = content, - modifier = modifier, - inputFieldModifier = inputFieldModifier, - isExpandedScreen = isExpandedScreen, - isIconPicker = isIconPicker, - ) -} - /** * Composable function to create a search bar for the Lawnicons app. * @@ -89,6 +57,7 @@ fun LawniconsSearchBar( * @param isQueryEmpty A boolean value indicating whether the search query is empty. * @param onClear A callback function that handles clearing the search query. * @param onBack A callback function that handles navigating back. + * @param onSearch A callback function that handles searching based on the current search query. * @param onQueryChange A callback function that handles changes in the search query. * @param iconCount The number of icons available for selection. * @param onNavigate A callback function that handles navigation to different screens based on the search query. @@ -103,6 +72,7 @@ fun LawniconsSearchBar( isQueryEmpty: Boolean, onClear: () -> Unit, onBack: () -> Unit, + onSearch: () -> Unit, onQueryChange: (String) -> Unit, iconCount: Int, onNavigate: () -> Unit, @@ -134,7 +104,7 @@ fun LawniconsSearchBar( ResponsiveSearchBar( query = query, onQueryChange = onQueryChange, - onSearch = { active = false }, + onSearch = { if (query != "") onSearch() }, active = active, onActiveChange = { active = it @@ -296,6 +266,7 @@ private fun SearchBarPreview() { isQueryEmpty = false, onClear = {}, onBack = {}, + onSearch = {}, onQueryChange = { newValue -> searchTerm = newValue }, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt index 755ff0a127d..28da5f9310b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/search/SearchContents.kt @@ -16,7 +16,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape @@ -28,8 +28,6 @@ import androidx.compose.material3.ListItem import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -52,6 +50,8 @@ fun SearchContents( iconInfo: List, modifier: Modifier = Modifier, onSendResult: (IconInfo) -> Unit = {}, + showSheet: Boolean = false, + onToggleSheet: (Boolean) -> Unit = {}, ) { Column( modifier = modifier, @@ -120,7 +120,11 @@ fun SearchContents( ) { count -> when (count) { 1 -> { - IconInfoListItem(iconInfo) + IconInfoListItem( + iconInfo, + showSheet, + onToggleSheet, + ) } 0 -> { @@ -147,15 +151,25 @@ fun SearchContents( columns = GridCells.Adaptive(minSize = 80.dp), contentPadding = PaddingValues(16.dp, 16.dp, 16.dp, 80.dp), ) { - items( + itemsIndexed( items = iconInfo, - contentType = { "icon_preview" }, - ) { - IconPreview( - iconInfo = it, - onSendResult = onSendResult, - iconBackground = MaterialTheme.colorScheme.surfaceContainerLow, - ) + contentType = { _, _ -> "icon_preview" }, + ) { index, it -> + if (index == 0 && searchTerm != "") { + IconPreview( + iconInfo = it, + onSendResult = onSendResult, + iconBackground = MaterialTheme.colorScheme.surface, + showSheet = showSheet, + onToggleSheet = onToggleSheet, + ) + } else { + IconPreview( + iconInfo = it, + onSendResult = onSendResult, + iconBackground = MaterialTheme.colorScheme.surfaceContainerLow, + ) + } } } } @@ -166,7 +180,11 @@ fun SearchContents( } @Composable -private fun IconInfoListItem(iconInfo: List) { +private fun IconInfoListItem( + iconInfo: List, + showSheet: Boolean, + onToggleSheet: (Boolean) -> Unit, +) { Column( modifier = Modifier .fillMaxWidth() @@ -179,8 +197,6 @@ private fun IconInfoListItem(iconInfo: List) { return@IconInfoListItem } - val isIconInfoAppfilterShown = rememberSaveable { mutableStateOf(false) } - ListItem( headlineContent = { Text(it.getFirstLabelAndComponent().label) }, supportingContent = { Text(it.getFirstLabelAndComponent().componentName) }, @@ -201,13 +217,13 @@ private fun IconInfoListItem(iconInfo: List) { }, modifier = Modifier .clip(RoundedCornerShape(16.dp)) - .clickable(onClick = { isIconInfoAppfilterShown.value = true }), + .clickable(onClick = { onToggleSheet(true) }), ) - AnimatedVisibility(isIconInfoAppfilterShown.value) { + AnimatedVisibility(showSheet) { IconInfoSheet( iconInfo = it, ) { - isIconInfoAppfilterShown.value = it + onToggleSheet(it) } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 92865ee8c70..d35ff07872b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -1,7 +1,10 @@ package app.lawnchair.lawnicons.ui.destination import android.annotation.SuppressLint +import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.grid.GridItemSpan @@ -115,14 +118,20 @@ private fun Home( }, bottomBar = { if (!isExpandedScreen) { - HomeBottomBar( - context = context, - iconRequestsEnabled = iconRequestsEnabled, - iconRequestModel = iconRequestModel, - snackbarHostState = snackbarHostState, - onNavigate = onNavigateToAbout, - onExpandSearch = { expandSearch = true }, - ) + AnimatedVisibility( + !expandSearch, + enter = fadeIn(), + exit = fadeOut(), + ) { + HomeBottomBar( + context = context, + iconRequestsEnabled = iconRequestsEnabled, + iconRequestModel = iconRequestModel, + snackbarHostState = snackbarHostState, + onNavigate = onNavigateToAbout, + onExpandSearch = { expandSearch = true }, + ) + } } }, floatingActionButton = { @@ -170,6 +179,7 @@ private fun Home( } } } + LaunchedEffect(expandSearch) { if (expandSearch) { focusRequester.requestFocus() From 879bad051a03d208d4745167f0d9c7381c8fb4fb Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 30 Dec 2024 13:56:53 +0300 Subject: [PATCH 481/527] Suspension of icon requests (#2500) Added a hint to the issue template. --- .github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 854b48d3a63..c2ef2848d8c 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -3,6 +3,6 @@ contact_links: - name: Link apps to identical icons url: https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md#adding-an-icon-to-lawnicons about: Learn more about linking an app to an existing icon via a pull request. - - name: Icon Request + - name: [Currently suspended] Icon Request url: https://forms.gle/xt7sJhgWEasuo9TR9 about: Please request your icons in this form. From 3accd383d4eeaa32543db0d9b6d9cc2609b60a3d Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:03:37 +0300 Subject: [PATCH 482/527] Minor config.yml fix (#2501) --- .github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c2ef2848d8c..f0ac65d93be 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -3,6 +3,6 @@ contact_links: - name: Link apps to identical icons url: https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md#adding-an-icon-to-lawnicons about: Learn more about linking an app to an existing icon via a pull request. - - name: [Currently suspended] Icon Request + - name: Currently suspended — Icon Request url: https://forms.gle/xt7sJhgWEasuo9TR9 about: Please request your icons in this form. From 8e6fecc7778d89ce4c5706bd46ae13b808e6cb5a Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Tue, 31 Dec 2024 16:49:47 +0900 Subject: [PATCH 483/527] Update README.md (#2487) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4ee1c01156..0094e6f60fa 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Lawnicons is best used [on the latest version of Lawnchair](https://play.google.
Get it on IzzyOnDroid - + Get it on Obtainium From b20916c05daa9aa9022291caffe4e8c07a4c089b Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 31 Dec 2024 11:08:21 +0300 Subject: [PATCH 484/527] Minor icon improvements (#2502) * Minor icon improvements * Update quizduel.svg --- svgs/book_reader.svg | 2 +- svgs/cheogram.svg | 2 +- svgs/clash_of_clans.svg | 2 +- svgs/color_puzzle.svg | 2 +- svgs/device_info_hw.svg | 2 +- svgs/google_pay.svg | 2 +- svgs/here_wego.svg | 2 +- svgs/kakaotalk.svg | 2 +- svgs/karwei.svg | 2 +- svgs/kinemaster.svg | 2 +- svgs/kiwi_browser.svg | 2 +- svgs/life360.svg | 2 +- svgs/magic_earth.svg | 2 +- svgs/mullvad_vpn.svg | 2 +- svgs/musicolet_music_player.svg | 2 +- svgs/nintendo_switch_online.svg | 2 +- svgs/onestop.svg | 2 +- svgs/pikpak.svg | 2 +- svgs/pixel_tips.svg | 2 +- svgs/proton_calendar.svg | 2 +- svgs/proton_drive.svg | 2 +- svgs/quizduel.svg | 2 +- svgs/quote_unquote.svg | 2 +- svgs/schulplaner.svg | 2 +- svgs/screencam.svg | 2 +- svgs/tagmo.svg | 2 +- svgs/timetree.svg | 2 +- svgs/trackercontrol.svg | 2 +- svgs/warpshare.svg | 2 +- svgs/zapp.svg | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/svgs/book_reader.svg b/svgs/book_reader.svg index 4fca5d05992..9408a9ed3a5 100644 --- a/svgs/book_reader.svg +++ b/svgs/book_reader.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/cheogram.svg b/svgs/cheogram.svg index 7fd5b997e3f..ed2ce369b4e 100644 --- a/svgs/cheogram.svg +++ b/svgs/cheogram.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/clash_of_clans.svg b/svgs/clash_of_clans.svg index ff4b864d2ea..df0f8013a35 100644 --- a/svgs/clash_of_clans.svg +++ b/svgs/clash_of_clans.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/color_puzzle.svg b/svgs/color_puzzle.svg index 7aa2e70dbab..a2d69b048fa 100644 --- a/svgs/color_puzzle.svg +++ b/svgs/color_puzzle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/device_info_hw.svg b/svgs/device_info_hw.svg index 7008365c4f7..b7517440080 100644 --- a/svgs/device_info_hw.svg +++ b/svgs/device_info_hw.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/google_pay.svg b/svgs/google_pay.svg index 304611f1758..b694fc423e6 100644 --- a/svgs/google_pay.svg +++ b/svgs/google_pay.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/here_wego.svg b/svgs/here_wego.svg index ab6cb3f797b..313114a7b4c 100644 --- a/svgs/here_wego.svg +++ b/svgs/here_wego.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/kakaotalk.svg b/svgs/kakaotalk.svg index bf6f9ec117d..e40f93aa859 100644 --- a/svgs/kakaotalk.svg +++ b/svgs/kakaotalk.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/karwei.svg b/svgs/karwei.svg index 99caee7377f..90b4232cfe8 100644 --- a/svgs/karwei.svg +++ b/svgs/karwei.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/kinemaster.svg b/svgs/kinemaster.svg index bba15880460..e230d03ae4e 100644 --- a/svgs/kinemaster.svg +++ b/svgs/kinemaster.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/kiwi_browser.svg b/svgs/kiwi_browser.svg index ffbb8a56629..2c7b233c9b2 100644 --- a/svgs/kiwi_browser.svg +++ b/svgs/kiwi_browser.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/life360.svg b/svgs/life360.svg index 91c57c6a761..b9edb6ab676 100644 --- a/svgs/life360.svg +++ b/svgs/life360.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/magic_earth.svg b/svgs/magic_earth.svg index 048f885105b..540b204f2cf 100644 --- a/svgs/magic_earth.svg +++ b/svgs/magic_earth.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/mullvad_vpn.svg b/svgs/mullvad_vpn.svg index dbf0fc1859a..8c838df3a9d 100644 --- a/svgs/mullvad_vpn.svg +++ b/svgs/mullvad_vpn.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/musicolet_music_player.svg b/svgs/musicolet_music_player.svg index 401cc451d1d..267f6131e05 100644 --- a/svgs/musicolet_music_player.svg +++ b/svgs/musicolet_music_player.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/nintendo_switch_online.svg b/svgs/nintendo_switch_online.svg index 9def51a6e6e..6c8f9d13be2 100644 --- a/svgs/nintendo_switch_online.svg +++ b/svgs/nintendo_switch_online.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/onestop.svg b/svgs/onestop.svg index 78356df3d6f..f77270c62cd 100644 --- a/svgs/onestop.svg +++ b/svgs/onestop.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pikpak.svg b/svgs/pikpak.svg index a21fd641ef7..1fc7432c74c 100644 --- a/svgs/pikpak.svg +++ b/svgs/pikpak.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/pixel_tips.svg b/svgs/pixel_tips.svg index 8b89a154d24..f605d8f1a24 100644 --- a/svgs/pixel_tips.svg +++ b/svgs/pixel_tips.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/proton_calendar.svg b/svgs/proton_calendar.svg index a0f5a6a75a6..0b4255a1423 100644 --- a/svgs/proton_calendar.svg +++ b/svgs/proton_calendar.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/proton_drive.svg b/svgs/proton_drive.svg index 39beabdfdd2..6034e7d6770 100644 --- a/svgs/proton_drive.svg +++ b/svgs/proton_drive.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/quizduel.svg b/svgs/quizduel.svg index 643872fb147..8bec6235c8b 100644 --- a/svgs/quizduel.svg +++ b/svgs/quizduel.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/quote_unquote.svg b/svgs/quote_unquote.svg index 9e3ca375b69..341b7c07fce 100644 --- a/svgs/quote_unquote.svg +++ b/svgs/quote_unquote.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/schulplaner.svg b/svgs/schulplaner.svg index 6e1e2f2ae5c..4735fdbac23 100644 --- a/svgs/schulplaner.svg +++ b/svgs/schulplaner.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/screencam.svg b/svgs/screencam.svg index 3de0666da64..dce3f2d6059 100644 --- a/svgs/screencam.svg +++ b/svgs/screencam.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/tagmo.svg b/svgs/tagmo.svg index 5682a77dca0..3ef8e2b3512 100644 --- a/svgs/tagmo.svg +++ b/svgs/tagmo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/timetree.svg b/svgs/timetree.svg index f0927af5ee5..eeee20e9e9b 100644 --- a/svgs/timetree.svg +++ b/svgs/timetree.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/trackercontrol.svg b/svgs/trackercontrol.svg index 10690ba03d5..66615bf6062 100644 --- a/svgs/trackercontrol.svg +++ b/svgs/trackercontrol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/warpshare.svg b/svgs/warpshare.svg index 10137b0de15..c3e68dbc443 100644 --- a/svgs/warpshare.svg +++ b/svgs/warpshare.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/zapp.svg b/svgs/zapp.svg index daa9da4457d..9a0603ac6ce 100644 --- a/svgs/zapp.svg +++ b/svgs/zapp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From be70b3760610111bf95ff017eead0085814a8122 Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Wed, 1 Jan 2025 17:43:05 +0900 Subject: [PATCH 485/527] +1 icon (#2488) * +1 icon `5ber.eSIM` `com.ifreegroup.moesim` |![old](https://github.com/user-attachments/assets/3d6322a4-b579-4670-89d0-6615b912c3d8)|![new](https://raw.githubusercontent.com/Twive/lawnicons/refs/heads/develop/svgs/_5ber_esim.svg)| |---|---| * Update _5ber_esim.svg * Add files via upload --- app/assets/appfilter.xml | 1 + svgs/_5ber_esim.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/_5ber_esim.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 3e2eab7768f..b11b07e31f3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -105,6 +105,7 @@ + diff --git a/svgs/_5ber_esim.svg b/svgs/_5ber_esim.svg new file mode 100644 index 00000000000..1caf1301356 --- /dev/null +++ b/svgs/_5ber_esim.svg @@ -0,0 +1 @@ + \ No newline at end of file From a5cf54e0e8313414fb53b535bc92f2a9bfa71614 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:23:53 +0800 Subject: [PATCH 486/527] fix(deps): update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.8.0 (#2507) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5678fcf45c1..0ec1b2cfed3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -155,7 +155,7 @@ dependencies { implementation("androidx.navigation:navigation-compose:2.8.5") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0") val hiltVersion = "2.53.1" implementation("com.google.dagger:hilt-android:$hiltVersion") From b4e08cc8721be9caa64174a4ac871aab80543236 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:24:31 +0800 Subject: [PATCH 487/527] Update Hilt to v2.54 (#2491) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0ec1b2cfed3..1dd4b2ca0b3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,7 +157,7 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0") - val hiltVersion = "2.53.1" + val hiltVersion = "2.54" implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") diff --git a/build.gradle.kts b/build.gradle.kts index fd8b7980d91..997036640be 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false - id("com.google.dagger.hilt.android") version "2.53.1" apply false + id("com.google.dagger.hilt.android") version "2.54" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "6.25.0" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false From f4e2957f8f7f10deedf5e4bdf5e44621900ee3c4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:24:40 +0800 Subject: [PATCH 488/527] Update dependency gradle to v8.12 (#2492) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index eb1a55be0e1..e1b837a19c2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionSha256Sum=7a00d51fb93147819aab76024feece20b6b84e420694101f276be952e08bef03 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d6b1..f3b75f3b0d4 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum From ddbfbff13ef914b540c04a178ca9e23ebbf72d31 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 06:32:34 +0000 Subject: [PATCH 489/527] Spotless 7.0.0 (#2508) * chore(deps): update plugin com.diffplug.spotless to v7 * Fix styles --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Goooler --- .../lawnicons/api/GithubApiModule.kt | 12 ++- .../lawnicons/api/WebsiteApiModule.kt | 12 ++- .../di/OssLibraryRepositoryModule.kt | 3 +- .../app/lawnchair/lawnicons/model/IconInfo.kt | 20 +++-- .../lawnicons/repository/IconRepository.kt | 47 ++++++------ .../lawnicons/repository/PreferenceManager.kt | 52 ++++++------- .../ui/components/home/IconRequestHandler.kt | 3 +- .../lawnchair/lawnicons/util/GetIconInfo.kt | 6 +- .../lawnicons/util/GetSystemPackageList.kt | 42 +++++------ .../viewmodel/AcknowledgementViewModel.kt | 3 +- .../lawnicons/viewmodel/LawniconsViewModel.kt | 3 +- build.gradle.kts | 2 +- .../lawnicons/helper/AppfilterDiffCreator.kt | 74 +++++++++---------- .../lawnicons/helper/SvgFilesProcessor.kt | 6 +- .../app/lawnchair/lawnicons/helper/XmlUtil.kt | 8 +- 15 files changed, 130 insertions(+), 163 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt index 3642d46628c..aae95b655bd 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt @@ -17,11 +17,9 @@ class GithubApiModule { @Provides @Singleton - fun providesGitHubContributorsApi(): GitHubContributorsAPI { - return Retrofit.Builder() - .baseUrl("https://api.github.com/") - .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) - .build() - .create() - } + fun providesGitHubContributorsApi(): GitHubContributorsAPI = Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) + .build() + .create() } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt index 4826fe1dda9..fed3191c478 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt @@ -33,11 +33,9 @@ class WebsiteApiModule { @Provides @Singleton - fun providesWebsiteIconRequestApi(): IconRequestSettingsAPI { - return Retrofit.Builder() - .baseUrl("https://lawnchair.app/") - .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) - .build() - .create() - } + fun providesWebsiteIconRequestApi(): IconRequestSettingsAPI = Retrofit.Builder() + .baseUrl("https://lawnchair.app/") + .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) + .build() + .create() } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt index 733a73102ad..cefdd4780f0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/di/OssLibraryRepositoryModule.kt @@ -15,6 +15,5 @@ object OssLibraryRepositoryModule { @Provides @Singleton - fun provideOssLibraryRepository(application: Application): OssLibraryRepository = - OssLibraryRepositoryImpl(application = application) + fun provideOssLibraryRepository(application: Application): OssLibraryRepository = OssLibraryRepositoryImpl(application = application) } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index c1ad53e9976..3d3f9b67429 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -29,17 +29,15 @@ data class IconInfo( * @return A new list of [IconInfo] objects with merged component names for icons * sharing the same drawable name. */ -fun List.mergeByDrawableName(): List { - return groupBy { it.drawableName } - .map { (drawableName, icons) -> - val mergedComponentNames = icons.flatMap { it.componentNames } - IconInfo( - componentNames = mergedComponentNames, - drawableName = drawableName, - id = icons.first().id, - ) - } -} +fun List.mergeByDrawableName(): List = groupBy { it.drawableName } + .map { (drawableName, icons) -> + val mergedComponentNames = icons.flatMap { it.componentNames } + IconInfo( + componentNames = mergedComponentNames, + drawableName = drawableName, + id = icons.first().id, + ) + } /** * Splits [IconInfo] objects with multiple component names into a list where each diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt index 1de7e4e4ee8..fe1b141fc9b 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/IconRepository.kt @@ -101,31 +101,30 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep _searchedIconInfoModel.value = _iconInfoModel.value } - private suspend fun getIconRequestList(systemPackageList: List) = - withContext(Dispatchers.Default) { - val lawniconsData = _iconInfoModel.value.iconInfo + private suspend fun getIconRequestList(systemPackageList: List) = withContext(Dispatchers.Default) { + val lawniconsData = _iconInfoModel.value.iconInfo - val systemData = systemPackageList.map { info -> - info.getFirstLabelAndComponent() + val systemData = systemPackageList.map { info -> + info.getFirstLabelAndComponent() + } + + val lawniconsComponents = lawniconsData + .splitByComponentName() + .map { it.getFirstLabelAndComponent().componentName } + .sortedBy { it.lowercase() } + .toSet() + + val commonItems = systemData.filter { it.componentName !in lawniconsComponents } + .map { + IconRequest( + label = it.label, + componentName = it.componentName, + ) } - val lawniconsComponents = lawniconsData - .splitByComponentName() - .map { it.getFirstLabelAndComponent().componentName } - .sortedBy { it.lowercase() } - .toSet() - - val commonItems = systemData.filter { it.componentName !in lawniconsComponents } - .map { - IconRequest( - label = it.label, - componentName = it.componentName, - ) - } - - iconRequestList.value = IconRequestModel( - list = commonItems, - iconCount = commonItems.size, - ) - } + iconRequestList.value = IconRequestModel( + list = commonItems, + iconCount = commonItems.size, + ) + } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index 5317e75d3e9..4e549fa11b0 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -35,18 +35,16 @@ abstract class BasePreferenceManager( fun toggle() = set(!get()) @Composable - fun asState(): State { - return produceState(initialValue = get(), this) { - val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> - if (changedKey == key) { - value = get() // Update the state value when the preference changes - } - } - prefs.registerOnSharedPreferenceChangeListener(listener) - awaitDispose { - prefs.unregisterOnSharedPreferenceChangeListener(listener) + fun asState(): State = produceState(initialValue = get(), this) { + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> + if (changedKey == key) { + value = get() // Update the state value when the preference changes } } + prefs.registerOnSharedPreferenceChangeListener(listener) + awaitDispose { + prefs.unregisterOnSharedPreferenceChangeListener(listener) + } } } @@ -63,18 +61,16 @@ abstract class BasePreferenceManager( fun set(value: Int) = editor.putInt(key, value).apply() @Composable - fun asState(): State { - return produceState(initialValue = get(), this) { - val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> - if (changedKey == key) { - value = get() // Update the state value when the preference changes - } - } - prefs.registerOnSharedPreferenceChangeListener(listener) - awaitDispose { - prefs.unregisterOnSharedPreferenceChangeListener(listener) + fun asState(): State = produceState(initialValue = get(), this) { + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> + if (changedKey == key) { + value = get() // Update the state value when the preference changes } } + prefs.registerOnSharedPreferenceChangeListener(listener) + awaitDispose { + prefs.unregisterOnSharedPreferenceChangeListener(listener) + } } } } @@ -101,20 +97,16 @@ class PreferenceManager private constructor( /** * Returns a singleton instance of [PreferenceManager] */ - fun getInstance(context: Context): PreferenceManager { - return instance ?: synchronized(this) { - instance ?: PreferenceManager( - context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), - ).also { instance = it } - } + fun getInstance(context: Context): PreferenceManager = instance ?: synchronized(this) { + instance ?: PreferenceManager( + context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), + ).also { instance = it } } /** * Get dummy instance of [PreferenceManager] for testing and Compose previews */ - fun getDummyInstance(): PreferenceManager { - return PreferenceManager(DummySharedPreferences()) - } + fun getDummyInstance(): PreferenceManager = PreferenceManager(DummySharedPreferences()) } } @@ -152,7 +144,7 @@ class DummySharedPreferences : SharedPreferences { /** * Dummy implementation of [SharedPreferences.Editor] for Compose previews */ - class DummyEditor() : SharedPreferences.Editor { + class DummyEditor : SharedPreferences.Editor { override fun putString(key: String?, value: String?) = DummyEditor() override fun putStringSet(key: String?, values: MutableSet?) = DummyEditor() diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt index a499bf480ee..fa2f95c290f 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt @@ -249,8 +249,7 @@ private fun HandleTouchInteractions( } } -private fun formatIconRequestList(iconRequestList: List) = - iconRequestList.joinToString("\n") { "${it.label}\n${it.componentName}" } +private fun formatIconRequestList(iconRequestList: List) = iconRequestList.joinToString("\n") { "${it.label}\n${it.componentName}" } private fun handleRequestClick( iconRequestList: List, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt index d162a0a68e6..1f6c2b8ae31 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetIconInfo.kt @@ -25,7 +25,8 @@ fun Context.getIconInfo( while ( ( parser.next() - .also { type = it } != XmlPullParser.END_TAG || parser.depth > depth + .also { type = it } != XmlPullParser.END_TAG || + parser.depth > depth ) && type != XmlPullParser.END_DOCUMENT ) { @@ -43,7 +44,8 @@ fun Context.getIconInfo( val parsedComponent = component.substring(componentInfoPrefixLength, component.length - 1) - if (parsedComponent.isNotEmpty() && !parsedComponent.startsWith("/") && + if (parsedComponent.isNotEmpty() && + !parsedComponent.startsWith("/") && !parsedComponent.endsWith("/") ) { actualComponent = parsedComponent diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt index bb1e78e9707..37113c3c0bf 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -7,32 +7,28 @@ import android.content.pm.ResolveInfo import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.LabelAndComponent -fun Context.getPackagesList(): List { - return try { - packageManager.queryIntentActivities( - Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), - PackageManager.GET_RESOLVED_FILTER, - ) - } catch (e: Exception) { - listOf() - } +fun Context.getPackagesList(): List = try { + packageManager.queryIntentActivities( + Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), + PackageManager.GET_RESOLVED_FILTER, + ) +} catch (e: Exception) { + listOf() } -fun Context.getSystemIconInfoAppfilter(): List { - return getPackagesList().map { ri -> - with(ri) { - val riPkg = activityInfo.packageName - val component = "$riPkg/${activityInfo.name}" +fun Context.getSystemIconInfoAppfilter(): List = getPackagesList().map { ri -> + with(ri) { + val riPkg = activityInfo.packageName + val component = "$riPkg/${activityInfo.name}" - val name = loadLabel(packageManager) ?: riPkg + val name = loadLabel(packageManager) ?: riPkg - IconInfo( - drawableName = "", - componentNames = listOf( - LabelAndComponent(name.toString(), component), - ), - id = 0, - ) - } + IconInfo( + drawableName = "", + componentNames = listOf( + LabelAndComponent(name.toString(), component), + ), + id = 0, + ) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt index 06a12e7d7d1..0926560d4dc 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/AcknowledgementViewModel.kt @@ -20,8 +20,7 @@ import kotlinx.coroutines.flow.stateIn @HiltViewModel class AcknowledgementViewModel @Inject constructor( private val ossLibraryRepository: OssLibraryRepository, -) : - ViewModel() { +) : ViewModel() { val ossLibraries = ossLibraryRepository.ossLibraries diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt index 99917aa4c18..224ab45e47d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/viewmodel/LawniconsViewModel.kt @@ -43,7 +43,8 @@ class LawniconsViewModelImpl @Inject constructor( private val iconRepository: IconRepository, private val newIconsRepository: NewIconsRepository, private val iconRequestSettingsRepository: IconRequestSettingsRepository, -) : LawniconsViewModel, ViewModel() { +) : ViewModel(), + LawniconsViewModel { override val iconInfoModel = iconRepository.iconInfoModel override val searchedIconInfoModel = iconRepository.searchedIconInfoModel override val iconRequestModel = iconRepository.iconRequestList diff --git a/build.gradle.kts b/build.gradle.kts index 997036640be..f252c537b92 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false id("com.google.dagger.hilt.android") version "2.54" apply false id("app.cash.licensee") version "1.12.0" apply false - id("com.diffplug.spotless") version "6.25.0" apply false + id("com.diffplug.spotless") version "7.0.0" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false } diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index eaed717ea0f..9f5dcf3c919 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -23,61 +23,53 @@ object AppfilterDiffCreator { private fun getPreviousReleaseLines( appFilterFile: String, - ): List { - return try { - runGitCommand(listOf("fetch", "--tags")) - - val tagCommand = - listOf("/usr/bin/bash", "-c", "git tag --sort=-creatordate | head -n 1") - val tagProcess = ProcessBuilder(tagCommand) - .redirectErrorStream(true) - .start() - - val latestTag = tagProcess.inputStream.bufferedReader().readLine() - if (tagProcess.waitFor() != 0) { - throw RuntimeException("Failed to get latest tag") - } - - runGitCommand(listOf("show", "$latestTag:$appFilterFile")) - } catch (e: Exception) { - println(e) - listOf() + ): List = try { + runGitCommand(listOf("fetch", "--tags")) + + val tagCommand = + listOf("/usr/bin/bash", "-c", "git tag --sort=-creatordate | head -n 1") + val tagProcess = ProcessBuilder(tagCommand) + .redirectErrorStream(true) + .start() + + val latestTag = tagProcess.inputStream.bufferedReader().readLine() + if (tagProcess.waitFor() != 0) { + throw RuntimeException("Failed to get latest tag") } + + runGitCommand(listOf("show", "$latestTag:$appFilterFile")) + } catch (e: Exception) { + println(e) + listOf() } private fun runGitCommand( args: List, - ): List { - return try { - val command = listOf("git") + args - - val process = ProcessBuilder(command) - .redirectErrorStream(true) - .start() + ): List = try { + val command = listOf("git") + args - val result = process.inputStream.bufferedReader().readLines() - if (process.waitFor() != 0) { - throw RuntimeException("Failed to execute $command: $result") - } - println("task git $args completed") + val process = ProcessBuilder(command) + .redirectErrorStream(true) + .start() - result - } catch (e: Exception) { - println(e) - listOf() + val result = process.inputStream.bufferedReader().readLines() + if (process.waitFor() != 0) { + throw RuntimeException("Failed to execute $command: $result") } - } + println("task git $args completed") - private fun readFileContents(filePath: String): List { - return File(filePath).readLines() + result + } catch (e: Exception) { + println(e) + listOf() } + private fun readFileContents(filePath: String): List = File(filePath).readLines() + private fun getLineDiff( mainLines: List, developLines: List, - ): List { - return developLines.filterNot { it in mainLines } - } + ): List = developLines.filterNot { it in mainLines } private fun writeDiffToFile( diff: List, diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt index 93bd91a34ae..b9b25bd203b 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/SvgFilesProcessor.kt @@ -53,8 +53,7 @@ object SvgFilesProcessor { } private val fileVisitor = object : FileVisitor { - override fun postVisitDirectory(dir: Path, exc: IOException?): FileVisitResult = - FileVisitResult.CONTINUE + override fun postVisitDirectory(dir: Path, exc: IOException?): FileVisitResult = FileVisitResult.CONTINUE override fun preVisitDirectory(dir: Path, attrs: BasicFileAttributes?): FileVisitResult { // Skip folder which is processing svgs to xml @@ -78,8 +77,7 @@ object SvgFilesProcessor { return FileVisitResult.CONTINUE } - override fun visitFileFailed(file: Path, exc: IOException?): FileVisitResult = - FileVisitResult.CONTINUE + override fun visitFileFailed(file: Path, exc: IOException?): FileVisitResult = FileVisitResult.CONTINUE } private fun convertToVector(svgSource: Path, vectorTargetPath: Path) { diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt index 45db04313fb..cc2f809671d 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt @@ -28,13 +28,9 @@ import org.dom4j.io.XMLWriter object XmlUtil { private val UTF_8 = Charsets.UTF_8.name() - fun getElements(document: Document, path: String): List { - return document.rootElement.elements(path) - } + fun getElements(document: Document, path: String): List = document.rootElement.elements(path) - fun getDocument(xmlPath: String): Document { - return SAXReader().apply { encoding = UTF_8 }.read(xmlPath) - } + fun getDocument(xmlPath: String): Document = SAXReader().apply { encoding = UTF_8 }.read(xmlPath) fun getFileWithExtension(target: Path, extension: String = "xml"): String { val svgFilePath = target.toFile().absolutePath From bf22168a5ec136491878a82682cd49c7a8044761 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:19:39 +0300 Subject: [PATCH 490/527] fix: Request form and Discord link (#2510) * Update config.yml * Update README.md * Update CONTRIBUTING.md --- .github/ISSUE_TEMPLATE/config.yml | 4 ++-- CONTRIBUTING.md | 4 ++-- README.md | 9 +++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index f0ac65d93be..0c884bb3222 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -3,6 +3,6 @@ contact_links: - name: Link apps to identical icons url: https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md#adding-an-icon-to-lawnicons about: Learn more about linking an app to an existing icon via a pull request. - - name: Currently suspended — Icon Request - url: https://forms.gle/xt7sJhgWEasuo9TR9 + - name: Icon request + url: https://forms.gle/nR4ozeeJBKrLwGfk6 about: Please request your icons in this form. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4952a260029..bf313737524 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -157,12 +157,12 @@ Please check [the icon tool guide](/docs/icontool_guide.md) for more information 4. Done! You're ready to open a pull request. Please set `develop` as the base branch. ## Finding the package and activity name of an app - + ### Using `adb` 1. Connect your Android device or emulator to your laptop/desktop PC that has `adb` installed (see [this tutorial](https://www.xda-developers.com/install-adb-windows-macos-linux/) for more information) and open the app whose details you want to inspect, e.g. Telegram. 2. Open a new Command Prompt or Terminal window and input `adb devices`. diff --git a/README.md b/README.md index 0094e6f60fa..4d41d9cb6cf 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ GitHub Actions Workflow Status - + Discord @@ -51,9 +51,6 @@ Please see our guidelines for information on contributing icons or code, it will [Lawnicons guidelines](CONTRIBUTING.md) • [Icon samples in Figma](https://www.figma.com/community/file/1227718471680779613) • [Popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey=&gid=609680142#gid=609680142) • [Development issues](https://github.com/LawnchairLauncher/lawnicons/issues) ## Requesting icons -> [!NOTE] -> Request acceptance is currently closed. +[Icon request form](https://forms.gle/nR4ozeeJBKrLwGfk6) • [Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) -`Open Lawnicons 2.10+ → Tap "Request icons" → Submit the response` - -[Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) + From e1bc78fd2662e9b9055407598e8ad9e824254091 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Wed, 8 Jan 2025 04:50:23 -0500 Subject: [PATCH 491/527] Tweak Ktlint rules (#2512) * Revert "Spotless 7.0.0" This reverts commit ddbfbff13ef914b540c04a178ca9e23ebbf72d31. * Update rules * Spotless 7.0.1 * Fix styles * chore(deps): update plugin com.diffplug.spotless to v7.0.1 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .editorconfig | 6 ++ .../lawnicons/api/GithubApiModule.kt | 12 +-- .../lawnicons/api/WebsiteApiModule.kt | 12 +-- .../app/lawnchair/lawnicons/model/IconInfo.kt | 20 ++--- .../lawnicons/repository/PreferenceManager.kt | 50 +++++++------ .../lawnicons/util/GetSystemPackageList.kt | 42 ++++++----- build.gradle.kts | 2 +- .../lawnicons/helper/AppfilterDiffCreator.kt | 74 ++++++++++--------- .../app/lawnchair/lawnicons/helper/XmlUtil.kt | 8 +- 9 files changed, 131 insertions(+), 95 deletions(-) diff --git a/.editorconfig b/.editorconfig index 8a224d86dc6..29f55693814 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,8 +11,14 @@ trim_trailing_whitespace = true ij_kotlin_imports_layout = * ij_kotlin_allow_trailing_comma = true ij_kotlin_allow_trailing_comma_on_call_site = true +ij_kotlin_name_count_to_use_star_import = 999 +ij_kotlin_name_count_to_use_star_import_for_members = 999 +ij_kotlin_packages_to_use_import_on_demand = unset ktlint_code_style = intellij_idea ktlint_function_naming_ignore_when_annotated_with = Composable +ktlint_standard_discouraged-comment-location = disabled +ktlint_standard_function-expression-body = disabled +ktlint_compose_lambda-param-event-trailing = disabled [*.md] trim_trailing_whitespace = false diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt index aae95b655bd..3642d46628c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/GithubApiModule.kt @@ -17,9 +17,11 @@ class GithubApiModule { @Provides @Singleton - fun providesGitHubContributorsApi(): GitHubContributorsAPI = Retrofit.Builder() - .baseUrl("https://api.github.com/") - .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) - .build() - .create() + fun providesGitHubContributorsApi(): GitHubContributorsAPI { + return Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) + .build() + .create() + } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt index fed3191c478..4826fe1dda9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/api/WebsiteApiModule.kt @@ -33,9 +33,11 @@ class WebsiteApiModule { @Provides @Singleton - fun providesWebsiteIconRequestApi(): IconRequestSettingsAPI = Retrofit.Builder() - .baseUrl("https://lawnchair.app/") - .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) - .build() - .create() + fun providesWebsiteIconRequestApi(): IconRequestSettingsAPI { + return Retrofit.Builder() + .baseUrl("https://lawnchair.app/") + .addConverterFactory(kotlinxJson.asConverterFactory("application/json".toMediaType())) + .build() + .create() + } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt index 3d3f9b67429..c1ad53e9976 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/model/IconInfo.kt @@ -29,15 +29,17 @@ data class IconInfo( * @return A new list of [IconInfo] objects with merged component names for icons * sharing the same drawable name. */ -fun List.mergeByDrawableName(): List = groupBy { it.drawableName } - .map { (drawableName, icons) -> - val mergedComponentNames = icons.flatMap { it.componentNames } - IconInfo( - componentNames = mergedComponentNames, - drawableName = drawableName, - id = icons.first().id, - ) - } +fun List.mergeByDrawableName(): List { + return groupBy { it.drawableName } + .map { (drawableName, icons) -> + val mergedComponentNames = icons.flatMap { it.componentNames } + IconInfo( + componentNames = mergedComponentNames, + drawableName = drawableName, + id = icons.first().id, + ) + } +} /** * Splits [IconInfo] objects with multiple component names into a list where each diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt index 4e549fa11b0..22efe5df61c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/repository/PreferenceManager.kt @@ -35,15 +35,17 @@ abstract class BasePreferenceManager( fun toggle() = set(!get()) @Composable - fun asState(): State = produceState(initialValue = get(), this) { - val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> - if (changedKey == key) { - value = get() // Update the state value when the preference changes + fun asState(): State { + return produceState(initialValue = get(), this) { + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> + if (changedKey == key) { + value = get() // Update the state value when the preference changes + } + } + prefs.registerOnSharedPreferenceChangeListener(listener) + awaitDispose { + prefs.unregisterOnSharedPreferenceChangeListener(listener) } - } - prefs.registerOnSharedPreferenceChangeListener(listener) - awaitDispose { - prefs.unregisterOnSharedPreferenceChangeListener(listener) } } } @@ -61,15 +63,17 @@ abstract class BasePreferenceManager( fun set(value: Int) = editor.putInt(key, value).apply() @Composable - fun asState(): State = produceState(initialValue = get(), this) { - val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> - if (changedKey == key) { - value = get() // Update the state value when the preference changes + fun asState(): State { + return produceState(initialValue = get(), this) { + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey -> + if (changedKey == key) { + value = get() // Update the state value when the preference changes + } + } + prefs.registerOnSharedPreferenceChangeListener(listener) + awaitDispose { + prefs.unregisterOnSharedPreferenceChangeListener(listener) } - } - prefs.registerOnSharedPreferenceChangeListener(listener) - awaitDispose { - prefs.unregisterOnSharedPreferenceChangeListener(listener) } } } @@ -97,16 +101,20 @@ class PreferenceManager private constructor( /** * Returns a singleton instance of [PreferenceManager] */ - fun getInstance(context: Context): PreferenceManager = instance ?: synchronized(this) { - instance ?: PreferenceManager( - context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), - ).also { instance = it } + fun getInstance(context: Context): PreferenceManager { + return instance ?: synchronized(this) { + instance ?: PreferenceManager( + context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE), + ).also { instance = it } + } } /** * Get dummy instance of [PreferenceManager] for testing and Compose previews */ - fun getDummyInstance(): PreferenceManager = PreferenceManager(DummySharedPreferences()) + fun getDummyInstance(): PreferenceManager { + return PreferenceManager(DummySharedPreferences()) + } } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt index 37113c3c0bf..bb1e78e9707 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/GetSystemPackageList.kt @@ -7,28 +7,32 @@ import android.content.pm.ResolveInfo import app.lawnchair.lawnicons.model.IconInfo import app.lawnchair.lawnicons.model.LabelAndComponent -fun Context.getPackagesList(): List = try { - packageManager.queryIntentActivities( - Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), - PackageManager.GET_RESOLVED_FILTER, - ) -} catch (e: Exception) { - listOf() +fun Context.getPackagesList(): List { + return try { + packageManager.queryIntentActivities( + Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), + PackageManager.GET_RESOLVED_FILTER, + ) + } catch (e: Exception) { + listOf() + } } -fun Context.getSystemIconInfoAppfilter(): List = getPackagesList().map { ri -> - with(ri) { - val riPkg = activityInfo.packageName - val component = "$riPkg/${activityInfo.name}" +fun Context.getSystemIconInfoAppfilter(): List { + return getPackagesList().map { ri -> + with(ri) { + val riPkg = activityInfo.packageName + val component = "$riPkg/${activityInfo.name}" - val name = loadLabel(packageManager) ?: riPkg + val name = loadLabel(packageManager) ?: riPkg - IconInfo( - drawableName = "", - componentNames = listOf( - LabelAndComponent(name.toString(), component), - ), - id = 0, - ) + IconInfo( + drawableName = "", + componentNames = listOf( + LabelAndComponent(name.toString(), component), + ), + id = 0, + ) + } } } diff --git a/build.gradle.kts b/build.gradle.kts index f252c537b92..d769d34a7f4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false id("com.google.dagger.hilt.android") version "2.54" apply false id("app.cash.licensee") version "1.12.0" apply false - id("com.diffplug.spotless") version "7.0.0" apply false + id("com.diffplug.spotless") version "7.0.1" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false } diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index 9f5dcf3c919..eaed717ea0f 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -23,53 +23,61 @@ object AppfilterDiffCreator { private fun getPreviousReleaseLines( appFilterFile: String, - ): List = try { - runGitCommand(listOf("fetch", "--tags")) - - val tagCommand = - listOf("/usr/bin/bash", "-c", "git tag --sort=-creatordate | head -n 1") - val tagProcess = ProcessBuilder(tagCommand) - .redirectErrorStream(true) - .start() - - val latestTag = tagProcess.inputStream.bufferedReader().readLine() - if (tagProcess.waitFor() != 0) { - throw RuntimeException("Failed to get latest tag") - } + ): List { + return try { + runGitCommand(listOf("fetch", "--tags")) + + val tagCommand = + listOf("/usr/bin/bash", "-c", "git tag --sort=-creatordate | head -n 1") + val tagProcess = ProcessBuilder(tagCommand) + .redirectErrorStream(true) + .start() + + val latestTag = tagProcess.inputStream.bufferedReader().readLine() + if (tagProcess.waitFor() != 0) { + throw RuntimeException("Failed to get latest tag") + } - runGitCommand(listOf("show", "$latestTag:$appFilterFile")) - } catch (e: Exception) { - println(e) - listOf() + runGitCommand(listOf("show", "$latestTag:$appFilterFile")) + } catch (e: Exception) { + println(e) + listOf() + } } private fun runGitCommand( args: List, - ): List = try { - val command = listOf("git") + args + ): List { + return try { + val command = listOf("git") + args - val process = ProcessBuilder(command) - .redirectErrorStream(true) - .start() + val process = ProcessBuilder(command) + .redirectErrorStream(true) + .start() - val result = process.inputStream.bufferedReader().readLines() - if (process.waitFor() != 0) { - throw RuntimeException("Failed to execute $command: $result") - } - println("task git $args completed") + val result = process.inputStream.bufferedReader().readLines() + if (process.waitFor() != 0) { + throw RuntimeException("Failed to execute $command: $result") + } + println("task git $args completed") - result - } catch (e: Exception) { - println(e) - listOf() + result + } catch (e: Exception) { + println(e) + listOf() + } } - private fun readFileContents(filePath: String): List = File(filePath).readLines() + private fun readFileContents(filePath: String): List { + return File(filePath).readLines() + } private fun getLineDiff( mainLines: List, developLines: List, - ): List = developLines.filterNot { it in mainLines } + ): List { + return developLines.filterNot { it in mainLines } + } private fun writeDiffToFile( diff: List, diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt index cc2f809671d..45db04313fb 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/XmlUtil.kt @@ -28,9 +28,13 @@ import org.dom4j.io.XMLWriter object XmlUtil { private val UTF_8 = Charsets.UTF_8.name() - fun getElements(document: Document, path: String): List = document.rootElement.elements(path) + fun getElements(document: Document, path: String): List { + return document.rootElement.elements(path) + } - fun getDocument(xmlPath: String): Document = SAXReader().apply { encoding = UTF_8 }.read(xmlPath) + fun getDocument(xmlPath: String): Document { + return SAXReader().apply { encoding = UTF_8 }.read(xmlPath) + } fun getFileWithExtension(target: Path, extension: String = "xml"): String { val svgFilePath = target.toFile().absolutePath From 2cddd2dac43180d437955f711a0b710fd136ce5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:37:04 +0800 Subject: [PATCH 492/527] fix(deps): update hilt to v2.55 (#2515) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1dd4b2ca0b3..494c13a16df 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,7 +157,7 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0") - val hiltVersion = "2.54" + val hiltVersion = "2.55" implementation("com.google.dagger:hilt-android:$hiltVersion") ksp("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") diff --git a/build.gradle.kts b/build.gradle.kts index d769d34a7f4..8c655b24ee4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false - id("com.google.dagger.hilt.android") version "2.54" apply false + id("com.google.dagger.hilt.android") version "2.55" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "7.0.1" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false From 09421275b839434df9aab031b34be2c82858b06b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 09:37:13 +0800 Subject: [PATCH 493/527] fix(deps): update agp (#2513) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8c655b24ee4..71d13083eec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.7.3" apply false + id("com.android.application") version "8.8.0" apply false id("org.jetbrains.kotlin.android") version "2.1.0" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index b9c0002cf76..8a58fad8ce1 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.7.3") + implementation("com.android.tools:sdk-common:31.8.0") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.18.0") } From 95232cb8be59e93e3c26179b62c493b1782adcf0 Mon Sep 17 00:00:00 2001 From: Aymen-L00 <166364671+Aymen-L00@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:58:20 +0100 Subject: [PATCH 494/527] Update appfilter.xml (#2503) * Update appfilter.xml * Fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b11b07e31f3..7fa3ff391fd 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -5867,6 +5867,7 @@ + @@ -8487,6 +8488,7 @@ + From 0000137490281178a291788dec0067a37ad5c932 Mon Sep 17 00:00:00 2001 From: Alexandre Paradis Date: Fri, 10 Jan 2025 08:11:56 -0500 Subject: [PATCH 495/527] Add Hilo (#2514) * Add Hilo * Minor fixes * Update hilo.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/hilo.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/hilo.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 7fa3ff391fd..1bfb4a4e8c1 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4699,6 +4699,7 @@ + diff --git a/svgs/hilo.svg b/svgs/hilo.svg new file mode 100644 index 00000000000..fbe193d53da --- /dev/null +++ b/svgs/hilo.svg @@ -0,0 +1 @@ + From 865c7e9ec18d14bfcd35d71ad494552f4c037924 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:29:38 +0800 Subject: [PATCH 496/527] Update icon request link --- .../lawnicons/ui/components/home/IconRequestHandler.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt index fa2f95c290f..e6250ec0cb7 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt @@ -344,6 +344,5 @@ private fun openLink(context: Context, link: String) { } private fun buildForm(string: String): String { - // TODO: override with new link once available - return "https://docs.google.com/forms/d/e/1FAIpQLSe8ItNYse9f4z2aT1QgXkKeueVTucRdUYNhUpys5ShHPyRijg/viewform?entry.1759726669=$string" + return "https://docs.google.com/forms/d/e/1FAIpQLSez5LqhhGPSp4evrj2vjvf-vGSLLPE5OvvpwktRQv6aCP4Nsg/viewform?entry.1400319382=$string" } From 233b7ab2b13eeed73ce1ac8eaef66d0082a5c712 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 13 Jan 2025 17:27:15 +0800 Subject: [PATCH 497/527] Use permanent link for automatic icon request form --- .../lawnicons/ui/components/home/IconRequestHandler.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt index e6250ec0cb7..089cb2527f5 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestHandler.kt @@ -344,5 +344,5 @@ private fun openLink(context: Context, link: String) { } private fun buildForm(string: String): String { - return "https://docs.google.com/forms/d/e/1FAIpQLSez5LqhhGPSp4evrj2vjvf-vGSLLPE5OvvpwktRQv6aCP4Nsg/viewform?entry.1400319382=$string" + return "https://lawnchair.app/lawnicons-request/?request=$string" } From 4abccef9096148136c1bcb563a708cc58dd187f9 Mon Sep 17 00:00:00 2001 From: Big Bratan Date: Tue, 14 Jan 2025 23:59:00 +0200 Subject: [PATCH 498/527] Add 6 new icons (#2490) * Add 6 new icons * Attempt to update SVGs. Remove space in XML * Add boundaries to icons * Update drawable of cfr calatori in xml * Update Blue and Ace Racer * Slightly tweak Action Notch * Overhaul Action Notch. Increase height, remove a line and letters for CFR Calatori. Shift MyEMC higher. Use Align Stroke to Center instead of Inside for Recorder. Turn Blue into a single letter. * Simplify Blue. Push MyEMC lower. * Push MyEMC even lower. Add CFR letters back. * Remove CFR text. Make Blue inner circle smaller. * Increase distance between two line ends in Ace Racer * Make Blue and RecorderRO circles smaller * Update action_notch.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 6 ++++++ svgs/ace_racer.svg | 1 + svgs/action_notch.svg | 1 + svgs/blue.svg | 1 + svgs/cfr_calatori.svg | 1 + svgs/myemc.svg | 1 + svgs/recorderro.svg | 1 + 7 files changed, 12 insertions(+) create mode 100644 svgs/ace_racer.svg create mode 100644 svgs/action_notch.svg create mode 100644 svgs/blue.svg create mode 100644 svgs/cfr_calatori.svg create mode 100644 svgs/myemc.svg create mode 100644 svgs/recorderro.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 1bfb4a4e8c1..cfc946c6d00 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -159,6 +159,7 @@ + @@ -171,6 +172,7 @@ + @@ -1308,6 +1310,7 @@ + @@ -2035,6 +2038,7 @@ + @@ -6990,6 +6994,7 @@ + @@ -9040,6 +9045,7 @@ + diff --git a/svgs/ace_racer.svg b/svgs/ace_racer.svg new file mode 100644 index 00000000000..cb13750db6d --- /dev/null +++ b/svgs/ace_racer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/action_notch.svg b/svgs/action_notch.svg new file mode 100644 index 00000000000..f0e0f672fba --- /dev/null +++ b/svgs/action_notch.svg @@ -0,0 +1 @@ + diff --git a/svgs/blue.svg b/svgs/blue.svg new file mode 100644 index 00000000000..a9ee06f739f --- /dev/null +++ b/svgs/blue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cfr_calatori.svg b/svgs/cfr_calatori.svg new file mode 100644 index 00000000000..fe7302ed632 --- /dev/null +++ b/svgs/cfr_calatori.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/myemc.svg b/svgs/myemc.svg new file mode 100644 index 00000000000..b1257b18fbd --- /dev/null +++ b/svgs/myemc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/recorderro.svg b/svgs/recorderro.svg new file mode 100644 index 00000000000..2f04191235e --- /dev/null +++ b/svgs/recorderro.svg @@ -0,0 +1 @@ + \ No newline at end of file From e03bc7aa8e69887388881bd0a725160853dba014 Mon Sep 17 00:00:00 2001 From: Khalid Hossain <67034266+itskhalidhossain@users.noreply.github.com> Date: Wed, 15 Jan 2025 04:03:38 +0600 Subject: [PATCH 499/527] Relink Gemini and Rumble (#2518) * linked Google Gemini * Linked Rumble Icon --- app/assets/appfilter.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index cfc946c6d00..dd9864507b3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -4274,7 +4274,6 @@ - @@ -4343,6 +4342,7 @@ + @@ -9270,6 +9270,7 @@ + From b11bd1b219f2419d13dd6e906178d7bedaf52c00 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:56:28 +0800 Subject: [PATCH 500/527] fix(deps): update dependency androidx.activity:activity-compose to v1.10.0 (#2522) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 494c13a16df..8226d709af8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,7 +142,7 @@ licensee { dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") - implementation("androidx.activity:activity-compose:1.9.3") + implementation("androidx.activity:activity-compose:1.10.0") implementation(platform("androidx.compose:compose-bom:2024.12.01")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") From 6ca76ec5beba73ef5ff51617852318a8655caca1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:57:18 +0800 Subject: [PATCH 501/527] fix(deps): update dependency androidx.compose:compose-bom to v2025 (#2523) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8226d709af8..664b4e2c3a3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.10.0") - implementation(platform("androidx.compose:compose-bom:2024.12.01")) + implementation(platform("androidx.compose:compose-bom:2025.01.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From bd8b4c262f42329e7e38b0424a2e0f4cc607d141 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:57:35 +0800 Subject: [PATCH 502/527] chore(deps): update plugin com.diffplug.spotless to v7.0.2 (#2511) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 71d13083eec..0d91b810415 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false id("com.google.dagger.hilt.android") version "2.55" apply false id("app.cash.licensee") version "1.12.0" apply false - id("com.diffplug.spotless") version "7.0.1" apply false + id("com.diffplug.spotless") version "7.0.2" apply false id("org.gradle.android.cache-fix") version "3.0.1" apply false } From bbd547ce6387c05eadc3c51b0c81214d93d97b08 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 18 Jan 2025 00:04:44 +0300 Subject: [PATCH 503/527] [B10] +50 icons: Argos, Hi Translate, Listonic (#2524) --- app/assets/appfilter.xml | 66 +++++++++++++++++++++++++++--- svgs/acko_insurance.svg | 1 + svgs/aim_lab.svg | 1 + svgs/antistress.svg | 1 + svgs/argos.svg | 1 + svgs/aura_icons.svg | 1 + svgs/blink.svg | 35 +--------------- svgs/blink_eye.svg | 34 +++++++++++++++ svgs/camera_pro.svg | 1 + svgs/facemoji.svg | 1 + svgs/foursquare_swarm.svg | 1 + svgs/glasswire.svg | 1 + svgs/google_pay_for_business.svg | 1 + svgs/gotube.svg | 1 + svgs/groovepad.svg | 1 + svgs/hi_translate.svg | 1 + svgs/honor_email.svg | 1 + svgs/honor_music_player.svg | 1 + svgs/honor_ride_mode.svg | 1 + svgs/huawei_books.svg | 1 + svgs/huawei_files.svg | 1 + svgs/huawei_fm_radio.svg | 1 + svgs/huawei_gamecenter.svg | 1 + svgs/huawei_member_center.svg | 1 + svgs/huawei_notepad.svg | 1 + svgs/huawei_petal_search.svg | 1 + svgs/huawei_tips.svg | 1 + svgs/huawei_wallet.svg | 1 + svgs/hyperos_feedback.svg | 1 + svgs/indah_water.svg | 1 + svgs/jazzcash.svg | 1 + svgs/lg_game_launcher.svg | 1 + svgs/listonic.svg | 1 + svgs/loli_snatcher.svg | 1 + svgs/me_plus_lifestyle_routine.svg | 1 + svgs/nanoleaf.svg | 1 + svgs/naplarm.svg | 1 + svgs/omi.svg | 1 + svgs/oppo_account.svg | 1 + svgs/samsung_assistant.svg | 1 + svgs/samsung_edgelighting.svg | 1 + svgs/samsung_interpreter.svg | 1 + svgs/samsung_visual_voicemail.svg | 1 + svgs/score_hero.svg | 1 + svgs/shadow_fight_4_arena.svg | 1 + svgs/soliclub.svg | 1 + svgs/stickman_party.svg | 1 + svgs/verizon_cloud.svg | 1 + svgs/viu.svg | 1 + svgs/vivo_game_space.svg | 1 + svgs/vivo_kids_mode.svg | 1 + svgs/yahoo_japan.svg | 1 + 52 files changed, 145 insertions(+), 39 deletions(-) create mode 100644 svgs/acko_insurance.svg create mode 100644 svgs/aim_lab.svg create mode 100644 svgs/antistress.svg create mode 100644 svgs/argos.svg create mode 100644 svgs/aura_icons.svg create mode 100644 svgs/blink_eye.svg create mode 100644 svgs/camera_pro.svg create mode 100644 svgs/facemoji.svg create mode 100644 svgs/foursquare_swarm.svg create mode 100644 svgs/glasswire.svg create mode 100644 svgs/google_pay_for_business.svg create mode 100644 svgs/gotube.svg create mode 100644 svgs/groovepad.svg create mode 100644 svgs/hi_translate.svg create mode 100644 svgs/honor_email.svg create mode 100644 svgs/honor_music_player.svg create mode 100644 svgs/honor_ride_mode.svg create mode 100644 svgs/huawei_books.svg create mode 100644 svgs/huawei_files.svg create mode 100644 svgs/huawei_fm_radio.svg create mode 100644 svgs/huawei_gamecenter.svg create mode 100644 svgs/huawei_member_center.svg create mode 100644 svgs/huawei_notepad.svg create mode 100644 svgs/huawei_petal_search.svg create mode 100644 svgs/huawei_tips.svg create mode 100644 svgs/huawei_wallet.svg create mode 100644 svgs/hyperos_feedback.svg create mode 100644 svgs/indah_water.svg create mode 100644 svgs/jazzcash.svg create mode 100644 svgs/lg_game_launcher.svg create mode 100644 svgs/listonic.svg create mode 100644 svgs/loli_snatcher.svg create mode 100644 svgs/me_plus_lifestyle_routine.svg create mode 100644 svgs/nanoleaf.svg create mode 100644 svgs/naplarm.svg create mode 100644 svgs/omi.svg create mode 100644 svgs/oppo_account.svg create mode 100644 svgs/samsung_assistant.svg create mode 100644 svgs/samsung_edgelighting.svg create mode 100644 svgs/samsung_interpreter.svg create mode 100644 svgs/samsung_visual_voicemail.svg create mode 100644 svgs/score_hero.svg create mode 100644 svgs/shadow_fight_4_arena.svg create mode 100644 svgs/soliclub.svg create mode 100644 svgs/stickman_party.svg create mode 100644 svgs/verizon_cloud.svg create mode 100644 svgs/viu.svg create mode 100644 svgs/vivo_game_space.svg create mode 100644 svgs/vivo_kids_mode.svg create mode 100644 svgs/yahoo_japan.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index dd9864507b3..46dae516fad 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -160,6 +160,7 @@ + @@ -276,6 +277,7 @@ + @@ -556,6 +558,7 @@ + @@ -585,6 +588,7 @@ + @@ -757,6 +761,7 @@ + @@ -826,6 +831,7 @@ + @@ -1259,7 +1265,8 @@ - + + @@ -1908,6 +1915,7 @@ + @@ -2853,6 +2861,7 @@ + @@ -3452,6 +3461,7 @@ + @@ -3896,6 +3906,7 @@ + @@ -4216,6 +4227,7 @@ + @@ -4385,6 +4397,7 @@ + @@ -4449,6 +4462,7 @@ + @@ -4537,6 +4551,7 @@ + @@ -4692,6 +4707,7 @@ + @@ -4754,13 +4770,18 @@ + + + + + @@ -4806,22 +4827,30 @@ + + + + + + + + @@ -4830,7 +4859,10 @@ + + + @@ -4854,6 +4886,7 @@ + @@ -5014,6 +5047,7 @@ + @@ -5213,6 +5247,7 @@ + @@ -5703,6 +5738,7 @@ + @@ -5825,6 +5861,7 @@ + @@ -5878,6 +5915,7 @@ + @@ -6172,6 +6210,7 @@ + @@ -7109,6 +7148,8 @@ + + @@ -7382,6 +7423,7 @@ + @@ -7393,7 +7435,6 @@ - @@ -7636,6 +7677,7 @@ + @@ -7773,6 +7815,7 @@ + @@ -9318,6 +9361,7 @@ + @@ -9333,6 +9377,7 @@ + @@ -9369,6 +9414,7 @@ + @@ -9445,6 +9491,8 @@ + + @@ -9526,6 +9574,7 @@ + @@ -9705,6 +9754,7 @@ + @@ -10171,6 +10221,7 @@ + @@ -10446,6 +10497,7 @@ + @@ -10718,6 +10770,7 @@ + @@ -12082,6 +12135,7 @@ + @@ -12198,6 +12252,7 @@ + @@ -12215,6 +12270,9 @@ + + + @@ -12872,6 +12930,7 @@ + @@ -13612,7 +13671,4 @@ - - - diff --git a/svgs/acko_insurance.svg b/svgs/acko_insurance.svg new file mode 100644 index 00000000000..08e99ff6742 --- /dev/null +++ b/svgs/acko_insurance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/aim_lab.svg b/svgs/aim_lab.svg new file mode 100644 index 00000000000..1631b9f9cea --- /dev/null +++ b/svgs/aim_lab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/antistress.svg b/svgs/antistress.svg new file mode 100644 index 00000000000..e9b5c3ef49a --- /dev/null +++ b/svgs/antistress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/argos.svg b/svgs/argos.svg new file mode 100644 index 00000000000..10455ecd34f --- /dev/null +++ b/svgs/argos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/aura_icons.svg b/svgs/aura_icons.svg new file mode 100644 index 00000000000..bffed7ed2c7 --- /dev/null +++ b/svgs/aura_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/blink.svg b/svgs/blink.svg index 39155c065fd..336b1943045 100644 --- a/svgs/blink.svg +++ b/svgs/blink.svg @@ -1,34 +1 @@ - - + \ No newline at end of file diff --git a/svgs/blink_eye.svg b/svgs/blink_eye.svg new file mode 100644 index 00000000000..39155c065fd --- /dev/null +++ b/svgs/blink_eye.svg @@ -0,0 +1,34 @@ + + diff --git a/svgs/camera_pro.svg b/svgs/camera_pro.svg new file mode 100644 index 00000000000..ce00065d5ae --- /dev/null +++ b/svgs/camera_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/facemoji.svg b/svgs/facemoji.svg new file mode 100644 index 00000000000..dad1978854d --- /dev/null +++ b/svgs/facemoji.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/foursquare_swarm.svg b/svgs/foursquare_swarm.svg new file mode 100644 index 00000000000..7e964f8aa61 --- /dev/null +++ b/svgs/foursquare_swarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/glasswire.svg b/svgs/glasswire.svg new file mode 100644 index 00000000000..823cfa8221e --- /dev/null +++ b/svgs/glasswire.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/google_pay_for_business.svg b/svgs/google_pay_for_business.svg new file mode 100644 index 00000000000..bcf4bd86a91 --- /dev/null +++ b/svgs/google_pay_for_business.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gotube.svg b/svgs/gotube.svg new file mode 100644 index 00000000000..d29830f45c9 --- /dev/null +++ b/svgs/gotube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/groovepad.svg b/svgs/groovepad.svg new file mode 100644 index 00000000000..13ff31d3027 --- /dev/null +++ b/svgs/groovepad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hi_translate.svg b/svgs/hi_translate.svg new file mode 100644 index 00000000000..9e2035c2a7c --- /dev/null +++ b/svgs/hi_translate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honor_email.svg b/svgs/honor_email.svg new file mode 100644 index 00000000000..e418721b40c --- /dev/null +++ b/svgs/honor_email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honor_music_player.svg b/svgs/honor_music_player.svg new file mode 100644 index 00000000000..95b26f53e09 --- /dev/null +++ b/svgs/honor_music_player.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honor_ride_mode.svg b/svgs/honor_ride_mode.svg new file mode 100644 index 00000000000..ed1b81c5f17 --- /dev/null +++ b/svgs/honor_ride_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_books.svg b/svgs/huawei_books.svg new file mode 100644 index 00000000000..13815923c3c --- /dev/null +++ b/svgs/huawei_books.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_files.svg b/svgs/huawei_files.svg new file mode 100644 index 00000000000..77fb06877d5 --- /dev/null +++ b/svgs/huawei_files.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_fm_radio.svg b/svgs/huawei_fm_radio.svg new file mode 100644 index 00000000000..4208d2cd437 --- /dev/null +++ b/svgs/huawei_fm_radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_gamecenter.svg b/svgs/huawei_gamecenter.svg new file mode 100644 index 00000000000..45b6fb0d2a9 --- /dev/null +++ b/svgs/huawei_gamecenter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_member_center.svg b/svgs/huawei_member_center.svg new file mode 100644 index 00000000000..ad995a3854a --- /dev/null +++ b/svgs/huawei_member_center.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_notepad.svg b/svgs/huawei_notepad.svg new file mode 100644 index 00000000000..e35d285878f --- /dev/null +++ b/svgs/huawei_notepad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_petal_search.svg b/svgs/huawei_petal_search.svg new file mode 100644 index 00000000000..78561efcacf --- /dev/null +++ b/svgs/huawei_petal_search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_tips.svg b/svgs/huawei_tips.svg new file mode 100644 index 00000000000..91967d4e196 --- /dev/null +++ b/svgs/huawei_tips.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_wallet.svg b/svgs/huawei_wallet.svg new file mode 100644 index 00000000000..60509284577 --- /dev/null +++ b/svgs/huawei_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hyperos_feedback.svg b/svgs/hyperos_feedback.svg new file mode 100644 index 00000000000..95e4f4e959f --- /dev/null +++ b/svgs/hyperos_feedback.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/indah_water.svg b/svgs/indah_water.svg new file mode 100644 index 00000000000..f4b52b8d25f --- /dev/null +++ b/svgs/indah_water.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jazzcash.svg b/svgs/jazzcash.svg new file mode 100644 index 00000000000..936808f9ec3 --- /dev/null +++ b/svgs/jazzcash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lg_game_launcher.svg b/svgs/lg_game_launcher.svg new file mode 100644 index 00000000000..74bb3b3e628 --- /dev/null +++ b/svgs/lg_game_launcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/listonic.svg b/svgs/listonic.svg new file mode 100644 index 00000000000..7913a26885c --- /dev/null +++ b/svgs/listonic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/loli_snatcher.svg b/svgs/loli_snatcher.svg new file mode 100644 index 00000000000..5f66c74a8da --- /dev/null +++ b/svgs/loli_snatcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/me_plus_lifestyle_routine.svg b/svgs/me_plus_lifestyle_routine.svg new file mode 100644 index 00000000000..bb376d3b083 --- /dev/null +++ b/svgs/me_plus_lifestyle_routine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nanoleaf.svg b/svgs/nanoleaf.svg new file mode 100644 index 00000000000..b702167d0f0 --- /dev/null +++ b/svgs/nanoleaf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/naplarm.svg b/svgs/naplarm.svg new file mode 100644 index 00000000000..0636a614690 --- /dev/null +++ b/svgs/naplarm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/omi.svg b/svgs/omi.svg new file mode 100644 index 00000000000..93d4898da60 --- /dev/null +++ b/svgs/omi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oppo_account.svg b/svgs/oppo_account.svg new file mode 100644 index 00000000000..13bd14b2446 --- /dev/null +++ b/svgs/oppo_account.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_assistant.svg b/svgs/samsung_assistant.svg new file mode 100644 index 00000000000..85bd8434796 --- /dev/null +++ b/svgs/samsung_assistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_edgelighting.svg b/svgs/samsung_edgelighting.svg new file mode 100644 index 00000000000..c8e82c35b2a --- /dev/null +++ b/svgs/samsung_edgelighting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_interpreter.svg b/svgs/samsung_interpreter.svg new file mode 100644 index 00000000000..5fecadbe373 --- /dev/null +++ b/svgs/samsung_interpreter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_visual_voicemail.svg b/svgs/samsung_visual_voicemail.svg new file mode 100644 index 00000000000..d4232fc0386 --- /dev/null +++ b/svgs/samsung_visual_voicemail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/score_hero.svg b/svgs/score_hero.svg new file mode 100644 index 00000000000..a3999438c95 --- /dev/null +++ b/svgs/score_hero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shadow_fight_4_arena.svg b/svgs/shadow_fight_4_arena.svg new file mode 100644 index 00000000000..88e3a43f3f2 --- /dev/null +++ b/svgs/shadow_fight_4_arena.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/soliclub.svg b/svgs/soliclub.svg new file mode 100644 index 00000000000..4865fb90e5e --- /dev/null +++ b/svgs/soliclub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/stickman_party.svg b/svgs/stickman_party.svg new file mode 100644 index 00000000000..d7c7cdf79f7 --- /dev/null +++ b/svgs/stickman_party.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/verizon_cloud.svg b/svgs/verizon_cloud.svg new file mode 100644 index 00000000000..4f4140d9209 --- /dev/null +++ b/svgs/verizon_cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/viu.svg b/svgs/viu.svg new file mode 100644 index 00000000000..b911639cb27 --- /dev/null +++ b/svgs/viu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_game_space.svg b/svgs/vivo_game_space.svg new file mode 100644 index 00000000000..c8abe7f3373 --- /dev/null +++ b/svgs/vivo_game_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_kids_mode.svg b/svgs/vivo_kids_mode.svg new file mode 100644 index 00000000000..7b109085022 --- /dev/null +++ b/svgs/vivo_kids_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yahoo_japan.svg b/svgs/yahoo_japan.svg new file mode 100644 index 00000000000..8e418367443 --- /dev/null +++ b/svgs/yahoo_japan.svg @@ -0,0 +1 @@ + \ No newline at end of file From 788f85efd7865b9441ee9293ecfcf27b7eb18a41 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 18 Jan 2025 00:53:52 +0300 Subject: [PATCH 504/527] +3 updates, +36 links (#2525) --- app/assets/appfilter.xml | 42 +++++++++++++++++++++++++++++++++++++--- svgs/chai.svg | 2 +- svgs/lydia.svg | 1 - svgs/medium.svg | 2 +- svgs/sumeria.svg | 1 + 5 files changed, 42 insertions(+), 6 deletions(-) delete mode 100644 svgs/lydia.svg create mode 100644 svgs/sumeria.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 46dae516fad..b18e8f7d143 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1147,6 +1147,7 @@ + @@ -1266,6 +1267,8 @@ + + @@ -1286,6 +1289,7 @@ + @@ -3565,6 +3569,7 @@ + @@ -3907,6 +3912,7 @@ + @@ -4184,6 +4190,7 @@ + @@ -4549,6 +4556,7 @@ + @@ -4652,6 +4660,7 @@ + @@ -4750,6 +4759,7 @@ + @@ -4861,6 +4871,7 @@ + @@ -4887,6 +4898,7 @@ + @@ -5301,6 +5313,8 @@ + + @@ -5586,6 +5600,7 @@ + @@ -5596,6 +5611,7 @@ + @@ -5674,6 +5690,7 @@ + @@ -5796,6 +5813,7 @@ + @@ -5953,9 +5971,6 @@ - - - @@ -6896,6 +6911,7 @@ + @@ -6922,6 +6938,7 @@ + @@ -7538,6 +7555,7 @@ + @@ -7784,6 +7802,7 @@ + @@ -7816,6 +7835,7 @@ + @@ -8789,6 +8809,7 @@ + @@ -9212,6 +9233,7 @@ + @@ -9350,6 +9372,7 @@ + @@ -9485,6 +9508,7 @@ + @@ -9755,6 +9779,7 @@ + @@ -10799,6 +10824,7 @@ + @@ -10850,6 +10876,9 @@ + + + @@ -10915,6 +10944,7 @@ + @@ -10980,6 +11010,7 @@ + @@ -11479,6 +11510,7 @@ + @@ -12062,6 +12094,7 @@ + @@ -12272,6 +12305,7 @@ + @@ -13391,6 +13425,7 @@ + @@ -13661,6 +13696,7 @@ + diff --git a/svgs/chai.svg b/svgs/chai.svg index efbbb96aa71..1ee3213adc7 100644 --- a/svgs/chai.svg +++ b/svgs/chai.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/lydia.svg b/svgs/lydia.svg deleted file mode 100644 index 1d654f387c6..00000000000 --- a/svgs/lydia.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/medium.svg b/svgs/medium.svg index 8957f48a720..d696040e6d7 100644 --- a/svgs/medium.svg +++ b/svgs/medium.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/sumeria.svg b/svgs/sumeria.svg new file mode 100644 index 00000000000..e957ed199a9 --- /dev/null +++ b/svgs/sumeria.svg @@ -0,0 +1 @@ + \ No newline at end of file From 7a9b5bd617907a459e0b0432d5540c5930b041c1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 18 Jan 2025 20:50:52 +0800 Subject: [PATCH 505/527] Bump `versionName` and `versionCode` --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 664b4e2c3a3..dbfaef7071d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -25,7 +25,7 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.12.0" +val version = "2.13.0" val versionDisplayName = version + if (!isReleaseBuild) " $devReleaseName" else "" android { @@ -36,7 +36,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = compileSdk - versionCode = 16 + versionCode = 17 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From 5dd15811ef9c32cb5a75c46736b894628ed4bff4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 12:58:39 +0800 Subject: [PATCH 506/527] chore(deps): update actions/stale action to v9.1.0 (#2529) * chore(deps): update actions/stale action to v9.1.0 * Update .github/workflows/close_stale_prs.yml --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Zongle Wang --- .github/workflows/close_stale_prs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/close_stale_prs.yml b/.github/workflows/close_stale_prs.yml index 2d257a47e3d..f94285285e9 100644 --- a/.github/workflows/close_stale_prs.yml +++ b/.github/workflows/close_stale_prs.yml @@ -9,7 +9,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v9.0.0 + - uses: actions/stale@v9 with: stale-pr-message: Thanks for your interest in contributing! Unfortunately, we have marked this PR as stale because it has been open for 1 month with no activity. Please apply the suggested changes if there are any, and comment something related to your PR. If you don't take any action for 2 weeks, the PR will be closed. close-pr-message: As stated in my previous comment, this PR was closed because it has been stale for another 2 weeks with no activity. Thanks for your interest in contributing though! From 7ca8507be1878b4eb18c24cd24d88caaf0bfbeb4 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:39:01 +0300 Subject: [PATCH 507/527] +1 icon, +30 links (#2530) --- app/assets/appfilter.xml | 33 ++++++++++++++++++++++++++++++++- svgs/drops_icons.svg | 1 + svgs/{zip_shop.svg => zip.svg} | 0 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 svgs/drops_icons.svg rename svgs/{zip_shop.svg => zip.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index b18e8f7d143..ae036f7f9b5 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -104,6 +104,7 @@ + @@ -627,6 +628,7 @@ + @@ -974,6 +976,7 @@ + @@ -1607,6 +1610,7 @@ + @@ -1731,6 +1735,7 @@ + @@ -1926,6 +1931,7 @@ + @@ -2569,6 +2575,7 @@ + @@ -3161,6 +3168,7 @@ + @@ -3226,6 +3234,7 @@ + @@ -3466,6 +3475,7 @@ + @@ -3851,6 +3861,7 @@ + @@ -4121,6 +4132,7 @@ + @@ -4581,6 +4593,7 @@ + @@ -4592,6 +4605,7 @@ + @@ -5693,6 +5707,7 @@ + @@ -5914,6 +5929,7 @@ + @@ -6125,6 +6141,7 @@ + @@ -6795,6 +6812,7 @@ + @@ -7434,6 +7452,7 @@ + @@ -7704,6 +7723,7 @@ + @@ -8018,6 +8038,7 @@ + @@ -8515,6 +8536,7 @@ + @@ -9666,6 +9688,7 @@ + @@ -10536,6 +10559,7 @@ + @@ -10621,6 +10645,7 @@ + @@ -11515,6 +11540,7 @@ + @@ -11999,6 +12025,7 @@ + @@ -12286,6 +12313,7 @@ + @@ -13174,7 +13202,8 @@ - + + @@ -13311,6 +13340,7 @@ + @@ -13525,6 +13555,7 @@ + diff --git a/svgs/drops_icons.svg b/svgs/drops_icons.svg new file mode 100644 index 00000000000..6e8921ef3fb --- /dev/null +++ b/svgs/drops_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zip_shop.svg b/svgs/zip.svg similarity index 100% rename from svgs/zip_shop.svg rename to svgs/zip.svg From 9c70c061d5dbe96435b95bbb124e84a68cd8a5ab Mon Sep 17 00:00:00 2001 From: Khalid Hossain <67034266+itsKhalidHossain@users.noreply.github.com> Date: Sun, 26 Jan 2025 19:13:32 +0600 Subject: [PATCH 508/527] Added 2 new icons (#2521) * Added 2 new icons * Added and linked 2 icons Added Brac Bank Astha and Flut Renamer * Update flut_renamer.svg * Updated icons * Update brac_bank_astha.svg * Update flut_renamer.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 2 ++ svgs/brac_bank_astha.svg | 1 + svgs/flut_renamer.svg | 1 + 3 files changed, 4 insertions(+) create mode 100644 svgs/brac_bank_astha.svg create mode 100644 svgs/flut_renamer.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ae036f7f9b5..45ec3f05ca3 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1434,6 +1434,7 @@ + @@ -3811,6 +3812,7 @@ + diff --git a/svgs/brac_bank_astha.svg b/svgs/brac_bank_astha.svg new file mode 100644 index 00000000000..4653b1500e4 --- /dev/null +++ b/svgs/brac_bank_astha.svg @@ -0,0 +1 @@ + diff --git a/svgs/flut_renamer.svg b/svgs/flut_renamer.svg new file mode 100644 index 00000000000..3d076368327 --- /dev/null +++ b/svgs/flut_renamer.svg @@ -0,0 +1 @@ + From 805968b09341c190750c2a248cc2ea9b7a1a7389 Mon Sep 17 00:00:00 2001 From: Aditya <111834313+Aditya137x@users.noreply.github.com> Date: Sun, 26 Jan 2025 18:47:24 +0530 Subject: [PATCH 509/527] Update appfilter.xml (#2526) --- app/assets/appfilter.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 45ec3f05ca3..35e80720613 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1151,6 +1151,7 @@ + From 650e6399ef8e31d3fed8e29f1065b856d5a473d9 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 26 Jan 2025 16:25:28 +0300 Subject: [PATCH 510/527] +85 icons (#2536) --- app/assets/appfilter.xml | 85 +++++++++++++++++++++++++ svgs/_90_day_challenge.svg | 1 + svgs/agoda.svg | 1 + svgs/albert_heijn.svg | 1 + svgs/allsaints_music.svg | 1 + svgs/amoledpix.svg | 1 + svgs/ancestry.svg | 1 + svgs/au_short.svg | 1 + svgs/bambu_handy.svg | 1 + svgs/bankkart.svg | 1 + svgs/battery_calibration.svg | 1 + svgs/be.svg | 1 + svgs/beeline.svg | 1 + svgs/bejeweled_classic.svg | 1 + svgs/bitget_wallet.svg | 1 + svgs/calyxos_music.svg | 1 + svgs/carsales.svg | 1 + svgs/celestia.svg | 1 + svgs/chefkoch.svg | 1 + svgs/children_space.svg | 1 + svgs/cloudlibrary.svg | 1 + svgs/color_changing_camera.svg | 1 + svgs/cube_solver.svg | 1 + svgs/deco_pic.svg | 1 + svgs/device_clone.svg | 1 + svgs/didup.svg | 1 + svgs/doccle.svg | 1 + svgs/dwg_fastview.svg | 1 + svgs/eduvulcan.svg | 1 + svgs/familymart.svg | 1 + svgs/feem.svg | 1 + svgs/fishbowl.svg | 1 + svgs/fotor.svg | 1 + svgs/freepik.svg | 1 + svgs/fuel_rewards.svg | 1 + svgs/gizmo.svg | 1 + svgs/gospel_library.svg | 1 + svgs/hindu_calendar.svg | 1 + svgs/icsee.svg | 1 + svgs/incollage.svg | 1 + svgs/ixigo.svg | 1 + svgs/jiohome.svg | 1 + svgs/journie_rewards.svg | 1 + svgs/lulo.svg | 1 + svgs/luma_ai.svg | 1 + svgs/m_pesa.svg | 1 + svgs/microsoft_azure.svg | 1 + svgs/mobiletrans.svg | 1 + svgs/motorola_audio_effects.svg | 1 + svgs/my_benefits.svg | 1 + svgs/myoffice_documents.svg | 1 + svgs/mypostcard.svg | 1 + svgs/natwest.svg | 1 + svgs/netschool.svg | 1 + svgs/octopus_electroverse.svg | 1 + svgs/passport_parking.svg | 1 + svgs/philips_smart_tv.svg | 1 + svgs/pintu.svg | 1 + svgs/pionex.svg | 1 + svgs/relive.svg | 1 + svgs/safe_headphones.svg | 1 + svgs/satoshi.svg | 1 + svgs/shahid.svg | 1 + svgs/smart_home_manager.svg | 1 + svgs/t_mobile_scam_shield.svg | 1 + svgs/tata_play_binge.svg | 1 + svgs/tellonym.svg | 1 + svgs/the_metronome_by_soundbrenner.svg | 1 + svgs/timezone_fun.svg | 1 + svgs/trenord.svg | 1 + svgs/unit_converter_by_dronzer.svg | 1 + svgs/ventra.svg | 1 + svgs/virgin_plus.svg | 1 + svgs/vishal_mega_mart.svg | 1 + svgs/vision_plus.svg | 1 + svgs/vocabulary.svg | 1 + svgs/voice_recorder_by_quality_apps.svg | 1 + svgs/voov_meeting.svg | 1 + svgs/wayfair.svg | 1 + svgs/we.svg | 1 + svgs/x_icon_changer.svg | 1 + svgs/xmeye.svg | 1 + svgs/you_com.svg | 1 + svgs/ypt.svg | 1 + svgs/yurtici_kargo.svg | 1 + svgs/zvuk.svg | 1 + 86 files changed, 170 insertions(+) create mode 100644 svgs/_90_day_challenge.svg create mode 100644 svgs/agoda.svg create mode 100644 svgs/albert_heijn.svg create mode 100644 svgs/allsaints_music.svg create mode 100644 svgs/amoledpix.svg create mode 100644 svgs/ancestry.svg create mode 100644 svgs/au_short.svg create mode 100644 svgs/bambu_handy.svg create mode 100644 svgs/bankkart.svg create mode 100644 svgs/battery_calibration.svg create mode 100644 svgs/be.svg create mode 100644 svgs/beeline.svg create mode 100644 svgs/bejeweled_classic.svg create mode 100644 svgs/bitget_wallet.svg create mode 100644 svgs/calyxos_music.svg create mode 100644 svgs/carsales.svg create mode 100644 svgs/celestia.svg create mode 100644 svgs/chefkoch.svg create mode 100644 svgs/children_space.svg create mode 100644 svgs/cloudlibrary.svg create mode 100644 svgs/color_changing_camera.svg create mode 100644 svgs/cube_solver.svg create mode 100644 svgs/deco_pic.svg create mode 100644 svgs/device_clone.svg create mode 100644 svgs/didup.svg create mode 100644 svgs/doccle.svg create mode 100644 svgs/dwg_fastview.svg create mode 100644 svgs/eduvulcan.svg create mode 100644 svgs/familymart.svg create mode 100644 svgs/feem.svg create mode 100644 svgs/fishbowl.svg create mode 100644 svgs/fotor.svg create mode 100644 svgs/freepik.svg create mode 100644 svgs/fuel_rewards.svg create mode 100644 svgs/gizmo.svg create mode 100644 svgs/gospel_library.svg create mode 100644 svgs/hindu_calendar.svg create mode 100644 svgs/icsee.svg create mode 100644 svgs/incollage.svg create mode 100644 svgs/ixigo.svg create mode 100644 svgs/jiohome.svg create mode 100644 svgs/journie_rewards.svg create mode 100644 svgs/lulo.svg create mode 100644 svgs/luma_ai.svg create mode 100644 svgs/m_pesa.svg create mode 100644 svgs/microsoft_azure.svg create mode 100644 svgs/mobiletrans.svg create mode 100644 svgs/motorola_audio_effects.svg create mode 100644 svgs/my_benefits.svg create mode 100644 svgs/myoffice_documents.svg create mode 100644 svgs/mypostcard.svg create mode 100644 svgs/natwest.svg create mode 100644 svgs/netschool.svg create mode 100644 svgs/octopus_electroverse.svg create mode 100644 svgs/passport_parking.svg create mode 100644 svgs/philips_smart_tv.svg create mode 100644 svgs/pintu.svg create mode 100644 svgs/pionex.svg create mode 100644 svgs/relive.svg create mode 100644 svgs/safe_headphones.svg create mode 100644 svgs/satoshi.svg create mode 100644 svgs/shahid.svg create mode 100644 svgs/smart_home_manager.svg create mode 100644 svgs/t_mobile_scam_shield.svg create mode 100644 svgs/tata_play_binge.svg create mode 100644 svgs/tellonym.svg create mode 100644 svgs/the_metronome_by_soundbrenner.svg create mode 100644 svgs/timezone_fun.svg create mode 100644 svgs/trenord.svg create mode 100644 svgs/unit_converter_by_dronzer.svg create mode 100644 svgs/ventra.svg create mode 100644 svgs/virgin_plus.svg create mode 100644 svgs/vishal_mega_mart.svg create mode 100644 svgs/vision_plus.svg create mode 100644 svgs/vocabulary.svg create mode 100644 svgs/voice_recorder_by_quality_apps.svg create mode 100644 svgs/voov_meeting.svg create mode 100644 svgs/wayfair.svg create mode 100644 svgs/we.svg create mode 100644 svgs/x_icon_changer.svg create mode 100644 svgs/xmeye.svg create mode 100644 svgs/you_com.svg create mode 100644 svgs/ypt.svg create mode 100644 svgs/yurtici_kargo.svg create mode 100644 svgs/zvuk.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 35e80720613..6beeba6faa4 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -120,6 +120,7 @@ + @@ -261,6 +262,7 @@ + @@ -330,6 +332,7 @@ + @@ -412,6 +415,7 @@ + @@ -504,6 +508,7 @@ + @@ -516,6 +521,7 @@ + @@ -819,6 +825,7 @@ + @@ -970,6 +977,7 @@ + @@ -1002,6 +1010,7 @@ + @@ -1029,6 +1038,7 @@ + @@ -1086,6 +1096,7 @@ + @@ -1112,6 +1123,7 @@ + @@ -1219,6 +1231,7 @@ + @@ -1752,6 +1765,7 @@ + @@ -1998,6 +2012,7 @@ + @@ -2051,6 +2066,7 @@ + @@ -2088,6 +2104,7 @@ + @@ -2132,6 +2149,7 @@ + @@ -2323,6 +2341,7 @@ + @@ -2368,6 +2387,7 @@ + @@ -2621,6 +2641,7 @@ + @@ -2736,6 +2757,7 @@ + @@ -2802,6 +2824,7 @@ + @@ -2849,6 +2872,7 @@ + @@ -2980,6 +3004,7 @@ + @@ -3212,6 +3237,7 @@ + @@ -3284,6 +3310,7 @@ + @@ -3511,6 +3538,7 @@ + @@ -3565,6 +3593,7 @@ + @@ -3701,6 +3730,7 @@ + @@ -3924,6 +3954,7 @@ + @@ -3972,6 +4003,7 @@ + @@ -4002,6 +4034,7 @@ + @@ -4245,6 +4278,7 @@ + @@ -4481,6 +4515,7 @@ + @@ -4746,6 +4781,7 @@ + @@ -4961,6 +4997,7 @@ + @@ -5075,6 +5112,7 @@ + @@ -5252,6 +5290,7 @@ + @@ -5309,6 +5348,7 @@ + @@ -5336,6 +5376,7 @@ + @@ -5978,6 +6019,8 @@ + + @@ -5993,6 +6036,7 @@ + @@ -6504,6 +6548,7 @@ + @@ -6686,6 +6731,7 @@ + @@ -6804,6 +6850,7 @@ + @@ -6939,6 +6986,7 @@ + @@ -7105,8 +7153,10 @@ + + @@ -7201,6 +7251,7 @@ + @@ -7292,6 +7343,7 @@ + @@ -7610,6 +7662,7 @@ + @@ -8039,6 +8092,7 @@ + @@ -8152,6 +8206,7 @@ + @@ -8432,6 +8487,8 @@ + + @@ -9192,6 +9249,7 @@ + @@ -9389,6 +9447,7 @@ + @@ -9572,6 +9631,7 @@ + @@ -9807,6 +9867,7 @@ + @@ -10435,6 +10496,7 @@ + @@ -11042,6 +11104,7 @@ + @@ -11133,6 +11196,7 @@ + @@ -11217,6 +11281,7 @@ + @@ -11523,6 +11588,7 @@ + @@ -11629,6 +11695,7 @@ + @@ -11810,6 +11877,7 @@ + @@ -12030,6 +12098,7 @@ + @@ -12194,6 +12263,7 @@ + @@ -12300,6 +12370,7 @@ + @@ -12310,7 +12381,9 @@ + + @@ -12366,6 +12439,7 @@ + @@ -12380,6 +12454,7 @@ + @@ -12393,6 +12468,7 @@ + @@ -12529,9 +12605,11 @@ + + @@ -12908,6 +12986,7 @@ + @@ -12960,6 +13039,7 @@ + @@ -13047,6 +13127,7 @@ + @@ -13103,6 +13184,7 @@ + @@ -13119,6 +13201,7 @@ + @@ -13280,6 +13363,7 @@ + @@ -13327,6 +13411,7 @@ + diff --git a/svgs/_90_day_challenge.svg b/svgs/_90_day_challenge.svg new file mode 100644 index 00000000000..5824d513e76 --- /dev/null +++ b/svgs/_90_day_challenge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/agoda.svg b/svgs/agoda.svg new file mode 100644 index 00000000000..6f512a6471a --- /dev/null +++ b/svgs/agoda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/albert_heijn.svg b/svgs/albert_heijn.svg new file mode 100644 index 00000000000..d866724d844 --- /dev/null +++ b/svgs/albert_heijn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/allsaints_music.svg b/svgs/allsaints_music.svg new file mode 100644 index 00000000000..a3d47bf8620 --- /dev/null +++ b/svgs/allsaints_music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/amoledpix.svg b/svgs/amoledpix.svg new file mode 100644 index 00000000000..33fa970bdeb --- /dev/null +++ b/svgs/amoledpix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ancestry.svg b/svgs/ancestry.svg new file mode 100644 index 00000000000..37ca8a45a1f --- /dev/null +++ b/svgs/ancestry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/au_short.svg b/svgs/au_short.svg new file mode 100644 index 00000000000..b18fba9d57c --- /dev/null +++ b/svgs/au_short.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bambu_handy.svg b/svgs/bambu_handy.svg new file mode 100644 index 00000000000..aa411cc4ced --- /dev/null +++ b/svgs/bambu_handy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bankkart.svg b/svgs/bankkart.svg new file mode 100644 index 00000000000..04f6835ec30 --- /dev/null +++ b/svgs/bankkart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/battery_calibration.svg b/svgs/battery_calibration.svg new file mode 100644 index 00000000000..c7318c97bcd --- /dev/null +++ b/svgs/battery_calibration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/be.svg b/svgs/be.svg new file mode 100644 index 00000000000..5aaf32b4191 --- /dev/null +++ b/svgs/be.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/beeline.svg b/svgs/beeline.svg new file mode 100644 index 00000000000..d55628309cf --- /dev/null +++ b/svgs/beeline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bejeweled_classic.svg b/svgs/bejeweled_classic.svg new file mode 100644 index 00000000000..f585b8d2e03 --- /dev/null +++ b/svgs/bejeweled_classic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bitget_wallet.svg b/svgs/bitget_wallet.svg new file mode 100644 index 00000000000..8144438db4e --- /dev/null +++ b/svgs/bitget_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/calyxos_music.svg b/svgs/calyxos_music.svg new file mode 100644 index 00000000000..23087621f4f --- /dev/null +++ b/svgs/calyxos_music.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/carsales.svg b/svgs/carsales.svg new file mode 100644 index 00000000000..043a169cf85 --- /dev/null +++ b/svgs/carsales.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/celestia.svg b/svgs/celestia.svg new file mode 100644 index 00000000000..859c8bcfb66 --- /dev/null +++ b/svgs/celestia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/chefkoch.svg b/svgs/chefkoch.svg new file mode 100644 index 00000000000..6eafee3af7d --- /dev/null +++ b/svgs/chefkoch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/children_space.svg b/svgs/children_space.svg new file mode 100644 index 00000000000..ed26e77cb64 --- /dev/null +++ b/svgs/children_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cloudlibrary.svg b/svgs/cloudlibrary.svg new file mode 100644 index 00000000000..fb9392a1c97 --- /dev/null +++ b/svgs/cloudlibrary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/color_changing_camera.svg b/svgs/color_changing_camera.svg new file mode 100644 index 00000000000..50200ceece6 --- /dev/null +++ b/svgs/color_changing_camera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cube_solver.svg b/svgs/cube_solver.svg new file mode 100644 index 00000000000..375dccebfe3 --- /dev/null +++ b/svgs/cube_solver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/deco_pic.svg b/svgs/deco_pic.svg new file mode 100644 index 00000000000..afd30ef8166 --- /dev/null +++ b/svgs/deco_pic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/device_clone.svg b/svgs/device_clone.svg new file mode 100644 index 00000000000..c1d206d016e --- /dev/null +++ b/svgs/device_clone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/didup.svg b/svgs/didup.svg new file mode 100644 index 00000000000..dfa311aca90 --- /dev/null +++ b/svgs/didup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/doccle.svg b/svgs/doccle.svg new file mode 100644 index 00000000000..f2d6a719f32 --- /dev/null +++ b/svgs/doccle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dwg_fastview.svg b/svgs/dwg_fastview.svg new file mode 100644 index 00000000000..057cf85e221 --- /dev/null +++ b/svgs/dwg_fastview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/eduvulcan.svg b/svgs/eduvulcan.svg new file mode 100644 index 00000000000..887bcda72fd --- /dev/null +++ b/svgs/eduvulcan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/familymart.svg b/svgs/familymart.svg new file mode 100644 index 00000000000..8d720efaef2 --- /dev/null +++ b/svgs/familymart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/feem.svg b/svgs/feem.svg new file mode 100644 index 00000000000..4dc58ac5e72 --- /dev/null +++ b/svgs/feem.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fishbowl.svg b/svgs/fishbowl.svg new file mode 100644 index 00000000000..191cfda0e8d --- /dev/null +++ b/svgs/fishbowl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fotor.svg b/svgs/fotor.svg new file mode 100644 index 00000000000..81d0bd6433c --- /dev/null +++ b/svgs/fotor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/freepik.svg b/svgs/freepik.svg new file mode 100644 index 00000000000..627156aec95 --- /dev/null +++ b/svgs/freepik.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fuel_rewards.svg b/svgs/fuel_rewards.svg new file mode 100644 index 00000000000..bb9fc4160ef --- /dev/null +++ b/svgs/fuel_rewards.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gizmo.svg b/svgs/gizmo.svg new file mode 100644 index 00000000000..ca7063bbc3b --- /dev/null +++ b/svgs/gizmo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gospel_library.svg b/svgs/gospel_library.svg new file mode 100644 index 00000000000..af663d6021f --- /dev/null +++ b/svgs/gospel_library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hindu_calendar.svg b/svgs/hindu_calendar.svg new file mode 100644 index 00000000000..800efc554d3 --- /dev/null +++ b/svgs/hindu_calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/icsee.svg b/svgs/icsee.svg new file mode 100644 index 00000000000..3818a84bc28 --- /dev/null +++ b/svgs/icsee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/incollage.svg b/svgs/incollage.svg new file mode 100644 index 00000000000..4dbf7f266ff --- /dev/null +++ b/svgs/incollage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ixigo.svg b/svgs/ixigo.svg new file mode 100644 index 00000000000..fe9df4af9f7 --- /dev/null +++ b/svgs/ixigo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jiohome.svg b/svgs/jiohome.svg new file mode 100644 index 00000000000..91467b97746 --- /dev/null +++ b/svgs/jiohome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/journie_rewards.svg b/svgs/journie_rewards.svg new file mode 100644 index 00000000000..c99d8487dde --- /dev/null +++ b/svgs/journie_rewards.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lulo.svg b/svgs/lulo.svg new file mode 100644 index 00000000000..bcf3ac27216 --- /dev/null +++ b/svgs/lulo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/luma_ai.svg b/svgs/luma_ai.svg new file mode 100644 index 00000000000..3d3fe1bbcb1 --- /dev/null +++ b/svgs/luma_ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/m_pesa.svg b/svgs/m_pesa.svg new file mode 100644 index 00000000000..2385ae9bdee --- /dev/null +++ b/svgs/m_pesa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/microsoft_azure.svg b/svgs/microsoft_azure.svg new file mode 100644 index 00000000000..f2fc2ee11df --- /dev/null +++ b/svgs/microsoft_azure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mobiletrans.svg b/svgs/mobiletrans.svg new file mode 100644 index 00000000000..9aaf628ec3a --- /dev/null +++ b/svgs/mobiletrans.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/motorola_audio_effects.svg b/svgs/motorola_audio_effects.svg new file mode 100644 index 00000000000..975736d3eb1 --- /dev/null +++ b/svgs/motorola_audio_effects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_benefits.svg b/svgs/my_benefits.svg new file mode 100644 index 00000000000..ab10a6c57ae --- /dev/null +++ b/svgs/my_benefits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/myoffice_documents.svg b/svgs/myoffice_documents.svg new file mode 100644 index 00000000000..f6ef41e1435 --- /dev/null +++ b/svgs/myoffice_documents.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mypostcard.svg b/svgs/mypostcard.svg new file mode 100644 index 00000000000..71bdc7f57e2 --- /dev/null +++ b/svgs/mypostcard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/natwest.svg b/svgs/natwest.svg new file mode 100644 index 00000000000..1bc9af6ae29 --- /dev/null +++ b/svgs/natwest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/netschool.svg b/svgs/netschool.svg new file mode 100644 index 00000000000..6bec7c649ce --- /dev/null +++ b/svgs/netschool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/octopus_electroverse.svg b/svgs/octopus_electroverse.svg new file mode 100644 index 00000000000..78d6c800627 --- /dev/null +++ b/svgs/octopus_electroverse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/passport_parking.svg b/svgs/passport_parking.svg new file mode 100644 index 00000000000..194961f1623 --- /dev/null +++ b/svgs/passport_parking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/philips_smart_tv.svg b/svgs/philips_smart_tv.svg new file mode 100644 index 00000000000..f0bf00441dc --- /dev/null +++ b/svgs/philips_smart_tv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pintu.svg b/svgs/pintu.svg new file mode 100644 index 00000000000..45044767dd8 --- /dev/null +++ b/svgs/pintu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pionex.svg b/svgs/pionex.svg new file mode 100644 index 00000000000..7d38c798e06 --- /dev/null +++ b/svgs/pionex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/relive.svg b/svgs/relive.svg new file mode 100644 index 00000000000..41cd9b72eae --- /dev/null +++ b/svgs/relive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/safe_headphones.svg b/svgs/safe_headphones.svg new file mode 100644 index 00000000000..d8ce14a2ae2 --- /dev/null +++ b/svgs/safe_headphones.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/satoshi.svg b/svgs/satoshi.svg new file mode 100644 index 00000000000..847ea90bd14 --- /dev/null +++ b/svgs/satoshi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/shahid.svg b/svgs/shahid.svg new file mode 100644 index 00000000000..e4caffca6d0 --- /dev/null +++ b/svgs/shahid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/smart_home_manager.svg b/svgs/smart_home_manager.svg new file mode 100644 index 00000000000..11b3792b091 --- /dev/null +++ b/svgs/smart_home_manager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/t_mobile_scam_shield.svg b/svgs/t_mobile_scam_shield.svg new file mode 100644 index 00000000000..d85f264d0c0 --- /dev/null +++ b/svgs/t_mobile_scam_shield.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tata_play_binge.svg b/svgs/tata_play_binge.svg new file mode 100644 index 00000000000..a643296e867 --- /dev/null +++ b/svgs/tata_play_binge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tellonym.svg b/svgs/tellonym.svg new file mode 100644 index 00000000000..a4f0dfd8f39 --- /dev/null +++ b/svgs/tellonym.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/the_metronome_by_soundbrenner.svg b/svgs/the_metronome_by_soundbrenner.svg new file mode 100644 index 00000000000..ded87eb2766 --- /dev/null +++ b/svgs/the_metronome_by_soundbrenner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/timezone_fun.svg b/svgs/timezone_fun.svg new file mode 100644 index 00000000000..3d91af9e74b --- /dev/null +++ b/svgs/timezone_fun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/trenord.svg b/svgs/trenord.svg new file mode 100644 index 00000000000..87316a3c63b --- /dev/null +++ b/svgs/trenord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/unit_converter_by_dronzer.svg b/svgs/unit_converter_by_dronzer.svg new file mode 100644 index 00000000000..c01af4cb2e5 --- /dev/null +++ b/svgs/unit_converter_by_dronzer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ventra.svg b/svgs/ventra.svg new file mode 100644 index 00000000000..1f3e88ce374 --- /dev/null +++ b/svgs/ventra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/virgin_plus.svg b/svgs/virgin_plus.svg new file mode 100644 index 00000000000..34bb791e932 --- /dev/null +++ b/svgs/virgin_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vishal_mega_mart.svg b/svgs/vishal_mega_mart.svg new file mode 100644 index 00000000000..1ac380116e0 --- /dev/null +++ b/svgs/vishal_mega_mart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vision_plus.svg b/svgs/vision_plus.svg new file mode 100644 index 00000000000..ca3ae141108 --- /dev/null +++ b/svgs/vision_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vocabulary.svg b/svgs/vocabulary.svg new file mode 100644 index 00000000000..95d12ccd012 --- /dev/null +++ b/svgs/vocabulary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/voice_recorder_by_quality_apps.svg b/svgs/voice_recorder_by_quality_apps.svg new file mode 100644 index 00000000000..0ea30b74ad8 --- /dev/null +++ b/svgs/voice_recorder_by_quality_apps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/voov_meeting.svg b/svgs/voov_meeting.svg new file mode 100644 index 00000000000..47c76f575c5 --- /dev/null +++ b/svgs/voov_meeting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wayfair.svg b/svgs/wayfair.svg new file mode 100644 index 00000000000..9ca52f9f571 --- /dev/null +++ b/svgs/wayfair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/we.svg b/svgs/we.svg new file mode 100644 index 00000000000..2df8340b08e --- /dev/null +++ b/svgs/we.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/x_icon_changer.svg b/svgs/x_icon_changer.svg new file mode 100644 index 00000000000..eda724141aa --- /dev/null +++ b/svgs/x_icon_changer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/xmeye.svg b/svgs/xmeye.svg new file mode 100644 index 00000000000..5123ba58766 --- /dev/null +++ b/svgs/xmeye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/you_com.svg b/svgs/you_com.svg new file mode 100644 index 00000000000..cc9cf1f6a46 --- /dev/null +++ b/svgs/you_com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ypt.svg b/svgs/ypt.svg new file mode 100644 index 00000000000..d1ce6fa85d9 --- /dev/null +++ b/svgs/ypt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yurtici_kargo.svg b/svgs/yurtici_kargo.svg new file mode 100644 index 00000000000..b8540d3299d --- /dev/null +++ b/svgs/yurtici_kargo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zvuk.svg b/svgs/zvuk.svg new file mode 100644 index 00000000000..da9310159bb --- /dev/null +++ b/svgs/zvuk.svg @@ -0,0 +1 @@ + \ No newline at end of file From 34f40ce603ea55acf18b194a04ca9a5264d8c86c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 28 Jan 2025 00:57:06 +0300 Subject: [PATCH 511/527] +3 updates, +9 links (#2541) * +3 updates, +9 links * Minor fix --- app/assets/appfilter.xml | 21 +++++++++++++++------ svgs/bose.svg | 1 + svgs/bose_music.svg | 1 - svgs/microsoft_365.svg | 1 - svgs/microsoft_365_copilot.svg | 1 + svgs/nexo.svg | 2 +- 6 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 svgs/bose.svg delete mode 100644 svgs/bose_music.svg delete mode 100644 svgs/microsoft_365.svg create mode 100644 svgs/microsoft_365_copilot.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 6beeba6faa4..8a4ee543b24 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1421,9 +1421,9 @@ + + - - @@ -2184,6 +2184,7 @@ + @@ -3941,6 +3942,7 @@ + @@ -4169,6 +4171,7 @@ + @@ -4834,9 +4837,11 @@ + + @@ -4916,6 +4921,7 @@ + @@ -6540,12 +6546,12 @@ - - - - + + + + @@ -8850,6 +8856,7 @@ + @@ -12413,10 +12420,12 @@ + + diff --git a/svgs/bose.svg b/svgs/bose.svg new file mode 100644 index 00000000000..af411f0a6c0 --- /dev/null +++ b/svgs/bose.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bose_music.svg b/svgs/bose_music.svg deleted file mode 100644 index 474f77275d2..00000000000 --- a/svgs/bose_music.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/microsoft_365.svg b/svgs/microsoft_365.svg deleted file mode 100644 index 005869bc5a2..00000000000 --- a/svgs/microsoft_365.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/svgs/microsoft_365_copilot.svg b/svgs/microsoft_365_copilot.svg new file mode 100644 index 00000000000..fc7c0eac3fa --- /dev/null +++ b/svgs/microsoft_365_copilot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nexo.svg b/svgs/nexo.svg index f5fe064cc13..307511e7370 100644 --- a/svgs/nexo.svg +++ b/svgs/nexo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From de1bd186c47f6655c9b3be7c9af9baa5dd636e54 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 28 Jan 2025 02:41:42 +0300 Subject: [PATCH 512/527] Minor copyediting (#2542) * Update icon_rebrand.yml * Update README.md * Update README.md * Update README.md --- .github/ISSUE_TEMPLATE/icon_rebrand.yml | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/icon_rebrand.yml b/.github/ISSUE_TEMPLATE/icon_rebrand.yml index 90fef3c5381..4b703b8f41f 100644 --- a/.github/ISSUE_TEMPLATE/icon_rebrand.yml +++ b/.github/ISSUE_TEMPLATE/icon_rebrand.yml @@ -1,4 +1,4 @@ -name: Update an existing icon +name: Update design of an existing icon description: Request changing an icon if it is outdated or applied incorrectly. labels: ["icon update"] body: @@ -11,8 +11,8 @@ body: You can find the current icon and application name in [the appfilter.xml](https://github.com/LawnchairLauncher/lawnicons/blob/develop/app/assets/appfilter.xml). For example, you found "...**drawable="ladb" name="ADB Shell" />**". The icon is [ladb](https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/ladb.svg) and the application name is **ADB Shell**. **Sample response** - Now: Twitter, https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/twitter.svg - New: X, https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png + - Now: Twitter, https://github.com/LawnchairLauncher/lawnicons/tree/develop/svgs/twitter.svg + - New: X, https://cdn.cms-twdigitalassets.com/content/dam/about-twitter/x/brand-toolkit/logo-black.png.twimg.2560.png placeholder: Tell us what should be changed and how validations: diff --git a/README.md b/README.md index 4d41d9cb6cf..fc48ab23f00 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,14 @@ Lawnicons is best used [on the latest version of Lawnchair](https://play.google.

-Due to different package names, Lawnicons on the Play Store will install as a different app from other sources. +Lawnicons on the Play Store will install as a different app from other sources. **Development builds:** [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK) • [Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22app.lawnchair.lawnicons%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FLawnchairLauncher%2Flawnicons%22%2C%22author%22%3A%22LawnchairLauncher%22%2C%22name%22%3A%22Lawnicons%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Afalse%2C%5C%22releaseDateAsVersion%5C%22%3Atrue%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22Lawnicons%20Nightly%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) • [GitHub](https://github.com/LawnchairLauncher/lawnicons/releases/tag/nightly) ## Contributing -Please see our guidelines for information on contributing icons or code, it will save you time. We put the quality of icons first, so the requirements are relatively strict. Let us know if the guidelines are unclear somewhere so that we can clarify them. +We put the quality of icons first. Please see our guidelines for information on contributing icons or code, it will save you time. -[Lawnicons guidelines](CONTRIBUTING.md) • [Icon samples in Figma](https://www.figma.com/community/file/1227718471680779613) • [Popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey=&gid=609680142#gid=609680142) • [Development issues](https://github.com/LawnchairLauncher/lawnicons/issues) +[Simplest icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?usp=sharing) • [Lawnicons guidelines](CONTRIBUTING.md) • [Icon samples in Figma](https://www.figma.com/community/file/1227718471680779613) • [Development issues](https://github.com/LawnchairLauncher/lawnicons/issues) ## Requesting icons [Icon request form](https://forms.gle/nR4ozeeJBKrLwGfk6) • [Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) From 24c7c7462b642dba1bd561270b083a400cc29f7f Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 1 Feb 2025 06:51:07 +0300 Subject: [PATCH 513/527] +74 icons (#2548) --- app/assets/appfilter.xml | 74 +++++++++++++++++++ svgs/_2accounts.svg | 1 + svgs/_500px.svg | 1 + svgs/_7plus.svg | 1 + svgs/accessibility_scanner.svg | 1 + .../al_maani_arabic_indonesian_dictionary.svg | 1 + svgs/amino.svg | 1 + svgs/anova_culinary.svg | 1 + svgs/any_do.svg | 1 + svgs/au.svg | 1 + svgs/boost_mobile.svg | 1 + svgs/charging_fun.svg | 1 + svgs/cheq.svg | 1 + svgs/claro.svg | 1 + svgs/cleartrip.svg | 1 + svgs/depop.svg | 1 + svgs/docusign.svg | 1 + svgs/docvault.svg | 1 + svgs/face_unlock.svg | 1 + svgs/first_iraqi_bank.svg | 1 + svgs/gcamator.svg | 1 + svgs/globe_suite.svg | 1 + svgs/hama_smart_home.svg | 1 + svgs/honor_ai_space.svg | 1 + svgs/huawei_ai_voice.svg | 1 + svgs/huawei_meetime.svg | 1 + svgs/idagio.svg | 1 + svgs/iwall.svg | 1 + svgs/kiwi_com.svg | 1 + svgs/lenovo_freestyle.svg | 1 + svgs/lg_fm_radio.svg | 1 + svgs/lg_smartworld.svg | 1 + svgs/liner.svg | 1 + svgs/magiconnect.svg | 1 + svgs/manual_camera_compatibility.svg | 1 + svgs/mercusys.svg | 1 + svgs/meta_ads_manager.svg | 1 + svgs/mobipdf.svg | 1 + svgs/month.svg | 1 + svgs/multiple_accounts.svg | 1 + svgs/museums_of_turkiye.svg | 1 + svgs/myair.svg | 1 + svgs/mymail.svg | 1 + svgs/mystic_mansion.svg | 1 + svgs/nespresso.svg | 1 + svgs/netmeds.svg | 1 + svgs/nexa_icons.svg | 1 + svgs/onshape.svg | 1 + svgs/opentable.svg | 1 + svgs/oraimo_sound.svg | 1 + svgs/ovpnspider.svg | 1 + svgs/palmpay.svg | 1 + svgs/parallel.svg | 1 + svgs/pear_launcher.svg | 1 + svgs/razer_audio.svg | 1 + svgs/ripio.svg | 1 + svgs/rostelecom.svg | 1 + svgs/samsung_kids.svg | 1 + svgs/samsung_link_sharing.svg | 1 + svgs/samsung_secure_wi_fi.svg | 1 + svgs/samsung_user_manual.svg | 1 + svgs/ski_tracks.svg | 1 + svgs/strobe.svg | 1 + svgs/super_backup.svg | 1 + svgs/telmex.svg | 1 + svgs/texpand.svg | 1 + svgs/tile_shortcuts.svg | 1 + svgs/tiny_decisions.svg | 1 + svgs/turkcell_tv_plus.svg | 1 + svgs/vivo_cloud.svg | 1 + svgs/vivo_health.svg | 1 + svgs/vivo_jovi_inlife.svg | 1 + svgs/vivo_jovi_voice.svg | 1 + svgs/vivo_wallet.svg | 1 + svgs/vllo.svg | 1 + 75 files changed, 148 insertions(+) create mode 100644 svgs/_2accounts.svg create mode 100644 svgs/_500px.svg create mode 100644 svgs/_7plus.svg create mode 100644 svgs/accessibility_scanner.svg create mode 100644 svgs/al_maani_arabic_indonesian_dictionary.svg create mode 100644 svgs/amino.svg create mode 100644 svgs/anova_culinary.svg create mode 100644 svgs/any_do.svg create mode 100644 svgs/au.svg create mode 100644 svgs/boost_mobile.svg create mode 100644 svgs/charging_fun.svg create mode 100644 svgs/cheq.svg create mode 100644 svgs/claro.svg create mode 100644 svgs/cleartrip.svg create mode 100644 svgs/depop.svg create mode 100644 svgs/docusign.svg create mode 100644 svgs/docvault.svg create mode 100644 svgs/face_unlock.svg create mode 100644 svgs/first_iraqi_bank.svg create mode 100644 svgs/gcamator.svg create mode 100644 svgs/globe_suite.svg create mode 100644 svgs/hama_smart_home.svg create mode 100644 svgs/honor_ai_space.svg create mode 100644 svgs/huawei_ai_voice.svg create mode 100644 svgs/huawei_meetime.svg create mode 100644 svgs/idagio.svg create mode 100644 svgs/iwall.svg create mode 100644 svgs/kiwi_com.svg create mode 100644 svgs/lenovo_freestyle.svg create mode 100644 svgs/lg_fm_radio.svg create mode 100644 svgs/lg_smartworld.svg create mode 100644 svgs/liner.svg create mode 100644 svgs/magiconnect.svg create mode 100644 svgs/manual_camera_compatibility.svg create mode 100644 svgs/mercusys.svg create mode 100644 svgs/meta_ads_manager.svg create mode 100644 svgs/mobipdf.svg create mode 100644 svgs/month.svg create mode 100644 svgs/multiple_accounts.svg create mode 100644 svgs/museums_of_turkiye.svg create mode 100644 svgs/myair.svg create mode 100644 svgs/mymail.svg create mode 100644 svgs/mystic_mansion.svg create mode 100644 svgs/nespresso.svg create mode 100644 svgs/netmeds.svg create mode 100644 svgs/nexa_icons.svg create mode 100644 svgs/onshape.svg create mode 100644 svgs/opentable.svg create mode 100644 svgs/oraimo_sound.svg create mode 100644 svgs/ovpnspider.svg create mode 100644 svgs/palmpay.svg create mode 100644 svgs/parallel.svg create mode 100644 svgs/pear_launcher.svg create mode 100644 svgs/razer_audio.svg create mode 100644 svgs/ripio.svg create mode 100644 svgs/rostelecom.svg create mode 100644 svgs/samsung_kids.svg create mode 100644 svgs/samsung_link_sharing.svg create mode 100644 svgs/samsung_secure_wi_fi.svg create mode 100644 svgs/samsung_user_manual.svg create mode 100644 svgs/ski_tracks.svg create mode 100644 svgs/strobe.svg create mode 100644 svgs/super_backup.svg create mode 100644 svgs/telmex.svg create mode 100644 svgs/texpand.svg create mode 100644 svgs/tile_shortcuts.svg create mode 100644 svgs/tiny_decisions.svg create mode 100644 svgs/turkcell_tv_plus.svg create mode 100644 svgs/vivo_cloud.svg create mode 100644 svgs/vivo_health.svg create mode 100644 svgs/vivo_jovi_inlife.svg create mode 100644 svgs/vivo_jovi_voice.svg create mode 100644 svgs/vivo_wallet.svg create mode 100644 svgs/vllo.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 8a4ee543b24..481074c8565 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -84,6 +84,7 @@ + @@ -105,6 +106,7 @@ + @@ -114,6 +116,7 @@ + @@ -147,6 +150,7 @@ + @@ -326,6 +330,7 @@ + @@ -504,6 +509,7 @@ + @@ -587,6 +593,7 @@ + @@ -606,6 +613,7 @@ + @@ -825,6 +833,7 @@ + @@ -1412,6 +1421,7 @@ + @@ -2085,6 +2095,7 @@ + @@ -2109,6 +2120,7 @@ + @@ -2205,6 +2217,7 @@ + @@ -2230,6 +2243,7 @@ + @@ -2796,6 +2810,7 @@ + @@ -3010,6 +3025,8 @@ + + @@ -3498,6 +3515,7 @@ + @@ -3728,6 +3746,7 @@ + @@ -4172,6 +4191,7 @@ + @@ -4294,6 +4314,7 @@ + @@ -4692,6 +4713,7 @@ + @@ -4832,6 +4854,7 @@ + @@ -4893,6 +4916,7 @@ + @@ -4910,6 +4934,7 @@ + @@ -5007,6 +5032,7 @@ + @@ -5296,6 +5322,7 @@ + @@ -5620,6 +5647,7 @@ + @@ -5794,6 +5822,7 @@ + @@ -5820,8 +5849,10 @@ + + @@ -5911,6 +5942,7 @@ + @@ -6080,6 +6112,7 @@ + @@ -6150,6 +6183,7 @@ + @@ -6367,6 +6401,7 @@ + @@ -6444,6 +6479,7 @@ + @@ -6744,6 +6780,7 @@ + @@ -6800,6 +6837,7 @@ + @@ -6898,6 +6936,7 @@ + @@ -6907,6 +6946,7 @@ + @@ -7102,6 +7142,7 @@ + @@ -7151,6 +7192,7 @@ + @@ -7178,6 +7220,7 @@ + @@ -7334,6 +7377,7 @@ + @@ -7348,6 +7392,7 @@ + @@ -7372,6 +7417,7 @@ + @@ -7846,6 +7892,7 @@ + @@ -7899,6 +7946,7 @@ + @@ -7937,6 +7985,7 @@ + @@ -8004,6 +8053,7 @@ + @@ -8046,6 +8096,7 @@ + @@ -8071,6 +8122,7 @@ + @@ -8159,6 +8211,7 @@ + @@ -9113,6 +9166,7 @@ + @@ -9363,6 +9417,7 @@ + @@ -9531,6 +9586,8 @@ + + @@ -9584,6 +9641,7 @@ + @@ -9603,6 +9661,7 @@ + @@ -10423,6 +10482,7 @@ + @@ -10926,6 +10986,7 @@ + @@ -10988,6 +11049,7 @@ + @@ -11289,6 +11351,7 @@ + @@ -11343,6 +11406,7 @@ + @@ -11686,6 +11750,7 @@ + @@ -11710,6 +11775,7 @@ + @@ -11979,6 +12045,7 @@ + @@ -12407,6 +12474,7 @@ + @@ -12417,11 +12485,15 @@ + + + + @@ -12443,6 +12515,7 @@ + @@ -13474,6 +13547,7 @@ + diff --git a/svgs/_2accounts.svg b/svgs/_2accounts.svg new file mode 100644 index 00000000000..18608750b0f --- /dev/null +++ b/svgs/_2accounts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/_500px.svg b/svgs/_500px.svg new file mode 100644 index 00000000000..ac9fb4e2f05 --- /dev/null +++ b/svgs/_500px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/_7plus.svg b/svgs/_7plus.svg new file mode 100644 index 00000000000..7878a7726a1 --- /dev/null +++ b/svgs/_7plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/accessibility_scanner.svg b/svgs/accessibility_scanner.svg new file mode 100644 index 00000000000..3ccde62898e --- /dev/null +++ b/svgs/accessibility_scanner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/al_maani_arabic_indonesian_dictionary.svg b/svgs/al_maani_arabic_indonesian_dictionary.svg new file mode 100644 index 00000000000..19294d1771e --- /dev/null +++ b/svgs/al_maani_arabic_indonesian_dictionary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/amino.svg b/svgs/amino.svg new file mode 100644 index 00000000000..0745e4d0faf --- /dev/null +++ b/svgs/amino.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/anova_culinary.svg b/svgs/anova_culinary.svg new file mode 100644 index 00000000000..7f446066544 --- /dev/null +++ b/svgs/anova_culinary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/any_do.svg b/svgs/any_do.svg new file mode 100644 index 00000000000..c9e918134ff --- /dev/null +++ b/svgs/any_do.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/au.svg b/svgs/au.svg new file mode 100644 index 00000000000..3f1e1968d75 --- /dev/null +++ b/svgs/au.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/boost_mobile.svg b/svgs/boost_mobile.svg new file mode 100644 index 00000000000..36c855a06d0 --- /dev/null +++ b/svgs/boost_mobile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/charging_fun.svg b/svgs/charging_fun.svg new file mode 100644 index 00000000000..8ff3c7fd0fe --- /dev/null +++ b/svgs/charging_fun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cheq.svg b/svgs/cheq.svg new file mode 100644 index 00000000000..1831950eb2a --- /dev/null +++ b/svgs/cheq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/claro.svg b/svgs/claro.svg new file mode 100644 index 00000000000..d43718fa21b --- /dev/null +++ b/svgs/claro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cleartrip.svg b/svgs/cleartrip.svg new file mode 100644 index 00000000000..ba272d983ec --- /dev/null +++ b/svgs/cleartrip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/depop.svg b/svgs/depop.svg new file mode 100644 index 00000000000..34b8aef4f73 --- /dev/null +++ b/svgs/depop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/docusign.svg b/svgs/docusign.svg new file mode 100644 index 00000000000..795c4d01c2d --- /dev/null +++ b/svgs/docusign.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/docvault.svg b/svgs/docvault.svg new file mode 100644 index 00000000000..f189c8cd0d2 --- /dev/null +++ b/svgs/docvault.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/face_unlock.svg b/svgs/face_unlock.svg new file mode 100644 index 00000000000..938bda8e687 --- /dev/null +++ b/svgs/face_unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/first_iraqi_bank.svg b/svgs/first_iraqi_bank.svg new file mode 100644 index 00000000000..769948ea42e --- /dev/null +++ b/svgs/first_iraqi_bank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gcamator.svg b/svgs/gcamator.svg new file mode 100644 index 00000000000..dc4f2aece83 --- /dev/null +++ b/svgs/gcamator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/globe_suite.svg b/svgs/globe_suite.svg new file mode 100644 index 00000000000..e4489747bb8 --- /dev/null +++ b/svgs/globe_suite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/hama_smart_home.svg b/svgs/hama_smart_home.svg new file mode 100644 index 00000000000..c989f2e0396 --- /dev/null +++ b/svgs/hama_smart_home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/honor_ai_space.svg b/svgs/honor_ai_space.svg new file mode 100644 index 00000000000..1b09f6eafcc --- /dev/null +++ b/svgs/honor_ai_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_ai_voice.svg b/svgs/huawei_ai_voice.svg new file mode 100644 index 00000000000..a4262866b82 --- /dev/null +++ b/svgs/huawei_ai_voice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_meetime.svg b/svgs/huawei_meetime.svg new file mode 100644 index 00000000000..30818484c53 --- /dev/null +++ b/svgs/huawei_meetime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/idagio.svg b/svgs/idagio.svg new file mode 100644 index 00000000000..1756691ccef --- /dev/null +++ b/svgs/idagio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iwall.svg b/svgs/iwall.svg new file mode 100644 index 00000000000..6764bb15f5a --- /dev/null +++ b/svgs/iwall.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kiwi_com.svg b/svgs/kiwi_com.svg new file mode 100644 index 00000000000..638b52ed187 --- /dev/null +++ b/svgs/kiwi_com.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lenovo_freestyle.svg b/svgs/lenovo_freestyle.svg new file mode 100644 index 00000000000..8a628d1b39c --- /dev/null +++ b/svgs/lenovo_freestyle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lg_fm_radio.svg b/svgs/lg_fm_radio.svg new file mode 100644 index 00000000000..3277c09ffe2 --- /dev/null +++ b/svgs/lg_fm_radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lg_smartworld.svg b/svgs/lg_smartworld.svg new file mode 100644 index 00000000000..710b4e8af7b --- /dev/null +++ b/svgs/lg_smartworld.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/liner.svg b/svgs/liner.svg new file mode 100644 index 00000000000..edbfd109e4a --- /dev/null +++ b/svgs/liner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/magiconnect.svg b/svgs/magiconnect.svg new file mode 100644 index 00000000000..770ff268ed7 --- /dev/null +++ b/svgs/magiconnect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/manual_camera_compatibility.svg b/svgs/manual_camera_compatibility.svg new file mode 100644 index 00000000000..2e733aa1eef --- /dev/null +++ b/svgs/manual_camera_compatibility.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mercusys.svg b/svgs/mercusys.svg new file mode 100644 index 00000000000..e49e6202066 --- /dev/null +++ b/svgs/mercusys.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meta_ads_manager.svg b/svgs/meta_ads_manager.svg new file mode 100644 index 00000000000..9c3f32338cf --- /dev/null +++ b/svgs/meta_ads_manager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mobipdf.svg b/svgs/mobipdf.svg new file mode 100644 index 00000000000..f51625f3a92 --- /dev/null +++ b/svgs/mobipdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/month.svg b/svgs/month.svg new file mode 100644 index 00000000000..709a138f35f --- /dev/null +++ b/svgs/month.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/multiple_accounts.svg b/svgs/multiple_accounts.svg new file mode 100644 index 00000000000..cb9c80afcd1 --- /dev/null +++ b/svgs/multiple_accounts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/museums_of_turkiye.svg b/svgs/museums_of_turkiye.svg new file mode 100644 index 00000000000..f4a9063315c --- /dev/null +++ b/svgs/museums_of_turkiye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/myair.svg b/svgs/myair.svg new file mode 100644 index 00000000000..6b15a730455 --- /dev/null +++ b/svgs/myair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mymail.svg b/svgs/mymail.svg new file mode 100644 index 00000000000..414d10e9296 --- /dev/null +++ b/svgs/mymail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mystic_mansion.svg b/svgs/mystic_mansion.svg new file mode 100644 index 00000000000..2da29ed7e30 --- /dev/null +++ b/svgs/mystic_mansion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nespresso.svg b/svgs/nespresso.svg new file mode 100644 index 00000000000..2081603f9e9 --- /dev/null +++ b/svgs/nespresso.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/netmeds.svg b/svgs/netmeds.svg new file mode 100644 index 00000000000..49a1bbb39f2 --- /dev/null +++ b/svgs/netmeds.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nexa_icons.svg b/svgs/nexa_icons.svg new file mode 100644 index 00000000000..0e3d26db4ef --- /dev/null +++ b/svgs/nexa_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/onshape.svg b/svgs/onshape.svg new file mode 100644 index 00000000000..6553f2035a1 --- /dev/null +++ b/svgs/onshape.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/opentable.svg b/svgs/opentable.svg new file mode 100644 index 00000000000..b616d9b1a92 --- /dev/null +++ b/svgs/opentable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oraimo_sound.svg b/svgs/oraimo_sound.svg new file mode 100644 index 00000000000..e68493da1f2 --- /dev/null +++ b/svgs/oraimo_sound.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ovpnspider.svg b/svgs/ovpnspider.svg new file mode 100644 index 00000000000..2c5c028c7ad --- /dev/null +++ b/svgs/ovpnspider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/palmpay.svg b/svgs/palmpay.svg new file mode 100644 index 00000000000..8be61439133 --- /dev/null +++ b/svgs/palmpay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/parallel.svg b/svgs/parallel.svg new file mode 100644 index 00000000000..cded420d77b --- /dev/null +++ b/svgs/parallel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pear_launcher.svg b/svgs/pear_launcher.svg new file mode 100644 index 00000000000..64decbcc566 --- /dev/null +++ b/svgs/pear_launcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/razer_audio.svg b/svgs/razer_audio.svg new file mode 100644 index 00000000000..5519318af37 --- /dev/null +++ b/svgs/razer_audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ripio.svg b/svgs/ripio.svg new file mode 100644 index 00000000000..e69e2700499 --- /dev/null +++ b/svgs/ripio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rostelecom.svg b/svgs/rostelecom.svg new file mode 100644 index 00000000000..33186b779dc --- /dev/null +++ b/svgs/rostelecom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_kids.svg b/svgs/samsung_kids.svg new file mode 100644 index 00000000000..8e64ea69ac2 --- /dev/null +++ b/svgs/samsung_kids.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_link_sharing.svg b/svgs/samsung_link_sharing.svg new file mode 100644 index 00000000000..022823b2cdd --- /dev/null +++ b/svgs/samsung_link_sharing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_secure_wi_fi.svg b/svgs/samsung_secure_wi_fi.svg new file mode 100644 index 00000000000..537fcdbe13e --- /dev/null +++ b/svgs/samsung_secure_wi_fi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/samsung_user_manual.svg b/svgs/samsung_user_manual.svg new file mode 100644 index 00000000000..5a01da6a619 --- /dev/null +++ b/svgs/samsung_user_manual.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ski_tracks.svg b/svgs/ski_tracks.svg new file mode 100644 index 00000000000..9b039ac7085 --- /dev/null +++ b/svgs/ski_tracks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/strobe.svg b/svgs/strobe.svg new file mode 100644 index 00000000000..9b313630fb0 --- /dev/null +++ b/svgs/strobe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/super_backup.svg b/svgs/super_backup.svg new file mode 100644 index 00000000000..1620323f502 --- /dev/null +++ b/svgs/super_backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/telmex.svg b/svgs/telmex.svg new file mode 100644 index 00000000000..bb5a46cd1ef --- /dev/null +++ b/svgs/telmex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/texpand.svg b/svgs/texpand.svg new file mode 100644 index 00000000000..1fd775491be --- /dev/null +++ b/svgs/texpand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tile_shortcuts.svg b/svgs/tile_shortcuts.svg new file mode 100644 index 00000000000..3fe40457474 --- /dev/null +++ b/svgs/tile_shortcuts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tiny_decisions.svg b/svgs/tiny_decisions.svg new file mode 100644 index 00000000000..0579ebf756e --- /dev/null +++ b/svgs/tiny_decisions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/turkcell_tv_plus.svg b/svgs/turkcell_tv_plus.svg new file mode 100644 index 00000000000..830c4752495 --- /dev/null +++ b/svgs/turkcell_tv_plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_cloud.svg b/svgs/vivo_cloud.svg new file mode 100644 index 00000000000..a9a09cd9092 --- /dev/null +++ b/svgs/vivo_cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_health.svg b/svgs/vivo_health.svg new file mode 100644 index 00000000000..727b73b2481 --- /dev/null +++ b/svgs/vivo_health.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_jovi_inlife.svg b/svgs/vivo_jovi_inlife.svg new file mode 100644 index 00000000000..9d0b5574aca --- /dev/null +++ b/svgs/vivo_jovi_inlife.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_jovi_voice.svg b/svgs/vivo_jovi_voice.svg new file mode 100644 index 00000000000..08267ebb0fc --- /dev/null +++ b/svgs/vivo_jovi_voice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vivo_wallet.svg b/svgs/vivo_wallet.svg new file mode 100644 index 00000000000..435303aa4f0 --- /dev/null +++ b/svgs/vivo_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vllo.svg b/svgs/vllo.svg new file mode 100644 index 00000000000..08326c8cb57 --- /dev/null +++ b/svgs/vllo.svg @@ -0,0 +1 @@ + \ No newline at end of file From ad6ac27888b6b00170d9b1bd2fa95604c2624022 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 1 Feb 2025 07:09:07 +0300 Subject: [PATCH 514/527] +8 links (#2549) --- app/assets/appfilter.xml | 14 +++++++++++--- svgs/{samsung_max_vpn.svg => samsung_max.svg} | 0 2 files changed, 11 insertions(+), 3 deletions(-) rename svgs/{samsung_max_vpn.svg => samsung_max.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 481074c8565..f5ba99830fa 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1146,6 +1146,7 @@ + @@ -4862,6 +4863,7 @@ + @@ -5849,9 +5851,11 @@ + + @@ -9588,9 +9592,10 @@ - - - + + + + @@ -10668,6 +10673,7 @@ + @@ -12106,6 +12112,7 @@ + @@ -12487,6 +12494,7 @@ + diff --git a/svgs/samsung_max_vpn.svg b/svgs/samsung_max.svg similarity index 100% rename from svgs/samsung_max_vpn.svg rename to svgs/samsung_max.svg From 1c114d580d1972c5ed462f894e2093ef014925d1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 9 Feb 2025 05:50:48 +0000 Subject: [PATCH 515/527] New Crowdin translations by GitHub Action (#2551) Co-authored-by: Crowdin Bot --- app/src/main/res/values-af-rZA/strings.xml | 3 +- app/src/main/res/values-ar-rSA/strings.xml | 61 ++++++++++---------- app/src/main/res/values-ca-rES/strings.xml | 1 + app/src/main/res/values-cs-rCZ/strings.xml | 1 + app/src/main/res/values-da-rDK/strings.xml | 1 + app/src/main/res/values-de-rDE/strings.xml | 7 ++- app/src/main/res/values-el-rGR/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 5 +- app/src/main/res/values-fi-rFI/strings.xml | 1 + app/src/main/res/values-fil-rPH/strings.xml | 1 + app/src/main/res/values-fr-rFR/strings.xml | 15 ++--- app/src/main/res/values-hi-rIN/strings.xml | 1 + app/src/main/res/values-hu-rHU/strings.xml | 9 +-- app/src/main/res/values-in-rID/strings.xml | 1 + app/src/main/res/values-it-rIT/strings.xml | 63 +++++++++++---------- app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-ja-rJP/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 7 ++- app/src/main/res/values-mr-rIN/strings.xml | 1 + app/src/main/res/values-nl-rNL/strings.xml | 61 ++++++++++---------- app/src/main/res/values-no-rNO/strings.xml | 51 +++++++++-------- app/src/main/res/values-pl-rPL/strings.xml | 15 ++--- app/src/main/res/values-pt-rBR/strings.xml | 61 ++++++++++---------- app/src/main/res/values-pt-rPT/strings.xml | 61 ++++++++++---------- app/src/main/res/values-ro-rRO/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sv-rSE/strings.xml | 1 + app/src/main/res/values-tr-rTR/strings.xml | 1 + app/src/main/res/values-uk-rUA/strings.xml | 19 ++++--- app/src/main/res/values-vi-rVN/strings.xml | 3 +- app/src/main/res/values-zh-rCN/strings.xml | 7 ++- app/src/main/res/values-zh-rTW/strings.xml | 1 + 32 files changed, 248 insertions(+), 216 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 90b7bb59143..46d82c131cc 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -45,7 +45,7 @@ Open-source licenses - Name + Naam Drawable @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Clear diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 5e5a5e3c238..702c85f2a05 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -3,68 +3,69 @@ - Version %s + النسخة %s - Search through %d icons - Pick an icon + البحث خلال %d الأيقونات + اختر أيقونة البحث - %s not found + %s لم يتم العثور عليها حول التطبيق - Icon request form + طلب أيقونة من - Contributors + المساهمون - Core contributors + المساهمون الأساسيون - See all contributors + أنظر لكل المساهمون - View on GitHub + أظهر في Github - Share details + شارك التفاصيل - Core app + التطبيق الأساسي الأيقونات - Infrastructure + الأساس - Special thanks + شكر خاص - For inspiring the app icon + من أجل الإلهام لأيقونة التطبيق - For naming the app + من أجل تسمية التطبيق - Open-source licenses + الترخيص مفتوحة المصدر - Name + الاسم - Drawable + مرسوم - Component name + اسم المكون - Mapped components + مكون معد - If the icon is outdated due to rebranding, create an issue on GitHub. + إذا كانت الأيقونة قديمة بسبب تغير هوية التطبيق, اعمل ملاحظة علي Github. - Toggle visibility of contents + بدل وضع الرؤية للمحتوي - Request icons - Copy to clipboard - Copied text + طلب أيقونات + انسخ إلي الحافظة + نص منسوخ - Request missing icons from the bottom bar - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + اطلب الأيقونات المفقودة من الشريط السفلي + طلب الأيقونات متوقف حاليًا + تم نسخ تفاصيل طلب الأيقونة إلي الحافظة. لعمل الطلب, أرسل التفاصيل في التقرير. + اعمل تقرير مسح - New icons in v%1$s - New icons (%1$s) + أيقونات جديدة في التحديث%1$s + أيقونات جديدة(%1$s) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 866302f2fa1..0126cf49d64 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Netejar diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 4801f551e89..1f52791c949 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Clear diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index f027ffb954f..b23466fe8d5 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Clear diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 029a7e0da26..426d5824f1c 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -61,10 +61,11 @@ In Zwischenablage kopieren Text kopiert - Request missing icons from the bottom bar + Fehlende Symbole von der unteren Leiste anfordern + Icon requests are currently suspended Details der Symbolanfrage in die Zwischenablage kopiert. Um sie anzufragen, übertrage die Details in das Formular. Formular öffnen Leeren - New icons in v%1$s - New icons (%1$s) + Neue Symbole in v%1$s + Neue Symbole (%1$s) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 43469a3e3b7..14081f1c96e 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -62,6 +62,7 @@ Αντιγραμμένο κείμενο Request missing icons from the bottom bar + Icon requests are currently suspended Αντιγράφηκαν λεπτομέρειες αιτήματος εικονιδίου στο πρόχειρο. Για να τα ζητήσετε, υποβάλετε τα στοιχεία στη φόρμα. Άνοιγμα φόρμας Εκκαθάριση diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index d51cfff663e..e7fcbfdee24 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -62,9 +62,10 @@ Texto copiado Solicitar iconos que faltan en la barra inferior + Las solicitudes de iconos están actualmente suspendidas Solicitar detalles del icono copiado al portapapeles. Para solicitarlos, envíe los detalles al formulario. Abrir formulario Borrar - New icons in v%1$s - New icons (%1$s) + Nuevos iconos en v%1$s + Nuevos iconos (%1$s) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index c340555cff2..a6d19c505e7 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Clear diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index d2cbd1f50f0..10a3e393b57 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -62,6 +62,7 @@ Kinopya ang teksto Request missing icons from the bottom bar + Icon requests are currently suspended Nakopya na ang mga detalye tungkol sa ihihiling na icons sa clipboard. Upang hilingin ang mga ito, isumite ang mga detalye sa form. Buksan ang form Clear diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index b0b4132be25..336d9296089 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -12,7 +12,7 @@ Recherche - Aucune icône trouvée + %s introuvable À propos @@ -38,9 +38,9 @@ Remerciements spéciaux - Pour avoir inspiré l\'icône de l\'application. + Pour avoir inspiré l\'icône de l\'application - Pour avoir donné le nom à l\'application. + Pour avoir donné le nom à l\'application Mentions légales @@ -53,7 +53,7 @@ Application - Si l\'icône est obsolète en raison d\'un changement de marque, veuillez nous aviser sur GitHub. + Si l\'icône est obsolète en raison d\'un changement de marque, créez un « problème » sur GitHub. Activer/désactiver la visibilité des contenus @@ -61,10 +61,11 @@ Copier dans le presse-papier Texte copié - Request missing icons from the bottom bar + Demander icônes manquantes de la barre inférieure + Icon requests are currently suspended Détails de la demande d\'icône copiés dans le presse-papiers. Pour les demander, entrez les détails dans le formulaire. Ouvrir le formulaire Effacer - New icons in v%1$s - New icons (%1$s) + Nouvelles icônes dans v%1$s + Nouvelles icônes (%1$s) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 41ca1446644..a05a0e697dc 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form साफ करें diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index df795c61ba7..bf30d2db4eb 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -23,7 +23,7 @@ Közreműködők - Alapvető közreműködők + Fő közreműködők Az összes közreműködő megtekintése @@ -62,9 +62,10 @@ Másolt szöveg A hiányzó ikonokat az alsó sávról kérje + Az ikonigénylés jelenleg nem érhető el Az ikonkérelem részletei a vágólapra másolva. Kéréséhez adja meg a részleteket az űrlapon. Az űrlap megnyitása - Clear - New icons in v%1$s - New icons (%1$s) + Törlés + %1$s-verzió új ikonjai + Új ikonok (%1$s) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 387ebbd0a95..98d1a5c5121 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Bersihkan diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index b7370a30508..c5bc685aaf5 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -3,68 +3,69 @@ - Version %s + Versione %s - Search through %d icons - Pick an icon + Cerca tra %d icone + Seleziona un\'icona Ricerca - %s not found + Nessun risultato per ‘%s’ Informazioni - Icon request form + Modulo di richiesta icone - Contributors + Contributori - Core contributors + Contributori principali - See all contributors + Vedi tutti i contributori - View on GitHub + Visualizza su GitHub - Share details + Condividi i dettagli - Core app + Core dell\'app Icone - Infrastructure + Infrastruttura - Special thanks + Ringraziamenti speciali - For inspiring the app icon + Per aver ispirato l\'icona dell\'app - For naming the app + Per aver dato il nome all\'app - Open-source licenses + Licenze open-source - Name + Nome - Drawable + Disegnabile - Component name + Nome del componente - Mapped components + Componenti mappati - If the icon is outdated due to rebranding, create an issue on GitHub. + Se l\'icona è obsoleta a causa di un rebranding, crea un\'issue su GitHub. - Toggle visibility of contents + Attiva/Disattiva la visibilità dei contenuti - Request icons - Copy to clipboard - Copied text + Richiedi icone + Copia negli appunti + Testo copiato - Request missing icons from the bottom bar - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form - Clear - New icons in v%1$s - New icons (%1$s) + Richiedi icone mancanti dalla barra inferiore + Le richieste d\'icone sono attualmente sospese + Dettagli della richiesta delle icone copiati negli appunti. Per richiederle, inviali nel modulo. + Apri il modulo + Cancella + Nuove icone in v%1$s + Nuove icone (%1$s) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 56a09f300e4..32e7cb18303 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form ניקוי diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index b8704ac8c30..c259d6a4b42 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -62,6 +62,7 @@ テキストをコピーしました Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form 消去 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 38a40bd9196..6015eab2461 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -33,7 +33,7 @@ 코어 앱 아이콘 - Infrastructure + 인프라 Special thanks @@ -62,9 +62,10 @@ 텍스트를 복사했습니다. Request missing icons from the bottom bar + Icon requests are currently suspended 아이콘 요청 정보를 클립보드에 복사했습니다. 아이콘을 요청하려면 세부 정보를 폼에 입력하세요. 폼 열기 기록 삭제 - New icons in v%1$s - New icons (%1$s) + 버전 %1$s의 새로운 아이콘 + 새로운 아이콘 (%1$s) diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index 4d277adfa95..570f3cb29b4 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Clear diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index f0222e80719..36646363f1b 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -3,68 +3,69 @@ - Version %s + Versie %s - Search through %d icons - Pick an icon + Zoeken door %d pictogrammen + Kies een pictogram Zoeken - %s not found + %s niet gevonden Over - Icon request form + Pictogram aanvraagformulier - Contributors + Bijdragen - Core contributors + Belangrijke bijdragen - See all contributors + Alle bijdragen weergeven - View on GitHub + Bekijken op GitHub - Share details + Details delen - Core app + Basis-app Pictogrammen - Infrastructure + Infrastructuur - Special thanks + Bijzondere dank - For inspiring the app icon + Voor inspiratie voor het app-pictogram - For naming the app + Voor het noemen van de app - Open-source licenses + Open-source licenties - Name + Naam - Drawable + Tekenbaar - Component name + Naam onderdeel - Mapped components + Toegewezen onderdelen - If the icon is outdated due to rebranding, create an issue on GitHub. + Als het pictogram verouderd is, meld dan een probleem op GitHub. - Toggle visibility of contents + Zichtbaarheid van inhoud in-/uitschakelen - Request icons - Copy to clipboard - Copied text + Pictogrammen aanvragen + Kopiëren naar klembord + Tekst gekopieerd - Request missing icons from the bottom bar - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Ontbrekende pictogrammen op onderste balk aanvragen + Icon requests are currently suspended + Gegevens voor pictogramaanvraag gekopieerd naar klembord. Plak de gegevens in het aanvraagformulier. + Formulier openen Verwijderen - New icons in v%1$s - New icons (%1$s) + Nieuwe pictogrammen in v%1$s + Nieuwe pictogrammen (%1$s) diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index ad88da4dbcc..e258ab67edf 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -3,49 +3,49 @@ - Version %s + Versjon %s - Search through %d icons - Pick an icon + Søk gjennom %d ikoner + Velg et ikon - Search + Søk - %s not found + %s ble ikke funnet Om - Icon request form + Skjema for ikonforespørsler - Contributors + Bidragsytere - Core contributors + Viktige bidragsytere - See all contributors + Se alle bidragsytere - View on GitHub + Vis på GitHub - Share details + Del detaljer Core app Ikoner - Infrastructure + Infrastruktur - Special thanks + Stor takk til - For inspiring the app icon + For å komme opp med ideen bak appikonet - For naming the app + For å komme opp med ideen bak navnet - Open-source licenses + Lisenser for åpen kildekode - Name + Navn Drawable @@ -55,16 +55,17 @@ If the icon is outdated due to rebranding, create an issue on GitHub. - Toggle visibility of contents + Juster synlighet av innhold - Request icons - Copy to clipboard - Copied text + Be om ikoner + Kopiert til utklippstavle + Kopierte teksten Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. - Open form - Clear - New icons in v%1$s - New icons (%1$s) + Åpne skjema + Tøm + Nye ikoner i v%1$s + Nye ikoner (%1$s) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 0d6c05e5f33..8dc38f3b41c 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -33,14 +33,14 @@ Aplikacja bazowa Ikony - Infrastructure + Infrastruktura Specjalne podziękowania Za zainspirowanie ikony aplikacji. - Za nazwanie aplikacji. + Za nazwanie aplikacji Podziękowanie @@ -59,12 +59,13 @@ Zażądaj ikon Skopiuj do schowka - Skopiowany tekst + Skopiowano tekst - Request missing icons from the bottom bar - Skopiowano szczegóły żądania ikon do schowka. Aby je poprosić, prześlij szczegóły do formularza. + Zażądaj brakujących ikon z paska dolnego + Żądania ikon są obecnie zawieszone + Skopiowano szczegóły żądania ikon do schowka. Aby o nie poprosić, prześlij szczegóły do formularza. Otwórz formularz Wyczyść - New icons in v%1$s - New icons (%1$s) + Nowe ikony w v%1$s + Nowe ikony (%1$s) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 0ceff6c8c85..993a6336ffe 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -3,68 +3,69 @@ - Version %s + Versão %s - Search through %d icons - Pick an icon + Buscar entre %d ícones + Escolher um ícone Pesquisar - %s not found + %s não encontrado Sobre - Icon request form + Formulário de solicitação de ícone - Contributors + Contribuidores - Core contributors + Contribuidores principais - See all contributors + Ver todos os contribuidores - View on GitHub + Ver no GitHub - Share details + Compartilhar detalhes - Core app + Aplicativo principal Ícones - Infrastructure + Infraestrutura - Special thanks + Agradecimentos especiais - For inspiring the app icon + Por inspirar o ícone do aplicativo - For naming the app + Por nomear o aplicativo - Open-source licenses + Licenças de código aberto - Name + Nome - Drawable + Desenháveis - Component name + Nome do componente - Mapped components + Componentes mapeados - If the icon is outdated due to rebranding, create an issue on GitHub. + Se o ícone estiver desatualizado devido a uma renovação da marca, registre um problema no GitHub. - Toggle visibility of contents + Alternar visibilidade dos conteúdos - Request icons - Copy to clipboard - Copied text + Solicitar ícones + Copiar para a área de transferência + Texto copiado - Request missing icons from the bottom bar - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Solicitar ícones ausentes na barra inferior + Solicitações de ícones estão atualmente suspensas + Detalhes da solicitação de ícone copiados para a área de transferência. Para solicitá-los, envie os detalhes no formulário. + Abrir formulário Limpar - New icons in v%1$s - New icons (%1$s) + Novos ícones na v%1$s + Novos ícones (%1$s) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 0ceff6c8c85..1f3a87f89fa 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -3,68 +3,69 @@ - Version %s + Versão %s - Search through %d icons - Pick an icon + Procurar entre %d ícones + Escolher um ícone Pesquisar - %s not found + %s não encontrado Sobre - Icon request form + Formulário de solicitação de ícone - Contributors + Contribuidores - Core contributors + Contribuidores principais - See all contributors + Ver todos os contribuidores - View on GitHub + Ver no GitHub - Share details + Partilhar detalhes - Core app + Aplicação principal Ícones - Infrastructure + Infraestruturas - Special thanks + Agradecimentos especiais - For inspiring the app icon + Por inspirar o ícone da aplicação - For naming the app + Por nomear a aplicação - Open-source licenses + Licenças de código aberto - Name + Nome - Drawable + Desenháveis - Component name + Nome do componente - Mapped components + Componentes mapeados - If the icon is outdated due to rebranding, create an issue on GitHub. + Se o ícone estiver desatualizado devido a uma renovação da marca, crie um problema no GitHub. - Toggle visibility of contents + Alternar visibilidade dos conteúdos - Request icons - Copy to clipboard - Copied text + Solicitar ícones + Copiar para a área de transferência + Texto copiado - Request missing icons from the bottom bar - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Solicitar ícones em falta na barra inferior + Solicitações de ícones estão atualmente suspensas + Detalhes da solicitação de ícone copiados para a área de transferência. Para solicitá-los, envie os detalhes no formulário. + Abrir formulário Limpar - New icons in v%1$s - New icons (%1$s) + Novos ícones na v%1$s + Novos ícones (%1$s) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 05f6e003b5a..8fad1fa1a24 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Clear diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index d3a83b8628a..858587f276a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -62,6 +62,7 @@ Текст скопирован Запросите недостающие иконки в нижней панели + Icon requests are currently suspended Подробности запроса иконки были скопированы в буфер обмена. Для отправки запроса, отправьте данные через форму. Открыть форму Очистить diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index a90e0a502e2..89602e028ce 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Rensa diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 6f06403f4e3..49f134493ae 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Geçmişi temizle diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index d6216d78f0c..f6d2c126db2 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -23,7 +23,7 @@ Автори - Ключові учасники проекту + Ключові учасники проєкту Переглянути всіх учасників @@ -31,21 +31,21 @@ Поділитися подробицями - Головний додаток + Головний застосунок Значки - Infrastructure + Інфраструктура додатку Особлива подяка - За натхнення значка застосунку + За натхнення значка додатку - За назву застосунку + За назву додатку Ліцензії ПЗ з відкритим вихідним кодом - Ім\'я + Назва Малюнок @@ -55,16 +55,17 @@ Якщо значок застарів через ребрендинг, створіть проблему на GitHub. - Перемкнути видимість вмісту + Перемикання видимості вмісту Запит значків Скопіювати до буфера обміну Скопійований текст Запросіть відсутні значки з нижньої панелі + Запити іконок зараз призупинені Скопійовано подробиці до буферу обміну. Щоб зробити запит, додайте деталі у форму. Відкрити форму Очистити - New icons in v%1$s - New icons (%1$s) + Нові значки у версії %1$s + Нові значки (%1$s) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 14b69603e28..495a96a838f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -3,7 +3,7 @@ - Version %s + Phiên bản %s @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form Xóa diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 13724a3e451..53e8d6b45d5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -3,7 +3,7 @@ - 版本:%s + 版本 %s @@ -47,13 +47,13 @@ 名称 - Drawable + 绘制对象 组件名称 映射的组件 - 如果图标过时,请在 GitHub 上提交 issue + 如果图标设计已更改,请在 GitHub 上提交 issue 切换内容可见性 @@ -62,6 +62,7 @@ 已复制文本 从底栏请求缺失的图标 + 图标请求目前已暂停 图标申请详情已复制到剪贴板,请将这些详情填写到申请表单中以完成申请。 打开表单 清除 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f00bd94c3ea..fe81696a30f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -62,6 +62,7 @@ Copied text Request missing icons from the bottom bar + Icon requests are currently suspended Copied icon request details to clipboard. To request them, submit the details into the form. Open form 清除 From 3063aca61b829e50eebcfa629a6e0f54659ff3e3 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:27:48 +0800 Subject: [PATCH 516/527] Improve icon diff logic for new icons UI --- .../lawnicons/helper/AppfilterDiffCreator.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index eaed717ea0f..4a4be059014 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -76,7 +76,17 @@ object AppfilterDiffCreator { mainLines: List, developLines: List, ): List { - return developLines.filterNot { it in mainLines } + val drawablesInMain = mainLines.mapNotNull { extractDrawableItem(it) }.toSet() + + return developLines.filter { item -> + val drawable = extractDrawableItem(item) + drawable != null && drawable !in drawablesInMain + } + } + + private fun extractDrawableItem(item: String): String? { + val regex = """drawable="([^"]+)"""".toRegex() + return regex.find(item)?.groups?.get(1)?.value } private fun writeDiffToFile( From 4f4f62b4485331eb1c180263a6725b9a68ffa2f8 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:29:30 +0800 Subject: [PATCH 517/527] `svg-processor`: Add fallback system when git tags are not found --- .../lawnicons/helper/AppfilterDiffCreator.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index 4a4be059014..5d28d29b7f6 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -24,18 +24,19 @@ object AppfilterDiffCreator { private fun getPreviousReleaseLines( appFilterFile: String, ): List { - return try { + try { runGitCommand(listOf("fetch", "--tags")) + } catch (_: Exception) { + // assume that we have fetched the tags already + } - val tagCommand = - listOf("/usr/bin/bash", "-c", "git tag --sort=-creatordate | head -n 1") - val tagProcess = ProcessBuilder(tagCommand) - .redirectErrorStream(true) - .start() + return try { + val tags = runGitCommand(listOf("tag", "--sort=-creatordate")) + val latestTag = tags.firstOrNull() ?: { + // fallback to `main` branch + val fallbackTags = runGitCommand(listOf("show", "main")) - val latestTag = tagProcess.inputStream.bufferedReader().readLine() - if (tagProcess.waitFor() != 0) { - throw RuntimeException("Failed to get latest tag") + fallbackTags.firstOrNull() ?: throw RuntimeException("No tags found") } runGitCommand(listOf("show", "$latestTag:$appFilterFile")) From 610312a6e72a0b44572ec0c915f18f6e662ae963 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 9 Feb 2025 21:22:05 +0800 Subject: [PATCH 518/527] Bump versionName and code for Play Store consistency --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dbfaef7071d..a10ab7a2ce3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -25,7 +25,7 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.13.0" +val version = "2.13.1" val versionDisplayName = version + if (!isReleaseBuild) " $devReleaseName" else "" android { @@ -36,7 +36,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = compileSdk - versionCode = 17 + versionCode = 18 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From b7ef6d82877010a4adb8a69386cd5b8b10494606 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:12:20 +0800 Subject: [PATCH 519/527] `CONTRIBUTING.md`: Uncomment Lawnicons icon request section --- CONTRIBUTING.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf313737524..97e3acb32c6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -157,12 +157,11 @@ Please check [the icon tool guide](/docs/icontool_guide.md) for more information 4. Done! You're ready to open a pull request. Please set `develop` as the base branch. ## Finding the package and activity name of an app - + ### Using `adb` 1. Connect your Android device or emulator to your laptop/desktop PC that has `adb` installed (see [this tutorial](https://www.xda-developers.com/install-adb-windows-macos-linux/) for more information) and open the app whose details you want to inspect, e.g. Telegram. 2. Open a new Command Prompt or Terminal window and input `adb devices`. From cff2d756bb223d16d20b2d675ef0a1a886a8fdcc Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:14:09 +0800 Subject: [PATCH 520/527] `README.md` - Uncomment Lawnicons request section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fc48ab23f00..9796d668729 100644 --- a/README.md +++ b/README.md @@ -53,4 +53,4 @@ We put the quality of icons first. Please see our guidelines for information on ## Requesting icons [Icon request form](https://forms.gle/nR4ozeeJBKrLwGfk6) • [Report outdated icons](https://github.com/LawnchairLauncher/lawnicons/issues/new?assignees=&labels=icon+update&projects=&template=icon_rebrand.yml) - +Open Lawnicons 2.13+ → Tap "Request icons" → Submit the response From 2390aefac1ff0f7b94bd475a077c2ea4378d0fb1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 11 Feb 2025 12:15:10 +0800 Subject: [PATCH 521/527] `close_stale_prs.yml` - tweak stale description --- .github/workflows/close_stale_prs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/close_stale_prs.yml b/.github/workflows/close_stale_prs.yml index f94285285e9..d0735beafda 100644 --- a/.github/workflows/close_stale_prs.yml +++ b/.github/workflows/close_stale_prs.yml @@ -11,8 +11,8 @@ jobs: steps: - uses: actions/stale@v9 with: - stale-pr-message: Thanks for your interest in contributing! Unfortunately, we have marked this PR as stale because it has been open for 1 month with no activity. Please apply the suggested changes if there are any, and comment something related to your PR. If you don't take any action for 2 weeks, the PR will be closed. - close-pr-message: As stated in my previous comment, this PR was closed because it has been stale for another 2 weeks with no activity. Thanks for your interest in contributing though! + stale-pr-message: We have marked this PR as stale because it has been open for 1 month with no activity. Please apply the suggested changes if there are any, and comment something related to your PR. If you don't take any action for 2 weeks, the PR will be closed. + close-pr-message: As stated in the previous message, this PR was closed because it has been stale for another 2 weeks with no activity. days-before-pr-stale: 30 days-before-pr-close: 14 days-before-issue-stale: -1 From aa0f4c0bc30fb19abf6911a68097b3f72d13f0c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:25:51 +0800 Subject: [PATCH 522/527] chore(deps): update plugin com.gradle.develocity to v3.19.1 (#2531) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index cfd67b7dbb0..cbe3b05fb1b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.19" + id("com.gradle.develocity") version "3.19.1" } develocity { From dc5e72b30fa7daefb3ba9d139788df4a60651f39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:25:56 +0800 Subject: [PATCH 523/527] chore(deps): update dependency gradle to v8.12.1 (#2533) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e1b837a19c2..d71047787f8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=7a00d51fb93147819aab76024feece20b6b84e420694101f276be952e08bef03 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionSha256Sum=8d97a97984f6cbd2b85fe4c60a743440a347544bf18818048e611f5288d46c94 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From fb595bab46633447f18a2eedc97f73c2cbdadf74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:26:09 +0800 Subject: [PATCH 524/527] chore(deps): update kotlin and ksp (#2539) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0d91b810415..138af295235 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,10 +3,10 @@ import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { id("com.android.application") version "8.8.0" apply false - id("org.jetbrains.kotlin.android") version "2.1.0" apply false - id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" - id("org.jetbrains.kotlin.plugin.serialization") version "2.1.0" apply false - id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false + id("org.jetbrains.kotlin.android") version "2.1.10" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.1.10" + id("org.jetbrains.kotlin.plugin.serialization") version "2.1.10" apply false + id("com.google.devtools.ksp") version "2.1.10-1.0.29" apply false id("com.google.dagger.hilt.android") version "2.55" apply false id("app.cash.licensee") version "1.12.0" apply false id("com.diffplug.spotless") version "7.0.2" apply false From 4db1aabfdb8b8a6e4a80f9ad62438298b5698a44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:26:16 +0800 Subject: [PATCH 525/527] fix(deps): update dependency androidx.compose:compose-bom to v2025.02.00 (#2544) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a10ab7a2ce3..05937512892 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -143,7 +143,7 @@ dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.10.0") - implementation(platform("androidx.compose:compose-bom:2025.01.00")) + implementation(platform("androidx.compose:compose-bom:2025.02.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From d74e7920c2a6a455a39db7ade2bdc897e23828c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:26:27 +0800 Subject: [PATCH 526/527] fix(deps): update dependency androidx.navigation:navigation-compose to v2.8.7 (#2545) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 05937512892..e1d832e6725 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,7 +152,7 @@ dependencies { implementation("androidx.compose.material:material-icons-core-android") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.navigation:navigation-compose:2.8.5") + implementation("androidx.navigation:navigation-compose:2.8.7") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0") From 0c9819a2800561e62b973c353e80b62006e92d2c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:28:35 +0800 Subject: [PATCH 527/527] chore(config): migrate config .github/renovate.json5 (#2554) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/renovate.json5 | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 6b13de17e99..65e04dafa87 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,31 +1,29 @@ { - "labels": [ - "dependencies", + labels: [ + 'dependencies', ], - "extends": [ - "config:base", + extends: [ + 'config:recommended', ], - "packageRules": [ + packageRules: [ { - "groupName": "Kotlin and KSP", - "matchPackagePrefixes": [ - "com.google.devtools.ksp", + groupName: 'Kotlin and KSP', + matchPackageNames: [ + 'com.google.devtools.ksp{/,}**', + '/org.jetbrains.kotlin.*/', ], - "matchPackagePatterns": [ - "org.jetbrains.kotlin.*", - ] }, { - "groupName": "AGP", - "matchPackagePatterns": [ - "com.android.*", - ] + groupName: 'AGP', + matchPackageNames: [ + '/com.android.*/', + ], }, { - "groupName": "Hilt", - "matchPackagePrefixes": [ - "com.google.dagger", - ] - } - ] + groupName: 'Hilt', + matchPackageNames: [ + 'com.google.dagger{/,}**', + ], + }, + ], }

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%0DIucdwm5=d6W#52^<~RZOLJu6__km=0Kq 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 g8kY_aV+uR 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 z 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%0DIucdwm5=d6W#52^<~RZOLJu6__km=0Kq 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 g8kY_aV+uR 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 z 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 From 975f46310cfdc24c66af7bf24fe189b62621823c Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 10 Sep 2024 19:30:35 +0800 Subject: [PATCH 327/527] Minor UI tweaks --- .../ui/components/home/IconPreviewGrid.kt | 12 ++---- .../ui/components/home/NewIconsCard.kt | 11 ++++-- .../lawnicons/ui/destination/About.kt | 6 ++- .../lawnicons/ui/destination/Home.kt | 13 +++++-- .../lawnicons/util/ContextExtensions.kt | 4 +- app/src/main/res/drawable/new_releases.xml | 37 +++++++++---------- 6 files changed, 47 insertions(+), 36 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt index 1962770c55d..71579804566 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconPreviewGrid.kt @@ -24,8 +24,7 @@ import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.GridItemSpan -import androidx.compose.foundation.lazy.grid.LazyGridItemScope +import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items @@ -96,7 +95,7 @@ fun IconPreviewGrid( contentPadding: IconPreviewGridPadding = IconPreviewGridPadding.Defaults, isIconPicker: Boolean = false, gridState: LazyGridState = rememberLazyGridState(), - otherContent: @Composable (LazyGridItemScope.() -> Unit) = {}, + otherContent: (LazyGridScope.() -> Unit) = {}, ) { val indexOfFirstItem by remember { derivedStateOf { gridState.firstVisibleItemIndex } } val letter = iconInfo[indexOfFirstItem].label[0].uppercase() @@ -120,11 +119,7 @@ fun IconPreviewGrid( ), state = gridState, ) { - item( - span = { GridItemSpan(maxLineSpan) }, - ) { - otherContent() - } + otherContent() items( items = iconInfo, contentType = { "icon_preview" }, @@ -241,6 +236,7 @@ fun AppBarListItem(modifier: Modifier = Modifier) { contentDescription = stringResource(id = R.string.app_name), modifier = Modifier .size(36.dp) + .clip(CircleShape) .combinedClickable( onClick = {}, onLongClick = { diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt index adef79bb553..894729a12da 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/NewIconsCard.kt @@ -20,6 +20,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons @@ -38,7 +39,6 @@ import androidx.compose.ui.unit.dp import app.lawnchair.lawnicons.BuildConfig import app.lawnchair.lawnicons.R import app.lawnchair.lawnicons.repository.preferenceManager -import app.lawnchair.lawnicons.ui.components.core.Card import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @@ -67,8 +67,13 @@ fun NewIconsCard( modifier: Modifier = Modifier, ) { AnimatedVisibility(visible) { - Card( - modifier = modifier, + Surface( + color = MaterialTheme.colorScheme.surfaceContainer, + shape = MaterialTheme.shapes.extraLarge, + modifier = modifier + .padding(horizontal = 8.dp) + .padding(bottom = 12.dp) + .fillMaxWidth(), ) { Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt index 8f94c65b0e0..331f4bec9b9 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/About.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Star import androidx.compose.material3.Icon @@ -19,6 +20,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode @@ -103,7 +105,9 @@ private fun About( Image( bitmap = context.appIcon().asImageBitmap(), contentDescription = stringResource(id = R.string.app_name), - modifier = Modifier.size(72.dp), + modifier = Modifier + .size(72.dp) + .clip(CircleShape), ) } Text( diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 447e22ae4f7..6db59cfbf7d 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Scaffold @@ -145,11 +146,17 @@ private fun Home( isIconPicker = isIconPicker, gridState = lazyGridState, ) { - Column { - if (!isExpandedScreen) { + if (!isExpandedScreen) { + item( + span = { GridItemSpan(maxLineSpan) }, + ) { AppBarListItem() } - if (newIconsInfoModel.iconCount != 0) { + } + if (newIconsInfoModel.iconCount != 0) { + item( + span = { GridItemSpan(maxLineSpan) }, + ) { NewIconsCard(onNavigateToNewIcons) } } diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt index 508d2b6eaac..bd119f8858c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt @@ -4,4 +4,6 @@ import android.content.Context import android.graphics.Bitmap import androidx.core.graphics.drawable.toBitmap -fun Context.appIcon(): Bitmap = packageManager.getApplicationIcon(packageName).toBitmap() +fun Context.appIcon(): Bitmap = packageManager + .getApplicationIcon(packageName) + .toBitmap() diff --git a/app/src/main/res/drawable/new_releases.xml b/app/src/main/res/drawable/new_releases.xml index 9eec8a7b8eb..c1dc3184df1 100644 --- a/app/src/main/res/drawable/new_releases.xml +++ b/app/src/main/res/drawable/new_releases.xml @@ -1,21 +1,18 @@ - - - - - - + + + + From 86c1bbb2197e17ac3d57a16859e9ed15bea7dd3e Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:22:08 +0800 Subject: [PATCH 328/527] Release workflow tweaks --- .github/workflows/build_release_apk.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build_release_apk.yml b/.github/workflows/build_release_apk.yml index e20ea88a5e6..dad54cb5bad 100644 --- a/.github/workflows/build_release_apk.yml +++ b/.github/workflows/build_release_apk.yml @@ -1,10 +1,8 @@ +# TODO: Add signing key and build app bundle name: Build release APK on: workflow_dispatch: - push: - branches: - - main jobs: build-release-apk: From 6763e5e360ec13e64205383c4828746a92e61a7c Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:49:08 +0800 Subject: [PATCH 329/527] Fix workflow error on PRs --- .github/workflows/build_debug_apk.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index 2cb49104ead..c83c617e15e 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -16,8 +16,9 @@ jobs: uses: actions/checkout@v4 with: submodules: true - - name: Fetch main branch - run: git fetch origin main:main + - name: Fetch all needed branches + run: git fetch origin main:main && git fetch origin develop:develop + continue-on-error: true - uses: actions/setup-java@v4 with: distribution: 'zulu' From dce842b7709b7afa30ff6bfeb09fce8c7a2617a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 13:40:11 +0000 Subject: [PATCH 330/527] New Crowdin translations by GitHub Action (#2319) Co-authored-by: Crowdin Bot --- app/src/main/res/values-af-rZA/strings.xml | 5 ++ app/src/main/res/values-ar-rSA/strings.xml | 5 ++ app/src/main/res/values-ca-rES/strings.xml | 5 ++ app/src/main/res/values-cs-rCZ/strings.xml | 5 ++ app/src/main/res/values-da-rDK/strings.xml | 5 ++ app/src/main/res/values-de-rDE/strings.xml | 5 ++ app/src/main/res/values-el-rGR/strings.xml | 57 +++++++++++---------- app/src/main/res/values-en-rUS/strings.xml | 7 ++- app/src/main/res/values-es-rES/strings.xml | 57 +++++++++++---------- app/src/main/res/values-fi-rFI/strings.xml | 5 ++ app/src/main/res/values-fil-rPH/strings.xml | 5 ++ app/src/main/res/values-fr-rFR/strings.xml | 29 ++++++----- app/src/main/res/values-hi-rIN/strings.xml | 5 ++ app/src/main/res/values-hu-rHU/strings.xml | 57 +++++++++++---------- app/src/main/res/values-in-rID/strings.xml | 5 ++ app/src/main/res/values-it-rIT/strings.xml | 5 ++ app/src/main/res/values-iw-rIL/strings.xml | 5 ++ app/src/main/res/values-ja-rJP/strings.xml | 23 +++++---- app/src/main/res/values-ko-rKR/strings.xml | 7 ++- app/src/main/res/values-mr-rIN/strings.xml | 5 ++ app/src/main/res/values-nl-rNL/strings.xml | 5 ++ app/src/main/res/values-no-rNO/strings.xml | 5 ++ app/src/main/res/values-pl-rPL/strings.xml | 29 ++++++----- app/src/main/res/values-pt-rBR/strings.xml | 5 ++ app/src/main/res/values-pt-rPT/strings.xml | 5 ++ app/src/main/res/values-ro-rRO/strings.xml | 5 ++ app/src/main/res/values-ru-rRU/strings.xml | 57 +++++++++++---------- app/src/main/res/values-sv-rSE/strings.xml | 5 ++ app/src/main/res/values-tr-rTR/strings.xml | 39 ++++++++------ app/src/main/res/values-uk-rUA/strings.xml | 21 +++++--- app/src/main/res/values-vi-rVN/strings.xml | 5 ++ app/src/main/res/values-zh-rCN/strings.xml | 55 +++++++++++--------- app/src/main/res/values-zh-rTW/strings.xml | 5 ++ 33 files changed, 354 insertions(+), 189 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 2c96f6ec44c..90b7bb59143 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -33,6 +33,7 @@ Core app Icons + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index ef89bd8810e..5e5a5e3c238 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -33,6 +33,7 @@ Core app الأيقونات + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + مسح + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 21ae600a6da..866302f2fa1 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -33,6 +33,7 @@ Core app Icones + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Netejar + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index f236fefd641..4801f551e89 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -33,6 +33,7 @@ Core app Ikony + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index a07187d65d6..f027ffb954f 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -33,6 +33,7 @@ Core app Ikoner + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c6ed397c757..029a7e0da26 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -33,6 +33,7 @@ Kern-App Symbole + Infrastructure Besonderer Dank @@ -60,6 +61,10 @@ In Zwischenablage kopieren Text kopiert + Request missing icons from the bottom bar Details der Symbolanfrage in die Zwischenablage kopiert. Um sie anzufragen, übertrage die Details in das Formular. Formular öffnen + Leeren + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 3041ae315d7..43469a3e3b7 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -3,63 +3,68 @@ - Version %s + Έκδοση %s - Search through %d icons - Pick an icon + Αναζήτηση μέσω %d εικονιδίων + Επιλέξτε ένα εικονίδιο Αναζήτηση - %s not found + %s δεν βρέθηκε Πληροφορίες - Icon request form + Φόρμα αιτήματος εικονιδίων - Contributors + Συντελεστές - Core contributors + Βασικοί συντελεστές - See all contributors + Προβολή όλων των συνεισφερόντων - View on GitHub + Προβολή στο GitHub - Share details + Κοινή χρήση λεπτομερειών - Core app + Πυρήνας εφαρμογής Εικονίδια + Infrastructure - Special thanks + Ιδιαίτερες ευχαριστίες - For inspiring the app icon + Για να εμπνευστείτε το εικονίδιο της εφαρμογής - For naming the app + Για να ονομάσετε την εφαρμογή - Open-source licenses + Άδειες λογισμικού ανοικτού κώδικα - Name + Όνομα - Drawable + Σχέδιο - Component name + Όνομα στοιχείου - Mapped components + Αντιστοιχισμένα στοιχεία - If the icon is outdated due to rebranding, create an issue on GitHub. + Αν το εικονίδιο είναι ξεπερασμένο λόγω επανασχεδιασμού από τον προγραμματιστή του, δημιουργήστε ένα νέο ζήτημα στο GitHub. - Toggle visibility of contents + Εναλλαγή ορατότητας των περιεχομένων - Request icons - Copy to clipboard - Copied text + Αίτηση εικονιδίων + Αντιγραφή στο πρόχειρο + Αντιγραμμένο κείμενο - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Request missing icons from the bottom bar + Αντιγράφηκαν λεπτομέρειες αιτήματος εικονιδίου στο πρόχειρο. Για να τα ζητήσετε, υποβάλετε τα στοιχεία στη φόρμα. + Άνοιγμα φόρμας + Εκκαθάριση + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index 17cf6c8d98f..72a16c0059c 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -7,7 +7,7 @@ - Search through %d icons + Pick an icon Search @@ -33,6 +33,7 @@ Core app Icons + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index a29653b6654..d51cfff663e 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -3,63 +3,68 @@ - Version %s + Versión %s - Search through %d icons - Pick an icon + Buscar a través de %d iconos + Escoge un icono Buscar - %s not found + No se ha encontrado %s Acerca de - Icon request form + Formulario de solicitud de iconos - Contributors + Contribuyentes - Core contributors + Colaboradores principales - See all contributors + Ver a todos los contribuyentes - View on GitHub + Ver en GitHub - Share details + Compartir los detalles - Core app + App principal Iconos + Infraestructura - Special thanks + Agradecimiento especial - For inspiring the app icon + Por inspirar el icono de la aplicación - For naming the app + Por nombrar la aplicación - Open-source licenses + Licencias de código abierto - Name + Nombre - Drawable + Elemento gráfico - Component name + Nombre del componente - Mapped components + Componentes asignados - If the icon is outdated due to rebranding, create an issue on GitHub. + Si el icono está obsoleto debido a un cambio significativo, cree un problema en GitHub. - Toggle visibility of contents + Cambiar visibilidad de los contenidos - Request icons - Copy to clipboard - Copied text + Solicitar iconos + Copiar al portapapeles + Texto copiado - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Solicitar iconos que faltan en la barra inferior + Solicitar detalles del icono copiado al portapapeles. Para solicitarlos, envíe los detalles al formulario. + Abrir formulario + Borrar + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index c9fef536a95..c340555cff2 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -33,6 +33,7 @@ Core app Kuvakkeet + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index c8a453a8f0f..d2cbd1f50f0 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -33,6 +33,7 @@ Core app Mga Icon + Infrastructure Espesyal na pagsasalamat @@ -60,6 +61,10 @@ Kopyahin sa clipboard Kinopya ang teksto + Request missing icons from the bottom bar Nakopya na ang mga detalye tungkol sa ihihiling na icons sa clipboard. Upang hilingin ang mga ito, isumite ang mga detalye sa form. Buksan ang form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 76fc6e5f4fb..b0b4132be25 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -8,7 +8,7 @@ Rechercher parmi %d icônes - Pick an icon + Sélectionner une icône Recherche @@ -29,10 +29,11 @@ Voir sur GitHub - Share details + Partager les détails - Core app + Application principale Icônes + Infrastructure Remerciements spéciaux @@ -44,22 +45,26 @@ Mentions légales - Name + Nom Élément graphique - Component name + Nom du composant Application - If the icon is outdated due to rebranding, create an issue on GitHub. + Si l\'icône est obsolète en raison d\'un changement de marque, veuillez nous aviser sur GitHub. - Toggle visibility of contents + Activer/désactiver la visibilité des contenus - Request icons - Copy to clipboard - Copied text + Demander des icônes + Copier dans le presse-papier + Texte copié - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Request missing icons from the bottom bar + Détails de la demande d\'icône copiés dans le presse-papiers. Pour les demander, entrez les détails dans le formulaire. + Ouvrir le formulaire + Effacer + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 3184fce8814..41ca1446644 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -33,6 +33,7 @@ Core app चिह्न + Infrastructure विशेष धन्यवाद @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + साफ करें + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index ba7af2b819a..df795c61ba7 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -3,63 +3,68 @@ - Version %s + %s-verzió - Search through %d icons - Pick an icon + Keresés %d ikon között + Bökjön egy ikonra Keresés - %s not found + %s nem található Névjegy - Icon request form + Ikonigénylő lap - Contributors + Közreműködők - Core contributors + Alapvető közreműködők - See all contributors + Az összes közreműködő megtekintése - View on GitHub + Lesse meg a GitHub-on - Share details + Részletek megosztása - Core app + A mag-alkalmazás Ikonok + Infrastruktúra - Special thanks + Speciális köszönet - For inspiring the app icon + Inspiráció az alkalmazásikonhoz - For naming the app + Az alkalmazás elnevezéséhez - Open-source licenses + Nyílt-forráskódú licencek - Name + Név - Drawable + Rajzolható - Component name + A részegység neve - Mapped components + Feltérképezett részek - If the icon is outdated due to rebranding, create an issue on GitHub. + Ha az ikon a márkaváltás miatt elavult, hozzon létre egy bejelentést a GitHubon. - Toggle visibility of contents + A tartalom láthatóságának kapcsolója - Request icons - Copy to clipboard - Copied text + Ikonrendelés + Másolás a vágólapra + Másolt szöveg - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + A hiányzó ikonokat az alsó sávról kérje + Az ikonkérelem részletei a vágólapra másolva. Kéréséhez adja meg a részleteket az űrlapon. + Az űrlap megnyitása + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 3f09b2b5753..387ebbd0a95 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -33,6 +33,7 @@ Core app Ikon + Infrastructure Terima kasih Khusus @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Bersihkan + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index cb0f69037e7..b7370a30508 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -33,6 +33,7 @@ Core app Icone + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 3181c5bbb22..56a09f300e4 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -33,6 +33,7 @@ Core app סמלים + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + ניקוי + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index f8340bc15e1..b8704ac8c30 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -8,7 +8,7 @@ Search through %d icons - Pick an icon + アイコンを選択する 検索 @@ -18,21 +18,22 @@ - Icon request form + アイコンリクエストフォーム - Contributors + 寄付者 - Core contributors + 主要な寄付者 - See all contributors + 全ての寄付者を見る - View on GitHub + Githubで見る Share details Core app アイコン + Infrastructure Special thanks @@ -56,10 +57,14 @@ Toggle visibility of contents - Request icons - Copy to clipboard - Copied text + アイコンをリクエストする + クリップボードにコピーする + テキストをコピーしました + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + 消去 + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 89abc4a41de..38a40bd9196 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -33,6 +33,7 @@ 코어 앱 아이콘 + Infrastructure Special thanks @@ -50,7 +51,7 @@ 컴포넌트 이름 - Mapped components + 매핑된 컴포넌트 앱 리브랜딩으로 아이콘이 바뀌었다면 GitHub에 이슈를 등록해 주세요. @@ -60,6 +61,10 @@ 클립보드에 복사 텍스트를 복사했습니다. + Request missing icons from the bottom bar 아이콘 요청 정보를 클립보드에 복사했습니다. 아이콘을 요청하려면 세부 정보를 폼에 입력하세요. 폼 열기 + 기록 삭제 + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index f35f9398a2e..4d277adfa95 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -33,6 +33,7 @@ Core app चिन्हे + Infrastructure विशेष धन्यवाद @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 67620cfd5dd..f0222e80719 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -33,6 +33,7 @@ Core app Pictogrammen + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Verwijderen + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index bd33741642e..ad88da4dbcc 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -33,6 +33,7 @@ Core app Ikoner + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index d5fe76ffd3f..0d6c05e5f33 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -8,7 +8,7 @@ Przeszukaj %d Ikon - Pick an icon + Wybierz ikonkę Szukaj @@ -29,10 +29,11 @@ Zobacz na GitHub - Share details + Udostępnij szczegóły - Core app + Aplikacja bazowa Ikony + Infrastructure Specjalne podziękowania @@ -44,22 +45,26 @@ Podziękowanie - Name + Nazwa Element graficzny - Component name + Nazwa komponentu Pakiet - If the icon is outdated due to rebranding, create an issue on GitHub. + Jeśli ikona jest przestarzała z powodu rebrandingu, utwórz problem na GitHub. - Toggle visibility of contents + Przełącz widoczność treści - Request icons - Copy to clipboard - Copied text + Zażądaj ikon + Skopiuj do schowka + Skopiowany tekst - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Request missing icons from the bottom bar + Skopiowano szczegóły żądania ikon do schowka. Aby je poprosić, prześlij szczegóły do formularza. + Otwórz formularz + Wyczyść + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fb2e7ac9e09..0ceff6c8c85 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -33,6 +33,7 @@ Core app Ícones + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Limpar + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index fb2e7ac9e09..0ceff6c8c85 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -33,6 +33,7 @@ Core app Ícones + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Limpar + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 3b950f5c352..05f6e003b5a 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -33,6 +33,7 @@ Core app Pictograme + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Clear + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 038759f7b9a..d3a83b8628a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -3,63 +3,68 @@ - Version %s + Версия %s - Search through %d icons - Pick an icon + Поиск среди %d иконок + Выберите иконку Поиск - %s not found + Иконки %s не найдено О программе - Icon request form + Форма запроса иконки - Contributors + Участники - Core contributors + Основные участники - See all contributors + Посмотреть всех участников - View on GitHub + Посмотреть на GitHub - Share details + Поделиться - Core app + Основное приложение Иконки + Инфраструктура - Special thanks + Особая благодарность - For inspiring the app icon + За вдохновение для создания иконки приложения - For naming the app + За название для приложения - Open-source licenses + Лицензии проектов с открытым исходным кодом - Name + Имя - Drawable + Изображение - Component name + Название компонента - Mapped components + Связанные компоненты - If the icon is outdated due to rebranding, create an issue on GitHub. + Если иконка устарела из-за проведенного ребрендинга, создайте проблему на GitHub. - Toggle visibility of contents + Переключить видимость контента - Request icons - Copy to clipboard - Copied text + Запросить иконки + Скопировать в буфер обмена + Текст скопирован - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + Запросите недостающие иконки в нижней панели + Подробности запроса иконки были скопированы в буфер обмена. Для отправки запроса, отправьте данные через форму. + Открыть форму + Очистить + Новые иконки в v%1$s + Новые иконки (%1$s) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 69e728926d2..a90e0a502e2 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -33,6 +33,7 @@ Core app Ikoner + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Rensa + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 1f3cb6fa825..6f06403f4e3 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -3,50 +3,51 @@ - Version %s + Sürüm %s - Search through %d icons - Pick an icon + %d simgeler arasına arayın + Bir simge seçin Ara - %s not found + %s bulunamadı Hakkında - Icon request form + Simge istek formu - Contributors + Katkıda bulunanlar - Core contributors + Katkıda bulunanlar - See all contributors + Bürün katkıda bulunanları gör - View on GitHub + GitHub\'da görüntüle - Share details + Detayları paylaş - Core app + Çekirdek uygulama Resimleyici + Infrastructure - Special thanks + Teşekkürler - For inspiring the app icon + Uygulama simgesinden esinlenen - For naming the app + Uygulamaya isim veren - Open-source licenses + Açık kaynak kütüphaneleri - Name + İsim - Drawable + Çizilebilir Component name @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Geçmişi temizle + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 10ee5b370e2..d6216d78f0c 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -7,8 +7,8 @@ - Шукати за %d значками - Вибрати іконку + Шукати серед %d значків + Вибрати значок Пошук @@ -18,12 +18,12 @@ - Форма запиту іконок + Форма запиту значків Автори - Учасники проекту + Ключові учасники проекту Переглянути всіх учасників @@ -33,11 +33,12 @@ Головний додаток Значки + Infrastructure Особлива подяка - Що надихнули іконку застосунка + За натхнення значка застосунку За назву застосунку @@ -52,14 +53,18 @@ Зіставлені компоненти - Якщо іконка застаріла через ребрендінг, створіть проблему на GitHub. + Якщо значок застарів через ребрендинг, створіть проблему на GitHub. Перемкнути видимість вмісту - Запит іконок + Запит значків Скопіювати до буфера обміну Скопійований текст - Скопійовано подробиці до буфера обміну. Щоб зробити запит, додайте деталі у форму. + Запросіть відсутні значки з нижньої панелі + Скопійовано подробиці до буферу обміну. Щоб зробити запит, додайте деталі у форму. Відкрити форму + Очистити + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index d72618aabcc..14b69603e28 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -33,6 +33,7 @@ Core app Biểu tượng + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + Xóa + New icons in v%1$s + New icons (%1$s) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index cd45165288a..13724a3e451 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -3,63 +3,68 @@ - Version %s + 版本:%s - Search through %d icons - Pick an icon + 搜索 %d 个图标 + 选择图标 搜索 - %s not found + 未找到 %s 关于 - Icon request form + 图标申请表 - Contributors + 贡献者 - Core contributors + 核心贡献者 - See all contributors + 查看所有贡献者 - View on GitHub + 在 GitHub 中查看 - Share details + 分享详细信息 - Core app + 核心功能开发 图标 + 基础架构 - Special thanks + 特别感谢 - For inspiring the app icon + 为应用图标设计提供灵感 - For naming the app + 为此应用程序命名 - Open-source licenses + 开源许可 - Name + 名称 Drawable - Component name + 组件名称 - Mapped components + 映射的组件 - If the icon is outdated due to rebranding, create an issue on GitHub. + 如果图标过时,请在 GitHub 上提交 issue - Toggle visibility of contents + 切换内容可见性 - Request icons - Copy to clipboard - Copied text + 请求图标 + 复制到剪贴板 + 已复制文本 - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form + 从底栏请求缺失的图标 + 图标申请详情已复制到剪贴板,请将这些详情填写到申请表单中以完成申请。 + 打开表单 + 清除 + v%1$s 中的新图标 + 新图标 (%1$s) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 49ef20d6629..f00bd94c3ea 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -33,6 +33,7 @@ Core app 圖示 + Infrastructure Special thanks @@ -60,6 +61,10 @@ Copy to clipboard Copied text + Request missing icons from the bottom bar Copied icon request details to clipboard. To request them, submit the details into the form. Open form + 清除 + New icons in v%1$s + New icons (%1$s) From 4dc5202177ea242c4a1f67b59369727b19956cd5 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:42:22 +0300 Subject: [PATCH 331/527] +10 links (#2321) --- app/assets/appfilter.xml | 10 ++++++++++ svgs/kinnu.svg | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 087ba214fb5..97ab0d8294f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -2167,6 +2167,7 @@ + @@ -3146,6 +3147,7 @@ + @@ -4756,6 +4758,7 @@ + @@ -5060,6 +5063,7 @@ + @@ -7991,6 +7995,7 @@ + @@ -8219,6 +8224,7 @@ + @@ -9010,6 +9016,7 @@ + @@ -9689,6 +9696,7 @@ + @@ -10790,6 +10798,7 @@ + @@ -12034,6 +12043,7 @@ + diff --git a/svgs/kinnu.svg b/svgs/kinnu.svg index 3618bec4fe1..c48b2412bcd 100644 --- a/svgs/kinnu.svg +++ b/svgs/kinnu.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From d40f835058bbdb66d1fe3a4a6044963513347728 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 11 Sep 2024 08:43:27 +0800 Subject: [PATCH 332/527] `send_notifications.py` - don't fail on invalid rev-list --- send_notifications.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/send_notifications.py b/send_notifications.py index 4bc8d00ce80..fc9fb535974 100644 --- a/send_notifications.py +++ b/send_notifications.py @@ -4,6 +4,8 @@ import sys import requests +# TODO: Lessen repetition + github_event_before = os.getenv('GITHUB_EVENT_BEFORE') github_sha = os.getenv('GITHUB_SHA') github_repository = os.getenv('GITHUB_REPOSITORY') @@ -46,15 +48,18 @@ def send_document_to_ci_channel(document): def telegram_commit_message(commits, commits_range): overview_link = f'{github_link()}compare/{commits_range}' - overview_link_tag = f'''{len(commits)} new commit{'s' if len(commits) > 1 else ''}''' + overview_link_tag = f'''{len(commits)} new commit{'s' if len(commits) > 1 else 'New changes'}''' message = f'''🔨 {overview_link_tag} to lawnicons:{github_ref}:\n''' - for commit in reversed(commits): - commit_message = commit.message.split('\n')[0] - commit_link = f'{github_link()}commit/{commit.hexsha}' - commit_link_tag = f'{repository.git.rev_parse(commit.hexsha, short=7)}' - encoded_message = html.escape(commit_message) - message += f'\n• {commit_link_tag}: {encoded_message}' + try: + for commit in reversed(commits): + commit_message = commit.message.split('\n')[0] + commit_link = f'{github_link()}commit/{commit.hexsha}' + commit_link_tag = f'{repository.git.rev_parse(commit.hexsha, short=7)}' + encoded_message = html.escape(commit_message) + message += f'\n• {commit_link_tag}: {encoded_message}' + except: + message += '\n• Failed to get commit information (likely due to force-push).' return message # Discord @@ -81,15 +86,18 @@ def send_document_to_builds_channel(document): def discord_commit_message(commits, commits_range): overview_link = f'{github_link()}compare/{commits_range}>' - overview_link_tag = f'''[{len(commits)} new commit{'s' if len(commits) > 1 else ''}]({overview_link})''' + overview_link_tag = f'''[{len(commits)} new commit{'s' if len(commits) > 1 else 'New changes'}]({overview_link})''' message = f'''**🔨 {overview_link_tag} to `lawnicons:{github_ref}`:**\n''' - for commit in reversed(commits): - commit_message = commit.message.split('\n')[0] - commit_link = f'{github_link()}commit/{commit.hexsha}>' - commit_link_tag = f'[{repository.git.rev_parse(commit.hexsha, short=7)}]({commit_link})' - encoded_message = html.escape(commit_message) - message += f'\n* {commit_link_tag}: {encoded_message}' + try: + for commit in reversed(commits): + commit_message = commit.message.split('\n')[0] + commit_link = f'{github_link()}commit/{commit.hexsha}>' + commit_link_tag = f'[{repository.git.rev_parse(commit.hexsha, short=7)}]({commit_link})' + encoded_message = html.escape(commit_message) + message += f'\n* {commit_link_tag}: {encoded_message}' + except: + message += '\n• _Failed to get commit information (likely due to force-push)._' return message repository = git.Repo('.') From 7a7aa1845a7d4f156747e29727fbc44896810ced Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:05:03 +0800 Subject: [PATCH 333/527] Update dependency androidx.compose:compose-bom to v2024.09.01 (#2322) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ca1b7c15666..cddee9531d8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,7 +145,7 @@ dependencies { implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.core:core-splashscreen:1.0.1") implementation("androidx.activity:activity-compose:1.9.2") - implementation(platform("androidx.compose:compose-bom:2024.09.00")) + implementation(platform("androidx.compose:compose-bom:2024.09.01")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.ui:ui-util") From 566217bfa8d66ff69291313f6919fd17c3c93d0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:05:13 +0800 Subject: [PATCH 334/527] Update plugin com.gradle.develocity to v3.18.1 (#2320) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 8ac7d615286..5db0dbe5893 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ pluginManagement { // https://docs.gradle.com/enterprise/gradle-plugin/ plugins { - id("com.gradle.develocity") version "3.18" + id("com.gradle.develocity") version "3.18.1" } develocity { From 89a5c3e422791607670192db0970e461952468e1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 09:09:58 +0800 Subject: [PATCH 335/527] Update dependency io.nlopez.compose.rules:ktlint to v0.4.12 (#2318) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 85c2d418d08..6522fc06524 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,7 +31,7 @@ allprojects { target("src/**/*.kt") ktlint().customRuleSets( listOf( - "io.nlopez.compose.rules:ktlint:0.4.11", + "io.nlopez.compose.rules:ktlint:0.4.12", ), ).editorConfigOverride( mapOf( From ae64961414ea172c755a3502e1a2aa8151977c1a Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Wed, 11 Sep 2024 22:34:14 +0800 Subject: [PATCH 336/527] Update icons * Fix and re-add monochrome icon * Update splashscreen icon * Fix clipping of app icon on certain devices --- .../lawnicons/util/ContextExtensions.kt | 5 +- .../res/drawable/ic_launcher_monochrome.xml | 14 ++- app/src/main/res/drawable/splashscreen.xml | 112 +++++++----------- .../res/mipmap-anydpi-v26/ic_launcher.xml | 3 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 3 +- 5 files changed, 58 insertions(+), 79 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt index bd119f8858c..51973048fe3 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt @@ -3,7 +3,8 @@ package app.lawnchair.lawnicons.util import android.content.Context import android.graphics.Bitmap import androidx.core.graphics.drawable.toBitmap +import app.lawnchair.lawnicons.R -fun Context.appIcon(): Bitmap = packageManager - .getApplicationIcon(packageName) +fun Context.appIcon(): Bitmap = (this.resources.getDrawable(R.mipmap.ic_launcher, this.theme) + ?: packageManager.getApplicationIcon(packageName)) .toBitmap() diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml index 09b1121b01f..73a1df000ed 100644 --- a/app/src/main/res/drawable/ic_launcher_monochrome.xml +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -3,8 +3,14 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - + + + diff --git a/app/src/main/res/drawable/splashscreen.xml b/app/src/main/res/drawable/splashscreen.xml index c6fbe0b706d..14294fe5807 100644 --- a/app/src/main/res/drawable/splashscreen.xml +++ b/app/src/main/res/drawable/splashscreen.xml @@ -4,75 +4,45 @@ android:height="240dp" android:viewportWidth="240" android:viewportHeight="240"> - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index bbd3e021239..e628350bb06 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -2,4 +2,5 @@ - \ No newline at end of file + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index bbd3e021239..e628350bb06 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,4 +2,5 @@ - \ No newline at end of file + + From f028993e8ddf93b396f328af2d284e8aed17abbc Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 12 Sep 2024 05:08:03 +0800 Subject: [PATCH 337/527] Fix style --- .../app/lawnchair/lawnicons/util/ContextExtensions.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt index 51973048fe3..4de2ff69773 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/util/ContextExtensions.kt @@ -5,6 +5,8 @@ import android.graphics.Bitmap import androidx.core.graphics.drawable.toBitmap import app.lawnchair.lawnicons.R -fun Context.appIcon(): Bitmap = (this.resources.getDrawable(R.mipmap.ic_launcher, this.theme) - ?: packageManager.getApplicationIcon(packageName)) +fun Context.appIcon(): Bitmap = ( + this.resources.getDrawable(R.mipmap.ic_launcher, this.theme) + ?: packageManager.getApplicationIcon(packageName) + ) .toBitmap() From 2422ab5d6791dbe140aa8f50f2056c3ee9b3655e Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Thu, 12 Sep 2024 05:39:35 +0800 Subject: [PATCH 338/527] `send_notifications.py` - remove unnecessary text --- send_notifications.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/send_notifications.py b/send_notifications.py index fc9fb535974..2072aaa0c18 100644 --- a/send_notifications.py +++ b/send_notifications.py @@ -48,7 +48,7 @@ def send_document_to_ci_channel(document): def telegram_commit_message(commits, commits_range): overview_link = f'{github_link()}compare/{commits_range}' - overview_link_tag = f'''{len(commits)} new commit{'s' if len(commits) > 1 else 'New changes'}''' + overview_link_tag = f'''{len(commits)} new commit{'s' if len(commits) > 1 else ''}''' message = f'''🔨 {overview_link_tag} to lawnicons:{github_ref}:\n''' try: @@ -86,7 +86,7 @@ def send_document_to_builds_channel(document): def discord_commit_message(commits, commits_range): overview_link = f'{github_link()}compare/{commits_range}>' - overview_link_tag = f'''[{len(commits)} new commit{'s' if len(commits) > 1 else 'New changes'}]({overview_link})''' + overview_link_tag = f'''[{len(commits)} new commit{'s' if len(commits) > 1 else ''}]({overview_link})''' message = f'''**🔨 {overview_link_tag} to `lawnicons:{github_ref}`:**\n''' try: @@ -107,7 +107,7 @@ def discord_commit_message(commits, commits_range): commits = list(repository.iter_commits(commits_range)) except git.exc.GitCommandError as error: print(f"Error fetching commits: {error}") - exit(1) + exit() telegram_message = telegram_commit_message(commits, commits_range) discord_message = discord_commit_message(commits, commits_range) From c15f860fa49e9c84f740ee1574022f6a9b50a64d Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 12 Sep 2024 01:27:24 +0300 Subject: [PATCH 339/527] [Barter 6] +100 icons: Birbank, My Galaxy, Wuthering Waves (#2323) --- app/assets/appfilter.xml | 104 +++++++++++++++++++++++++- svgs/_365scores.svg | 1 + svgs/act_fibernet.svg | 1 + svgs/action.svg | 1 + svgs/adobe_creative_cloud.svg | 1 + svgs/agricultural_bank_of_china.svg | 1 + svgs/ampereflow.svg | 1 + svgs/anacity_in.svg | 1 + svgs/asus_tips.svg | 1 + svgs/birbank.svg | 1 + svgs/brother_print_service_plugin.svg | 1 + svgs/buy_me_a_coffee.svg | 1 + svgs/bz_reminder.svg | 1 + svgs/bz_reminder_pro.svg | 1 + svgs/call_of_duty_warzone.svg | 1 + svgs/calorie_counter.svg | 1 + svgs/cara.svg | 1 + svgs/castro_premium.svg | 1 + svgs/comatose.svg | 1 + svgs/cpu_monitor.svg | 1 + svgs/darker.svg | 1 + svgs/delhivery.svg | 1 + svgs/dicio_assistant.svg | 1 + svgs/disky.svg | 1 + svgs/exnova.svg | 1 + svgs/federal_bank.svg | 1 + svgs/finshell_pay.svg | 1 + svgs/focus_video.svg | 1 + svgs/formulia.svg | 1 + svgs/freecodecamp.svg | 1 + svgs/freetube.svg | 1 + svgs/fuhrerschein.svg | 1 + svgs/goodmoney.svg | 1 + svgs/groovifi.svg | 1 + svgs/huawei_video.svg | 1 + svgs/iaca_laboratorios.svg | 1 + svgs/ilovepdf.svg | 1 + svgs/incognito_browser.svg | 1 + svgs/infomaniak_kdrive.svg | 1 + svgs/jiofinance.svg | 1 + svgs/jupiter.svg | 1 + svgs/kate_mobile.svg | 1 + svgs/kaufland.svg | 1 + svgs/koshelek.svg | 1 + svgs/manga_dogs.svg | 1 + svgs/meeye_icons.svg | 1 + svgs/mi_community.svg | 1 + svgs/mods_maps_for_minecraft_pe.svg | 1 + svgs/mostaza.svg | 1 + svgs/motohub.svg | 1 + svgs/my_app_list.svg | 1 + svgs/my_galaxy.svg | 1 + svgs/naranja_x.svg | 1 + svgs/neostumbler.svg | 1 + svgs/nfcgate.svg | 1 + svgs/notes_notepad.svg | 1 + svgs/nulls_brawl.svg | 1 + svgs/orgzly_revived.svg | 1 + svgs/oss_card_wallet.svg | 1 + svgs/packmate.svg | 1 + svgs/pascals_wager.svg | 1 + svgs/payoneer.svg | 1 + svgs/pi_browser.svg | 1 + svgs/pikmin_bloom.svg | 1 + svgs/pixelcut.svg | 1 + svgs/plants_vs_zombies_2.svg | 1 + svgs/plugin_voicegpt.svg | 1 + svgs/postparty.svg | 1 + svgs/prequel.svg | 1 + svgs/proton_wallet.svg | 1 + svgs/raven.svg | 1 + svgs/remote_for_android_tv.svg | 1 + svgs/ridmik_keyboard.svg | 1 + svgs/rise_up_balloon_game.svg | 1 + svgs/robinhood.svg | 1 + svgs/root_checker.svg | 1 + svgs/rush.svg | 1 + svgs/safetynet.svg | 1 + svgs/schoology.svg | 1 + svgs/skroutz.svg | 1 + svgs/solar_smash.svg | 1 + svgs/spamblocker.svg | 1 + svgs/squad_busters.svg | 1 + svgs/standoff_2.svg | 1 + svgs/superimage_pro.svg | 1 + svgs/tipatch.svg | 1 + svgs/tubi.svg | 1 + svgs/unit_converter.svg | 1 + svgs/velociraptor.svg | 1 + svgs/vitune.svg | 1 + svgs/voice_access.svg | 1 + svgs/vpn_fast_proxy_secure.svg | 1 + svgs/vrchat.svg | 1 + svgs/vtb.svg | 1 + svgs/wanderlog.svg | 1 + svgs/whicons.svg | 1 + svgs/world_tv.svg | 1 + svgs/wuthering_waves.svg | 1 + svgs/xapk_installer.svg | 1 + svgs/yandex_with_alice.svg | 1 + svgs/zipxtract_fd.svg | 1 + 101 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 svgs/_365scores.svg create mode 100644 svgs/act_fibernet.svg create mode 100644 svgs/action.svg create mode 100644 svgs/adobe_creative_cloud.svg create mode 100644 svgs/agricultural_bank_of_china.svg create mode 100644 svgs/ampereflow.svg create mode 100644 svgs/anacity_in.svg create mode 100644 svgs/asus_tips.svg create mode 100644 svgs/birbank.svg create mode 100644 svgs/brother_print_service_plugin.svg create mode 100644 svgs/buy_me_a_coffee.svg create mode 100644 svgs/bz_reminder.svg create mode 100644 svgs/bz_reminder_pro.svg create mode 100644 svgs/call_of_duty_warzone.svg create mode 100644 svgs/calorie_counter.svg create mode 100644 svgs/cara.svg create mode 100644 svgs/castro_premium.svg create mode 100644 svgs/comatose.svg create mode 100644 svgs/cpu_monitor.svg create mode 100644 svgs/darker.svg create mode 100644 svgs/delhivery.svg create mode 100644 svgs/dicio_assistant.svg create mode 100644 svgs/disky.svg create mode 100644 svgs/exnova.svg create mode 100644 svgs/federal_bank.svg create mode 100644 svgs/finshell_pay.svg create mode 100644 svgs/focus_video.svg create mode 100644 svgs/formulia.svg create mode 100644 svgs/freecodecamp.svg create mode 100644 svgs/freetube.svg create mode 100644 svgs/fuhrerschein.svg create mode 100644 svgs/goodmoney.svg create mode 100644 svgs/groovifi.svg create mode 100644 svgs/huawei_video.svg create mode 100644 svgs/iaca_laboratorios.svg create mode 100644 svgs/ilovepdf.svg create mode 100644 svgs/incognito_browser.svg create mode 100644 svgs/infomaniak_kdrive.svg create mode 100644 svgs/jiofinance.svg create mode 100644 svgs/jupiter.svg create mode 100644 svgs/kate_mobile.svg create mode 100644 svgs/kaufland.svg create mode 100644 svgs/koshelek.svg create mode 100644 svgs/manga_dogs.svg create mode 100644 svgs/meeye_icons.svg create mode 100644 svgs/mi_community.svg create mode 100644 svgs/mods_maps_for_minecraft_pe.svg create mode 100644 svgs/mostaza.svg create mode 100644 svgs/motohub.svg create mode 100644 svgs/my_app_list.svg create mode 100644 svgs/my_galaxy.svg create mode 100644 svgs/naranja_x.svg create mode 100644 svgs/neostumbler.svg create mode 100644 svgs/nfcgate.svg create mode 100644 svgs/notes_notepad.svg create mode 100644 svgs/nulls_brawl.svg create mode 100644 svgs/orgzly_revived.svg create mode 100644 svgs/oss_card_wallet.svg create mode 100644 svgs/packmate.svg create mode 100644 svgs/pascals_wager.svg create mode 100644 svgs/payoneer.svg create mode 100644 svgs/pi_browser.svg create mode 100644 svgs/pikmin_bloom.svg create mode 100644 svgs/pixelcut.svg create mode 100644 svgs/plants_vs_zombies_2.svg create mode 100644 svgs/plugin_voicegpt.svg create mode 100644 svgs/postparty.svg create mode 100644 svgs/prequel.svg create mode 100644 svgs/proton_wallet.svg create mode 100644 svgs/raven.svg create mode 100644 svgs/remote_for_android_tv.svg create mode 100644 svgs/ridmik_keyboard.svg create mode 100644 svgs/rise_up_balloon_game.svg create mode 100644 svgs/robinhood.svg create mode 100644 svgs/root_checker.svg create mode 100644 svgs/rush.svg create mode 100644 svgs/safetynet.svg create mode 100644 svgs/schoology.svg create mode 100644 svgs/skroutz.svg create mode 100644 svgs/solar_smash.svg create mode 100644 svgs/spamblocker.svg create mode 100644 svgs/squad_busters.svg create mode 100644 svgs/standoff_2.svg create mode 100644 svgs/superimage_pro.svg create mode 100644 svgs/tipatch.svg create mode 100644 svgs/tubi.svg create mode 100644 svgs/unit_converter.svg create mode 100644 svgs/velociraptor.svg create mode 100644 svgs/vitune.svg create mode 100644 svgs/voice_access.svg create mode 100644 svgs/vpn_fast_proxy_secure.svg create mode 100644 svgs/vrchat.svg create mode 100644 svgs/vtb.svg create mode 100644 svgs/wanderlog.svg create mode 100644 svgs/whicons.svg create mode 100644 svgs/world_tv.svg create mode 100644 svgs/wuthering_waves.svg create mode 100644 svgs/xapk_installer.svg create mode 100644 svgs/yandex_with_alice.svg create mode 100644 svgs/zipxtract_fd.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 97ab0d8294f..a2b1c69fe9b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -86,6 +86,7 @@ + @@ -154,6 +155,8 @@ + + @@ -202,6 +205,7 @@ + @@ -449,7 +453,9 @@ + + @@ -709,6 +715,7 @@ + @@ -1070,6 +1077,7 @@ + @@ -1320,6 +1328,7 @@ + @@ -1443,12 +1452,15 @@ + + + @@ -1561,8 +1573,10 @@ + + @@ -1784,6 +1798,7 @@ + @@ -1821,6 +1836,7 @@ + @@ -2156,6 +2172,7 @@ + @@ -2345,6 +2362,7 @@ + @@ -2434,6 +2452,7 @@ + @@ -2505,6 +2524,7 @@ + @@ -2581,6 +2601,7 @@ + @@ -2688,6 +2709,7 @@ + @@ -3135,6 +3157,7 @@ + @@ -3233,6 +3256,7 @@ + @@ -3360,6 +3384,7 @@ + @@ -3525,6 +3550,7 @@ + @@ -3579,6 +3605,7 @@ + @@ -3622,6 +3649,7 @@ + @@ -3634,6 +3662,7 @@ + @@ -3676,6 +3705,7 @@ + @@ -3933,6 +3963,7 @@ + @@ -4184,6 +4215,7 @@ + @@ -4446,6 +4478,7 @@ + @@ -4477,6 +4510,7 @@ + @@ -4555,6 +4589,7 @@ + @@ -4616,6 +4651,7 @@ + @@ -4636,6 +4672,7 @@ + @@ -4829,6 +4866,7 @@ + @@ -4862,6 +4900,7 @@ + @@ -4927,7 +4966,9 @@ + + @@ -5551,6 +5592,7 @@ + @@ -5721,6 +5763,7 @@ + @@ -5874,6 +5917,7 @@ + @@ -6122,6 +6166,7 @@ + @@ -6195,6 +6240,7 @@ + @@ -6216,6 +6262,7 @@ + @@ -6339,6 +6386,7 @@ + @@ -6359,6 +6407,7 @@ + @@ -6574,6 +6623,7 @@ + @@ -6651,6 +6701,7 @@ + @@ -6732,6 +6783,7 @@ + @@ -6819,6 +6871,7 @@ + @@ -6908,6 +6961,7 @@ + @@ -7230,6 +7284,7 @@ + @@ -7242,6 +7297,7 @@ + @@ -7300,6 +7356,7 @@ + @@ -7351,6 +7408,7 @@ + @@ -7377,6 +7435,7 @@ + @@ -7691,6 +7750,7 @@ + @@ -7709,6 +7769,7 @@ + @@ -7770,6 +7831,7 @@ + @@ -7846,6 +7908,7 @@ + @@ -7873,6 +7936,7 @@ + @@ -7990,6 +8054,7 @@ + @@ -8043,6 +8108,7 @@ + @@ -8098,6 +8164,7 @@ + @@ -8311,6 +8378,7 @@ + @@ -8461,6 +8529,7 @@ + @@ -8524,6 +8593,7 @@ + @@ -8544,11 +8614,13 @@ + + @@ -8569,6 +8641,7 @@ + @@ -8599,6 +8672,7 @@ + @@ -8628,6 +8702,7 @@ + @@ -8831,6 +8906,7 @@ + @@ -9563,6 +9639,7 @@ + @@ -9727,6 +9804,7 @@ + @@ -9816,6 +9894,7 @@ + @@ -9870,6 +9949,7 @@ + @@ -9893,6 +9973,7 @@ + @@ -10083,6 +10164,7 @@ + @@ -10754,6 +10836,7 @@ + @@ -10961,6 +11044,7 @@ + @@ -11115,6 +11199,7 @@ + @@ -11232,6 +11317,7 @@ + @@ -11377,6 +11463,7 @@ + @@ -11421,6 +11508,7 @@ + @@ -11446,6 +11534,7 @@ + @@ -11459,6 +11548,7 @@ + @@ -11541,6 +11631,7 @@ + @@ -11773,6 +11864,7 @@ + @@ -11872,6 +11964,7 @@ + @@ -11896,6 +11989,7 @@ + @@ -11926,6 +12020,7 @@ + @@ -12204,6 +12299,7 @@ + @@ -12238,8 +12334,8 @@ - - + + @@ -12285,6 +12381,7 @@ + @@ -12317,6 +12414,7 @@ + @@ -12400,6 +12498,7 @@ + @@ -12491,6 +12590,7 @@ + diff --git a/svgs/_365scores.svg b/svgs/_365scores.svg new file mode 100644 index 00000000000..6cd7c394986 --- /dev/null +++ b/svgs/_365scores.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/act_fibernet.svg b/svgs/act_fibernet.svg new file mode 100644 index 00000000000..0b421da8200 --- /dev/null +++ b/svgs/act_fibernet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/action.svg b/svgs/action.svg new file mode 100644 index 00000000000..dd604a8d6fd --- /dev/null +++ b/svgs/action.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/adobe_creative_cloud.svg b/svgs/adobe_creative_cloud.svg new file mode 100644 index 00000000000..2a800183655 --- /dev/null +++ b/svgs/adobe_creative_cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/agricultural_bank_of_china.svg b/svgs/agricultural_bank_of_china.svg new file mode 100644 index 00000000000..67e0c2e7377 --- /dev/null +++ b/svgs/agricultural_bank_of_china.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ampereflow.svg b/svgs/ampereflow.svg new file mode 100644 index 00000000000..dca6379a68b --- /dev/null +++ b/svgs/ampereflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/anacity_in.svg b/svgs/anacity_in.svg new file mode 100644 index 00000000000..72defb9ab2b --- /dev/null +++ b/svgs/anacity_in.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/asus_tips.svg b/svgs/asus_tips.svg new file mode 100644 index 00000000000..465546e532d --- /dev/null +++ b/svgs/asus_tips.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/birbank.svg b/svgs/birbank.svg new file mode 100644 index 00000000000..0c533187a0c --- /dev/null +++ b/svgs/birbank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/brother_print_service_plugin.svg b/svgs/brother_print_service_plugin.svg new file mode 100644 index 00000000000..d16d8d21cb8 --- /dev/null +++ b/svgs/brother_print_service_plugin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/buy_me_a_coffee.svg b/svgs/buy_me_a_coffee.svg new file mode 100644 index 00000000000..4c8b846e3f8 --- /dev/null +++ b/svgs/buy_me_a_coffee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bz_reminder.svg b/svgs/bz_reminder.svg new file mode 100644 index 00000000000..eeca29df0a3 --- /dev/null +++ b/svgs/bz_reminder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/bz_reminder_pro.svg b/svgs/bz_reminder_pro.svg new file mode 100644 index 00000000000..81a3a02e496 --- /dev/null +++ b/svgs/bz_reminder_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/call_of_duty_warzone.svg b/svgs/call_of_duty_warzone.svg new file mode 100644 index 00000000000..e2eb91afc98 --- /dev/null +++ b/svgs/call_of_duty_warzone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/calorie_counter.svg b/svgs/calorie_counter.svg new file mode 100644 index 00000000000..868e722fe10 --- /dev/null +++ b/svgs/calorie_counter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cara.svg b/svgs/cara.svg new file mode 100644 index 00000000000..707ff2bb503 --- /dev/null +++ b/svgs/cara.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/castro_premium.svg b/svgs/castro_premium.svg new file mode 100644 index 00000000000..bc55ff1b81a --- /dev/null +++ b/svgs/castro_premium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/comatose.svg b/svgs/comatose.svg new file mode 100644 index 00000000000..c070be21da7 --- /dev/null +++ b/svgs/comatose.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/cpu_monitor.svg b/svgs/cpu_monitor.svg new file mode 100644 index 00000000000..34e7fc15f7f --- /dev/null +++ b/svgs/cpu_monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/darker.svg b/svgs/darker.svg new file mode 100644 index 00000000000..be2214ecaee --- /dev/null +++ b/svgs/darker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/delhivery.svg b/svgs/delhivery.svg new file mode 100644 index 00000000000..e3c69c88058 --- /dev/null +++ b/svgs/delhivery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/dicio_assistant.svg b/svgs/dicio_assistant.svg new file mode 100644 index 00000000000..20d8f066cf3 --- /dev/null +++ b/svgs/dicio_assistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/disky.svg b/svgs/disky.svg new file mode 100644 index 00000000000..81c27b9a974 --- /dev/null +++ b/svgs/disky.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/exnova.svg b/svgs/exnova.svg new file mode 100644 index 00000000000..6796fdcf932 --- /dev/null +++ b/svgs/exnova.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/federal_bank.svg b/svgs/federal_bank.svg new file mode 100644 index 00000000000..a8d576e6e1a --- /dev/null +++ b/svgs/federal_bank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/finshell_pay.svg b/svgs/finshell_pay.svg new file mode 100644 index 00000000000..52c50ce71ae --- /dev/null +++ b/svgs/finshell_pay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/focus_video.svg b/svgs/focus_video.svg new file mode 100644 index 00000000000..c0081d56bfe --- /dev/null +++ b/svgs/focus_video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/formulia.svg b/svgs/formulia.svg new file mode 100644 index 00000000000..934bc391372 --- /dev/null +++ b/svgs/formulia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/freecodecamp.svg b/svgs/freecodecamp.svg new file mode 100644 index 00000000000..5da25c7df09 --- /dev/null +++ b/svgs/freecodecamp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/freetube.svg b/svgs/freetube.svg new file mode 100644 index 00000000000..7f26e7084dc --- /dev/null +++ b/svgs/freetube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/fuhrerschein.svg b/svgs/fuhrerschein.svg new file mode 100644 index 00000000000..5945bf34068 --- /dev/null +++ b/svgs/fuhrerschein.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/goodmoney.svg b/svgs/goodmoney.svg new file mode 100644 index 00000000000..dcbdc1e4708 --- /dev/null +++ b/svgs/goodmoney.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/groovifi.svg b/svgs/groovifi.svg new file mode 100644 index 00000000000..a7e3855ed95 --- /dev/null +++ b/svgs/groovifi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/huawei_video.svg b/svgs/huawei_video.svg new file mode 100644 index 00000000000..f8c473998db --- /dev/null +++ b/svgs/huawei_video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/iaca_laboratorios.svg b/svgs/iaca_laboratorios.svg new file mode 100644 index 00000000000..c06f0608877 --- /dev/null +++ b/svgs/iaca_laboratorios.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ilovepdf.svg b/svgs/ilovepdf.svg new file mode 100644 index 00000000000..2cbf05b1982 --- /dev/null +++ b/svgs/ilovepdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/incognito_browser.svg b/svgs/incognito_browser.svg new file mode 100644 index 00000000000..ec26aaead83 --- /dev/null +++ b/svgs/incognito_browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/infomaniak_kdrive.svg b/svgs/infomaniak_kdrive.svg new file mode 100644 index 00000000000..41150a007cc --- /dev/null +++ b/svgs/infomaniak_kdrive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jiofinance.svg b/svgs/jiofinance.svg new file mode 100644 index 00000000000..4b63d32692f --- /dev/null +++ b/svgs/jiofinance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/jupiter.svg b/svgs/jupiter.svg new file mode 100644 index 00000000000..8b3bb7b22ec --- /dev/null +++ b/svgs/jupiter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kate_mobile.svg b/svgs/kate_mobile.svg new file mode 100644 index 00000000000..cfe5e65b23f --- /dev/null +++ b/svgs/kate_mobile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/kaufland.svg b/svgs/kaufland.svg new file mode 100644 index 00000000000..dd75ad80f7a --- /dev/null +++ b/svgs/kaufland.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/koshelek.svg b/svgs/koshelek.svg new file mode 100644 index 00000000000..47d4b35d036 --- /dev/null +++ b/svgs/koshelek.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/manga_dogs.svg b/svgs/manga_dogs.svg new file mode 100644 index 00000000000..b1880a01ebf --- /dev/null +++ b/svgs/manga_dogs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/meeye_icons.svg b/svgs/meeye_icons.svg new file mode 100644 index 00000000000..2ef64fe2ed7 --- /dev/null +++ b/svgs/meeye_icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mi_community.svg b/svgs/mi_community.svg new file mode 100644 index 00000000000..ca0117a9aaa --- /dev/null +++ b/svgs/mi_community.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mods_maps_for_minecraft_pe.svg b/svgs/mods_maps_for_minecraft_pe.svg new file mode 100644 index 00000000000..98b3b69319d --- /dev/null +++ b/svgs/mods_maps_for_minecraft_pe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mostaza.svg b/svgs/mostaza.svg new file mode 100644 index 00000000000..470f3d0ca14 --- /dev/null +++ b/svgs/mostaza.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/motohub.svg b/svgs/motohub.svg new file mode 100644 index 00000000000..05ebc3c73db --- /dev/null +++ b/svgs/motohub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_app_list.svg b/svgs/my_app_list.svg new file mode 100644 index 00000000000..288b08064c0 --- /dev/null +++ b/svgs/my_app_list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/my_galaxy.svg b/svgs/my_galaxy.svg new file mode 100644 index 00000000000..c0969ab4af2 --- /dev/null +++ b/svgs/my_galaxy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/naranja_x.svg b/svgs/naranja_x.svg new file mode 100644 index 00000000000..095ceed6d9d --- /dev/null +++ b/svgs/naranja_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/neostumbler.svg b/svgs/neostumbler.svg new file mode 100644 index 00000000000..775016828f9 --- /dev/null +++ b/svgs/neostumbler.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nfcgate.svg b/svgs/nfcgate.svg new file mode 100644 index 00000000000..e6588fa4a39 --- /dev/null +++ b/svgs/nfcgate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/notes_notepad.svg b/svgs/notes_notepad.svg new file mode 100644 index 00000000000..38987cdcc5a --- /dev/null +++ b/svgs/notes_notepad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/nulls_brawl.svg b/svgs/nulls_brawl.svg new file mode 100644 index 00000000000..34105370d4d --- /dev/null +++ b/svgs/nulls_brawl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/orgzly_revived.svg b/svgs/orgzly_revived.svg new file mode 100644 index 00000000000..cf3c9e80f2c --- /dev/null +++ b/svgs/orgzly_revived.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/oss_card_wallet.svg b/svgs/oss_card_wallet.svg new file mode 100644 index 00000000000..d8f485e87ce --- /dev/null +++ b/svgs/oss_card_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/packmate.svg b/svgs/packmate.svg new file mode 100644 index 00000000000..6921e9ae27d --- /dev/null +++ b/svgs/packmate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pascals_wager.svg b/svgs/pascals_wager.svg new file mode 100644 index 00000000000..b2cbcf69923 --- /dev/null +++ b/svgs/pascals_wager.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/payoneer.svg b/svgs/payoneer.svg new file mode 100644 index 00000000000..6aff0835806 --- /dev/null +++ b/svgs/payoneer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pi_browser.svg b/svgs/pi_browser.svg new file mode 100644 index 00000000000..95cc4cf222c --- /dev/null +++ b/svgs/pi_browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pikmin_bloom.svg b/svgs/pikmin_bloom.svg new file mode 100644 index 00000000000..b87ac9141f9 --- /dev/null +++ b/svgs/pikmin_bloom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pixelcut.svg b/svgs/pixelcut.svg new file mode 100644 index 00000000000..296367f2925 --- /dev/null +++ b/svgs/pixelcut.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/plants_vs_zombies_2.svg b/svgs/plants_vs_zombies_2.svg new file mode 100644 index 00000000000..dee85f29830 --- /dev/null +++ b/svgs/plants_vs_zombies_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/plugin_voicegpt.svg b/svgs/plugin_voicegpt.svg new file mode 100644 index 00000000000..b4385d67bd1 --- /dev/null +++ b/svgs/plugin_voicegpt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/postparty.svg b/svgs/postparty.svg new file mode 100644 index 00000000000..2b364a757e9 --- /dev/null +++ b/svgs/postparty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/prequel.svg b/svgs/prequel.svg new file mode 100644 index 00000000000..3d9412930a4 --- /dev/null +++ b/svgs/prequel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/proton_wallet.svg b/svgs/proton_wallet.svg new file mode 100644 index 00000000000..fea1781c71a --- /dev/null +++ b/svgs/proton_wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/raven.svg b/svgs/raven.svg new file mode 100644 index 00000000000..a062b6672d4 --- /dev/null +++ b/svgs/raven.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/remote_for_android_tv.svg b/svgs/remote_for_android_tv.svg new file mode 100644 index 00000000000..feeaf932cbc --- /dev/null +++ b/svgs/remote_for_android_tv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/ridmik_keyboard.svg b/svgs/ridmik_keyboard.svg new file mode 100644 index 00000000000..ceabb19ba53 --- /dev/null +++ b/svgs/ridmik_keyboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rise_up_balloon_game.svg b/svgs/rise_up_balloon_game.svg new file mode 100644 index 00000000000..1543286f06b --- /dev/null +++ b/svgs/rise_up_balloon_game.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/robinhood.svg b/svgs/robinhood.svg new file mode 100644 index 00000000000..f11c2244748 --- /dev/null +++ b/svgs/robinhood.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/root_checker.svg b/svgs/root_checker.svg new file mode 100644 index 00000000000..5f00c70b5a8 --- /dev/null +++ b/svgs/root_checker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rush.svg b/svgs/rush.svg new file mode 100644 index 00000000000..529e2f62c3a --- /dev/null +++ b/svgs/rush.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/safetynet.svg b/svgs/safetynet.svg new file mode 100644 index 00000000000..9e5f188fc73 --- /dev/null +++ b/svgs/safetynet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/schoology.svg b/svgs/schoology.svg new file mode 100644 index 00000000000..b4aa3fa1aae --- /dev/null +++ b/svgs/schoology.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/skroutz.svg b/svgs/skroutz.svg new file mode 100644 index 00000000000..9e4957942e7 --- /dev/null +++ b/svgs/skroutz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/solar_smash.svg b/svgs/solar_smash.svg new file mode 100644 index 00000000000..0635c23abc0 --- /dev/null +++ b/svgs/solar_smash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/spamblocker.svg b/svgs/spamblocker.svg new file mode 100644 index 00000000000..734983e5c69 --- /dev/null +++ b/svgs/spamblocker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/squad_busters.svg b/svgs/squad_busters.svg new file mode 100644 index 00000000000..a806f05429f --- /dev/null +++ b/svgs/squad_busters.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/standoff_2.svg b/svgs/standoff_2.svg new file mode 100644 index 00000000000..8659cf2e0e0 --- /dev/null +++ b/svgs/standoff_2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/superimage_pro.svg b/svgs/superimage_pro.svg new file mode 100644 index 00000000000..981dbbdc6ad --- /dev/null +++ b/svgs/superimage_pro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tipatch.svg b/svgs/tipatch.svg new file mode 100644 index 00000000000..b5bb55c1b15 --- /dev/null +++ b/svgs/tipatch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/tubi.svg b/svgs/tubi.svg new file mode 100644 index 00000000000..712b7eb6282 --- /dev/null +++ b/svgs/tubi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/unit_converter.svg b/svgs/unit_converter.svg new file mode 100644 index 00000000000..fb5fab97f80 --- /dev/null +++ b/svgs/unit_converter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/velociraptor.svg b/svgs/velociraptor.svg new file mode 100644 index 00000000000..514ce6194c5 --- /dev/null +++ b/svgs/velociraptor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vitune.svg b/svgs/vitune.svg new file mode 100644 index 00000000000..e78a1ad4d19 --- /dev/null +++ b/svgs/vitune.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/voice_access.svg b/svgs/voice_access.svg new file mode 100644 index 00000000000..095aae6a06c --- /dev/null +++ b/svgs/voice_access.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vpn_fast_proxy_secure.svg b/svgs/vpn_fast_proxy_secure.svg new file mode 100644 index 00000000000..503bf4515cb --- /dev/null +++ b/svgs/vpn_fast_proxy_secure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vrchat.svg b/svgs/vrchat.svg new file mode 100644 index 00000000000..168abedfcd5 --- /dev/null +++ b/svgs/vrchat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/vtb.svg b/svgs/vtb.svg new file mode 100644 index 00000000000..f933f80f689 --- /dev/null +++ b/svgs/vtb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wanderlog.svg b/svgs/wanderlog.svg new file mode 100644 index 00000000000..067e651d603 --- /dev/null +++ b/svgs/wanderlog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/whicons.svg b/svgs/whicons.svg new file mode 100644 index 00000000000..d8ebb11cf02 --- /dev/null +++ b/svgs/whicons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/world_tv.svg b/svgs/world_tv.svg new file mode 100644 index 00000000000..b09d9a116c4 --- /dev/null +++ b/svgs/world_tv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/wuthering_waves.svg b/svgs/wuthering_waves.svg new file mode 100644 index 00000000000..6723a9a51ab --- /dev/null +++ b/svgs/wuthering_waves.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/xapk_installer.svg b/svgs/xapk_installer.svg new file mode 100644 index 00000000000..49e1d799b2d --- /dev/null +++ b/svgs/xapk_installer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/yandex_with_alice.svg b/svgs/yandex_with_alice.svg new file mode 100644 index 00000000000..4b7f67a6d0d --- /dev/null +++ b/svgs/yandex_with_alice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/zipxtract_fd.svg b/svgs/zipxtract_fd.svg new file mode 100644 index 00000000000..6f1385cc3b7 --- /dev/null +++ b/svgs/zipxtract_fd.svg @@ -0,0 +1 @@ + \ No newline at end of file From 23d5862d200c55cc8703fcd82207da16cd0bfedc Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 12 Sep 2024 02:14:47 +0300 Subject: [PATCH 340/527] +67 links (#2324) * +67 links * Minor fix --- app/assets/appfilter.xml | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index a2b1c69fe9b..119bcfe42ac 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -323,6 +323,7 @@ + @@ -1888,6 +1889,7 @@ + @@ -2141,6 +2143,7 @@ + @@ -2508,6 +2511,7 @@ + @@ -2990,6 +2994,7 @@ + @@ -3152,6 +3157,7 @@ + @@ -3384,6 +3390,10 @@ + + + + @@ -3662,6 +3672,7 @@ + @@ -4001,6 +4012,7 @@ + @@ -4042,6 +4054,7 @@ + @@ -4064,12 +4077,14 @@ + + @@ -4084,6 +4099,7 @@ + @@ -4099,16 +4115,19 @@ + + + @@ -4375,6 +4394,7 @@ + @@ -4552,11 +4572,13 @@ + + @@ -4712,6 +4734,7 @@ + @@ -4900,6 +4923,7 @@ + @@ -4936,6 +4960,7 @@ + @@ -4966,6 +4991,7 @@ + @@ -5109,6 +5135,7 @@ + @@ -5119,6 +5146,7 @@ + @@ -5281,6 +5309,7 @@ + @@ -5311,6 +5340,7 @@ + @@ -5656,6 +5686,7 @@ + @@ -5750,6 +5781,7 @@ + @@ -5884,6 +5916,7 @@ + @@ -5929,6 +5962,7 @@ + @@ -5979,6 +6013,7 @@ + @@ -6030,6 +6065,7 @@ + @@ -6348,6 +6384,7 @@ + @@ -6944,6 +6981,7 @@ + @@ -7128,6 +7166,7 @@ + @@ -7457,6 +7496,7 @@ + @@ -7744,6 +7784,7 @@ + @@ -7906,6 +7947,7 @@ + @@ -8100,6 +8142,7 @@ + @@ -8312,6 +8355,7 @@ + @@ -8666,6 +8710,7 @@ + @@ -9597,6 +9642,7 @@ + @@ -9771,6 +9817,7 @@ + @@ -9875,6 +9922,7 @@ + @@ -9918,6 +9966,7 @@ + @@ -10147,6 +10196,7 @@ + @@ -10188,6 +10238,7 @@ + @@ -10199,6 +10250,7 @@ + @@ -10467,6 +10519,7 @@ + @@ -10890,6 +10943,7 @@ + @@ -10987,6 +11041,7 @@ + @@ -10998,6 +11053,7 @@ + @@ -11113,6 +11169,7 @@ + @@ -11294,6 +11351,7 @@ + @@ -11468,6 +11526,7 @@ + @@ -11508,6 +11567,8 @@ + + @@ -11616,6 +11677,7 @@ + @@ -11927,6 +11989,7 @@ + @@ -11989,6 +12052,7 @@ + @@ -12197,6 +12261,7 @@ + @@ -12340,6 +12405,7 @@ + @@ -12381,6 +12447,7 @@ + From ed6393e50b9f9c37abc6ca9c80fba36e4a1d64ef Mon Sep 17 00:00:00 2001 From: 92 <169070113+I21b@users.noreply.github.com> Date: Fri, 13 Sep 2024 03:28:38 +0900 Subject: [PATCH 341/527] +12 icons, +3 link (#2315) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * +12 icons, +3 link > Icons: `BBLL`, `BiliYou`, `BUFF`, `СберИнвестиции ~~ SberInvestments`, `Купер ~~ Kuper`, `Magical Search`, `magicplan`, `Moscow Wi-Fi autologin`, `О'КЕЙ ~~ O'KEY`, `РЖД Пассажирам билеты на поезд ~~ Russian Railways`, `Перекресток ~~ Perekrestok`, `乐速通 ~~ BJETC` > Links: `Avee Player Lite`, `BUFF`, `TorrServe MatriX` Co-Authored-By: Daniil <68991727+fishaffair@users.noreply.github.com> Co-Authored-By: astolfogit <35395586+astolfogit@users.noreply.github.com> Co-Authored-By: OWQW <180897579+owqw@users.noreply.github.com> Co-Authored-By: 92 <169070113+i21b@users.noreply.github.com> * small fix * Update buff.svg * Update okey.svg * Update torrserve_matrix.svg --------- Co-authored-by: Daniil <68991727+fishaffair@users.noreply.github.com> Co-authored-by: astolfogit <35395586+astolfogit@users.noreply.github.com> Co-authored-by: OWQW <180897579+owqw@users.noreply.github.com> Co-authored-by: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 15 +++++++++++++++ svgs/bbll.svg | 3 +++ svgs/biliyou.svg | 3 +++ svgs/bjetc.svg | 3 +++ svgs/buff.svg | 1 + svgs/kuper.svg | 3 +++ svgs/magical_search.svg | 3 +++ svgs/magicplan.svg | 3 +++ svgs/moscow_wifi_autologin.svg | 3 +++ svgs/okey.svg | 1 + svgs/perekrestok.svg | 6 ++++++ svgs/russian_railways.svg | 3 +++ svgs/sberinvestments.svg | 3 +++ svgs/torrserve_matrix.svg | 1 + 14 files changed, 51 insertions(+) create mode 100644 svgs/bbll.svg create mode 100644 svgs/biliyou.svg create mode 100644 svgs/bjetc.svg create mode 100644 svgs/buff.svg create mode 100644 svgs/kuper.svg create mode 100644 svgs/magical_search.svg create mode 100644 svgs/magicplan.svg create mode 100644 svgs/moscow_wifi_autologin.svg create mode 100644 svgs/okey.svg create mode 100644 svgs/perekrestok.svg create mode 100644 svgs/russian_railways.svg create mode 100644 svgs/sberinvestments.svg create mode 100644 svgs/torrserve_matrix.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 119bcfe42ac..bc0c17997d9 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -799,6 +799,7 @@ + @@ -947,6 +948,7 @@ + @@ -1049,6 +1051,7 @@ + @@ -1349,6 +1352,8 @@ + + @@ -1469,6 +1474,7 @@ + @@ -5225,6 +5231,7 @@ + @@ -5566,9 +5573,11 @@ + + @@ -6275,6 +6284,7 @@ + @@ -7041,6 +7051,7 @@ + @@ -7389,6 +7400,7 @@ + @@ -10954,6 +10966,7 @@ + @@ -12506,6 +12519,7 @@ + @@ -12821,6 +12835,7 @@ + diff --git a/svgs/bbll.svg b/svgs/bbll.svg new file mode 100644 index 00000000000..0c569c0bc60 --- /dev/null +++ b/svgs/bbll.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/biliyou.svg b/svgs/biliyou.svg new file mode 100644 index 00000000000..7d634c17145 --- /dev/null +++ b/svgs/biliyou.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/bjetc.svg b/svgs/bjetc.svg new file mode 100644 index 00000000000..753d8a0e1bd --- /dev/null +++ b/svgs/bjetc.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/buff.svg b/svgs/buff.svg new file mode 100644 index 00000000000..b84dcfaa90d --- /dev/null +++ b/svgs/buff.svg @@ -0,0 +1 @@ + diff --git a/svgs/kuper.svg b/svgs/kuper.svg new file mode 100644 index 00000000000..589417942ca --- /dev/null +++ b/svgs/kuper.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/magical_search.svg b/svgs/magical_search.svg new file mode 100644 index 00000000000..f1ca03d5554 --- /dev/null +++ b/svgs/magical_search.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/magicplan.svg b/svgs/magicplan.svg new file mode 100644 index 00000000000..bcfa8c85f3b --- /dev/null +++ b/svgs/magicplan.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/moscow_wifi_autologin.svg b/svgs/moscow_wifi_autologin.svg new file mode 100644 index 00000000000..e367ba251f5 --- /dev/null +++ b/svgs/moscow_wifi_autologin.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/okey.svg b/svgs/okey.svg new file mode 100644 index 00000000000..1a6355a554b --- /dev/null +++ b/svgs/okey.svg @@ -0,0 +1 @@ + diff --git a/svgs/perekrestok.svg b/svgs/perekrestok.svg new file mode 100644 index 00000000000..91efd9d454d --- /dev/null +++ b/svgs/perekrestok.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/svgs/russian_railways.svg b/svgs/russian_railways.svg new file mode 100644 index 00000000000..3e77546923e --- /dev/null +++ b/svgs/russian_railways.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/sberinvestments.svg b/svgs/sberinvestments.svg new file mode 100644 index 00000000000..818b9d5a703 --- /dev/null +++ b/svgs/sberinvestments.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/torrserve_matrix.svg b/svgs/torrserve_matrix.svg new file mode 100644 index 00000000000..e531573306d --- /dev/null +++ b/svgs/torrserve_matrix.svg @@ -0,0 +1 @@ + From 4b8cc3a278e199b3696ed96fd9ccf1ab85038e03 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:19:00 +0300 Subject: [PATCH 342/527] +17 links (#2327) --- app/assets/appfilter.xml | 176 ++++++++++-------- svgs/{dominos.svg => dominos_pizza.svg} | 0 ...ytopia.svg => the_battle_of_polytopia.svg} | 0 svgs/{tune_in_radio.svg => tunein_radio.svg} | 0 svgs/{tuya.svg => tuya_smart.svg} | 0 5 files changed, 96 insertions(+), 80 deletions(-) rename svgs/{dominos.svg => dominos_pizza.svg} (100%) rename svgs/{polytopia.svg => the_battle_of_polytopia.svg} (100%) rename svgs/{tune_in_radio.svg => tunein_radio.svg} (100%) rename svgs/{tuya.svg => tuya_smart.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index bc0c17997d9..9cd9467ece9 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1054,6 +1054,7 @@ + @@ -1352,6 +1353,8 @@ + + @@ -1474,7 +1477,6 @@ - @@ -2764,57 +2766,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3918,6 +3921,7 @@ + @@ -5231,7 +5235,6 @@ - @@ -6016,8 +6019,9 @@ - - + + + @@ -6325,7 +6329,7 @@ - + @@ -6401,6 +6405,7 @@ + @@ -7051,7 +7056,6 @@ - @@ -7400,7 +7404,6 @@ - @@ -8431,6 +8434,7 @@ + @@ -10327,6 +10331,7 @@ + @@ -10375,6 +10380,7 @@ + @@ -10789,7 +10795,8 @@ - + + @@ -11128,20 +11135,21 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -11164,8 +11172,9 @@ - - + + + @@ -11339,6 +11348,7 @@ + @@ -11465,6 +11475,7 @@ + @@ -11998,6 +12009,7 @@ + @@ -12495,6 +12507,7 @@ + @@ -12510,19 +12523,21 @@ + + - + @@ -12530,6 +12545,7 @@ + @@ -12581,7 +12597,7 @@ - + @@ -12603,8 +12619,8 @@ - - + + @@ -12658,6 +12674,7 @@ + @@ -12835,7 +12852,6 @@ - diff --git a/svgs/dominos.svg b/svgs/dominos_pizza.svg similarity index 100% rename from svgs/dominos.svg rename to svgs/dominos_pizza.svg diff --git a/svgs/polytopia.svg b/svgs/the_battle_of_polytopia.svg similarity index 100% rename from svgs/polytopia.svg rename to svgs/the_battle_of_polytopia.svg diff --git a/svgs/tune_in_radio.svg b/svgs/tunein_radio.svg similarity index 100% rename from svgs/tune_in_radio.svg rename to svgs/tunein_radio.svg diff --git a/svgs/tuya.svg b/svgs/tuya_smart.svg similarity index 100% rename from svgs/tuya.svg rename to svgs/tuya_smart.svg From bfb63815a53a55c5292045b9f85bb4dec73b79c6 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:11:09 +0300 Subject: [PATCH 343/527] Small refinements of the Lawnicons docs (#2328) * Small refinements of the GitHub docs * Update icon_checklist.md * Update icon_checklist.md * Update icon_checklist.md --- .github/icon_checklist.md | 6 +----- CONTRIBUTING.md | 4 ++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 8059999f6d6..1c7013045c2 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -1,26 +1,22 @@ Thanks for your contribution! -While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. +We try to do the review within 7 days. While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. ### Canvas and sizes 1. Canvas: `192×192px`. 2. Non-square icons: the long side of the icons should be `160px`. 3. Square icons: `154×154px`. -- [ ] Approved by the Lawnicons reviewer ### Color, stroke width and rounding 1. Color: non-transparent black `#000`. 2. No fill. Base stroke width: `12px`. `14px`, `10px`, `8px` — depending on the shape of the icons. `6px` — for fine details. 3. Rounded ends and joins. 90° corners are rounded by `6-32px`. -- [ ] Approved by the Lawnicons reviewer ### Naming 1. Names should match the official app name and contain no additional text. 2. If the first `3` characters of the app name contain letters not from the English alphabet, then add a localized (or transliterated) name via `~~`. Example: `京东 ~~ JD`. 3. The names of the drawables should repeat the names of the apps if nothing prevents it. -- [ ] Approved by the Lawnicons reviewer ### Quality 1. Ensure that icons are easily recognizable. 2. Align icons to [the visual center](https://crazybitsstudios.com/another-way-of-aligning-elements-when-creating-icons) as much as possible within the guidelines. The visual center is where your icon looks and feels centered. 3. Avoid noticable black spots by reducing the stroke width or simplifying the icons. 4. Avoid close distances between strokes. The icons on the phone screen will be smaller, so the small distances between the strokes will stick together. 5. Avoid drastic changes in stroke widths. When the strokes next to each other differ in width by 4px or more, the icon will look sloppy. -- [ ] Approved by the Lawnicons reviewer diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06c3dc6cfa1..82dceff8ba8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,6 +11,10 @@ For additional information on designing icons and samples, see [the Lawnicons Fi Need help? [Join Lawnchair on Discord](https://discord.com/invite/3x8qNWxgGZ). ### TL;DR on icon design + +> [!NOTE] +> Upload no more than 10 icons at a time, because reviewers only have time for small pull requests. + The canvas is `192×192px`. The content area for most icons is `160×160px`, meaning the long side of an icon should be `160px`. Square icons should be `154×154px`. No fill, the stroke width is `12px`. All shapes should be black `#000` with rounded ends and joins. Round 90° angles by `6-32px`. Avoid noticable black spots, close distances between strokes, and drastic changes in stroke widths. Simplify details, but don't lose recognizability. Provide original and localized names, so the icons can be found. To avoid rework, save time and understand the limitations of the guidelines, it is worth reading reviews (e.g., [+8 icons, +1 link, +4 updates](https://github.com/LawnchairLauncher/lawnicons/pull/1865)) and creating 5-10 icons in the first contribution. From bd0a23bafbcadc11b59b582607f51e059b1435aa Mon Sep 17 00:00:00 2001 From: "M." Date: Fri, 13 Sep 2024 22:30:31 +0330 Subject: [PATCH 344/527] +3 icons (#2326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added 'Mead Mate', 'Nobitex' and 'بانک مهر' * fixed 'Nobitex' * fixed 'بانک مهر' * Minor fixes * fixed 'بانک مهر' in appfilter * fixed 'بانک مهر' * updated 'Mead Mate' * Sixe fix mead_mate.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 3 +++ svgs/bank_mehr.svg | 3 +++ svgs/mead_mate.svg | 1 + svgs/nobitex.svg | 4 ++++ 4 files changed, 11 insertions(+) create mode 100644 svgs/bank_mehr.svg create mode 100644 svgs/mead_mate.svg create mode 100644 svgs/nobitex.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9cd9467ece9..29ff5cda89f 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -882,6 +882,7 @@ + @@ -5779,6 +5780,7 @@ + @@ -6872,6 +6874,7 @@ + diff --git a/svgs/bank_mehr.svg b/svgs/bank_mehr.svg new file mode 100644 index 00000000000..f46180b3b07 --- /dev/null +++ b/svgs/bank_mehr.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/mead_mate.svg b/svgs/mead_mate.svg new file mode 100644 index 00000000000..5a9999b9eeb --- /dev/null +++ b/svgs/mead_mate.svg @@ -0,0 +1 @@ + diff --git a/svgs/nobitex.svg b/svgs/nobitex.svg new file mode 100644 index 00000000000..92e92ffb02f --- /dev/null +++ b/svgs/nobitex.svg @@ -0,0 +1,4 @@ + + + + From c80d861e229dfcb12320d09240940671dc9a1222 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Sat, 14 Sep 2024 09:52:51 +0800 Subject: [PATCH 345/527] Create vcs.xml --- .idea/vcs.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000000..14f965d36f5 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,20 @@ + + + + + + + + + From 00b42dff3dd33ec64087b2492ddcf3856b17746c Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 14 Sep 2024 12:02:03 +0300 Subject: [PATCH 346/527] +15 links (#2329) --- app/assets/appfilter.xml | 21 ++++++++++++++++++--- svgs/{athena.svg => zorin_connect.svg} | 0 2 files changed, 18 insertions(+), 3 deletions(-) rename svgs/{athena.svg => zorin_connect.svg} (100%) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 29ff5cda89f..5923fea3693 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -244,12 +244,14 @@ + + @@ -672,6 +674,7 @@ + @@ -719,9 +722,9 @@ - + - + @@ -882,7 +885,6 @@ - @@ -2196,6 +2198,7 @@ + @@ -2995,6 +2998,7 @@ + @@ -3218,6 +3222,7 @@ + @@ -3858,6 +3863,7 @@ + @@ -6021,6 +6027,7 @@ + @@ -6279,6 +6286,7 @@ + @@ -6564,6 +6572,7 @@ + @@ -7094,6 +7103,7 @@ + @@ -7555,6 +7565,7 @@ + @@ -7880,6 +7891,7 @@ + @@ -8033,6 +8045,7 @@ + @@ -12437,6 +12450,7 @@ + @@ -12609,6 +12623,7 @@ + diff --git a/svgs/athena.svg b/svgs/zorin_connect.svg similarity index 100% rename from svgs/athena.svg rename to svgs/zorin_connect.svg From 263eaf01db19e4dd2120470267479b066d3052e3 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 14 Sep 2024 12:12:57 +0300 Subject: [PATCH 347/527] Minor fix to the self-review list (#2330) --- .github/icon_checklist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 1c7013045c2..2162f28c151 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -1,6 +1,6 @@ Thanks for your contribution! -We try to do the review within 7 days. While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. +While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. We try to do the review within 7 days. ### Canvas and sizes 1. Canvas: `192×192px`. From 5638e36f8065306506a93a16200021f37ced93e1 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 14 Sep 2024 18:32:19 +0800 Subject: [PATCH 348/527] Update new icons build process --- .github/workflows/build_debug_apk.yml | 3 -- .../lawnicons/helper/AppfilterDiffCreator.kt | 42 ++++++++++++++----- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index c83c617e15e..23f1856941b 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -16,9 +16,6 @@ jobs: uses: actions/checkout@v4 with: submodules: true - - name: Fetch all needed branches - run: git fetch origin main:main && git fetch origin develop:develop - continue-on-error: true - uses: actions/setup-java@v4 with: distribution: 'zulu' diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index 3988d9319b4..ed8f7bb3c5c 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -21,20 +21,42 @@ import java.io.File object AppfilterDiffCreator { private const val OUTPUT_FILE = "/xml/appfilter_diff.xml" - private fun getBranchContents( - branch: String, + private fun getPreviousReleaseLines( appFilterFile: String, ): List { - val command = listOf("git", "show", "$branch:$appFilterFile") - val process = ProcessBuilder(command) + val fetchCommand = listOf("git", "fetch", "--tags") + val fetchProcess = ProcessBuilder(fetchCommand) .redirectErrorStream(true) .start() + val output = fetchProcess.inputStream.bufferedReader().readText() + if (fetchProcess.waitFor() != 0) { + throw RuntimeException("Failed to execute $fetchCommand: $output") + } else { + val describeCommand = listOf("git", "describe", "--tags", "--abbrev=0") + val describeProcess = ProcessBuilder(describeCommand) + .redirectErrorStream(true) + .start() - val result = process.inputStream.bufferedReader().readLines() - if (process.waitFor() != 0) { - throw RuntimeException("Failed to execute command: $command") + val latestTag = describeProcess.inputStream.bufferedReader().readLine() + if (describeProcess.waitFor() != 0) { + throw RuntimeException("Failed to get latest tag: $latestTag") + } + + val showCommand = listOf("git", "show", "$latestTag:$appFilterFile") + val process = ProcessBuilder(showCommand) + .redirectErrorStream(true) + .start() + + val result = process.inputStream.bufferedReader().readLines() + if (process.waitFor() != 0) { + throw RuntimeException("Failed to execute $showCommand: $result") + } + return result } - return result + } + + private fun readFileContents(filePath: String): List { + return File(filePath).readLines() } private fun getLineDiff( @@ -72,8 +94,8 @@ object AppfilterDiffCreator { resDir: String, appFilterFile: String, ) { - val mainLines = getBranchContents("main", appFilterFile) - val developLines = getBranchContents("develop", appFilterFile) + val mainLines = getPreviousReleaseLines(appFilterFile) + val developLines = readFileContents(appFilterFile) val diff = getLineDiff(mainLines, developLines) writeDiffToFile(diff, resDir) From ed06a0218b8caa91908f18d4807544c92494470f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 14 Sep 2024 18:32:34 +0800 Subject: [PATCH 349/527] Fix snackbar showing twice --- .../lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt index 997f02570d2..45bc7d3b97c 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/IconRequestFAB.kt @@ -165,8 +165,8 @@ fun RequestHandler( content(interactionSource) - LaunchedEffect(iconRequestList.isNotEmpty()) { - if (showFirstLaunchSnackbar) { + LaunchedEffect(enabled) { + if (showFirstLaunchSnackbar && enabled) { openSnackbarFirstLaunchContent( context, scope, From 550917afb667ee754e4809f1a3967fa20694846f Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 14 Sep 2024 18:33:46 +0800 Subject: [PATCH 350/527] Bump version name and code --- app/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cddee9531d8..4485db657eb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,8 +26,8 @@ val ciRunNumber = providers.environmentVariable("GITHUB_RUN_NUMBER").orNull.orEm val isReleaseBuild = ciBuild && ciRef.contains("main") val devReleaseName = if (ciBuild) "(Dev #$ciRunNumber)" else "($buildCommit)" -val version = "2.11.0" -val versionDisplayName = "$version ${if (isReleaseBuild) "" else devReleaseName}" +val version = "2.12.0" +val versionDisplayName = version + if (!isReleaseBuild) " $devReleaseName" else "" android { compileSdk = 35 @@ -37,7 +37,7 @@ android { applicationId = "app.lawnchair.lawnicons" minSdk = 26 targetSdk = compileSdk - versionCode = 15 + versionCode = 16 versionName = versionDisplayName vectorDrawables.useSupportLibrary = true } From 6dab19a6988443381e8c4427e901db2b0589cc9c Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 14 Sep 2024 18:53:33 +0800 Subject: [PATCH 351/527] Fix build error --- .../lawnicons/helper/AppfilterDiffCreator.kt | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index ed8f7bb3c5c..66b1089230a 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -24,34 +24,39 @@ object AppfilterDiffCreator { private fun getPreviousReleaseLines( appFilterFile: String, ): List { - val fetchCommand = listOf("git", "fetch", "--tags") - val fetchProcess = ProcessBuilder(fetchCommand) - .redirectErrorStream(true) - .start() - val output = fetchProcess.inputStream.bufferedReader().readText() - if (fetchProcess.waitFor() != 0) { - throw RuntimeException("Failed to execute $fetchCommand: $output") - } else { - val describeCommand = listOf("git", "describe", "--tags", "--abbrev=0") - val describeProcess = ProcessBuilder(describeCommand) + return try { + val fetchCommand = listOf("git", "fetch", "--tags") + val fetchProcess = ProcessBuilder(fetchCommand) .redirectErrorStream(true) .start() + val output = fetchProcess.inputStream.bufferedReader().readText() + if (fetchProcess.waitFor() != 0) { + throw RuntimeException("Failed to execute $fetchCommand: $output") + } else { + val describeCommand = listOf("git", "describe", "--tags", "--abbrev=0") + val describeProcess = ProcessBuilder(describeCommand) + .redirectErrorStream(true) + .start() - val latestTag = describeProcess.inputStream.bufferedReader().readLine() - if (describeProcess.waitFor() != 0) { - throw RuntimeException("Failed to get latest tag: $latestTag") - } + val latestTag = describeProcess.inputStream.bufferedReader().readLine() + if (describeProcess.waitFor() != 0) { + throw RuntimeException("Failed to get latest tag: $latestTag") + } - val showCommand = listOf("git", "show", "$latestTag:$appFilterFile") - val process = ProcessBuilder(showCommand) - .redirectErrorStream(true) - .start() + val showCommand = listOf("git", "show", "$latestTag:$appFilterFile") + val process = ProcessBuilder(showCommand) + .redirectErrorStream(true) + .start() - val result = process.inputStream.bufferedReader().readLines() - if (process.waitFor() != 0) { - throw RuntimeException("Failed to execute $showCommand: $result") + val result = process.inputStream.bufferedReader().readLines() + if (process.waitFor() != 0) { + throw RuntimeException("Failed to execute $showCommand: $result") + } + result } - return result + } catch (e: Exception) { + println(e) + listOf() } } @@ -94,8 +99,8 @@ object AppfilterDiffCreator { resDir: String, appFilterFile: String, ) { - val mainLines = getPreviousReleaseLines(appFilterFile) - val developLines = readFileContents(appFilterFile) + val mainLines = readFileContents(appFilterFile) + val developLines = getPreviousReleaseLines(appFilterFile) val diff = getLineDiff(mainLines, developLines) writeDiffToFile(diff, resDir) From 93342555610e704701d37ab0800d7eb913304100 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 14 Sep 2024 20:14:57 +0800 Subject: [PATCH 352/527] Update placeholder UI --- .../ui/components/home/PlaceholderUI.kt | 155 ++++++++++++++++++ .../lawnicons/ui/destination/Contributors.kt | 11 ++ .../lawnicons/ui/destination/Home.kt | 13 +- app/src/main/res/values-en-rUS/strings.xml | 70 -------- .../lawnicons/helper/AppfilterDiffCreator.kt | 10 +- 5 files changed, 174 insertions(+), 85 deletions(-) create mode 100644 app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt delete mode 100644 app/src/main/res/values-en-rUS/strings.xml diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt new file mode 100644 index 00000000000..36301c012f5 --- /dev/null +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/components/home/PlaceholderUI.kt @@ -0,0 +1,155 @@ +/* + * Copyright 2024 Lawnchair Launcher + * + * 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. + */ + +package app.lawnchair.lawnicons.ui.components.home + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.GridItemSpan +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.BottomAppBar +import androidx.compose.material3.BottomAppBarDefaults +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import app.lawnchair.lawnicons.ui.components.core.placeholder.PlaceholderHighlight +import app.lawnchair.lawnicons.ui.components.core.placeholder.fade +import app.lawnchair.lawnicons.ui.components.core.placeholder.placeholder +import app.lawnchair.lawnicons.ui.components.core.placeholder.shimmer +import app.lawnchair.lawnicons.ui.util.toPaddingValues + +@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun PlaceholderUI( + showDummyCard: Boolean, + modifier: Modifier = Modifier, +) { + val contentPadding = IconPreviewGridPadding.Defaults + Scaffold( + modifier = modifier, + bottomBar = { + BottomAppBar( + modifier = Modifier.placeholder( + visible = true, + color = BottomAppBarDefaults.containerColor, + highlight = PlaceholderHighlight.shimmer( + MaterialTheme.colorScheme.surfaceContainer, + ), + ), + ) {} + }, + ) { + LazyVerticalGrid( + columns = GridCells.Adaptive(80.dp), + userScrollEnabled = false, + contentPadding = WindowInsets.navigationBars.toPaddingValues( + additionalStart = contentPadding.horizontalPadding, + additionalTop = contentPadding.topPadding, + additionalEnd = contentPadding.horizontalPadding, + ), + ) { + item( + span = { GridItemSpan(maxLineSpan) }, + ) { + CenterAlignedTopAppBar( + title = { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + modifier = Modifier + .size(36.dp) + .clip(CircleShape) + .placeholder( + visible = true, + color = MaterialTheme.colorScheme.surfaceContainer, + highlight = PlaceholderHighlight.fade(), + ), + ) + Spacer(modifier = Modifier.width(8.dp)) + Box( + modifier = Modifier + .width(96.dp) + .height(16.dp) + .clip(MaterialTheme.shapes.small) + .placeholder( + visible = true, + color = MaterialTheme.colorScheme.surfaceContainer, + highlight = PlaceholderHighlight.fade(), + ), + ) + } + }, + ) + } + if (showDummyCard) { + item(span = { GridItemSpan(maxLineSpan) }) { + Box( + modifier = Modifier + .padding(horizontal = 8.dp) + .padding(bottom = 12.dp) + .height(48.dp) + .fillMaxWidth() + .clip(CircleShape) + .placeholder( + visible = true, + color = MaterialTheme.colorScheme.surfaceContainer, + highlight = PlaceholderHighlight.shimmer( + MaterialTheme.colorScheme.surfaceContainerHigh, + ), + ), + ) {} + } + } + + items(100) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(all = 8.dp) + .aspectRatio(ratio = 1F) + .clip(shape = CircleShape) + .placeholder( + visible = true, + color = MaterialTheme.colorScheme.iconColor, + highlight = PlaceholderHighlight.shimmer( + MaterialTheme.colorScheme.surfaceContainer, + ), + ), + ) {} + } + } + } +} diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt index 124c0c8b5a1..1a677077f2e 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Contributors.kt @@ -153,7 +153,18 @@ private fun ContributorListPlaceholder( LazyColumn( modifier = modifier, contentPadding = contentPadding, + userScrollEnabled = false, ) { + item { + ContributorRowPlaceholder( + first = true, + last = true, + divider = false, + ) + } + item { + Spacer(modifier = Modifier.height(16.dp)) + } items(itemCount) { ContributorRowPlaceholder( first = it == 0, diff --git a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt index 6db59cfbf7d..8a4981aae31 100644 --- a/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt +++ b/app/src/main/kotlin/app/lawnchair/lawnicons/ui/destination/Home.kt @@ -3,12 +3,9 @@ package app.lawnchair.lawnicons.ui.destination import android.annotation.SuppressLint import androidx.compose.animation.Crossfade import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.rememberLazyGridState -import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState @@ -17,7 +14,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.platform.LocalContext @@ -36,6 +32,7 @@ import app.lawnchair.lawnicons.ui.components.home.IconPreviewGrid import app.lawnchair.lawnicons.ui.components.home.IconPreviewGridPadding import app.lawnchair.lawnicons.ui.components.home.IconRequestFAB import app.lawnchair.lawnicons.ui.components.home.NewIconsCard +import app.lawnchair.lawnicons.ui.components.home.PlaceholderUI import app.lawnchair.lawnicons.ui.components.home.search.PlaceholderSearchBar import app.lawnchair.lawnicons.ui.theme.LawniconsTheme import app.lawnchair.lawnicons.ui.util.PreviewLawnicons @@ -166,13 +163,7 @@ private fun Home( if (isExpandedScreen) { PlaceholderSearchBar() } else { - Column( - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.fillMaxSize(), - ) { - CircularProgressIndicator() - } + PlaceholderUI(newIconsInfoModel.iconCount != 0) } } } diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml deleted file mode 100644 index 72a16c0059c..00000000000 --- a/app/src/main/res/values-en-rUS/strings.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - Version %s - - - - - Pick an icon - - Search - - %s not found - - About - - - - Icon request form - - - Contributors - - Core contributors - - See all contributors - - View on GitHub - - Share details - - Core app - Icons - Infrastructure - - - Special thanks - - For inspiring the app icon - - For naming the app - - Open-source licenses - - - Name - - Drawable - - Component name - - Mapped components - - If the icon is outdated due to rebranding, create an issue on GitHub. - - Toggle visibility of contents - - Request icons - Copy to clipboard - Copied text - - Request missing icons from the bottom bar - Copied icon request details to clipboard. To request them, submit the details into the form. - Open form - Clear - New icons in v%1$s - New icons (%1$s) - diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index 66b1089230a..d51108c8950 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -33,7 +33,8 @@ object AppfilterDiffCreator { if (fetchProcess.waitFor() != 0) { throw RuntimeException("Failed to execute $fetchCommand: $output") } else { - val describeCommand = listOf("git", "describe", "--tags", "--abbrev=0") + val describeCommand = + listOf("git", "describe", "--tags", "--abbrev=0", "--start=main") val describeProcess = ProcessBuilder(describeCommand) .redirectErrorStream(true) .start() @@ -99,9 +100,10 @@ object AppfilterDiffCreator { resDir: String, appFilterFile: String, ) { - val mainLines = readFileContents(appFilterFile) - val developLines = getPreviousReleaseLines(appFilterFile) - val diff = getLineDiff(mainLines, developLines) + val diff = getLineDiff( + getPreviousReleaseLines(appFilterFile), + readFileContents(appFilterFile), + ) writeDiffToFile(diff, resDir) } From c4864d7d10913a9d76ca1f433396ab6b6393eb73 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sat, 14 Sep 2024 20:56:32 +0800 Subject: [PATCH 353/527] Fix build --- .../lawnicons/helper/AppfilterDiffCreator.kt | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt index d51108c8950..1e49e4d3a24 100644 --- a/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt +++ b/svg-processor/src/main/kotlin/app/lawnchair/lawnicons/helper/AppfilterDiffCreator.kt @@ -25,36 +25,43 @@ object AppfilterDiffCreator { appFilterFile: String, ): List { return try { - val fetchCommand = listOf("git", "fetch", "--tags") - val fetchProcess = ProcessBuilder(fetchCommand) + runGitCommand(listOf("fetch", "--tags")) + + val tagCommand = + listOf("/usr/bin/bash", "-c", "git tag --sort=-creatordate | head -n 1") + val tagProcess = ProcessBuilder(tagCommand) .redirectErrorStream(true) .start() - val output = fetchProcess.inputStream.bufferedReader().readText() - if (fetchProcess.waitFor() != 0) { - throw RuntimeException("Failed to execute $fetchCommand: $output") - } else { - val describeCommand = - listOf("git", "describe", "--tags", "--abbrev=0", "--start=main") - val describeProcess = ProcessBuilder(describeCommand) - .redirectErrorStream(true) - .start() - - val latestTag = describeProcess.inputStream.bufferedReader().readLine() - if (describeProcess.waitFor() != 0) { - throw RuntimeException("Failed to get latest tag: $latestTag") - } - - val showCommand = listOf("git", "show", "$latestTag:$appFilterFile") - val process = ProcessBuilder(showCommand) - .redirectErrorStream(true) - .start() - - val result = process.inputStream.bufferedReader().readLines() - if (process.waitFor() != 0) { - throw RuntimeException("Failed to execute $showCommand: $result") - } - result + + val latestTag = tagProcess.inputStream.bufferedReader().readLine() + if (tagProcess.waitFor() != 0) { + throw RuntimeException("Failed to get latest tag") } + + runGitCommand(listOf("show", "$latestTag:$appFilterFile")) + } catch (e: Exception) { + println(e) + listOf() + } + } + + private fun runGitCommand( + args: List, + ): List { + return try { + val command = listOf("git") + args + + val process = ProcessBuilder(command) + .redirectErrorStream(true) + .start() + + val result = process.inputStream.bufferedReader().readLines() + if (process.waitFor() != 0) { + throw RuntimeException("Failed to execute $command: $result") + } + println("task git $args completed") + + result } catch (e: Exception) { println(e) listOf() From 5ce61c7a8790b8110d8228bd755cdf98ac8b4144 Mon Sep 17 00:00:00 2001 From: thismoon <107642606+thismoon@users.noreply.github.com> Date: Sat, 14 Sep 2024 19:27:35 +0100 Subject: [PATCH 354/527] +1 update (#2333) Co-authored-by: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> --- svgs/youtube_revanced.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svgs/youtube_revanced.svg b/svgs/youtube_revanced.svg index 9b1d1a3c911..43d1694aee1 100644 --- a/svgs/youtube_revanced.svg +++ b/svgs/youtube_revanced.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 0f35113eff1ef29da72b20dfcda25c306955d910 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 14 Sep 2024 22:10:23 +0300 Subject: [PATCH 355/527] Triple J update, +4 links (#2334) --- app/assets/appfilter.xml | 6 +++++- svgs/lawnicons.svg | 2 +- svgs/triple_j.svg | 1 + svgs/triplej.svg | 1 - 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 svgs/triple_j.svg delete mode 100644 svgs/triplej.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5923fea3693..632add8d006 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -674,6 +674,7 @@ + @@ -6215,6 +6216,7 @@ + @@ -7891,6 +7893,7 @@ + @@ -8781,6 +8784,7 @@ + @@ -11098,7 +11102,7 @@ - + diff --git a/svgs/lawnicons.svg b/svgs/lawnicons.svg index 1a5943746ba..9724db462f0 100644 --- a/svgs/lawnicons.svg +++ b/svgs/lawnicons.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/svgs/triple_j.svg b/svgs/triple_j.svg new file mode 100644 index 00000000000..f626dbdb2f9 --- /dev/null +++ b/svgs/triple_j.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/triplej.svg b/svgs/triplej.svg deleted file mode 100644 index 8339e149086..00000000000 --- a/svgs/triplej.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From aee22ea726d53ff2b3a90e8177af39b7827a99aa Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sat, 14 Sep 2024 22:53:17 +0300 Subject: [PATCH 356/527] Update for the app linking issue (#2335) --- .github/ISSUE_TEMPLATE/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 214528c627e..854b48d3a63 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: false contact_links: - - name: Link apps to existing icons + - name: Link apps to identical icons url: https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md#adding-an-icon-to-lawnicons - about: Learn more about linking an app to an existing icon and making a PR to contribute to Lawnicons. + about: Learn more about linking an app to an existing icon via a pull request. - name: Icon Request url: https://forms.gle/xt7sJhgWEasuo9TR9 about: Please request your icons in this form. From 82e3f0a5506d13742ab8e5e2b152f83016b3a148 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Sun, 15 Sep 2024 09:12:36 +0300 Subject: [PATCH 357/527] Simplifying the icon addition template (#2338) * Simplifying the icon addition template * Update icon_checklist.md * Update icon_checklist.md --- .github/PULL_REQUEST_TEMPLATE/icon_addition.md | 4 ---- .github/icon_checklist.md | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/icon_addition.md b/.github/PULL_REQUEST_TEMPLATE/icon_addition.md index 96e084139cb..e81dab26ed2 100644 --- a/.github/PULL_REQUEST_TEMPLATE/icon_addition.md +++ b/.github/PULL_REQUEST_TEMPLATE/icon_addition.md @@ -17,7 +17,3 @@ App Name (`com.package.app` → `drawable.svg`) App Name (`com.package.app`) App Name (`com.package.app`) - -## Contributor's checklist -- [ ] I followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and will make changes if someone suggests. I will also make sure that Lawnicons builds correctly. - diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 2162f28c151..9e6686dc4b2 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -1,5 +1,7 @@ Thanks for your contribution! +We hope that you followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and make sure that Lawnicons builds correctly. + While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. We try to do the review within 7 days. ### Canvas and sizes From e8b1190588e14df2cb80065339be5d9c8a5f31b8 Mon Sep 17 00:00:00 2001 From: Ofir Levitan Date: Sun, 15 Sep 2024 23:10:04 +0300 Subject: [PATCH 358/527] +1 icon (#2339) * add onezero icon * revert * Drawable name fix * Icon fix --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 1 + svgs/one_zero.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 svgs/one_zero.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 632add8d006..ba01e19b352 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -7202,6 +7202,7 @@ + diff --git a/svgs/one_zero.svg b/svgs/one_zero.svg new file mode 100644 index 00000000000..dca1ae1ea09 --- /dev/null +++ b/svgs/one_zero.svg @@ -0,0 +1 @@ + From 7dc2356003fa0541f7fab4f6007c7064f3dc47ef Mon Sep 17 00:00:00 2001 From: Goooler Date: Mon, 16 Sep 2024 08:15:28 +0800 Subject: [PATCH 359/527] Tweak release signing config --- app/build.gradle.kts | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4485db657eb..349c0b3fc72 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,7 +1,6 @@ import app.cash.licensee.LicenseeTask import com.android.build.gradle.internal.api.ApkVariantOutputImpl import com.android.build.gradle.tasks.MergeResources -import java.io.FileInputStream import java.util.Locale import java.util.Properties @@ -42,24 +41,23 @@ android { vectorDrawables.useSupportLibrary = true } - val keystorePropertiesFile = rootProject.file("keystore.properties") - val releaseSigning = if (keystorePropertiesFile.exists()) { + androidResources { + generateLocaleConfig = true + } + + val releaseSigning = try { val keystoreProperties = Properties() - keystoreProperties.load(FileInputStream(keystorePropertiesFile)) + keystoreProperties.load(rootProject.file("keystore.properties").inputStream()) signingConfigs.create("release") { keyAlias = keystoreProperties["keyAlias"].toString() keyPassword = keystoreProperties["keyPassword"].toString() storeFile = rootProject.file(keystoreProperties["storeFile"].toString()) storePassword = keystoreProperties["storePassword"].toString() } - } else { + } catch (ignored: Exception) { signingConfigs["debug"] } - androidResources { - generateLocaleConfig = true - } - buildTypes { all { signingConfig = releaseSigning From e7776654faa04900387fe3c01377741d0f136fa7 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:19:10 +0300 Subject: [PATCH 360/527] Minor fix to the self-review list (#2341) * Minor fix to the self-review list * Update icon_checklist.md --- .github/icon_checklist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index 9e6686dc4b2..d604781009e 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -1,6 +1,6 @@ Thanks for your contribution! -We hope that you followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and make sure that Lawnicons builds correctly. +We hope that you followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and made sure that Lawnicons is built correctly. While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. We try to do the review within 7 days. From 52e61b377ac091e6747857a80bff5d641ea334e4 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:05:58 +0300 Subject: [PATCH 361/527] T2 update, +18 links (#2343) --- app/assets/appfilter.xml | 24 +++++++++++++++++++++--- svgs/{godot.svg => godot_editor_4.svg} | 0 svgs/{govbr.svg => gov_br.svg} | 0 svgs/t2.svg | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) rename svgs/{godot.svg => godot_editor_4.svg} (100%) rename svgs/{govbr.svg => gov_br.svg} (100%) create mode 100644 svgs/t2.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index ba01e19b352..5332fde069c 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -823,6 +823,7 @@ + @@ -1376,6 +1377,7 @@ + @@ -1914,6 +1916,7 @@ + @@ -2696,6 +2699,7 @@ + @@ -3676,6 +3680,7 @@ + @@ -3934,6 +3939,7 @@ + @@ -3982,7 +3988,8 @@ - + + @@ -4175,7 +4182,8 @@ - + + @@ -4193,6 +4201,7 @@ + @@ -4271,6 +4280,7 @@ + @@ -4465,6 +4475,7 @@ + @@ -4909,6 +4920,7 @@ + @@ -5854,6 +5866,7 @@ + @@ -7445,6 +7458,7 @@ + @@ -8084,6 +8098,7 @@ + @@ -9206,6 +9221,7 @@ + @@ -10354,6 +10370,7 @@ + @@ -10465,12 +10482,12 @@ - + @@ -11271,6 +11288,7 @@ + diff --git a/svgs/godot.svg b/svgs/godot_editor_4.svg similarity index 100% rename from svgs/godot.svg rename to svgs/godot_editor_4.svg diff --git a/svgs/govbr.svg b/svgs/gov_br.svg similarity index 100% rename from svgs/govbr.svg rename to svgs/gov_br.svg diff --git a/svgs/t2.svg b/svgs/t2.svg new file mode 100644 index 00000000000..ae7dfd3e2f7 --- /dev/null +++ b/svgs/t2.svg @@ -0,0 +1 @@ + \ No newline at end of file From d13ea9bbfbacfe53311aea8af8aa4d7e88a6c8f0 Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Tue, 17 Sep 2024 21:26:17 +0300 Subject: [PATCH 362/527] Easter Egg update, +8 links (#2345) --- app/assets/appfilter.xml | 8 ++++++++ svgs/easter_eggs.svg | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 5332fde069c..9fd1c1cf5e8 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -1353,6 +1353,7 @@ + @@ -1470,6 +1471,7 @@ + @@ -3041,6 +3043,7 @@ + @@ -5984,6 +5987,7 @@ + @@ -7874,6 +7878,7 @@ + @@ -8218,6 +8223,7 @@ + @@ -10242,6 +10248,7 @@ + @@ -12865,6 +12872,7 @@ + diff --git a/svgs/easter_eggs.svg b/svgs/easter_eggs.svg index e35eddd50ef..968bcd0d420 100644 --- a/svgs/easter_eggs.svg +++ b/svgs/easter_eggs.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 298754a825c95cf0f60391c79ffb16cae57cd70e Mon Sep 17 00:00:00 2001 From: Gleb <60105060+x9136@users.noreply.github.com> Date: Wed, 18 Sep 2024 00:18:04 +0300 Subject: [PATCH 363/527] Small changes of the Lawnicons docs (#2346) * Small changes of the Lawnicons docs * Update icon_checklist.md * Update README.md --- .github/icon_checklist.md | 2 +- README.md | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/icon_checklist.md b/.github/icon_checklist.md index d604781009e..420645be533 100644 --- a/.github/icon_checklist.md +++ b/.github/icon_checklist.md @@ -2,7 +2,7 @@ Thanks for your contribution! We hope that you followed [the Lawnicons guidelines](https://github.com/LawnchairLauncher/lawnicons/blob/develop/CONTRIBUTING.md) and made sure that Lawnicons is built correctly. -While waiting for a review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. We try to do the review within 7 days. +While waiting for a brief review from our team, you can do a self-review to ensure that your icons are suitable for Lawnicons. ### Canvas and sizes 1. Canvas: `192×192px`. diff --git a/README.md b/README.md index 5942602f418..89209b9b429 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,8 @@ See [the Releases section](https://github.com/LawnchairLauncher/lawnicons/releas ## Contributing Please see [the Lawnicons guidelines](CONTRIBUTING.md) for information on contributing icons or code, it will save you time. +Designers who have studied our guidelines can fulfill [the popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). Android developers can find tasks [in our issues](https://github.com/LawnchairLauncher/lawnicons/issues). -Anyone who is interested in making icons can fulfill [the popular icon requests](https://docs.google.com/spreadsheets/d/1AXc9EDXA6udZeGROtB5nuABjM33VluGY_V24tIzHaKc/edit?resourcekey#gid=651079103). - -Need help? [Join us on Discord](https://discord.gg/3x8qNWxgGZ). ## Requesting icons Please use **Lawnicons 2.10+**: `Open Lawnicons → Tap "Request icons" → Submit the response`. From d9a616c9fb5d33155fffda70de837725d309f502 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:02:17 +0800 Subject: [PATCH 364/527] Update AGP (#2347) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- svg-processor/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6522fc06524..d7c3c2bb4db 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep plugins { - id("com.android.application") version "8.6.0" apply false + id("com.android.application") version "8.6.1" apply false id("org.jetbrains.kotlin.android") version "2.0.20" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false diff --git a/svg-processor/build.gradle.kts b/svg-processor/build.gradle.kts index 83eaaf8b79a..3be504e8e2e 100644 --- a/svg-processor/build.gradle.kts +++ b/svg-processor/build.gradle.kts @@ -8,7 +8,7 @@ application { } dependencies { - implementation("com.android.tools:sdk-common:31.6.0") + implementation("com.android.tools:sdk-common:31.6.1") implementation("org.dom4j:dom4j:2.1.4") implementation("commons-io:commons-io:2.16.1") } From add153709ea5439d19444cd3f61bbf24431800bd Mon Sep 17 00:00:00 2001 From: "Ahmed A. Khalifa" Date: Wed, 18 Sep 2024 09:43:03 +0300 Subject: [PATCH 365/527] +7 icons, Updated 3, Linked 1 (#2340) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Icon size reduction Reduced the size of 3 icons from 50KB to ~2KB. almanea.svg hungerstation.svg mada_pay.svg * +7 icons * 150X Duplicate Remover Pro (`com.nutuvamapp.onefivexduplicatexapp/com.nutuvamapp.onefivexduplicatexapp.activity.SplashActivity`) * AlDawaa Pharmacies (`com.kr.aldawaa/com.kr.aldawaa.view.SplashActivity`) * مطاعم الرومانسية (`com.tech_world.romansia/com.tech_world.romansia.ui.splash.SplashActivity`) * AlinmaPay E Wallet (`com.alinma.pay.consumer/com.alinma.pay.consumer.MainActivity`) * barq (`sa.com.barraq/com.globalfinancingsolutions.ui.splash.SplashActivity`) * BCare (`com.app.bcare/com.nqdi.app.MainActivity`) * Core | Crypto Wallet and NFTs (`com.avaxwallet/com.avaxwallet.MainActivity`) * Linked 1 icon * Made some modifications required. * Update appfilter.xml, al_dawaa.svg, al_romansiah.svg, and 2 more files Changed the stroke width to 10px for alinmapay.svg * Updated the icons requested. * Update bcare.svg * Update alinmapay.svg * Update al_dawaa.svg * Update al_dawaa.svg * Update bcare.svg --------- Co-authored-by: Gleb <60105060+x9136@users.noreply.github.com> --- app/assets/appfilter.xml | 8 + svgs/_150x_duplicate_file_remover_pro.svg | 3 + svgs/al_dawaa.svg | 1 + svgs/al_romansiah.svg | 3 + svgs/alinmapay.svg | 1 + svgs/almanea.svg | 2210 +------------------- svgs/barq.svg | 3 + svgs/bcare.svg | 1 + svgs/core.svg | 8 + svgs/hungerstation.svg | 2211 +-------------------- svgs/mada_pay.svg | 2211 +-------------------- 11 files changed, 38 insertions(+), 6622 deletions(-) create mode 100644 svgs/_150x_duplicate_file_remover_pro.svg create mode 100644 svgs/al_dawaa.svg create mode 100644 svgs/al_romansiah.svg create mode 100644 svgs/alinmapay.svg create mode 100644 svgs/barq.svg create mode 100644 svgs/bcare.svg create mode 100644 svgs/core.svg diff --git a/app/assets/appfilter.xml b/app/assets/appfilter.xml index 9fd1c1cf5e8..bd300c1726b 100644 --- a/app/assets/appfilter.xml +++ b/app/assets/appfilter.xml @@ -50,6 +50,7 @@ + @@ -338,6 +339,7 @@ + @@ -913,6 +915,7 @@ + @@ -2033,6 +2036,7 @@ + @@ -2363,6 +2367,7 @@ + @@ -12658,6 +12663,7 @@ + @@ -12674,9 +12680,11 @@ + + diff --git a/svgs/_150x_duplicate_file_remover_pro.svg b/svgs/_150x_duplicate_file_remover_pro.svg new file mode 100644 index 00000000000..0b1255b86a7 --- /dev/null +++ b/svgs/_150x_duplicate_file_remover_pro.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/al_dawaa.svg b/svgs/al_dawaa.svg new file mode 100644 index 00000000000..5f59848e547 --- /dev/null +++ b/svgs/al_dawaa.svg @@ -0,0 +1 @@ + diff --git a/svgs/al_romansiah.svg b/svgs/al_romansiah.svg new file mode 100644 index 00000000000..ac26159446b --- /dev/null +++ b/svgs/al_romansiah.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/alinmapay.svg b/svgs/alinmapay.svg new file mode 100644 index 00000000000..0307feb30ca --- /dev/null +++ b/svgs/alinmapay.svg @@ -0,0 +1 @@ + diff --git a/svgs/almanea.svg b/svgs/almanea.svg index a7a497599e8..87e2ef7292b 100644 --- a/svgs/almanea.svg +++ b/svgs/almanea.svg @@ -1,2207 +1,3 @@ - - - - + + + diff --git a/svgs/barq.svg b/svgs/barq.svg new file mode 100644 index 00000000000..3d125136079 --- /dev/null +++ b/svgs/barq.svg @@ -0,0 +1,3 @@ + + + diff --git a/svgs/bcare.svg b/svgs/bcare.svg new file mode 100644 index 00000000000..453c877563f --- /dev/null +++ b/svgs/bcare.svg @@ -0,0 +1 @@ + diff --git a/svgs/core.svg b/svgs/core.svg new file mode 100644 index 00000000000..1519a26d2c0 --- /dev/null +++ b/svgs/core.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/svgs/hungerstation.svg b/svgs/hungerstation.svg index 35e95367b3e..b7ee39ea1ac 100644 --- a/svgs/hungerstation.svg +++ b/svgs/hungerstation.svg @@ -1,2208 +1,3 @@ - - - - + + + diff --git a/svgs/mada_pay.svg b/svgs/mada_pay.svg index 6c4ca62858b..5d02437bcbe 100644 --- a/svgs/mada_pay.svg +++ b/svgs/mada_pay.svg @@ -1,2207 +1,4 @@ - - - - + + + + From 8d6b60b5ad1e3d0d012a45aa27087d98f8d6a585 Mon Sep 17 00:00:00 2001 From: Hamish <133548095+Hamster45105@users.noreply.github.com> Date: Wed, 18 Sep 2024 21:37:42 +1000 Subject: [PATCH 366/527] Add Nightly Releases (#2267) * Add support for nightly releases * Add Google Play badge * Simplify recommendation to use Lawnchair * Add release.yml * Update release headings wording * Simplify README download section * Reword Lawnchair version recommendation * Revert some changes * Add final newline to release.yml * Formatting updates * Simplify README download section (again) * Simplify README download section (last time for real) --- .github/release.yml | 14 ++++++++++++++ .github/workflows/build_debug_apk.yml | 24 ++++++++++++++++++++++++ README.md | 25 ++++++++++++++++++++----- 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 .github/release.yml diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000000..6d1afe45003 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,14 @@ +changelog: + categories: + - title: 📱 New Icons & Links + labels: + - icons + - title: 🧹 Code + labels: + - code + exclude: + labels: + - dependencies + - title: 🧑‍💻 Dependencies + labels: + - dependencies diff --git a/.github/workflows/build_debug_apk.yml b/.github/workflows/build_debug_apk.yml index 23f1856941b..77bd320cb55 100644 --- a/.github/workflows/build_debug_apk.yml +++ b/.github/workflows/build_debug_apk.yml @@ -85,3 +85,27 @@ jobs: ARTIFACT_DIRECTORY: artifacts/debug-apk GITHUB_REF: ${{ github.ref }} DISCORD_CI_BOT_TOKEN: ${{ secrets.DISCORD_CI_BOT_TOKEN}} + + nightly-release: + runs-on: ubuntu-latest + if: github.repository_owner == 'LawnchairLauncher' && github.event_name == 'push' + needs: build-debug-apk + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: Debug APK + path: artifacts/debug-apk + - name: Export APK_NAME for later use + run: echo "APK_NAME=Lawnicons.Debug.${{ github.ref_name }}.Nightly-CI_${{ github.run_number }}-$(echo ${{ github.sha }} | cut -c1-7).apk" >> $GITHUB_ENV + - name: Rename .apk file + run: | + mv artifacts/debug-apk/*.apk $APK_NAME + - name: Delete release if exist then create release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release view "nightly" && gh release delete "nightly" -y --cleanup-tag + gh release create "nightly" "$APK_NAME" -p -t "Lawnicons Nightly" --generate-notes diff --git a/README.md b/README.md index 89209b9b429..1a44311b94a 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,28 @@ **Lawnicons** is an icon pack developed by the Lawnchair team and supported by our community. Originally an addon for Lawnchair 12 Alpha 5 and above to implement themed icons, it can now be used on many launchers. -Lawnicons is best used [on Lawnchair 12.1 or Lawnchair 14 Beta 2](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style → Themed Icons → "Home screen" or "Home screen and App Drawer"`. +Lawnicons is best used [on the latest version of Lawnchair](https://github.com/LawnchairLauncher/lawnchair/releases). You can enable themed icons on Lawnchair by going to `Home Settings → General → Icon Style → Themed Icons → "Home screen" or "Home screen and App Drawer"`. ## Download -See [the Releases section](https://github.com/LawnchairLauncher/lawnicons/releases) for the latest stable build. For development builds with new icons, go to [nightly.link](https://nightly.link/LawnchairLauncher/lawnicons/workflows/build_debug_apk/develop/Debug%20APK). + +