From 4ee81bde4d3e76008f2fbbcb5b8c0afc4df973f2 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Thu, 3 Oct 2024 22:59:28 +0200 Subject: [PATCH 001/281] removed .idea --- .gitignore | 1 + .idea/codeStyles/Project.xml | 129 --------------------------- .idea/codeStyles/codeStyleConfig.xml | 5 -- .idea/compiler.xml | 6 -- .idea/deviceManager.xml | 13 --- .idea/jarRepositories.xml | 25 ------ .idea/kotlinc.xml | 6 -- .idea/migrations.xml | 10 --- .idea/misc.xml | 23 ----- 9 files changed, 1 insertion(+), 217 deletions(-) delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/deviceManager.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/kotlinc.xml delete mode 100644 .idea/migrations.xml delete mode 100644 .idea/misc.xml diff --git a/.gitignore b/.gitignore index e8c588d..c21100e 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ captures/ # IntelliJ *.iml +.idea/* .idea/workspace.xml .idea/tasks.xml .idea/other.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index feb0c69..0000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - -
- - - - xmlns:android - - ^$ - - - -
-
- - - - xmlns:.* - - ^$ - - - BY_NAME - -
-
- - - - .*:id - - http://schemas.android.com/apk/res/android - - - -
-
- - - - .*:name - - http://schemas.android.com/apk/res/android - - - -
-
- - - - name - - ^$ - - - -
-
- - - - style - - ^$ - - - -
-
- - - - .* - - ^$ - - - BY_NAME - -
-
- - - - .* - - http://schemas.android.com/apk/res/android - - - ANDROID_ATTRIBUTE_ORDER - -
-
- - - - .* - - .* - - - BY_NAME - -
-
-
-
- - -
-
\ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123..0000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml deleted file mode 100644 index 91f9558..0000000 --- a/.idea/deviceManager.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index a5f05cd..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index 6d0ee1c..0000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml deleted file mode 100644 index f8051a6..0000000 --- a/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8f51cae..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file From b67f87e93d97a097b2ca60993da657f7d37dd650 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 4 Oct 2024 00:42:53 +0200 Subject: [PATCH 002/281] fix: properly handle AppInfo with unknown user --- .../java/de/jrpie/android/launcher/Functions.kt | 12 ++++++++---- .../de/jrpie/android/launcher/actions/Action.kt | 6 +++--- .../java/de/jrpie/android/launcher/apps/AppInfo.kt | 14 +++++++------- .../launcher/ui/list/apps/AppsRecyclerAdapter.kt | 2 ++ build.gradle | 4 ++-- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/Functions.kt b/app/src/main/java/de/jrpie/android/launcher/Functions.kt index 0db033d..fb4a235 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt @@ -97,9 +97,13 @@ fun getIntent(packageName: String, context: Context): Intent? { } /* --- */ -fun getUserFromId(user: Int?, context: Context): UserHandle? { +fun getUserFromId(user: Int?, context: Context): UserHandle { + /* TODO: this is an ugly hack. + Use userManager#getUserForSerialNumber instead (breaking change to SharedPreferences!) + */ val userManager = context.getSystemService(Service.USER_SERVICE) as UserManager - return userManager.userProfiles.firstOrNull { it.hashCode() == user } + val profiles = userManager.userProfiles + return profiles.firstOrNull { it.hashCode() == user } ?: profiles[0] } @@ -107,10 +111,10 @@ fun uninstallApp(appInfo: AppInfo, activity: Activity) { val packageName = appInfo.packageName.toString() val user = appInfo.user - Log.i("Launcher", "uninstalling $packageName ($user)") + Log.i("Launcher", "uninstalling $appInfo") val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE) intent.data = Uri.parse("package:$packageName") - getUserFromId(user, activity)?.let { user -> + getUserFromId(user, activity).let { user -> intent.putExtra(Intent.EXTRA_USER, user) } diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt b/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt index a1c6074..1eab2ee 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt @@ -39,7 +39,7 @@ interface Action { val id = gesture.id val preferences = LauncherPreferences.getSharedPreferences() - var actionId = preferences.getString("$id.app", "")!! + val actionId = preferences.getString("$id.app", "")!! var u: Int? = preferences.getInt("$id.user", INVALID_USER) u = if (u == INVALID_USER) null else u @@ -48,7 +48,7 @@ interface Action { fun resetToDefaultActions(context: Context) { val editor = LauncherPreferences.getSharedPreferences().edit() - Gesture.values().forEach { gesture -> + Gesture.entries.forEach { gesture -> context.resources .getStringArray(gesture.defaultsResource) .map { fromId(it, null) } @@ -96,7 +96,7 @@ interface Action { fun fromIntent(data: Intent): Action? { val value = data.getStringExtra("action_id") ?: return null - var user = data.getIntExtra("user", INVALID_USER) + val user = data.getIntExtra("user", INVALID_USER) return fromId(value, user) } } diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt b/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt index 6bc51a1..daa7d96 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt @@ -4,6 +4,7 @@ import android.app.Service import android.content.Context import android.content.pm.LauncherActivityInfo import android.content.pm.LauncherApps +import android.util.Log import de.jrpie.android.launcher.getUserFromId /** @@ -19,13 +20,13 @@ class AppInfo(val packageName: CharSequence, val activityName: CharSequence?, va var ret = "$packageName;$u" activityName?.let { ret += ";$activityName" } - return ret; + return ret } override fun equals(other: Any?): Boolean { if(other is AppInfo) { return other.user == user && other.packageName == packageName - && other.activityName == activityName; + && other.activityName == activityName } return super.equals(other) } @@ -38,11 +39,10 @@ class AppInfo(val packageName: CharSequence, val activityName: CharSequence?, va context: Context ): LauncherActivityInfo? { val launcherApps = context.getSystemService(Service.LAUNCHER_APPS_SERVICE) as LauncherApps - return getUserFromId(user, context)?.let { userHandle -> - launcherApps.getActivityList(packageName.toString(), userHandle).firstOrNull { app -> - app.name == activityName || activityName == null || activityName == "" - } - } + val userHandle = getUserFromId(user, context) + val activityList = launcherApps.getActivityList(packageName.toString(), userHandle) + return activityList.firstOrNull { app -> app.name == activityName } + ?: activityList.firstOrNull() } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt index 618236a..7f08eb8 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt @@ -1,5 +1,6 @@ package de.jrpie.android.launcher.ui.list.apps +import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.graphics.Rect @@ -36,6 +37,7 @@ import de.jrpie.android.launcher.uninstallApp * @param intention - why the list is displayed ("view", "pick") * @param forGesture - the action which an app is chosen for (when the intention is "pick") */ +@SuppressLint("NotifyDataSetChanged") class AppsRecyclerAdapter( val activity: Activity, val root: View, diff --git a/build.gradle b/build.gradle index c7551a0..9a6160b 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext.kotlin_version = '2.0.0' - ext.android_plugin_version = '8.5.1' + ext.android_plugin_version = '8.7.0' repositories { google() mavenCentral() @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.5.2' + classpath 'com.android.tools.build:gradle:8.7.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.android.tools.build:gradle:$android_plugin_version" From e2fa2e298770f5f9f3b8347c2b34ecde6663b838 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 4 Oct 2024 00:45:20 +0200 Subject: [PATCH 003/281] j-0.0.12 --- app/build.gradle | 4 ++-- fastlane/metadata/android/en-US/changelogs/26.txt | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/26.txt diff --git a/app/build.gradle b/app/build.gradle index c63368c..f589b70 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { minSdkVersion 21 targetSdkVersion 35 compileSdk 35 - versionCode 25 - versionName "j-0.0.11" + versionCode 26 + versionName "j-0.0.12" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/fastlane/metadata/android/en-US/changelogs/26.txt b/fastlane/metadata/android/en-US/changelogs/26.txt new file mode 100644 index 0000000..d43e091 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/26.txt @@ -0,0 +1 @@ +bugfix From 88e13c04d18c29771f07284e7ace4ac4e6ca1a2e Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 4 Oct 2024 01:06:30 +0200 Subject: [PATCH 004/281] updated github templates --- .github/ISSUE_TEMPLATE/bug_report.md | 3 ++- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index f580315..49dacbb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,7 +1,7 @@ --- name: Bug report about: Create a report to help improve this app -title: '' +title: '[bug] ' labels: bug assignees: '' @@ -26,6 +26,7 @@ If applicable, add screenshots to help explain your problem. **Smartphone (please complete the following information):** - Device: [e.g. Samsung A7] - Android Version: [e.g. Marshmallow, 6.0 or API 23] + - µLauncher Version: [e.g. j-0.0.11 or version code 25] **Additional info** Add any other info or comments about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e2b3f9d..7e70cba 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,7 +1,7 @@ --- name: Feature request about: Suggest an idea for this project -title: '' +title: '[feature] ' labels: enhancement assignees: '' From af69f875af91e874ff4ea191fe650d5ab35e1b23 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 4 Oct 2024 15:47:28 +0200 Subject: [PATCH 005/281] fix #48 --- app/src/main/AndroidManifest.xml | 2 +- .../java/de/jrpie/android/launcher/Application.kt | 1 + .../de/jrpie/android/launcher/ui/HomeActivity.kt | 3 ++- .../java/de/jrpie/android/launcher/ui/UIObject.kt | 15 ++++++++------- .../android/launcher/ui/list/ListActivity.kt | 6 +++++- .../launcher/ui/settings/SettingsActivity.kt | 4 +++- .../launcher/ui/tutorial/TutorialActivity.kt | 3 ++- 7 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 241f10a..8cbc7ed 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,6 +39,7 @@ - diff --git a/app/src/main/java/de/jrpie/android/launcher/Application.kt b/app/src/main/java/de/jrpie/android/launcher/Application.kt index 6f0aaad..88a0fb3 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Application.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Application.kt @@ -9,5 +9,6 @@ class Application : android.app.Application() { val preferences = PreferenceManager.getDefaultSharedPreferences(this) LauncherPreferences.init(preferences, this.resources) + } } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt index ba5f260..bcd255f 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt @@ -64,7 +64,8 @@ class HomeActivity : UIObject, AppCompatActivity(), private var clockTimer = Timer() override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + super.onCreate(savedInstanceState) + super.onCreate() // Try to restore old preferences migratePreferencesToNewVersion(this) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt b/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt index 94bf347..b352d95 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt @@ -37,16 +37,17 @@ fun setWindowFlags(window: Window, homeScreen: Boolean) { } interface UIObject { - fun onStart() { + fun onCreate() { if (this is Activity) { setWindowFlags(window, isHomeScreen()) - requestedOrientation = if (!LauncherPreferences.display().rotateScreen()) { - ActivityInfo.SCREEN_ORIENTATION_PORTRAIT - } else { - ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED - } - } + if (!LauncherPreferences.display().rotateScreen()) { + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR + } + + } + } + fun onStart() { setOnClicks() adjustLayout() } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt index 1074fb4..4f5bfb1 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt @@ -49,7 +49,8 @@ class ListActivity : AppCompatActivity(), UIObject { override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + super.onCreate(savedInstanceState) + super.onCreate() // get info about which action this activity is open for intent.extras?.let { bundle -> @@ -106,6 +107,9 @@ class ListActivity : AppCompatActivity(), UIObject { override fun onPause() { super.onPause() + + // ensure that the activity closes then an app is launched + // and when the user navigates to recent apps finish() } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/SettingsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/SettingsActivity.kt index f509235..e46a956 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/SettingsActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/SettingsActivity.kt @@ -44,7 +44,9 @@ class SettingsActivity : AppCompatActivity(), UIObject { private lateinit var binding: SettingsBinding override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + super.onCreate(savedInstanceState) + super.onCreate() + // Initialise layout binding = SettingsBinding.inflate(layoutInflater) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/TutorialActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/TutorialActivity.kt index 490f42d..28e2e02 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/TutorialActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/TutorialActivity.kt @@ -30,7 +30,8 @@ import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentUsage class TutorialActivity : AppCompatActivity(), UIObject { override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + super.onCreate(savedInstanceState) + super.onCreate() // Initialise layout setContentView(R.layout.tutorial) From 9dae07a8eb6d1a813e66c6b0e201761bd71312d5 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 4 Oct 2024 19:05:12 +0200 Subject: [PATCH 006/281] allow screen rotation by default (see #48) --- .../launcher/preferences/LauncherPreferences$Config.java | 2 +- app/src/main/res/xml/preferences.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java index 4c25b6e..970e97f 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java @@ -51,7 +51,7 @@ import eu.jonahbauer.android.preference.annotations.serializer.PreferenceSeriali @PreferenceGroup(name = "display", prefix = "settings_display_", suffix = "_key", value = { @Preference(name = "screen_timeout_disabled", type = boolean.class, defaultValue = "false"), @Preference(name = "full_screen", type = boolean.class, defaultValue = "true"), - @Preference(name = "rotate_screen", type = boolean.class, defaultValue = "false"), + @Preference(name = "rotate_screen", type = boolean.class, defaultValue = "true"), }), @PreferenceGroup(name = "functionality", prefix = "settings_functionality_", suffix = "_key", value = { @Preference(name = "search_auto_launch", type = boolean.class, defaultValue = "true"), diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d75781a..740cb5a 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -118,7 +118,7 @@ android:title="@string/settings_display_full_screen"/> Date: Sun, 6 Oct 2024 18:38:24 +0000 Subject: [PATCH 007/281] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (112 of 112 strings) Translation: jrpie-Launcher/Launcher Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/ --- app/src/main/res/values-pt-rBR/strings.xml | 115 +++++++++------------ 1 file changed, 48 insertions(+), 67 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2f6081e..8ac5796 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,25 +1,22 @@ + - Não é possível abrir o aplicativo + Não foi possível abrir o app Quer alterar as suas configurações? - - Abrir as configurações para escolher uma aplicação para esta ação - + Abra as configurações para escolher uma ação para esse gesto Configurações - Apps Launcher Meta - Aparência - - Tema Padrão Escuro - Mostrar Horário Mostrar Data Use formato de data localizado Inverter data e hora - Escolha um papel de parede Alterar papel de parede - Exibição - Manter a tela ligada Usar tela cheia - Funções - - Ações de deslizar duas vezes + Ações de duplo deslize Ações de deslizar nas bordas Iniciar resultados da pesquisa - Iniciar teclado para pesquisa - + Mostrar teclado para pesquisa Sensibilidade - Definir o μLauncher como tela inicial Informações do aplicativo - Seu dispositivo não suporta esse recurso. Gerenciar detalhes do aplicativo em vez disso? - + Seu dispositivo não é compatível com esse recurso. Gerenciar detalhes do app em vez disso? Ver tutorial do launcher - Redefinir configuraçãos Você vai descartar todas as suas preferências. Continuar? - Reportar um bug - Entre em contato com o desenvolvedor do fork - Política de Privacidade - Entre em contato com o desenvolvedor original - - Junte-se a nós no discord! - - Todos os aplicativos - Escolha o aplicativo - + Todos os apps + Escolha um app Aplicativos - Outro - + Outros Desinstalar Informações do aplicativo - - O aplicativo selecionado foi removido - Não é possível remover o aplicativo - + O app selecionado foi removido + Não foi possível remover o app Pesquisar Aplicativos - Configurações do Launcher - Todos os aplicativos - Music: Mais alto - Music: Mais silencioso - Music: Próximo - Music: Anterior + Todos os apps + Música: Mais alto + Música: Mais silencioso + Música: Próximo + Música: Anterior Não faça nada - Tutorial Tire alguns segundos para aprender a usar este Launcher! - Conceito O Launcher foi projetado para ser minimalista, eficiente e livre de distrações.\n\nEle é livre de pagamentos, anúncios e serviços de rastreamento. O aplicativo é de código aberto (licença MIT) e está disponível no GitHub!\n\nNão deixe de conferir o repositório! - Uso Sua tela inicial contém a data e a hora locais. Sem distração. - Você pode iniciar seus aplicativos com um único toque ou pressionamento de botão. Escolha alguns no próximo slide. - + Você pode iniciar seus aplicativos com um toque único ou pressionando um botão. Escolha algumas ações no próximo slide. Configurar Selecionamos alguns aplicativos padrões para você. Se quiser, você pode alterá-los agora. - Você também pode alterar sua seleção mais tarde. - - Vamos! + Você também pode alterar suas escolhas mais tarde. + Vamos lá! Você está pronto para começar!\n\nEspero que isso seja de grande valor para você!\n\n- Finn (que criou o Launcher)\n\te Josia (que fez algumas melhorias e mantém o fork μLauncher) Começar - - - Configurações Mais opções + Remover dos favoritos + Erro: Não foi possível expandir a barra de status. +\nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo. + Fundo (lista de apps e configurações) + Fonte + Ícones de apps monocromáticos + Data e hora + Mostrar segundos + Girar a tela + Apps + Apps ocultos + Apps favoritos + Apps ocultos + Adicione aos favoritos + Ocultar + Mostrar + Apps favoritos + Expandir painel de notificações + App está oculto. Você pode torná-lo visível nas configurações. + Desfazer \ No newline at end of file From ba5a78499029c139bea8d3beeef1aa150757987c Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Mon, 7 Oct 2024 01:36:28 +0200 Subject: [PATCH 008/281] action: open quick settings --- .../launcher/actions/LauncherAction.kt | 25 ++++++++++++++++++- app/src/main/res/values-de/strings.xml | 5 ++-- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 3 ++- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt index a3acbb7..68dbebd 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt @@ -64,6 +64,12 @@ enum class LauncherAction( R.drawable.baseline_notifications_24, ::expandNotificationsPanel ), + EXPAND_SETTINGS_PANEL( + "launcher:expandSettingsPanel", + R.string.list_other_expand_settings_panel, + R.drawable.baseline_settings_applications_24, + ::expandSettingsPanel + ), NOP("launcher:nop", R.string.list_other_nop, R.drawable.baseline_not_interested_24, {}); override fun invoke(context: Context, rect: Rect?): Boolean { @@ -169,7 +175,24 @@ private fun expandNotificationsPanel(context: Context) { } catch (e: Exception) { Toast.makeText( context, - context.getString(R.string.alert_cant_expand_notifications_panel), + context.getString(R.string.alert_cant_expand_status_bar_panel), + Toast.LENGTH_LONG + ).show() + } +} + +private fun expandSettingsPanel(context: Context) { + /* https://stackoverflow.com/a/31898506 */ + try { + @Suppress("SpellCheckingInspection") + val statusBarService: Any? = context.getSystemService("statusbar") + val statusBarManager = Class.forName("android.app.StatusBarManager") + val showStatusBar = statusBarManager.getMethod("expandSettingsPanel") + showStatusBar.invoke(statusBarService) + } catch (e: Exception) { + Toast.makeText( + context, + context.getString(R.string.alert_cant_expand_status_bar_panel), Toast.LENGTH_LONG ).show() } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 88a7580..45effcd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -138,6 +138,7 @@ Einstellungen Mehr Optionen Benachrichtigungen - Fehler: Die Funktion \"Benachrichtigungen\" wird von deinem Gerät leider nicht unterstützt. + Fehler: Diese Funktion wird von deinem Gerät leider nicht unterstützt. Sekunden anzeigen - \ No newline at end of file + Schnelleinstellungen + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8ac5796..8032c7a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -133,7 +133,7 @@ Configurações Mais opções Remover dos favoritos - Erro: Não foi possível expandir a barra de status. + Erro: Não foi possível expandir a barra de status. \nEssa ação usa uma funcionalidade que não faz parte da API do Android publicada. Infelizmente, ela não vai funcionar no seu dispositivo. Fundo (lista de apps e configurações) Fonte diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index bc9b212..26531bc 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -110,6 +110,6 @@ 旋转屏幕 应用 展开通知面板 - 错误:无法打开通知栏。 + 错误:无法打开通知栏。 \n这个动作使用的功能并非现有的 Android API的一部分。不幸的是,它似乎不适用于您的设备。 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 348a4b6..c17d4e3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -204,7 +204,8 @@ Settings More options - Error: Can\'t expand status bar.\nThis action is using functionality that is not part of the published Android API. Unfortunately, it does not seem to work on your device. + Error: Can\'t expand status bar.\nThis action is using functionality that is not part of the published Android API. Unfortunately, it does not seem to work on your device. App hidden. You can make it visible again in settings. Undo + Quick Settings From 51184e7e8a49145e4951dcfc0926930c51e08750 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Wed, 9 Oct 2024 01:53:40 +0200 Subject: [PATCH 009/281] updated templates --- .github/ISSUE_TEMPLATE/bug_report.md | 12 ++++++------ .github/ISSUE_TEMPLATE/feature_request.md | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 49dacbb..fd22359 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,26 +7,26 @@ assignees: '' --- -**Describe the bug** +# Describe the bug A clear and concise description of what the bug is. -**To Reproduce** +# To Reproduce Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error -**Expected behavior** +# Expected behavior A clear and concise description of what you expected to happen. -**Screenshots** +# Screenshots If applicable, add screenshots to help explain your problem. -**Smartphone (please complete the following information):** +# Smartphone (please complete the following information) - Device: [e.g. Samsung A7] - Android Version: [e.g. Marshmallow, 6.0 or API 23] - µLauncher Version: [e.g. j-0.0.11 or version code 25] -**Additional info** +# Additional info Add any other info or comments about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 7e70cba..4ab974b 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,14 +7,14 @@ assignees: '' --- -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +# Mandatory: Please describe the problem to be solved +(Remove this text: Add a clear and concise description of the addressed problem. Don't say "add a button such that ... " but **why** this button should be added. This is very important as it allows to discuss alternative solutions.) -**Describe the solution you'd like** -A clear and concise description of what you want to happen. +# Optional: Describe the solution you would suggest +(Remove this text: A description of the solution, e.g. "add a button to the settings activity. When clicking that button ..." ) -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. +# Optional: Describe alternative solutions you've considered +(Remove this text: A description of any alternative solutions or features you've considered.) -**Additional info** -Add any other info, comments or screenshots about the feature request here. +# Optional: Additional info +(Remove this text: Add any other info, comments or screenshots about the feature request here.) From ea80bd951379b592975e5d01ffe8ee4625a1806e Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Wed, 9 Oct 2024 01:56:28 +0200 Subject: [PATCH 010/281] [matrix] --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6e49591..d5243b1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ [![][shield-license]][license] +[![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)][matrix] + + # μLauncher @@ -28,7 +31,7 @@ Or download the latest APK from the [Releases Section](https://github.com/jrpie/ There are several ways to contribute to this app: * You can add or improve [translations][toolate]. -* If you find a bug or have an idea for a new feature you can open an [issue][issues]. Please note that I work on this project in my free time. Thus I might not respond immediately and not all ideas will be implemented. +* If you find a bug or have an idea for a new feature you can [join the Matrix chat][matrix] or open an [issue][issues]. Please note that I work on this project in my free time. Thus I might not respond immediately and not all ideas will be implemented. * You can implement a new feature yourself: - Create a fork of this repository: [![][shield-gh-fork]][fork] - Create a new branch named `feature/` of `fix/` and commit your changes. @@ -83,8 +86,7 @@ There are several ways to contribute to this app: [shield-gh-watch]: https://img.shields.io/github/watchers/jrpie/Launcher?label=Watch&style=social [shield-gh-star]: https://img.shields.io/github/stars/jrpie/Launcher?label=Star&style=social [shield-gh-fork]: https://img.shields.io/github/forks/jrpie/Launcher?label=Fork&style=social - - + [matrix]: https://s.jrpie.de/launcher-matrix From 0734d4df3bd8c63e5b3268842da3e68902fa191e Mon Sep 17 00:00:00 2001 From: Vossa Excelencia Date: Sun, 6 Oct 2024 21:49:59 +0000 Subject: [PATCH 011/281] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (112 of 112 strings) Translation: jrpie-Launcher/Launcher Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/ --- app/src/main/res/values-pt-rBR/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8032c7a..e3ab69a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -23,13 +23,13 @@ - --> Deslizar para cima - Duplo para cima + 2 dedos para cima Deslizar para baixo - Duplo para baixo + 2 dedos para baixo Deslizar para esquerda - Duplo para esquerda + 2 dedos para esquerda Deslizar para direita - Duplo para direita + 2 dedos para direita Deslizar para direita (Cima) Deslizar para direita (Baixo) Deslizar para esquerda (Baixo) @@ -69,7 +69,7 @@ Manter a tela ligada Usar tela cheia Funções - Ações de duplo deslize + Deslize com 2 dedos Ações de deslizar nas bordas Iniciar resultados da pesquisa Mostrar teclado para pesquisa From 76de557e1bdbba00b426f85f7160848a70666a06 Mon Sep 17 00:00:00 2001 From: Vossa Excelencia Date: Sun, 6 Oct 2024 21:58:54 +0000 Subject: [PATCH 012/281] Translated using Weblate (Portuguese (Brazil)) Currently translated at 42.8% (3 of 7 strings) Translation: jrpie-Launcher/metadata Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/metadata/pt_BR/ --- fastlane/metadata/android/pt-BR/changelogs/26.txt | 1 + fastlane/metadata/android/pt-BR/short_description.txt | 1 + fastlane/metadata/android/pt-BR/title.txt | 1 + 3 files changed, 3 insertions(+) create mode 100644 fastlane/metadata/android/pt-BR/changelogs/26.txt create mode 100644 fastlane/metadata/android/pt-BR/short_description.txt create mode 100644 fastlane/metadata/android/pt-BR/title.txt diff --git a/fastlane/metadata/android/pt-BR/changelogs/26.txt b/fastlane/metadata/android/pt-BR/changelogs/26.txt new file mode 100644 index 0000000..3522599 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/26.txt @@ -0,0 +1 @@ +Correção de bugs diff --git a/fastlane/metadata/android/pt-BR/short_description.txt b/fastlane/metadata/android/pt-BR/short_description.txt new file mode 100644 index 0000000..e1c50b5 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/short_description.txt @@ -0,0 +1 @@ +Uma tela inicial minimalista e sem distrações para Android. diff --git a/fastlane/metadata/android/pt-BR/title.txt b/fastlane/metadata/android/pt-BR/title.txt new file mode 100644 index 0000000..4305604 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/title.txt @@ -0,0 +1 @@ +µLauncher From 684ce6a29e6498b4dc2773186c50706d5b4b11d2 Mon Sep 17 00:00:00 2001 From: toby Date: Tue, 8 Oct 2024 13:37:05 +0000 Subject: [PATCH 013/281] Translated using Weblate (French) Currently translated at 100.0% (112 of 112 strings) Translation: jrpie-Launcher/Launcher Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/fr/ --- app/src/main/res/values-fr/strings.xml | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9b7fe48..b225441 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -7,7 +7,7 @@ --> Impossible d\'ouvrir l\'application Souhaitez-vous modifier ses paramètres ? - Ouvrez les paramètres pour choisir une application pour cette action + Ouvrez les paramètres pour associer une action à ce geste - Applications + Toutes les Applications Choisir App Applications Autre @@ -93,7 +93,7 @@ Impossible de désinstaller l\'application Chercher des applications Réglages du launcher - Applications + Toutes les Applications Augmenter le volume Diminuer le volume Musique : passer au titre suivant @@ -140,4 +140,23 @@ Échanger la date et l\'heure Afficher la date Utiliser le format de date local + Erreur : +\nIl est impossible d\'afficher le volet des applications. Cette fonctionnalité n\'étant pas nativement supportée par Android, elle ne semble pas être implémentée sur votre appareil. + Applis + Fond d\'écran (liste d\'applications et réglages) + Police + Icônes d\'applications monochromes + Afficher les secondes + Rotation de l\'écran + Afficher le panneau de notifications + Applications cachées + Applications favorites + Applications masquées + Ajouter aux favoris + Retirer des favoris + Cacher + Montrer + Applications Favorites + Appli cachée. Vous pouvez l\'afficher à nouveau depuis les réglages. + Défaire \ No newline at end of file From a0c65d5ad4d75ad4aca335aada08ad16575beca4 Mon Sep 17 00:00:00 2001 From: toby Date: Tue, 8 Oct 2024 13:44:09 +0000 Subject: [PATCH 014/281] Translated using Weblate (French) Currently translated at 100.0% (7 of 7 strings) Translation: jrpie-Launcher/metadata Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/metadata/fr/ --- fastlane/metadata/android/fr-FR/changelogs/21.txt | 15 +++++++++++++++ fastlane/metadata/android/fr-FR/changelogs/24.txt | 8 ++++++++ fastlane/metadata/android/fr-FR/changelogs/25.txt | 4 ++++ fastlane/metadata/android/fr-FR/changelogs/26.txt | 1 + fastlane/metadata/android/fr-FR/title.txt | 1 + 5 files changed, 29 insertions(+) create mode 100644 fastlane/metadata/android/fr-FR/changelogs/21.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/24.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/25.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/26.txt create mode 100644 fastlane/metadata/android/fr-FR/title.txt diff --git a/fastlane/metadata/android/fr-FR/changelogs/21.txt b/fastlane/metadata/android/fr-FR/changelogs/21.txt new file mode 100644 index 0000000..b2954fe --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/21.txt @@ -0,0 +1,15 @@ +- Traduction en chinois (merci, yzqzss !) +- Traduction améliorée en français (merci, toby-bro !) +- Traduction améliorée en allemand + +Toutes les applications : +- Suppression des trois points dans la liste des applications (utilisez un long clic à la place) +- Appuyer sur entrer ouvre la première application correspondant à la requête +- Correction du contournement pour le bug lors de l'ouverture du clavier en mode plein écran +- Suppression de l'option de désinstallation pour les applications système +- Le bouton d'accueil fonctionne correctement maintenant + +Paramètres : +- Correction des paramètres pour les petits écrans +- Suppression du réglage de sensibilité (tout le monde le mettait de toute façon à maximum) +- Refonte des paramètres de date et d'heure diff --git a/fastlane/metadata/android/fr-FR/changelogs/24.txt b/fastlane/metadata/android/fr-FR/changelogs/24.txt new file mode 100644 index 0000000..6dfbb65 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/24.txt @@ -0,0 +1,8 @@ +* Ajout d'options pour le thème de couleur, la police, l'arrière-plan, les icônes monochromes +* Ajout d'options pour la date et l'heure +* Ajout d'une option pour autoriser la rotation +* Amélioration de l'algorithme de recherche +* Traduction en portugais brésilien - merci, Jonatas de Almeida Barros ! +* Correction d'un bug : les applications sélectionnées disparaissaient des paramètres +* Amélioration de la qualité du code +* Traductions mises à jour diff --git a/fastlane/metadata/android/fr-FR/changelogs/25.txt b/fastlane/metadata/android/fr-FR/changelogs/25.txt new file mode 100644 index 0000000..aaa415a --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/25.txt @@ -0,0 +1,4 @@ +* Applications favorites +* Option de cacher des applications +* Prise en charge des applications avec plusieurs activités principales +* Correction de la mise en page des paramètres sur les petits écrans diff --git a/fastlane/metadata/android/fr-FR/changelogs/26.txt b/fastlane/metadata/android/fr-FR/changelogs/26.txt new file mode 100644 index 0000000..cb67fab --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/26.txt @@ -0,0 +1 @@ +Correction de bugs diff --git a/fastlane/metadata/android/fr-FR/title.txt b/fastlane/metadata/android/fr-FR/title.txt new file mode 100644 index 0000000..4305604 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/title.txt @@ -0,0 +1 @@ +µLauncher From 537db5e75c6a59050ae6b036c5462ef3cea5dd37 Mon Sep 17 00:00:00 2001 From: toolatebot Date: Wed, 9 Oct 2024 00:03:39 +0000 Subject: [PATCH 015/281] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: jrpie-Launcher/Launcher Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/ --- app/src/main/res/values-fr/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b225441..8c0f9eb 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -140,8 +140,6 @@ Échanger la date et l\'heure Afficher la date Utiliser le format de date local - Erreur : -\nIl est impossible d\'afficher le volet des applications. Cette fonctionnalité n\'étant pas nativement supportée par Android, elle ne semble pas être implémentée sur votre appareil. Applis Fond d\'écran (liste d\'applications et réglages) Police From 12501cad89d6a67b0faa084d85811452f6bb2fd8 Mon Sep 17 00:00:00 2001 From: toby Date: Tue, 15 Oct 2024 08:55:01 +0000 Subject: [PATCH 016/281] Translated using Weblate (French) Currently translated at 100.0% (113 of 113 strings) Translation: jrpie-Launcher/Launcher Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/fr/ --- app/src/main/res/values-fr/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 8c0f9eb..c1df5bd 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -157,4 +157,7 @@ Applications Favorites Appli cachée. Vous pouvez l\'afficher à nouveau depuis les réglages. Défaire + Erreur : impossible d\'afficher la barre de statut. +\nCette action utilise des fonctionalités qui ne sont pas officiellement dans l\'API Android. Malheuresement ça ne semble pas fonctionner sur votre appareil. + Réglages rapides \ No newline at end of file From 6bdd9ed3409aed98fceeaac0c4a65287652572b4 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Thu, 17 Oct 2024 20:15:51 +0200 Subject: [PATCH 017/281] discord --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d5243b1..9ad4ec2 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![][shield-license]][license] [![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)][matrix] +[Chat on Discord][discord] @@ -87,6 +88,7 @@ There are several ways to contribute to this app: [shield-gh-star]: https://img.shields.io/github/stars/jrpie/Launcher?label=Star&style=social [shield-gh-fork]: https://img.shields.io/github/forks/jrpie/Launcher?label=Fork&style=social [matrix]: https://s.jrpie.de/launcher-matrix + [discord]: https://s.jrpie.de/launcher-discord From beabc941462af90494dbc18d649e442422076756 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Thu, 17 Oct 2024 20:19:26 +0200 Subject: [PATCH 018/281] discord --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9ad4ec2..3379726 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - +[![][shield-release]][latest-release] [![][shield-license]][license] [![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)][matrix] -[Chat on Discord][discord] +[![Chat on Discord](https://img.shields.io/badge/discord-join%20chat-007ec6.svg?style=flat)][discord] @@ -81,6 +81,7 @@ There are several ways to contribute to this app: [shield-release]: https://img.shields.io/github/v/release/jrpie/Launcher?style=flat + [latest-release]: https://github.com/jrpie/Launcher/releases/latest [shield-contribute]: https://img.shields.io/badge/contributions-welcome-007ec6.svg?style=flat [shield-license]: https://img.shields.io/badge/license-MIT-007ec6?style=flat From 3dced7ace6818bf3f7165bb3773b238affbe6013 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 18 Oct 2024 20:15:23 +0200 Subject: [PATCH 019/281] include hidden apps when selecting an app --- .../de/jrpie/android/launcher/Functions.kt | 1 - .../launcher/actions/LauncherAction.kt | 20 +++++++++++++-- .../jrpie/android/launcher/apps/AppFilter.kt | 25 +++++++++++++------ .../android/launcher/ui/list/ListActivity.kt | 15 ++++++----- .../ui/list/apps/AppsRecyclerAdapter.kt | 8 +++--- .../launcher/ui/list/apps/ListFragmentApps.kt | 23 ++++++++++++----- .../SettingsFragmentActionsRecycler.kt | 2 ++ 7 files changed, 68 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/Functions.kt b/app/src/main/java/de/jrpie/android/launcher/Functions.kt index 0db033d..f2d151d 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt @@ -5,7 +5,6 @@ import android.app.Service import android.app.role.RoleManager import android.content.Context import android.content.Intent -import android.content.pm.ApplicationInfo import android.content.pm.LauncherApps import android.content.pm.PackageManager import android.graphics.ColorMatrix diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt index a3acbb7..6442f47 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt @@ -10,6 +10,7 @@ import android.os.SystemClock import android.view.KeyEvent import android.widget.Toast import de.jrpie.android.launcher.R +import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppInfo.Companion.INVALID_USER import de.jrpie.android.launcher.ui.list.ListActivity import de.jrpie.android.launcher.ui.settings.SettingsActivity @@ -183,8 +184,23 @@ private fun openSettings(context: Context) { fun openAppsList(context: Context, favorite: Boolean = false, hidden: Boolean = false) { val intent = Intent(context, ListActivity::class.java) intent.putExtra("intention", ListActivity.ListActivityIntention.VIEW.toString()) - intent.putExtra("favorite", favorite) - intent.putExtra("hidden", hidden) + intent.putExtra( + "favoritesVisibility", + if (favorite) { + AppFilter.Companion.AppSetVisibility.EXCLUSIVE + } else { + AppFilter.Companion.AppSetVisibility.VISIBLE + } + ) + intent.putExtra( + "hiddenVisibility", + if (hidden) { + AppFilter.Companion.AppSetVisibility.EXCLUSIVE + } else { + AppFilter.Companion.AppSetVisibility.HIDDEN + } + ) + context.startActivity(intent) } diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt b/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt index a0c0490..a2420f7 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt @@ -6,19 +6,19 @@ import kotlin.text.Regex.Companion.escapeReplacement class AppFilter( var search: String, - var showOnlyFavorites: Boolean = false, - var showOnlyHidden: Boolean = false + var favoritesVisibility: AppSetVisibility = AppSetVisibility.VISIBLE, + var hiddenVisibility: AppSetVisibility = AppSetVisibility.HIDDEN, ) { operator fun invoke(apps: List): List { var apps = apps val hidden = LauncherPreferences.apps().hidden() ?: setOf() - apps = apps.filter { info -> !showOnlyHidden.xor(hidden.contains(info.app)) } - - if (showOnlyFavorites) { - val favorites = LauncherPreferences.apps().favorites() ?: setOf() - apps = apps.filter { info -> favorites.contains(info.app) } + val favorites = LauncherPreferences.apps().favorites() ?: setOf() + apps = apps.filter { info -> + favoritesVisibility.predicate(favorites, info) + && hiddenVisibility.predicate(hidden, info) } + // normalize text for search var allowedSpecialCharacters = search .lowercase(Locale.ROOT) @@ -52,4 +52,15 @@ class AppFilter( return r; } } + + companion object { + enum class AppSetVisibility( + val predicate: (set: Set, DetailedAppInfo) -> Boolean + ) { + VISIBLE({ _, _ -> true }), + HIDDEN({ set, appInfo -> !set.contains(appInfo.app) }), + EXCLUSIVE({ set, appInfo -> set.contains(appInfo.app) }), + ; + } + } } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt index 1074fb4..5a01237 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt @@ -18,6 +18,7 @@ import com.google.android.material.tabs.TabLayout import de.jrpie.android.launcher.R import de.jrpie.android.launcher.REQUEST_UNINSTALL import de.jrpie.android.launcher.actions.LauncherAction +import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.databinding.ListBinding import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.ui.UIObject @@ -27,8 +28,8 @@ import de.jrpie.android.launcher.ui.list.other.ListFragmentOther // TODO: Better solution for this intercommunication functionality (used in list-fragments) var intention = ListActivity.ListActivityIntention.VIEW -var showFavorites = false -var showHidden = false +var favoritesVisibility: AppFilter.Companion.AppSetVisibility = AppFilter.Companion.AppSetVisibility.VISIBLE +var hiddenVisibility: AppFilter.Companion.AppSetVisibility = AppFilter.Companion.AppSetVisibility.HIDDEN var forGesture: String? = null /** @@ -57,8 +58,10 @@ class ListActivity : AppCompatActivity(), UIObject { ?.let { ListActivityIntention.valueOf(it) } ?: ListActivityIntention.VIEW - showFavorites = bundle.getBoolean("favorite") ?: false - showHidden = bundle.getBoolean("hidden") ?: false + favoritesVisibility = bundle.getSerializable("favoritesVisibility") + as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility + hiddenVisibility = bundle.getSerializable("hiddenVisibility") + as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility if (intention != ListActivityIntention.VIEW) forGesture = bundle.getString("forGesture") @@ -126,9 +129,9 @@ class ListActivity : AppCompatActivity(), UIObject { fun updateTitle() { var titleResource = intention.titleResource if (intention == ListActivityIntention.VIEW) { - titleResource = if (showHidden) { + titleResource = if (hiddenVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { R.string.list_title_hidden - } else if (showFavorites) { + } else if (favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { R.string.list_title_favorite } else { R.string.list_title_view diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt index 618236a..2a42ed7 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/AppsRecyclerAdapter.kt @@ -258,13 +258,13 @@ class AppsRecyclerAdapter( } - fun setShowOnlyFavorites(show: Boolean) { - appFilter.showOnlyFavorites = show + fun setFavoritesVisibility(v: AppFilter.Companion.AppSetVisibility) { + appFilter.favoritesVisibility = v; updateAppsList() } - fun setShowHiddenApps(show: Boolean) { - appFilter.showOnlyHidden = show + fun setHiddenAppsVisibility(v: AppFilter.Companion.AppSetVisibility) { + appFilter.hiddenVisibility = v; updateAppsList() } } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt index 441e88a..c5b840d 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt @@ -13,10 +13,10 @@ import de.jrpie.android.launcher.openSoftKeyboard import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.list.ListActivity +import de.jrpie.android.launcher.ui.list.favoritesVisibility import de.jrpie.android.launcher.ui.list.forGesture +import de.jrpie.android.launcher.ui.list.hiddenVisibility import de.jrpie.android.launcher.ui.list.intention -import de.jrpie.android.launcher.ui.list.showFavorites -import de.jrpie.android.launcher.ui.list.showHidden /** @@ -47,7 +47,8 @@ class ListFragmentApps : Fragment(), UIObject { LauncherPreferences.getSharedPreferences() .registerOnSharedPreferenceChangeListener(sharedPreferencesListener) - binding.listAppsCheckBoxFavorites.isChecked = showFavorites + binding.listAppsCheckBoxFavorites.isChecked = + (favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) } override fun onStop() { @@ -64,7 +65,11 @@ class ListFragmentApps : Fragment(), UIObject { appsRViewAdapter = AppsRecyclerAdapter( requireActivity(), binding.root, intention, forGesture, - appFilter = AppFilter("", showOnlyFavorites = showFavorites, showOnlyHidden = showHidden) + appFilter = AppFilter( + "", + favoritesVisibility = favoritesVisibility, + hiddenVisibility = hiddenVisibility + ) ) // set up the list / recycler @@ -72,6 +77,7 @@ class ListFragmentApps : Fragment(), UIObject { // improve performance (since content changes don't change the layout size) setHasFixedSize(true) layoutManager = LinearLayoutManager(context) + // TODO: option to change this to GridLayoutManager(context, numCols) adapter = appsRViewAdapter } @@ -91,8 +97,13 @@ class ListFragmentApps : Fragment(), UIObject { }) binding.listAppsCheckBoxFavorites.setOnClickListener { - showFavorites = binding.listAppsCheckBoxFavorites.isChecked - appsRViewAdapter.setShowOnlyFavorites(showFavorites) + favoritesVisibility = + if (binding.listAppsCheckBoxFavorites.isChecked) { + AppFilter.Companion.AppSetVisibility.EXCLUSIVE + } else { + AppFilter.Companion.AppSetVisibility.VISIBLE + } + appsRViewAdapter.setFavoritesVisibility(favoritesVisibility) (activity as? ListActivity)?.updateTitle() } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt index 9d9685f..f80a558 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt @@ -17,6 +17,7 @@ import de.jrpie.android.launcher.R import de.jrpie.android.launcher.REQUEST_CHOOSE_APP import de.jrpie.android.launcher.actions.Action import de.jrpie.android.launcher.actions.Gesture +import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.databinding.SettingsActionsRecyclerBinding import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.transformGrayscale @@ -155,6 +156,7 @@ class ActionsRecyclerAdapter(val activity: Activity) : private fun chooseApp(gesture: Gesture) { val intent = Intent(activity, ListActivity::class.java) intent.putExtra("intention", ListActivity.ListActivityIntention.PICK.toString()) + intent.putExtra("hiddenVisibility", AppFilter.Companion.AppSetVisibility.VISIBLE) intent.putExtra("forGesture", gesture.id) // for which action we choose the app activity.startActivityForResult( intent, From b6965b0b10b07eba8397a077dbd75a8b7f441316 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Mon, 21 Oct 2024 15:07:03 +0200 Subject: [PATCH 020/281] fix #54 --- .../de/jrpie/android/launcher/ui/HomeActivity.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt index bcd255f..acff3c2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt @@ -8,6 +8,7 @@ import android.util.DisplayMetrics import android.view.GestureDetector import android.view.KeyEvent import android.view.MotionEvent +import android.view.ViewConfiguration import androidx.appcompat.app.AppCompatActivity import androidx.core.view.GestureDetectorCompat import androidx.core.view.isVisible @@ -200,17 +201,20 @@ class HomeActivity : UIObject, AppCompatActivity(), val edgeActions = LauncherPreferences.enabled_gestures().edgeSwipe() val edgeStrictness = 0.15 + val threshold = ViewConfiguration.get(this).scaledTouchSlop + var gesture = if (abs(diffX) > abs(diffY)) { // horizontal swipe - if (diffX > width / 4) + if (diffX > threshold) Gesture.SWIPE_LEFT - else if (diffX < -width / 4) + else if (diffX < -threshold) Gesture.SWIPE_RIGHT else null } else { // vertical swipe // Only open if the swipe was not from the phones top edge - if (diffY < -height / 8 && e1.y > 100) + // TODO: replace 100px by sensible dp value (e.g. twice the height of the status bar) + if (diffY < -threshold && e1.y > 100) Gesture.SWIPE_DOWN - else if (diffY > height / 8) + else if (diffY > threshold) Gesture.SWIPE_UP else null } From 5c28625b2ab331f0a848f809a9ec90af985b78fb Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Mon, 21 Oct 2024 18:11:09 +0200 Subject: [PATCH 021/281] updated github templates --- .github/ISSUE_TEMPLATE/bug_report.md | 20 +++++++++++++------- .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++-------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index fd22359..d14b126 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,25 +8,31 @@ assignees: '' --- # Describe the bug -A clear and concise description of what the bug is. + + # To Reproduce + + # Expected behavior -A clear and concise description of what you expected to happen. + + # Screenshots -If applicable, add screenshots to help explain your problem. + # Smartphone (please complete the following information) - - Device: [e.g. Samsung A7] - - Android Version: [e.g. Marshmallow, 6.0 or API 23] - - µLauncher Version: [e.g. j-0.0.11 or version code 25] + - Device: + - Android Version: + - µLauncher Version: # Additional info -Add any other info or comments about the problem here. + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 4ab974b..1a4f00c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,14 +7,18 @@ assignees: '' --- -# Mandatory: Please describe the problem to be solved -(Remove this text: Add a clear and concise description of the addressed problem. Don't say "add a button such that ... " but **why** this button should be added. This is very important as it allows to discuss alternative solutions.) +# Please describe the problem to be solved -# Optional: Describe the solution you would suggest -(Remove this text: A description of the solution, e.g. "add a button to the settings activity. When clicking that button ..." ) + -# Optional: Describe alternative solutions you've considered -(Remove this text: A description of any alternative solutions or features you've considered.) +# Describe the solution you would suggest -# Optional: Additional info -(Remove this text: Add any other info, comments or screenshots about the feature request here.) + + +# Describe alternative solutions you've considered + + + +# Additional info + + From 6cabcf51bd78979377bf7a04d67081bc7a7936c3 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Tue, 22 Oct 2024 12:41:52 +0200 Subject: [PATCH 022/281] limit angular tolerance of gesture detection (see #59) --- .../java/de/jrpie/android/launcher/ui/HomeActivity.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt index acff3c2..f23d25e 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt @@ -28,6 +28,7 @@ import kotlin.concurrent.fixedRateTimer import kotlin.math.abs import kotlin.math.max import kotlin.math.min +import kotlin.math.tan /** @@ -203,13 +204,15 @@ class HomeActivity : UIObject, AppCompatActivity(), val threshold = ViewConfiguration.get(this).scaledTouchSlop - var gesture = if (abs(diffX) > abs(diffY)) { // horizontal swipe + val angularThreshold = tan(Math.PI / 6) + + var gesture = if (angularThreshold * abs(diffX) > abs(diffY)) { // horizontal swipe if (diffX > threshold) Gesture.SWIPE_LEFT else if (diffX < -threshold) Gesture.SWIPE_RIGHT else null - } else { // vertical swipe + } else if (angularThreshold * abs(diffY) > abs(diffX)){ // vertical swipe // Only open if the swipe was not from the phones top edge // TODO: replace 100px by sensible dp value (e.g. twice the height of the status bar) if (diffY < -threshold && e1.y > 100) @@ -217,7 +220,7 @@ class HomeActivity : UIObject, AppCompatActivity(), else if (diffY > threshold) Gesture.SWIPE_UP else null - } + } else null if (doubleActions && bufferedPointerCount > 1) { gesture = gesture?.let(Gesture::getDoubleVariant) From 9bc8d6bb6d700ed6dd40a934e87b250ba3839f3a Mon Sep 17 00:00:00 2001 From: yzqzss Date: Sat, 26 Oct 2024 22:32:15 +0800 Subject: [PATCH 023/281] action: lock screen --- app/src/main/AndroidManifest.xml | 11 ++++ .../actions/LauncherAccessibilityService.kt | 51 +++++++++++++++++++ .../launcher/actions/LauncherAction.kt | 20 ++++++++ .../main/res/drawable/baseline_lock_24px.xml | 10 ++++ app/src/main/res/values/strings.xml | 16 ++++-- .../res/xml/accessibility_service_config.xml | 7 +++ 6 files changed, 110 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/de/jrpie/android/launcher/actions/LauncherAccessibilityService.kt create mode 100644 app/src/main/res/drawable/baseline_lock_24px.xml create mode 100644 app/src/main/res/xml/accessibility_service_config.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8cbc7ed..984d31a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -52,6 +52,17 @@ + + + + + + diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAccessibilityService.kt b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAccessibilityService.kt new file mode 100644 index 0000000..58da7a8 --- /dev/null +++ b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAccessibilityService.kt @@ -0,0 +1,51 @@ +package de.jrpie.android.launcher.actions + +import android.accessibilityservice.AccessibilityService +import android.accessibilityservice.AccessibilityServiceInfo +import android.content.Intent +import android.os.Build +import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityManager +import android.widget.Toast +import androidx.core.content.getSystemService +import de.jrpie.android.launcher.R + +class LauncherAccessibilityService : AccessibilityService() { + override fun onInterrupt() { + } + override fun onAccessibilityEvent(event: AccessibilityEvent?) { + } + + companion object { + const val ACTION_LOCK_SCREEN = "ACTION_LOCK_SCREEN" + } + + private fun isServiceEnabled(): Boolean { + val accessibilityManager = getSystemService() ?: return false + val enabledServices = accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK) + return enabledServices.any { it.id.contains(packageName) } + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + intent?.action?.let { action -> + if (!isServiceEnabled()) { + Toast.makeText(this, getString(R.string.toast_accessibility_service_not_enabled), Toast.LENGTH_LONG).show() + startActivity(Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) + return START_NOT_STICKY + } + + when (action) { + ACTION_LOCK_SCREEN -> handleLockScreen() + } + } + return super.onStartCommand(intent, flags, startId) + } + + private fun handleLockScreen(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + performGlobalAction(GLOBAL_ACTION_LOCK_SCREEN) + } else { + Toast.makeText(this, getText(R.string.toast_lock_screen_not_supported), Toast.LENGTH_SHORT).show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt index 4d5c8f4..ed7f003 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt @@ -10,6 +10,7 @@ import android.os.SystemClock import android.view.KeyEvent import android.widget.Toast import de.jrpie.android.launcher.R +import de.jrpie.android.launcher.actions.LauncherAccessibilityService.Companion.ACTION_LOCK_SCREEN import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppInfo.Companion.INVALID_USER import de.jrpie.android.launcher.ui.list.ListActivity @@ -71,6 +72,12 @@ enum class LauncherAction( R.drawable.baseline_settings_applications_24, ::expandSettingsPanel ), + LOCK_SCREEN( + "launcher:lockScreen", + R.string.list_other_lock_screen, + R.drawable.baseline_lock_24px, + ::lockScreen + ), NOP("launcher:nop", R.string.list_other_nop, R.drawable.baseline_not_interested_24, {}); override fun invoke(context: Context, rect: Rect?): Boolean { @@ -199,6 +206,19 @@ private fun expandSettingsPanel(context: Context) { } } +private fun lockScreen(context: Context){ + try { + context.startService(Intent(context, LauncherAccessibilityService::class.java).apply { + action = ACTION_LOCK_SCREEN + }) + } catch (e: Exception) { + Toast.makeText( + context, + context.getString(R.string.alert_lock_screen_failed), + Toast.LENGTH_LONG + ).show() + } +} private fun openSettings(context: Context) { context.startActivity(Intent(context, SettingsActivity::class.java)) diff --git a/app/src/main/res/drawable/baseline_lock_24px.xml b/app/src/main/res/drawable/baseline_lock_24px.xml new file mode 100644 index 0000000..11d93f2 --- /dev/null +++ b/app/src/main/res/drawable/baseline_lock_24px.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c17d4e3..fd7b221 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,13 +1,18 @@ - + Enable lock screen action + Can\'t open app Want to change its settings? + Failed to lock screen + Open settings to choose an action for this gesture + μLauncher\'s accessibility service is not enabled. Please enable it in settings + Sorry, lock screen is available on Android 9+ + - + - Home + - + --> Can\'t open app Want to change its settings? - Failed to lock screen - Open settings to choose an action for this gesture - μLauncher\'s accessibility service is not enabled. Please enable it in settings - Sorry, lock screen is available on Android 9+ Swipe Up + Swipe up Double Up + Swipe up with two fingers Swipe Down + Swipe down Double Down + Swipe down with two fingers Swipe Left + Swipe left Double Left + Swipe left with two fingers Swipe Right + Swipe right Double Right + Swipe right with two fingers Swipe Right (Top) + Swipe right at the top of the screen Swipe Right (Bottom) + Swipe right at the bottom of the screen Swipe Left (Bottom) + Swipe left at the bottom of the screen Swipe Left (Top) + Swipe left at the top of the screen Swipe Up (Left Edge) + Swipe up at the left edge of the screen Swipe Up (Right Edge) + Swipe up at the right edge of the screen Swipe Down (Left Edge) + Swipe down at the left edge of the screen Swipe Down (Right Edge) + Swipe down at the right edge of the screen Volume Up + Press the volume up button Volume Down + Press the volume down button Double Click + Double click an empty area Long Click + Long click an empty area Click on Date + Click on Date Click on Time + Click on Time + Choose App From 3f1263f6480aa2b696fa055c75d7eec51a68bd71 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Sat, 2 Nov 2024 00:17:10 +0100 Subject: [PATCH 029/281] gesture descriptions on android < 8 (cf. #55) --- .../jrpie/android/launcher/actions/Gesture.kt | 2 +- .../SettingsFragmentActionsRecycler.kt | 9 ++++-- .../main/res/layout/settings_actions_row.xml | 28 ++++++++++++---- app/src/main/res/values/strings.xml | 32 +++++++++---------- 4 files changed, 46 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt b/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt index f231658..6270eba 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/Gesture.kt @@ -34,7 +34,7 @@ enum class Gesture( ), TIME("action.time", R.string.settings_gesture_time, - R.string.settings_gesture_time, + R.string.settings_gesture_description_time, R.array.default_time), DATE("action.date", R.string.settings_gesture_date, diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt index 4f7c901..c061716 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/actions/SettingsFragmentActionsRecycler.kt @@ -84,6 +84,7 @@ class ActionsRecyclerAdapter(val activity: Activity) : inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { var textView: TextView = itemView.findViewById(R.id.settings_actions_row_name) + var descriptionTextView: TextView = itemView.findViewById(R.id.settings_actions_row_description) var img: ImageView = itemView.findViewById(R.id.settings_actions_row_icon_img) var chooseButton: Button = itemView.findViewById(R.id.settings_actions_row_button_choose) var removeAction: ImageView = itemView.findViewById(R.id.settings_actions_row_remove) @@ -115,12 +116,16 @@ class ActionsRecyclerAdapter(val activity: Activity) : override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) { val gesture = gesturesList[i] viewHolder.textView.text = gesture.getLabel(activity) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val description = gesture.getDescription(activity) + val description = gesture.getDescription(activity) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { viewHolder.textView.tooltipText = description viewHolder.img.tooltipText = description viewHolder.chooseButton.tooltipText = description + } else { + viewHolder.descriptionTextView.visibility = View.VISIBLE + viewHolder.descriptionTextView.text = description } if (LauncherPreferences.theme().monochromeIcons()) transformGrayscale(viewHolder.img) diff --git a/app/src/main/res/layout/settings_actions_row.xml b/app/src/main/res/layout/settings_actions_row.xml index 645cc44..ee943b9 100644 --- a/app/src/main/res/layout/settings_actions_row.xml +++ b/app/src/main/res/layout/settings_actions_row.xml @@ -7,19 +7,34 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + app:layout_constraintTop_toTopOf="parent"> + + + + +