From ba3255d9ec6218c274f3be575e610012cced48cc Mon Sep 17 00:00:00 2001 From: Luke Wass Date: Mon, 19 May 2025 16:34:56 -0500 Subject: [PATCH 01/23] Improve widget list layout --- app/src/main/res/layout/list_widgets_row.xml | 131 ++++++++++++------- 1 file changed, 85 insertions(+), 46 deletions(-) diff --git a/app/src/main/res/layout/list_widgets_row.xml b/app/src/main/res/layout/list_widgets_row.xml index 878aaad..147cc36 100644 --- a/app/src/main/res/layout/list_widgets_row.xml +++ b/app/src/main/res/layout/list_widgets_row.xml @@ -6,55 +6,94 @@ android:id="@+id/list_apps_row_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="15sp"> + android:layout_marginTop="15sp" + android:layout_marginHorizontal="30sp"> - - - - - - - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From a56cc772f71ea38560dc46c57ad5932277038a2b Mon Sep 17 00:00:00 2001 From: Luke Wass Date: Tue, 20 May 2025 11:58:12 -0500 Subject: [PATCH 02/23] Add visual cues and interactive styling to the settings fragment --- app/src/main/res/layout/tutorial_4_setup.xml | 26 ++++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/layout/tutorial_4_setup.xml b/app/src/main/res/layout/tutorial_4_setup.xml index 9650c57..c55bdc8 100644 --- a/app/src/main/res/layout/tutorial_4_setup.xml +++ b/app/src/main/res/layout/tutorial_4_setup.xml @@ -33,17 +33,27 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tutorial_setup_title" /> - + app:layout_constraintEnd_toEndOf="parent"> + + + + Date: Sat, 24 May 2025 13:31:00 +0200 Subject: [PATCH 03/23] prevent crash when unable to access widgetproviderinfo --- .../ui/widgets/manage/ManageWidgetsActivity.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt index 953fc28..38bbb84 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt @@ -147,13 +147,17 @@ class ManageWidgetsActivity : UIObject, Activity() { private fun createWidget(data: Intent) { Log.i("Launcher", "creating widget") val appWidgetManager = (application as Application).appWidgetManager + val appWidgetHost = (application as Application).appWidgetHost val appWidgetId = data.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return - val provider = appWidgetManager.getAppWidgetInfo(appWidgetId) - val display = windowManager.defaultDisplay val widgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId) + if (widgetInfo == null) { + Log.w("Launcher", "can't access widget") + appWidgetHost.deleteAppWidgetId(appWidgetId) + return + } val position = WidgetPosition.findFreeSpace( WidgetPanel.byId(panelId), @@ -161,7 +165,7 @@ class ManageWidgetsActivity : UIObject, Activity() { max(3, (GRID_SIZE * (widgetInfo.minHeight) / display.height.toFloat()).roundToInt()) ) - val widget = AppWidget(appWidgetId, position, panelId, provider) + val widget = AppWidget(appWidgetId, position, panelId, widgetInfo) LauncherPreferences.widgets().widgets( (LauncherPreferences.widgets().widgets() ?: HashSet()).also { it.add(widget) From e4c7ad099420606631011f8bcdafbe894f2ba718 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 17:40:32 +0200 Subject: [PATCH 04/23] prepare docs/ for hugo ssg (see #176) --- docs/_index.md | 0 docs/actions-and-gestures.md | 2 +- docs/alternatives.md | 3 ++ docs/changes-fork.md | 9 ++-- docs/contributing.md | 2 +- docs/home.md | 43 ----------------- docs/settings.md | 89 +++++++++++++++++++----------------- docs/widgets.md | 27 +++++++++++ 8 files changed, 86 insertions(+), 89 deletions(-) create mode 100644 docs/_index.md create mode 100644 docs/alternatives.md delete mode 100644 docs/home.md create mode 100644 docs/widgets.md diff --git a/docs/_index.md b/docs/_index.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/actions-and-gestures.md b/docs/actions-and-gestures.md index f5d831f..a5348a3 100644 --- a/docs/actions-and-gestures.md +++ b/docs/actions-and-gestures.md @@ -1,4 +1,4 @@ -# Gestures and Actions +# Actions and Gestures µLauncher's central mechanism for accessing important functionality quickly is to bind actions (e.g. launching an app) to gestures (e.g. swiping up). diff --git a/docs/alternatives.md b/docs/alternatives.md new file mode 100644 index 0000000..4c875f4 --- /dev/null +++ b/docs/alternatives.md @@ -0,0 +1,3 @@ + +TODO: move the [hedgedoc](https://pad.abstractnonsen.se/foss-launchers) document here. + diff --git a/docs/changes-fork.md b/docs/changes-fork.md index 8efc965..3abe96a 100644 --- a/docs/changes-fork.md +++ b/docs/changes-fork.md @@ -1,3 +1,7 @@ ++++ +title = 'Differences to the original Launcher' ++++ + # Notable changes compared to Finn's Launcher µLauncher is a fork of [finnmglas's app Launcher](https://github.com/finnmglas/Launcher). @@ -51,6 +55,5 @@ The complete list of changes can be viewed [here](https://github.com/jrpie/launc --- -\[original-repo\]: [https://github.com/finnmglas/Launcher](https://github.com/finnmglas/Launcher) - -\[hack-font\]: [https://sourcefoundry.org/hack/](https://sourcefoundry.org/hack/) +[original-repo]: https://github.com/finnmglas/Launcher +[hack-font]: https://sourcefoundry.org/hack/ diff --git a/docs/contributing.md b/docs/contributing.md index 8e9de53..350ba01 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -13,7 +13,7 @@ There are several ways to contribute to this app: - Open a new pull request. -See [build.md](build.md) for instructions how to build this project. +See [here](/docs/build) for instructions how to build this project. The [CI pipeline](https://github.com/jrpie/Launcher/actions) automatically creates debug builds. diff --git a/docs/home.md b/docs/home.md deleted file mode 100644 index 9812e93..0000000 --- a/docs/home.md +++ /dev/null @@ -1,43 +0,0 @@ -# Welcome to the μLauncher Documentation - -## What is μLauncher? - -µLauncher is an *minimal* and *distraction-free* Android home screen that lets you launch apps using [swipe gestures and button presses](/actions-and-gestured.md). - -This project is a fork of [finnmglas's app Launcher](https://github.com/finnmglas/Launcher). An incomplete list of changes can be found [here](https://github.com/wassupluke/Launcher/blob/master/docs/launcher.md). - -## Where can I get μLauncher? - -[![Get it on F-Droid](https://fdroid.gitlab.io/artwork/badge/get-it-on.png)](https://f-droid.org/packages/de.jrpie.android.launcher/) - -[![Get it on Accrescent](https://accrescent.app/badges/get-it-on.png)](https://accrescent.app/app/de.jrpie.android.launcher.accrescent) - -[![Get it on Obtainium](https://raw.githubusercontent.com/ImranR98/Obtainium/b1c8ac6f2ab08497189721a788a5763e28ff64cd/assets/graphics/badge_obtainium.png)](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/{%22id%22:%22de.jrpie.android.launcher%22,%22url%22:%22https://github.com/jrpie/Launcher%22,%22author%22:%22jrpie%22,%22name%22:%22%c2%b5Launcher%22,%22additionalSettings%22:%22{\%22apkFilterRegEx\%22:\%22release\%22,\%22invertAPKFilter\%22:false,\%22about\%22:\%22%c2%b5Launcher%20is%20a%20minimal%20home%20screen.\%22}%22}) - -[![Get it on GitHub](https://raw.githubusercontent.com/NeoApplications/Neo-Backup/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png)](https://github.com/jrpie/launcher/releases/latest) - -> You can also [get it on Google Play](https://play.google.com/store/apps/details?id=de.jrpie.android.launcher), but this is not recommend. - - -## How can I contribute? - -See [docs/contribute](/contribute.md) - -## Screenshots - -![μLauncher Home Screen screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg) - -![μLauncher Settings screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg) - -![μLauncher All Apps list view with icons screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg) - -![μLauncher Favorite Apps list view with icons screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg) - -![μLauncher Choose App to bind to gesture screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg) - -![μLauncher App options card from list view with icons screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg -) - -![μLauncher All Apps list view without icons screenshot](https://github.com/jrpie/launcher/blob/master/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg) - - diff --git a/docs/settings.md b/docs/settings.md index f033f62..3cbfbec 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -1,19 +1,18 @@ -# Launcher Settings +# Settings -Tweaks and customizations can be made from within the Launcher Settings page. +Tweaks and customizations can be made from within the settings page. +The settings can be opened by binding the Settings action to a gesture (this is especially useful when configuring μLauncher for the first time) or from the settings icon in the app drawer.[^1] -These settings let you change wallpapers, change colors and fonts, enable monochrome app icons, change the app drawer layout, and much more. - -In the following documentation, 'app drawer' will be used to refer to the 'All Apps', 'Favorite Apps' and 'Private Space' views. +[^1]: i.e. the 'All Apps', 'Favorite Apps' and 'Private Space' views. ## Appearance -> ### Choose a wallpaper +### Choose a wallpaper This triggers Android's mechanism to change the wallpaper using a photos app, file explorer, or native wallpaper setting app. µLauncher uses the system-wide wallpaper, i.e. this change also affects other launchers. -> ### Font (in-app font) +### Font (in-app font) Set the font used within the app settings. This setting does not affect the date/time home screen font. @@ -21,17 +20,17 @@ Set the font used within the app settings. This setting does not affect the date **options:** `Hack`,`System default`,`Sans serif`,`Serif`,`Monospace`,`Serif monospace` -> ### Text Shadow +### Text Shadow **type:** `toggle` -> ### Background (app list and setting) +### Background (app list and setting) **type:** `dropdown` **type:** `Transparent`,`Dim`,`Blur`,`Solid` -> ### Monochrome app icons +### Monochrome app icons Remove coloring from all app icons. Can help decrease visual stimulus when enabled. @@ -39,49 +38,56 @@ Remove coloring from all app icons. Can help decrease visual stimulus when enabl ## Date & Time -> ### Font (home screen) +These settings effect the clock shown on the home screen (or on widget panels). +If the clock is removed, the settings are not used. -Set the home screen font for date and time. This setting does not affect the in-app font. +### Font (home screen) + +Set the home screen font for date and time. This setting does not affect the font of other components. **type:** `dropdown` **options:** `Hack`,`System default`,`Sans serif`,`Serif`,`Monospace`,`Serif monospace` -> ### Color [`[bug]`](https://github.com/jrpie/launcher/issues/151) +### Color Set the color for the home screen date and time. -Accepts a HEX color code (consisting of a '#' followed by three sets of two alphanumeric (letters and numbers) characters. A fourth set of two alphanumeric characters may be added to set the transparency of the color. +Accepts an 6 digit RGB or or 8 digit ARGB color code characters.[^2] +Note that on Android the ARGB color format is used, i.e. the alpha component is specified first. +This differs from the more common RGBA, which is used in web development. -[Color wheel picker](https://rgbacolorpicker.com/color-wheel-picker) -**type:** `HEX`,`RGBA` +[^2]: More precisely, everything that is vaild input for [parseColor](https://developer.android.com/reference/android/graphics/Color#parseColor(java.lang.String)) can be used. -> ### Use localized date format -Adapt the display of dates and times to the specific conventions of a particular locale or region. Different locales use different date orders (e.g., MM/DD/YYYY in the US, DD/MM/YYYY in Europe). +**type:** `ARGB` + +### Use localized date format + +Adapt the display of dates and times to the specific conventions of a particular locale or region as set by the system. Different locales use different date orders (e.g., MM/DD/YYYY in the US, DD/MM/YYYY in Europe). **type:** `toggle` -> ### Show time +### Show time Show the current time on the home screen. **type:** `toggle` -> ### Show seconds +### Show seconds Show the current time down to the second on the home screen. **type:** `toggle` -> ### Show date +### Show date Show the current date on the home screen. **type:** `toggle` -> ### Flip date and time +### Flip date and time Place the current time above the current date on the home screen. @@ -89,7 +95,7 @@ Place the current time above the current date on the home screen. ## Functionality -> ### Launch search results +### Launch search results Launches any app that matches user keyboard input when no other apps match. @@ -105,37 +111,37 @@ Press space to temporarily disable this feature and allow text entry without pre **type:** `toggle` -> ### Search the web +### Search the web -Press return/enter while searching the app list to launch a web search. +Press return while searching the app list to launch a web search. **type:** `toggle` -> ### Start keyboard for search +### Start keyboard for search Automatically open the keyboard when the app drawer is opened. **type:** `toggle` -> ### Double swipe gestures +### Double swipe gestures Enable double swipe (two finger) gestures in launcher settings. Does not erase gesture bindings if accidentally turned off. **type:** `toggle` -> ### Edge swipe gestures +### Edge swipe gestures Enable edge swipe (near edges of screen) gestures in launcher settings. Does not erase gesture bindings if accidentally turned off. **type:** `toggle` -> ### Edge width +### Edge width Change how large a margin is used for detecting edge gestures. Shows the edge margin preview when using the slider. **type:** `slider` -> ### Choose method for locking the screen +### Choose method for locking the screen There are two methods to lock the screen and unfortunately both have downsides. @@ -157,11 +163,11 @@ There are two methods to lock the screen and unfortunately both have downsides. ## Apps -> ### Hidden apps +### Hidden apps Open an app drawer containing only hidden apps. -> ### Don't show apps that are bound to a gesture in the app list +### Don't show apps that are bound to a gesture in the app list Remove certain apps from the app drawer if they are already accessible via a gesture. @@ -169,20 +175,21 @@ Reduces redundancy and tidies up app drawer. **type:** `toggle` -> ### Hide paused apps +### Hide paused apps Remove paused apps from the app drawer. For example an app belonging to the work profile is paused when the work profile is inactive. **type:** `toggle` -> ### Hide private space from app list +### Hide private space from app list Remove private space from app drawer. +Private space apps can be accessed using a separate app drawer which can be opened with the Private Space action. **type:** `toggle` -> ### Layout of app list +### Layout of app list Changes how the apps are displayed when accessing the app drawer. @@ -195,7 +202,7 @@ Changes how the apps are displayed when accessing the app drawer. **options:** `Default`,`Text`,`Grid` -> ### Reverse the app list +### Reverse the app list Enable reverse alphabetical sorting of apps in the app drawer. Useful for keeping apps within easier reach from the keyboard. @@ -204,21 +211,21 @@ Useful for keeping apps within easier reach from the keyboard. ## Display -> ### Rotate screen +### Rotate screen **type:** `toggle` -> ### Keep screen on +### Keep screen on **type:** `toggle` -> ### Hide status bar +### Hide status bar Remove the top status bar from the home screen. **type:** `toggle` -> ### Hide navigation bar +### Hide navigation bar Remove the navigation bar from the home screen. Enabling this setting may make it difficult to use the device if gestures are not setup properly. @@ -226,7 +233,7 @@ Remove the navigation bar from the home screen. Enabling this setting may make i ## Additional Settings -> ### App Drawer Long Press on App +### App Drawer Long Press on App Access additional per-app details and settings. To use, open the app drawer and long press on any app. diff --git a/docs/widgets.md b/docs/widgets.md new file mode 100644 index 0000000..ab5e21f --- /dev/null +++ b/docs/widgets.md @@ -0,0 +1,27 @@ ++++ + title = 'Widgets' ++++ + +# Widgets + +μLauncher allows to add [app widgets](https://developer.android.com/develop/ui/views/appwidgets/overview) to the home screen and to widget panels. + +Widgets can be added, moved, removed and configured in `Settings > Manage Widgets`. + +It is configurable whether or not interaction with a widget should be enabled. + +* If interaction is enabled, touch events are forwarded to the widget as usual. +However, μLauncher [gestures](/docs/actions-and-gestures/) can not be executed in areas where such a widget is present. + +* If interaction is disabled, the widget does not respond to any touch events. + This is recommended when using a widget only to display information. + +μLauncher's clock behaves similar as an app widget and can be managed in the same way.[^1] + +[^1]: However, it is technically not an app widget and cannot be used with other launchers. + +# Widget Panels + +Widget panels can contain widgets that are not needed on the home screen. +They can be managed in `Settings > Manage Widget Panels`. +Widget panels can be opened by using the [Open Widget Panel](/docs/actions-and-gestures/#available-actions) action. From ac1639b77ed1c940f69d055c50e2a1583c4270ef Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 19:01:15 +0200 Subject: [PATCH 05/23] add termux example to docs (see #147 and #149) --- docs/examples/_index.md | 2 ++ docs/examples/termux/index.md | 23 +++++++++++++++++++++++ docs/examples/termux/screenshot1.png | Bin 0 -> 47999 bytes docs/examples/termux/screenshot2.png | Bin 0 -> 33737 bytes 4 files changed, 25 insertions(+) create mode 100644 docs/examples/_index.md create mode 100644 docs/examples/termux/index.md create mode 100644 docs/examples/termux/screenshot1.png create mode 100644 docs/examples/termux/screenshot2.png diff --git a/docs/examples/_index.md b/docs/examples/_index.md new file mode 100644 index 0000000..0847315 --- /dev/null +++ b/docs/examples/_index.md @@ -0,0 +1,2 @@ +# Examples +This section contains some examples how μLauncher can be tweaked. diff --git a/docs/examples/termux/index.md b/docs/examples/termux/index.md new file mode 100644 index 0000000..7d1f59c --- /dev/null +++ b/docs/examples/termux/index.md @@ -0,0 +1,23 @@ ++++ + title = 'Integration with Termux' ++++ + +# Termux + +μLauncher has no special support for [Termux](https://termux.dev/). +However it is possible to run Termux commands from μLauncher by using [Termux:Widget](https://wiki.termux.com/wiki/Termux:Widget) to create a pinned shortcut and bind that to a gesture. + +* Install Termux:Widget. +* Make sure that μLauncher is set as the default home screen.[^1] +* Put the script you want to run into `~/.shortcuts/`. +* Run `am start com.termux.widget/com.termux.widget.TermuxCreateShortcutActivity`. This will create a pinned shortcut which is treated like an app by μLauncher, i.e. open μLauncher's activity to create a shortcut. + +screenshot +screenshot + + +[^1]: Only the default home screen can access shortcuts. diff --git a/docs/examples/termux/screenshot1.png b/docs/examples/termux/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..684c8bfebd7c30da1655870bd5c52e4ecf8dfe53 GIT binary patch literal 47999 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 vUYP>$iMm$J-Uc#9=@uY#f8 Date: Sat, 24 May 2025 19:22:08 +0200 Subject: [PATCH 06/23] add example to docs --- docs/examples/_index.md | 5 +++++ docs/examples/apps-on-home-screen.md | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 docs/examples/apps-on-home-screen.md diff --git a/docs/examples/_index.md b/docs/examples/_index.md index 0847315..b50540f 100644 --- a/docs/examples/_index.md +++ b/docs/examples/_index.md @@ -1,2 +1,7 @@ ++++ + bookCollapseSection = true + weight = 20 ++++ + # Examples This section contains some examples how μLauncher can be tweaked. diff --git a/docs/examples/apps-on-home-screen.md b/docs/examples/apps-on-home-screen.md new file mode 100644 index 0000000..f63c500 --- /dev/null +++ b/docs/examples/apps-on-home-screen.md @@ -0,0 +1,18 @@ ++++ + title = 'Showing Apps on the Home Screen' ++++ + +# Showing Apps on the Home Screen + +Even though this is somewhat contrary to the general idea of μLauncher, +it is possible to show apps on the home screen using widgets. + +Users suggested: +* [Launchy](https://launchywidget.com/) (proprietary!) +* KWGT Kustom Widget Maker (proprietary!) + +{{% hint danger %}} +Both of these apps are not open source and KWGT even has ads. + +Please contact me if you know FOSS alternatives! +{{% /hint %}} From ea5a4ad7bfd4b03a132c719ce94b1512620d73a4 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 19:22:08 +0200 Subject: [PATCH 07/23] add example to docs --- docs/actions-and-gestures.md | 4 ++++ docs/alternatives.md | 5 ++++- docs/build.md | 5 +++++ docs/contributing.md | 5 +++++ docs/examples/_index.md | 5 +++++ docs/examples/apps-on-home-screen.md | 18 ++++++++++++++++++ docs/profiles.md | 6 ++++++ docs/settings.md | 4 ++++ docs/widgets.md | 1 + 9 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 docs/examples/apps-on-home-screen.md diff --git a/docs/actions-and-gestures.md b/docs/actions-and-gestures.md index a5348a3..dc00970 100644 --- a/docs/actions-and-gestures.md +++ b/docs/actions-and-gestures.md @@ -1,3 +1,7 @@ ++++ + weight = 10 ++++ + # Actions and Gestures µLauncher's central mechanism for accessing important functionality quickly diff --git a/docs/alternatives.md b/docs/alternatives.md index 4c875f4..174ee8a 100644 --- a/docs/alternatives.md +++ b/docs/alternatives.md @@ -1,3 +1,6 @@ ++++ + weight = 100 ++++ -TODO: move the [hedgedoc](https://pad.abstractnonsen.se/foss-launchers) document here. +ODO: move the [hedgedoc](https://pad.abstractnonsen.se/foss-launchers) document here. diff --git a/docs/build.md b/docs/build.md index 1ffc338..a45ab4c 100644 --- a/docs/build.md +++ b/docs/build.md @@ -1,3 +1,8 @@ ++++ + weight = 50 ++++ + + # Building from Source ## Using the command line diff --git a/docs/contributing.md b/docs/contributing.md index 350ba01..f74bcca 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,3 +1,8 @@ ++++ + weight = 40 ++++ + + # Contributing There are several ways to contribute to this app: diff --git a/docs/examples/_index.md b/docs/examples/_index.md index 0847315..b50540f 100644 --- a/docs/examples/_index.md +++ b/docs/examples/_index.md @@ -1,2 +1,7 @@ ++++ + bookCollapseSection = true + weight = 20 ++++ + # Examples This section contains some examples how μLauncher can be tweaked. diff --git a/docs/examples/apps-on-home-screen.md b/docs/examples/apps-on-home-screen.md new file mode 100644 index 0000000..f63c500 --- /dev/null +++ b/docs/examples/apps-on-home-screen.md @@ -0,0 +1,18 @@ ++++ + title = 'Showing Apps on the Home Screen' ++++ + +# Showing Apps on the Home Screen + +Even though this is somewhat contrary to the general idea of μLauncher, +it is possible to show apps on the home screen using widgets. + +Users suggested: +* [Launchy](https://launchywidget.com/) (proprietary!) +* KWGT Kustom Widget Maker (proprietary!) + +{{% hint danger %}} +Both of these apps are not open source and KWGT even has ads. + +Please contact me if you know FOSS alternatives! +{{% /hint %}} diff --git a/docs/profiles.md b/docs/profiles.md index d9eaf52..2087d06 100644 --- a/docs/profiles.md +++ b/docs/profiles.md @@ -1,3 +1,9 @@ ++++ + title = 'User Profiles' + weight = 12 ++++ + + # Work Profile µLauncher is compatible with [work profile](https://www.android.com/enterprise/work-profile/), so apps like [Shelter](https://gitea.angry.im/PeterCxy/Shelter) can be used. diff --git a/docs/settings.md b/docs/settings.md index 3cbfbec..eff0417 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -1,3 +1,7 @@ ++++ + weight = 10 ++++ + # Settings Tweaks and customizations can be made from within the settings page. diff --git a/docs/widgets.md b/docs/widgets.md index ab5e21f..acbdf05 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -1,5 +1,6 @@ +++ title = 'Widgets' + weight = 11 +++ # Widgets From 580644f9d4a756499c31277a3d4170afca838977 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 20:29:01 +0200 Subject: [PATCH 08/23] add documentation of app drawer --- docs/app-drawer.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++ docs/settings.md | 10 --------- 2 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 docs/app-drawer.md diff --git a/docs/app-drawer.md b/docs/app-drawer.md new file mode 100644 index 0000000..d977c28 --- /dev/null +++ b/docs/app-drawer.md @@ -0,0 +1,54 @@ ++++ + weight = 10 ++++ + +# App Drawer + +Apps that are not needed all the time are shown in the app drawer. +There are several such drawers, but the basic concept is the same. +Besides regular apps, app drawers also show [pinned shortcuts](https://developer.android.com/develop/ui/views/launch/shortcuts/creating-shortcuts)[^1]. +μLauncher treats apps and shortcuts in the same way. + +The idea of the app drawer is to search for apps using the keyboard. +By default[^2] an app is launched automatically once it is the only app matching the query. +This can be prevented by typing space. +Usually only two or three characters are needed which is much faster than scrolling to find an app. + +[^1]: A pinned shortcut is created for example when pinning a website to the home screen. +[^2]: There are [several settings](/docs/settings/#functionality) available to modify the behavior. + +When long clicking an app, additional options are shown: +* Rename the app +* Add to / remove from Favorites: Adds the app to the [Favorite Apps](#favorite-apps) list or removes it from there. +* Hide / Show: This hides the app from all drawers (except from [Hidden Apps](#hidden-apps)) or makes it visible again if it was hidden. +* App Info: Opens the system settings page for the app. +* Uninstall: Tries to uninstall the app or remove the shortcut. + +## All Apps + +This lists all apps except hidden apps. +By default it is bound to `Swipe up`. + +## Favorite Apps + +Only shows favorite apps. +Pressing the star icon on the bottom right of any app drawer toggles whether +only favorite apps should be shown. +Additionally the `Favorite Apps` action can be used to launch this drawer directly. +By default it is bound to `Swipe up (left edge)`. + +## Private Space + +When [private space](/docs/profiles/#private-space) is available, this drawer +shows only apps from the private space. +It can be opened using the `Private Space` action. +If the private space is locked, instead of showing the list the unlock dialog is shown. + +By default, apps from the private space are shown in All Apps as well, +however this is [configurable](/docs/settings/#hide-private-space-from-app-list). + +## Hidden Apps + +This list shows hidden apps. +It is only accessible through the settings. +The feature is intended to be used only for apps which are not needed at all but [can not be uninstalled](https://en.wikipedia.org/wiki/Software_bloat#Bloatware). diff --git a/docs/settings.md b/docs/settings.md index eff0417..eb780fc 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -234,13 +234,3 @@ Remove the top status bar from the home screen. Remove the navigation bar from the home screen. Enabling this setting may make it difficult to use the device if gestures are not setup properly. **type:** `toggle` - -## Additional Settings - -### App Drawer Long Press on App - -Access additional per-app details and settings. To use, open the app drawer and long press on any app. - -**type:** `dropdown` - -**options:** `App Info`,`Add to favorites`,`Hide`,`Rename`,`Uninstall` From 71193a2e50b03bf46f16a37cdea357740563fb74 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 20:34:15 +0200 Subject: [PATCH 09/23] fixed typo --- docs/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build.md b/docs/build.md index a45ab4c..3d1605c 100644 --- a/docs/build.md +++ b/docs/build.md @@ -42,7 +42,7 @@ for further instructions. Install [Android Studio](https://developer.android.com/studio), import this project and build it. See [this guide](https://developer.android.com/studio/run) -for further instructions. How to +for further instructions. ## CI Pipeline From 1d10d65adbc35c4f18945fe4edc41b10a6177365 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 20:41:37 +0200 Subject: [PATCH 10/23] update documentation --- docs/build.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/build.md b/docs/build.md index 3d1605c..28e889a 100644 --- a/docs/build.md +++ b/docs/build.md @@ -47,4 +47,8 @@ for further instructions. ## CI Pipeline The [CI pipeline](https://github.com/jrpie/Launcher/actions) automatically creates debug builds. -> Note: These builds are *not* signed. They are in built in debug mode and only suitable for testing. + +{{% hint warning %}} +Note: These builds are not signed. +They are in built in debug mode and only suitable for testing. +{{% /hint %}} From 85a7ed24ab2e6816f97e6cbe3feb3add3eda5465 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 24 May 2025 21:08:45 +0200 Subject: [PATCH 11/23] add documentation button --- .../launcher/ui/settings/meta/SettingsFragmentMeta.kt | 3 +++ app/src/main/res/layout/settings_meta.xml | 7 +++++++ app/src/main/res/values/donottranslate.xml | 1 + app/src/main/res/values/strings.xml | 1 + 4 files changed, 12 insertions(+) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt index 759d8cd..1a0e802 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt @@ -79,6 +79,9 @@ class SettingsFragmentMeta : Fragment(), UIObject { // view code bindURL(binding.settingsMetaButtonViewCode, R.string.settings_meta_link_github) + // view documentation + bindURL(binding.settingsMetaButtonViewDocs, R.string.settings_meta_link_docs) + // report a bug binding.settingsMetaButtonReportBug.setOnClickListener { val deviceInfo = getDeviceInfo() diff --git a/app/src/main/res/layout/settings_meta.xml b/app/src/main/res/layout/settings_meta.xml index 6f21baa..1adee37 100644 --- a/app/src/main/res/layout/settings_meta.xml +++ b/app/src/main/res/layout/settings_meta.xml @@ -41,6 +41,13 @@ android:text="@string/settings_meta_view_code" android:textAllCaps="false" /> +