Compare commits

...

343 Commits
5.0.6 ... main

Author SHA1 Message Date
Tibor Kaputa 77088de585
Merge pull request #161 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-10-14 21:27:01 +02:00
Tibor Kaputa ce4137500f
Update strings.xml 2023-10-14 21:26:52 +02:00
Tibor Kaputa b25d42e806
Update video.txt 2023-10-14 21:26:36 +02:00
Tibor Kaputa 99b572a73f
Update video.txt 2023-10-14 21:26:28 +02:00
Eric e4343706ea
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/zh_Hans/
2023-10-13 16:56:47 +02:00
Eric b2cebd9b85
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/zh_Hans/
2023-10-13 02:44:53 +02:00
VfBFan e22f1f6881
Translated using Weblate (German)
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/de/
2023-10-10 09:16:59 +02:00
Puppelimies 0a0f116cd0
Translated using Weblate (Swedish)
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/sv/
2023-10-10 09:16:59 +02:00
Puppelimies 454566a288
Translated using Weblate (Swedish)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/sv/
2023-10-10 09:16:59 +02:00
Tibor Kaputa 4af01ae1f1
updating the f-droid icon 2023-10-05 09:16:34 +02:00
Tibor Kaputa 1e9c0e64a5
Merge pull request #153 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-10-05 08:11:31 +02:00
Milo Ivir 1518e9ea5f
Translated using Weblate (Croatian)
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/hr/
2023-10-05 00:11:44 +02:00
winver 2d5def9b95
Translated using Weblate (Russian)
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/ru/
2023-10-01 23:36:09 +02:00
Josep M. Ferrer 75e3d424a5
Translated using Weblate (Catalan)
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/ca/
2023-09-30 17:12:10 +02:00
winver ee6568d62a
Translated using Weblate (Russian)
Currently translated at 92.3% (12 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/ru/
2023-09-30 03:53:49 +02:00
Agnieszka C 23f7b0e7aa
Translated using Weblate (Polish)
Currently translated at 100.0% (13 of 13 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/pl/
2023-09-30 03:53:49 +02:00
tibbi f9d82dcac8 syncing google play with fastlane 2023-09-28 23:53:24 +02:00
Tibor Kaputa 5dab74e00b
Merge pull request #151 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-09-28 23:12:08 +02:00
gallegonovato 85c7c4a10f
Translated using Weblate (Spanish)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/es/
2023-09-27 13:00:31 +00:00
Tibor Kaputa 8bdbae498e
Merge pull request #148 from esensar/fix/147-widgets-stealing-touches
Ensure HomeScreenGrid steals touches from widgets when folder is open
2023-09-27 09:04:37 +02:00
Ensar Sarajčić a091f4ff4c Ensure HomeScreenGrid steals touches from widgets when folder is open
This closes #147
2023-09-26 10:39:50 +02:00
tibbi 6038aac349 updating changelog 2023-09-23 18:12:35 +02:00
tibbi 44668e15c0 update version to 5.1.1 2023-09-23 18:12:18 +02:00
tibbi 2b5074bdec updating commons 2023-09-23 18:12:12 +02:00
Tibor Kaputa d69cb4e3ea
Merge pull request #145 from esensar/fix/remove-out-of-bound-widgets
Remove widgets that are out of bounds if they are blocking dropped icon
2023-09-23 18:03:49 +02:00
Ensar Sarajčić 9e9d305158 Delete out of bounds widgets even when placing other widgets or resizing them 2023-09-22 14:00:02 +02:00
Ensar Sarajčić 200109e527 Remove widgets that are out of bounds if they are blocking dropped icon 2023-09-22 13:27:26 +02:00
Tibor Kaputa 2349fa019c
Merge pull request #144 from esensar/fix/row-change-crash
Prevent crash when calculating top left of docked items
2023-09-22 12:42:10 +02:00
Ensar Sarajčić a26c29cd89 Prevent crash when calculating top left of docked items 2023-09-22 12:37:39 +02:00
Tibor Kaputa bb90255e34
Merge pull request #142 from esensar/fix/shortcut-pin-crash
Do a check for shortcut host permissions before pinning a shortcut
2023-09-22 11:46:56 +02:00
Tibor Kaputa d383f371e5
Merge pull request #143 from esensar/fix/widget-grid-resize-crash
Prevent crashes when dragging widgets after resizing grid
2023-09-22 11:40:04 +02:00
Ensar Sarajčić 9e24c7c37d Prevent crashes when dragging widgets after resizing grid
If grid is resized to a size too small to fit a widget, it should not be displayed.
It was still possible to drag it in some situations, causing a crash, since it can
not fit the screen.
2023-09-22 11:28:35 +02:00
Ensar Sarajčić 545c424bd5 Do a check for shortcut host permissions before pinning a shortcut 2023-09-22 10:45:51 +02:00
Tibor Kaputa 2614be4f42
Merge pull request #141 from esensar/fix/139-widgets-scrolling
Fix scrolling on widgets on home screen
2023-09-22 10:17:46 +02:00
Ensar Sarajčić 149ea23fa5 Fix scrolling on widgets on home screen
This closes #139
2023-09-22 09:55:10 +02:00
Tibor Kaputa aa6a7cd31a
Merge pull request #138 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-09-22 09:23:27 +02:00
Tibor Kaputa e2954c68a9
Update title.txt 2023-09-22 09:23:16 +02:00
gallegonovato 23f191e70a
Translated using Weblate (Spanish)
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/es/
2023-09-22 07:22:59 +00:00
Peter Dave Hello 26fdc7c590
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/zh_Hant/
2023-09-22 07:22:59 +00:00
gallegonovato a9553b6a3c
Translated using Weblate (Spanish)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/es/
2023-09-22 07:22:58 +00:00
Tibor Kaputa 7b1b083f7f
Merge pull request #140 from esensar/fix/crashes
Fix various crashes and general issues
2023-09-22 09:22:50 +02:00
Ensar Sarajčić 681e50993f Prevent mutating drawables for items in app drawer 2023-09-21 16:03:26 +02:00
Ensar Sarajčić 78d9459e9a Add some accessibility improvements 2023-09-21 15:55:26 +02:00
Ensar Sarajčić 0a239b1d06 Prevent calculating folder centers when there are no items 2023-09-21 15:07:14 +02:00
Ensar Sarajčić 28e0f2d59f Prevent crash if WidgetsAdapter is not ready when configuration changes 2023-09-21 14:50:13 +02:00
Ensar Sarajčić 65ace16fbf Ensure shifting happens only after folder has been properly saved
This fixes #130
2023-09-21 14:24:20 +02:00
Ensar Sarajčić f8fccf9444 Properly shift folder items when removing items from folder 2023-09-21 14:01:50 +02:00
Ensar Sarajčić 571f1c1af4 Filter only visible items for accessibility helper 2023-09-21 13:58:28 +02:00
Ensar Sarajčić e70a476198 Duplicate drawable before drawing it for folder drawable
This fixes #130 - the issue with smaller icons in drawer
2023-09-21 13:58:22 +02:00
Ensar Sarajčić d9a9c70be8 Allow drawing items before drawables are loaded 2023-09-21 13:37:22 +02:00
Ensar Sarajčić c8fc80e037 Allow swiping over widgets 2023-09-21 13:08:15 +02:00
Ensar Sarajčić e2367dd5a9 Copy grid items before iterating to prevent concurrent modification 2023-09-21 12:53:29 +02:00
Ensar Sarajčić d9e333ddb0 Only consider top level items when finding first empty cell 2023-09-21 12:52:21 +02:00
Ensar Sarajčić 4f5fda2c52 Prevent crash due to missing drawable 2023-09-21 12:28:44 +02:00
Ensar Sarajčić 924521c405 Remove needless comment from HomeScreenGrid 2023-09-21 12:16:24 +02:00
Ensar Sarajčić b15673b8a2 Pin shortcuts only on successful accept 2023-09-21 12:16:14 +02:00
Ensar Sarajčić 6766e46c37 Prevent generating drawables for empty folders 2023-09-21 12:03:19 +02:00
Tibor Kaputa f46b6fcc2c
Merge pull request #136 from esensar/fix/132-empty-shortcut-labels
Check both short and long label for shortcuts
2023-09-21 11:40:06 +02:00
Tibor Kaputa 24f3132641
Merge pull request #137 from esensar/fix/133-widgets-flicker
Prevent widgets flicker by skipping the last update in animation
2023-09-21 11:14:10 +02:00
Tibor Kaputa f5d4949728
Merge pull request #135 from esensar/fix/131-folder-widget-overlap
Draw home screen grid over widgets
2023-09-21 11:13:25 +02:00
Ensar Sarajčić 887cce5e67 Prevent widgets flicker by skipping the last update in animation
This closes #133
2023-09-21 11:04:40 +02:00
Ensar Sarajčić d50d5702ba Check both short and long label for shortcuts
This closes #132
2023-09-21 10:17:31 +02:00
Ensar Sarajčić 988c3148ac Draw home screen grid over widgets
This closes #131
2023-09-21 10:09:40 +02:00
Tibor Kaputa 6e9d8686bf
Merge pull request #134 from esensar/fix/129-widget-placing-issue
Prevent widgets overlap with items from other pages
2023-09-21 09:59:28 +02:00
Ensar Sarajčić 8b6a6fd948 Prevent widgets overlap with items from other pages
This closes #129
2023-09-21 09:33:58 +02:00
tibbi 222cca23f9 updating changelog 2023-09-19 19:03:17 +02:00
tibbi 8991cb54f8 update version to 5.1.0 2023-09-19 19:03:10 +02:00
tibbi ed92e1c9d2 updating commons 2023-09-19 17:54:06 +02:00
Tibor Kaputa 43b016fa2d
Merge pull request #128 from esensar/fix/scroll-performance
Convert all drawables into bitmap drawables for faster loading
2023-09-17 18:06:29 +02:00
Ensar Sarajčić 44674ef47f Convert all drawables into bitmap drawables for faster loading 2023-09-14 13:58:15 +02:00
Tibor Kaputa 9e9aae015a
Merge pull request #127 from esensar/gradle-deprecation-warnings
Clean up gradle deprecation warnings
2023-09-13 14:39:22 +02:00
Ensar Sarajčić ebb08d420c Clean up gradle deprecation warnings 2023-09-13 13:51:45 +02:00
Tibor Kaputa 02b249e5a8
Merge pull request #125 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-09-13 11:03:59 +02:00
Tibor Kaputa 248159fa84
Update strings.xml 2023-09-13 11:03:40 +02:00
Goran Gharib Karim 16225b2b68
Translated using Weblate (Kurdish (Central))
Currently translated at 93.3% (14 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ckb/
2023-09-13 11:02:20 +02:00
Goran Gharib Karim 189b459cb2
Added translation using Weblate (Kurdish (Central)) 2023-09-13 11:02:20 +02:00
Tibor Kaputa a1a960428a
Merge pull request #123 from esensar/fix/popup-menu-you-colors
Fix popup menu colors when MaterialColors returns -1
2023-09-13 11:02:15 +02:00
Tibor Kaputa 9f951ea3bc
Merge pull request #126 from esensar/fix/status-bar-icon-colors
Properly update status bar icon colors when opening all apps and widgets drawers
2023-09-13 10:54:15 +02:00
Ensar Sarajčić 92decdd66d Properly update status bar icon colors when opening all apps and widgets drawers 2023-09-12 14:13:47 +02:00
Tibor Kaputa 1c0a559517
Merge pull request #124 from esensar/fix/keyboard-close-on-home
Close keyboard when home button is pressed
2023-09-11 21:53:36 +02:00
Tibor Kaputa 2f6e0aaf53
adding a new line 2023-09-11 21:53:17 +02:00
Ensar Sarajčić afa46e76bf Clear search when home button is pressed 2023-09-11 17:10:33 +02:00
Ensar Sarajčić 91c8664ca1 Close keyboard when home button is pressed 2023-09-11 17:08:43 +02:00
Ensar Sarajčić 9159ecbd44 Use different strategies for MaterialYou and regular themes for popup icon colors 2023-09-11 17:01:13 +02:00
Ensar Sarajčić 677b4083d8 Fix popup menu colors when MaterialColors returns -1 2023-09-11 15:17:24 +02:00
Tibor Kaputa 8202e5dde7
Merge pull request #122 from esensar/feature/49-app-shortcuts
Add support for app shortcuts
2023-09-11 14:48:53 +02:00
Ensar Sarajčić ab8164ccdc Use long labels for shortcuts instead of short ones 2023-09-11 13:36:24 +02:00
Tibor Kaputa 5b2bd753b8
Merge pull request #120 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-09-11 12:42:27 +02:00
Ensar Sarajčić 1698c18d7c Add support for app shortcuts
This closes #49
2023-09-11 12:19:52 +02:00
Sergio Marques 9c30c8c12b
Translated using Weblate (Portuguese)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/pt/
2023-09-10 16:55:20 +02:00
Tibor Kaputa 13d91a5c3d
Merge pull request #119 from esensar/delete-empty-pages
Remove empty home screen pages after moving or deleting items
2023-09-07 16:17:25 +02:00
Ensar Sarajčić 63a61dfb2d Remove empty home screen pages after moving or deleting items 2023-09-07 14:20:38 +02:00
Tibor Kaputa 60a4c31a88
Merge pull request #118 from esensar/sdk-34-widgets-creation
Reduce target SDK to 33
2023-09-06 16:38:42 +02:00
Ensar Sarajčić 017d50756d Reduce target SDK to 33
This is done to allow configuring widgets on SDK 34. It seems that
this is not yet fully supported, since SDK 34 is in beta.
System blocks starting widget configuration when target SDK 34, probably
due to https://developer.android.com/about/versions/14/behavior-changes-14#background-activity-restrictions
2023-09-06 12:23:01 +02:00
Tibor Kaputa 8fcbc4cb10
Merge pull request #115 from esensar/fix/floating-menu-icon-colors
Update icon colors in popups to match text color
2023-09-06 10:41:57 +02:00
Ensar Sarajčić 9bfff57405 Always use the same color as text uses in popups 2023-09-06 10:29:38 +02:00
Tibor Kaputa 5218eb17c0
Merge pull request #117 from Usland123/patch-1
Update strings.xml
2023-09-05 23:40:36 +02:00
Tibor Kaputa 8ee21b43a1
Merge pull request #114 from esensar/simple-bounce-on-page-change
Add a simple bounce on page changes
2023-09-04 21:31:39 +02:00
Tibor Kaputa 0ca194a6e6
Merge pull request #116 from esensar/add-schema-storage
Add schema storage
2023-09-04 12:48:33 +02:00
Usland 3c4375634c
Update strings.xml 2023-09-02 20:56:45 +03:00
Ensar Sarajčić 096d9d26c9 Add older schemas too 2023-09-01 10:16:55 +02:00
Ensar Sarajčić 253a157b28 Add room schema location 2023-09-01 09:51:03 +02:00
Ensar Sarajčić 73224b436f Update icon colors in popups to match text color 2023-08-31 11:50:20 +02:00
Ensar Sarajčić 1dc3ee0af4 Fix pageChangeStarted callback 2023-08-31 10:36:19 +02:00
Ensar Sarajčić 7048a4c56f Merge branch 'main' into simple-bounce-on-page-change 2023-08-31 10:35:40 +02:00
Tibor Kaputa f25738a40f
Merge pull request #103 from esensar/feature/folders
Add support for folders on home screen
2023-08-30 16:06:14 +02:00
Ensar Sarajčić b7eecc5663 Add enough gaps between folder items to show item names 2023-08-25 15:40:36 +02:00
Ensar Sarajčić e88eb05e00 Remove needless extra space for folders 2023-08-25 11:14:13 +02:00
Ensar Sarajčić 1fcda210b6 Add vibration on folder items too 2023-08-25 09:46:51 +02:00
Ensar Sarajčić 3f146c7618 Prevent widget long press while changing pages 2023-08-25 09:45:22 +02:00
Ensar Sarajčić 75aeade4af Add a simple bounce on page changes 2023-08-24 16:20:51 +02:00
Ensar Sarajčić e5adb450c2 Fix animation scaling when opening and closing folders 2023-08-24 13:29:23 +02:00
Ensar Sarajčić 6d3b138459 Fix shadow drawing in folders 2023-08-24 13:21:28 +02:00
Ensar Sarajčić 3dd78cc911 Fix folder opening and closing issues 2023-08-24 13:18:46 +02:00
Ensar Sarajčić 1863a9e6a9 Simplify drawing and cells logic 2023-08-24 12:49:13 +02:00
Ensar Sarajčić ece3890133 Merge branch 'main' into feature/folders
Added proper handling of folder closing when swiping pages
2023-08-24 11:04:41 +02:00
Tibor Kaputa 5f67ff94c0
Merge pull request #112 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-08-23 20:42:53 +02:00
J. Lavoie 4ff3dd7e19
Translated using Weblate (Italian)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/it/
2023-08-23 20:42:38 +02:00
J. Lavoie 2dd44a9886
Translated using Weblate (French)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/fr/
2023-08-23 20:42:38 +02:00
Tibor Kaputa a1b459f396
Merge pull request #113 from esensar/improvement/page-swiping
Improve page change behavior
2023-08-23 20:42:31 +02:00
Ensar Sarajčić 3cc00157cc Add folder opening and closing animation 2023-08-23 16:58:30 +02:00
Ensar Sarajčić a34bab78af Prevent flinging while movement on other axis is active 2023-08-23 13:08:25 +02:00
Ensar Sarajčić 6c8800f266 Fix condition for adding swipe movement 2023-08-23 13:08:13 +02:00
Ensar Sarajčić 59975c77f4 Make pager a completely separate class for easier reuse 2023-08-23 12:56:36 +02:00
Ensar Sarajčić 53efffde51 Move page logic into an inner class for better readability 2023-08-23 12:41:07 +02:00
Ensar Sarajčić 8f96073e45 Fix widget drawing during swipes 2023-08-23 12:05:56 +02:00
Ensar Sarajčić d4f55b8e8b Fix returning after partial swipe 2023-08-23 11:32:15 +02:00
Ensar Sarajčić 95cf8c0384 Handle home screen pages dragging 2023-08-23 11:17:45 +02:00
Ensar Sarajčić 7a5c698322 Fix vertical centering of icons in folder icon 2023-08-22 14:45:19 +02:00
Ensar Sarajčić a7ffb6328a Prevent drawing empty folders 2023-08-22 14:43:03 +02:00
Ensar Sarajčić 81dff807b4 Prevent opening folder while dragging it over its old spot 2023-08-22 14:31:57 +02:00
Ensar Sarajčić 516f61fe90 Generate folder icon from icons inside of it 2023-08-22 13:59:21 +02:00
Ensar Sarajčić a5499a58ad Reorder MainActivity 2023-08-22 12:11:41 +02:00
Tibor Kaputa 50f345808c
Merge pull request #110 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-08-22 10:12:04 +02:00
en2sv 06efcfd3fd
Translated using Weblate (Swedish)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/sv/
2023-08-21 21:45:47 +02:00
Ensar Sarajčić cca2ceaab9 Add max capacity for folders 2023-08-21 08:44:46 +02:00
Ensar Sarajčić c83e7a5226 Handle dragging items into folders 2023-08-18 17:17:59 +02:00
Ensar Sarajčić 62686f48c3 Handle moving items inside a folder 2023-08-18 17:09:15 +02:00
Ensar Sarajčić 10603be76b Properly clean up folder items after removing item from folder 2023-08-18 15:57:32 +02:00
Ensar Sarajčić dfe9b04f71 Add titles to folder views 2023-08-18 15:40:47 +02:00
Ensar Sarajčić dc6f263e79 Ensure that folders never go out of bounds 2023-08-18 15:09:56 +02:00
Ensar Sarajčić 55ebb2eb15 Close folder when dragging items outside of it 2023-08-18 14:58:27 +02:00
Ensar Sarajčić 62a3faf8ea Move from folder dialog to custom folder drawing 2023-08-18 14:40:10 +02:00
Ensar Sarajčić c049b41c1a Use property delegates for viewbinding in activities 2023-08-17 17:13:40 +02:00
Ensar Sarajčić b9e55d4934 Merge branch 'main' into feature/folders 2023-08-17 16:43:37 +02:00
Tibor Kaputa 47a92c3b66
Merge pull request #108 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-08-14 13:53:45 +02:00
Tibor Kaputa 810775dfff
updating a slovak string 2023-08-14 13:53:37 +02:00
Milan Šalka e22220fb68
Translated using Weblate (Slovak)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/sk/
2023-08-14 13:52:07 +02:00
Tibor Kaputa 07c26bfd18
Merge pull request #109 from spkprs/main-2
Update strings.xml
2023-08-14 13:52:03 +02:00
spkprs 9374661151
Update strings.xml 2023-08-13 17:02:16 +03:00
tibbi ad7ba47ce6 color proper button in the app settings 2023-08-04 09:50:14 +02:00
Tibor Kaputa bf71d48f23
Merge pull request #104 from esensar/viewbinding-migration
Migrate to viewbinding and kotlin gradle scripts
2023-08-04 09:44:54 +02:00
Ensar Sarajčić 8f21b8b689 Remove alias for commons R class 2023-08-04 08:39:02 +02:00
Ensar Sarajčić 36558b8949 Reformat code 2023-08-03 16:58:18 +02:00
Ensar Sarajčić 651d3b041c Migrate settings.gradle to kotlin script 2023-08-03 16:13:16 +02:00
Ensar Sarajčić 079efbedb3 Remove unused imports 2023-08-03 16:02:15 +02:00
Ensar Sarajčić 2bdd29454b Remove vectorDrawables.useSupportLibrary line 2023-08-03 15:33:23 +02:00
Ensar Sarajčić c15b3e4c6f Migrate to viewbinding and kotlin gradle scripts 2023-08-03 13:23:31 +02:00
Tibor Kaputa b2a2ee653c
Merge pull request #101 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-08-02 11:40:40 +02:00
Priit Jõerüüt cd994f2c04
Translated using Weblate (Estonian)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/et/
2023-08-02 11:39:48 +02:00
Kingproone 43dfcebb5a
Translated using Weblate (Hungarian)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/hu/
2023-08-02 11:39:48 +02:00
Tibor Kaputa 6e89e55c70
Merge pull request #96 from esensar/feature/57-always-go-home
Add a setting for always closing drawers when using home button
2023-08-02 11:39:42 +02:00
Ensar Sarajčić 5e58c04338 Add support for viewing folders as dialogs 2023-08-01 16:10:13 +02:00
Ensar Sarajčić a9f879628c Add basic support for folders on home screen 2023-08-01 12:13:55 +02:00
Ensar Sarajčić 4e1121e6af Remove unused imports 2023-08-01 10:33:10 +02:00
Ensar Sarajčić 564d92f7a7 Add animation on home button if no other app was on top 2023-08-01 10:30:20 +02:00
Ensar Sarajčić 3fc14045b6 Remove settings for closing app drawer on home 2023-07-31 12:43:06 +02:00
Ensar Sarajčić 6096a4da3e Always hide drawer and widgets on home button press 2023-07-31 12:41:10 +02:00
Tibor Kaputa 65f4cf4b0a
Merge pull request #98 from esensar/fix/icon-menu
Fix position of popup menu anchor to be more consistent
2023-07-31 11:13:08 +02:00
Ensar Sarajčić 310f81f850 Use a getter for iconSize instead of property access 2023-07-31 10:35:32 +02:00
Ensar Sarajčić bc7bf7bb78 Update close_app_drawer_on_home string 2023-07-31 10:08:02 +02:00
Ensar Sarajčić 72d85f6257 Merge branch 'main' into feature/57-always-go-home 2023-07-31 10:07:30 +02:00
Tibor Kaputa c4b7480a4c
Merge pull request #100 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-07-30 23:17:18 +02:00
solokot 63768045c8
Translated using Weblate (Russian)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ru/
2023-07-30 23:16:59 +02:00
VfBFan af6e1790b2
Translated using Weblate (German)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/de/
2023-07-30 23:16:59 +02:00
Agnieszka C 7d493085f0
Translated using Weblate (Polish)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/pl/
2023-07-30 23:16:59 +02:00
Tibor Kaputa 308d9841eb
Merge pull request #99 from esensar/sdk-34-migration
Upgrade targetSdkVersion to 34
2023-07-30 23:16:55 +02:00
Tibor Kaputa 45904bac9d
Merge pull request #94 from esensar/fix/73-notch-handling
Allow drawing under notches and system bars
2023-07-30 23:15:29 +02:00
Ensar Sarajčić 6a57c9c823 Remove no limits flag to prevent menu from going outside of the screen 2023-07-28 16:08:52 +02:00
Ensar Sarajčić 3426fd98e3 Upgrade targetSdkVersion to 34
This API version update doesn't seem to affect this launcher that much.
Only differences were signatures of these 2 methods (onFling and onDraw),
but no other changes really affect this app from these lists:
- https://developer.android.com/about/versions/14/behavior-changes-all
- https://developer.android.com/about/versions/14/behavior-changes-14

Font scaling can go up to 200% now and it doesn't break functionality either.
2023-07-28 16:00:54 +02:00
Ensar Sarajčić 83a35664a4 Make popup menu height consistent with real number of items 2023-07-28 13:49:10 +02:00
Ensar Sarajčić 7f787cef08 Fix anchor positioning on all apps fragment and home screen 2023-07-28 13:40:21 +02:00
Ensar Sarajčić e82beb464d Fix initial value of closeAppDrawerOnHome on SettingsActivity 2023-07-28 12:35:49 +02:00
Ensar Sarajčić 0a1af2f75e Merge branch 'main' into fix/73-notch-handling 2023-07-28 11:59:38 +02:00
Ensar Sarajčić babd6bee9d Prevent search bar settings from changing status bar color 2023-07-28 11:58:44 +02:00
Ensar Sarajčić 38f1983bf7 Merge branch 'main' into feature/57-always-go-home 2023-07-28 09:54:17 +02:00
Tibor Kaputa 73b7638a93
Merge pull request #97 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-07-28 08:34:09 +02:00
Rex_sa 4b85da1124
Translated using Weblate (Arabic)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ar/
2023-07-28 08:29:54 +02:00
Guillaume fceb63e4c8
Translated using Weblate (Dutch)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/nl/
2023-07-28 08:29:54 +02:00
Josep M. Ferrer 4ced1cfb09
Translated using Weblate (Catalan)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ca/
2023-07-28 08:29:54 +02:00
Oğuz Ersen 6754e58c6a
Translated using Weblate (Turkish)
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/tr/
2023-07-28 08:29:54 +02:00
Eric 4f60029e33
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (15 of 15 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/zh_Hans/
2023-07-28 08:29:53 +02:00
Ensar Sarajčić 4fa8131f21 Add a setting for always closing drawers when using home button
This closes #57
2023-07-27 17:41:32 +02:00
Ensar Sarajčić 27b12764a5 Use WindowCompat for setting setDecorFitsSystemWindows 2023-07-27 17:14:18 +02:00
Tibor Kaputa 37e0bd6084
Merge pull request #85 from esensar/feature/close-drawer-and-widgets-when-moving-to-other-apps
Close apps drawer and widgets screen when navigating to other apps
2023-07-27 16:56:34 +02:00
Tibor Kaputa c8db594896
changing a default value 2023-07-27 16:56:11 +02:00
Ensar Sarajčić ad6f129876 Add flags for handling statusbar transparency 2023-07-27 16:42:21 +02:00
tibbi f751d90bea renaming a function 2023-07-27 15:55:50 +02:00
Tibor Kaputa d331d70131
Merge pull request #95 from esensar/feature/disable-uninstall-of-system-apps
Hide uninstall button for system apps
2023-07-27 15:54:08 +02:00
Ensar Sarajčić 1e4e2571dd Hide uninstall button for system apps 2023-07-27 13:59:56 +02:00
Ensar Sarajčić 56255c0b48 Allow drawing under notches and system bars
This closes #73
2023-07-27 13:37:51 +02:00
Ensar Sarajčić 792ded4323 Add delay to app drawer closing 2023-07-27 11:58:00 +02:00
Tibor Kaputa 8d6c839c15
Merge pull request #93 from esensar/fix/67-direct-call-widget-migration
Add migration for changes made to shortcuts
2023-07-26 21:03:20 +02:00
Ensar Sarajčić 5b318a4f59 Check for `closeAppDrawer` config before closing it 2023-07-26 18:23:56 +02:00
Ensar Sarajčić fd46c078fb Instantly hide app drawer without animation when using closeAppDrawer method 2023-07-26 18:23:42 +02:00
Ensar Sarajčić 0b497a34f6 Add migration for changes made to shortcuts
Since #67 was fixed in #92, `intent` field in `HomeScreenGridItem`
became obsolete. This removes that field and properly migrates it,
by adding this to existing version 4 to 5 migration (meaning this
will only properly migrate between real releases). The migration will
also remove all icons that had `intent` field populated, since they
can't be migrated properly and would not work at all.
2023-07-26 18:17:32 +02:00
Tibor Kaputa f3b0c7363a
Merge pull request #92 from esensar/fix/67-direct-call-widget
Store all shortcuts with IDs without Intent
2023-07-26 18:08:10 +02:00
Ensar Sarajčić befd1d5d09 Store all shortcuts with IDs without Intent
This handles all shortcuts the same, using the recommended mechanism
of using `LauncherApps` to get `PinItemRequest` from result intent.
This makes `intent` field obsolete.

This closes #67
2023-07-26 17:40:42 +02:00
Ensar Sarajčić 2534131851 Move drawer closing setting to App Drawer section 2023-07-26 16:54:57 +02:00
Ensar Sarajčić 240193d0f5 Fix search bar setting size 2023-07-26 16:54:48 +02:00
Ensar Sarajčić 5c7ad336ad Close app drawer when opening another app 2023-07-26 16:54:33 +02:00
Ensar Sarajčić 2fefcf0cba Update string for app drawer closing setting 2023-07-26 16:47:30 +02:00
Ensar Sarajčić 57df13f74e Merge branch 'main' into feature/close-drawer-and-widgets-when-moving-to-other-apps 2023-07-26 16:44:05 +02:00
Tibor Kaputa 2b951ad277
Merge pull request #90 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-07-26 16:36:27 +02:00
Sergio Marques 489c4f827e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/pt/
2023-07-25 18:06:04 +02:00
solokot 4f0f8d08fd
Translated using Weblate (Russian)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ru/
2023-07-24 08:02:56 +02:00
Josep M. Ferrer 1e2ba6d637
Translated using Weblate (Catalan)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ca/
2023-07-24 08:02:56 +02:00
en2sv 9cdd4a79b3
Translated using Weblate (Swedish)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/sv/
2023-07-24 08:02:56 +02:00
Rex_sa 2ddb063ac6
Translated using Weblate (Arabic)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ar/
2023-07-21 10:09:02 +02:00
Guillaume 8a39918420
Translated using Weblate (Dutch)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/nl/
2023-07-21 10:09:02 +02:00
Priit Jõerüüt 265d66e93a
Translated using Weblate (Estonian)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/et/
2023-07-21 10:09:02 +02:00
VfBFan 10bdb0682d
Translated using Weblate (German)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/de/
2023-07-21 10:09:02 +02:00
Oğuz Ersen e769c2cc48
Translated using Weblate (Turkish)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/tr/
2023-07-21 10:09:01 +02:00
Agnieszka C 651de2bc4e
Translated using Weblate (Polish)
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/pl/
2023-07-21 10:09:01 +02:00
Eric d1ce1b950c
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (14 of 14 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/zh_Hans/
2023-07-21 10:09:01 +02:00
Ensar Sarajčić e0d1151e8c Remove strings for w600dp 2023-07-21 08:12:14 +02:00
Ensar Sarajčić 66c480b46d Merge branch 'main' into feature/close-drawer-and-widgets-when-moving-to-other-apps 2023-07-21 08:11:44 +02:00
Tibor Kaputa a3c7aa0d5d
Merge pull request #89 from esensar/fix/drawer-on-page-change
Prevent cases of both drawer and page change occurring on diagonal fling
2023-07-20 21:29:57 +02:00
Tibor Kaputa c643f06b6d
Merge pull request #88 from esensar/fix/icons-blink-on-page-change
Fix icons blinking on page change
2023-07-20 21:29:49 +02:00
Tibor Kaputa 94633c08ff
Merge pull request #87 from esensar/feature/page-indicators-fade
Fade page change indicators when not needed
2023-07-20 21:28:38 +02:00
Ensar Sarajčić f8cd74912c Prevent cases of both drawer and page change occurring on diagonal fling 2023-07-20 18:00:52 +02:00
Ensar Sarajčić d1b888ee7e Fix icons blinking on page change 2023-07-20 17:57:55 +02:00
Ensar Sarajčić 68a8b5dd25 Show indicators as soon as item is moved 2023-07-20 17:41:13 +02:00
Ensar Sarajčić 02684f393f Fade page change indicators when not needed 2023-07-20 17:01:38 +02:00
Tibor Kaputa 90ac44d54b
Merge pull request #86 from esensar/feature/47-multi-panel-home
Implement multiple panes for home screen grid
2023-07-20 15:37:39 +02:00
Tibor Kaputa 0a76968091
minor code style update 2023-07-20 15:36:53 +02:00
Ensar Sarajčić 2038e9dcf1 Remove unused strokeWidth field from HomeScreenGrid 2023-07-20 13:52:37 +02:00
Ensar Sarajčić 4392527909 Improve behavior for dragging icons offpage 2023-07-20 13:48:36 +02:00
Ensar Sarajčić 1b0dc44ca8 Reduce delay for page changes 2023-07-20 13:35:22 +02:00
Ensar Sarajčić 8794f7ca23 Decrease move gesture sensitivity 2023-07-20 12:40:28 +02:00
Ensar Sarajčić 35fe1da420 Navigate to previous page if current one is empty 2023-07-20 12:09:28 +02:00
Ensar Sarajčić 9906ef05af Draw page indicators on the bottom 2023-07-20 12:09:15 +02:00
Ensar Sarajčić efb46dc0d6 Fix max page calculation in HomeScreenGrid to consider only visible items 2023-07-20 11:29:10 +02:00
Ensar Sarajčić 1448c8a989 Combine migrations to keep database version at 5 2023-07-20 11:20:53 +02:00
Ensar Sarajčić 05c9644037 Implement bottom row docking 2023-07-19 17:26:36 +02:00
Ensar Sarajčić 1c67a8f097 Merge branch 'main' into feature/47-multi-panel-home 2023-07-19 16:46:29 +02:00
Ensar Sarajčić 6ac3d0f86c Fix shortcut pin intent handling 2023-07-19 16:30:21 +02:00
Ensar Sarajčić 3742762220 Handle pages in shortcut pin request 2023-07-19 16:09:27 +02:00
Tibor Kaputa 240c568d1d
Merge pull request #80 from esensar/feature/60-row-column-count-customization
Add support for customizing row and column count in home grid
2023-07-19 16:03:13 +02:00
Tibor Kaputa a766abf248
show errors at long toasts 2023-07-19 16:02:17 +02:00
Tibor Kaputa f6176f0d85
updating the slovak translation 2023-07-19 16:00:44 +02:00
Ensar Sarajčić d4b131ab23 Increase page change area and introduce delay to prevent accidental page changes 2023-07-19 15:45:29 +02:00
Ensar Sarajčić 9766b3f0b6 Extract string for widget too big message 2023-07-19 15:25:29 +02:00
Tibor Kaputa 99443c3297
updating the slovak translation 2023-07-19 14:47:51 +02:00
Ensar Sarajčić d5aff09c8e Add setting for navigating to home screen always 2023-07-19 10:28:53 +02:00
Ensar Sarajčić 1913d0b739 Add delay to drawer and widgets closing 2023-07-19 10:21:45 +02:00
Ensar Sarajčić 3a4f4b47a9 Ensure gridCenters are cleared when dimensions of grid change
This prevents an issue of items that can't be dropped onto the grid, because of missing center values
2023-07-19 10:02:20 +02:00
Tibor Kaputa 273846423e
Merge pull request #83 from esensar/fix/back-button-accessibility
Update commons to fix toolbar accessibility
2023-07-18 20:59:06 +02:00
Ensar Sarajčić f0eb1254a3 Fix occupied position calculation for offpage items 2023-07-18 18:25:40 +02:00
Ensar Sarajčić 9dc9e90e0e Add animations for widgets 2023-07-18 18:22:20 +02:00
Ensar Sarajčić 1d0f814e9f Update anim percentage for clarity 2023-07-18 18:06:31 +02:00
Ensar Sarajčić 468b89bc21 Add basic page change animations 2023-07-18 18:04:59 +02:00
Ensar Sarajčić b0ca17cea2 Implement multiple panes for home screen grid
This closes #47
2023-07-18 17:35:26 +02:00
Ensar Sarajčić 10a06020e8 Close apps drawer and widgets screen when navigating to other apps
This closes #17, closes #57
2023-07-18 16:30:46 +02:00
Ensar Sarajčić a429fba97f Fix background for search bar item 2023-07-18 14:47:56 +02:00
Ensar Sarajčić 5655eba657 Update Simple-Commons for accessibility fixes 2023-07-18 14:46:32 +02:00
Ensar Sarajčić 26b4d777e4 Merge branch 'main' into feature/60-row-column-count-customization 2023-07-18 14:41:55 +02:00
Ensar Sarajčić 8c9862c9c9 Update Simple-Commons for row_count string 2023-07-18 14:39:31 +02:00
Tibor Kaputa c5ea727398
Merge pull request #84 from esensar/fix/home-screen-accessibility
Implement accessibility for HomeScreenGrid
2023-07-18 14:30:31 +02:00
Tibor Kaputa 1a640224a2
removing a semicolon 2023-07-18 14:29:18 +02:00
Tibor Kaputa f2de755423
Update MainActivity.kt 2023-07-18 14:28:41 +02:00
Tibor Kaputa 29acee4f78
Merge pull request #81 from esensar/feature/72-drawer-search
Add search bar to apps drawer
2023-07-18 14:26:47 +02:00
Ensar Sarajčić 65835d4bcb Focus all apps grid and widgets screen with accessibility when needed 2023-07-18 14:21:07 +02:00
Ensar Sarajčić a4fc9d0b90 Implement accessibility for HomeScreenGrid
This closes #29, closes #15
2023-07-18 14:18:02 +02:00
Ensar Sarajčić d1cc743f2e Update commons to fix toolbar accessibility
This closes #16
2023-07-18 12:08:10 +02:00
Ensar Sarajčić 3ec2bd2034 Update settings strings 2023-07-18 10:39:11 +02:00
Ensar Sarajčić 0581c18d81 Update backgrounds in settings screen 2023-07-18 10:21:47 +02:00
Ensar Sarajčić 26fee5c53f Merge branch 'main' into feature/60-row-column-count-customization 2023-07-18 08:35:50 +02:00
Ensar Sarajčić 149e51f53e Merge branch 'main' into feature/72-drawer-search 2023-07-18 08:34:40 +02:00
Ensar Sarajčić fe1e59297d Rename showSearchBar setting for consistency 2023-07-18 08:33:56 +02:00
Ensar Sarajčić dffca7823c Add no items found placeholder when searching 2023-07-18 08:32:10 +02:00
Ensar Sarajčić 43d5e2031a Clear search when picking up items from drawer 2023-07-18 08:27:03 +02:00
tibbi 8972ffc1f6 updating commons and room 2023-07-17 17:39:41 +02:00
tibbi f3dce51add fixing some setting ripple backgrounds 2023-07-17 17:33:39 +02:00
Tibor Kaputa f951f02620
Merge pull request #79 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-07-17 17:13:52 +02:00
Tibor Kaputa 9b30452083
Update strings.xml 2023-07-17 17:12:28 +02:00
abc0922001 e54655247a
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (10 of 10 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/zh_Hant/
2023-07-17 17:03:36 +02:00
Josep M. Ferrer f84e21bb12
Translated using Weblate (Catalan)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ca/
2023-07-17 17:03:36 +02:00
VfBFan 56968e7fa6
Translated using Weblate (German)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/de/
2023-07-17 17:03:36 +02:00
abc0922001 73fffb9082
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/zh_Hant/
2023-07-17 17:03:36 +02:00
abc0922001 17798cd1d6
Added translation using Weblate (Chinese (Traditional)) 2023-07-17 17:03:36 +02:00
Tibor Kaputa 6f1ce87af0
Merge pull request #82 from esensar/fix/hidden-apps-crash
Fix crash when removing last hidden icon from HiddenIconsActivity
2023-07-17 17:03:30 +02:00
Ensar Sarajčić 649a55a1fa Fix crash when removing last hidden icon from HiddenIconsActivity
This used to crash with:
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
            at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8372)
            at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1444)

This prevents that crash by ensuring that updates to `manage_hidden_icons_placeholder` happens on UI thread
2023-07-17 16:01:44 +02:00
Ensar Sarajčić 913cbb303d Add search bar to apps drawer
This closes #72
2023-07-17 15:58:59 +02:00
Ensar Sarajčić 1c114f782e Prevent resizing widgets over bottom row 2023-07-17 13:09:04 +02:00
Ensar Sarajčić 209c74e99b Clean up widget placement 2023-07-17 13:03:20 +02:00
Ensar Sarajčić 1097159b8d Fix last row behavior for widgets 2023-07-17 13:03:01 +02:00
Ensar Sarajčić 3e45c3311e Adjust margins for big grid sizes 2023-07-17 12:45:03 +02:00
Ensar Sarajčić d0f361c531 Fix vertical clickable area 2023-07-17 12:41:39 +02:00
Ensar Sarajčić e00f6852ed Adjust clickable areas 2023-07-17 12:32:01 +02:00
Ensar Sarajčić 4b1f2e5a65 Fix drawing of dock line in grid 2023-07-17 12:06:56 +02:00
Ensar Sarajčić 822b373a72 Prevent usage of bottom row for widgets 2023-07-17 11:59:56 +02:00
Ensar Sarajčić 5d642eefe2 Restore widget drawing bottom row limitation 2023-07-17 11:59:22 +02:00
Ensar Sarajčić 3545701f21 Properly translate tap coordinates into grid coordinates for touch events 2023-07-16 16:52:27 +02:00
Tibor Kaputa dda1080ccd
Merge pull request #77 from spkprs/patch-1
Update.xml
2023-07-16 13:19:33 +02:00
Tibor Kaputa 31986af875
Merge pull request #78 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-07-16 13:19:19 +02:00
Rex_sa 56c5ff77c3
Translated using Weblate (Arabic)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ar/
2023-07-16 13:01:47 +02:00
Guillaume 29fd4c7144
Translated using Weblate (Dutch)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/nl/
2023-07-16 13:01:46 +02:00
solokot 0e5c674d61
Translated using Weblate (Russian)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/ru/
2023-07-16 13:01:46 +02:00
Oğuz Ersen 604c8bdc42
Translated using Weblate (Turkish)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/tr/
2023-07-16 13:01:46 +02:00
Agnieszka C 267faa88b3
Translated using Weblate (Polish)
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/pl/
2023-07-16 13:01:46 +02:00
Eric be7df2d4fd
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (12 of 12 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/zh_Hans/
2023-07-16 13:01:45 +02:00
Ensar Sarajčić 934651e88d Increase clickable height of grid icons 2023-07-16 09:33:23 +02:00
Ensar Sarajčić 2636f5666e Merge branch 'main' into feature/60-row-column-count-customization 2023-07-15 17:54:20 +02:00
spkprs 3659cc35ed
Update strings.xml 2023-07-14 14:31:28 +03:00
Tibor Kaputa c5b07a4254
Merge pull request #76 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-07-14 09:55:52 +02:00
Tibor Kaputa 6397240dce
Update strings.xml 2023-07-14 09:55:43 +02:00
elgratea bcc1352d8c
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/bg/
2023-07-14 09:52:59 +02:00
elgratea 482617bcf1
Added translation using Weblate (Bulgarian) 2023-07-14 09:52:59 +02:00
Tibor Kaputa 6c98f3ec11
Merge pull request #75 from esensar/feature/60-drawer-column-customization
Enable customization of column count for application drawer
2023-07-14 09:52:54 +02:00
Tibor Kaputa 48ee02374a
updating the slovak string 2023-07-14 09:52:40 +02:00
Ensar Sarajčić 46b43359de Put labels in translatable strings 2023-07-14 09:37:24 +02:00
Ensar Sarajčić b49a84968e Adjust widgets drawing for missing bottom row 2023-07-13 15:55:01 +02:00
Ensar Sarajčić ec45fc0a1f Add an error when widget is too big for home screen 2023-07-13 15:13:21 +02:00
Ensar Sarajčić 3ed5119129 Remove landscape row and column counts 2023-07-13 15:03:50 +02:00
Ensar Sarajčić ee914d889a Remove landscape orientation settings 2023-07-13 14:58:15 +02:00
Ensar Sarajčić 1cbc887c3c Remove bottom row logic from HomeScreenGrid 2023-07-13 14:54:32 +02:00
Ensar Sarajčić 79d047c852 Add settings for configuring home screen grid size
This closes #60
2023-07-13 14:32:43 +02:00
Ensar Sarajčić f4adf578d4 Add drawer section in settings 2023-07-13 14:01:22 +02:00
Ensar Sarajčić 7bbdf581de Enable customization of column count for application drawer 2023-07-13 12:19:33 +02:00
tibbi 552b7e561a replacing jcenter with mavenCentral 2023-06-23 10:55:59 +02:00
Tibor Kaputa 2ce56163f8
Merge pull request #66 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-05-22 23:19:07 +02:00
FTno 8f3163874e
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/nb_NO/
2023-05-17 15:53:18 +02:00
tibbi 7acbd0286c updating commons 2023-05-13 16:44:51 +02:00
Tibor Kaputa e8b95052dc
Merge pull request #61 from weblate/weblate-simple-mobile-tools-simple-launcher
Translations update from Hosted Weblate
2023-03-25 09:57:33 +01:00
Milo Ivir 83ef06948e
Translated using Weblate (Croatian)
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/hr/
2023-03-16 14:37:41 +01:00
Denis Shilin 36246d948b
Translated using Weblate (Russian)
Currently translated at 100.0% (10 of 10 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/ru/
2023-03-13 18:40:01 +01:00
P.O 00fe1a63a0
Translated using Weblate (Swedish)
Currently translated at 100.0% (10 of 10 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/sv/
2023-03-12 17:37:52 +01:00
Oskari Lavinto 881a1db4be
Translated using Weblate (Finnish)
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/fi/
2023-02-28 17:39:55 +01:00
Gabriel Camargo d742fd7e42
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (11 of 11 strings)

Translation: Simple Mobile Tools/Simple Launcher
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher/pt_BR/
2023-02-23 21:36:23 +01:00
Dan 37a2498ecb
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (10 of 10 strings)

Translation: Simple Mobile Tools/Simple Launcher metadata
Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-launcher-metadata/uk/
2023-02-21 03:39:24 +01:00
Tibor Kaputa 06b1be6da2
Update CONTRIBUTING.md 2023-02-18 12:26:30 +01:00
tibbi 15f9dea230 adding contribution rules 2023-02-17 22:41:52 +01:00
208 changed files with 4689 additions and 878 deletions

View File

@ -1,6 +1,28 @@
Changelog
==========
Version 5.1.1 *(2023-09-23)*
----------------------------
* Allow creating multiple home screen pages
* Added folder support
* Added shortcut support
* Added search
* Allow changing row and column count
* Improved accessibility talkback
* Added some UX, translation and stability improvements
Version 5.1.0 *(2023-09-19)*
----------------------------
* Allow creating multiple home screen pages
* Added folder support
* Added shortcut support
* Added search
* Allow changing row and column count
* Improved accessibility talkback
* Added some UX, translation and stability improvements
Version 5.0.6 *(2023-02-12)*
----------------------------

8
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,8 @@
### Reporting
Before you report something, read the reporting rules [here](https://github.com/SimpleMobileTools/General-Discussion#how-do-i-suggest-an-improvement-ask-a-question-or-report-an-issue) please.
### Contributing as a developer
Some instructions about code style and everything that has to be done to increase the change of your code getting accepted can be found at the [General Discussion](https://github.com/SimpleMobileTools/General-Discussion#contribution-rules-for-developers) section.
### Contributing as a non developer
In case you just want to for example improve a translation, you can find the way of doing it [here](https://github.com/SimpleMobileTools/General-Discussion#how-can-i-suggest-an-edit-to-a-file).

View File

@ -34,7 +34,7 @@ Telegram:
https://t.me/SimpleMobileTools
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.launcher'><img src='https://simplemobiletools.com/images/button-google-play.svg' alt='Get it on Google Play' height=45/></a>
<a href='https://f-droid.org/packages/com.simplemobiletools.launcher'><img src='https://simplemobiletools.com/images/button-f-droid.png' alt='Get it on F-Droid' height='45' /></a>
<a href='https://f-droid.org/packages/com.simplemobiletools.launcher'><img src='https://simplemobiletools.com/images/button-fdroid.svg' alt='Get it on F-Droid' height='45' /></a>
<div style="display:flex;">
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png" width="30%">

View File

@ -1,71 +0,0 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 33
defaultConfig {
applicationId "com.simplemobiletools.launcher"
minSdkVersion 26
targetSdkVersion 33
versionCode 8
versionName "5.0.6"
setProperty("archivesBaseName", "launcher")
}
signingConfigs {
if (keystorePropertiesFile.exists()) {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (keystorePropertiesFile.exists()) {
signingConfig signingConfigs.release
}
}
}
flavorDimensions "variants"
productFlavors {
core {}
fdroid {}
prepaid {}
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
dependencies {
implementation 'com.github.SimpleMobileTools:Simple-Commons:c457573200'
kapt "androidx.room:room-compiler:2.5.0"
implementation "androidx.room:room-runtime:2.5.0"
annotationProcessor "androidx.room:room-compiler:2.5.0"
}

102
app/build.gradle.kts Normal file
View File

@ -0,0 +1,102 @@
import java.io.FileInputStream
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.konan.properties.Properties
plugins {
alias(libs.plugins.android)
alias(libs.plugins.kotlinAndroid)
alias(libs.plugins.ksp)
base
}
base {
archivesName.set("launcher")
}
val keystorePropertiesFile: File = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
defaultConfig {
applicationId = libs.versions.app.version.appId.get()
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
versionName = project.libs.versions.app.version.versionName.get()
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
}
signingConfigs {
if (keystorePropertiesFile.exists()) {
register("release") {
keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword")
storeFile = file(keystoreProperties.getProperty("storeFile"))
storePassword = keystoreProperties.getProperty("storePassword")
}
}
}
buildFeatures {
viewBinding = true
buildConfig = true
}
buildTypes {
debug {
applicationIdSuffix = ".debug"
}
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
if (keystorePropertiesFile.exists()) {
signingConfig = signingConfigs.getByName("release")
}
}
}
flavorDimensions.add("variants")
productFlavors {
register("core")
register("fdroid")
register("prepaid")
}
sourceSets {
getByName("main").java.srcDirs("src/main/kotlin")
}
compileOptions {
val currentJavaVersionFromLibs = JavaVersion.valueOf(libs.versions.app.build.javaVersion.get().toString())
sourceCompatibility = currentJavaVersionFromLibs
targetCompatibility = currentJavaVersionFromLibs
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
}
namespace = libs.versions.app.version.appId.get()
lint {
checkReleaseBuilds = false
abortOnError = false
}
}
dependencies {
implementation(libs.simple.tools.commons)
implementation(libs.bundles.room)
ksp(libs.androidx.room.compiler)
}

View File

@ -0,0 +1,128 @@
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "ed53de48a7908dc5cd3640f7bb9a3090",
"entities": [
{
"tableName": "apps",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `package_name` TEXT NOT NULL, `order` INTEGER NOT NULL, `thumbnail_color` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "order",
"columnName": "order",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "thumbnailColor",
"columnName": "thumbnail_color",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_apps_package_name",
"unique": true,
"columnNames": [
"package_name"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_apps_package_name` ON `${TABLE_NAME}` (`package_name`)"
}
],
"foreignKeys": []
},
{
"tableName": "home_screen_grid_items",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `package_name` TEXT NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "left",
"columnName": "left",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "top",
"columnName": "top",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "right",
"columnName": "right",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "bottom",
"columnName": "bottom",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_home_screen_grid_items_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_home_screen_grid_items_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ed53de48a7908dc5cd3640f7bb9a3090')"
]
}
}

View File

@ -0,0 +1,164 @@
{
"formatVersion": 1,
"database": {
"version": 2,
"identityHash": "15057b03e1991ec0d06e1894e5e65e2a",
"entities": [
{
"tableName": "apps",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `package_name` TEXT NOT NULL, `order` INTEGER NOT NULL, `thumbnail_color` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "order",
"columnName": "order",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "thumbnailColor",
"columnName": "thumbnail_color",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_apps_package_name",
"unique": true,
"columnNames": [
"package_name"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_apps_package_name` ON `${TABLE_NAME}` (`package_name`)"
}
],
"foreignKeys": []
},
{
"tableName": "home_screen_grid_items",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `package_name` TEXT NOT NULL, `title` TEXT NOT NULL, `type` INTEGER NOT NULL, `class_name` TEXT NOT NULL, `widget_id` INTEGER NOT NULL, `intent` TEXT NOT NULL, `icon` BLOB)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "left",
"columnName": "left",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "top",
"columnName": "top",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "right",
"columnName": "right",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "bottom",
"columnName": "bottom",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "className",
"columnName": "class_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "widgetId",
"columnName": "widget_id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "intent",
"columnName": "intent",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "icon",
"columnName": "icon",
"affinity": "BLOB",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_home_screen_grid_items_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_home_screen_grid_items_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '15057b03e1991ec0d06e1894e5e65e2a')"
]
}
}

View File

@ -0,0 +1,182 @@
{
"formatVersion": 1,
"database": {
"version": 3,
"identityHash": "e49f06a0d5b16868d7812ed341895b88",
"entities": [
{
"tableName": "apps",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `order` INTEGER NOT NULL, `thumbnail_color` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "order",
"columnName": "order",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "thumbnailColor",
"columnName": "thumbnail_color",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_apps_package_name",
"unique": true,
"columnNames": [
"package_name"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_apps_package_name` ON `${TABLE_NAME}` (`package_name`)"
}
],
"foreignKeys": []
},
{
"tableName": "home_screen_grid_items",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL, `type` INTEGER NOT NULL, `class_name` TEXT NOT NULL, `widget_id` INTEGER NOT NULL, `intent` TEXT NOT NULL, `shortcut_id` TEXT NOT NULL, `icon` BLOB)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "left",
"columnName": "left",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "top",
"columnName": "top",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "right",
"columnName": "right",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "bottom",
"columnName": "bottom",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "className",
"columnName": "class_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "widgetId",
"columnName": "widget_id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "intent",
"columnName": "intent",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "shortcutId",
"columnName": "shortcut_id",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "icon",
"columnName": "icon",
"affinity": "BLOB",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_home_screen_grid_items_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_home_screen_grid_items_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e49f06a0d5b16868d7812ed341895b88')"
]
}
}

View File

@ -0,0 +1,230 @@
{
"formatVersion": 1,
"database": {
"version": 4,
"identityHash": "040f7c2f7cba89bc76cd78abe496d6dc",
"entities": [
{
"tableName": "apps",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `order` INTEGER NOT NULL, `thumbnail_color` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "order",
"columnName": "order",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "thumbnailColor",
"columnName": "thumbnail_color",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_apps_package_name",
"unique": true,
"columnNames": [
"package_name"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_apps_package_name` ON `${TABLE_NAME}` (`package_name`)"
}
],
"foreignKeys": []
},
{
"tableName": "home_screen_grid_items",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL, `type` INTEGER NOT NULL, `class_name` TEXT NOT NULL, `widget_id` INTEGER NOT NULL, `intent` TEXT NOT NULL, `shortcut_id` TEXT NOT NULL, `icon` BLOB)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "left",
"columnName": "left",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "top",
"columnName": "top",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "right",
"columnName": "right",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "bottom",
"columnName": "bottom",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "className",
"columnName": "class_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "widgetId",
"columnName": "widget_id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "intent",
"columnName": "intent",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "shortcutId",
"columnName": "shortcut_id",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "icon",
"columnName": "icon",
"affinity": "BLOB",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_home_screen_grid_items_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_home_screen_grid_items_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
},
{
"tableName": "hidden_icons",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_hidden_icons_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hidden_icons_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '040f7c2f7cba89bc76cd78abe496d6dc')"
]
}
}

View File

@ -0,0 +1,242 @@
{
"formatVersion": 1,
"database": {
"version": 5,
"identityHash": "38ee4c5e67d8efd6cd89925eea5da205",
"entities": [
{
"tableName": "apps",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `order` INTEGER NOT NULL, `thumbnail_color` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "order",
"columnName": "order",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "thumbnailColor",
"columnName": "thumbnail_color",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [
{
"name": "index_apps_package_name",
"unique": true,
"columnNames": [
"package_name"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_apps_package_name` ON `${TABLE_NAME}` (`package_name`)"
}
],
"foreignKeys": []
},
{
"tableName": "home_screen_grid_items",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `page` INTEGER NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL, `type` INTEGER NOT NULL, `class_name` TEXT NOT NULL, `widget_id` INTEGER NOT NULL, `shortcut_id` TEXT NOT NULL, `icon` BLOB, `docked` INTEGER NOT NULL, `parent_id` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "left",
"columnName": "left",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "top",
"columnName": "top",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "right",
"columnName": "right",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "bottom",
"columnName": "bottom",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "page",
"columnName": "page",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "type",
"columnName": "type",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "className",
"columnName": "class_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "widgetId",
"columnName": "widget_id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "shortcutId",
"columnName": "shortcut_id",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "icon",
"columnName": "icon",
"affinity": "BLOB",
"notNull": false
},
{
"fieldPath": "docked",
"columnName": "docked",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "parentId",
"columnName": "parent_id",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [
{
"name": "index_home_screen_grid_items_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_home_screen_grid_items_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
},
{
"tableName": "hidden_icons",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "packageName",
"columnName": "package_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "activityName",
"columnName": "activity_name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [
{
"name": "index_hidden_icons_id",
"unique": true,
"columnNames": [
"id"
],
"orders": [],
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_hidden_icons_id` ON `${TABLE_NAME}` (`id`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '38ee4c5e67d8efd6cd89925eea5da205')"
]
}
}

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.simplemobiletools.launcher"
android:installLocation="internalOnly">
<uses-permission
@ -28,6 +27,7 @@
android:appCategory="productivity"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_launcher_name"
android:localeConfig="@xml/locale_config"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">
@ -43,13 +43,19 @@
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleTop"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/LauncherTheme">
<intent-filter>
<action android:name="android.content.pm.action.CONFIRM_PIN_SHORTCUT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
@ -96,7 +102,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -115,7 +120,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -134,7 +138,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -153,7 +156,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -172,7 +174,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -191,7 +192,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -210,7 +210,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -229,7 +228,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -248,7 +246,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -267,7 +264,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -286,7 +282,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -305,7 +300,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -324,7 +318,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -343,7 +336,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -362,7 +354,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -381,7 +372,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -400,7 +390,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -419,7 +408,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@ -438,7 +426,6 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

View File

@ -5,35 +5,42 @@ import android.content.pm.PackageManager
import android.os.Bundle
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.normalizeString
import com.simplemobiletools.commons.extensions.viewBinding
import com.simplemobiletools.commons.helpers.NavigationIcon
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
import com.simplemobiletools.commons.views.MyGridLayoutManager
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.adapters.HiddenIconsAdapter
import com.simplemobiletools.launcher.extensions.getColumnCount
import com.simplemobiletools.launcher.databinding.ActivityHiddenIconsBinding
import com.simplemobiletools.launcher.extensions.config
import com.simplemobiletools.launcher.extensions.getDrawableForPackageName
import com.simplemobiletools.launcher.extensions.hiddenIconsDB
import com.simplemobiletools.launcher.models.HiddenIcon
import kotlinx.android.synthetic.main.activity_hidden_icons.*
class HiddenIconsActivity : SimpleActivity(), RefreshRecyclerViewListener {
private val binding by viewBinding(ActivityHiddenIconsBinding::inflate)
override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_hidden_icons)
setContentView(binding.root)
updateIcons()
updateMaterialActivityViews(manage_hidden_icons_coordinator, manage_hidden_icons_list, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(manage_hidden_icons_list, manage_hidden_icons_toolbar)
updateMaterialActivityViews(
binding.manageHiddenIconsCoordinator,
binding.manageHiddenIconsList,
useTransparentNavigation = true,
useTopSearchMenu = false
)
setupMaterialScrollListener(binding.manageHiddenIconsList, binding.manageHiddenIconsToolbar)
val layoutManager = manage_hidden_icons_list.layoutManager as MyGridLayoutManager
layoutManager.spanCount = getColumnCount()
val layoutManager = binding.manageHiddenIconsList.layoutManager as MyGridLayoutManager
layoutManager.spanCount = config.drawerColumnCount
}
override fun onResume() {
super.onResume()
setupToolbar(manage_hidden_icons_toolbar, NavigationIcon.Arrow)
setupToolbar(binding.manageHiddenIconsToolbar, NavigationIcon.Arrow)
}
private fun updateIcons() {
@ -46,7 +53,11 @@ class HiddenIconsActivity : SimpleActivity(), RefreshRecyclerViewListener {
})
).toMutableList() as ArrayList<HiddenIcon>
manage_hidden_icons_placeholder.beVisibleIf(hiddenIcons.isEmpty())
val hiddenIconsEmpty = hiddenIcons.isEmpty()
runOnUiThread {
binding.manageHiddenIconsPlaceholder.beVisibleIf(hiddenIconsEmpty)
}
if (hiddenIcons.isNotEmpty()) {
val intent = Intent(Intent.ACTION_MAIN, null)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
@ -73,9 +84,9 @@ class HiddenIconsActivity : SimpleActivity(), RefreshRecyclerViewListener {
}
runOnUiThread {
HiddenIconsAdapter(this, hiddenIcons, this, manage_hidden_icons_list) {
HiddenIconsAdapter(this, hiddenIcons, this, binding.manageHiddenIconsList) {
}.apply {
manage_hidden_icons_list.adapter = this
binding.manageHiddenIconsList.adapter = this
}
}
}

View File

@ -2,47 +2,65 @@ package com.simplemobiletools.launcher.activities
import android.content.Intent
import android.os.Bundle
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.NavigationIcon
import com.simplemobiletools.commons.helpers.isTiramisuPlus
import com.simplemobiletools.commons.models.FAQItem
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.launcher.BuildConfig
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.databinding.ActivitySettingsBinding
import com.simplemobiletools.launcher.extensions.config
import kotlinx.android.synthetic.main.activity_settings.*
import java.util.*
import com.simplemobiletools.launcher.helpers.MAX_COLUMN_COUNT
import com.simplemobiletools.launcher.helpers.MAX_ROW_COUNT
import com.simplemobiletools.launcher.helpers.MIN_COLUMN_COUNT
import com.simplemobiletools.launcher.helpers.MIN_ROW_COUNT
import java.util.Locale
import kotlin.system.exitProcess
class SettingsActivity : SimpleActivity() {
private val binding by viewBinding(ActivitySettingsBinding::inflate)
override fun onCreate(savedInstanceState: Bundle?) {
isMaterialActivity = true
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
setContentView(binding.root)
updateMaterialActivityViews(settings_coordinator, settings_holder, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(settings_nested_scrollview, settings_toolbar)
updateMaterialActivityViews(binding.settingsCoordinator, binding.settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar)
setupOptionsMenu()
}
override fun onResume() {
super.onResume()
setupToolbar(settings_toolbar, NavigationIcon.Arrow)
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
refreshMenuItems()
setupPurchaseThankYou()
setupCustomizeColors()
setupUseEnglish()
setupCloseAppDrawerOnOtherAppOpen()
setupDrawerColumnCount()
setupDrawerSearchBar()
setupHomeRowCount()
setupHomeColumnCount()
setupLanguage()
setupManageHiddenIcons()
updateTextColors(settings_holder)
updateTextColors(binding.settingsHolder)
arrayOf(settings_color_customization_section_label, settings_general_settings_label).forEach {
arrayOf(
binding.settingsColorCustomizationSectionLabel,
binding.settingsGeneralSettingsLabel,
binding.settingsDrawerSettingsLabel,
binding.settingsHomeScreenLabel
).forEach {
it.setTextColor(getProperPrimaryColor())
}
}
private fun setupOptionsMenu() {
settings_toolbar.setOnMenuItemClickListener { menuItem ->
binding.settingsToolbar.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.about -> launchAbout()
R.id.more_apps_from_us -> launchMoreAppsFromUsIntent()
@ -53,45 +71,119 @@ class SettingsActivity : SimpleActivity() {
}
private fun refreshMenuItems() {
settings_toolbar.menu.apply {
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations)
binding.settingsToolbar.menu.apply {
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)
}
}
private fun setupPurchaseThankYou() {
settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled())
settings_purchase_thank_you_holder.setOnClickListener {
binding.settingsPurchaseThankYouHolder.beGoneIf(isOrWasThankYouInstalled())
binding.settingsPurchaseThankYouHolder.setOnClickListener {
launchPurchaseThankYouIntent()
}
}
private fun setupCustomizeColors() {
settings_color_customization_label.text = getCustomizeColorsString()
settings_color_customization_holder.setOnClickListener {
binding.settingsColorCustomizationLabel.text = getCustomizeColorsString()
binding.settingsColorCustomizationHolder.setOnClickListener {
startCustomizationActivity()
}
}
private fun setupUseEnglish() {
settings_use_english_holder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
settings_use_english.isChecked = config.useEnglish
settings_use_english_holder.setOnClickListener {
settings_use_english.toggle()
config.useEnglish = settings_use_english.isChecked
binding.settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
binding.settingsUseEnglish.isChecked = config.useEnglish
binding.settingsUseEnglishHolder.setOnClickListener {
binding.settingsUseEnglish.toggle()
config.useEnglish = binding.settingsUseEnglish.isChecked
exitProcess(0)
}
}
private fun setupCloseAppDrawerOnOtherAppOpen() {
binding.settingsCloseAppDrawerOnOtherApp.isChecked = config.closeAppDrawer
binding.settingsCloseAppDrawerOnOtherAppHolder.setOnClickListener {
binding.settingsCloseAppDrawerOnOtherApp.toggle()
config.closeAppDrawer = binding.settingsCloseAppDrawerOnOtherApp.isChecked
}
}
private fun setupDrawerColumnCount() {
val currentColumnCount = config.drawerColumnCount
binding.settingsDrawerColumnCount.text = currentColumnCount.toString()
binding.settingsDrawerColumnCountHolder.setOnClickListener {
val items = ArrayList<RadioItem>()
for (i in 1..MAX_COLUMN_COUNT) {
items.add(RadioItem(i, resources.getQuantityString(com.simplemobiletools.commons.R.plurals.column_counts, i, i)))
}
RadioGroupDialog(this, items, currentColumnCount) {
val newColumnCount = it as Int
if (currentColumnCount != newColumnCount) {
config.drawerColumnCount = newColumnCount
setupDrawerColumnCount()
}
}
}
}
private fun setupDrawerSearchBar() {
val showSearchBar = config.showSearchBar
binding.settingsShowSearchBar.isChecked = showSearchBar
binding.settingsDrawerSearchHolder.setOnClickListener {
binding.settingsShowSearchBar.toggle()
config.showSearchBar = binding.settingsShowSearchBar.isChecked
}
}
private fun setupHomeRowCount() {
val currentRowCount = config.homeRowCount
binding.settingsHomeScreenRowCount.text = currentRowCount.toString()
binding.settingsHomeScreenRowCountHolder.setOnClickListener {
val items = ArrayList<RadioItem>()
for (i in MIN_ROW_COUNT..MAX_ROW_COUNT) {
items.add(RadioItem(i, resources.getQuantityString(com.simplemobiletools.commons.R.plurals.row_counts, i, i)))
}
RadioGroupDialog(this, items, currentRowCount) {
val newRowCount = it as Int
if (currentRowCount != newRowCount) {
config.homeRowCount = newRowCount
setupHomeRowCount()
}
}
}
}
private fun setupHomeColumnCount() {
val currentColumnCount = config.homeColumnCount
binding.settingsHomeScreenColumnCount.text = currentColumnCount.toString()
binding.settingsHomeScreenColumnCountHolder.setOnClickListener {
val items = ArrayList<RadioItem>()
for (i in MIN_COLUMN_COUNT..MAX_COLUMN_COUNT) {
items.add(RadioItem(i, resources.getQuantityString(com.simplemobiletools.commons.R.plurals.column_counts, i, i)))
}
RadioGroupDialog(this, items, currentColumnCount) {
val newColumnCount = it as Int
if (currentColumnCount != newColumnCount) {
config.homeColumnCount = newColumnCount
setupHomeColumnCount()
}
}
}
}
private fun setupLanguage() {
settings_language.text = Locale.getDefault().displayLanguage
settings_language_holder.beVisibleIf(isTiramisuPlus())
settings_language_holder.setOnClickListener {
binding.settingsLanguage.text = Locale.getDefault().displayLanguage
binding.settingsLanguageHolder.beVisibleIf(isTiramisuPlus())
binding.settingsLanguageHolder.setOnClickListener {
launchChangeAppLanguageIntent()
}
}
private fun setupManageHiddenIcons() {
settings_manage_hidden_icons_holder.setOnClickListener {
binding.settingsManageHiddenIconsHolder.setOnClickListener {
startActivity(Intent(this, HiddenIconsActivity::class.java))
}
}
@ -100,9 +192,9 @@ class SettingsActivity : SimpleActivity() {
val licenses = 0L
val faqItems = ArrayList<FAQItem>()
if (!resources.getBoolean(R.bool.hide_google_relations)) {
faqItems.add(FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons))
faqItems.add(FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons))
if (!resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)) {
faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_2_title_commons, com.simplemobiletools.commons.R.string.faq_2_text_commons))
faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_6_title_commons, com.simplemobiletools.commons.R.string.faq_6_text_commons))
}
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)

View File

@ -0,0 +1,109 @@
package com.simplemobiletools.launcher.adapters
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import androidx.core.view.iterator
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.MainActivity
import com.simplemobiletools.launcher.databinding.ItemLauncherLabelBinding
import com.simplemobiletools.launcher.extensions.handleGridItemPopupMenu
import com.simplemobiletools.launcher.interfaces.ItemMenuListenerAdapter
import com.simplemobiletools.launcher.models.HomeScreenGridItem
class FolderIconsAdapter(
activity: BaseSimpleActivity, var items: MutableList<HomeScreenGridItem>, private val iconPadding: Int,
recyclerView: MyRecyclerView, itemClick: (Any) -> Unit
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
override fun getActionMenuId() = 0
override fun actionItemPressed(id: Int) {}
override fun getSelectableItemCount() = itemCount
override fun getIsItemSelectable(position: Int) = false
override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt()
override fun getItemKeyPosition(key: Int) = items.indexOfFirst { it.id?.toInt() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun prepareActionMode(menu: Menu) {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return createViewHolder(ItemLauncherLabelBinding.inflate(layoutInflater, parent, false).root)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = items[position]
setupView(holder.itemView, item)
bindViewHolder(holder)
}
override fun getItemCount() = items.size
private fun removeItem(item: HomeScreenGridItem) {
val position = items.indexOfFirst { it.id == item.id }
items.removeAt(position)
notifyItemRemoved(position)
}
private fun setupView(view: View, item: HomeScreenGridItem) {
ItemLauncherLabelBinding.bind(view).apply {
launcherLabel.text = item.title
launcherLabel.setTextColor(textColor)
launcherIcon.setPadding(iconPadding, iconPadding, iconPadding, 0)
launcherIcon.setImageDrawable(item.drawable)
val mainListener = (activity as? MainActivity)?.menuListener
root.setOnClickListener { itemClick(item) }
root.setOnLongClickListener {
popupAnchor.y = launcherIcon.y
activity.handleGridItemPopupMenu(popupAnchor, item, false, object : ItemMenuListenerAdapter() {
override fun appInfo(gridItem: HomeScreenGridItem) {
mainListener?.appInfo(gridItem)
}
override fun remove(gridItem: HomeScreenGridItem) {
mainListener?.remove(gridItem)
removeItem(gridItem)
}
override fun uninstall(gridItem: HomeScreenGridItem) {
mainListener?.uninstall(gridItem)
}
override fun rename(gridItem: HomeScreenGridItem) {
mainListener?.rename(gridItem)
}
override fun beforeShow(menu: Menu) {
var visibleMenuItems = 0
for (menuItem in menu.iterator()) {
if (menuItem.isVisible) {
visibleMenuItems++
}
}
val yOffset = resources.getDimension(R.dimen.long_press_anchor_button_offset_y) * (visibleMenuItems - 1)
popupAnchor.y -= yOffset
}
})
true
}
}
}
fun updateItems(items: List<HomeScreenGridItem>) {
this.items.clear()
this.items.addAll(items)
notifyDataSetChanged()
}
}

View File

@ -15,9 +15,9 @@ import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.databinding.ItemHiddenIconBinding
import com.simplemobiletools.launcher.extensions.hiddenIconsDB
import com.simplemobiletools.launcher.models.HiddenIcon
import kotlinx.android.synthetic.main.item_hidden_icon.view.*
class HiddenIconsAdapter(
activity: BaseSimpleActivity,
@ -56,7 +56,9 @@ class HiddenIconsAdapter(
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_hidden_icon, parent)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return createViewHolder(ItemHiddenIconBinding.inflate(layoutInflater, parent, false).root)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val folder = hiddenIcons[position]
@ -101,11 +103,11 @@ class HiddenIconsAdapter(
}
private fun setupView(view: View, icon: HiddenIcon) {
view.apply {
hidden_icon_holder?.isSelected = selectedKeys.contains(icon.hashCode())
hidden_icon_label.text = icon.title
hidden_icon_label.setTextColor(textColor)
hidden_icon.setPadding(iconPadding, iconPadding, iconPadding, 0)
ItemHiddenIconBinding.bind(view).apply {
hiddenIconHolder.isSelected = selectedKeys.contains(icon.hashCode())
hiddenIconLabel.text = icon.title
hiddenIconLabel.setTextColor(textColor)
hiddenIcon.setPadding(iconPadding, iconPadding, iconPadding, 0)
val factory = DrawableCrossFadeFactory.Builder(150).setCrossFadeEnabled(true).build()
@ -113,7 +115,7 @@ class HiddenIconsAdapter(
.load(icon.drawable)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.into(hidden_icon)
.into(hiddenIcon)
}
}
}

View File

@ -1,5 +1,6 @@
package com.simplemobiletools.launcher.adapters
import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -7,22 +8,24 @@ import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import com.bumptech.glide.request.target.DrawableImageViewTarget
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory
import com.bumptech.glide.request.transition.Transition
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
import com.simplemobiletools.commons.extensions.getProperTextColor
import com.simplemobiletools.commons.extensions.portrait
import com.simplemobiletools.commons.extensions.realScreenSize
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.SimpleActivity
import com.simplemobiletools.launcher.databinding.ItemLauncherLabelBinding
import com.simplemobiletools.launcher.extensions.config
import com.simplemobiletools.launcher.interfaces.AllAppsListener
import com.simplemobiletools.launcher.models.AppLauncher
import com.simplemobiletools.launcher.models.HomeScreenGridItem
import kotlinx.android.synthetic.main.item_launcher_label.view.*
class LaunchersAdapter(
val activity: SimpleActivity,
var launchers: ArrayList<AppLauncher>,
launchers: ArrayList<AppLauncher>,
val allAppsListener: AllAppsListener,
val itemClick: (Any) -> Unit
) : RecyclerView.Adapter<LaunchersAdapter.ViewHolder>(), RecyclerViewFastScroller.OnPopupTextUpdate {
@ -30,30 +33,32 @@ class LaunchersAdapter(
private var textColor = activity.getProperTextColor()
private var iconPadding = 0
private var wereFreshIconsLoaded = false
private var filterQuery: String? = null
private var filteredLaunchers: List<AppLauncher> = launchers
var launchers: ArrayList<AppLauncher> = launchers
set(value) {
field = value
updateFilter()
}
init {
calculateIconWidth()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_launcher_label, parent, false)
return ViewHolder(view)
val binding = ItemLauncherLabelBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding.root)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindView(launchers[position])
holder.bindView(filteredLaunchers[position])
}
override fun getItemCount() = launchers.size
override fun getItemCount() = filteredLaunchers.size
private fun calculateIconWidth() {
val currentColumnCount = activity.resources.getInteger(
if (activity.portrait) {
R.integer.portrait_column_count
} else {
R.integer.landscape_column_count
}
)
val currentColumnCount = activity.config.drawerColumnCount
val iconWidth = activity.realScreenSize.x / currentColumnCount
iconPadding = (iconWidth * 0.1f).toInt()
@ -63,8 +68,10 @@ class LaunchersAdapter(
val itemToRemove = launchers.firstOrNull { it.getLauncherIdentifier() == item.getItemIdentifier() }
if (itemToRemove != null) {
val position = launchers.indexOfFirst { it.getLauncherIdentifier() == item.getItemIdentifier() }
val filteredPosition = filteredLaunchers.indexOfFirst { it.getLauncherIdentifier() == item.getItemIdentifier() }
launchers.removeAt(position)
notifyItemRemoved(position)
updateFilter()
notifyItemRemoved(filteredPosition)
}
}
@ -78,6 +85,14 @@ class LaunchersAdapter(
}
}
fun updateSearchQuery(newQuery: String?) {
if (filterQuery != newQuery) {
filterQuery = newQuery
updateFilter()
notifyDataSetChanged()
}
}
fun updateTextColor(newTextColor: Int) {
if (newTextColor != textColor) {
textColor = newTextColor
@ -85,26 +100,44 @@ class LaunchersAdapter(
}
}
private fun updateFilter() {
filteredLaunchers = launchers.filter { filterQuery == null || it.title.contains(filterQuery!!, ignoreCase = true) }
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bindView(launcher: AppLauncher): View {
val binding = ItemLauncherLabelBinding.bind(itemView)
itemView.apply {
launcher_label.text = launcher.title
launcher_label.setTextColor(textColor)
launcher_icon.setPadding(iconPadding, iconPadding, iconPadding, 0)
binding.launcherLabel.text = launcher.title
binding.launcherLabel.setTextColor(textColor)
binding.launcherIcon.setPadding(iconPadding, iconPadding, iconPadding, 0)
val factory = DrawableCrossFadeFactory.Builder(150).setCrossFadeEnabled(true).build()
val placeholderDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.placeholder_drawable, launcher.thumbnailColor)
// Once all images are loaded and crossfades are done, directly set drawables
if (launcher.drawable != null && binding.launcherIcon.tag == true) {
binding.launcherIcon.setImageDrawable(launcher.drawable)
} else {
val factory = DrawableCrossFadeFactory.Builder(150).setCrossFadeEnabled(true).build()
val placeholderDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.placeholder_drawable, launcher.thumbnailColor)
Glide.with(activity)
.load(launcher.drawable)
.placeholder(placeholderDrawable)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.into(launcher_icon)
Glide.with(activity)
.load(launcher.drawable)
.placeholder(placeholderDrawable)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.into(object : DrawableImageViewTarget(binding.launcherIcon) {
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
super.onResourceReady(resource, transition)
// Set tag to true to mark that crossfade was already done on this view
view.tag = true
}
})
}
setOnClickListener { itemClick(launcher) }
setOnLongClickListener { view ->
allAppsListener.onAppLauncherLongPressed(view.x + width / 2, view.y, launcher)
val location = IntArray(2)
getLocationOnScreen(location)
allAppsListener.onAppLauncherLongPressed((location[0] + width / 2).toFloat(), location[1].toFloat(), launcher)
true
}
}
@ -113,5 +146,5 @@ class LaunchersAdapter(
}
}
override fun onChange(position: Int) = launchers.getOrNull(position)?.getBubbleText() ?: ""
override fun onChange(position: Int) = filteredLaunchers.getOrNull(position)?.getBubbleText() ?: ""
}

View File

@ -9,15 +9,15 @@ import com.bumptech.glide.Glide
import com.simplemobiletools.commons.extensions.getProperTextColor
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.SimpleActivity
import com.simplemobiletools.launcher.databinding.ItemWidgetListItemsHolderBinding
import com.simplemobiletools.launcher.databinding.ItemWidgetListSectionBinding
import com.simplemobiletools.launcher.databinding.ItemWidgetPreviewBinding
import com.simplemobiletools.launcher.helpers.WIDGET_LIST_ITEMS_HOLDER
import com.simplemobiletools.launcher.helpers.WIDGET_LIST_SECTION
import com.simplemobiletools.launcher.interfaces.WidgetsFragmentListener
import com.simplemobiletools.launcher.models.WidgetsListItem
import com.simplemobiletools.launcher.models.WidgetsListItemsHolder
import com.simplemobiletools.launcher.models.WidgetsListSection
import kotlinx.android.synthetic.main.item_widget_list_items_holder.view.*
import kotlinx.android.synthetic.main.item_widget_list_section.view.*
import kotlinx.android.synthetic.main.item_widget_preview.view.*
class WidgetsAdapter(
val activity: SimpleActivity,
@ -29,13 +29,13 @@ class WidgetsAdapter(
private var textColor = activity.getProperTextColor()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutId = when (viewType) {
WIDGET_LIST_SECTION -> R.layout.item_widget_list_section
else -> R.layout.item_widget_list_items_holder
val inflater = LayoutInflater.from(parent.context)
val binding = when (viewType) {
WIDGET_LIST_SECTION -> ItemWidgetListSectionBinding.inflate(inflater, parent, false)
else -> ItemWidgetListItemsHolderBinding.inflate(inflater, parent, false)
}
val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
return ViewHolder(view)
return ViewHolder(binding.root)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
@ -56,43 +56,44 @@ class WidgetsAdapter(
}
private fun setupListSection(view: View, section: WidgetsListSection) {
view.apply {
widget_app_title.text = section.appTitle
widget_app_title.setTextColor(textColor)
widget_app_icon.setImageDrawable(section.appIcon)
ItemWidgetListSectionBinding.bind(view).apply {
widgetAppTitle.text = section.appTitle
widgetAppTitle.setTextColor(textColor)
widgetAppIcon.setImageDrawable(section.appIcon)
}
}
private fun setupListItemsHolder(view: View, listItem: WidgetsListItemsHolder) {
view.widget_list_items_holder.removeAllViews()
view.widget_list_items_scroll_view.scrollX = 0
val binding = ItemWidgetListItemsHolderBinding.bind(view)
binding.widgetListItemsHolder.removeAllViews()
binding.widgetListItemsScrollView.scrollX = 0
listItem.widgets.forEachIndexed { index, widget ->
val imageSize = activity.resources.getDimension(R.dimen.widget_preview_size).toInt()
val widgetPreview = LayoutInflater.from(activity).inflate(R.layout.item_widget_preview, null)
view.widget_list_items_holder.addView(widgetPreview)
val widgetPreview = ItemWidgetPreviewBinding.inflate(LayoutInflater.from(activity))
binding.widgetListItemsHolder.addView(widgetPreview.root)
val endMargin = if (index == listItem.widgets.size - 1) {
activity.resources.getDimension(R.dimen.medium_margin).toInt()
activity.resources.getDimension(com.simplemobiletools.commons.R.dimen.medium_margin).toInt()
} else {
0
}
widgetPreview.widget_title.apply {
widgetPreview.widgetTitle.apply {
text = widget.widgetTitle
setTextColor(textColor)
}
widgetPreview.widget_size.apply {
widgetPreview.widgetSize.apply {
text = if (widget.isShortcut) {
activity.getString(R.string.shortcut)
activity.getString(com.simplemobiletools.commons.R.string.shortcut)
} else {
"${widget.widthCells} x ${widget.heightCells}"
}
setTextColor(textColor)
}
(widgetPreview.widget_image.layoutParams as RelativeLayout.LayoutParams).apply {
marginStart = activity.resources.getDimension(R.dimen.activity_margin).toInt()
(widgetPreview.widgetImage.layoutParams as RelativeLayout.LayoutParams).apply {
marginStart = activity.resources.getDimension(com.simplemobiletools.commons.R.dimen.activity_margin).toInt()
marginEnd = endMargin
width = imageSize
height = imageSize
@ -100,11 +101,11 @@ class WidgetsAdapter(
Glide.with(activity)
.load(widget.widgetPreviewImage)
.into(widgetPreview.widget_image)
.into(widgetPreview.widgetImage)
widgetPreview.setOnClickListener { itemClick() }
widgetPreview.root.setOnClickListener { itemClick() }
widgetPreview.setOnLongClickListener { view ->
widgetPreview.root.setOnLongClickListener { view ->
widgetsFragmentListener.onWidgetLongPressed(widget)
true
}

View File

@ -15,7 +15,7 @@ import com.simplemobiletools.launcher.models.AppLauncher
import com.simplemobiletools.launcher.models.HiddenIcon
import com.simplemobiletools.launcher.models.HomeScreenGridItem
@Database(entities = [AppLauncher::class, HomeScreenGridItem::class, HiddenIcon::class], version = 4)
@Database(entities = [AppLauncher::class, HomeScreenGridItem::class, HiddenIcon::class], version = 5)
@TypeConverters(Converters::class)
abstract class AppsDatabase : RoomDatabase() {
@ -36,6 +36,7 @@ abstract class AppsDatabase : RoomDatabase() {
.addMigrations(MIGRATION_1_2)
.addMigrations(MIGRATION_2_3)
.addMigrations(MIGRATION_3_4)
.addMigrations(MIGRATION_4_5)
.build()
}
}
@ -64,5 +65,15 @@ abstract class AppsDatabase : RoomDatabase() {
database.execSQL("CREATE UNIQUE INDEX `index_hidden_icons_id` ON `hidden_icons` (`id`)")
}
}
private val MIGRATION_4_5 = object : Migration(4, 5) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("CREATE TABLE `home_screen_grid_items_new` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `page` INTEGER NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL, `type` INTEGER NOT NULL, `class_name` TEXT NOT NULL, `widget_id` INTEGER NOT NULL, `shortcut_id` TEXT NOT NULL, `icon` BLOB, `docked` INTEGER NOT NULL DEFAULT 0, `parent_id` INTEGER)")
database.execSQL("INSERT INTO `home_screen_grid_items_new` (`id`, `left`, `top`, `right`, `bottom`, `page`, `package_name`, `activity_name`, `title`, `type`, `class_name`, `widget_id`, `shortcut_id`, `icon`, `docked`, `parent_id`) SELECT `id`, `left`, `top`, `right`, `bottom`, 0 as `page`, `package_name`, `activity_name`, `title`, `type`, `class_name`, `widget_id`, `shortcut_id`, `icon`, CASE WHEN `type` != 1 AND `top` = 5 THEN 1 ELSE 0 END AS `docked`, NULL AS `parent_id` FROM `home_screen_grid_items` WHERE `intent` IS NULL OR `intent` = ''")
database.execSQL("DROP TABLE `home_screen_grid_items`")
database.execSQL("ALTER TABLE `home_screen_grid_items_new` RENAME TO `home_screen_grid_items`")
database.execSQL("CREATE UNIQUE INDEX `index_home_screen_grid_items_id` ON `home_screen_grid_items` (`id`)")
}
}
}
}

View File

@ -2,41 +2,39 @@ package com.simplemobiletools.launcher.dialogs
import android.app.Activity
import android.app.AlertDialog
import android.view.ViewGroup
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.helpers.mydebug
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.databinding.DialogRenameItemBinding
import com.simplemobiletools.launcher.extensions.homeScreenGridItemsDB
import com.simplemobiletools.launcher.models.HomeScreenGridItem
import kotlinx.android.synthetic.main.dialog_rename_item.view.*
class RenameItemDialog(val activity: Activity, val item: HomeScreenGridItem, val callback: () -> Unit) {
init {
val view = (activity.layoutInflater.inflate(R.layout.dialog_rename_item, null) as ViewGroup)
view.rename_item_edittext.setText(item.title)
val binding = DialogRenameItemBinding.inflate(activity.layoutInflater)
val view = binding.root
binding.renameItemEdittext.setText(item.title)
activity.getAlertDialogBuilder()
.setPositiveButton(R.string.ok, null)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(com.simplemobiletools.commons.R.string.ok, null)
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
.apply {
activity.setupDialogStuff(view, this, R.string.rename) { alertDialog ->
alertDialog.showKeyboard(view.rename_item_edittext)
activity.setupDialogStuff(view, this, com.simplemobiletools.commons.R.string.rename) { alertDialog ->
alertDialog.showKeyboard(binding.renameItemEdittext)
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
val newTitle = view.rename_item_edittext.value
if (!newTitle.isEmpty()) {
val newTitle = binding.renameItemEdittext.value
if (newTitle.isNotEmpty()) {
ensureBackgroundThread {
val result = activity.homeScreenGridItemsDB.updateItemTitle(newTitle, item.id!!)
if (result == 1) {
callback()
alertDialog.dismiss()
} else {
activity.toast(R.string.unknown_error_occurred)
activity.toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
}
}
} else {
activity.toast(R.string.value_cannot_be_empty)
activity.toast(com.simplemobiletools.commons.R.string.value_cannot_be_empty)
}
}
}

View File

@ -2,12 +2,37 @@ package com.simplemobiletools.launcher.extensions
import android.app.Activity
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.LauncherApps
import android.content.res.ColorStateList
import android.graphics.Rect
import android.net.Uri
import android.os.Process
import android.provider.Settings
import android.view.ContextThemeWrapper
import android.view.Gravity
import android.view.Menu
import android.view.View
import android.widget.PopupMenu
import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.MenuCompat
import androidx.core.view.forEach
import com.google.android.material.color.MaterialColors
import com.simplemobiletools.commons.extensions.getPopupMenuTheme
import com.simplemobiletools.commons.extensions.getProperTextColor
import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.isQPlus
import com.simplemobiletools.commons.helpers.isSPlus
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.SettingsActivity
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_FOLDER
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_ICON
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_WIDGET
import com.simplemobiletools.launcher.helpers.UNINSTALL_APP_REQUEST_CODE
import com.simplemobiletools.launcher.interfaces.ItemMenuListener
import com.simplemobiletools.launcher.models.HomeScreenGridItem
fun Activity.launchApp(packageName: String, activityName: String) {
@ -42,6 +67,14 @@ fun Activity.launchAppInfo(packageName: String) {
}
}
fun Activity.canAppBeUninstalled(packageName: String): Boolean {
return try {
(packageManager.getApplicationInfo(packageName, 0).flags and ApplicationInfo.FLAG_SYSTEM) == 0
} catch (ignored: Exception) {
false
}
}
fun Activity.uninstallApp(packageName: String) {
Intent(Intent.ACTION_DELETE).apply {
data = Uri.fromParts("package", packageName, null)
@ -49,12 +82,85 @@ fun Activity.uninstallApp(packageName: String) {
}
}
// launch static or dynamic shortcuts that have intents as string
fun Activity.launchShortcutIntent(item: HomeScreenGridItem) {
try {
val intent = Intent.parseUri(item.intent, 0)
startActivity(intent)
} catch (e: Exception) {
showErrorToast(e)
fun Activity.handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean, listener: ItemMenuListener): PopupMenu {
val contextTheme = ContextThemeWrapper(this, getPopupMenuTheme())
return PopupMenu(contextTheme, anchorView, Gravity.TOP or Gravity.END).apply {
if (isQPlus()) {
setForceShowIcon(true)
}
inflate(R.menu.menu_app_icon)
menu.forEach {
val default = getProperTextColor()
val color = if (isSPlus() && config.isUsingSystemTheme) {
default
} else {
MaterialColors.getColor(contextTheme, android.R.attr.actionMenuTextColor, default)
}
it.iconTintList = ColorStateList.valueOf(color)
}
menu.findItem(R.id.rename).isVisible = (gridItem.type == ITEM_TYPE_ICON || gridItem.type == ITEM_TYPE_FOLDER) && !isOnAllAppsFragment
menu.findItem(R.id.hide_icon).isVisible = gridItem.type == ITEM_TYPE_ICON && isOnAllAppsFragment
menu.findItem(R.id.resize).isVisible = gridItem.type == ITEM_TYPE_WIDGET
menu.findItem(R.id.app_info).isVisible = gridItem.type == ITEM_TYPE_ICON
menu.findItem(R.id.uninstall).isVisible = gridItem.type == ITEM_TYPE_ICON && canAppBeUninstalled(gridItem.packageName)
menu.findItem(R.id.remove).isVisible = !isOnAllAppsFragment
val launcherApps = applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
val shortcuts = if (launcherApps.hasShortcutHostPermission()) {
try {
val query = LauncherApps.ShortcutQuery().setQueryFlags(
LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC or LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST or LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED
).setPackage(gridItem.packageName)
launcherApps.getShortcuts(query, Process.myUserHandle())
} catch (e: Exception) {
null
}
} else {
null
}
val hasShortcuts = !shortcuts.isNullOrEmpty()
MenuCompat.setGroupDividerEnabled(menu, hasShortcuts)
menu.setGroupVisible(R.id.group_shortcuts, hasShortcuts)
if (hasShortcuts) {
val iconSize = resources.getDimensionPixelSize(R.dimen.menu_icon_size)
shortcuts?.forEach {
menu.add(R.id.group_shortcuts, Menu.NONE, Menu.NONE, it.getLabel())
.setIcon(
launcherApps.getShortcutIconDrawable(it, resources.displayMetrics.densityDpi).toBitmap(width = iconSize, height = iconSize)
.toDrawable(resources)
)
.setOnMenuItemClickListener { _ ->
listener.onAnyClick()
val id = it.id
val packageName = it.`package`
val userHandle = Process.myUserHandle()
launcherApps.startShortcut(packageName, id, Rect(), null, userHandle)
true
}
}
}
setOnMenuItemClickListener { item ->
listener.onAnyClick()
when (item.itemId) {
R.id.hide_icon -> listener.hide(gridItem)
R.id.rename -> listener.rename(gridItem)
R.id.resize -> listener.resize(gridItem)
R.id.app_info -> listener.appInfo(gridItem)
R.id.remove -> listener.remove(gridItem)
R.id.uninstall -> listener.uninstall(gridItem)
}
true
}
setOnDismissListener {
listener.onDismiss()
}
listener.beforeShow(menu)
show()
}
}

View File

@ -6,9 +6,7 @@ import android.content.pm.LauncherApps
import android.graphics.drawable.Drawable
import android.os.Process
import android.util.Size
import com.simplemobiletools.commons.extensions.portrait
import com.simplemobiletools.commons.helpers.isSPlus
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.databases.AppsDatabase
import com.simplemobiletools.launcher.helpers.Config
import com.simplemobiletools.launcher.interfaces.AppLaunchersDao
@ -23,14 +21,6 @@ val Context.homeScreenGridItemsDB: HomeScreenGridItemsDao get() = AppsDatabase.g
val Context.hiddenIconsDB: HiddenIconsDao get() = AppsDatabase.getInstance(applicationContext).HiddenIconsDao()
fun Context.getColumnCount(): Int {
return if (portrait) {
resources.getInteger(R.integer.portrait_column_count)
} else {
resources.getInteger(R.integer.landscape_column_count)
}
}
fun Context.getDrawableForPackageName(packageName: String): Drawable? {
var drawable: Drawable? = null
try {

View File

@ -0,0 +1,7 @@
package com.simplemobiletools.launcher.extensions
import android.content.pm.ShortcutInfo
fun ShortcutInfo?.getLabel() = this?.longLabel?.toString().ifNullOrEmpty { this?.shortLabel?.toString() } ?: ""
private fun String?.ifNullOrEmpty(block: () -> String?) = this?.ifEmpty { block() } ?: block()

View File

@ -10,18 +10,17 @@ import android.view.WindowManager
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.isRPlus
import com.simplemobiletools.commons.views.MyGridLayoutManager
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.MainActivity
import com.simplemobiletools.launcher.adapters.LaunchersAdapter
import com.simplemobiletools.launcher.extensions.getColumnCount
import com.simplemobiletools.launcher.databinding.AllAppsFragmentBinding
import com.simplemobiletools.launcher.extensions.config
import com.simplemobiletools.launcher.extensions.launchApp
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_ICON
import com.simplemobiletools.launcher.interfaces.AllAppsListener
import com.simplemobiletools.launcher.models.AppLauncher
import com.simplemobiletools.launcher.models.HomeScreenGridItem
import kotlinx.android.synthetic.main.all_apps_fragment.view.*
class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment(context, attributeSet), AllAppsListener {
class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment<AllAppsFragmentBinding>(context, attributeSet), AllAppsListener {
private var lastTouchCoords = Pair(0f, 0f)
var touchDownY = -1
var ignoreTouches = false
@ -30,8 +29,9 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
@SuppressLint("ClickableViewAccessibility")
override fun setupFragment(activity: MainActivity) {
this.activity = activity
this.binding = AllAppsFragmentBinding.bind(this)
all_apps_grid.setOnTouchListener { v, event ->
binding.allAppsGrid.setOnTouchListener { v, event ->
if (event.actionMasked == MotionEvent.ACTION_UP || event.actionMasked == MotionEvent.ACTION_CANCEL) {
touchDownY = -1
}
@ -40,18 +40,28 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
}
fun onConfigurationChanged() {
if (all_apps_grid == null) {
@SuppressLint("NotifyDataSetChanged")
fun onResume() {
if (binding.allAppsGrid.layoutManager == null || binding.allAppsGrid.adapter == null) {
return
}
all_apps_grid.scrollToPosition(0)
all_apps_fastscroller.resetManualScrolling()
val layoutManager = binding.allAppsGrid.layoutManager as MyGridLayoutManager
if (layoutManager.spanCount != context.config.drawerColumnCount) {
onConfigurationChanged()
// Force redraw due to changed item size
(binding.allAppsGrid.adapter as LaunchersAdapter).notifyDataSetChanged()
}
}
fun onConfigurationChanged() {
binding.allAppsGrid.scrollToPosition(0)
binding.allAppsFastscroller.resetManualScrolling()
setupViews()
val layoutManager = all_apps_grid.layoutManager as MyGridLayoutManager
layoutManager.spanCount = context.getColumnCount()
val launchers = (all_apps_grid.adapter as LaunchersAdapter).launchers
val layoutManager = binding.allAppsGrid.layoutManager as MyGridLayoutManager
layoutManager.spanCount = context.config.drawerColumnCount
val launchers = (binding.allAppsGrid.adapter as LaunchersAdapter).launchers
setupAdapter(launchers)
}
@ -73,7 +83,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
// pull the whole fragment down if it is scrolled way to the top and the users pulls it even further
if (touchDownY != -1) {
shouldIntercept = touchDownY - event.y.toInt() < 0 && all_apps_grid.computeVerticalScrollOffset() == 0
shouldIntercept = touchDownY - event.y.toInt() < 0 && binding.allAppsGrid.computeVerticalScrollOffset() == 0
if (shouldIntercept) {
activity?.startHandlingTouches(touchDownY)
touchDownY = -1
@ -99,17 +109,20 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
private fun setupAdapter(launchers: ArrayList<AppLauncher>) {
activity?.runOnUiThread {
val layoutManager = all_apps_grid.layoutManager as MyGridLayoutManager
layoutManager.spanCount = context.getColumnCount()
val layoutManager = binding.allAppsGrid.layoutManager as MyGridLayoutManager
layoutManager.spanCount = context.config.drawerColumnCount
val currAdapter = all_apps_grid.adapter
val currAdapter = binding.allAppsGrid.adapter
if (currAdapter == null) {
LaunchersAdapter(activity!!, launchers, this) {
activity?.launchApp((it as AppLauncher).packageName, it.activityName)
if (activity?.config?.closeAppDrawer == true) {
activity?.closeAppDrawer(delayed = true)
}
ignoreTouches = false
touchDownY = -1
}.apply {
all_apps_grid.adapter = this
binding.allAppsGrid.adapter = this
}
} else {
(currAdapter as LaunchersAdapter).updateItems(launchers)
@ -118,7 +131,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
fun hideIcon(item: HomeScreenGridItem) {
(all_apps_grid.adapter as? LaunchersAdapter)?.hideIcon(item)
(binding.allAppsGrid.adapter as? LaunchersAdapter)?.hideIcon(item)
}
fun setupViews(addTopPadding: Boolean = hasTopPadding) {
@ -126,7 +139,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
return
}
all_apps_fastscroller.updateColors(context.getProperPrimaryColor())
binding.allAppsFastscroller.updateColors(context.getProperPrimaryColor())
var bottomListPadding = 0
var leftListPadding = 0
@ -152,14 +165,29 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
}
all_apps_grid.setPadding(0, 0, resources.getDimension(R.dimen.medium_margin).toInt(), bottomListPadding)
all_apps_fastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
binding.allAppsGrid.setPadding(0, 0, resources.getDimension(com.simplemobiletools.commons.R.dimen.medium_margin).toInt(), bottomListPadding)
binding.allAppsFastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
hasTopPadding = addTopPadding
val topPadding = if (addTopPadding) activity!!.statusBarHeight else 0
setPadding(0, topPadding, 0, 0)
background = ColorDrawable(context.getProperBackgroundColor())
(all_apps_grid.adapter as? LaunchersAdapter)?.updateTextColor(context.getProperTextColor())
(binding.allAppsGrid.adapter as? LaunchersAdapter)?.updateTextColor(context.getProperTextColor())
binding.searchBar.beVisibleIf(context.config.showSearchBar)
binding.searchBar.getToolbar()?.beGone()
binding.searchBar.updateColors()
binding.searchBar.setupMenu()
binding.searchBar.onSearchTextChangedListener = {
(binding.allAppsGrid.adapter as? LaunchersAdapter)?.updateSearchQuery(it)
showNoResultsPlaceholderIfNeeded()
}
}
private fun showNoResultsPlaceholderIfNeeded() {
val itemCount = binding.allAppsGrid.adapter?.itemCount
binding.noResultsPlaceholder.beVisibleIf(itemCount != null && itemCount == 0)
}
override fun onAppLauncherLongPressed(x: Float, y: Float, appLauncher: AppLauncher) {
@ -169,6 +197,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
-1,
-1,
-1,
0,
appLauncher.packageName,
appLauncher.activityName,
appLauncher.title,
@ -176,12 +205,24 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
"",
-1,
"",
"",
null,
false,
null,
appLauncher.drawable
)
activity?.showHomeIconMenu(x, y, gridItem, true)
ignoreTouches = true
binding.searchBar.closeSearch()
}
fun onBackPressed(): Boolean {
if (binding.searchBar.isSearchOpen) {
binding.searchBar.closeSearch()
return true
}
return false
}
}

View File

@ -3,10 +3,12 @@ package com.simplemobiletools.launcher.fragments
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
import androidx.viewbinding.ViewBinding
import com.simplemobiletools.launcher.activities.MainActivity
abstract class MyFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
abstract class MyFragment<BINDING : ViewBinding>(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
protected var activity: MainActivity? = null
protected lateinit var binding: BINDING
abstract fun setupFragment(activity: MainActivity)
}

View File

@ -18,14 +18,15 @@ import com.simplemobiletools.commons.helpers.isRPlus
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.MainActivity
import com.simplemobiletools.launcher.adapters.WidgetsAdapter
import com.simplemobiletools.launcher.databinding.WidgetsFragmentBinding
import com.simplemobiletools.launcher.extensions.config
import com.simplemobiletools.launcher.extensions.getInitialCellSize
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_SHORTCUT
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_WIDGET
import com.simplemobiletools.launcher.interfaces.WidgetsFragmentListener
import com.simplemobiletools.launcher.models.*
import kotlinx.android.synthetic.main.widgets_fragment.view.*
class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment(context, attributeSet), WidgetsFragmentListener {
class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment<WidgetsFragmentBinding>(context, attributeSet), WidgetsFragmentListener {
private var lastTouchCoords = Pair(0f, 0f)
var touchDownY = -1
var ignoreTouches = false
@ -34,9 +35,10 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
@SuppressLint("ClickableViewAccessibility")
override fun setupFragment(activity: MainActivity) {
this.activity = activity
this.binding = WidgetsFragmentBinding.bind(this)
getAppWidgets()
widgets_list.setOnTouchListener { v, event ->
binding.widgetsList.setOnTouchListener { v, event ->
if (event.actionMasked == MotionEvent.ACTION_UP || event.actionMasked == MotionEvent.ACTION_CANCEL) {
touchDownY = -1
}
@ -46,15 +48,19 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
fun onConfigurationChanged() {
if (widgets_list == null) {
if (binding.widgetsList == null) {
return
}
widgets_list.scrollToPosition(0)
binding.widgetsList.scrollToPosition(0)
setupViews()
val appWidgets = (widgets_list.adapter as WidgetsAdapter).widgetListItems
setupAdapter(appWidgets)
val appWidgets = (binding.widgetsList.adapter as? WidgetsAdapter)?.widgetListItems
if (appWidgets != null) {
setupAdapter(appWidgets)
} else {
getAppWidgets()
}
}
override fun onInterceptTouchEvent(event: MotionEvent?): Boolean {
@ -75,7 +81,7 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
// pull the whole fragment down if it is scrolled way to the top and the users pulls it even further
if (touchDownY != -1) {
shouldIntercept = touchDownY - event.y.toInt() < 0 && widgets_list.computeVerticalScrollOffset() == 0
shouldIntercept = touchDownY - event.y.toInt() < 0 && binding.widgetsList.computeVerticalScrollOffset() == 0
if (shouldIntercept) {
activity?.startHandlingTouches(touchDownY)
touchDownY = -1
@ -158,14 +164,14 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
private fun setupAdapter(widgetsListItems: ArrayList<WidgetsListItem>) {
activity?.runOnUiThread {
val currAdapter = widgets_list.adapter
val currAdapter = binding.widgetsList.adapter
if (currAdapter == null) {
WidgetsAdapter(activity!!, widgetsListItems, this) {
context.toast(R.string.touch_hold_widget)
ignoreTouches = false
touchDownY = -1
}.apply {
widgets_list.adapter = this
binding.widgetsList.adapter = this
}
} else {
(currAdapter as WidgetsAdapter).updateItems(widgetsListItems)
@ -178,7 +184,7 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
return
}
widgets_fastscroller.updateColors(context.getProperPrimaryColor())
binding.widgetsFastscroller.updateColors(context.getProperPrimaryColor())
var bottomListPadding = 0
var leftListPadding = 0
@ -204,14 +210,14 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
}
widgets_list.setPadding(0, 0, 0, bottomListPadding)
widgets_fastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
binding.widgetsList.setPadding(0, 0, 0, bottomListPadding)
binding.widgetsFastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
hasTopPadding = addTopPadding
val topPadding = if (addTopPadding) activity!!.statusBarHeight else 0
setPadding(0, topPadding, 0, 0)
background = ColorDrawable(context.getProperBackgroundColor())
(widgets_list.adapter as? WidgetsAdapter)?.updateTextColor(context.getProperTextColor())
(binding.widgetsList.adapter as? WidgetsAdapter)?.updateTextColor(context.getProperTextColor())
}
private fun getAppMetadataFromPackage(packageName: String): WidgetsListSection? {
@ -238,6 +244,11 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
override fun onWidgetLongPressed(appWidget: AppWidget) {
if (appWidget.heightCells > context.config.homeRowCount - 1 || appWidget.widthCells > context.config.homeColumnCount) {
context.showErrorToast(context.getString(R.string.widget_too_big))
return
}
val type = if (appWidget.isShortcut) {
ITEM_TYPE_SHORTCUT
} else {
@ -250,6 +261,7 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
-1,
-1,
-1,
0,
appWidget.appPackageName,
"",
"",
@ -257,7 +269,8 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
appWidget.className,
-1,
"",
"",
null,
false,
null,
appWidget.widgetPreviewImage,
appWidget.providerInfo,

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.launcher.helpers
import android.content.Context
import com.simplemobiletools.commons.helpers.BaseConfig
import com.simplemobiletools.launcher.R
class Config(context: Context) : BaseConfig(context) {
companion object {
@ -11,4 +12,24 @@ class Config(context: Context) : BaseConfig(context) {
var wasHomeScreenInit: Boolean
get() = prefs.getBoolean(WAS_HOME_SCREEN_INIT, false)
set(wasHomeScreenInit) = prefs.edit().putBoolean(WAS_HOME_SCREEN_INIT, wasHomeScreenInit).apply()
var homeColumnCount: Int
get() = prefs.getInt(HOME_COLUMN_COUNT, COLUMN_COUNT)
set(homeColumnCount) = prefs.edit().putInt(HOME_COLUMN_COUNT, homeColumnCount).apply()
var homeRowCount: Int
get() = prefs.getInt(HOME_ROW_COUNT, ROW_COUNT)
set(homeRowCount) = prefs.edit().putInt(HOME_ROW_COUNT, homeRowCount).apply()
var drawerColumnCount: Int
get() = prefs.getInt(DRAWER_COLUMN_COUNT, context.resources.getInteger(R.integer.portrait_column_count))
set(drawerColumnCount) = prefs.edit().putInt(DRAWER_COLUMN_COUNT, drawerColumnCount).apply()
var showSearchBar: Boolean
get() = prefs.getBoolean(SHOW_SEARCH_BAR, true)
set(showSearchBar) = prefs.edit().putBoolean(SHOW_SEARCH_BAR, showSearchBar).apply()
var closeAppDrawer: Boolean
get() = prefs.getBoolean(CLOSE_APP_DRAWER, false)
set(closeAppDrawer) = prefs.edit().putBoolean(CLOSE_APP_DRAWER, closeAppDrawer).apply()
}

View File

@ -5,10 +5,19 @@ const val WIDGET_LIST_ITEMS_HOLDER = 1
// shared prefs
const val WAS_HOME_SCREEN_INIT = "was_home_screen_init"
const val HOME_ROW_COUNT = "home_row_count"
const val HOME_COLUMN_COUNT = "home_column_count"
const val DRAWER_COLUMN_COUNT = "drawer_column_count"
const val SHOW_SEARCH_BAR = "show_search_bar"
const val CLOSE_APP_DRAWER = "close_app_drawer"
// default home screen grid size
const val ROW_COUNT = 6
const val COLUMN_COUNT = 5
const val MIN_ROW_COUNT = 2
const val MAX_ROW_COUNT = 15
const val MIN_COLUMN_COUNT = 2
const val MAX_COLUMN_COUNT = 15
const val UNINSTALL_APP_REQUEST_CODE = 50
const val REQUEST_CONFIGURE_WIDGET = 51
@ -18,6 +27,7 @@ const val REQUEST_CREATE_SHORTCUT = 53
const val ITEM_TYPE_ICON = 0
const val ITEM_TYPE_WIDGET = 1
const val ITEM_TYPE_SHORTCUT = 2
const val ITEM_TYPE_FOLDER = 3
const val WIDGET_HOST_ID = 12345
const val MAX_CLICK_DURATION = 150

View File

@ -4,4 +4,8 @@ interface FlingListener {
fun onFlingUp()
fun onFlingDown()
fun onFlingRight()
fun onFlingLeft()
}

View File

@ -1,9 +1,6 @@
package com.simplemobiletools.launcher.interfaces
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.*
import com.simplemobiletools.launcher.models.HomeScreenGridItem
@Dao
@ -11,6 +8,9 @@ interface HomeScreenGridItemsDao {
@Query("SELECT * FROM home_screen_grid_items")
fun getAllItems(): List<HomeScreenGridItem>
@Query("SELECT * FROM home_screen_grid_items WHERE parent_id = :folderId")
fun getFolderItems(folderId: Long): List<HomeScreenGridItem>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(item: HomeScreenGridItem): Long
@ -23,12 +23,36 @@ interface HomeScreenGridItemsDao {
@Query("UPDATE home_screen_grid_items SET title = :title WHERE id = :id")
fun updateItemTitle(title: String, id: Long): Int
@Query("UPDATE home_screen_grid_items SET `left` = :left, `top` = :top, `right` = :right, `bottom` = :bottom WHERE id = :id")
fun updateItemPosition(left: Int, top: Int, right: Int, bottom: Int, id: Long)
@Query("UPDATE home_screen_grid_items SET `left` = :left, `top` = :top, `right` = :right, `bottom` = :bottom, `page` = :page, `docked` = :docked , `parent_id` = :parentId WHERE id = :id")
fun updateItemPosition(left: Int, top: Int, right: Int, bottom: Int, page: Int, docked: Boolean, parentId: Long?, id: Long)
@Query("DELETE FROM home_screen_grid_items WHERE id = :id")
fun deleteById(id: Long)
fun deleteItemById(id: Long)
@Query("DELETE FROM home_screen_grid_items WHERE parent_id = :id")
fun deleteItemsWithParentId(id: Long)
@Transaction
fun deleteById(id: Long) {
deleteItemById(id)
deleteItemsWithParentId(id)
}
@Query("DELETE FROM home_screen_grid_items WHERE package_name = :packageName")
fun deleteByPackageName(packageName: String)
fun deleteItemByPackageName(packageName: String)
@Query("DELETE FROM home_screen_grid_items WHERE parent_id IN (SELECT id FROM home_screen_grid_items WHERE package_name = :packageName)")
fun deleteItemsByParentPackageName(packageName: String)
@Query("UPDATE home_screen_grid_items SET `left` = `left` + :shiftBy WHERE parent_id == :folderId AND `left` > :shiftFrom AND id != :excludingId")
fun shiftFolderItems(folderId: Long, shiftFrom: Int, shiftBy: Int, excludingId: Long? = null)
@Query("UPDATE home_screen_grid_items SET `page` = `page` + :shiftBy WHERE `page` > :shiftFrom")
fun shiftPage(shiftFrom: Int, shiftBy: Int)
@Transaction
fun deleteByPackageName(packageName: String) {
deleteItemByPackageName(packageName)
deleteItemsByParentPackageName(packageName)
}
}

View File

@ -0,0 +1,28 @@
package com.simplemobiletools.launcher.interfaces
import android.view.Menu
import com.simplemobiletools.launcher.models.HomeScreenGridItem
interface ItemMenuListener {
fun onAnyClick()
fun hide(gridItem: HomeScreenGridItem)
fun rename(gridItem: HomeScreenGridItem)
fun resize(gridItem: HomeScreenGridItem)
fun appInfo(gridItem: HomeScreenGridItem)
fun remove(gridItem: HomeScreenGridItem)
fun uninstall(gridItem: HomeScreenGridItem)
fun onDismiss()
fun beforeShow(menu: Menu)
}
abstract class ItemMenuListenerAdapter : ItemMenuListener {
override fun onAnyClick() = Unit
override fun hide(gridItem: HomeScreenGridItem) = Unit
override fun rename(gridItem: HomeScreenGridItem) = Unit
override fun resize(gridItem: HomeScreenGridItem) = Unit
override fun appInfo(gridItem: HomeScreenGridItem) = Unit
override fun remove(gridItem: HomeScreenGridItem) = Unit
override fun uninstall(gridItem: HomeScreenGridItem) = Unit
override fun onDismiss() = Unit
override fun beforeShow(menu: Menu) = Unit
}

View File

@ -3,6 +3,7 @@ package com.simplemobiletools.launcher.models
import android.appwidget.AppWidgetProviderInfo
import android.content.pm.ActivityInfo
import android.graphics.Bitmap
import android.graphics.Point
import android.graphics.drawable.Drawable
import androidx.room.*
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_ICON
@ -15,15 +16,17 @@ data class HomeScreenGridItem(
@ColumnInfo(name = "top") var top: Int,
@ColumnInfo(name = "right") var right: Int,
@ColumnInfo(name = "bottom") var bottom: Int,
@ColumnInfo(name = "page") var page: Int,
@ColumnInfo(name = "package_name") var packageName: String,
@ColumnInfo(name = "activity_name") var activityName: String, // needed at apps that create multiple icons at install, not just the launcher
@ColumnInfo(name = "title") var title: String,
@ColumnInfo(name = "type") var type: Int,
@ColumnInfo(name = "class_name") var className: String,
@ColumnInfo(name = "widget_id") var widgetId: Int,
@ColumnInfo(name = "intent") var intent: String, // used at static and dynamic shortcuts on click
@ColumnInfo(name = "shortcut_id") var shortcutId: String, // used at pinned shortcuts at startLauncher call
@ColumnInfo(name = "icon") var icon: Bitmap? = null, // store images of pinned shortcuts, those cannot be retrieved after creating
@ColumnInfo(name = "docked") var docked: Boolean = false, // special flag, meaning that page, top and bottom don't matter for this item, it is always at the bottom of the screen
@ColumnInfo(name = "parent_id") var parentId: Long? = null, // id of folder this item is in (if it is in any)
@Ignore var drawable: Drawable? = null,
@Ignore var providerInfo: AppWidgetProviderInfo? = null, // used at widgets
@ -31,7 +34,11 @@ data class HomeScreenGridItem(
@Ignore var widthCells: Int = 1,
@Ignore var heightCells: Int = 1
) {
constructor() : this(null, -1, -1, -1, -1, "", "", "", ITEM_TYPE_ICON, "", -1, "", "", null, null, null, null, 1, 1)
companion object {
const val FOLDER_MAX_CAPACITY = 16
}
constructor() : this(null, -1, -1, -1, -1, 0, "", "", "", ITEM_TYPE_ICON, "", -1, "", null, false, null, null, null, null, 1, 1)
fun getWidthInCells() = if (right == -1 || left == -1) {
widthCells
@ -45,5 +52,23 @@ data class HomeScreenGridItem(
bottom - top + 1
}
fun getDockAdjustedTop(rowCount: Int): Int {
return if (!docked) {
top
} else {
rowCount - 1
}
}
fun getDockAdjustedBottom(rowCount: Int): Int {
return if (!docked) {
bottom
} else {
rowCount - 1
}
}
fun getItemIdentifier() = "$packageName/$activityName"
fun getTopLeft(rowCount: Int) = Point(left, getDockAdjustedTop(rowCount))
}

View File

@ -0,0 +1,16 @@
package com.simplemobiletools.launcher.views
import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import android.view.View
class HomeScreenGridDrawingArea @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
(parent as HomeScreenGrid).drawInto(canvas)
}
}

View File

@ -7,13 +7,14 @@ import android.os.Handler
import android.view.MotionEvent
import android.view.ViewConfiguration
import com.simplemobiletools.launcher.R
import kotlin.math.abs
class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) {
private var longPressHandler = Handler()
private var actionDownCoords = PointF()
private var currentCoords = PointF()
private var actionDownMS = 0L
private val moveGestureThreshold = resources.getDimension(R.dimen.move_gesture_threshold).toInt()
private val moveGestureThreshold = resources.getDimension(R.dimen.move_gesture_threshold).toInt() / 4
var hasLongPressed = false
var ignoreTouches = false
var longPressListener: ((x: Float, y: Float) -> Unit)? = null
@ -47,12 +48,18 @@ class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) {
currentCoords.y = event.rawY
actionDownMS = System.currentTimeMillis()
}
MotionEvent.ACTION_MOVE -> {
currentCoords.x = event.rawX
currentCoords.y = event.rawY
if (abs(actionDownCoords.x - currentCoords.x) > moveGestureThreshold ) {
resetTouches()
return true
}
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
longPressHandler.removeCallbacksAndMessages(null)
resetTouches()
}
}
@ -60,10 +67,17 @@ class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) {
}
private val longPressRunnable = Runnable {
if (Math.abs(actionDownCoords.x - currentCoords.x) < moveGestureThreshold && Math.abs(actionDownCoords.y - currentCoords.y) < moveGestureThreshold) {
if (abs(actionDownCoords.x - currentCoords.x) < moveGestureThreshold && abs(actionDownCoords.y - currentCoords.y) < moveGestureThreshold) {
longPressHandler.removeCallbacksAndMessages(null)
hasLongPressed = true
longPressListener?.invoke(actionDownCoords.x, actionDownCoords.y)
}
}
fun resetTouches() {
longPressHandler.removeCallbacksAndMessages(null)
}
private fun hasFingerMoved(x: Float, y: Float) =
((abs(actionDownCoords.x - x) > moveGestureThreshold) || (abs(actionDownCoords.y - y) > moveGestureThreshold))
}

View File

@ -9,11 +9,11 @@ import android.util.AttributeSet
import android.view.MotionEvent
import android.widget.RelativeLayout
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.extensions.config
import com.simplemobiletools.launcher.extensions.getCellCount
import com.simplemobiletools.launcher.helpers.COLUMN_COUNT
import com.simplemobiletools.launcher.helpers.MAX_CLICK_DURATION
import com.simplemobiletools.launcher.helpers.ROW_COUNT
import com.simplemobiletools.launcher.models.HomeScreenGridItem
import kotlinx.collections.immutable.toImmutableList
@SuppressLint("ViewConstructor")
class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) {
@ -49,7 +49,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
resizeWidgetLinePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
color = Color.WHITE
strokeWidth = context.resources.getDimension(R.dimen.tiny_margin)
strokeWidth = context.resources.getDimension(com.simplemobiletools.commons.R.dimen.tiny_margin)
style = Paint.Style.STROKE
}
@ -76,12 +76,12 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
it.provider.className == gridItem.className
} ?: return
minResizeWidthCells = Math.min(COLUMN_COUNT, context.getCellCount(providerInfo.minResizeWidth))
minResizeHeightCells = Math.min(ROW_COUNT, context.getCellCount(providerInfo.minResizeHeight))
minResizeWidthCells = Math.min(context.config.homeColumnCount, context.getCellCount(providerInfo.minResizeWidth))
minResizeHeightCells = Math.min(context.config.homeRowCount, context.getCellCount(providerInfo.minResizeHeight))
redrawFrame()
occupiedCells.clear()
allGridItems.forEach { item ->
allGridItems.toImmutableList().forEach { item ->
for (xCell in item.left..item.right) {
for (yCell in item.top..item.bottom) {
occupiedCells.add(Pair(xCell, yCell))
@ -123,6 +123,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
dragDirection = DRAGGING_BOTTOM
}
}
MotionEvent.ACTION_MOVE -> {
val minWidth = minResizeWidthCells * cellWidth
val minHeight = minResizeHeightCells * cellHeight
@ -153,6 +154,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
frameRect.left = wantedLeft
}
DRAGGING_TOP -> {
val newHeight = frameRect.bottom - event.rawY.toInt()
val wantedTop = if (newHeight >= minHeight) {
@ -179,6 +181,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
frameRect.top = wantedTop
}
DRAGGING_RIGHT -> {
val newWidth = event.rawX.toInt() - frameRect.left
val wantedRight = if (newWidth >= minWidth) {
@ -205,6 +208,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
frameRect.right = wantedRight
}
DRAGGING_BOTTOM -> {
val newHeight = event.rawY.toInt() - frameRect.top
val wantedBottom = if (newHeight >= minHeight) {
@ -224,7 +228,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
}
}
if (wantedBottomCellY == ROW_COUNT - 1) {
if (wantedBottomCellY == context.config.homeRowCount - 1) {
areAllCellsFree = false
}
@ -241,6 +245,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
redrawFrame()
}
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
if (dragDirection == DRAGGING_NONE) {
onClickListener?.invoke()
@ -269,6 +274,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
frameRect.left = cellsRect.left * cellWidth + sideMargins.left
}
}
DRAGGING_TOP -> {
val wantedTop = roundToClosestMultiplyOfNumber(frameRect.top - sideMargins.top, cellHeight)
val wantedTopCellY = wantedTop / cellHeight
@ -289,6 +295,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
frameRect.top = cellsRect.top * cellHeight + sideMargins.top
}
}
DRAGGING_RIGHT -> {
val wantedRight = roundToClosestMultiplyOfNumber(frameRect.right - sideMargins.left, cellWidth)
val wantedRightCellX = wantedRight / cellWidth - 1
@ -309,6 +316,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
frameRect.right = (cellsRect.right + 1) * cellWidth + sideMargins.left
}
}
DRAGGING_BOTTOM -> {
val wantedBottom = roundToClosestMultiplyOfNumber(frameRect.bottom - sideMargins.top, cellHeight)
val wantedBottomCellY = wantedBottom / cellHeight - 1
@ -322,7 +330,7 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
}
}
if (wantedBottomCellY == ROW_COUNT - 1) {
if (wantedBottomCellY == context.config.homeRowCount - 1) {
areAllCellsFree = false
}

View File

@ -4,18 +4,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.simplemobiletools.launcher.views.HomeScreenGrid
<include
android:id="@+id/home_screen_grid"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.simplemobiletools.launcher.views.MyAppWidgetResizeFrame
android:id="@+id/resize_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</com.simplemobiletools.launcher.views.HomeScreenGrid>
layout="@layout/home_screen_grid" />
<include
android:id="@+id/all_apps_fragment"

View File

@ -69,7 +69,7 @@
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_top_corners">
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_purchase_thank_you"
@ -85,7 +85,7 @@
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_bottom_corners">
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_use_english"
@ -125,7 +125,7 @@
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_bottom_corners">
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_manage_hidden_icons"
@ -135,6 +135,132 @@
android:text="@string/manage_hidden_icons" />
</RelativeLayout>
<include
android:id="@+id/settings_general_settings_divider"
layout="@layout/divider" />
<TextView
android:id="@+id/settings_drawer_settings_label"
style="@style/SettingsSectionLabelStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_drawer_settings" />
<RelativeLayout
android:id="@+id/settings_drawer_column_count_holder"
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_drawer_column_count_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/column_count" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_drawer_column_count"
style="@style/SettingsTextValueStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_drawer_column_count_label"
tools:text="3" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_drawer_search_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_search_bar"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_search" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_close_app_drawer_on_other_app_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_close_app_drawer_on_other_app"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/close_app_drawer_on_app_open" />
</RelativeLayout>
<include
android:id="@+id/settings_drawer_settings_divider"
layout="@layout/divider" />
<TextView
android:id="@+id/settings_home_screen_label"
style="@style/SettingsSectionLabelStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/home_screen_settings" />
<RelativeLayout
android:id="@+id/settings_home_screen_row_count_holder"
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_home_screen_row_count_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/row_count" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_home_screen_row_count"
style="@style/SettingsTextValueStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_home_screen_row_count_label"
tools:text="3" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_home_screen_column_count_holder"
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_home_screen_column_count_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/column_count" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_home_screen_column_count"
style="@style/SettingsTextValueStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_home_screen_column_count_label"
tools:text="3" />
</RelativeLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -5,10 +5,16 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MySearchMenu
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
android:id="@+id/all_apps_fastscroller"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/search_bar"
app:fastScrollEnabled="false">
<com.simplemobiletools.commons.views.MyRecyclerView
@ -20,4 +26,21 @@
app:spanCount="@integer/portrait_column_count" />
</com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/no_results_placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/search_bar"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/bigger_margin"
android:alpha="0.8"
android:gravity="center"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:text="@string/no_items_found"
android:textSize="@dimen/bigger_text_size"
android:textStyle="italic"
android:visibility="gone" />
</com.simplemobiletools.launcher.fragments.AllAppsFragment>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dialog_folder_icons_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/small_margin"
android:layout_marginTop="@dimen/medium_margin"
android:layout_marginEnd="@dimen/small_margin"
android:minHeight="@dimen/min_folder_view_height"
app:layout_constraintHeight_max="@dimen/max_folder_view_height">
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/dialog_folder_icons_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="10"
tools:listitem="@layout/item_launcher_label" />
</androidx.core.widget.NestedScrollView>
</FrameLayout>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.launcher.views.HomeScreenGrid xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_screen_grid"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Drawing area with Z translation so it is drawn over widgets -->
<com.simplemobiletools.launcher.views.HomeScreenGridDrawingArea
android:id="@+id/drawing_area"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:translationZ="1dp"/>
<com.simplemobiletools.launcher.views.MyAppWidgetResizeFrame
android:id="@+id/resize_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</com.simplemobiletools.launcher.views.HomeScreenGrid>

View File

@ -27,4 +27,10 @@
android:maxLines="2"
android:textSize="@dimen/smaller_text_size" />
<View
android:id="@+id/popup_anchor"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center_horizontal|top" />
</RelativeLayout>

View File

@ -1,34 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/app_info"
android:icon="@drawable/ic_info_vector"
android:title="@string/app_info"
app:showAsAction="always" />
<item
android:id="@+id/hide_icon"
android:icon="@drawable/ic_hide_vector"
android:title="@string/hide"
app:showAsAction="always" />
<item
android:id="@+id/resize"
android:icon="@drawable/ic_resize_vector"
android:title="@string/resize"
app:showAsAction="always" />
<item
android:id="@+id/rename"
android:icon="@drawable/ic_rename_vector"
android:title="@string/rename"
app:showAsAction="always" />
<item
android:id="@+id/remove"
android:icon="@drawable/ic_cross_vector"
android:title="@string/remove"
app:showAsAction="always" />
<item
android:id="@+id/uninstall"
android:icon="@drawable/ic_delete_vector"
android:title="@string/uninstall"
app:showAsAction="always" />
<group android:id="@+id/group_main">
<item
android:id="@+id/app_info"
android:icon="@drawable/ic_info_vector"
android:title="@string/app_info"
app:showAsAction="always" />
<item
android:id="@+id/hide_icon"
android:icon="@drawable/ic_hide_vector"
android:title="@string/hide"
app:showAsAction="always" />
<item
android:id="@+id/resize"
android:icon="@drawable/ic_resize_vector"
android:title="@string/resize"
app:showAsAction="always" />
<item
android:id="@+id/rename"
android:icon="@drawable/ic_rename_vector"
android:title="@string/rename"
app:showAsAction="always" />
<item
android:id="@+id/remove"
android:icon="@drawable/ic_cross_vector"
android:title="@string/remove"
app:showAsAction="always" />
<item
android:id="@+id/uninstall"
android:icon="@drawable/ic_delete_vector"
android:title="@string/uninstall"
app:showAsAction="always" />
</group>
<group android:id="@+id/group_shortcuts" />
</menu>

View File

@ -11,6 +11,10 @@
<string name="manage_hidden_icons">إدارة اﻷيقونات المخفية</string>
<string name="hidden_icons">اﻷيقونات المخفية</string>
<string name="hidden_icons_placeholder">لا يمكن إلغاء تثبيت بعض التطبيقات بسبب قيود النظام، ولكن يمكن إخفاء أيقوناتها لتجنب ظهورها.</string>
<string name="app_drawer_settings">درج التطبيق</string>
<string name="close_app_drawer_on_app_open">إغلاق درج التطبيق عند فتح تطبيق</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">الأداة كبيرة جدًا بالنسبة لحجم الشاشة الرئيسية الحالي</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Обикновен Начален Екран</string>
<string name="app_launcher_name">Начален Екран</string>
<string name="launcher_settings">Начален Екран Настройки</string>
<string name="app_info">Информация за приложението</string>
<string name="touch_hold_widget">Натиснете дълго приспособлението и го плъзнете на началния екран</string>
<string name="uninstall">Деинсталиране</string>
<string name="hide_icon">Скриване на иконата</string>
<string name="add_hidden_icons">Добавяне на скритите икони</string>
<string name="manage_hidden_icons">Управлявай скритите икони</string>
<string name="hidden_icons">Скрити икони</string>
<string name="hidden_icons_placeholder">Някои приложения не могат да бъдат деинсталирани поради системни ограничения, но можете поне да скриете иконите им, за да не ги виждате.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Gestiona les icones ocultes</string>
<string name="hidden_icons">Icones ocultes</string>
<string name="hidden_icons_placeholder">Algunes aplicacions no es poden desinstal·lar a causa de les restriccions del sistema, però almenys podeu ocultar les seves icones per evitar que es vegin.</string>
<string name="app_drawer_settings">Calaix d\'aplicacions</string>
<string name="close_app_drawer_on_app_open">Tanca el calaix d\'aplicacions en obrir una aplicació</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">El giny és massa gros per a la mida de la pantalla d\'inici actual</string>
</resources>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Simple Launcher</string>
<string name="app_launcher_name">Launcher</string>
<string name="launcher_settings">ڕێکخستنەکان</string>
<string name="app_info">زانیاری بەرنامە</string>
<string name="touch_hold_widget">ماوەیەک دەست ڕاگرە لەسەر کورتکراوەکە بۆ زیادکردن بۆسەر شاشەی سەرەکی</string>
<string name="uninstall">سڕینەوە</string>
<string name="hide_icon">شاردنەوەی ئایکۆن</string>
<string name="add_hidden_icons">زیادکردنی ئایکۆنە شاراوەکان</string>
<string name="manage_hidden_icons">ڕێکخستنی ئایکۆنە شاراوەکان</string>
<string name="hidden_icons">ئایکۆنە شاراوەکان</string>
<string name="hidden_icons_placeholder">هەندێ بەرنامە ناتوانرێ بسڕدرێتەوە بەهۆی ڕێگریکردنی سیستەمەوە، بەڵام ئەتوانی ئایکۆنەکەی بشاریتەوە لە لیستەکەدا.</string>
<string name="app_drawer_settings">پیشاندانی بەرنامەکان</string>
<string name="close_app_drawer_on_app_open">داخستنی پیشاندەری بەرنامەکان لەکاتی کردنەوەی بەرنامەکاندا</string>
<string name="home_screen_settings">شاشەی سەرەکی</string>
<string name="widget_too_big">قەبارەی کورتکراوەکە زۆر گەورەیە بۆ زیادکردنی بۆ شاشەی سەرەکی</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Spravovat skryté ikony</string>
<string name="hidden_icons">Skryté ikony</string>
<string name="hidden_icons_placeholder">Některé aplikace nelze kvůli systémovým omezením odinstalovat. Ale můžete alespoň skrýt jejich ikony, abyste je neviděli.</string>
</resources>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Ausgeblendete Symbole verwalten</string>
<string name="hidden_icons">Ausgeblendete Symbole</string>
<string name="hidden_icons_placeholder">Einige Apps können aufgrund von Systemeinschränkungen nicht deinstalliert werden, aber du kannst zumindest ihre Symbole ausblenden, um sie nicht zu sehen.</string>
</resources>
<string name="app_drawer_settings">App-Schublade</string>
<string name="close_app_drawer_on_app_open">App-Schublade beim Öffnen einer App schließen</string>
<string name="home_screen_settings">Startbildschirm</string>
<string name="widget_too_big">Das Widget ist zu groß für den aktuellen Startbildschirm</string>
</resources>

View File

@ -10,7 +10,11 @@
<string name="add_hidden_icons">Προσθήκη κρυφών εικονιδίων</string>
<string name="manage_hidden_icons">Διαχείριση κρυφών εικονιδίων</string>
<string name="hidden_icons">Κρυφά εικονίδια</string>
<string name="hidden_icons_placeholder">Ορισμένες εφαρμογές δεν μπορούν να απεγκατασταθούν λόγω περιορισμών του συστήματος, αλλά μπορείτε να αποκρύψετε τα εικονίδια τους για να μην τις βλέπετε.</string>
<string name="hidden_icons_placeholder">Ορισμένες εφαρμογές δεν μπορούν να απεγκατασταθούν λόγω περιορισμών του συστήματος, αλλά μπορείτε να αποκρύψετε τα εικονίδια τους για να μην φαίνονται.</string>
<string name="app_drawer_settings">Συρτάρι εφαρμογών</string>
<string name="close_app_drawer_on_app_open">Κλείστε το συρτάρι εφαρμογών κατά το άνοιγμα μιας εφαρμογής</string>
<string name="home_screen_settings">Αρχική οθόνη</string>
<string name="widget_too_big">Το γραφικό είναι πολύ μεγάλο για το τρέχον μέγεθος της αρχικής οθόνης</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Gestionar los iconos ocultos</string>
<string name="hidden_icons">Iconos ocultos</string>
<string name="hidden_icons_placeholder">Algunas aplicaciones no se pueden desinstalar debido a las restricciones del sistema, pero al menos puedes ocultar sus iconos para evitar verlas.</string>
</resources>
<string name="app_drawer_settings">Cajón de aplicaciones</string>
<string name="close_app_drawer_on_app_open">Cerrar el cajón de aplicaciones al abrir una aplicación</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">El widget es demasiado grande para el tamaño actual de la pantalla de inicio</string>
</resources>

View File

@ -5,10 +5,14 @@
<string name="launcher_settings">Käivitaja seadistused</string>
<string name="app_info">Rakenduse teave</string>
<string name="touch_hold_widget">Vajutage pikalt vidinat ja lohistage see oma koduekraanile</string>
<string name="uninstall">Desinstallige</string>
<string name="uninstall">Eemalda rakendus</string>
<string name="hide_icon">Peida ikoon</string>
<string name="add_hidden_icons">Lisa peidetud ikoone</string>
<string name="manage_hidden_icons">Halda peidetud ikoone</string>
<string name="hidden_icons">Peidetud ikoonid</string>
<string name="hidden_icons_placeholder">Mõnda rakendust ei saa süsteemipiirangute tõttu eemaldada. Selleks, et neid mitte näha, võid vähemalt nende ikoonid ära peita.</string>
</resources>
<string name="app_drawer_settings">Rakenduste kaust</string>
<string name="close_app_drawer_on_app_open">Rakenduse avamisel sulge rakenduste kausta vaade</string>
<string name="home_screen_settings">Avaleht</string>
<string name="widget_too_big">Vidin on liiga suur praeguse ekraanimõõdu jaoks</string>
</resources>

View File

@ -2,13 +2,17 @@
<resources>
<string name="app_name">Yksinkertainen käynnistin</string>
<string name="app_launcher_name">Käynnistin</string>
<string name="launcher_settings">Launcher Settings</string>
<string name="launcher_settings">Käynnistimen asetukset</string>
<string name="app_info">Sovelluksen tiedot</string>
<string name="touch_hold_widget">Paina widgettiä pitkään ja vedä se aloitusnäytöllesi</string>
<string name="uninstall">Poista asennus</string>
<string name="hide_icon">Hide icon</string>
<string name="add_hidden_icons">Add hidden icons</string>
<string name="manage_hidden_icons">Manage hidden icons</string>
<string name="hidden_icons">Hidden icons</string>
<string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>
<string name="hide_icon">Piilota kuvake</string>
<string name="add_hidden_icons">Lisää piilotettuja kuvakkeita</string>
<string name="manage_hidden_icons">Hallitse piilotettuja kuvakkeita</string>
<string name="hidden_icons">Piilotetut kuvakkeet</string>
<string name="hidden_icons_placeholder">Joitakin sovelluksia ei ole järjestelmärajoitusten vuoksi mahdollista poistaa, mutta voit kuitenkin piilottaa niiden kuvakkeet näkyvistä.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Gérer les icônes cachées</string>
<string name="hidden_icons">Icônes cachées</string>
<string name="hidden_icons_placeholder">Certaines applications ne peuvent pas être désinstallées en raison de restrictions du système, mais vous pouvez au moins masquer leurs icônes pour éviter de les voir.</string>
<string name="app_drawer_settings">Tiroir d\'appli</string>
<string name="close_app_drawer_on_app_open">Fermer le tiroir de l\'appli à l\'ouverture d\'une application</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Le widget est trop grand pour la taille actuelle de l\'écran</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Xestionar iconas ocultas</string>
<string name="hidden_icons">Iconas ocultas</string>
<string name="hidden_icons_placeholder">Algunhas aplicacións non se poden desinstalar debido ás restricións do sistema, pero polo menos podes ocultar as súas iconas para evitar velas.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -4,11 +4,15 @@
<string name="app_launcher_name">Pokretač</string>
<string name="launcher_settings">Postavke pokretača</string>
<string name="app_info">Informacije o aplikaciji</string>
<string name="touch_hold_widget">Dugo pritisnite dodatak i povucite ga na početni zaslon</string>
<string name="touch_hold_widget">Pritisni widget i povuci ga na početni ekran</string>
<string name="uninstall">Deinstaliraj</string>
<string name="hide_icon">Sakrij ikonu</string>
<string name="add_hidden_icons">Dodajte skrivene ikone</string>
<string name="manage_hidden_icons">Upravljanje skrivenim ikonama</string>
<string name="hidden_icons">Skrivene ikone</string>
<string name="hidden_icons_placeholder">Neke aplikacije nije moguće deinstalirati zbog ograničenja sustava, ali možete barem sakriti njihove ikone da ih ne vidite.</string>
</resources>
<string name="hidden_icons_placeholder">Neke aplikacije se ne mogu deinstalirati zbog ograničenja sustava, ali njihove ikone možeš sakriti.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Rejtett ikonok kezelése</string>
<string name="hidden_icons">Rejtett ikonok</string>
<string name="hidden_icons_placeholder">Egyes alkalmazások rendszerkorlátozások miatt nem távolíthatók el, de legalább elrejtheti az ikonjaikat, hogy ne lássa őket.</string>
<string name="app_drawer_settings">Alkalmazásfiók</string>
<string name="close_app_drawer_on_app_open">Alkalmazásfiók bezárása egy alkalmazás megnyitásakor</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">A modul túl nagy az aktuális kezdőképernyő méretéhez</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Kelola ikon tersembunyi</string>
<string name="hidden_icons">Ikon tersembunyi</string>
<string name="hidden_icons_placeholder">Beberapa aplikasi tidak dapat di-uninstal karena keterbatasan sistem, tetapi Anda masih dapat menyembunyikan ikon mereka untuk menyembunyikannya.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Gestisci le icone nascoste</string>
<string name="hidden_icons">Icone nascoste</string>
<string name="hidden_icons_placeholder">Alcune applicazioni non possono essere disinstallate a causa di restrizioni di sistema, ma è possibile almeno nascondere le loro icone per evitare di vederle.</string>
</resources>
<string name="app_drawer_settings">Cassetto app</string>
<string name="close_app_drawer_on_app_open">Chiudi il cassetto app all\'apertura di un\'app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Il widget è troppo grande per le dimensioni attuali della schermata principale</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">ניהול אייקונים נסתרים</string>
<string name="hidden_icons">אייקונים נסתרים</string>
<string name="hidden_icons_placeholder">חלק מהאפליקציות לא ניתנות להסרה עקב הגבלות מערכת, לפחות אתה יכול להחביא את האייקונים כדי לא לראותם במסך הבית.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">非表示アイコンの管理</string>
<string name="hidden_icons">非表示のアイコン</string>
<string name="hidden_icons_placeholder">一部のアプリはシステムの制限によりアンインストールできませんが、非表示によって表示されないようにすることはできます。</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,6 +11,10 @@
<string name="manage_hidden_icons">Manage hidden icons</string>
<string name="hidden_icons">Hidden icons</string>
<string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">മറഞ്ഞിരിക്കുന്ന ബിംബം കൈകാര്യം ചെയ്യുക</string>
<string name="hidden_icons">മറഞ്ഞിരിക്കുന്ന ബിംബ</string>
<string name="hidden_icons_placeholder">സിസ്റ്റം നിയന്ത്രണങ്ങൾ കാരണം ചില ആപ്പുകൾ അൺഇൻസ്‌റ്റാൾ ചെയ്യാൻ കഴിയില്ല, എന്നാൽ അവ കാണാതിരിക്കാൻ നിങ്ങൾക്ക് അവയുടെ ഐക്കണുകളെങ്കിലും മറയ്‌ക്കാം.</string>
</resources>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -1,14 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Simple Launcher</string>
<string name="app_launcher_name">Oppstarter</string>
<string name="launcher_settings">Launcher Settings</string>
<string name="app_launcher_name">App-starter</string>
<string name="launcher_settings">Innstillinger for App-starter</string>
<string name="app_info">Programinfo</string>
<string name="touch_hold_widget">Lang-trykk miniprogrammet og dra det til din hjemmeskjerm</string>
<string name="uninstall">Avinstaller</string>
<string name="hide_icon">Hide icon</string>
<string name="add_hidden_icons">Add hidden icons</string>
<string name="manage_hidden_icons">Manage hidden icons</string>
<string name="hidden_icons">Hidden icons</string>
<string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>
<string name="hide_icon">Skjul ikon</string>
<string name="add_hidden_icons">Legg til skjulte ikoner</string>
<string name="manage_hidden_icons">Håndter skjulte ikoner</string>
<string name="hidden_icons">Skjulte ikoner</string>
<string name="hidden_icons_placeholder">Noen apper kan ikke avinstalleres pga. systemrestriksjoner, men du kan i det minste skjule deres ikoner for å unngå å se dem.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Verborgen iconen beheren</string>
<string name="hidden_icons">Verborgen iconen</string>
<string name="hidden_icons_placeholder">Sommige apps kunnen niet worden verwijderd van het systeem, maar hun iconen kunnen wel worden verborgen.</string>
<string name="app_drawer_settings">App-overzicht</string>
<string name="close_app_drawer_on_app_open">App-overzicht sluiten na het kiezen van een app</string>
<string name="home_screen_settings">Beginscherm</string>
<string name="widget_too_big">Widget is te groot voor de huidige afmetingen van het beginscherm</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">لُکاۓ آئیکون دیاں سیٹنگاں</string>
<string name="hidden_icons">لُکاۓ آئیکون</string>
<string name="hidden_icons_placeholder">سِسٹم پابندیاں کرکے کجھ اَیپاں اݨ‌اینسٹال کر نہیں سکیاں، پر تسیں آئیکون لُکا سکدے او۔</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Zarządzaj ukrytymi ikonami</string>
<string name="hidden_icons">Ukryte ikony</string>
<string name="hidden_icons_placeholder">Niektórych aplikacji nie można odinstalować ze względu na ograniczenia systemowe, ale możesz przynajmniej ukryć ich ikony, aby ich nie widzieć.</string>
<string name="app_drawer_settings">Szuflada aplikacji</string>
<string name="close_app_drawer_on_app_open">Zamykaj szufladę aplikacji przy uruchomieniu aplikacji</string>
<string name="home_screen_settings">Ekran główny</string>
<string name="widget_too_big">Widżet jest za duży dla aktualnego rozmiaru ekranu głównego</string>
</resources>

View File

@ -2,7 +2,7 @@
<resources>
<string name="app_name">Simple Launcher</string>
<string name="app_launcher_name">Launcher</string>
<string name="launcher_settings">Launcher Settings</string>
<string name="launcher_settings">Configurações do Iniciador</string>
<string name="app_info">Informações do aplicativo</string>
<string name="touch_hold_widget">Toque e segure o widget e arraste-o para sua tela inicial</string>
<string name="uninstall">Desinstalar</string>
@ -11,6 +11,10 @@
<string name="manage_hidden_icons">Gerenciar ícones ocultos</string>
<string name="hidden_icons">Ícones ocultos</string>
<string name="hidden_icons_placeholder">Alguns aplicativos não podem ser desinstalados devido a restrições do sistema, mas você pode ao menos ocultar seus ícones para evitar vê-los.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View File

@ -11,8 +11,12 @@
<string name="manage_hidden_icons">Gerir ícones ocultos</string>
<string name="hidden_icons">Ícones ocultos</string>
<string name="hidden_icons_placeholder">Algumas aplicações não podem ser desinstaladas mas pode ocultar os seus ícones.</string>
<string name="app_drawer_settings">Menu de aplicações</string>
<string name="close_app_drawer_on_app_open">Fechar menu de aplicações ao abrir uma aplicação</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">O Widget é muito grande para o ecrã disponível</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Manage hidden icons</string>
<string name="hidden_icons">Hidden icons</string>
<string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Управление скрытыми значками</string>
<string name="hidden_icons">Скрытые значки</string>
<string name="hidden_icons_placeholder">Некоторые приложения нельзя удалить из-за системных ограничений, но можно скрыть их значки.</string>
<string name="app_drawer_settings">Панель приложения</string>
<string name="close_app_drawer_on_app_open">Закрывать боковую панель при открытии приложения</string>
<string name="home_screen_settings">Домашний экран</string>
<string name="widget_too_big">Виджет слишком велик для текущего размера домашнего экрана</string>
</resources>

View File

@ -11,6 +11,10 @@
<string name="manage_hidden_icons">Spravovať skryté ikonky</string>
<string name="hidden_icons">Skryté ikonky</string>
<string name="hidden_icons_placeholder">Niektoré apky nemôžu byť odinštalované kvôli systémovým obmedzeniam, viete ich ale aspoň skryť, aby ste ich nevideli.</string>
<string name="app_drawer_settings">Zoznam apiek</string>
<string name="close_app_drawer_on_app_open">Zavrieť zoznam apiek po spustení apky</string>
<string name="home_screen_settings">Domáca obrazovka</string>
<string name="widget_too_big">Widget je príliš veľký pre súčasnú domácu obrazovku</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Upravljajte s skritimi ikonami</string>
<string name="hidden_icons">Skrite ikone</string>
<string name="hidden_icons_placeholder">Določenih aplikacij zaradi sistemskih omejitev ni mogoče odstraniti, njihove ikone pa skrijete, da jih ne vidite.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Управљајте скривеним иконама</string>
<string name="hidden_icons">Скривене иконе</string>
<string name="hidden_icons_placeholder">Неке апликације се не могу деинсталирати због системских ограничења, али можете барем сакрити њихове иконе да их не видите.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Hantera dolda ikoner</string>
<string name="hidden_icons">Dolda ikoner</string>
<string name="hidden_icons_placeholder">Vissa appar kan inte avinstalleras på grund av systembegränsningar, men du kan åtminstone dölja deras ikoner för att slippa se dem.</string>
<string name="app_drawer_settings">Applåda</string>
<string name="close_app_drawer_on_app_open">Stäng applådan när en app öppnas</string>
<string name="home_screen_settings">Startskärm</string>
<string name="widget_too_big">Widgeten är för stor för startskärmens aktuella storlek</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Gizli simgeleri yönet</string>
<string name="hidden_icons">Gizli simgeler</string>
<string name="hidden_icons_placeholder">Bazı uygulamalar sistem kısıtlamaları nedeniyle kaldırılamaz, ancak en azından onları görmemek için simgelerini gizleyebilirsiniz.</string>
<string name="app_drawer_settings">Uygulama çekmecesi</string>
<string name="close_app_drawer_on_app_open">Bir uygulama açıldığında uygulama çekmecesini kapat</string>
<string name="home_screen_settings">Ana ekran</string>
<string name="widget_too_big">Widget, şu anki ana ekran boyutu için çok büyük</string>
</resources>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Simple Launcher</string>
<string name="app_launcher_name">Launcher</string>
<string name="app_name">Простий Лаунчер</string>
<string name="app_launcher_name">Лаунчер</string>
<string name="launcher_settings">Налаштування</string>
<string name="app_info">Про застосунок</string>
<string name="touch_hold_widget">Натисніть і утримуйте віджет і перетягніть його на головний екран</string>
@ -11,4 +11,8 @@
<string name="manage_hidden_icons">Керування прихованими піктограмами</string>
<string name="hidden_icons">Приховані піктограми</string>
<string name="hidden_icons_placeholder">Деякі застосунки не можна видалити через системні обмеження, але ви можете принаймні приховати їх піктограми, щоб уникнути їх перегляду.</string>
</resources>
<string name="app_drawer_settings">Панель застосунку</string>
<string name="close_app_drawer_on_app_open">Закривати панель застосунок при відкриті застосунку</string>
<string name="home_screen_settings">Домашній екран</string>
<string name="widget_too_big">Віджет надто великий для поточного розміру домашнього екрану</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">ⴰⵙⵡⵓⴷⴷⵓ ⵜⵙⵓⵔⴰ ⵉⴼⴼⵔⵏ</string>
<string name="hidden_icons">ⵜⵉⵙⵓⵔⴰ ⵉⴼⴼⵔⵏ</string>
<string name="hidden_icons_placeholder">ⵓⵔ ⵜⵣⵔⵉⵏ ⵜⵓⵙⵙⵔⴰ ⴽⵔⴰ ⵜⵙⵏⵙⵉⵡⵉⵏ ⵙ ⵜⵎⵏⵜⵉⵍⵜ ⵉⵙⵍⴳⵏⵏ ⵓⵏⴳⵔⴰⵡ, ⵎⴰⵛⴰ ⵜⵣⵔⵉ ⵜⵓⴼⴼⵔⴰ ⵜⵙⵓⵔⴰ ⵏⵏⵙⵏⵜ ⵃⵎⴰ ⵓⵔ ⴷ ⵜⵜⴹⵀⴰⵕⵏⵜ.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
</resources>

View File

@ -11,4 +11,8 @@
<string name="manage_hidden_icons">管理隐藏的图标</string>
<string name="hidden_icons">隐藏的图标</string>
<string name="hidden_icons_placeholder">某些应用因系统限制而无法卸载, 但你至少可以隐藏它们的图标避免看见它们。</string>
<string name="app_drawer_settings">应用抽屉</string>
<string name="close_app_drawer_on_app_open">打开抽屉内应用时关闭抽屉</string>
<string name="home_screen_settings">主屏幕</string>
<string name="widget_too_big">小部件对当前屏幕尺寸而言太大了</string>
</resources>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">簡易啟動器</string>
<string name="app_launcher_name">啟動器</string>
<string name="launcher_settings">啟動器設定</string>
<string name="app_info">應用程式資訊</string>
<string name="touch_hold_widget">長按小工具並將其拖曳至你的主畫面</string>
<string name="uninstall">解除安裝</string>
<string name="hide_icon">隱藏圖示</string>
<string name="add_hidden_icons">新增隱藏圖示</string>
<string name="manage_hidden_icons">管理隱藏圖示</string>
<string name="hidden_icons">隱藏圖示</string>
<string name="hidden_icons_placeholder">由於系統限制,有些應用程式無法被移除,但您至少可以將它們的圖示隱藏起來,避免看到它們。</string>
<string name="app_drawer_settings">應用程式抽屜</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>

View File

@ -5,5 +5,11 @@
<dimen name="widget_preview_size">140dp</dimen>
<dimen name="icon_side_margin">10dp</dimen>
<dimen name="resize_frame_dot_radius">8dp</dimen>
<dimen name="move_gesture_threshold">5dp</dimen>
<dimen name="move_gesture_threshold">20dp</dimen>
<dimen name="page_indicator_dot_radius">6dp</dimen>
<dimen name="page_indicator_stroke_width">1dp</dimen>
<dimen name="page_indicator_margin">6dp</dimen>
<dimen name="min_folder_view_height">200dp</dimen>
<dimen name="max_folder_view_height">500dp</dimen>
<dimen name="menu_icon_size">24dp</dimen>
</resources>

View File

@ -11,6 +11,10 @@
<string name="manage_hidden_icons">Manage hidden icons</string>
<string name="hidden_icons">Hidden icons</string>
<string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>
<string name="app_drawer_settings">App drawer</string>
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
<string name="home_screen_settings">Home screen</string>
<string name="widget_too_big">Widget is too big for current home screen size</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View File

@ -10,6 +10,8 @@
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:enforceNavigationBarContrast">false</item>
<item name="android:enforceStatusBarContrast">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

View File

@ -1,30 +0,0 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

5
build.gradle.kts Normal file
View File

@ -0,0 +1,5 @@
plugins {
alias(libs.plugins.android).apply(false)
alias(libs.plugins.kotlinAndroid).apply(false)
alias(libs.plugins.ksp).apply(false)
}

View File

@ -0,0 +1 @@

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

View File

@ -0,0 +1 @@

Some files were not shown because too many files have changed in this diff Show More