Compare commits

...

54 commits

Author SHA1 Message Date
22633bdac3
try to fix #138
Some checks failed
Android CI / build (push) Has been cancelled
2025-04-15 19:24:23 +02:00
4f795289d5
improve English translation 2025-04-15 18:55:13 +02:00
2774b74d9d
0.1.4 2025-04-15 18:38:00 +02:00
3d49ec16a7
Merge pull request #132 from toolatebot/weblate-jrpie-launcher-launcher
Some checks failed
Android CI / build (push) Has been cancelled
Translations update from Toolate
2025-04-13 16:27:29 +02:00
letterhaven
a0b2417363 Translated using Weblate (Arabic)
Currently translated at 99.6% (257 of 258 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/ar/
2025-04-13 14:07:19 +00:00
letterhaven
20a01e9f03 Added translation using Weblate (Arabic) 2025-04-13 14:07:19 +00:00
Lukas Hamm
24250ad345 Translated using Weblate (Lithuanian)
Currently translated at 5.4% (14 of 258 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/lt/
2025-04-13 14:07:18 +00:00
Lukas Hamm
7cce425339 Added translation using Weblate (Lithuanian) 2025-04-13 14:07:18 +00:00
class0068
0877ca6772 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 14.2% (3 of 21 strings)

Translation: jrpie-Launcher/metadata
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/metadata/zh_Hans/
2025-04-13 14:07:18 +00:00
class0068
03a9833b51 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (258 of 258 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-04-13 14:07:18 +00:00
Vossa Excelencia
ce65741717 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (258 of 258 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
2025-04-13 14:07:18 +00:00
class0068
c085087e1e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (257 of 257 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-04-13 14:07:18 +00:00
class0068
cbd23159da Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.8% (254 of 257 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-04-13 14:07:18 +00:00
Vossa Excelencia
940e5785dc Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
2025-04-13 14:07:18 +00:00
class0068
14ffbd1f6c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-04-13 14:07:18 +00:00
Vossa Excelencia
bfc84b57ca Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/pt_BR/
2025-04-13 14:07:18 +00:00
T
8b1963f3e1 Translated using Weblate (Spanish)
Currently translated at 98.0% (249 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/es/
2025-04-13 14:07:18 +00:00
toolatebot
4f801427a4 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/
2025-04-13 14:07:18 +00:00
class0068
8a487eb4c7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-04-13 14:07:18 +00:00
class0068
e6dd2634ae Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-04-13 14:07:18 +00:00
0441b3fd3d
set max width for choose app button; change label from scegliere l'applicazione to scegliere in Italian
Some checks are pending
Android CI / build (push) Waiting to run
2025-04-13 14:54:11 +02:00
e7c1d28576
upgrade AGP 2025-04-13 14:40:57 +02:00
653d16b269
new action: launch other launchers
Some checks failed
Android CI / build (push) Has been cancelled
2025-03-29 21:09:15 +01:00
5d695ec0ea
fix #135 2025-03-29 18:45:53 +01:00
b4608ef153
add new action: show recent apps
Some checks failed
Android CI / build (push) Has been cancelled
2025-03-24 13:21:58 +01:00
8e140e2e69
rename tab "Apps" to "Actions" and "Volume Up/Down" to "Volume Up/Down Key"
Some checks failed
Android CI / build (push) Has been cancelled
2025-03-20 16:23:01 +01:00
7fc58fe384
0.1.3 2025-03-20 15:52:12 +01:00
54409b6312
fix #133 2025-03-20 14:55:22 +01:00
865cd47583
0.1.2 2025-03-20 14:16:29 +01:00
58ddd3c8cc
fix #130 - revert part of 9043461 as ViewPager2 causes an issue with opening the keyboard 2025-03-20 14:09:00 +01:00
0baa889de5
0.1.1
Some checks are pending
Android CI / build (push) Waiting to run
2025-03-19 17:55:35 +01:00
fa34cbae90
Merge pull request #128 from toolatebot/weblate-jrpie-launcher-launcher
Some checks are pending
Android CI / build (push) Waiting to run
Translations update from Toolate
2025-03-19 17:05:33 +01:00
7ac09bd465 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-03-18 19:30:19 +00:00
class0068
c8d7a1cc3e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-03-18 19:30:19 +00:00
7094d55484 Translated using Weblate (German)
Currently translated at 100.0% (254 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/de/
2025-03-18 19:30:19 +00:00
b3e4d8834a
Merge pull request #127 from toolatebot/weblate-jrpie-launcher-launcher
Some checks failed
Android CI / build (push) Has been cancelled
Translations update from Toolate
2025-03-17 23:01:16 +01:00
008d0242ee Translated using Weblate (German)
Currently translated at 96.8% (246 of 254 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/de/
2025-03-17 17:07:17 +00:00
toolatebot
65034bf2fb 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/
2025-03-16 16:28:08 +00:00
Anonymous
3cec2c36c6 Translated using Weblate (German)
Currently translated at 92.7% (242 of 261 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/de/
2025-03-16 16:28:08 +00:00
00350d4c3a Translated using Weblate (German)
Currently translated at 92.7% (242 of 261 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/de/
2025-03-16 16:28:08 +00:00
0941062270
Merge pull request #121 from toolatebot/weblate-jrpie-launcher-launcher
Some checks failed
Android CI / build (push) Has been cancelled
Translations update from Toolate
2025-03-16 17:04:56 +01:00
c783a51658
upgrade AGP 2025-03-16 16:52:46 +01:00
da115bb2d9
refactor: remove unused stuff, fix lint warnings
Some checks are pending
Android CI / build (push) Waiting to run
2025-03-16 16:37:39 +01:00
90434617e7
replace (ViewPager, FragmentPagerAdapter) by (ViewPager2, FragmentStateAdapter) 2025-03-16 04:12:34 +01:00
47940811b4
fix #126
Some checks are pending
Android CI / build (push) Waiting to run
2025-03-16 02:30:49 +01:00
toolatebot
232046e986 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/
2025-03-16 00:07:18 +00:00
toolatebot
ff108ee323 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/
2025-03-16 00:07:18 +00:00
anmoti
943867d938 Translated using Weblate (Japanese)
Currently translated at 78.4% (200 of 255 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/ja/
2025-03-16 00:07:18 +00:00
anmoti
59f4a29044 Translated using Weblate (Japanese)
Currently translated at 17.6% (3 of 17 strings)

Translation: jrpie-Launcher/metadata
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/metadata/ja/
2025-03-16 00:07:18 +00:00
class0068
bd70b822cf Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.4% (251 of 255 strings)

Translation: jrpie-Launcher/Launcher
Translate-URL: https://toolate.othing.xyz/projects/jrpie-launcher/launcher/zh_Hans/
2025-03-16 00:07:18 +00:00
72f9c0595f
handle MotionEvent.ACTION_CANCEL in TouchGestureDetector (see #126)
Some checks are pending
Android CI / build (push) Waiting to run
2025-03-15 19:23:51 +01:00
75b22400c5
try to fix #125 2025-03-15 17:24:19 +01:00
c1511cd475
merge #124 - improve tutorial
Some checks are pending
Android CI / build (push) Waiting to run
* Add new "app list" section
* Rename fragments
* Replace screenshots
* Replace ViewPager by ViewPager2
* Add navigation buttons

Co-authored-by: Luke Wass <wassupluke@gmail.com>
2025-03-15 03:26:37 +01:00
3597baee1f
fix problem which switching from grayscale icons back to normal
Some checks are pending
Android CI / build (push) Waiting to run
2025-03-14 22:33:08 +01:00
94 changed files with 2023 additions and 1012 deletions

View file

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java-23-openjdk/" export JAVA_HOME="/usr/lib/jvm/java-21-openjdk/"
OUTPUT_DIR="$HOME/launcher-release" OUTPUT_DIR="$HOME/launcher-release"
BUILD_TOOLS_DIR="$HOME/Android/Sdk/build-tools/35.0.0" BUILD_TOOLS_DIR="$HOME/Android/Sdk/build-tools/35.0.0"
KEYSTORE="$HOME/data/keys/launcher_jrpie.jks" KEYSTORE="$HOME/data/keys/launcher_jrpie.jks"

View file

@ -23,8 +23,8 @@ android {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 35 targetSdkVersion 35
compileSdk 35 compileSdk 35
versionCode 40 versionCode 44
versionName "0.1.0" versionName "0.1.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
@ -85,17 +85,17 @@ android {
// Disables dependency metadata when building Android App Bundles. // Disables dependency metadata when building Android App Bundles.
includeInBundle = false includeInBundle = false
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.activity:activity:1.8.0' implementation 'androidx.activity:activity-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.core:core-ktx:1.15.0' implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.2.0'

View file

@ -85,7 +85,7 @@
<service <service
android:name=".actions.lock.LauncherAccessibilityService" android:name=".actions.lock.LauncherAccessibilityService"
android:exported="true" android:exported="true"
android:label="@string/accessibility_service_name" android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter> <intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" /> <action android:name="android.accessibilityservice.AccessibilityService" />
@ -97,4 +97,4 @@
</service> </service>
</application> </application>
</manifest> </manifest>

View file

@ -7,11 +7,8 @@ import android.content.IntentFilter
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.pm.LauncherApps import android.content.pm.LauncherApps
import android.content.pm.ShortcutInfo import android.content.pm.ShortcutInfo
import android.os.AsyncTask
import android.os.Build import android.os.Build
import android.os.Build.VERSION_CODES import android.os.Build.VERSION_CODES
import android.os.Handler
import android.os.Looper
import android.os.UserHandle import android.os.UserHandle
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
@ -23,6 +20,9 @@ import de.jrpie.android.launcher.apps.isPrivateSpaceLocked
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.preferences.migratePreferencesToNewVersion import de.jrpie.android.launcher.preferences.migratePreferencesToNewVersion
import de.jrpie.android.launcher.preferences.resetPreferences import de.jrpie.android.launcher.preferences.resetPreferences
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class Application : android.app.Application() { class Application : android.app.Application() {
val apps = MutableLiveData<List<AbstractDetailedAppInfo>>() val apps = MutableLiveData<List<AbstractDetailedAppInfo>>()
@ -153,6 +153,8 @@ class Application : android.app.Application() {
private fun loadApps() { private fun loadApps() {
privateSpaceLocked.postValue(isPrivateSpaceLocked(this)) privateSpaceLocked.postValue(isPrivateSpaceLocked(this))
AsyncTask.execute { apps.postValue(getApps(packageManager, applicationContext)) } CoroutineScope(Dispatchers.Default).launch {
apps.postValue(getApps(packageManager, applicationContext))
}
} }
} }

View file

@ -12,7 +12,6 @@ import android.content.pm.LauncherApps
import android.content.pm.LauncherApps.ShortcutQuery import android.content.pm.LauncherApps.ShortcutQuery
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.ShortcutInfo import android.content.pm.ShortcutInfo
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.UserHandle import android.os.UserHandle
@ -34,17 +33,13 @@ import de.jrpie.android.launcher.apps.getPrivateSpaceUser
import de.jrpie.android.launcher.apps.isPrivateSpaceSupported import de.jrpie.android.launcher.apps.isPrivateSpaceSupported
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.ui.tutorial.TutorialActivity import de.jrpie.android.launcher.ui.tutorial.TutorialActivity
import androidx.core.net.toUri
/* REQUEST CODES */
const val REQUEST_CHOOSE_APP = 1
const val REQUEST_UNINSTALL = 2
const val REQUEST_SET_DEFAULT_HOME = 42
const val LOG_TAG = "Launcher" const val LOG_TAG = "Launcher"
const val REQUEST_SET_DEFAULT_HOME = 42
fun isDefaultHomeScreen(context: Context): Boolean { fun isDefaultHomeScreen(context: Context): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val roleManager = context.getSystemService(RoleManager::class.java) val roleManager = context.getSystemService(RoleManager::class.java)
@ -66,7 +61,7 @@ fun setDefaultHomeScreen(context: Context, checkDefault: Boolean = false) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
&& context is Activity && context is Activity
&& !isDefault // using role manager only works when µLauncher is not already the default. && checkDefault // using role manager only works when µLauncher is not already the default.
) { ) {
val roleManager = context.getSystemService(RoleManager::class.java) val roleManager = context.getSystemService(RoleManager::class.java)
context.startActivityForResult( context.startActivityForResult(
@ -125,7 +120,7 @@ fun removeUnusedShortcuts(context: Context) {
} }
fun openInBrowser(url: String, context: Context) { fun openInBrowser(url: String, context: Context) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val intent = Intent(Intent.ACTION_VIEW, url.toUri())
intent.putExtras(Bundle().apply { putBoolean("new_window", true) }) intent.putExtras(Bundle().apply { putBoolean("new_window", true) })
try { try {
context.startActivity(intent) context.startActivity(intent)
@ -194,7 +189,7 @@ fun getApps(
loadList.add(detailedAppInfo) loadList.add(detailedAppInfo)
} }
} }
loadList.sortBy { it.getCustomLabel(context).toString() } loadList.sortBy { it.getCustomLabel(context) }
var end = System.currentTimeMillis() var end = System.currentTimeMillis()
Log.i(LOG_TAG, "${loadList.size} apps loaded (${end - start}ms)") Log.i(LOG_TAG, "${loadList.size} apps loaded (${end - start}ms)")
@ -212,14 +207,6 @@ fun getApps(
return loadList return loadList
} }
// Used in Tutorial and Settings `ActivityOnResult`
fun saveListActivityChoice(data: Intent?) {
val forGesture = data?.getStringExtra("forGesture") ?: return
Gesture.byId(forGesture)?.let { Action.setActionForGesture(it, Action.fromIntent(data)) }
}
// used for the bug report button // used for the bug report button
fun getDeviceInfo(): String { fun getDeviceInfo(): String {
return """ return """

View file

@ -2,7 +2,6 @@ package de.jrpie.android.launcher.actions
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent
import android.content.SharedPreferences.Editor import android.content.SharedPreferences.Editor
import android.graphics.Rect import android.graphics.Rect
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
@ -12,6 +11,7 @@ import de.jrpie.android.launcher.preferences.LauncherPreferences
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import androidx.core.content.edit
@Serializable @Serializable
@ -29,10 +29,6 @@ sealed interface Action {
prefEditor.putString(id, Json.encodeToString(this)) prefEditor.putString(id, Json.encodeToString(this))
} }
fun writeToIntent(intent: Intent) {
intent.putExtra("action", Json.encodeToString(this))
}
companion object { companion object {
fun forGesture(gesture: Gesture): Action? { fun forGesture(gesture: Gesture): Action? {
@ -44,23 +40,23 @@ sealed interface Action {
} }
fun resetToDefaultActions(context: Context) { fun resetToDefaultActions(context: Context) {
val editor = LauncherPreferences.getSharedPreferences().edit() LauncherPreferences.getSharedPreferences().edit {
val boundActions = HashSet<String>() val boundActions = HashSet<String>()
Gesture.entries.forEach { gesture -> Gesture.entries.forEach { gesture ->
context.resources context.resources
.getStringArray(gesture.defaultsResource) .getStringArray(gesture.defaultsResource)
.filterNot { boundActions.contains(it) } .filterNot { boundActions.contains(it) }
.map { Pair(it, Json.decodeFromString<Action>(it)) } .map { Pair(it, Json.decodeFromString<Action>(it)) }
.firstOrNull { it.second.isAvailable(context) } .firstOrNull { it.second.isAvailable(context) }
?.apply { ?.apply {
// allow to bind CHOOSE to multiple gestures // allow to bind CHOOSE to multiple gestures
if (second != LauncherAction.CHOOSE) { if (second != LauncherAction.CHOOSE) {
boundActions.add(first) boundActions.add(first)
}
second.bindToGesture(this@edit, gesture.id)
} }
second.bindToGesture(editor, gesture.id) }
}
} }
editor.apply()
} }
fun setActionForGesture(gesture: Gesture, action: Action?) { fun setActionForGesture(gesture: Gesture, action: Action?) {
@ -68,15 +64,15 @@ sealed interface Action {
clearActionForGesture(gesture) clearActionForGesture(gesture)
return return
} }
val editor = LauncherPreferences.getSharedPreferences().edit() LauncherPreferences.getSharedPreferences().edit {
action.bindToGesture(editor, gesture.id) action.bindToGesture(this, gesture.id)
editor.apply() }
} }
fun clearActionForGesture(gesture: Gesture) { fun clearActionForGesture(gesture: Gesture) {
LauncherPreferences.getSharedPreferences().edit() LauncherPreferences.getSharedPreferences().edit {
.remove(gesture.id) remove(gesture.id)
.apply() }
} }
fun launch( fun launch(
@ -87,6 +83,9 @@ sealed interface Action {
) { ) {
if (action != null && action.invoke(context)) { if (action != null && action.invoke(context)) {
if (context is Activity) { if (context is Activity) {
// There does not seem to be a good alternative to overridePendingTransition.
// Note that we can't use overrideActivityTransition here.
@Suppress("deprecation")
context.overridePendingTransition(animationIn, animationOut) context.overridePendingTransition(animationIn, animationOut)
} }
} else { } else {
@ -97,10 +96,5 @@ sealed interface Action {
).show() ).show()
} }
} }
fun fromIntent(data: Intent): Action? {
val json = data.getStringExtra("action") ?: return null
return Json.decodeFromString(json)
}
} }
} }

View file

@ -250,7 +250,7 @@ enum class Gesture(
"action.back", "action.back",
R.string.settings_gesture_back, R.string.settings_gesture_back,
R.string.settings_gesture_description_back, R.string.settings_gesture_description_back,
R.array.default_up R.array.default_back
); );
enum class Edge { enum class Edge {

View file

@ -11,7 +11,9 @@ import android.view.KeyEvent
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.BuildConfig
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.actions.lock.LauncherAccessibilityService
import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppFilter
import de.jrpie.android.launcher.apps.hidePrivateSpaceWhenLocked import de.jrpie.android.launcher.apps.hidePrivateSpaceWhenLocked
import de.jrpie.android.launcher.apps.isPrivateSpaceSupported import de.jrpie.android.launcher.apps.isPrivateSpaceSupported
@ -132,6 +134,14 @@ enum class LauncherAction(
R.drawable.baseline_settings_applications_24, R.drawable.baseline_settings_applications_24,
::expandSettingsPanel ::expandSettingsPanel
), ),
RECENT_APPS(
"recent_apps",
R.string.list_other_recent_apps,
R.drawable.baseline_apps_24,
LauncherAccessibilityService::openRecentApps,
false,
{ _ -> BuildConfig.USE_ACCESSIBILITY_SERVICE }
),
LOCK_SCREEN( LOCK_SCREEN(
"lock_screen", "lock_screen",
R.string.list_other_lock_screen, R.string.list_other_lock_screen,
@ -142,7 +152,13 @@ enum class LauncherAction(
"toggle_torch", "toggle_torch",
R.string.list_other_torch, R.string.list_other_torch,
R.drawable.baseline_flashlight_on_24, R.drawable.baseline_flashlight_on_24,
::toggleTorch ::toggleTorch,
),
LAUNCH_OTHER_LAUNCHER(
"launcher_other_launcher",
R.string.list_other_launch_other_launcher,
R.drawable.baseline_home_24,
::launchOtherLauncher
), ),
NOP("nop", R.string.list_other_nop, R.drawable.baseline_not_interested_24, {}); NOP("nop", R.string.list_other_nop, R.drawable.baseline_not_interested_24, {});
@ -248,6 +264,15 @@ private fun expandSettingsPanel(context: Context) {
} }
} }
private fun launchOtherLauncher(context: Context) {
context.startActivity(
Intent.createChooser(
Intent(Intent.ACTION_MAIN).also { it.addCategory(Intent.CATEGORY_HOME) },
context.getString(R.string.list_other_launch_other_launcher)
)
)
}
private fun openSettings(context: Context) { private fun openSettings(context: Context) {
context.startActivity(Intent(context, SettingsActivity::class.java)) context.startActivity(Intent(context, SettingsActivity::class.java))
} }

View file

@ -22,26 +22,44 @@ class LauncherAccessibilityService : AccessibilityService() {
companion object { companion object {
private const val TAG = "Launcher Accessibility" private const val TAG = "Launcher Accessibility"
private const val ACTION_REQUEST_ENABLE = "ACTION_REQUEST_ENABLE"
const val ACTION_LOCK_SCREEN = "ACTION_LOCK_SCREEN" const val ACTION_LOCK_SCREEN = "ACTION_LOCK_SCREEN"
const val ACTION_RECENT_APPS = "ACTION_RECENT_APPS"
fun lockScreen(context: Context) { private fun invoke(context: Context, action: String, failureMessageRes: Int) {
try { try {
context.startService( context.startService(
Intent( Intent(
context, context,
LauncherAccessibilityService::class.java LauncherAccessibilityService::class.java
).apply { ).apply {
action = ACTION_LOCK_SCREEN this.action = action
}) })
} catch (e: Exception) { } catch (_: Exception) {
Toast.makeText( Toast.makeText(
context, context,
context.getString(R.string.alert_lock_screen_failed), context.getString(failureMessageRes),
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
} }
} }
fun lockScreen(context: Context) {
if (!isEnabled(context)) {
showEnableDialog(context)
} else {
invoke(context, ACTION_LOCK_SCREEN, R.string.alert_lock_screen_failed)
}
}
fun openRecentApps(context: Context) {
if (!isEnabled(context)) {
showEnableDialog(context)
} else {
invoke(context, ACTION_RECENT_APPS, R.string.alert_recent_apps_failed)
}
}
fun isEnabled(context: Context): Boolean { fun isEnabled(context: Context): Boolean {
val enabledServices = Settings.Secure.getString( val enabledServices = Settings.Secure.getString(
context.contentResolver, context.contentResolver,
@ -58,7 +76,7 @@ class LauncherAccessibilityService : AccessibilityService() {
setView(R.layout.dialog_consent_accessibility) setView(R.layout.dialog_consent_accessibility)
setTitle(R.string.dialog_consent_accessibility_title) setTitle(R.string.dialog_consent_accessibility_title)
setPositiveButton(R.string.dialog_consent_accessibility_ok) { _, _ -> setPositiveButton(R.string.dialog_consent_accessibility_ok) { _, _ ->
lockScreen(context) invoke(context, ACTION_REQUEST_ENABLE, R.string.alert_enable_accessibility_failed)
} }
setNegativeButton(R.string.dialog_cancel) { _, _ -> } setNegativeButton(R.string.dialog_cancel) { _, _ -> }
}.create().also { it.show() }.apply { }.create().also { it.show() }.apply {
@ -94,7 +112,9 @@ class LauncherAccessibilityService : AccessibilityService() {
} }
when (action) { when (action) {
ACTION_REQUEST_ENABLE -> {} // do nothing
ACTION_LOCK_SCREEN -> handleLockScreen() ACTION_LOCK_SCREEN -> handleLockScreen()
ACTION_RECENT_APPS -> performGlobalAction(GLOBAL_ACTION_RECENTS)
} }
} }
return super.onStartCommand(intent, flags, startId) return super.onStartCommand(intent, flags, startId)

View file

@ -6,10 +6,10 @@ import android.widget.Button
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import de.jrpie.android.launcher.BuildConfig import de.jrpie.android.launcher.BuildConfig
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.actions.lock.LauncherAccessibilityService
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
@Suppress("unused")
enum class LockMethod( enum class LockMethod(
private val lock: (Context) -> Unit, private val lock: (Context) -> Unit,
private val isEnabled: (Context) -> Boolean, private val isEnabled: (Context) -> Boolean,

View file

@ -15,19 +15,7 @@ import kotlinx.serialization.Serializable
*/ */
@Serializable @Serializable
@SerialName("app") @SerialName("app")
class AppInfo(val packageName: String, val activityName: String?, val user: Int = INVALID_USER): AbstractAppInfo { data class AppInfo(val packageName: String, val activityName: String?, val user: Int = INVALID_USER): AbstractAppInfo {
override fun equals(other: Any?): Boolean {
if(other is AppInfo) {
return other.user == user && other.packageName == packageName
&& other.activityName == activityName
}
return super.equals(other)
}
override fun hashCode(): Int {
return packageName.hashCode()
}
fun getLauncherActivityInfo( fun getLauncherActivityInfo(
context: Context context: Context
@ -38,10 +26,4 @@ class AppInfo(val packageName: String, val activityName: String?, val user: Int
return activityList.firstOrNull { app -> app.name == activityName } return activityList.firstOrNull { app -> app.name == activityName }
?: activityList.firstOrNull() ?: activityList.firstOrNull()
} }
override fun toString(): String {
return "AppInfo {package=$packageName, activity=$activityName, user=$user}"
}
} }

View file

@ -16,7 +16,7 @@ import kotlinx.serialization.Serializable
@RequiresApi(Build.VERSION_CODES.N_MR1) @RequiresApi(Build.VERSION_CODES.N_MR1)
@Serializable @Serializable
@SerialName("shortcut") @SerialName("shortcut")
class PinnedShortcutInfo( data class PinnedShortcutInfo(
val id: String, val id: String,
val packageName: String, val packageName: String,
val activityName: String, val activityName: String,
@ -43,25 +43,4 @@ class PinnedShortcutInfo(
null null
} }
} }
override fun equals(other: Any?): Boolean {
return (other as? PinnedShortcutInfo)?.let {
packageName == this.packageName &&
activityName == this.activityName &&
id == this.id &&
user == this.user
} ?: false
}
override fun hashCode(): Int {
var result = id.hashCode()
result = 31 * result + packageName.hashCode()
result = 31 * result + activityName.hashCode()
result = 31 * result + user
return result
}
override fun toString(): String {
return "PinnedShortcutInfo { package=$packageName, activity=$activityName, user=$user, id=$id}"
}
} }

View file

@ -123,6 +123,7 @@ fun togglePrivateSpaceLock(context: Context) {
} }
} }
@Suppress("SameReturnValue")
fun hidePrivateSpaceWhenLocked(context: Context): Boolean { fun hidePrivateSpaceWhenLocked(context: Context): Boolean {
// Trying to access the setting as a 3rd party launcher raises a security exception. // Trying to access the setting as a 3rd party launcher raises a security exception.
// This is an Android bug: https://issuetracker.google.com/issues/352276244#comment5 // This is an Android bug: https://issuetracker.google.com/issues/352276244#comment5

View file

@ -17,6 +17,7 @@ import androidx.core.graphics.green
import androidx.core.graphics.red import androidx.core.graphics.red
import androidx.preference.Preference import androidx.preference.Preference
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import androidx.core.graphics.toColorInt
class ColorPreference(context: Context, attrs: AttributeSet?) : class ColorPreference(context: Context, attrs: AttributeSet?) :
Preference(context, attrs) { Preference(context, attrs) {
@ -52,7 +53,7 @@ class ColorPreference(context: Context, attrs: AttributeSet?) :
AlertDialog.Builder(context, R.style.AlertDialogCustom).apply { AlertDialog.Builder(context, R.style.AlertDialogCustom).apply {
setView(R.layout.dialog_choose_color) setView(R.layout.dialog_choose_color)
setTitle(R.string.dialog_choose_color_title) setTitle(R.string.dialog_choose_color_title)
setPositiveButton(R.string.dialog_select_color_ok) { _, _ -> setPositiveButton(android.R.string.ok) { _, _ ->
persistInt(currentColor) persistInt(currentColor)
summary = currentColor.getHex() summary = currentColor.getHex()
} }
@ -83,10 +84,10 @@ class ColorPreference(context: Context, attrs: AttributeSet?) :
override fun onTextChanged(text: CharSequence?, p1: Int, p2: Int, p3: Int) {} override fun onTextChanged(text: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable?) { override fun afterTextChanged(editable: Editable?) {
preview.hasFocus() || return preview.hasFocus() || return
val newText = editable?.toString() val newText = editable?.toString() ?: return
newText.isNullOrBlank() && return newText.isBlank() && return
try { try {
val newColor = Color.parseColor(newText.toString()) val newColor = newText.toColorInt()
currentColor = newColor currentColor = newColor
updateColor(false) updateColor(false)
} catch (_: IllegalArgumentException) { } catch (_: IllegalArgumentException) {

View file

@ -1,6 +1,7 @@
package de.jrpie.android.launcher.preferences package de.jrpie.android.launcher.preferences
import android.content.Context import android.content.Context
import android.util.TypedValue
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -27,8 +28,10 @@ enum class ListLayout(
GRID( GRID(
{ c -> { c ->
val displayMetrics = c.resources.displayMetrics val displayMetrics = c.resources.displayMetrics
val widthSp = displayMetrics.widthPixels / displayMetrics.scaledDensity val widthColumnPx =
GridLayoutManager(c, (widthSp / 90).toInt()) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 90f, displayMetrics)
val numColumns = (displayMetrics.widthPixels / widthColumnPx).toInt()
GridLayoutManager(c, numColumns)
}, },
R.layout.list_apps_row_variant_grid, R.layout.list_apps_row_variant_grid,
false false

View file

@ -13,9 +13,11 @@ import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.json.JSONException import org.json.JSONException
import org.json.JSONObject import org.json.JSONObject
import androidx.core.content.edit
@Serializable @Serializable
@Suppress("unused")
private class LegacyMapEntry(val key: AppInfo, val value: String) private class LegacyMapEntry(val key: AppInfo, val value: String)
private fun serializeMapAppInfo(value: Map<AppInfo, String>?): Set<String>? { private fun serializeMapAppInfo(value: Map<AppInfo, String>?): Set<String>? {
@ -100,7 +102,7 @@ private fun migrateAppInfoStringMap(key: String) {
} }
}?.toMap(HashMap()) }?.toMap(HashMap())
)?.let { )?.let {
preferences.edit().putStringSet(key, it).apply() preferences.edit { putStringSet(key, it) }
} }
} }
@ -109,16 +111,16 @@ private fun migrateAppInfoSet(key: String) {
.map(AppInfo.Companion::legacyDeserialize) .map(AppInfo.Companion::legacyDeserialize)
.map(AppInfo::serialize) .map(AppInfo::serialize)
.toSet() .toSet()
.let { LauncherPreferences.getSharedPreferences().edit().putStringSet(key, it).apply() } .let { LauncherPreferences.getSharedPreferences().edit { putStringSet(key, it) } }
} }
private fun migrateAction(key: String) { private fun migrateAction(key: String) {
Action.legacyFromPreference(key)?.let { action -> Action.legacyFromPreference(key)?.let { action ->
LauncherPreferences.getSharedPreferences().edit() LauncherPreferences.getSharedPreferences().edit {
.putString(key, Json.encodeToString(action)) putString(key, Json.encodeToString(action))
.remove("$key.app") .remove("$key.app")
.remove("$key.user") .remove("$key.user")
.apply() }
} }
} }

View file

@ -6,7 +6,7 @@ import android.util.Log
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.preferences.theme.Background import de.jrpie.android.launcher.preferences.theme.Background
import de.jrpie.android.launcher.preferences.theme.ColorTheme import de.jrpie.android.launcher.preferences.theme.ColorTheme
import androidx.core.content.edit
private fun migrateStringPreference( private fun migrateStringPreference(
@ -64,318 +64,317 @@ fun migratePreferencesFromVersionUnknown(context: Context) {
return return
} }
val newPrefs = LauncherPreferences.getSharedPreferences().edit() LauncherPreferences.getSharedPreferences().edit {
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"startedBefore", "startedBefore",
"internal.started_before", "internal.started_before",
false false
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_volumeUpApp", "action_volumeUpApp",
"action.volume_up.app", "action.volume_up.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_volumeUpApp_user", "action_volumeUpApp_user",
"action.volume_up.user", "action.volume_up.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_volumeDownApp", "action_volumeDownApp",
"action.volume_down.app", "action.volume_down.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_volumeDownApp_user", "action_volumeDownApp_user",
"action.volume_down.user", "action.volume_down.user",
-1 -1
) )
migrateStringPreference(oldPrefs, newPrefs, "action_timeApp", "action.time.app", "") migrateStringPreference(oldPrefs, this, "action_timeApp", "action.time.app", "")
migrateIntPreference(oldPrefs, newPrefs, "action_timeApp_user", "action.time.user", -1) migrateIntPreference(oldPrefs, this, "action_timeApp_user", "action.time.user", -1)
migrateStringPreference(oldPrefs, newPrefs, "action_dateApp", "action.date.app", "") migrateStringPreference(oldPrefs, this, "action_dateApp", "action.date.app", "")
migrateIntPreference(oldPrefs, newPrefs, "action_dateApp_user", "action.date.user", -1) migrateIntPreference(oldPrefs, this, "action_dateApp_user", "action.date.user", -1)
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_longClickApp", "action_longClickApp",
"action.long_click.app", "action.long_click.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_longClickApp_user", "action_longClickApp_user",
"action.long_click.user", "action.long_click.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleClickApp", "action_doubleClickApp",
"action.double_click.app", "action.double_click.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleClickApp_user", "action_doubleClickApp_user",
"action.double_click.user", "action.double_click.user",
-1 -1
) )
migrateStringPreference(oldPrefs, newPrefs, "action_upApp", "action.up.app", "") migrateStringPreference(oldPrefs, this, "action_upApp", "action.up.app", "")
migrateIntPreference(oldPrefs, newPrefs, "action_upApp_user", "action.up.user", -1) migrateIntPreference(oldPrefs, this, "action_upApp_user", "action.up.user", -1)
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_up_leftApp", "action_up_leftApp",
"action.up_left.app", "action.up_left.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_up_leftApp_user", "action_up_leftApp_user",
"action.up_left.user", "action.up_left.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_up_rightApp", "action_up_rightApp",
"action.up_right.app", "action.up_right.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_up_rightApp_user", "action_up_rightApp_user",
"action.up_right.user", "action.up_right.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleUpApp", "action_doubleUpApp",
"action.double_up.app", "action.double_up.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleUpApp_user", "action_doubleUpApp_user",
"action.double_up.user", "action.double_up.user",
-1 -1
) )
migrateStringPreference(oldPrefs, newPrefs, "action_downApp", "action.down.app", "") migrateStringPreference(oldPrefs, this, "action_downApp", "action.down.app", "")
migrateIntPreference(oldPrefs, newPrefs, "action_downApp_user", "action.down.user", -1) migrateIntPreference(oldPrefs, this, "action_downApp_user", "action.down.user", -1)
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_down_leftApp", "action_down_leftApp",
"action.down_left.app", "action.down_left.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_down_leftApp_user", "action_down_leftApp_user",
"action.down_left.user", "action.down_left.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_down_rightApp", "action_down_rightApp",
"action.down_right.app", "action.down_right.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_down_rightApp_user", "action_down_rightApp_user",
"action.down_right.user", "action.down_right.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleDownApp", "action_doubleDownApp",
"action.double_down.app", "action.double_down.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleDownApp_user", "action_doubleDownApp_user",
"action.double_down.user", "action.double_down.user",
-1 -1
) )
migrateStringPreference(oldPrefs, newPrefs, "action_leftApp", "action.left.app", "") migrateStringPreference(oldPrefs, this, "action_leftApp", "action.left.app", "")
migrateIntPreference(oldPrefs, newPrefs, "action_leftApp_user", "action.left.user", -1) migrateIntPreference(oldPrefs, this, "action_leftApp_user", "action.left.user", -1)
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_left_topApp", "action_left_topApp",
"action.left_top.app", "action.left_top.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_left_topApp_user", "action_left_topApp_user",
"action.left_top.user", "action.left_top.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_left_bottomApp", "action_left_bottomApp",
"action.left_bottom.app", "action.left_bottom.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_left_bottomApp_user", "action_left_bottomApp_user",
"action.left_bottom.user", "action.left_bottom.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleLeftApp", "action_doubleLeftApp",
"action.double_left.app", "action.double_left.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleLeftApp_user", "action_doubleLeftApp_user",
"action.double_left.user", "action.double_left.user",
-1 -1
) )
migrateStringPreference(oldPrefs, newPrefs, "action_rightApp", "action.right.app", "") migrateStringPreference(oldPrefs, this, "action_rightApp", "action.right.app", "")
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_rightApp_user", "action_rightApp_user",
"action.right.user", "action.right.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_right_topApp", "action_right_topApp",
"action.right_top.app", "action.right_top.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_right_topApp_user", "action_right_topApp_user",
"action.right_top.user", "action.right_top.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_right_bottomApp", "action_right_bottomApp",
"action.right_bottom.app", "action.right_bottom.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_right_bottomApp_user", "action_right_bottomApp_user",
"action.right_bottom.user", "action.right_bottom.user",
-1 -1
) )
migrateStringPreference( migrateStringPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleRightApp", "action_doubleRightApp",
"action.double_right.app", "action.double_right.app",
"" ""
) )
migrateIntPreference( migrateIntPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"action_doubleRightApp_user", "action_doubleRightApp_user",
"action.double_right.user", "action.double_right.user",
-1 -1
) )
migrateBooleanPreference(oldPrefs, newPrefs, "timeVisible", "clock.time_visible", true) migrateBooleanPreference(oldPrefs, this, "timeVisible", "clock.time_visible", true)
migrateBooleanPreference(oldPrefs, newPrefs, "dateVisible", "clock.date_visible", true) migrateBooleanPreference(oldPrefs, this, "dateVisible", "clock.date_visible", true)
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"dateLocalized", "dateLocalized",
"clock.date_localized", "clock.date_localized",
false false
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"dateTimeFlip", "dateTimeFlip",
"clock.date_time_flip", "clock.date_time_flip",
false false
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"disableTimeout", "disableTimeout",
"display.disable_timeout", "display.disable_timeout",
false false
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"useFullScreen", "useFullScreen",
"display.use_full_screen", "display.use_full_screen",
true true
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"enableDoubleActions", "enableDoubleActions",
"enabled_gestures.double_actions", "enabled_gestures.double_actions",
true true
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"enableEdgeActions", "enableEdgeActions",
"enabled_gestures.edge_actions", "enabled_gestures.edge_actions",
true true
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"searchAutoLaunch", "searchAutoLaunch",
"functionality.search_auto_launch", "functionality.search_auto_launch",
true true
) )
migrateBooleanPreference( migrateBooleanPreference(
oldPrefs, oldPrefs,
newPrefs, this,
"searchAutoKeyboard", "searchAutoKeyboard",
"functionality.search_auto_keyboard", "functionality.search_auto_keyboard",
true true
) )
}
newPrefs.apply()
when (oldPrefs.getString("theme", "finn")) { when (oldPrefs.getString("theme", "finn")) {
"finn" -> { "finn" -> {

View file

@ -5,7 +5,6 @@ import android.content.res.Resources
import com.google.android.material.color.DynamicColors import com.google.android.material.color.DynamicColors
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
@Suppress("unused")
enum class ColorTheme( enum class ColorTheme(
private val id: Int, private val id: Int,
private val labelResource: Int, private val labelResource: Int,

View file

@ -27,10 +27,14 @@ fun View.blink(
} }
// Taken from: https://stackoverflow.com/a/30340794/12787264 // Taken from: https://stackoverflow.com/a/30340794/12787264
fun ImageView.transformGrayscale() { fun ImageView.transformGrayscale(grayscale: Boolean) {
this.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { this.colorFilter = if (grayscale) {
setSaturation(0f) ColorMatrixColorFilter(ColorMatrix().apply {
}) setSaturation(0f)
})
} else {
null
}
} }

View file

@ -2,10 +2,10 @@ package de.jrpie.android.launcher.ui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.res.Configuration
import android.content.res.Resources import android.content.res.Resources
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.util.DisplayMetrics
import android.view.KeyEvent import android.view.KeyEvent
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
@ -37,7 +37,7 @@ import java.util.Locale
class HomeActivity : UIObject, AppCompatActivity() { class HomeActivity : UIObject, AppCompatActivity() {
private lateinit var binding: HomeBinding private lateinit var binding: HomeBinding
private lateinit var touchGestureDetector: TouchGestureDetector private var touchGestureDetector: TouchGestureDetector? = null
private var sharedPreferencesListener = private var sharedPreferencesListener =
SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey -> SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey ->
@ -56,23 +56,11 @@ class HomeActivity : UIObject, AppCompatActivity() {
super<AppCompatActivity>.onCreate(savedInstanceState) super<AppCompatActivity>.onCreate(savedInstanceState)
super<UIObject>.onCreate() super<UIObject>.onCreate()
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val width = displayMetrics.widthPixels
val height = displayMetrics.heightPixels
touchGestureDetector = TouchGestureDetector(
this,
width,
height,
LauncherPreferences.enabled_gestures().edgeSwipeEdgeWidth() / 100f
)
// Initialise layout // Initialise layout
binding = HomeBinding.inflate(layoutInflater) binding = HomeBinding.inflate(layoutInflater)
setContentView(binding.root)
setContentView(binding.root)
// Handle back key / gesture on Android 13+, cf. onKeyDown() // Handle back key / gesture on Android 13+, cf. onKeyDown()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
@ -87,6 +75,11 @@ class HomeActivity : UIObject, AppCompatActivity() {
} }
} }
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
touchGestureDetector?.updateScreenSize(windowManager)
}
override fun onStart() { override fun onStart() {
super<AppCompatActivity>.onStart() super<AppCompatActivity>.onStart()
@ -178,8 +171,28 @@ class HomeActivity : UIObject, AppCompatActivity() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
touchGestureDetector.edgeWidth = /* This should be initialized in onCreate()
However on some devices there seems to be a bug where the touchGestureDetector
is not working properly after resuming the app.
Reinitializing the touchGestureDetector every time the app is resumed might help to fix that.
(see issue #138)
*/
touchGestureDetector = TouchGestureDetector(
this, 0, 0,
LauncherPreferences.enabled_gestures().edgeSwipeEdgeWidth() / 100f LauncherPreferences.enabled_gestures().edgeSwipeEdgeWidth() / 100f
).also {
it.updateScreenSize(windowManager)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
binding.root.setOnApplyWindowInsetsListener { _, windowInsets ->
@Suppress("deprecation") // required to support API 29
val insets = windowInsets.systemGestureInsets
touchGestureDetector?.setSystemGestureInsets(insets)
windowInsets
}
}
initClock() initClock()
updateSettingsFallbackButtonVisibility() updateSettingsFallbackButtonVisibility()
@ -220,7 +233,7 @@ class HomeActivity : UIObject, AppCompatActivity() {
} }
override fun onTouchEvent(event: MotionEvent): Boolean { override fun onTouchEvent(event: MotionEvent): Boolean {
touchGestureDetector.onTouchEvent(event) touchGestureDetector?.onTouchEvent(event)
return true return true
} }

View file

@ -24,6 +24,7 @@ import de.jrpie.android.launcher.actions.ShortcutAction
import de.jrpie.android.launcher.apps.PinnedShortcutInfo import de.jrpie.android.launcher.apps.PinnedShortcutInfo
import de.jrpie.android.launcher.databinding.ActivityPinShortcutBinding import de.jrpie.android.launcher.databinding.ActivityPinShortcutBinding
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import androidx.core.content.edit
class PinShortcutActivity : AppCompatActivity(), UIObject { class PinShortcutActivity : AppCompatActivity(), UIObject {
private lateinit var binding: ActivityPinShortcutBinding private lateinit var binding: ActivityPinShortcutBinding
@ -72,9 +73,12 @@ class PinShortcutActivity : AppCompatActivity(), UIObject {
isBound = true isBound = true
request.accept() request.accept()
} }
val editor = LauncherPreferences.getSharedPreferences().edit() LauncherPreferences.getSharedPreferences().edit {
ShortcutAction(PinnedShortcutInfo(request.shortcutInfo!!)).bindToGesture(editor, gesture.id) ShortcutAction(PinnedShortcutInfo(request.shortcutInfo!!)).bindToGesture(
editor.apply() this,
gesture.id
)
}
dialog.dismiss() dialog.dismiss()
} }
dialog.findViewById<RecyclerView>(R.id.dialog_select_gesture_recycler).apply { dialog.findViewById<RecyclerView>(R.id.dialog_select_gesture_recycler).apply {
@ -117,11 +121,11 @@ class PinShortcutActivity : AppCompatActivity(), UIObject {
} }
inner class GestureRecyclerAdapter(val context: Context, val onClick: (Gesture) -> Unit): RecyclerView.Adapter<GestureRecyclerAdapter.ViewHolder>() { inner class GestureRecyclerAdapter(val context: Context, val onClick: (Gesture) -> Unit): RecyclerView.Adapter<GestureRecyclerAdapter.ViewHolder>() {
val gestures = Gesture.entries.filter { it.isEnabled() }.toList() private val gestures = Gesture.entries.filter { it.isEnabled() }.toList()
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val label = itemView.findViewById<TextView>(R.id.dialog_select_gesture_row_name) val label: TextView = itemView.findViewById(R.id.dialog_select_gesture_row_name)
val description = itemView.findViewById<TextView>(R.id.dialog_select_gesture_row_description) val description: TextView = itemView.findViewById(R.id.dialog_select_gesture_row_description)
val icon = itemView.findViewById<ImageView>(R.id.dialog_select_gesture_row_icon) val icon: ImageView = itemView.findViewById(R.id.dialog_select_gesture_row_icon)
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

View file

@ -1,10 +1,15 @@
package de.jrpie.android.launcher.ui package de.jrpie.android.launcher.ui
import android.content.Context import android.content.Context
import android.graphics.Insets
import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.util.DisplayMetrics
import android.view.MotionEvent import android.view.MotionEvent
import android.view.ViewConfiguration import android.view.ViewConfiguration
import android.view.WindowManager
import androidx.annotation.RequiresApi
import de.jrpie.android.launcher.actions.Gesture import de.jrpie.android.launcher.actions.Gesture
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import kotlin.math.abs import kotlin.math.abs
@ -14,8 +19,8 @@ import kotlin.math.tan
class TouchGestureDetector( class TouchGestureDetector(
private val context: Context, private val context: Context,
val width: Int, var width: Int,
val height: Int, var height: Int,
var edgeWidth: Float var edgeWidth: Float
) { ) {
private val ANGULAR_THRESHOLD = tan(Math.PI / 6) private val ANGULAR_THRESHOLD = tan(Math.PI / 6)
@ -31,20 +36,29 @@ class TouchGestureDetector(
private val longPressHandler = Handler(Looper.getMainLooper()) private val longPressHandler = Handler(Looper.getMainLooper())
private var systemGestureInsetTop = 100
private var systemGestureInsetBottom = 0
private var systemGestureInsetLeft = 0
private var systemGestureInsetRight = 0
data class Vector(val x: Float, val y: Float) { data class Vector(val x: Float, val y: Float) {
fun absSquared(): Float { fun absSquared(): Float {
return this.x * this.x + this.y * this.y return this.x * this.x + this.y * this.y
} }
fun plus(vector: Vector): Vector { fun plus(vector: Vector): Vector {
return Vector(this.x + vector.x, this.y + vector.y) return Vector(this.x + vector.x, this.y + vector.y)
} }
fun max(other: Vector): Vector { fun max(other: Vector): Vector {
return Vector(max(this.x, other.x), max(this.y, other.y)) return Vector(max(this.x, other.x), max(this.y, other.y))
} }
fun min(other: Vector): Vector { fun min(other: Vector): Vector {
return Vector(min(this.x, other.x), min(this.y, other.y)) return Vector(min(this.x, other.x), min(this.y, other.y))
} }
operator fun minus(vector: Vector): Vector { operator fun minus(vector: Vector): Vector {
return Vector(this.x - vector.x, this.y - vector.y) return Vector(this.x - vector.x, this.y - vector.y)
} }
@ -61,16 +75,35 @@ class TouchGestureDetector(
fun sizeSquared(): Float { fun sizeSquared(): Float {
return (max - min).absSquared() return (max - min).absSquared()
} }
fun getDirection(): Vector { fun getDirection(): Vector {
return last - start return last - start
} }
fun update(vector: Vector) { fun update(vector: Vector) {
min = min.min(vector) min = min.min(vector)
max = max.max(vector) max = max.max(vector)
last = vector last = vector
} }
} }
private fun PointerPath.startIntersectsSystemGestureInsets(): Boolean {
// ignore x, since this makes edge swipes very hard to execute
return start.y < systemGestureInsetTop
|| start.y > height - systemGestureInsetBottom
}
private fun PointerPath.intersectsSystemGestureInsets(): Boolean {
return min.x < systemGestureInsetLeft
|| min.y < systemGestureInsetTop
|| max.x > width - systemGestureInsetRight
|| max.y > height - systemGestureInsetBottom
}
private fun PointerPath.isTap(): Boolean { private fun PointerPath.isTap(): Boolean {
if (intersectsSystemGestureInsets()) {
return false
}
return sizeSquared() < TOUCH_SLOP_SQUARE return sizeSquared() < TOUCH_SLOP_SQUARE
} }
@ -87,24 +120,40 @@ class TouchGestureDetector(
} }
private var paths = HashMap<Int, PointerPath>() private var paths = HashMap<Int, PointerPath>()
private var gestureIsLongClick = false
/* Set when
* - the longPressHandler has detected this gesture as a long press
* - the gesture was cancelled by MotionEvent.ACTION_CANCEL
* In any case, the current gesture should be ignored by further detection logic.
*/
private var cancelled = false
private var lastTappedTime = 0L private var lastTappedTime = 0L
private var lastTappedLocation: Vector? = null private var lastTappedLocation: Vector? = null
fun onTouchEvent(event: MotionEvent) { fun onTouchEvent(event: MotionEvent) {
if (event.actionMasked == MotionEvent.ACTION_CANCEL) {
synchronized(this@TouchGestureDetector) {
cancelled = true
}
}
val pointerIdToIndex = val pointerIdToIndex =
(0..<event.pointerCount).associateBy { event.getPointerId(it) } (0..<event.pointerCount).associateBy { event.getPointerId(it) }
if (event.actionMasked == MotionEvent.ACTION_DOWN) { if (event.actionMasked == MotionEvent.ACTION_DOWN) {
synchronized(this@TouchGestureDetector) { synchronized(this@TouchGestureDetector) {
paths = HashMap() paths = HashMap()
gestureIsLongClick = false cancelled = false
} }
longPressHandler.postDelayed({ longPressHandler.postDelayed({
synchronized(this@TouchGestureDetector) { synchronized(this@TouchGestureDetector) {
if (cancelled) {
return@postDelayed
}
if (paths.entries.size == 1 && paths.entries.firstOrNull()?.value?.isTap() == true) { if (paths.entries.size == 1 && paths.entries.firstOrNull()?.value?.isTap() == true) {
gestureIsLongClick = true cancelled = true
Gesture.LONG_CLICK.invoke(context) Gesture.LONG_CLICK.invoke(context)
} }
} }
@ -112,8 +161,8 @@ class TouchGestureDetector(
} }
// add new pointers // add new pointers
for(i in 0..<event.pointerCount){ for (i in 0..<event.pointerCount) {
if(paths.containsKey(event.getPointerId(i))) { if (paths.containsKey(event.getPointerId(i))) {
continue continue
} }
val index = pointerIdToIndex[i] ?: continue val index = pointerIdToIndex[i] ?: continue
@ -142,7 +191,7 @@ class TouchGestureDetector(
// if the long press handler is still running, kill it // if the long press handler is still running, kill it
longPressHandler.removeCallbacksAndMessages(null) longPressHandler.removeCallbacksAndMessages(null)
// if the gesture was already detected as a long click, there is nothing to do // if the gesture was already detected as a long click, there is nothing to do
if (gestureIsLongClick) { if (cancelled) {
return return
} }
} }
@ -176,9 +225,8 @@ class TouchGestureDetector(
val mainPointerPath = paths.entries.firstOrNull { it.value.number == 0 }?.value ?: return val mainPointerPath = paths.entries.firstOrNull { it.value.number == 0 }?.value ?: return
// Ignore swipes at the very top, since this interferes with the status bar. // Ignore swipes starting at the very top and the very bottom
// TODO: replace 100px by sensible dp value (e.g. twice the height of the status bar) if (paths.entries.any { it.value.startIntersectsSystemGestureInsets() }) {
if (paths.entries.any { it.value.start.y < 100 }) {
return return
} }
@ -188,7 +236,8 @@ class TouchGestureDetector(
if (duration in 0..TAP_TIMEOUT) { if (duration in 0..TAP_TIMEOUT) {
if (timeStart - lastTappedTime < DOUBLE_TAP_TIMEOUT && if (timeStart - lastTappedTime < DOUBLE_TAP_TIMEOUT &&
lastTappedLocation?.let { lastTappedLocation?.let {
(mainPointerPath.last - it).absSquared() < DOUBLE_TAP_SLOP_SQUARE} == true (mainPointerPath.last - it).absSquared() < DOUBLE_TAP_SLOP_SQUARE
} == true
) { ) {
Gesture.DOUBLE_CLICK.invoke(context) Gesture.DOUBLE_CLICK.invoke(context)
} else { } else {
@ -217,34 +266,38 @@ class TouchGestureDetector(
val startEndMax = mainPointerPath.start.max(mainPointerPath.last) val startEndMax = mainPointerPath.start.max(mainPointerPath.last)
when (gesture) { when (gesture) {
Gesture.SWIPE_DOWN -> { Gesture.SWIPE_DOWN -> {
if(startEndMax.x + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.x) { if (startEndMax.x + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.x) {
gesture = Gesture.SWIPE_LARGER gesture = Gesture.SWIPE_LARGER
} else if (startEndMin.x - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.x) { } else if (startEndMin.x - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.x) {
gesture = Gesture.SWIPE_SMALLER gesture = Gesture.SWIPE_SMALLER
} }
} }
Gesture.SWIPE_UP -> { Gesture.SWIPE_UP -> {
if(startEndMax.x + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.x) { if (startEndMax.x + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.x) {
gesture = Gesture.SWIPE_LARGER_REVERSE gesture = Gesture.SWIPE_LARGER_REVERSE
} else if (startEndMin.x - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.x) { } else if (startEndMin.x - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.x) {
gesture = Gesture.SWIPE_SMALLER_REVERSE gesture = Gesture.SWIPE_SMALLER_REVERSE
} }
} }
Gesture.SWIPE_RIGHT -> { Gesture.SWIPE_RIGHT -> {
if(startEndMax.y + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.y) { if (startEndMax.y + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.y) {
gesture = Gesture.SWIPE_V gesture = Gesture.SWIPE_V
} else if (startEndMin.y - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.y) { } else if (startEndMin.y - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.y) {
gesture = Gesture.SWIPE_LAMBDA gesture = Gesture.SWIPE_LAMBDA
} }
} }
Gesture.SWIPE_LEFT -> { Gesture.SWIPE_LEFT -> {
if(startEndMax.y + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.y) { if (startEndMax.y + MIN_TRIANGLE_HEIGHT < mainPointerPath.max.y) {
gesture = Gesture.SWIPE_V_REVERSE gesture = Gesture.SWIPE_V_REVERSE
} else if (startEndMin.y - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.y) { } else if (startEndMin.y - MIN_TRIANGLE_HEIGHT > mainPointerPath.min.y) {
gesture = Gesture.SWIPE_LAMBDA_REVERSE gesture = Gesture.SWIPE_LAMBDA_REVERSE
} }
} }
else -> { }
else -> {}
} }
if (edgeActions) { if (edgeActions) {
@ -267,4 +320,20 @@ class TouchGestureDetector(
gesture?.invoke(context) gesture?.invoke(context)
} }
} }
fun updateScreenSize(windowManager: WindowManager) {
val displayMetrics = DisplayMetrics()
@Suppress("deprecation") // required to support API < 30
windowManager.defaultDisplay.getMetrics(displayMetrics)
width = displayMetrics.widthPixels
height = displayMetrics.heightPixels
}
@RequiresApi(Build.VERSION_CODES.Q)
fun setSystemGestureInsets(insets: Insets) {
systemGestureInsetTop = insets.top
systemGestureInsetBottom = insets.bottom
systemGestureInsetLeft = insets.left
systemGestureInsetRight = insets.right
}
} }

View file

@ -15,8 +15,10 @@ import de.jrpie.android.launcher.preferences.LauncherPreferences
* An interface implemented by every [Activity], Fragment etc. in Launcher. * An interface implemented by every [Activity], Fragment etc. in Launcher.
* It handles themes and window flags - a useful abstraction as it is the same everywhere. * It handles themes and window flags - a useful abstraction as it is the same everywhere.
*/ */
@Suppress("deprecation") // FLAG_FULLSCREEN is required to support API level < 30
fun setWindowFlags(window: Window, homeScreen: Boolean) { fun setWindowFlags(window: Window, homeScreen: Boolean) {
window.setFlags(0, 0) // clear flags window.setFlags(0, 0) // clear flags
// Display notification bar // Display notification bar
if (LauncherPreferences.display().hideStatusBar()) if (LauncherPreferences.display().hideStatusBar())
window.setFlags( window.setFlags(

View file

@ -1,24 +1,17 @@
package de.jrpie.android.launcher.ui.list package de.jrpie.android.launcher.ui.list
import android.app.Activity
import android.content.Intent
import android.content.res.Resources import android.content.res.Resources
import android.graphics.Rect import android.graphics.Rect
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.Toast
import android.window.OnBackInvokedDispatcher import android.window.OnBackInvokedDispatcher
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout
import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.R 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.actions.LauncherAction
import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppFilter
import de.jrpie.android.launcher.apps.hidePrivateSpaceWhenLocked import de.jrpie.android.launcher.apps.hidePrivateSpaceWhenLocked
@ -115,10 +108,13 @@ class ListActivity : AppCompatActivity(), UIObject {
?.let { ListActivityIntention.valueOf(it) } ?.let { ListActivityIntention.valueOf(it) }
?: ListActivityIntention.VIEW ?: ListActivityIntention.VIEW
@Suppress("deprecation") // required to support API level < 33
favoritesVisibility = bundle.getSerializable("favoritesVisibility") favoritesVisibility = bundle.getSerializable("favoritesVisibility")
as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility
@Suppress("deprecation") // required to support API level < 33
privateSpaceVisibility = bundle.getSerializable("privateSpaceVisibility") privateSpaceVisibility = bundle.getSerializable("privateSpaceVisibility")
as? AppFilter.Companion.AppSetVisibility ?: privateSpaceVisibility as? AppFilter.Companion.AppSetVisibility ?: privateSpaceVisibility
@Suppress("deprecation") // required to support API level < 33
hiddenVisibility = bundle.getSerializable("hiddenVisibility") hiddenVisibility = bundle.getSerializable("hiddenVisibility")
as? AppFilter.Companion.AppSetVisibility ?: hiddenVisibility as? AppFilter.Companion.AppSetVisibility ?: hiddenVisibility
@ -185,20 +181,6 @@ class ListActivity : AppCompatActivity(), UIObject {
finish() finish()
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_UNINSTALL) {
if (resultCode == Activity.RESULT_OK) {
Toast.makeText(this, getString(R.string.list_removed), Toast.LENGTH_LONG).show()
finish()
} else if (resultCode == Activity.RESULT_FIRST_USER) {
Toast.makeText(this, getString(R.string.list_not_removed), Toast.LENGTH_LONG).show()
finish()
}
}
}
fun updateTitle() { fun updateTitle() {
var titleResource = intention.titleResource var titleResource = intention.titleResource
if (intention == ListActivityIntention.VIEW) { if (intention == ListActivityIntention.VIEW) {
@ -241,11 +223,11 @@ class ListActivity : AppCompatActivity(), UIObject {
updateTitle() updateTitle()
val sectionsPagerAdapter = ListSectionsPagerAdapter(this, supportFragmentManager) val sectionsPagerAdapter = ListSectionsPagerAdapter(this)
val viewPager: ViewPager = findViewById(R.id.list_viewpager) binding.listViewpager.let {
viewPager.adapter = sectionsPagerAdapter it.adapter = sectionsPagerAdapter
val tabs: TabLayout = findViewById(R.id.list_tabs) binding.listTabs.setupWithViewPager(it)
tabs.setupWithViewPager(viewPager) }
} }
} }
@ -257,9 +239,15 @@ private val TAB_TITLES = arrayOf(
/** /**
* The [ListSectionsPagerAdapter] returns the fragment, * The [ListSectionsPagerAdapter] returns the fragment,
* which corresponds to the selected tab in [ListActivity]. * which corresponds to the selected tab in [ListActivity].
*
* This should eventually be replaced by a [FragmentStateAdapter]
* However this keyboard does not open when using [ViewPager2]
* so currently [ViewPager] is used here.
* https://github.com/jrpie/launcher/issues/130
*/ */
class ListSectionsPagerAdapter(private val activity: ListActivity, fm: FragmentManager) : @Suppress("deprecation")
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { class ListSectionsPagerAdapter(private val activity: ListActivity) :
FragmentPagerAdapter(activity.supportFragmentManager) {
override fun getItem(position: Int): Fragment { override fun getItem(position: Int): Fragment {
return when (position) { return when (position) {

View file

@ -2,7 +2,6 @@ package de.jrpie.android.launcher.ui.list.apps
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.Intent
import android.graphics.Rect import android.graphics.Rect
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -15,7 +14,8 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.Application
import de.jrpie.android.launcher.R 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.AbstractDetailedAppInfo import de.jrpie.android.launcher.apps.AbstractDetailedAppInfo
import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppFilter
import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.AppInfo
@ -47,6 +47,7 @@ class AppsRecyclerAdapter(
private val apps = (activity.applicationContext as Application).apps private val apps = (activity.applicationContext as Application).apps
private val appsListDisplayed: MutableList<AbstractDetailedAppInfo> = mutableListOf() private val appsListDisplayed: MutableList<AbstractDetailedAppInfo> = mutableListOf()
private val grayscale = LauncherPreferences.theme().monochromeIcons()
// temporarily disable auto launch // temporarily disable auto launch
var disableAutoLaunch: Boolean = false var disableAutoLaunch: Boolean = false
@ -79,20 +80,19 @@ class AppsRecyclerAdapter(
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) { override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
var appLabel = appsListDisplayed[i].getCustomLabel(activity) var appLabel = appsListDisplayed[i].getCustomLabel(activity)
val appIcon = appsListDisplayed[i].getIcon(activity)
viewHolder.img.transformGrayscale(grayscale)
viewHolder.img.setImageDrawable(appIcon.constantState?.newDrawable() ?: appIcon)
if (layout.useBadgedText) { if (layout.useBadgedText) {
appLabel = activity.packageManager.getUserBadgedLabel( appLabel = activity.packageManager.getUserBadgedLabel(
appLabel, appLabel,
appsListDisplayed[i].getUser(activity) appsListDisplayed[i].getUser(activity)
).toString() ).toString()
} }
val appIcon = appsListDisplayed[i].getIcon(activity)
viewHolder.textView.text = appLabel viewHolder.textView.text = appLabel
viewHolder.img.setImageDrawable(appIcon)
if (LauncherPreferences.theme().monochromeIcons())
viewHolder.img.transformGrayscale()
// decide when to show the options popup menu about // decide when to show the options popup menu about
if (intention == ListActivity.ListActivityIntention.VIEW) { if (intention == ListActivity.ListActivityIntention.VIEW) {
@ -195,11 +195,10 @@ class AppsRecyclerAdapter(
} }
ListActivity.ListActivityIntention.PICK -> { ListActivity.ListActivityIntention.PICK -> {
val returnIntent = Intent()
appInfo.getAction().writeToIntent(returnIntent)
returnIntent.putExtra("forGesture", forGesture)
activity.setResult(REQUEST_CHOOSE_APP, returnIntent)
activity.finish() activity.finish()
forGesture ?: return
val gesture = Gesture.byId(forGesture) ?: return
Action.setActionForGesture(gesture, appInfo.getAction())
} }
} }
} }

View file

@ -6,7 +6,6 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.LauncherApps import android.content.pm.LauncherApps
import android.graphics.Rect import android.graphics.Rect
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
@ -14,11 +13,9 @@ import android.widget.EditText
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_UNINSTALL
import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.AppInfo
import de.jrpie.android.launcher.apps.AbstractAppInfo import de.jrpie.android.launcher.apps.AbstractAppInfo
import de.jrpie.android.launcher.apps.AbstractDetailedAppInfo import de.jrpie.android.launcher.apps.AbstractDetailedAppInfo
import de.jrpie.android.launcher.apps.DetailedAppInfo
import de.jrpie.android.launcher.apps.PinnedShortcutInfo import de.jrpie.android.launcher.apps.PinnedShortcutInfo
import de.jrpie.android.launcher.getUserFromId import de.jrpie.android.launcher.getUserFromId
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
@ -44,17 +41,13 @@ fun AbstractAppInfo.uninstall(activity: Activity) {
Log.i(LOG_TAG, "uninstalling $this") Log.i(LOG_TAG, "uninstalling $this")
val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE) val intent = Intent(Intent.ACTION_DELETE)
intent.data = "package:$packageName".toUri() intent.data = "package:$packageName".toUri()
getUserFromId(userId, activity).let { user -> getUserFromId(userId, activity).let { user ->
intent.putExtra(Intent.EXTRA_USER, user) intent.putExtra(Intent.EXTRA_USER, user)
} }
activity.startActivity(intent)
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true)
activity.startActivityForResult(
intent,
REQUEST_UNINSTALL
)
} else if(this is PinnedShortcutInfo) { } else if(this is PinnedShortcutInfo) {
val pinned = LauncherPreferences.apps().pinnedShortcuts() ?: mutableSetOf() val pinned = LauncherPreferences.apps().pinnedShortcuts() ?: mutableSetOf()
pinned.remove(this) pinned.remove(this)
@ -102,8 +95,8 @@ fun AbstractDetailedAppInfo.showRenameDialog(context: Context) {
AlertDialog.Builder(context, R.style.AlertDialogCustom).apply { AlertDialog.Builder(context, R.style.AlertDialogCustom).apply {
setTitle(context.getString(R.string.dialog_rename_title, getLabel())) setTitle(context.getString(R.string.dialog_rename_title, getLabel()))
setView(R.layout.dialog_rename_app) setView(R.layout.dialog_rename_app)
setNegativeButton(R.string.dialog_cancel) { d, _ -> d.cancel() } setNegativeButton(android.R.string.cancel) { d, _ -> d.cancel() }
setPositiveButton(R.string.dialog_rename_ok) { d, _ -> setPositiveButton(android.R.string.ok) { d, _ ->
setCustomLabel( setCustomLabel(
(d as? AlertDialog) (d as? AlertDialog)
?.findViewById<EditText>(R.id.dialog_rename_app_edit_text) ?.findViewById<EditText>(R.id.dialog_rename_app_edit_text)

View file

@ -1,7 +1,6 @@
package de.jrpie.android.launcher.ui.list.other package de.jrpie.android.launcher.ui.list.other
import android.app.Activity import android.app.Activity
import android.content.Intent
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -9,7 +8,8 @@ import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import de.jrpie.android.launcher.R 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.actions.LauncherAction import de.jrpie.android.launcher.actions.LauncherAction
import de.jrpie.android.launcher.ui.list.ListActivity import de.jrpie.android.launcher.ui.list.ListActivity
@ -36,7 +36,10 @@ class OtherRecyclerAdapter(val activity: Activity) :
val pos = bindingAdapterPosition val pos = bindingAdapterPosition
val content = othersList[pos] val content = othersList[pos]
(activity as? ListActivity)?.forGesture?.let { returnChoiceIntent(it, content) } activity.finish()
val gestureId = (activity as? ListActivity)?.forGesture ?: return
val gesture = Gesture.byId(gestureId) ?: return
Action.setActionForGesture(gesture, content)
} }
init { init {
@ -61,12 +64,4 @@ class OtherRecyclerAdapter(val activity: Activity) :
val view: View = inflater.inflate(R.layout.list_other_row, parent, false) val view: View = inflater.inflate(R.layout.list_other_row, parent, false)
return ViewHolder(view) return ViewHolder(view)
} }
private fun returnChoiceIntent(forGesture: String, action: LauncherAction) {
val returnIntent = Intent()
returnIntent.putExtra("forGesture", forGesture)
action.writeToIntent(returnIntent)
activity.setResult(REQUEST_CHOOSE_APP, returnIntent)
activity.finish()
}
} }

View file

@ -1,6 +1,5 @@
package de.jrpie.android.launcher.ui.settings package de.jrpie.android.launcher.ui.settings
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.res.Resources import android.content.res.Resources
@ -8,17 +7,14 @@ import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentPagerAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager.widget.ViewPager import com.google.android.material.tabs.TabLayoutMediator
import com.google.android.material.tabs.TabLayout
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
import de.jrpie.android.launcher.databinding.SettingsBinding import de.jrpie.android.launcher.databinding.SettingsBinding
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.preferences.theme.Background import de.jrpie.android.launcher.preferences.theme.Background
import de.jrpie.android.launcher.preferences.theme.ColorTheme import de.jrpie.android.launcher.preferences.theme.ColorTheme
import de.jrpie.android.launcher.saveListActivityChoice
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
import de.jrpie.android.launcher.ui.settings.actions.SettingsFragmentActions import de.jrpie.android.launcher.ui.settings.actions.SettingsFragmentActions
import de.jrpie.android.launcher.ui.settings.launcher.SettingsFragmentLauncher import de.jrpie.android.launcher.ui.settings.launcher.SettingsFragmentLauncher
@ -49,15 +45,15 @@ class SettingsActivity : AppCompatActivity(), UIObject {
// This ugly workaround causes a jump to the top of the list, but at least // This ugly workaround causes a jump to the top of the list, but at least
// the text stays readable. // the text stays readable.
val i = Intent(this, SettingsActivity::class.java) val i = Intent(this, SettingsActivity::class.java)
.also { it.putExtra("tab", 1) } .also { it.putExtra(EXTRA_TAB, 1) }
finish() finish()
startActivity(i) startActivity(i)
} else } else
if (prefKey?.startsWith("theme.") == true || if (prefKey?.startsWith("theme.") == true ||
prefKey?.startsWith("display.") == true prefKey?.startsWith("display.") == true
) { ) {
recreate() recreate()
} }
} }
private lateinit var binding: SettingsBinding private lateinit var binding: SettingsBinding
@ -71,15 +67,14 @@ class SettingsActivity : AppCompatActivity(), UIObject {
setContentView(binding.root) setContentView(binding.root)
// set up tabs and swiping in settings // set up tabs and swiping in settings
val sectionsPagerAdapter = SettingsSectionsPagerAdapter(this, supportFragmentManager) val sectionsPagerAdapter = SettingsSectionsPagerAdapter(this)
val viewPager: ViewPager = findViewById(R.id.settings_viewpager) binding.settingsViewpager.apply {
viewPager.adapter = sectionsPagerAdapter adapter = sectionsPagerAdapter
setCurrentItem(intent.getIntExtra(EXTRA_TAB, 0), false)
val tabs: TabLayout = findViewById(R.id.settings_tabs)
tabs.setupWithViewPager(viewPager)
if (intent.hasExtra("tab")) {
tabs.getTabAt(intent.getIntExtra("tab", 0))?.select()
} }
TabLayoutMediator(binding.settingsTabs, binding.settingsViewpager) { tab, position ->
tab.text = sectionsPagerAdapter.getPageTitle(position)
}.attach()
} }
override fun onStart() { override fun onStart() {
@ -108,24 +103,21 @@ class SettingsActivity : AppCompatActivity(), UIObject {
} }
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { companion object {
when (requestCode) { private const val EXTRA_TAB = "tab"
REQUEST_CHOOSE_APP -> saveListActivityChoice(data)
else -> super.onActivityResult(requestCode, resultCode, data)
}
} }
} }
private val TAB_TITLES = arrayOf( private val TAB_TITLES = arrayOf(
R.string.settings_tab_app, R.string.settings_tab_actions,
R.string.settings_tab_launcher, R.string.settings_tab_launcher,
R.string.settings_tab_meta R.string.settings_tab_meta
) )
class SettingsSectionsPagerAdapter(private val context: Context, fm: FragmentManager) : class SettingsSectionsPagerAdapter(private val activity: FragmentActivity) :
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { FragmentStateAdapter(activity) {
override fun getItem(position: Int): Fragment { override fun createFragment(position: Int): Fragment {
return when (position) { return when (position) {
0 -> SettingsFragmentActions() 0 -> SettingsFragmentActions()
1 -> SettingsFragmentLauncher() 1 -> SettingsFragmentLauncher()
@ -134,11 +126,11 @@ class SettingsSectionsPagerAdapter(private val context: Context, fm: FragmentMan
} }
} }
override fun getPageTitle(position: Int): CharSequence { fun getPageTitle(position: Int): CharSequence {
return context.resources.getString(TAB_TITLES[position]) return activity.resources.getString(TAB_TITLES[position])
} }
override fun getCount(): Int { override fun getItemCount(): Int {
return 3 return 3
} }
} }

View file

@ -16,7 +16,6 @@ import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import de.jrpie.android.launcher.R 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.Action
import de.jrpie.android.launcher.actions.Gesture import de.jrpie.android.launcher.actions.Gesture
import de.jrpie.android.launcher.apps.AppFilter import de.jrpie.android.launcher.apps.AppFilter
@ -143,9 +142,7 @@ class ActionsRecyclerAdapter(val activity: Activity) :
val description = gesture.getDescription(activity) val description = gesture.getDescription(activity)
viewHolder.descriptionTextView.text = description viewHolder.descriptionTextView.text = description
viewHolder.img.transformGrayscale(LauncherPreferences.theme().monochromeIcons())
if (LauncherPreferences.theme().monochromeIcons())
viewHolder.img.transformGrayscale()
updateViewHolder(gesture, viewHolder) updateViewHolder(gesture, viewHolder)
viewHolder.img.setOnClickListener { chooseApp(gesture) } viewHolder.img.setOnClickListener { chooseApp(gesture) }
@ -181,9 +178,6 @@ class ActionsRecyclerAdapter(val activity: Activity) :
intent.putExtra("intention", ListActivity.ListActivityIntention.PICK.toString()) intent.putExtra("intention", ListActivity.ListActivityIntention.PICK.toString())
intent.putExtra("hiddenVisibility", AppFilter.Companion.AppSetVisibility.VISIBLE) intent.putExtra("hiddenVisibility", AppFilter.Companion.AppSetVisibility.VISIBLE)
intent.putExtra("forGesture", gesture.id) // for which action we choose the app intent.putExtra("forGesture", gesture.id) // for which action we choose the app
activity.startActivityForResult( activity.startActivity(intent)
intent,
REQUEST_CHOOSE_APP
)
} }
} }

View file

@ -2,7 +2,6 @@ package de.jrpie.android.launcher.ui.settings.meta
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -20,7 +19,6 @@ import de.jrpie.android.launcher.openTutorial
import de.jrpie.android.launcher.preferences.resetPreferences import de.jrpie.android.launcher.preferences.resetPreferences
import de.jrpie.android.launcher.ui.LegalInfoActivity import de.jrpie.android.launcher.ui.LegalInfoActivity
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
import de.jrpie.android.launcher.ui.tutorial.TutorialActivity
/** /**
* The [SettingsFragmentMeta] is a used as a tab in the SettingsActivity. * The [SettingsFragmentMeta] is a used as a tab in the SettingsActivity.

View file

@ -1,26 +1,26 @@
package de.jrpie.android.launcher.ui.tutorial package de.jrpie.android.launcher.ui.tutorial
import android.content.Intent
import android.content.res.Resources import android.content.res.Resources
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.View
import android.window.OnBackInvokedDispatcher import android.window.OnBackInvokedDispatcher
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentPagerAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager.widget.ViewPager import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.databinding.TutorialBinding
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.saveListActivityChoice
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentConcept import de.jrpie.android.launcher.ui.blink
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentFinish import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment0Start
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentSetup import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment1Concept
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentStart import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment2Usage
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentUsage import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment3AppList
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment4Setup
import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragment5Finish
/** /**
* The [TutorialActivity] is displayed automatically on new installations. * The [TutorialActivity] is displayed automatically on new installations.
@ -31,10 +31,17 @@ import de.jrpie.android.launcher.ui.tutorial.tabs.TutorialFragmentUsage
*/ */
class TutorialActivity : AppCompatActivity(), UIObject { class TutorialActivity : AppCompatActivity(), UIObject {
private lateinit var binding: TutorialBinding
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super<AppCompatActivity>.onCreate(savedInstanceState) super<AppCompatActivity>.onCreate(savedInstanceState)
super<UIObject>.onCreate() super<UIObject>.onCreate()
// Initialise layout
binding = TutorialBinding.inflate(layoutInflater)
setContentView(binding.root)
// Handle back key / gesture on Android 13+ // Handle back key / gesture on Android 13+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
onBackInvokedDispatcher.registerOnBackInvokedCallback( onBackInvokedDispatcher.registerOnBackInvokedCallback(
@ -48,15 +55,51 @@ class TutorialActivity : AppCompatActivity(), UIObject {
} }
} }
// Initialise layout
setContentView(R.layout.tutorial)
// set up tabs and swiping in settings // set up tabs and swiping in settings
val sectionsPagerAdapter = TutorialSectionsPagerAdapter(supportFragmentManager) val sectionsPagerAdapter = TutorialSectionsPagerAdapter(this)
val viewPager: ViewPager = findViewById(R.id.tutorial_viewpager) binding.tutorialViewpager.apply {
viewPager.adapter = sectionsPagerAdapter adapter = sectionsPagerAdapter
val tabs: TabLayout = findViewById(R.id.tutorial_tabs) currentItem = 0
tabs.setupWithViewPager(viewPager) registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
binding.tutorialButtonNext.apply {
val lastItem = sectionsPagerAdapter.itemCount - 1
visibility = if (position == lastItem) {
View.INVISIBLE
} else {
View.VISIBLE
}
if (position == 0) {
blink()
} else {
clearAnimation()
}
}
binding.tutorialButtonBack.apply {
visibility = if (position == 0) {
View.INVISIBLE
} else {
View.VISIBLE
}
}
}
})
}
TabLayoutMediator(binding.tutorialTabs, binding.tutorialViewpager) { _, _ -> }.attach()
binding.tutorialButtonNext.setOnClickListener {
binding.tutorialViewpager.apply {
setCurrentItem(
(currentItem + 1).coerceAtMost(sectionsPagerAdapter.itemCount - 1),
true
)
}
}
binding.tutorialButtonBack.setOnClickListener {
binding.tutorialViewpager.apply {
setCurrentItem((currentItem - 1).coerceAtLeast(0), true)
}
}
} }
override fun getTheme(): Resources.Theme { override fun getTheme(): Resources.Theme {
@ -68,14 +111,9 @@ class TutorialActivity : AppCompatActivity(), UIObject {
super<UIObject>.onStart() super<UIObject>.onStart()
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
REQUEST_CHOOSE_APP -> saveListActivityChoice(data)
else -> super.onActivityResult(requestCode, resultCode, data)
}
}
// prevent going back when the tutorial is shown for the first time // prevent going back when the tutorial is shown for the first time
@Deprecated("Deprecated in Java", ReplaceWith("use anyway"))
@Suppress("deprecation") // support API level < 33
override fun onBackPressed() { override fun onBackPressed() {
if (LauncherPreferences.internal().started()) if (LauncherPreferences.internal().started())
super.onBackPressed() super.onBackPressed()
@ -89,26 +127,22 @@ class TutorialActivity : AppCompatActivity(), UIObject {
* *
* Tabs: (Start | Concept | Usage | Setup | Finish) * Tabs: (Start | Concept | Usage | Setup | Finish)
*/ */
class TutorialSectionsPagerAdapter(fm: FragmentManager) : class TutorialSectionsPagerAdapter(activity: FragmentActivity) :
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { FragmentStateAdapter(activity) {
override fun getItem(position: Int): Fragment { override fun getItemCount(): Int {
return 6
}
override fun createFragment(position: Int): Fragment {
return when (position) { return when (position) {
0 -> TutorialFragmentStart() 0 -> TutorialFragment0Start()
1 -> TutorialFragmentConcept() 1 -> TutorialFragment1Concept()
2 -> TutorialFragmentUsage() 2 -> TutorialFragment2Usage()
3 -> TutorialFragmentSetup() 3 -> TutorialFragment3AppList()
4 -> TutorialFragmentFinish() 4 -> TutorialFragment4Setup()
5 -> TutorialFragment5Finish()
else -> Fragment() else -> Fragment()
} }
} }
/* We don't use titles here, as we have the dots */
override fun getPageTitle(position: Int): CharSequence {
return ""
}
override fun getCount(): Int {
return 5
}
} }

View file

@ -5,24 +5,22 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.databinding.TutorialStartBinding import de.jrpie.android.launcher.databinding.Tutorial0StartBinding
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
import de.jrpie.android.launcher.ui.blink
/** /**
* The [TutorialFragmentStart] is a used as a tab in the TutorialActivity. * The [TutorialFragment0Start] is a used as a tab in the TutorialActivity.
* *
* It displays info about the app and gets the user into the tutorial * It displays info about the app and gets the user into the tutorial
*/ */
class TutorialFragmentStart : Fragment(), UIObject { class TutorialFragment0Start : Fragment(), UIObject {
private lateinit var binding: TutorialStartBinding private lateinit var binding: Tutorial0StartBinding
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
binding = TutorialStartBinding.inflate(inflater, container, false) binding = Tutorial0StartBinding.inflate(inflater, container, false)
binding.tutorialStartIconRight.blink()
return binding.root return binding.root
} }

View file

@ -6,22 +6,22 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.BuildConfig import de.jrpie.android.launcher.BuildConfig
import de.jrpie.android.launcher.databinding.TutorialConceptBinding import de.jrpie.android.launcher.databinding.Tutorial1ConceptBinding
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
/** /**
* The [TutorialFragmentConcept] is a used as a tab in the TutorialActivity. * The [TutorialFragment1Concept] is a used as a tab in the TutorialActivity.
* *
* It is used to display info about Launchers concept (open source, efficiency ...) * It is used to display info about Launchers concept (open source, efficiency ...)
*/ */
class TutorialFragmentConcept : Fragment(), UIObject { class TutorialFragment1Concept : Fragment(), UIObject {
private lateinit var binding: TutorialConceptBinding private lateinit var binding: Tutorial1ConceptBinding
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
binding = TutorialConceptBinding.inflate(inflater, container, false) binding = Tutorial1ConceptBinding.inflate(inflater, container, false)
binding.tutorialConceptBadgeVersion.text = BuildConfig.VERSION_NAME binding.tutorialConceptBadgeVersion.text = BuildConfig.VERSION_NAME
return binding.root return binding.root
} }

View file

@ -9,17 +9,17 @@ import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
/** /**
* The [TutorialFragmentUsage] is a used as a tab in the TutorialActivity. * The [TutorialFragment2Usage] is a used as a tab in the TutorialActivity.
* *
* Tells the user how his screen will look and how the app can be used * Tells the user how his screen will look and how the app can be used
*/ */
class TutorialFragmentUsage : Fragment(), UIObject { class TutorialFragment2Usage : Fragment(), UIObject {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
return inflater.inflate(R.layout.tutorial_usage, container, false) return inflater.inflate(R.layout.tutorial_2_usage, container, false)
} }
override fun onStart() { override fun onStart() {

View file

@ -0,0 +1,30 @@
package de.jrpie.android.launcher.ui.tutorial.tabs
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.ui.UIObject
/**
* The [TutorialFragment3AppList] is a used as a tab in the TutorialActivity.
*
* Tells the user how his screen will look and how the app can be used
*/
class TutorialFragment3AppList : Fragment(), UIObject {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.tutorial_3_app_list, container, false)
}
override fun onStart() {
super<Fragment>.onStart()
super<UIObject>.onStart()
}
}

View file

@ -9,17 +9,17 @@ import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
/** /**
* The [TutorialFragmentSetup] is a used as a tab in the TutorialActivity. * The [TutorialFragment4Setup] is a used as a tab in the TutorialActivity.
* *
* It is used to display info in the tutorial * It is used to display info in the tutorial
*/ */
class TutorialFragmentSetup : Fragment(), UIObject { class TutorialFragment4Setup : Fragment(), UIObject {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
return inflater.inflate(R.layout.tutorial_setup, container, false) return inflater.inflate(R.layout.tutorial_4_setup, container, false)
} }
override fun onStart() { override fun onStart() {

View file

@ -6,25 +6,25 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.BuildConfig.VERSION_CODE import de.jrpie.android.launcher.BuildConfig.VERSION_CODE
import de.jrpie.android.launcher.databinding.TutorialFinishBinding import de.jrpie.android.launcher.databinding.Tutorial5FinishBinding
import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.setDefaultHomeScreen import de.jrpie.android.launcher.setDefaultHomeScreen
import de.jrpie.android.launcher.ui.UIObject import de.jrpie.android.launcher.ui.UIObject
/** /**
* The [TutorialFragmentFinish] is a used as a tab in the TutorialActivity. * The [TutorialFragment5Finish] is a used as a tab in the TutorialActivity.
* *
* It is used to display further resources and let the user start Launcher * It is used to display further resources and let the user start Launcher
*/ */
class TutorialFragmentFinish : Fragment(), UIObject { class TutorialFragment5Finish : Fragment(), UIObject {
private lateinit var binding: TutorialFinishBinding private lateinit var binding: Tutorial5FinishBinding
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
binding = TutorialFinishBinding.inflate(inflater, container, false) binding = Tutorial5FinishBinding.inflate(inflater, container, false)
return binding.root return binding.root
} }

View file

@ -12,6 +12,7 @@ class HtmlTextView(context: Context, attr: AttributeSet?, int: Int) :
constructor(context: Context) : this(context, null, 0) constructor(context: Context) : this(context, null, 0)
init { init {
@Suppress("deprecation") // required to support API level < 24
text = Html.fromHtml(text.toString()) text = Html.fromHtml(text.toString())
movementMethod = LinkMovementMethod.getInstance() movementMethod = LinkMovementMethod.getInstance()
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:textColor"
android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z" />
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:textColor"
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" />
</vector>

View file

@ -1,11 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24"
android:width="24dp">
<path
android:fillColor="?android:textColor"
android:pathData="M6,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:textColor"
android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z" />
</vector>

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:textColor"
android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z" />
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#252827"
android:pathData="M0,0h108v108h-108z" />
</vector>

View file

@ -116,7 +116,7 @@
android:layout_margin="10dp" android:layout_margin="10dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/pin_shortcut_button_ok" android:text="@android:string/ok"
app:layout_constraintBottom_toBottomOf="parent" /> app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -95,6 +95,11 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<!--
Should be replaced by androidx.viewpager2.widget.ViewPager2
but there is an issue with opening the keyboard:
https://github.com/jrpie/launcher/issues/130
-->
<androidx.viewpager.widget.ViewPager <androidx.viewpager.widget.ViewPager
android:id="@+id/list_viewpager" android:id="@+id/list_viewpager"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -15,18 +15,21 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:src="@mipmap/ic_launcher_round"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<TextView <TextView
android:id="@+id/list_apps_row_name" android:id="@+id/list_apps_row_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="60sp" android:layout_marginStart="20sp"
android:gravity="start" android:gravity="start"
android:text="" android:text=""
android:textSize="20sp" android:textSize="20sp"
tools:text="@string/app_name"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toEndOf="@id/list_apps_row_icon"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -15,6 +15,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
tools:src="@mipmap/ic_launcher_round"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<TextView <TextView
@ -25,7 +26,7 @@
android:paddingTop="5dp" android:paddingTop="5dp"
android:text="" android:text=""
android:textSize="11sp" android:textSize="11sp"
tools:text="some app" tools:text="@string/app_name"
app:layout_constraintTop_toBottomOf="@id/list_apps_row_icon" app:layout_constraintTop_toBottomOf="@id/list_apps_row_icon"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -32,6 +32,6 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:text="some app" /> tools:text="@string/app_name" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -73,7 +73,7 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager <androidx.viewpager2.widget.ViewPager2
android:id="@+id/settings_viewpager" android:id="@+id/settings_viewpager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -43,13 +43,15 @@
android:id="@+id/settings_actions_row_button_choose" android:id="@+id/settings_actions_row_button_choose"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:maxWidth="100dp"
android:text="@string/settings_apps_choose" android:text="@string/settings_apps_choose"
android:textAllCaps="false" android:textAllCaps="false"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
/>
<ImageView <ImageView
android:id="@+id/settings_actions_row_icon_img" android:id="@+id/settings_actions_row_icon_img"

View file

@ -10,7 +10,7 @@
tools:context=".ui.tutorial.TutorialActivity"> tools:context=".ui.tutorial.TutorialActivity">
<androidx.viewpager.widget.ViewPager <androidx.viewpager2.widget.ViewPager2
android:id="@+id/tutorial_viewpager" android:id="@+id/tutorial_viewpager"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
@ -22,15 +22,37 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" /> app:layout_constraintVertical_bias="0.0" />
<ImageView
android:id="@+id/tutorial_button_back"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="center"
android:alpha="0.5"
android:src="@drawable/baseline_navigate_before_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tutorial_viewpager" />
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/tutorial_tabs" android:id="@+id/tutorial_tabs"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tutorial_button_next"
app:layout_constraintStart_toEndOf="@+id/tutorial_button_back"
app:tabBackground="@drawable/tutorial_tab_selector" app:tabBackground="@drawable/tutorial_tab_selector"
app:tabGravity="center" app:tabGravity="center"
app:tabIndicatorHeight="0dp" app:tabIndicatorHeight="0dp" />
<ImageView
android:id="@+id/tutorial_button_next"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="center"
android:src="@drawable/baseline_navigate_next_24"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintTop_toBottomOf="@+id/tutorial_viewpager" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -8,7 +8,7 @@
android:paddingRight="32sp" android:paddingRight="32sp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.tutorial.tabs.TutorialFragmentStart"> tools:context=".ui.tutorial.tabs.TutorialFragment0Start">
<TextView <TextView
android:id="@+id/tutorial_start_text" android:id="@+id/tutorial_start_text"
@ -21,16 +21,4 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tutorial_start_icon_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=">>>>>>"
android:textSize="64sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tutorial_start_text" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -8,7 +8,7 @@
android:paddingRight="32sp" android:paddingRight="32sp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.tutorial.tabs.TutorialFragmentConcept"> tools:context=".ui.tutorial.tabs.TutorialFragment1Concept">
<TextView <TextView
android:id="@+id/tutorial_concept_title" android:id="@+id/tutorial_concept_title"
@ -28,11 +28,10 @@
android:gravity="center" android:gravity="center"
android:text="@string/tutorial_concept_text" android:text="@string/tutorial_concept_text"
android:textSize="18sp" android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_title" app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_title"
app:layout_constraintVertical_bias="0.19999999" /> app:layout_constraintBottom_toTopOf="@id/tutorial_concept_badge_version_label"/>
<TextView <TextView
android:id="@+id/tutorial_concept_text_2" android:id="@+id/tutorial_concept_text_2"
@ -60,6 +59,22 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_text" app:layout_constraintTop_toBottomOf="@+id/tutorial_concept_text"
tools:text="0.0.7"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tutorial_concept_badge_version_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:gravity="center"
android:textSize="18sp"
android:text="@string/tutorial_concept_label_version"
app:layout_constraintBottom_toTopOf="@+id/tutorial_concept_badge_version"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -7,7 +7,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingLeft="32sp" android:paddingLeft="32sp"
android:paddingRight="32sp" android:paddingRight="32sp"
tools:context=".ui.tutorial.tabs.TutorialFragmentUsage"> tools:context=".ui.tutorial.tabs.TutorialFragment2Usage">
<TextView <TextView
android:id="@+id/tutorial_usage_title" android:id="@+id/tutorial_usage_title"
@ -39,12 +39,12 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:scaleType="centerInside" android:scaleType="centerInside"
android:src="@drawable/home_round_screen" android:src="@drawable/tutorial_home_screen"
app:layout_constraintBottom_toTopOf="@id/tutorial_usage_text_2" app:layout_constraintBottom_toTopOf="@id/tutorial_usage_text_2"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tutorial_usage_text" app:layout_constraintStart_toStartOf="@+id/tutorial_usage_text"
app:layout_constraintTop_toBottomOf="@id/tutorial_usage_text" app:layout_constraintTop_toBottomOf="@id/tutorial_usage_text"
app:srcCompat="@drawable/home_round_screen" app:srcCompat="@drawable/tutorial_home_screen"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<TextView <TextView

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tutorial_usage_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="32sp"
android:paddingRight="32sp"
tools:context=".ui.tutorial.tabs.TutorialFragment3AppList">
<TextView
android:id="@+id/tutorial_app_list_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/tutorial_app_list_title"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tutorial_app_list_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="32dp"
android:gravity="center"
android:text="@string/tutorial_app_list_text"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/tutorial_app_list_screen"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tutorial_app_list_title" />
<ImageView
android:id="@+id/tutorial_app_list_screen"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="centerInside"
android:src="@drawable/tutorial_app_list"
app:layout_constraintBottom_toTopOf="@id/tutorial_app_list_text_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tutorial_app_list_text"
app:layout_constraintTop_toBottomOf="@id/tutorial_app_list_text"
app:srcCompat="@drawable/tutorial_app_list"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tutorial_app_list_text_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginBottom="16dp"
android:gravity="center"
android:text="@string/tutorial_app_list_text_2"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tutorial_app_list_screen" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -8,7 +8,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingLeft="32sp" android:paddingLeft="32sp"
android:paddingRight="32sp" android:paddingRight="32sp"
tools:context=".ui.tutorial.tabs.TutorialFragmentSetup"> tools:context=".ui.tutorial.tabs.TutorialFragment4Setup">
<TextView <TextView
android:id="@+id/tutorial_setup_title" android:id="@+id/tutorial_setup_title"
@ -33,7 +33,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tutorial_setup_title" /> app:layout_constraintTop_toBottomOf="@id/tutorial_setup_title" />
<fragment <androidx.fragment.app.FragmentContainerView
android:id="@+id/tutorial_setup_actions_rview_fragment" android:id="@+id/tutorial_setup_actions_rview_fragment"
android:name="de.jrpie.android.launcher.ui.settings.actions.SettingsFragmentActionsRecycler" android:name="de.jrpie.android.launcher.ui.settings.actions.SettingsFragmentActionsRecycler"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -7,7 +7,7 @@
android:paddingRight="32sp" android:paddingRight="32sp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.tutorial.tabs.TutorialFragmentFinish"> tools:context=".ui.tutorial.tabs.TutorialFragment5Finish">
<TextView <TextView
android:id="@+id/tutorial_finish_title" android:id="@+id/tutorial_finish_title"
@ -24,6 +24,7 @@
android:id="@+id/tutorial_finish_text" android:id="@+id/tutorial_finish_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/tutorial_finish_text" android:text="@string/tutorial_finish_text"
android:textSize="18sp" android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@id/tutorial_finish_button_start" app:layout_constraintBottom_toTopOf="@id/tutorial_finish_button_start"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="alert_cant_open_title">لا يمكن فتح التطبيق</string>
<string name="alert_cant_open_message">هل تريد تعديل اعداداته؟</string>
<string name="toast_cant_open_message">افتح الاعدادات لاختيار أمر لهذه الإيماءة</string>
<string name="settings_title">الاعدادات</string>
<string name="settings_tab_actions">الأوامر</string>
<string name="settings_tab_launcher">المشغل</string>
<string name="settings_tab_meta">بيانات</string>
<string name="settings_gesture_back">رجوع</string>
<string name="settings_gesture_up">أعلى</string>
<string name="settings_gesture_double_up">لأعلى بأصبعين</string>
<string name="settings_gesture_description_double_up">اسحب لأعلى بأصبعين</string>
<string name="settings_gesture_description_tap_up">أنقر ثم اسحب لأعلى</string>
<string name="settings_gesture_description_back">اضغط على زر الرجوع</string>
<string name="settings_gesture_description_up">اسحب لأعلى</string>
<string name="settings_gesture_tap_up">نقرة + أعلى</string>
<string name="settings_gesture_down">أسفل</string>
<string name="settings_gesture_description_down">اسحب لأسفل</string>
<string name="settings_gesture_tap_down">نقرة + لأسفل</string>
<string name="settings_gesture_double_down">لأسفل بأصبعين</string>
<string name="settings_gesture_left">يسار</string>
<string name="settings_gesture_description_left">اسحب من اليسار</string>
<string name="settings_gesture_tap_left">نقرة + يسار</string>
<string name="settings_gesture_description_tap_left">أنقر ثم اسحب إلى اليسار</string>
<string name="settings_gesture_double_left">يسار بأصبعين</string>
<string name="settings_gesture_right">يمين</string>
<string name="settings_gesture_description_right">اسحب إلى اليمين</string>
<string name="settings_gesture_tap_right">نقرة + يمين</string>
<string name="settings_gesture_description_tap_right">أنقر ثم اسحب إلى اليمين</string>
<string name="settings_gesture_double_right">يمين بأصبعين</string>
<string name="settings_gesture_description_double_right">اسحب إلى اليمين بأصبعين</string>
<string name="settings_gesture_right_top_edge">يمين (في الأعلى)</string>
<string name="settings_gesture_right_bottom_edge">يمين (في الأسفل)</string>
<string name="settings_gesture_description_right_bottom_edge">اسحب إلى اليمين من أسفل الشاشة</string>
<string name="settings_gesture_left_top_edge">يسار (في الأعلى)</string>
<string name="settings_gesture_description_left_top_edge">اسحب إلى اليسار من أعلى الشاشة</string>
<string name="settings_gesture_up_left_edge">أعلى (الحافة اليسرى)</string>
<string name="settings_gesture_description_up_left_edge">اسحب إلى الأعلى من حافة الشاشة اليسرى</string>
<string name="settings_gesture_up_right_edge">أعلى (الحافة اليمنى)</string>
<string name="settings_gesture_down_left_edge">أسفل (الحافة اليسرى)</string>
<string name="settings_gesture_description_down_left_edge">اسحب إلى الأسفل من حافة الشاشة اليسرى</string>
<string name="settings_gesture_down_right_edge">أسفل (الحافة اليمنى)</string>
<string name="settings_gesture_description_swipe_larger">أعلى اليسار -&gt; وسط اليمين -&gt; أسفل اليسار</string>
<string name="settings_gesture_description_swipe_larger_reverse">أسفل اليسار -&gt; وسط اليمين -&gt; أعلى اليسار</string>
<string name="settings_gesture_description_swipe_smaller">أعلى اليمين -&gt; وسط اليسار -&gt; أسفل اليمين</string>
<string name="settings_gesture_description_swipe_v">أعلى اليسار -&gt; الأسفل الوسط -&gt; أعلى اليمين</string>
<string name="settings_gesture_swipe_v_reverse">V (معكوس)</string>
<string name="settings_gesture_description_swipe_v_reverse">أعلى اليمين -&gt; الأسفل الوسط -&gt; أعلى اليسار</string>
<string name="settings_gesture_description_swipe_lambda">أسفل اليسار -&gt; أعلى الوسط -&gt; أسفل اليمين</string>
<string name="settings_gesture_swipe_lambda_reverse">Λ (معكوس)</string>
<string name="settings_gesture_vol_up">زر رفع الصوت</string>
<string name="settings_gesture_description_vol_up">اضغط على زر رفع الصوت</string>
<string name="settings_gesture_vol_down">زر خفض الصوت</string>
<string name="settings_gesture_description_vol_down">اضغط على زر خفض الصوت</string>
<string name="settings_gesture_double_click">نقرة مزدوجة</string>
<string name="settings_gesture_long_click">نقرة مطولة</string>
<string name="settings_gesture_description_long_click">أنقر مطولًا في مكان فارغ على الشاشة</string>
<string name="settings_gesture_date">التاريخ</string>
<string name="settings_gesture_description_date">أنقر على التاريخ</string>
<string name="settings_gesture_time">الوقت</string>
<string name="settings_gesture_description_time">أنقر على الوقت</string>
<string name="settings_apps_choose">اختر تطبيق</string>
<string name="settings_apps_install">ثبت تطبيقات</string>
<string name="settings_launcher_section_appearance">المظهر</string>
<string name="settings_theme_color_theme">السمة</string>
<string name="settings_gesture_swipe_larger"><![CDATA[>]]></string>
<string name="settings_gesture_swipe_larger_reverse"><![CDATA[> (معكوس)]]></string>
<string name="settings_gesture_swipe_smaller"><![CDATA[<]]></string>
<string name="settings_gesture_swipe_smaller_reverse"><![CDATA[< (Reverse)]]></string>
<string name="settings_gesture_swipe_v">V</string>
<string name="settings_gesture_swipe_lambda">Λ</string>
<string name="settings_theme_color_theme_item_dark">داكن</string>
<string name="settings_theme_color_theme_item_light">فاتح</string>
<string name="settings_theme_color_theme_item_dynamic">متغير</string>
<string name="settings_theme_text_shadow">ظل النص</string>
<string name="settings_theme_background_item_transparent">شفاف</string>
<string name="settings_theme_background_item_dim">مظلل</string>
<string name="settings_theme_background_item_blur">مُموه</string>
<string name="settings_theme_background_item_solid">لون ثابت</string>
<string name="settings_theme_font">الخط</string>
<string name="settings_theme_font_item_system_default">خط النظام</string>
<string name="settings_theme_font_item_sans_serif">بدون تذييل</string>
<string name="settings_theme_font_item_serif">مذيل</string>
<string name="settings_theme_font_item_monospace">أحادي المسافة</string>
<string name="settings_theme_monochrome_icons">أيقونات تطبيقات أحادية اللون</string>
<string name="settings_clock_color">اللون</string>
<string name="settings_clock_time_visible">أظهر الوقت</string>
<string name="settings_clock_date_visible">أظهر التاريخ</string>
<string name="settings_clock_localized">استخدم تنسيق التاريخ المحلي</string>
<string name="settings_clock_flip_date_time">إقلب مكان التاريخ مع الوقت</string>
<string name="settings_theme_wallpaper">اختر خلفية</string>
<string name="settings_launcher_section_display">العرض</string>
<string name="settings_display_screen_timeout_disabled">حافظ على بقاء الشاشة قيد التشغيل</string>
<string name="settings_display_hide_status_bar">إخفِ شريط الحالة</string>
<string name="settings_display_rotate_screen">تدوير الشاشة</string>
<string name="settings_launcher_section_functionality">الوظائف</string>
<string name="settings_enabled_gestures_double_swipe">أوامر السحب بأصبعين</string>
<string name="settings_enabled_gestures_double_swipe_summary">اسحب باستخدام أصبعين</string>
<string name="settings_enabled_gestures_edge_swipe">أوامر السحب من الحواف</string>
<string name="settings_enabled_gestures_edge_swipe_edge_width">عرض الحواف</string>
<string name="settings_functionality_auto_launch">إظهار نتائج البحث</string>
<string name="settings_functionality_auto_launch_summary">اضغط مسافة لتعطيل هذه الميزة مؤقتًا</string>
<string name="settings_functionality_search_web">ابحث في الويب</string>
<string name="settings_functionality_auto_keyboard">أظهر لوحة المفاتيح عند البحث</string>
<string name="settings_launcher_sensitivity">الحساسية</string>
<string name="settings_launcher_section_apps">التطبيقات</string>
<string name="settings_apps_hidden">التطبيقات المخفية</string>
<string name="settings_launcher_section_date_time"><![CDATA[Date & time]]></string>
<string name="settings_apps_hide_private_space_apps">إخفِ المساحة الخاصة من قائمة التطبيقات</string>
<string name="settings_list_layout">تخطيط قائمة التطبيقات</string>
<string name="settings_list_layout_item_default">الافتراضي</string>
<string name="settings_list_layout_item_text">نص</string>
<string name="settings_list_layout_item_grid">شبكة</string>
<string name="settings_general_choose_home_screen">تعيين μauncher كشاشة المنزل</string>
<string name="settings_meta_cant_select_launcher">معلومات التطبيق</string>
<string name="settings_meta_reset">إعادة تعيين الإعدادات</string>
<string name="settings_meta_reset_confirm">أنت على وشك تجاهل كل تفضيلاتك، هل تريد الإكمال؟</string>
<string name="settings_meta_view_code">عرض شيفرة المصدر</string>
<string name="settings_meta_report_bug">الإبلاغ عن خطأ</string>
<string name="dialog_report_bug_button_clipboard">النسخ إلى الحافظة</string>
<string name="dialog_report_bug_security_info">يرجى عدم الإبلاغ عن الثغرات الأمنية علنًا على Github ، استخدم ما يلي بدلاً من ذلك:</string>
<string name="dialog_report_bug_button_security">الإبلاغ عن ثغرة أمنية</string>
<string name="dialog_report_bug_create_report">إنشاء تقرير</string>
<string name="settings_meta_fork_contact">اتصل بمطور النسخة</string>
<string name="settings_meta_join_chat">انضم إلى دردشة μauncher</string>
<string name="settings_meta_donate">تبرع</string>
<string name="settings_meta_privacy">سياسة الخصوصية</string>
<string name="list_title_view">كل التطبيقات</string>
<string name="list_title_favorite">التطبيقات المفضلة</string>
<string name="list_title_hidden">التطبيقات المخفية</string>
<string name="list_title_private_space">المساحة الخاصة</string>
<string name="list_title_pick">اختر تطبيق</string>
<string name="list_tab_app">التطبيقات</string>
<string name="list_tab_other">أخرى</string>
<string name="list_app_delete">إلغاء التثبيت</string>
<string name="list_app_favorite_remove">إزالة من المفضلة</string>
<string name="list_app_hidden_add">إخفِ</string>
<string name="list_app_hidden_remove">أظهر</string>
<string name="list_app_rename">إعادة التسمية</string>
<string name="list_apps_search_hint">بحث</string>
<string name="list_apps_search_hint_no_auto_launch">بحث (بدون تشغيل تلقائي)</string>
<string name="list_other_settings">اعدادات التطبيق</string>
<string name="list_other_list">درج التطبيقات</string>
<string name="list_other_list_private_space">المساحة الخاصة</string>
<string name="list_other_toggle_private_space_lock">تبديل قفل المساحة الخاصة</string>
<string name="list_other_volume_up">ارفع الصوت</string>
<string name="settings_meta_discord">إنضم إلى مجموعة discord!</string>
<string name="list_other_volume_adjust">ضبط مستوى الصوت</string>
<string name="list_other_track_previous">الموسيقى: السابق</string>
<string name="list_other_track_play_pause">الموسيقى: تشغيل / ايقاف مؤقت</string>
<string name="list_other_recent_apps">التطبيقات الحديثة</string>
<string name="list_other_nop">لا تفعل شيئًا</string>
<string name="list_other_lock_screen">قفل الشاشة</string>
<string name="list_other_torch">تبديل الفلاش</string>
<string name="list_other_launch_other_launcher">شغل شاشة منزل أخرى</string>
<string name="pin_shortcut_title">أضف اختصارًا</string>
<string name="pin_shortcut_button_bind">اربط بإيماءة</string>
<string name="tutorial_title">درس تعليمي</string>
<string name="tutorial_start_text">👋\n\nخذ بضع ثوان لمعرفة كيفية استخدام هذا المشغل!</string>
<string name="tutorial_concept_title">المفهوم</string>
<string name="tutorial_concept_text_2">إنه برنامج مجاني (ترخيص MIT)!\nتأكد من مراجعة المستودع!</string>
<string name="tutorial_concept_label_version">النسخة</string>
<string name="tutorial_usage_title">الاستخدام</string>
<string name="tutorial_usage_text">تحتوي شاشتك الرئيسية على التاريخ والوقت المحليين. لا الهاء.</string>
<string name="tutorial_app_list_title">كل التطبيقات</string>
<string name="tutorial_app_list_text_2">بمجرد تطابق تطبيق واحد فقط، يتم تشغيله تلقائيًا.\nيمكن تعطيل ذلك عن طريق اضافة مساحة في بداية استعلام.</string>
<string name="tutorial_setup_title">الإعداد</string>
<string name="tutorial_setup_text">اخترنا بعض التطبيقات الافتراضية لك. يمكنك تغييرها الآن إذا كنت تريد:</string>
<string name="tutorial_setup_text_2">يمكنك أيضًا تغيير اختيارك لاحقًا.</string>
<string name="tutorial_finish_title">لنبدأ!</string>
<string name="tutorial_finish_button">ابدأ</string>
<string name="settings">الإعدادات</string>
<string name="ic_menu_alt">المزيد من الخيارات</string>
<string name="alert_requires_android_m">هذه الوظيفة تتطلب أندرويد 6 أو أحدث.</string>
<string name="alert_requires_android_v">هذه الوظيفة تتطلب أندرويد 15 أو أحدث.</string>
<string name="undo">تراجع</string>
<string name="snackbar_app_hidden">تم إخفاء التطبيق. يمكنك جعله مرئيًا مرة أخرى في الإعدادات.</string>
<string name="list_other_expand_settings_panel">الاعدادات السريعة</string>
<string name="toast_device_admin_not_enabled">يجب أن يكون μlauncher مسؤولًا من أجل قفل الشاشة.</string>
<string name="device_admin_explanation">هذا مطلوب لإجراء شاشة القفل.</string>
<string name="device_admin_description">تمكين إجراء شاشة القفل</string>
<string name="alert_no_torch_found">لم يتم اكتشاف كاميرا مع فلاش.</string>
<string name="alert_torch_access_exception">خطأ: لا يمكن الوصول إلى الفلاش.</string>
<string name="alert_recent_apps_failed">خطأ: فشل في إظهار التطبيقات الحديثة. (إذا قمت للتو بترقية التطبيق ، فحاول تعطيل خدمة الوصول وإعادة تمكينها في إعدادات الهاتف)</string>
<string name="alert_enable_accessibility_failed">خطأ: فشل في تمكين خدمة الوصول.</string>
<string name="toast_accessibility_service_not_enabled">لم يتم تمكين خدمة الوصول إلى μlauncher. يرجى تمكينه في الإعدادات</string>
<string name="toast_private_space_locked">المساحة الخاصة مقفلة</string>
<string name="toast_private_space_unlocked">المساحة الخاصة مفتوحة</string>
<string name="toast_private_space_not_available">المساحة الخاصة غير متوافرة</string>
<string name="tooltip_lock_private_space">قفل المساحة الخاصة</string>
<string name="tooltip_unlock_private_space">فتح المساحة الخاصة</string>
<string name="accessibility_service_name">μLauncher</string>
<string name="screen_lock_method_dialog_title">اختر طريقة القفل</string>
<string name="screen_lock_method_use_accessibility">استخدام خدمة إمكانية الوصول</string>
<string name="screen_lock_method_use_device_admin">استخدم مسؤول الجهاز</string>
<string name="settings_actions_lock_method">اختر طريقة لقفل الشاشة</string>
<string name="dialog_rename_title">اعادة تسمية %1$s</string>
<string name="dialog_select_color_red">أحمر</string>
<string name="dialog_select_color_alpha">شفافية</string>
<string name="dialog_select_color_blue">أزرق</string>
<string name="dialog_select_color_green">أخضر</string>
<string name="dialog_select_color_color_hex">اللون</string>
<string name="dialog_choose_color_title">اختر لونًا</string>
<string name="dialog_consent_accessibility_privileges">أدرك أن هذا سيمنح أذونات كثيرة لـμauncher.</string>
<string name="dialog_consent_accessibility_other_options">أدرك وجود خيارات أخرى (باستخدام أذونات مسؤول الجهاز أو زر الطاقة).</string>
<string name="dialog_consent_accessibility_consent">أوافق لـμlauncher باستخدام خدمة إمكانية الوصول لتوفير الوظائف ليس لها صلة بإمكانية الوصول.</string>
<string name="dialog_consent_accessibility_data_collection">أوافق على أن μlauncher لا يجمع أي بيانات.</string>
<string name="dialog_consent_accessibility_title">يتم تفعيل خدمة إمكانية الوصول</string>
<string name="dialog_consent_accessibility_ok">تفعيل خدمة إمكانية الوصول</string>
<string name="dialog_cancel">إلغاء</string>
<string name="settings_meta_licenses">تراخيص المصادر المفتوحة</string>
<string name="legal_info_title">تراخيص المصادر المفتوحة</string>
<string name="toast_activity_not_found_search_web">لم يتم العثور على تطبيق للتعامل مع البحث.</string>
<string name="toast_activity_not_found_browser">لا يمكن فتح عنوان URL: لم يتم العثور على متصفح.</string>
<string name="dialog_consent_accessibility_text"><![CDATA[أنت على وشك تنشيط خدمة إمكانية الوصول. سيمنح هذا <strong> أذونات كثيرة </strong> إلى التطبيق:
<ul>
<li>قفل الشاشة</li>
<li>التطبيقات الحديثة</li>
</ul>
<strong> لن يقومμlauncher أبدًا بجمع أي بيانات </strong>. على وجه الخصوص ، لا يستخدم μlauncher خدمة إمكانية الوصول لجمع أي بيانات.]]></string>
<string name="settings_gesture_description_tap_down">أنقر ثم اسحب لأسفل</string>
<string name="settings_theme_color_theme_item_default">الافتراضي</string>
<string name="pin_shortcut_switch_visible">أظهر في قائمة التطبيقات</string>
<string name="settings_gesture_description_double_down">اسحب لأسفل بأصبعين</string>
<string name="settings_clock_show_seconds">أظهر الثواني</string>
<string name="dialog_report_bug_title">الإبلاغ عن خطأ</string>
<string name="settings_gesture_description_double_left">اسحب إلى اليسار بأصبعين</string>
<string name="settings_gesture_description_double_click">أنقر مرتين في مكان فارغ على الشاشة</string>
<string name="settings_functionality_search_web_summary">اضغط على زر الرجوع أثناء البحث في قائمة التطبيقات لإظهار البحث على الويب</string>
<string name="settings_gesture_description_right_top_edge">اسحب إلى اليمين من أعلى الشاشة</string>
<string name="settings_gesture_left_bottom_edge">يسار (في الأسفل)</string>
<string name="settings_gesture_description_up_right_edge">اسحب إلى الأعلى من حافة الشاشة اليمنى</string>
<string name="settings_gesture_description_swipe_lambda_reverse">أسفل اليمين -&gt; أعلى الوسط -&gt; أسفل اليسار</string>
<string name="settings_apps_hide_bound_apps">لا تظهر التطبيقات المرتبطة بإيماءة في قائمة التطبيقات</string>
<string name="list_other_list_favorites">درج التطبيقات المفضلة</string>
<string name="list_other_track_next">الموسيقى: التالي</string>
<string name="tutorial_concept_text">تم تصميم μlauncher ليكون فعال، وخالي من الهاء.\n\nلا يحتوي على أي إعلانات ولا يجمع أي بيانات.</string>
<string name="tutorial_finish_text">أنت مستعد للبدء!\n\nآمل أن يكون هذا ذا قيمة كبيرة بالنسبة لك!\n\n- المطورين</string>
<string name="toast_private_space_default_home_screen">يجب أن يكون μlauncher الشاشة الرئيسية الافتراضية للوصول إلى مساحة خاصة.</string>
<string name="settings_gesture_description_left_bottom_edge">اسحب إلى اليسار من أسفل الشاشة</string>
<string name="settings_gesture_description_swipe_smaller_reverse">أسفل اليمين -&gt; وسط اليسار -&gt; أعلى اليمين</string>
<string name="settings_apps_toast_store_not_found">لم يتم العثور على تطبيق المتجر</string>
<string name="settings_display_hide_navigation_bar">إخفِ شريط التنقل</string>
<string name="list_app_info">معلومات التطبيق</string>
<string name="list_app_favorite_add">أضف إلى المفضلة</string>
<string name="list_other_expand_notifications_panel">توسيع لوحة الاشعارات</string>
<string name="tutorial_app_list_text">يمكنك البحث بسرعة من خلال جميع التطبيقات في قائمة التطبيقات.\n\nاسحب لأعلى لفتح القائمة، أو ربطها بإيماءة ما.</string>
<string name="alert_lock_screen_failed">خطأ: فشل في قفل الشاشة. (إذا قمت للتو بترقية التطبيق ، فحاول تعطيل خدمة الوصول وإعادة تمكينها في إعدادات الهاتف)</string>
<string name="settings_gesture_description_down_right_edge">اسحب إلى الأسفل من حافة الشاشة اليمنى</string>
<string name="settings_theme_font_item_serif_monospace">أحادي المسافة مذيل</string>
<string name="settings_list_reverse_layout">عكس قائمة التطبيقات</string>
<string name="alert_cant_expand_status_bar_panel">خطأ: لا يمكن توسيع شريط الحالة. يستخدم هذا الإجراء وظيفة ليست جزءًا من نظام أندرويد. لسوء الحظ ، لا يبدو أنه يعمل على جهازك.</string>
<string name="settings_theme_background">خلفية القوائم</string>
<string name="settings_apps_hide_paused_apps">إخفِ التطبيقات المتوقفة</string>
<string name="settings_meta_show_tutorial">أظهر العرض التعليمي للتطبيق</string>
<string name="dialog_report_bug_info">شكرا لك على المساعدة في تحسين μLauncher!\nيرجى إضافة المعلومات التالية إلى تقرير الأخطاء الخاص بك:</string>
<string name="settings_meta_contact">اتصل بالمطور الأصلي</string>
<string name="list_other_volume_down">اخفض الصوت</string>
<string name="tutorial_usage_text_2">يمكنك تشغيل أهم تطبيقاتك بوسطة إيماءات اللمس أو الضغط على الأزرار.</string>
<string name="settings_enabled_gestures_edge_swipe_summary">اسحب من حواف الشاشة</string>
<string name="toast_lock_screen_not_supported">خطأ: قفل الشاشة باستخدام إمكانية الوصول غير مدعوم على هذا الجهاز. الرجاء استخدام طريقة مسؤول الجهاز بدلاً من ذلك.</string>
<string name="accessibility_service_description">يتيح تعيين μlauncher كخدمة إمكانية الوصول قفل الشاشة وفتح قائمة التطبيقات الحديثة. يرجى ملاحظة أنه يتطلب كمية كبيرة من الأذونات. يجب ألا تمنح مثل هذه الأذونات باستخفاف لأي تطبيق. سوف يستخدم μlauncher خدمة إمكانية الوصول فقط لأداء الإجراءات التالية عند طلب المستخدم: * قفل شاشة * فتح التطبيقات الحديثة μlauncher لن يستخدم أبدًا خدمة إمكانية الوصول لجمع البيانات. يمكنك التحقق من شيفرة المصدر للتأكد. يرجى ملاحظة أنه يمكنك قفل الشاشة من خلال منح أذونات مسؤول الجهاز، لكنها لا تعمل مع بصمات الأصابع وفتح الوجه.</string>
</resources>

View file

@ -14,7 +14,7 @@
- -
--> -->
<string name="settings_title">Einstellungen</string> <string name="settings_title">Einstellungen</string>
<string name="settings_tab_app">Apps</string> <string name="settings_tab_actions">Aktionen</string>
<string name="settings_tab_launcher">Launcher</string> <string name="settings_tab_launcher">Launcher</string>
<string name="settings_tab_meta">Meta</string> <string name="settings_tab_meta">Meta</string>
<!-- <!--
@ -54,9 +54,9 @@
<string name="settings_gesture_description_down_left_edge">An der linken Kante nach unten wischen</string> <string name="settings_gesture_description_down_left_edge">An der linken Kante nach unten wischen</string>
<string name="settings_gesture_down_right_edge">Abwärts (rechts)</string> <string name="settings_gesture_down_right_edge">Abwärts (rechts)</string>
<string name="settings_gesture_description_down_right_edge">An der rechten Kanten nach unten wischen</string> <string name="settings_gesture_description_down_right_edge">An der rechten Kanten nach unten wischen</string>
<string name="settings_gesture_vol_up">Lautstärke +</string> <string name="settings_gesture_vol_up">Lauter-Taste</string>
<string name="settings_gesture_description_vol_up">Die Taste \"Lauter\" drücken</string> <string name="settings_gesture_description_vol_up">Die Taste \"Lauter\" drücken</string>
<string name="settings_gesture_vol_down">Lautstärke -</string> <string name="settings_gesture_vol_down">Leiser-Taste</string>
<string name="settings_gesture_description_vol_down">Die Taste \"Leiser\" drücken</string> <string name="settings_gesture_description_vol_down">Die Taste \"Leiser\" drücken</string>
<string name="settings_gesture_double_click">Doppelklick</string> <string name="settings_gesture_double_click">Doppelklick</string>
<string name="settings_gesture_description_double_click">In einem leeren Bereich doppelt klicken</string> <string name="settings_gesture_description_double_click">In einem leeren Bereich doppelt klicken</string>
@ -67,7 +67,6 @@
<string name="settings_gesture_time">Uhr</string> <string name="settings_gesture_time">Uhr</string>
<string name="settings_gesture_description_time">Auf die Uhrzeit klicken</string> <string name="settings_gesture_description_time">Auf die Uhrzeit klicken</string>
<string name="settings_apps_choose">App wählen</string> <string name="settings_apps_choose">App wählen</string>
<string name="settings_apps_view_all">Alle Anwendungen</string>
<string name="settings_apps_install">Apps installieren</string> <string name="settings_apps_install">Apps installieren</string>
<string name="settings_apps_toast_store_not_found">Store nicht gefunden</string> <string name="settings_apps_toast_store_not_found">Store nicht gefunden</string>
<!-- <!--
@ -94,10 +93,8 @@
<string name="settings_theme_color_theme_item_dark">Dunkel</string> <string name="settings_theme_color_theme_item_dark">Dunkel</string>
<string name="settings_theme_color_theme_item_light">Hell</string> <string name="settings_theme_color_theme_item_light">Hell</string>
<string name="settings_theme_wallpaper">Hintergrund auswählen</string> <string name="settings_theme_wallpaper">Hintergrund auswählen</string>
<string name="settings_launcher_change_wallpaper">Hintergrund ändern</string>
<string name="settings_launcher_section_display">Bildschirm</string> <string name="settings_launcher_section_display">Bildschirm</string>
<string name="settings_display_screen_timeout_disabled">Bildschirm nicht ausschalten</string> <string name="settings_display_screen_timeout_disabled">Bildschirm nicht ausschalten</string>
<string name="settings_display_full_screen">Vollbild</string>
<string name="settings_display_rotate_screen">Bildschirm drehen</string> <string name="settings_display_rotate_screen">Bildschirm drehen</string>
<string name="settings_launcher_section_functionality">Funktionalität</string> <string name="settings_launcher_section_functionality">Funktionalität</string>
<string name="settings_enabled_gestures_double_swipe">Doppelte Wischaktionen</string> <string name="settings_enabled_gestures_double_swipe">Doppelte Wischaktionen</string>
@ -105,7 +102,7 @@
<string name="settings_enabled_gestures_edge_swipe">Kantenaktionen</string> <string name="settings_enabled_gestures_edge_swipe">Kantenaktionen</string>
<string name="settings_enabled_gestures_edge_swipe_edge_width">Kantenbreite</string> <string name="settings_enabled_gestures_edge_swipe_edge_width">Kantenbreite</string>
<string name="settings_functionality_auto_launch">Suchergebnis starten</string> <string name="settings_functionality_auto_launch">Suchergebnis starten</string>
<string name="settings_functionality_search_web_summary">Beim Durchsuchen der Apps Enter drücken um stattdessen im Internet zu suchen</string> <string name="settings_functionality_search_web_summary">Beim Durchsuchen der Apps Enter drücken, um stattdessen im Internet zu suchen.</string>
<string name="settings_functionality_auto_keyboard">Tastatur automatisch öffnen</string> <string name="settings_functionality_auto_keyboard">Tastatur automatisch öffnen</string>
<string name="settings_launcher_sensitivity">Empfindlichkeit</string> <string name="settings_launcher_sensitivity">Empfindlichkeit</string>
<!-- <!--
@ -118,7 +115,6 @@
<string name="settings_list_layout_item_grid">Raster</string> <string name="settings_list_layout_item_grid">Raster</string>
<string name="settings_general_choose_home_screen">Launcher wählen</string> <string name="settings_general_choose_home_screen">Launcher wählen</string>
<string name="settings_meta_cant_select_launcher">App Info</string> <string name="settings_meta_cant_select_launcher">App Info</string>
<string name="settings_meta_cant_select_launcher_msg">Das Gerät unterstützt diese Funktion nicht. Stattdessen die App Details bearbeiten?</string>
<string name="settings_meta_show_tutorial">Zum Tutorial</string> <string name="settings_meta_show_tutorial">Zum Tutorial</string>
<string name="settings_meta_reset">Einstellungen zurücksetzen</string> <string name="settings_meta_reset">Einstellungen zurücksetzen</string>
<string name="settings_meta_reset_confirm">Alle Einstellungen gehen verloren. Weitermachen?</string> <string name="settings_meta_reset_confirm">Alle Einstellungen gehen verloren. Weitermachen?</string>
@ -128,7 +124,7 @@
<string name="settings_meta_contact">Entwickler kontaktieren</string> <string name="settings_meta_contact">Entwickler kontaktieren</string>
<string name="dialog_report_bug_create_report">Report erstellen</string> <string name="dialog_report_bug_create_report">Report erstellen</string>
<string name="settings_meta_fork_contact">Entwickler des Fork kontaktieren</string> <string name="settings_meta_fork_contact">Entwickler des Fork kontaktieren</string>
<string name="settings_meta_join_chat">Dem µLauncher-Chat beitreten</string> <string name="settings_meta_join_chat">Dem μLauncher-Chat beitreten</string>
<string name="settings_meta_donate">Spenden</string> <string name="settings_meta_donate">Spenden</string>
<string name="settings_meta_privacy">Datenschutzerklärung</string> <string name="settings_meta_privacy">Datenschutzerklärung</string>
<!-- <!--
@ -145,11 +141,9 @@
<string name="list_app_info">App Info</string> <string name="list_app_info">App Info</string>
<string name="list_app_hidden_remove">Sichtbar machen</string> <string name="list_app_hidden_remove">Sichtbar machen</string>
<string name="list_app_rename">Umbenennen</string> <string name="list_app_rename">Umbenennen</string>
<string name="list_removed">Die App wurde entfernt</string> <string name="list_apps_search_hint">Suchen</string>
<string name="list_not_removed">Die App konnte nicht entfernt werden</string>
<string name="list_apps_search_hint">Anwendungen suchen</string>
<string name="list_apps_search_hint_no_auto_launch">Suchen (kein Schnellstart)</string> <string name="list_apps_search_hint_no_auto_launch">Suchen (kein Schnellstart)</string>
<string name="list_other_settings">µLauncher Einstellungen</string> <string name="list_other_settings">μLauncher Einstellungen</string>
<string name="list_other_list">Alle Anwendungen</string> <string name="list_other_list">Alle Anwendungen</string>
<string name="list_other_list_favorites">Favoriten</string> <string name="list_other_list_favorites">Favoriten</string>
<string name="list_other_toggle_private_space_lock">Privaten Bereich (ent)sperren</string> <string name="list_other_toggle_private_space_lock">Privaten Bereich (ent)sperren</string>
@ -166,18 +160,18 @@
--> -->
<string name="list_other_torch">Taschenlampe umschalten</string> <string name="list_other_torch">Taschenlampe umschalten</string>
<string name="tutorial_title">Tutorial</string> <string name="tutorial_title">Tutorial</string>
<string name="tutorial_start_text">Hier eine kurze Erklärung, wie dieser Launcher funktioniert.</string> <string name="tutorial_start_text">👋\n\nHier eine kurze Erklärung, wie dieser Launcher funktioniert.</string>
<string name="tutorial_concept_title">Konzept</string> <string name="tutorial_concept_title">Konzept</string>
<string name="tutorial_concept_text">µLauncher bietet eine minimalistische, effiziente und ablenkungsfreie digitale Umgebung.\n\nDie App ist freie Software, enthält keine Werbung und sammelt keinerlei Daten.</string> <string name="tutorial_concept_text">µLauncher bietet eine minimalistische, effiziente und ablenkungsfreie Umgebung.\n\nDie App ist freie Software, enthält keine Werbung und sammelt keinerlei Daten.</string>
<string name="tutorial_concept_text_2">Der Quellcode ist bei GitHub zu finden.</string> <string name="tutorial_concept_text_2">Der Quellcode ist bei GitHub zu finden.</string>
<string name="tutorial_usage_title">Benutzung</string> <string name="tutorial_usage_title">Benutzung</string>
<string name="tutorial_usage_text">Der Homescreen zeigt nur das Datum und die Uhrzeit. Keine Ablenkung.</string> <string name="tutorial_usage_text">Der Homescreen zeigt nur das Datum und die Uhrzeit. Keine Ablenkung.</string>
<string name="tutorial_usage_text_2">Häufig verwendete Apps können mittels Gesten, z.B. Wischen oder den Lautstärketasten geöffnet werden. Gleich können die Apps ausgewählt werden.</string> <string name="tutorial_usage_text_2">Häufig verwendete Apps können mittels Gesten, z.B. Wischen oder den Lautstärketasten geöffnet werden.</string>
<string name="tutorial_setup_title">Einrichtung</string> <string name="tutorial_setup_title">Einrichtung</string>
<string name="tutorial_setup_text">Es wurden Standardapps ausgewählt, die Zuordnung kann hier angepasst werden:</string> <string name="tutorial_setup_text">Es wurden Standardapps ausgewählt, die Zuordnung kann hier angepasst werden:</string>
<string name="tutorial_setup_text_2">Die Auswahl kann in den Einstellungen später jederzeit geändert werden.</string> <string name="tutorial_setup_text_2">Die Auswahl kann in den Einstellungen später jederzeit geändert werden.</string>
<string name="tutorial_finish_title">Los gehts!</string> <string name="tutorial_finish_title">Los gehts!</string>
<string name="tutorial_finish_text">Es kann losgehen!\n\nWir hoffen, dass diese App hilfreich ist!\n\n- Finn (der Entwickler)\n\tund Josia (der einige Änderungen vorgenommen hat und den Fork μLauncher entwickelt)</string> <string name="tutorial_finish_text">Es kann losgehen!\n\nWir hoffen, dass diese App hilfreich ist!\n\n- Finn (der Entwickler)\nund Josia (der einige Änderungen vorgenommen hat und den Fork μLauncher entwickelt)</string>
<string name="tutorial_finish_button">Starten</string> <string name="tutorial_finish_button">Starten</string>
<string name="settings">Einstellungen</string> <string name="settings">Einstellungen</string>
<string name="ic_menu_alt">Mehr Optionen</string> <string name="ic_menu_alt">Mehr Optionen</string>
@ -202,28 +196,19 @@
<string name="alert_no_torch_found">Es wurde keine geeignete Kamera gefunden.</string> <string name="alert_no_torch_found">Es wurde keine geeignete Kamera gefunden.</string>
<string name="alert_torch_access_exception">Fehler: Kein Zugriff auf die Kamera möglich.</string> <string name="alert_torch_access_exception">Fehler: Kein Zugriff auf die Kamera möglich.</string>
<string name="settings_actions_lock_method">Methode zum Sperren des Bildschirms wählen</string> <string name="settings_actions_lock_method">Methode zum Sperren des Bildschirms wählen</string>
<string name="dialog_rename_ok">Ok</string>
<string name="dialog_rename_title">%1$s umbenennen</string> <string name="dialog_rename_title">%1$s umbenennen</string>
<string name="toast_private_space_default_home_screen">µLauncher muss als Standardlauncher eingerichtet sein um auf den privaten Bereich zugreifen zu können.</string> <string name="toast_private_space_default_home_screen">μLauncher muss als Standardlauncher eingerichtet sein um auf den privaten Bereich zugreifen zu können.</string>
<string name="toast_lock_screen_not_supported">Fehler: Auf diesem Gerät kann der Bildschirm nicht mittels Bedienungshilfe gesperrt werden. Bitte stattdessen Geräteadministrator verwenden.</string> <string name="toast_lock_screen_not_supported">Fehler: Auf diesem Gerät kann der Bildschirm nicht mittels Bedienungshilfe gesperrt werden. Bitte stattdessen Geräteadministrator verwenden.</string>
<string name="accessibility_service_name">µLauncher - Bildschirm sperren</string> <string name="accessibility_service_name">μLauncher - Bildschirm sperren</string>
<string name="alert_lock_screen_failed">Fehler: Bildschirm konnte nicht gesperrt werden.</string> <string name="alert_lock_screen_failed">Fehler: Bildschirm konnte nicht gesperrt werden.</string>
<string name="toast_accessibility_service_not_enabled">Die Bedienungshilfe ist nicht aktiviert. Bitte in den Einstellungen aktivieren</string> <string name="toast_accessibility_service_not_enabled">Die Bedienungshilfe ist nicht aktiviert. Bitte in den Einstellungen aktivieren</string>
<string name="screen_lock_method_dialog_title">Methode zum Sperren wählen</string> <string name="screen_lock_method_dialog_title">Methode zum Sperren wählen</string>
<string name="screen_lock_method_use_accessibility">Bedienungshilfe verwenden</string> <string name="screen_lock_method_use_accessibility">Bedienungshilfe verwenden</string>
<string name="screen_lock_method_use_device_admin">Geräteadministrator verwenden</string> <string name="screen_lock_method_use_device_admin">Geräteadministrator verwenden</string>
<string name="accessibility_service_description"> <string name="accessibility_service_description">μLauncher als Bedienungshilfe zu aktivieren ermöglicht es μLauncher, den Bildschirm zu sperren. Achtung: Hierfür sind weitgehende Berechtigungen erforderlich. Solche Berechtigungen sollten niemals leichtfertig vergeben werden. μLauncher wird diese Berechtigungen ausschließlich zum Sperren des Bildschirms verwenden. Alternativ kann der Bildschirm auch mithilfe von Geräteadministratorberechtigungen gesperrt werden. Dann ist jedoch ein Entsperren mit Fingerabdruck oder Gesichtserkennung nicht möglich.</string>
µLauncher als Bedienungshilfe zu aktivieren ermöglicht es µLauncher, den Bildschirm zu sperren.
Achtung: Hierfür sind weitgehende Berechtigungen erforderlich.
Solche Berechtigungen sollten niemals leichtfertig vergeben werden.
µLauncher wird diese Berechtigungen ausschließlich zum Sperren des Bildschirms verwenden.
Alternativ kann der Bildschirm auch mithilfe von Geräteadministratorberechtigungen gesperrt werden.
Dann ist jedoch ein Entsperren mit Fingerabdruck oder Gesichtserkennung nicht möglich.
</string>
<string name="screen_lock_method_dialog_text"><![CDATA[ <string name="screen_lock_method_dialog_text"><![CDATA[
<h1>Methode zum Sperren auswählen</h1> <h1>Methode zum Sperren auswählen</h1>
Es gibt zwei Möglichkeiten, wie µLauncher den Bildschirm sperren kann. Es gibt zwei Möglichkeiten, wie μLauncher den Bildschirm sperren kann.
Leider haben beide Nachteile:<br/><br/> Leider haben beide Nachteile:<br/><br/>
@ -267,16 +252,61 @@
<string name="dialog_select_color_alpha">Transparenz</string> <string name="dialog_select_color_alpha">Transparenz</string>
<string name="dialog_select_color_blue">Blau</string> <string name="dialog_select_color_blue">Blau</string>
<string name="dialog_select_color_green">Grün</string> <string name="dialog_select_color_green">Grün</string>
<string name="dialog_select_color_ok">Ok</string>
<string name="dialog_select_color_color_hex">Farbe</string> <string name="dialog_select_color_color_hex">Farbe</string>
<string name="dialog_choose_color_title">Farbe wählen</string> <string name="dialog_choose_color_title">Farbe wählen</string>
<string name="settings_meta_licenses">Open Source Lizenzen</string> <string name="settings_meta_licenses">Open Source Lizenzen</string>
<string name="legal_info_title">Open Source Lizenzen</string> <string name="legal_info_title">Open Source Lizenzen</string>
<string name="toast_activity_not_found_search_web">Keine App gefunden um die Suche durchzuführen.</string> <string name="toast_activity_not_found_search_web">Keine App gefunden um die Suche durchzuführen.</string>
<string name="toast_activity_not_found_browser">URL kann nicht geöffnet werden: kein Browser gefunden.</string> <string name="toast_activity_not_found_browser">URL kann nicht geöffnet werden: kein Browser gefunden.</string>
<string name="dialog_consent_accessibility_privileges">Mir ist bewusst, dass µLauncher hierdurch weitreichende Berechtigungen erhält.</string> <string name="dialog_consent_accessibility_privileges">Mir ist bewusst, dass μLauncher hierdurch weitreichende Berechtigungen erhält.</string>
<string name="dialog_consent_accessibility_other_options">Mir ist bewusst, dass Alternativen existieren (Geräteadministrator oder der Power-Button).</string> <string name="dialog_consent_accessibility_other_options">Mir ist bewusst, dass Alternativen existieren (Geräteadministrator oder der Power-Button).</string>
<string name="dialog_consent_accessibility_consent">Ich willige ein, dass µLauncher eine Bedienungshilfe für Zwecke verwendet, die nicht unter Barrierefreiheit fallen.</string> <string name="dialog_consent_accessibility_consent">Ich willige ein, dass μLauncher eine Bedienungshilfe für Zwecke verwendet, die nicht unter Barrierefreiheit fallen.</string>
<string name="dialog_consent_accessibility_data_collection">Ich willige ein, dass µLauncher keine Daten sammelt.</string> <string name="dialog_consent_accessibility_data_collection">Ich willige ein, dass µLauncher keine Daten sammelt.</string>
<string name="dialog_consent_accessibility_title">Bedienungshilfe aktivieren</string> <string name="dialog_consent_accessibility_title">Bedienungshilfe aktivieren</string>
<string name="dialog_report_bug_info">Danke für die Mithilfe, μLauncher zu verbessern!\nEs wird darum gebeten, Bug Reports die folgenden Informationen anzufügen, um diese besser nachvollziehen zu können:</string>
<string name="settings_gesture_back">Zurück</string>
<string name="settings_gesture_description_back">Zurück-Taste oder -Geste</string>
<string name="settings_gesture_swipe_larger_reverse"><![CDATA[> (Rückwärts)]]></string>
<string name="settings_gesture_description_swipe_larger_reverse">Unten links -&gt; mitte rechts -&gt; oben links</string>
<string name="settings_gesture_swipe_smaller"><![CDATA[<]]></string>
<string name="settings_gesture_swipe_smaller_reverse"><![CDATA[< (Rückwärts)]]></string>
<string name="settings_gesture_swipe_v">V</string>
<string name="settings_gesture_description_swipe_v">Oben links -&gt; unten mitte -&gt; oben rechts</string>
<string name="settings_gesture_swipe_v_reverse">V (Rückwärts)</string>
<string name="settings_gesture_description_swipe_smaller_reverse">Unten rechts -&gt; mitte links -&gt; oben rechts</string>
<string name="settings_gesture_swipe_lambda">Λ</string>
<string name="settings_gesture_description_swipe_lambda">Unten links -&gt; oben mitte -&gt; unten rechts</string>
<string name="settings_gesture_description_swipe_v_reverse">Oben rechts -&gt; unten mitte -&gt; oben links</string>
<string name="settings_gesture_swipe_lambda_reverse">Λ (Rückwärts)</string>
<string name="settings_gesture_description_swipe_lambda_reverse">Unten rechts -&gt; oben mtte -&gt; unten links</string>
<string name="dialog_report_bug_button_security">Sicherheitslücke melden</string>
<string name="settings_apps_hide_private_space_apps">Privaten Bereich nicht in der App Liste anzeigen</string>
<string name="list_title_private_space">Privater Bereich</string>
<string name="pin_shortcut_title">Shortcut hinzufügen</string>
<string name="pin_shortcut_button_bind">An Geste binden</string>
<string name="pin_shortcut_switch_visible">In Appliste anzeigen</string>
<string name="tooltip_unlock_private_space">Privaten Bereich entsperren</string>
<string name="settings_display_hide_status_bar">Statusleiste verstecken</string>
<string name="settings_display_hide_navigation_bar">Navigationsleiste verstecken</string>
<string name="tooltip_lock_private_space">Privaten Bereich sperren</string>
<string name="tutorial_concept_label_version">Version</string>
<string name="tutorial_app_list_title">Alle Apps</string>
<string name="tutorial_app_list_text_2">Sobald nur noch eine App passt, wird diese automatisch gestartet.\nDas lässt sich unterdrücken, indem der Suche ein Leerzeichen vorangestellt wird.</string>
<string name="settings_gesture_swipe_larger"><![CDATA[>]]></string>
<string name="settings_gesture_description_swipe_smaller">Oben rechts -&gt; mitte links -&gt; unten rechts</string>
<string name="settings_gesture_description_swipe_larger">Oben links -&gt; mitte rechts -&gt; unten links</string>
<string name="tutorial_app_list_text">In der Appliste kann effizient nach Apps gesucht werden.\n\nDie Liste wird standardmäßig durch Wischen nach oben geöffnet (auch das lässt sich einstellen).</string>
<string name="dialog_consent_accessibility_text"><![CDATA[Das Aktivieren der Bedienungshilfe erteilt μLauncher <strong>weitreichende Zugriffsrechte</strong> .<br/>μLauncher wird diese <strong>ausschließlich zum Sperren des Bildschirms</strong> verwenden. μLauncher wird <strong>niemals irgendwelche Daten sammeln</strong>. Insbesondere werden mittels der Bedienungshilfe keine Daten gesammelt.]]></string>
<string name="settings_gesture_tap_up">Tippen und hoch</string>
<string name="settings_gesture_description_tap_up">Tippen, dann nach oben wischen</string>
<string name="settings_gesture_tap_down">Tippen und nach unten</string>
<string name="settings_gesture_description_tap_down">Tippen, dann nach unten wischen</string>
<string name="settings_gesture_tap_left">Tippen und links</string>
<string name="settings_gesture_description_tap_left">Tippen, dann nach links wischen</string>
<string name="settings_gesture_tap_right">Tippen und rechts</string>
<string name="settings_gesture_description_tap_right">Tippen, dann nach rechts wischen</string>
<string name="dialog_report_bug_security_info">Sicherheitslücken bitte nicht öffentlich bei GitHub melden, sondern auf dem folgenden Weg:</string>
<string name="list_other_list_private_space">Privater Bereich</string>
<string name="list_other_track_play_pause">Musik: Wiedergabe / Pause</string>
<string name="settings_list_reverse_layout">Appliste umkehren</string>
</resources> </resources>

View file

@ -16,14 +16,13 @@
--> -->
<string name="alert_cant_open_title">No se pudo abrir la aplicación</string> <string name="alert_cant_open_title">No se pudo abrir la aplicación</string>
<string name="alert_cant_open_message">¿Desea cambiar la configuración?</string> <string name="alert_cant_open_message">¿Desea cambiar la configuración?</string>
<string name="toast_cant_open_message">Abra la configuración para elegir una aplicación para esta acción</string> <string name="toast_cant_open_message">Abra la configuración para elegir una acción para este gesto</string>
<!-- <!--
- -
- Settings - Settings
- -
--> -->
<string name="settings_title">Configuración</string> <string name="settings_title">Configuración</string>
<string name="settings_tab_app">Aplicaciones</string>
<string name="settings_tab_launcher">Launcher</string> <string name="settings_tab_launcher">Launcher</string>
<string name="settings_tab_meta">Meta</string> <string name="settings_tab_meta">Meta</string>
<!-- <!--
@ -31,22 +30,21 @@
- Settings : Apps - Settings : Apps
- -
--> -->
<string name="settings_gesture_up">Deslizar Arriba</string> <string name="settings_gesture_up">Arriba</string>
<string name="settings_gesture_double_up">Doble Arriba</string> <string name="settings_gesture_double_up">Doble Arriba</string>
<string name="settings_gesture_down">Deslizar Abajo</string> <string name="settings_gesture_down">Abajo</string>
<string name="settings_gesture_double_down">Doble Abajo</string> <string name="settings_gesture_double_down">Doble Abajo</string>
<string name="settings_gesture_left">Deslizar Izquierda</string> <string name="settings_gesture_left">Izquierda</string>
<string name="settings_gesture_double_left">Doble Izquierda</string> <string name="settings_gesture_double_left">Doble Izquierda</string>
<string name="settings_gesture_right">Deslizar Derecha</string> <string name="settings_gesture_right">Derecha</string>
<string name="settings_gesture_double_right">Doble Derecha</string> <string name="settings_gesture_double_right">Doble Derecha</string>
<string name="settings_gesture_vol_up">Subir Volumen</string> <string name="settings_gesture_vol_up">Tecla para subir el volumen</string>
<string name="settings_gesture_vol_down">Bajar Volumen</string> <string name="settings_gesture_vol_down">Tecla para bajar el volumen</string>
<string name="settings_gesture_double_click">Doble Click</string> <string name="settings_gesture_double_click">Doble Click</string>
<string name="settings_gesture_long_click">Click Largo</string> <string name="settings_gesture_long_click">Click Largo</string>
<string name="settings_gesture_date">Toca la fecha</string> <string name="settings_gesture_date">Fecha</string>
<string name="settings_gesture_time">Toca el reloj</string> <string name="settings_gesture_time">reloj</string>
<string name="settings_apps_choose">Elegir Aplicación</string> <string name="settings_apps_choose">Elegir Aplicación</string>
<string name="settings_apps_view_all">Todas las aplicaciones</string>
<string name="settings_apps_install">Instalar aplicaciones</string> <string name="settings_apps_install">Instalar aplicaciones</string>
<string name="settings_apps_toast_store_not_found">No se encontró la Store</string> <string name="settings_apps_toast_store_not_found">No se encontró la Store</string>
<!-- <!--
@ -60,10 +58,8 @@
<string name="settings_theme_color_theme_item_dark">Oscuro</string> <string name="settings_theme_color_theme_item_dark">Oscuro</string>
<string name="settings_theme_color_theme_item_light">Luminoso</string> <string name="settings_theme_color_theme_item_light">Luminoso</string>
<string name="settings_theme_wallpaper">Seleccionar fondo de pantalla</string> <string name="settings_theme_wallpaper">Seleccionar fondo de pantalla</string>
<string name="settings_launcher_change_wallpaper">Cambiar fondo de pantalla</string>
<string name="settings_launcher_section_display">Pantalla</string> <string name="settings_launcher_section_display">Pantalla</string>
<string name="settings_display_screen_timeout_disabled">Mantener encendida</string> <string name="settings_display_screen_timeout_disabled">Mantener encendida</string>
<string name="settings_display_full_screen">Pantalla completa</string>
<string name="settings_launcher_section_functionality">Funciones</string> <string name="settings_launcher_section_functionality">Funciones</string>
<string name="settings_enabled_gestures_double_swipe">Deslizar con dos dedos</string> <string name="settings_enabled_gestures_double_swipe">Deslizar con dos dedos</string>
<string name="settings_functionality_auto_launch">Auto-lanzar búsquedas</string> <string name="settings_functionality_auto_launch">Auto-lanzar búsquedas</string>
@ -76,8 +72,7 @@
--> -->
<string name="settings_general_choose_home_screen">Seleccionar Launcher</string> <string name="settings_general_choose_home_screen">Seleccionar Launcher</string>
<string name="settings_meta_cant_select_launcher">Información de la aplicación</string> <string name="settings_meta_cant_select_launcher">Información de la aplicación</string>
<string name="settings_meta_cant_select_launcher_msg">Su dispositivo no posee esta caracrerística. Desea cambiar los detalles de la aplicación?</string> <string name="settings_meta_show_tutorial">Ver el tutorial de µLauncher</string>
<string name="settings_meta_show_tutorial">Ver tutorial de Launcher</string>
<string name="settings_meta_reset">Configuración por defecto</string> <string name="settings_meta_reset">Configuración por defecto</string>
<string name="settings_meta_reset_confirm">Todas sus preferencias se eliminarán. Desea continuar?</string> <string name="settings_meta_reset_confirm">Todas sus preferencias se eliminarán. Desea continuar?</string>
<string name="settings_meta_report_bug">Reportar un error</string> <string name="settings_meta_report_bug">Reportar un error</string>
@ -96,13 +91,11 @@
<string name="list_tab_other">Otros</string> <string name="list_tab_other">Otros</string>
<string name="list_app_delete">Desinstalar</string> <string name="list_app_delete">Desinstalar</string>
<string name="list_app_info">Información</string> <string name="list_app_info">Información</string>
<string name="list_removed">Se eliminó la aplicación</string> <string name="list_apps_search_hint">Buscar</string>
<string name="list_not_removed">No se pudo eliminar la aplicación</string> <string name="list_other_settings">Configuración de μLauncher</string>
<string name="list_apps_search_hint">Buscar Aplicaciones</string>
<string name="list_other_settings">Configuración de Launcher</string>
<string name="list_other_list">Aplicaciones</string> <string name="list_other_list">Aplicaciones</string>
<string name="list_other_volume_up">Música: Subir</string> <string name="list_other_volume_up">Subir el volumen</string>
<string name="list_other_volume_down">Música: Bajar</string> <string name="list_other_volume_down">Bajar volumen</string>
<string name="list_other_track_next">Música: Siguiente</string> <string name="list_other_track_next">Música: Siguiente</string>
<string name="list_other_track_previous">Música: Anterior</string> <string name="list_other_track_previous">Música: Anterior</string>
<string name="list_other_nop">Nada</string> <string name="list_other_nop">Nada</string>
@ -112,19 +105,214 @@
- -
--> -->
<string name="tutorial_title">Tutorial</string> <string name="tutorial_title">Tutorial</string>
<string name="tutorial_start_text">Tómate unos segundos para aprender a usar este launcher</string> <string name="tutorial_start_text">👋\n\n¡Tómate unos segundos para aprender a utilizar este Launcher!</string>
<string name="tutorial_concept_title">Concepto</string> <string name="tutorial_concept_title">Concepto</string>
<string name="tutorial_concept_text">Launcher está diseñado para ser minimalista, eficiente y libre de distracciones.\n\nEs gratis y libre de anuncios y servicios de rastreo.</string> <string name="tutorial_concept_text">μLauncher está diseñado para ser mínimo, eficiente y libre de distracciones.\n\nNo contiene anuncios ni recopila datos.</string>
<string name="tutorial_concept_text_2">La aplicación es de código abierto (licencia MIT) y está disponible en GitHub!\n\nNo olvides echarle un vistazo al repositorio!</string> <string name="tutorial_concept_text_2">¡Es software libre (licencia MIT)!\n¡No olvides visitar el repositorio!</string>
<string name="tutorial_usage_title">Uso</string> <string name="tutorial_usage_title">Uso</string>
<string name="tutorial_usage_text">Tu pantalla de inicio contiene la fecha y hora local. Sin distracciones.</string> <string name="tutorial_usage_text">Tu pantalla de inicio contiene la fecha y hora local. Sin distracciones.</string>
<string name="tutorial_usage_text_2">Puedes iniciar tus aplicaciones con solo presionar o deslizar una vez. Elige algunas en la siguiente pantalla.</string> <string name="tutorial_usage_text_2">Puede iniciar sus aplicaciones más importantes con gestos táctiles o presionando botones.</string>
<string name="tutorial_setup_title">Puesta a punto</string> <string name="tutorial_setup_title">Puesta a punto</string>
<string name="tutorial_setup_text">Elegimos algunas aplicaciones por defecto para ti, si lo deseas puedes cambiarlas ahora.</string> <string name="tutorial_setup_text">Elegimos algunas aplicaciones predeterminadas para ti. Puedes cambiarlos ahora si lo deseas:</string>
<string name="tutorial_setup_text_2">También puedes cambiar tu selección más tarde.</string> <string name="tutorial_setup_text_2">También puedes cambiar tu selección más tarde.</string>
<string name="tutorial_finish_title">Vamos!</string> <string name="tutorial_finish_title">Vamos!</string>
<string name="tutorial_finish_text">Estás listo para iniciar!\n\n Esperamos que esto te sea de gran ayuda!\n\n- Finn M Glas\n(el desarrollador)</string> <string name="tutorial_finish_text">¡Estás listo para comenzar!\n\n¡Espero que esto sea de gran valor para ti!\n\n- Finn (quien creó Launcher) y Josia (quien hizo algunas mejoras y mantiene la bifurcación μLauncher)</string>
<string name="tutorial_finish_button">Iniciar</string> <string name="tutorial_finish_button">Iniciar</string>
<string name="settings">Configuración</string> <string name="settings">Configuración</string>
<string name="ic_menu_alt">Más opciones</string> <string name="ic_menu_alt">Más opciones</string>
</resources> <string name="settings_gesture_back">atrás</string>
<string name="settings_gesture_description_tap_right">Toca + Derecha Toca y desliza hacia la derecha</string>
<string name="settings_gesture_description_left_bottom_edge">Desliza el dedo hacia la izquierda en la parte inferior de la pantalla</string>
<string name="settings_gesture_description_down_right_edge">Desliza hacia abajo en el borde derecho de la pantalla</string>
<string name="settings_gesture_description_back">Botón de retroceso / gesto de retroceso</string>
<string name="settings_gesture_description_up_left_edge">Desliza el dedo hacia arriba en el borde izquierdo de la pantalla</string>
<string name="settings_gesture_description_up_right_edge">Desliza el dedo hacia arriba en el borde derecho de la pantalla</string>
<string name="settings_gesture_description_down_left_edge">Desliza el dedo hacia abajo en el borde izquierdo de la pantalla</string>
<string name="settings_theme_color_theme_item_dynamic">Dinámico</string>
<string name="settings_clock_color">Color</string>
<string name="settings_gesture_description_tap_up">Toca y desliza hacia arriba</string>
<string name="settings_gesture_tap_left">Toque + Izquierda</string>
<string name="settings_gesture_description_right_bottom_edge">Desliza el dedo hacia la derecha en la parte inferior de la pantalla</string>
<string name="settings_gesture_description_left_top_edge">Desliza el dedo hacia la izquierda en la parte superior de la pantalla</string>
<string name="settings_gesture_down_left_edge">Abajo (borde izquierdo)</string>
<string name="settings_gesture_description_vol_up">Presione el botón para subir el volumen</string>
<string name="settings_functionality_auto_launch_summary">Presione la barra espaciadora para desactivar esta función temporalmente.</string>
<string name="settings_launcher_section_apps">Aplicaciones</string>
<string name="settings_gesture_description_swipe_v">Arriba a la izquierda -&gt; Abajo en el medio -&gt; Arriba a la derecha</string>
<string name="settings_functionality_search_web_summary">Presione regresar mientras busca en la lista de aplicaciones para iniciar una búsqueda web.</string>
<string name="alert_torch_access_exception">Error: No se puede acceder a la antorcha.</string>
<string name="settings_theme_background">Fondo (lista de aplicaciones y configuración)</string>
<string name="settings_theme_color_theme">Tema de color</string>
<string name="settings_theme_font">Fuente</string>
<string name="settings_theme_monochrome_icons">Iconos de aplicaciones monocromáticos</string>
<string name="settings_gesture_right_top_edge">Derecha (arriba)</string>
<string name="settings_gesture_right_bottom_edge">Derecha (Abajo)</string>
<string name="settings_gesture_left_top_edge">Izquierda (arriba)</string>
<string name="dialog_consent_accessibility_text"><![CDATA[Está a punto de activar el servicio de accesibilidad. Esto otorgará privilegios de amplio alcance a μLauncher. μLauncher utilizará estos privilegios solo para bloquear la pantalla. μLauncher <strong>nunca recopilará ningún dato</strong>. En particular, μLauncher no utiliza el servicio de accesibilidad para recopilar ningún dato.]]></string>
<string name="accessibility_service_description">Configurar μLauncher como un servicio de accesibilidad le permite bloquear la pantalla. Tenga en cuenta que se requieren permisos excesivos. Nunca debe otorgar dichos permisos a la ligera a ninguna aplicación. μLauncher utilizará el servicio de accesibilidad solo para bloquear la pantalla. Puedes consultar el código fuente para asegurarte. Tenga en cuenta que también se puede bloquear la pantalla otorgando permisos de administrador del dispositivo μLauncher. Sin embargo, ese método no funciona con el desbloqueo mediante huellas dactilares y rostro.</string>
<string name="settings_apps_hide_private_space_apps">Ocultar el espacio privado de la lista de aplicaciones</string>
<string name="settings_list_layout">Diseño de la lista de aplicaciones</string>
<string name="list_title_private_space">Espacio privado</string>
<string name="alert_no_torch_found">No se detectó ninguna cámara con linterna.</string>
<string name="list_other_toggle_private_space_lock">Activar o desactivar el bloqueo del espacio privado</string>
<string name="list_other_torch">Activar o desactivar la antorcha</string>
<string name="settings_apps_hide_paused_apps">Ocultar aplicaciones pausadas</string>
<string name="settings_apps_hidden">Aplicaciones ocultas</string>
<string name="dialog_rename_title">Cambiar el nombre de %1$s</string>
<string name="dialog_cancel">Cancelar</string>
<string name="settings_gesture_swipe_v">V</string>
<string name="dialog_report_bug_title">Informar un error</string>
<string name="list_app_hidden_remove">mostrar</string>
<string name="toast_private_space_default_home_screen">μLauncher debe ser la pantalla de inicio predeterminada para acceder al espacio privado.</string>
<string name="dialog_report_bug_security_info">No informe vulnerabilidades de seguridad públicamente en GitHub, sino utilice lo siguiente:</string>
<string name="dialog_report_bug_button_security">Informar sobre una vulnerabilidad de seguridad</string>
<string name="dialog_report_bug_create_report">Crear informe</string>
<string name="settings_meta_join_chat">Únete al chat de μLauncher</string>
<string name="settings_meta_donate">Donar</string>
<string name="list_other_volume_adjust">Ajustar el volumen</string>
<string name="list_other_expand_notifications_panel">Expandir el panel de notificaciones</string>
<string name="toast_private_space_not_available">El espacio privado no está disponible</string>
<string name="settings_gesture_description_up">Desliza hacia arriba</string>
<string name="settings_gesture_description_double_click">Haga doble clic en un área vacía</string>
<string name="settings_gesture_description_vol_down">Presione el botón para bajar el volumen</string>
<string name="settings_gesture_description_long_click">Haga clic largo en un área vacía</string>
<string name="settings_gesture_description_date">Haga clic en la fecha</string>
<string name="settings_gesture_description_time">Haga clic en el reloj</string>
<string name="settings_clock_time_visible">Mostrar la hora</string>
<string name="settings_theme_text_shadow">Sombra de texto</string>
<string name="settings_display_hide_status_bar">Ocultar la barra de estado</string>
<string name="settings_display_hide_navigation_bar">Ocultar la barra de navegación</string>
<string name="settings_enabled_gestures_double_swipe_summary">Deslizar con dos dedos</string>
<string name="settings_list_layout_item_default">predeterminado</string>
<string name="list_title_favorite">Aplicaciones favoritas</string>
<string name="list_title_hidden">Aplicaciones ocultas</string>
<string name="undo">Deshacer</string>
<string name="dialog_consent_accessibility_consent">Doy mi consentimiento para que μLauncher utilice el servicio de accesibilidad para proporcionar una funcionalidad no relacionada con la accesibilidad.</string>
<string name="list_apps_search_hint_no_auto_launch">Buscar (sin inicio automático)</string>
<string name="dialog_consent_accessibility_privileges">Soy consciente de que esto otorgará privilegios de gran alcance a μLauncher.</string>
<string name="dialog_consent_accessibility_other_options">Soy consciente de que existen otras opciones (utilizando privilegios de administrador del dispositivo o el botón de encendido).</string>
<string name="settings_meta_licenses">Licencias de código abierto</string>
<string name="legal_info_title">Licencias de código abierto</string>
<string name="tutorial_concept_label_version">versión</string>
<string name="tutorial_app_list_title">Todas las aplicaciones</string>
<string name="screen_lock_method_dialog_title">Elija el método para bloquear</string>
<string name="screen_lock_method_dialog_text"><![CDATA[
Elegir método de bloqueo
Hay dos métodos para bloquear la pantalla.
Desafortunadamente, ambos tienen desventajas:<br/><br/>
Administrador del dispositivo
No funciona con desbloqueo por huella dactilar ni reconocimiento facial.
<br/>
<br/>
Servicio de Accesibilidad
Requiere privilegios excesivos.
μLauncher utilizará esos privilegios solo para bloquear la pantalla.
<br/>
(Realmente no deberías confiar en una aplicación aleatoria que acabas de descargar con tal afirmación, pero puedes consultar el <a href=\"https://github.com/jrpie/Launcher\">código fuente</a>).
<br/>
En algunos dispositivos, el PIN de inicio ya no se utilizará para cifrar datos después de activar un servicio de accesibilidad.
Esto se puede <a href="https://issuetracker.google.com/issues/37010136#comment36">reactivar</a> posteriormente.
<br/><br/><br/><br/>
Puede cambiar su selección más tarde en la configuración.
]]></string>
<string name="screen_lock_method_use_accessibility">Utilice el servicio de accesibilidad</string>
<string name="screen_lock_method_use_device_admin">Usar el administrador del dispositivo</string>
<string name="settings_actions_lock_method">Elija el método para bloquear la pantalla</string>
<string name="dialog_select_color_red">Rojo</string>
<string name="dialog_select_color_alpha">alfa</string>
<string name="dialog_select_color_blue">Azul</string>
<string name="dialog_select_color_green">Verde</string>
<string name="settings_theme_font_item_sans_serif">Sans serif</string>
<string name="settings_theme_font_item_serif">Serif</string>
<string name="settings_theme_font_item_monospace">Monoespaciado</string>
<string name="settings_theme_font_item_serif_monospace">Serif monoespaciado</string>
<string name="settings_clock_date_visible">Mostrar la fecha</string>
<string name="settings_clock_localized">Utilice el formato de fecha localizado</string>
<string name="settings_clock_show_seconds">Mostrar segundos</string>
<string name="settings_clock_flip_date_time">Cambiar fecha y hora</string>
<string name="settings_display_rotate_screen">Girar la pantalla</string>
<string name="settings_enabled_gestures_edge_swipe">Acciones de deslizamiento de borde</string>
<string name="settings_enabled_gestures_edge_swipe_summary">Desliza el dedo por el borde de la pantalla</string>
<string name="settings_enabled_gestures_edge_swipe_edge_width">Ancho del borde</string>
<string name="settings_apps_hide_bound_apps">No mostrar aplicaciones que estén vinculadas a un gesto en la lista de aplicaciones</string>
<string name="settings_meta_view_code">Ver el código fuente</string>
<string name="dialog_report_bug_info">¡Gracias por ayudarnos a mejorar μLauncher!\nConsidere agregar la siguiente información a su informe de error:</string>
<string name="dialog_report_bug_button_clipboard">Copiar al portapapeles</string>
<string name="list_app_favorite_add">Añadir a favoritos</string>
<string name="list_app_favorite_remove">Eliminar de favoritos</string>
<string name="list_app_hidden_add">Esconder</string>
<string name="list_app_rename">Renombrar</string>
<string name="list_other_list_favorites">Aplicaciones favoritas</string>
<string name="list_other_list_private_space">Espacio privado</string>
<string name="tutorial_app_list_text">Puede buscar rápidamente entre todas las aplicaciones en la lista de aplicaciones.\n\nDesliza hacia arriba para abrirlo o asigne un gesto diferente.</string>
<string name="tutorial_app_list_text_2">Una vez que sólo coincide una aplicación, se inicia automáticamente.\nEsto se puede desactivar anteponiendo un espacio a la consulta.</string>
<string name="alert_cant_expand_status_bar_panel">Error: No se puede expandir la barra de estado. Esta acción utiliza una funcionalidad que no forma parte de la API de Android publicada. Lamentablemente, no parece funcionar en su dispositivo.</string>
<string name="alert_requires_android_m">Esta funcionalidad requiere Android 6 o posterior.</string>
<string name="alert_requires_android_v">Esta funcionalidad requiere Android 15 o posterior.</string>
<string name="snackbar_app_hidden">Aplicación oculta. Puedes hacerlo visible nuevamente en la configuración.</string>
<string name="list_other_expand_settings_panel">Configuración rápida</string>
<string name="toast_device_admin_not_enabled">μLauncher debe ser administrador del dispositivo para poder bloquear la pantalla.</string>
<string name="device_admin_explanation">Esto es necesario para la acción de la pantalla de bloqueo.</string>
<string name="device_admin_description">Habilitar la acción de bloqueo de pantalla</string>
<string name="alert_lock_screen_failed">Error: Error al bloquear la pantalla. (Si acaba de actualizar la aplicación, intente deshabilitar y volver a habilitar el servicio de accesibilidad en la configuración del teléfono)</string>
<string name="toast_accessibility_service_not_enabled">El servicio de accesibilidad de μLauncher no está habilitado. Por favor, habilítelo en la configuración</string>
<string name="toast_private_space_locked">Espacio privado bloqueado</string>
<string name="toast_private_space_unlocked">Espacio privado desbloqueado</string>
<string name="tooltip_lock_private_space">Bloquear el espacio privado</string>
<string name="tooltip_unlock_private_space">Desbloquear espacio privado</string>
<string name="toast_lock_screen_not_supported">Error: El bloqueo de la pantalla mediante accesibilidad no es compatible con este dispositivo. En su lugar, utilice el administrador del dispositivo.</string>
<string name="accessibility_service_name">μLauncher - pantalla de bloqueo</string>
<string name="dialog_select_color_color_hex">Color</string>
<string name="dialog_choose_color_title">Elige el color</string>
<string name="dialog_consent_accessibility_data_collection">Doy mi consentimiento para que μLauncher no recopile ningún dato.</string>
<string name="dialog_consent_accessibility_title">Activación del servicio de accesibilidad</string>
<string name="dialog_consent_accessibility_ok">Activar el servicio de accesibilidad</string>
<string name="toast_activity_not_found_search_web">No se encontró ninguna aplicación para gestionar la búsqueda.</string>
<string name="toast_activity_not_found_browser">No se puede abrir la URL: no se encontró ningún navegador.</string>
<string name="settings_tab_actions">Acciones</string>
<string name="settings_gesture_tap_up">Toca + Arriba</string>
<string name="settings_gesture_description_double_up">Desliza hacia arriba con dos dedos</string>
<string name="settings_gesture_description_down">Desliza hacia abajo</string>
<string name="settings_gesture_tap_down">Toque + Abajo</string>
<string name="settings_gesture_description_tap_down">Toca y desliza hacia abajo</string>
<string name="settings_gesture_description_double_down">Desliza hacia abajo con dos dedos</string>
<string name="settings_gesture_description_left">Desliza hacia la izquierda</string>
<string name="settings_gesture_description_tap_left">Toca y desliza hacia la izquierda</string>
<string name="settings_gesture_description_double_left">Desliza dos dedos hacia la izquierda</string>
<string name="settings_gesture_description_right">Desliza hacia la derecha</string>
<string name="settings_gesture_tap_right">Toque + Derecha</string>
<string name="settings_gesture_description_double_right">Desliza con dos dedos hacia la derecha</string>
<string name="settings_gesture_description_right_top_edge">Desliza el dedo hacia la derecha en la parte superior de la pantalla</string>
<string name="settings_gesture_left_bottom_edge">Izquierda (Abajo)</string>
<string name="settings_gesture_up_left_edge">Arriba (borde izquierdo)</string>
<string name="settings_gesture_up_right_edge">Arriba (borde derecho)</string>
<string name="settings_gesture_down_right_edge">Abajo (borde derecho)</string>
<string name="settings_gesture_description_swipe_larger">Arriba a la izquierda -&gt; centro a la derecha -&gt; abajo a la izquierda</string>
<string name="settings_gesture_description_swipe_larger_reverse">Abajo a la izquierda -&gt; centro a la derecha -&gt; arriba a la izquierda</string>
<string name="settings_gesture_description_swipe_smaller">Arriba a la derecha -&gt; centro a la izquierda -&gt; abajo a la derecha</string>
<string name="settings_gesture_description_swipe_smaller_reverse">Abajo a la derecha -&gt; centro a la izquierda -&gt; arriba a la derecha</string>
<string name="settings_gesture_swipe_v_reverse">V (Reversa)</string>
<string name="settings_gesture_description_swipe_v_reverse">Arriba a la derecha -&gt; Abajo en el medio -&gt; Arriba a la izquierda</string>
<string name="settings_gesture_swipe_lambda">Λ</string>
<string name="settings_gesture_description_swipe_lambda">Abajo a la izquierda -&gt; arriba en el medio -&gt; abajo a la derecha</string>
<string name="settings_gesture_swipe_lambda_reverse">Λ (Inverso)</string>
<string name="settings_gesture_description_swipe_lambda_reverse">Abajo a la derecha -&gt; arriba en el medio -&gt; abajo a la izquierda</string>
<string name="settings_theme_background_item_dim">Atenuación</string>
<string name="settings_theme_background_item_solid">Sólido</string>
<string name="settings_theme_font_item_system_default">Valor predeterminado del sistema</string>
<string name="settings_theme_background_item_transparent">Transparente</string>
<string name="settings_theme_background_item_blur">Difuminar</string>
<string name="settings_functionality_search_web">Buscar en la web</string>
<string name="settings_list_layout_item_text">texto</string>
<string name="settings_list_layout_item_grid">Red</string>
<string name="list_other_track_play_pause">Música: Reproducir / Pausa</string>
<string name="list_other_lock_screen">Pantalla de bloqueo</string>
<string name="pin_shortcut_title">Agregar acceso directo</string>
<string name="pin_shortcut_button_bind">Vincular al gesto</string>
<string name="pin_shortcut_switch_visible">Mostrar en la lista de aplicaciones</string>
<string name="settings_list_reverse_layout">Invertir la lista de aplicaciones</string>
</resources>

View file

@ -14,7 +14,6 @@
- -
--> -->
<string name="settings_title">Réglages</string> <string name="settings_title">Réglages</string>
<string name="settings_tab_app">Applications</string>
<string name="settings_tab_launcher">Launcher</string> <string name="settings_tab_launcher">Launcher</string>
<string name="settings_tab_meta">Meta</string> <string name="settings_tab_meta">Meta</string>
<!-- <!--
@ -37,7 +36,6 @@
<string name="settings_gesture_date">Date</string> <string name="settings_gesture_date">Date</string>
<string name="settings_gesture_time">Horloge</string> <string name="settings_gesture_time">Horloge</string>
<string name="settings_apps_choose">Choisir une application</string> <string name="settings_apps_choose">Choisir une application</string>
<string name="settings_apps_view_all">Voir toutes les applications</string>
<string name="settings_apps_install">Installer des applications</string> <string name="settings_apps_install">Installer des applications</string>
<string name="settings_apps_toast_store_not_found">Magasin d\'applications introuvable</string> <string name="settings_apps_toast_store_not_found">Magasin d\'applications introuvable</string>
<!-- <!--
@ -52,10 +50,8 @@
<string name="settings_theme_color_theme_item_dark">Sombre</string> <string name="settings_theme_color_theme_item_dark">Sombre</string>
<string name="settings_theme_color_theme_item_light">Clair</string> <string name="settings_theme_color_theme_item_light">Clair</string>
<string name="settings_theme_wallpaper">Choisir un fond d\'écran</string> <string name="settings_theme_wallpaper">Choisir un fond d\'écran</string>
<string name="settings_launcher_change_wallpaper">Changer le fond d\'écran</string>
<string name="settings_launcher_section_display">Écran</string> <string name="settings_launcher_section_display">Écran</string>
<string name="settings_display_screen_timeout_disabled">Garder l\'écran allumé</string> <string name="settings_display_screen_timeout_disabled">Garder l\'écran allumé</string>
<string name="settings_display_full_screen">Utiliser le plein écran</string>
<string name="settings_launcher_section_functionality">Fonctions</string> <string name="settings_launcher_section_functionality">Fonctions</string>
<string name="settings_enabled_gestures_double_swipe">Actions de double balayage</string> <string name="settings_enabled_gestures_double_swipe">Actions de double balayage</string>
<string name="settings_functionality_auto_launch">Lancer apps par recherche</string> <string name="settings_functionality_auto_launch">Lancer apps par recherche</string>
@ -68,7 +64,6 @@
--> -->
<string name="settings_general_choose_home_screen">Choisir μLauncher comme application d\'écran d\'accueil par défaut</string> <string name="settings_general_choose_home_screen">Choisir μLauncher comme application d\'écran d\'accueil par défaut</string>
<string name="settings_meta_cant_select_launcher">Informations sur l\'application</string> <string name="settings_meta_cant_select_launcher">Informations sur l\'application</string>
<string name="settings_meta_cant_select_launcher_msg">Votre appareil ne prend pas en charge cette fonctionnalité. Souhaitez-vous plutôt accéder aux détails de l\'application ?</string>
<string name="settings_meta_show_tutorial">Regarder le tutoriel</string> <string name="settings_meta_show_tutorial">Regarder le tutoriel</string>
<string name="settings_meta_reset">Réinitialiser</string> <string name="settings_meta_reset">Réinitialiser</string>
<string name="settings_meta_reset_confirm">Vous allez réinitialiser tous vos paramètres. Souhaitez-vous poursuivre ?</string> <string name="settings_meta_reset_confirm">Vous allez réinitialiser tous vos paramètres. Souhaitez-vous poursuivre ?</string>
@ -88,8 +83,6 @@
<string name="list_tab_other">Autre</string> <string name="list_tab_other">Autre</string>
<string name="list_app_delete">Désinstaller</string> <string name="list_app_delete">Désinstaller</string>
<string name="list_app_info">Informations</string> <string name="list_app_info">Informations</string>
<string name="list_removed">Application supprimée</string>
<string name="list_not_removed">Impossible de désinstaller l\'application</string>
<string name="list_apps_search_hint">Chercher des applications</string> <string name="list_apps_search_hint">Chercher des applications</string>
<string name="list_other_settings">Réglages d\'µLauncher</string> <string name="list_other_settings">Réglages d\'µLauncher</string>
<string name="list_other_list">Toutes les Applications</string> <string name="list_other_list">Toutes les Applications</string>
@ -175,7 +168,6 @@
<string name="dialog_consent_accessibility_privileges">Je suis conscient que cela accordera des privilèges importants à µLauncher.</string> <string name="dialog_consent_accessibility_privileges">Je suis conscient que cela accordera des privilèges importants à µLauncher.</string>
<string name="dialog_choose_color_title">Choisir une couleur</string> <string name="dialog_choose_color_title">Choisir une couleur</string>
<string name="dialog_consent_accessibility_title">Activation du service d\'accessibilité</string> <string name="dialog_consent_accessibility_title">Activation du service d\'accessibilité</string>
<string name="dialog_select_color_ok">Ok</string>
<string name="dialog_select_color_color_hex">Couleur</string> <string name="dialog_select_color_color_hex">Couleur</string>
<string name="dialog_consent_accessibility_consent">Je consent à µLauncher utilisation du service daccessibilité pour fournir une fonction non liée à laccessibilité.</string> <string name="dialog_consent_accessibility_consent">Je consent à µLauncher utilisation du service daccessibilité pour fournir une fonction non liée à laccessibilité.</string>
<string name="dialog_consent_accessibility_data_collection">Je consent à la non-collecte de données par µLauncher.</string> <string name="dialog_consent_accessibility_data_collection">Je consent à la non-collecte de données par µLauncher.</string>
@ -222,7 +214,6 @@
<string name="settings_theme_background_item_solid">Plein</string> <string name="settings_theme_background_item_solid">Plein</string>
<string name="dialog_rename_title">Renommer %1$s</string> <string name="dialog_rename_title">Renommer %1$s</string>
<string name="screen_lock_method_use_accessibility">Utiliser le service daccessibilité</string> <string name="screen_lock_method_use_accessibility">Utiliser le service daccessibilité</string>
<string name="dialog_rename_ok">Ok</string>
<string name="settings_functionality_search_web">Chercher sur le web</string> <string name="settings_functionality_search_web">Chercher sur le web</string>
<string name="settings_functionality_search_web_summary">Appuyer sur entrée en cherchant une application pour lancer une recherche web.</string> <string name="settings_functionality_search_web_summary">Appuyer sur entrée en cherchant une application pour lancer une recherche web.</string>
<string name="dialog_cancel">Annuler</string> <string name="dialog_cancel">Annuler</string>
@ -231,4 +222,4 @@
<string name="settings_gesture_description_down_left_edge">Balayer vers le bas au bord gauche de l\'écran</string> <string name="settings_gesture_description_down_left_edge">Balayer vers le bas au bord gauche de l\'écran</string>
<string name="settings_enabled_gestures_edge_swipe_summary">Balayer au bord de l\'écran</string> <string name="settings_enabled_gestures_edge_swipe_summary">Balayer au bord de l\'écran</string>
<string name="settings_clock_color">Couleur</string> <string name="settings_clock_color">Couleur</string>
</resources> </resources>

View file

@ -2,7 +2,7 @@
<resources> <resources>
<string name="settings_gesture_description_right_bottom_edge">Scorri verso destra sul bordo inferiore dello schermo</string> <string name="settings_gesture_description_right_bottom_edge">Scorri verso destra sul bordo inferiore dello schermo</string>
<string name="settings_launcher_section_appearance">Aspetto</string> <string name="settings_launcher_section_appearance">Aspetto</string>
<string name="settings_apps_choose">Scegliere l\'applicazione</string> <string name="settings_apps_choose">Scegliere</string>
<string name="settings_theme_color_theme">Tema</string> <string name="settings_theme_color_theme">Tema</string>
<string name="tutorial_concept_text">Questo launcher è progettato per essere minimale, efficiente e privo di distrazioni. Non contiene pagamenti, pubblicità o servizi di tracciamento.</string> <string name="tutorial_concept_text">Questo launcher è progettato per essere minimale, efficiente e privo di distrazioni. Non contiene pagamenti, pubblicità o servizi di tracciamento.</string>
<string name="settings_theme_color_theme_item_default">Predefinito</string> <string name="settings_theme_color_theme_item_default">Predefinito</string>
@ -34,12 +34,10 @@
<br/><br/><br/><br/> <br/><br/><br/><br/>
Puoi cambiare le tue scelte in seguito nelle impostazioni. Puoi cambiare le tue scelte in seguito nelle impostazioni.
]]></string> ]]></string>
<string name="settings_meta_cant_select_launcher_msg">Il tuo dispositivo non supporta questa funzione. Vuoi aprire la pagina di dettaglio dell\'applicazione?</string>
<string name="alert_cant_open_title">Impossibile aprire l\'applicazione</string> <string name="alert_cant_open_title">Impossibile aprire l\'applicazione</string>
<string name="alert_cant_open_message">Desideri modificare le impostazioni?</string> <string name="alert_cant_open_message">Desideri modificare le impostazioni?</string>
<string name="toast_cant_open_message">Apri le impostazioni per abbinare un\'azione a questo gesto</string> <string name="toast_cant_open_message">Apri le impostazioni per abbinare un\'azione a questo gesto</string>
<string name="settings_title">Impostazioni</string> <string name="settings_title">Impostazioni</string>
<string name="settings_tab_app">Applicazioni</string>
<string name="settings_tab_launcher">Launcher</string> <string name="settings_tab_launcher">Launcher</string>
<string name="settings_tab_meta">Meta</string> <string name="settings_tab_meta">Meta</string>
<string name="settings_gesture_description_double_down">Scorri verso il basso con due dita</string> <string name="settings_gesture_description_double_down">Scorri verso il basso con due dita</string>
@ -83,7 +81,6 @@
<string name="settings_gesture_description_vol_up">Premi il pulsante di aumento del volume</string> <string name="settings_gesture_description_vol_up">Premi il pulsante di aumento del volume</string>
<string name="settings_gesture_vol_down">Riduci il volume</string> <string name="settings_gesture_vol_down">Riduci il volume</string>
<string name="settings_gesture_description_vol_down">Premi il pulsante per ridurre il volume</string> <string name="settings_gesture_description_vol_down">Premi il pulsante per ridurre il volume</string>
<string name="settings_apps_view_all">Vedi tutte le applicazioni</string>
<string name="settings_apps_install">Installa le applicazioni</string> <string name="settings_apps_install">Installa le applicazioni</string>
<string name="settings_theme_monochrome_icons">Icone monocromatiche</string> <string name="settings_theme_monochrome_icons">Icone monocromatiche</string>
<string name="settings_clock_time_visible">Mostra l\'ora</string> <string name="settings_clock_time_visible">Mostra l\'ora</string>
@ -112,10 +109,8 @@
<string name="settings_theme_font">Font</string> <string name="settings_theme_font">Font</string>
<string name="settings_clock_flip_date_time">Inverti data e ora</string> <string name="settings_clock_flip_date_time">Inverti data e ora</string>
<string name="settings_theme_wallpaper">Scegli uno sfondo</string> <string name="settings_theme_wallpaper">Scegli uno sfondo</string>
<string name="settings_launcher_change_wallpaper">Cambia immagine di sfondo</string>
<string name="settings_launcher_section_display">Schermo</string> <string name="settings_launcher_section_display">Schermo</string>
<string name="settings_display_screen_timeout_disabled">Mantieni lo schermo acceso</string> <string name="settings_display_screen_timeout_disabled">Mantieni lo schermo acceso</string>
<string name="settings_display_full_screen">Schermo intero</string>
<string name="settings_display_rotate_screen">Ruota lo schermo</string> <string name="settings_display_rotate_screen">Ruota lo schermo</string>
<string name="settings_launcher_section_functionality">Funzionalità</string> <string name="settings_launcher_section_functionality">Funzionalità</string>
<string name="settings_functionality_auto_keyboard">Apri automaticamente la tastiera per cercare</string> <string name="settings_functionality_auto_keyboard">Apri automaticamente la tastiera per cercare</string>
@ -181,7 +176,6 @@
<string name="list_app_hidden_add">Nascondi</string> <string name="list_app_hidden_add">Nascondi</string>
<string name="list_app_hidden_remove">Mostra</string> <string name="list_app_hidden_remove">Mostra</string>
<string name="list_app_rename">Rinomina</string> <string name="list_app_rename">Rinomina</string>
<string name="list_removed">Le applicazioni selezionate sono state rimosse</string>
<string name="list_apps_search_hint">Cerca</string> <string name="list_apps_search_hint">Cerca</string>
<string name="list_other_settings">Impostazioni μLauncher</string> <string name="list_other_settings">Impostazioni μLauncher</string>
<string name="list_other_expand_notifications_panel">Espandi il pannello notifiche</string> <string name="list_other_expand_notifications_panel">Espandi il pannello notifiche</string>
@ -195,9 +189,7 @@
<string name="tutorial_usage_title">Utilizzo</string> <string name="tutorial_usage_title">Utilizzo</string>
<string name="tutorial_usage_text">La schermata principale contiene solo data e ora. Nessuna distrazione.</string> <string name="tutorial_usage_text">La schermata principale contiene solo data e ora. Nessuna distrazione.</string>
<string name="alert_requires_android_m">Questa funzione richiede Android 6 o successivi.</string> <string name="alert_requires_android_m">Questa funzione richiede Android 6 o successivi.</string>
<string name="dialog_rename_ok">Ok</string>
<string name="dialog_rename_title">Rinomina %1$s</string> <string name="dialog_rename_title">Rinomina %1$s</string>
<string name="list_not_removed">Impossibile rimuovere l\'applicazione</string>
<string name="settings_theme_color_theme_item_dynamic">Dinamico</string> <string name="settings_theme_color_theme_item_dynamic">Dinamico</string>
<string name="settings_clock_color">Colore</string> <string name="settings_clock_color">Colore</string>
<string name="settings_gesture_double_up">Due dita verso l\'alto</string> <string name="settings_gesture_double_up">Due dita verso l\'alto</string>
@ -211,7 +203,6 @@
<string name="dialog_select_color_alpha">Trasparente</string> <string name="dialog_select_color_alpha">Trasparente</string>
<string name="dialog_select_color_blue">Blu</string> <string name="dialog_select_color_blue">Blu</string>
<string name="dialog_select_color_green">Verde</string> <string name="dialog_select_color_green">Verde</string>
<string name="dialog_select_color_ok">Ok</string>
<string name="dialog_select_color_color_hex">Colore</string> <string name="dialog_select_color_color_hex">Colore</string>
<string name="dialog_choose_color_title">Scegli colore</string> <string name="dialog_choose_color_title">Scegli colore</string>
<string name="dialog_consent_accessibility_ok">Attiva Servizi di Accessibilità</string> <string name="dialog_consent_accessibility_ok">Attiva Servizi di Accessibilità</string>
@ -237,4 +228,4 @@
<string name="toast_activity_not_found_browser">Impossibile aprire l\'URL: nessun browser trovato.</string> <string name="toast_activity_not_found_browser">Impossibile aprire l\'URL: nessun browser trovato.</string>
<string name="toast_activity_not_found_search_web">Non è stata trovata un\'applicazione per gestire la ricerca.</string> <string name="toast_activity_not_found_search_web">Non è stata trovata un\'applicazione per gestire la ricerca.</string>
<string name="dialog_consent_accessibility_text"><![CDATA[Stai per arrivare il servizio di accessibilità. Questo garantirà <strong>privilegi più ampi</strong> a µLauncher.<br/>µLauncher utilizzerà questi privilegi <strong>solo per bloccare lo schermo</strong>. µLauncher <strong>non raccoglierà mai alcun dato</strong>. In particolare, µLauncher non usa il servizio di accessibilità per raccogliere nessun dato.]]></string> <string name="dialog_consent_accessibility_text"><![CDATA[Stai per arrivare il servizio di accessibilità. Questo garantirà <strong>privilegi più ampi</strong> a µLauncher.<br/>µLauncher utilizzerà questi privilegi <strong>solo per bloccare lo schermo</strong>. µLauncher <strong>non raccoglierà mai alcun dato</strong>. In particolare, µLauncher non usa il servizio di accessibilità per raccogliere nessun dato.]]></string>
</resources> </resources>

View file

@ -1,2 +1,195 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources></resources> <resources>
<string name="alert_cant_open_title">アプリを開けません</string>
<string name="alert_cant_open_message">設定を変更しますか?</string>
<string name="settings_title">設定</string>
<string name="settings_tab_launcher">ランチャー</string>
<string name="settings_tab_meta">その他</string>
<string name="toast_cant_open_message">このジェスチャのアクションを選択するには設定を開きます</string>
<string name="settings_gesture_description_up">上にスワイプ</string>
<string name="settings_gesture_description_tap_up">タップしてから上にスワイプ</string>
<string name="settings_gesture_double_up">Double Up</string>
<string name="settings_gesture_tap_up">Tap + Up</string>
<string name="settings_gesture_up">Up</string>
<string name="settings_gesture_back">Back</string>
<string name="settings_gesture_description_double_up">2本指で上にスワイプ</string>
<string name="settings_gesture_down">Down</string>
<string name="settings_gesture_description_down">下にスワイプ</string>
<string name="settings_gesture_tap_down">Tap + Down</string>
<string name="settings_gesture_description_tap_down">タップしてから下にスワイプ</string>
<string name="settings_gesture_double_down">Double Down</string>
<string name="settings_gesture_description_double_down">2本指で下にスワイプ</string>
<string name="settings_gesture_left">Left</string>
<string name="settings_gesture_description_left">左にスワイプ</string>
<string name="settings_gesture_tap_left">Tap + Left</string>
<string name="settings_gesture_description_tap_left">タップしてから左にスワイプ</string>
<string name="settings_gesture_double_left">Double Left</string>
<string name="settings_gesture_description_double_left">2本指で左にスワイプ</string>
<string name="settings_gesture_right">Right</string>
<string name="settings_gesture_description_right">右にスワイプ</string>
<string name="settings_gesture_description_tap_right">タップしてから右にスワイプ</string>
<string name="settings_gesture_double_right">Double Right</string>
<string name="settings_gesture_right_top_edge">Right (Top)</string>
<string name="settings_gesture_description_right_top_edge">画面の上部で右にスワイプ</string>
<string name="settings_gesture_right_bottom_edge">Right (Bottom)</string>
<string name="settings_gesture_description_right_bottom_edge">画面の下部で右にスワイプ</string>
<string name="settings_gesture_left_bottom_edge">Left (Bottom)</string>
<string name="settings_gesture_description_left_bottom_edge">画面の下部で左にスワイプ</string>
<string name="settings_gesture_left_top_edge">Left (Top)</string>
<string name="settings_gesture_description_left_top_edge">画面の上部で左にスワイプ</string>
<string name="settings_gesture_up_left_edge">Up (Left Edge)</string>
<string name="settings_gesture_up_right_edge">Up (Right Edge)</string>
<string name="settings_gesture_description_up_right_edge">画面の右端で上にスワイプ</string>
<string name="settings_gesture_down_left_edge">Down (Left Edge)</string>
<string name="settings_gesture_description_down_left_edge">画面の左端で下にスワイプ</string>
<string name="settings_gesture_down_right_edge">Down (Right Edge)</string>
<string name="settings_gesture_swipe_larger"><![CDATA[>]]></string>
<string name="settings_gesture_description_swipe_larger">左上 -&gt; 右中 -&gt; 左下</string>
<string name="settings_gesture_swipe_larger_reverse"><![CDATA[> (Reverse)]]></string>
<string name="settings_gesture_description_swipe_larger_reverse">左下 -&gt; 右中 -&gt; 左上</string>
<string name="settings_gesture_swipe_smaller"><![CDATA[<]]></string>
<string name="settings_gesture_description_swipe_smaller">右上 -&gt; 左中 -&gt; 右下</string>
<string name="settings_gesture_swipe_smaller_reverse"><![CDATA[< (Reverse)]]></string>
<string name="settings_gesture_swipe_v">V</string>
<string name="settings_gesture_description_swipe_v">左上 -&gt; 中下 -&gt; 右上</string>
<string name="settings_gesture_swipe_v_reverse">V (Reverse)</string>
<string name="settings_gesture_description_swipe_v_reverse">右上 -&gt; 中下 -&gt; 左上</string>
<string name="settings_gesture_swipe_lambda">Λ</string>
<string name="settings_gesture_description_swipe_lambda">左下 -&gt; 中上 -&gt; 右下</string>
<string name="settings_gesture_swipe_lambda_reverse">Λ (Reverse)</string>
<string name="settings_gesture_description_swipe_lambda_reverse">右下 -&gt; 中上 -&gt; 左下</string>
<string name="settings_gesture_vol_down">Volume Down</string>
<string name="settings_gesture_description_vol_down">音量ダウンボタンを押す</string>
<string name="settings_gesture_double_click">Double Click</string>
<string name="settings_gesture_description_double_click">空白部分をダブルタップ</string>
<string name="settings_gesture_long_click">Long Click</string>
<string name="settings_gesture_date">Date</string>
<string name="settings_gesture_description_date">日付をタップ</string>
<string name="settings_gesture_time">Time</string>
<string name="settings_gesture_description_time">時刻をタップ</string>
<string name="settings_apps_choose">アプリを選択</string>
<string name="settings_launcher_section_appearance">外観</string>
<string name="settings_theme_color_theme">カラーテーマ</string>
<string name="settings_theme_color_theme_item_default">デフォルト</string>
<string name="settings_theme_color_theme_item_dark">ダーク</string>
<string name="settings_theme_color_theme_item_dynamic">ダイナミック</string>
<string name="settings_theme_text_shadow">文字の影</string>
<string name="settings_theme_background_item_transparent">透明</string>
<string name="settings_theme_background_item_blur">ブラー</string>
<string name="settings_theme_background_item_solid">ソリッド</string>
<string name="settings_theme_font">フォント</string>
<string name="settings_theme_font_item_system_default">システムデフォルト</string>
<string name="settings_theme_monochrome_icons">モノクロのアプリアイコン</string>
<string name="settings_launcher_section_date_time"><![CDATA[Date & time]]></string>
<string name="settings_clock_color"></string>
<string name="settings_clock_time_visible">時刻を表示</string>
<string name="settings_clock_date_visible">日付を表示</string>
<string name="settings_clock_localized">ローカライズされた日付形式を使用する</string>
<string name="settings_clock_show_seconds">秒を表示</string>
<string name="settings_clock_flip_date_time">日付と時刻を反転</string>
<string name="settings_theme_wallpaper">壁紙を選択</string>
<string name="settings_launcher_section_display">表示</string>
<string name="settings_display_screen_timeout_disabled">画面オンを維持</string>
<string name="settings_display_rotate_screen">画面の回転</string>
<string name="settings_enabled_gestures_double_swipe_summary">2本指でスワイプ</string>
<string name="settings_enabled_gestures_edge_swipe">Edgeスワイプアクション</string>
<string name="settings_enabled_gestures_edge_swipe_summary">画面端でスワイプ</string>
<string name="settings_functionality_search_web_summary">アプリリストで検索中にリターンキーを押すとWeb検索が起動します。</string>
<string name="settings_functionality_search_web">Webで検索</string>
<string name="settings_functionality_auto_keyboard">検索時にキーボードを表示</string>
<string name="settings_launcher_section_apps">アプリ</string>
<string name="settings_apps_hide_bound_apps">ジェスチャーに設定されたアプリをアプリ一覧に表示しない</string>
<string name="settings_apps_hide_paused_apps">一時停止されたアプリを隠す</string>
<string name="settings_list_layout">アプリ一覧のレイアウト</string>
<string name="settings_list_reverse_layout">アプリ一覧を反転</string>
<string name="settings_list_layout_item_default">デフォルト</string>
<string name="settings_list_layout_item_text">テキスト</string>
<string name="settings_list_layout_item_grid">グリッド</string>
<string name="settings_meta_show_tutorial">ランチャーのチュートリアルを見る</string>
<string name="settings_meta_reset">設定をリセット</string>
<string name="settings_meta_reset_confirm">すべての設定を破棄します。続行しますか?</string>
<string name="settings_meta_view_code">ソースコードを見る</string>
<string name="dialog_report_bug_title">バグを報告</string>
<string name="dialog_report_bug_button_clipboard">クリップボードにコピー</string>
<string name="dialog_report_bug_security_info">セキュリティ上の脆弱性をGitHubに公開しないでください。代わりに以下を使用してください。</string>
<string name="dialog_report_bug_button_security">セキュリティ上の脆弱性を報告</string>
<string name="dialog_report_bug_create_report">レポートを作成</string>
<string name="settings_meta_join_chat">µLauncherのチャットに入る</string>
<string name="settings_meta_privacy">プライバシーポリシー</string>
<string name="settings_meta_discord">Discordに参加してください</string>
<string name="list_title_hidden">非表示のアプリ</string>
<string name="list_title_private_space">プライベートスペース</string>
<string name="list_title_pick">アプリを選択</string>
<string name="list_tab_app">アプリ</string>
<string name="list_tab_other">その他</string>
<string name="list_app_delete">アンインストール</string>
<string name="list_app_info">アプリ情報</string>
<string name="list_app_favorite_remove">お気に入りから削除</string>
<string name="list_app_hidden_add">隠す</string>
<string name="list_app_rename">名称を変更</string>
<string name="list_apps_search_hint">検索</string>
<string name="list_apps_search_hint_no_auto_launch">検索(自動起動なし)</string>
<string name="list_other_settings">µLauncherの設定</string>
<string name="list_other_list">すべてのアプリ</string>
<string name="list_other_toggle_private_space_lock">プライベートスペースのロックを切り替え</string>
<string name="list_other_volume_up">音楽: うるさい</string>
<string name="list_other_volume_down">音楽: ひっそり</string>
<string name="list_other_track_next">音楽: 次</string>
<string name="list_other_track_previous">音楽: 前</string>
<string name="list_other_expand_notifications_panel">通知パネルを表示</string>
<string name="list_other_nop">なにもしねぇ</string>
<string name="list_other_lock_screen">画面をロック</string>
<string name="list_other_torch">ライトを切り替え</string>
<string name="pin_shortcut_title">ショートカットを追加</string>
<string name="pin_shortcut_button_bind">ジェシュチャーに設定</string>
<string name="pin_shortcut_switch_visible">アプリ一覧に表示</string>
<string name="tutorial_title">チュートリアル</string>
<string name="tutorial_concept_title">コンセプト</string>
<string name="tutorial_usage_title">使い方</string>
<string name="tutorial_usage_text">ホーム画面には現地の日付と時刻が表示されます。邪魔されることはありません。</string>
<string name="tutorial_usage_text_2">1回のスワイプまたはボタンのタップでアプリを起動できます。次のスライドでいくつか選択してください。</string>
<string name="tutorial_setup_title">セットアップ</string>
<string name="tutorial_setup_text_2">選択内容は後で変更することもできます。</string>
<string name="tutorial_finish_title">さあ行きましょう!</string>
<string name="tutorial_finish_button">始める</string>
<string name="settings">設定</string>
<string name="settings_gesture_description_back">戻るボタン / 戻るジェスチャ</string>
<string name="settings_theme_color_theme_item_light">ライト</string>
<string name="settings_enabled_gestures_double_swipe">Doubleスワイプアクション</string>
<string name="settings_functionality_auto_launch">検索結果を起動</string>
<string name="list_title_favorite">お気に入りのアプリ</string>
<string name="settings_gesture_description_vol_up">音量アップボタンを押す</string>
<string name="settings_gesture_description_long_click">空白部分をロングタップ</string>
<string name="settings_launcher_section_functionality">機能性</string>
<string name="dialog_report_bug_info">µLauncherの改善にご協力いただきありがとうございます。\nバグレポートに次の情報を追加することを検討してください。</string>
<string name="list_app_favorite_add">お気に入りに追加</string>
<string name="settings_gesture_description_up_left_edge">画面の左端で上にスワイプ</string>
<string name="settings_gesture_description_down_right_edge">画面の右端で下にスワイプ</string>
<string name="settings_apps_install">アプリをインストール</string>
<string name="tutorial_finish_text">始める準備はできました!これがあなたにとって大きな価値となることを願っています! \t- FinnLauncherの作成者とJosiaいくつかの改良を行い、フォーク μLauncher を保守)</string>
<string name="settings_gesture_tap_right">Tap + Right</string>
<string name="settings_gesture_description_double_right">2本指で右にスワイプ</string>
<string name="settings_apps_hidden">非表示のアプリ</string>
<string name="settings_general_choose_home_screen">μLauncherホーム画面に設定</string>
<string name="settings_meta_fork_contact">フォークの開発者に問い合わせ</string>
<string name="settings_meta_contact">オリジナルの開発者に問い合わせる</string>
<string name="list_other_list_favorites">お気に入りのアプリ</string>
<string name="list_other_track_play_pause">音楽: 再生 / 一時停止</string>
<string name="settings_theme_background_item_dim">薄暗い</string>
<string name="settings_launcher_sensitivity">感度</string>
<string name="settings_meta_cant_select_launcher">アプリ情報</string>
<string name="settings_gesture_vol_up">Volume Up</string>
<string name="list_title_view">すべてのアプリ</string>
<string name="list_app_hidden_remove">表示</string>
<string name="settings_gesture_description_swipe_smaller_reverse">右下 -&gt; 左中 -&gt; 右上</string>
<string name="settings_theme_background">背景(アプリ一覧と設定)</string>
<string name="settings_enabled_gestures_edge_swipe_edge_width">端の幅</string>
<string name="settings_functionality_auto_launch_summary">この機能を一時的に無効にするにはスペースキーを押します。</string>
<string name="list_other_list_private_space">プライベートスペース</string>
<string name="settings_apps_hide_private_space_apps">アプリ一覧からプライベートスペースを隠す</string>
<string name="settings_meta_report_bug">バグを報告</string>
<string name="tutorial_start_text">このランチャーの使い方を学ぶのにほんの数秒しかかかりません</string>
<string name="tutorial_concept_text">Launcherは、最小限かつ効率的で、邪魔にならないように設計されています。支払い、広告、追跡サービスは一切ありません。</string>
<string name="tutorial_concept_text_2">このアプリはオープンソースMIT ライセンスであり、GitHub で入手できます!リポジトリを必ずチェックしてください!</string>
<string name="tutorial_setup_text">デフォルトのアプリをいくつか選択しました。必要に応じて今すぐ変更できます。</string>
</resources>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="alert_cant_open_message">Norite pakeisti nustatymus?</string>
<string name="settings_title">Nustatymai</string>
<string name="settings_tab_actions">Veiksmai</string>
<string name="settings_tab_launcher">Paleidimo programėlė</string>
<string name="settings_tab_meta">Apie</string>
<string name="settings_gesture_back">Atgal</string>
<string name="settings_gesture_description_back">Grįžimo mygtukas / grįžimo gestas</string>
<string name="settings_gesture_description_up">Perbraukimas aukštyn</string>
<string name="settings_gesture_tap_up">Bakstelėkite + aukštyn</string>
<string name="alert_cant_open_title">Nepavyksta paleisti programėlės</string>
<string name="toast_cant_open_message">Atidarykite nustatymus norėdami pasirinkti šio gesto veiksmą</string>
<string name="settings_gesture_up">Aukštyn</string>
<string name="settings_gesture_description_tap_up">Bakstelėjimas ir perbraukimas aukštyn</string>
</resources>

View file

@ -14,7 +14,6 @@
- -
--> -->
<string name="settings_title">Configurações</string> <string name="settings_title">Configurações</string>
<string name="settings_tab_app">Apps</string>
<string name="settings_tab_launcher">Launcher</string> <string name="settings_tab_launcher">Launcher</string>
<string name="settings_tab_meta">Meta</string> <string name="settings_tab_meta">Meta</string>
<!-- <!--
@ -38,14 +37,13 @@
<string name="settings_gesture_up_right_edge">Para cima (borda direita)</string> <string name="settings_gesture_up_right_edge">Para cima (borda direita)</string>
<string name="settings_gesture_down_left_edge">Para baixo (borda esquerda)</string> <string name="settings_gesture_down_left_edge">Para baixo (borda esquerda)</string>
<string name="settings_gesture_down_right_edge">Para baixo (borda direita)</string> <string name="settings_gesture_down_right_edge">Para baixo (borda direita)</string>
<string name="settings_gesture_vol_up">Aumento de volume</string> <string name="settings_gesture_vol_up">Botão de aumentar volume</string>
<string name="settings_gesture_vol_down">Diminuição de volume</string> <string name="settings_gesture_vol_down">Botão de diminuir volume</string>
<string name="settings_gesture_double_click">Toque duplo</string> <string name="settings_gesture_double_click">Toque duplo</string>
<string name="settings_gesture_long_click">Toque longo</string> <string name="settings_gesture_long_click">Toque longo</string>
<string name="settings_gesture_date">Data</string> <string name="settings_gesture_date">Data</string>
<string name="settings_gesture_time">Hora</string> <string name="settings_gesture_time">Hora</string>
<string name="settings_apps_choose">Selecione um app</string> <string name="settings_apps_choose">Selecione um app</string>
<string name="settings_apps_view_all">Ver todos os apps</string>
<string name="settings_apps_install">Instalar aplicativos</string> <string name="settings_apps_install">Instalar aplicativos</string>
<string name="settings_apps_toast_store_not_found">Loja não encontrada</string> <string name="settings_apps_toast_store_not_found">Loja não encontrada</string>
<!-- <!--
@ -63,10 +61,8 @@
<string name="settings_clock_localized">Use formato de data localizado</string> <string name="settings_clock_localized">Use formato de data localizado</string>
<string name="settings_clock_flip_date_time">Inverter data e hora</string> <string name="settings_clock_flip_date_time">Inverter data e hora</string>
<string name="settings_theme_wallpaper">Escolha papel de parede</string> <string name="settings_theme_wallpaper">Escolha papel de parede</string>
<string name="settings_launcher_change_wallpaper">Alterar papel de parede</string>
<string name="settings_launcher_section_display">Exibição</string> <string name="settings_launcher_section_display">Exibição</string>
<string name="settings_display_screen_timeout_disabled">Manter a tela ligada</string> <string name="settings_display_screen_timeout_disabled">Manter a tela ligada</string>
<string name="settings_display_full_screen">Usar tela cheia</string>
<string name="settings_launcher_section_functionality">Funcionalidades</string> <string name="settings_launcher_section_functionality">Funcionalidades</string>
<string name="settings_enabled_gestures_double_swipe">Gestos com 2 dedos</string> <string name="settings_enabled_gestures_double_swipe">Gestos com 2 dedos</string>
<string name="settings_enabled_gestures_edge_swipe">Ações de deslize nas bordas</string> <string name="settings_enabled_gestures_edge_swipe">Ações de deslize nas bordas</string>
@ -80,8 +76,7 @@
--> -->
<string name="settings_general_choose_home_screen">Definir o μLauncher como tela inicial</string> <string name="settings_general_choose_home_screen">Definir o μLauncher como tela inicial</string>
<string name="settings_meta_cant_select_launcher">Informações do aplicativo</string> <string name="settings_meta_cant_select_launcher">Informações do aplicativo</string>
<string name="settings_meta_cant_select_launcher_msg">Seu dispositivo não é compatível com esse recurso. Gerenciar detalhes do app em vez disso?</string> <string name="settings_meta_show_tutorial">Ver tutorial do µLauncher</string>
<string name="settings_meta_show_tutorial">Ver tutorial do launcher</string>
<string name="settings_meta_reset">Redefinir configuraçãos</string> <string name="settings_meta_reset">Redefinir configuraçãos</string>
<string name="settings_meta_reset_confirm">Você vai descartar todas as suas preferências. Continuar?</string> <string name="settings_meta_reset_confirm">Você vai descartar todas as suas preferências. Continuar?</string>
<string name="settings_meta_report_bug">Reportar um bug</string> <string name="settings_meta_report_bug">Reportar um bug</string>
@ -100,13 +95,11 @@
<string name="list_tab_other">Outros</string> <string name="list_tab_other">Outros</string>
<string name="list_app_delete">Desinstalar</string> <string name="list_app_delete">Desinstalar</string>
<string name="list_app_info">Informações do aplicativo</string> <string name="list_app_info">Informações do aplicativo</string>
<string name="list_removed">O app selecionado foi removido</string>
<string name="list_not_removed">Não foi possível remover o app</string>
<string name="list_apps_search_hint">Busque</string> <string name="list_apps_search_hint">Busque</string>
<string name="list_other_settings">Configurações do µLauncher</string> <string name="list_other_settings">Configurações do μLauncher</string>
<string name="list_other_list">Todos os apps</string> <string name="list_other_list">Todos os apps</string>
<string name="list_other_volume_up">Música: Mais alto</string> <string name="list_other_volume_up">Aumentar volume</string>
<string name="list_other_volume_down">Música: Mais silencioso</string> <string name="list_other_volume_down">Diminuir volume</string>
<string name="list_other_track_next">Música: Próximo</string> <string name="list_other_track_next">Música: Próximo</string>
<string name="list_other_track_previous">Música: Anterior</string> <string name="list_other_track_previous">Música: Anterior</string>
<string name="list_other_nop">Não faça nada</string> <string name="list_other_nop">Não faça nada</string>
@ -116,18 +109,18 @@
- -
--> -->
<string name="tutorial_title">Tutorial</string> <string name="tutorial_title">Tutorial</string>
<string name="tutorial_start_text">Tire alguns segundos para aprender a usar este Launcher!</string> <string name="tutorial_start_text">👋\n\nTire alguns segundos para aprender a usar este Launcher!</string>
<string name="tutorial_concept_title">Conceito</string> <string name="tutorial_concept_title">Conceito</string>
<string name="tutorial_concept_text">O Launcher foi criado para ser minimalista, eficiente e livre de distrações. Ele é livre de pagamentos, anúncios e serviços de rastreamento.</string> <string name="tutorial_concept_text">O μLauncher foi criado para ser minimalista, eficiente e livre de distrações. \n\n\nNão contém anúncios e não coleta dados.</string>
<string name="tutorial_concept_text_2">O app é de código aberto (licença MIT) e está disponível no GitHub! Não deixe de conferir o repositório!</string> <string name="tutorial_concept_text_2">É um software livre (sob licença MIT)!\nNão deixe de conferir o repositório!</string>
<string name="tutorial_usage_title">Uso</string> <string name="tutorial_usage_title">Uso</string>
<string name="tutorial_usage_text">Sua tela inicial contém a data e hora local. Sem distrações.</string> <string name="tutorial_usage_text">Sua tela inicial contém a data e hora local. Sem distrações.</string>
<string name="tutorial_usage_text_2">Você pode iniciar seus aplicativos com um gesto único ou apertando um botão. Escolha algumas ações no próximo slide.</string> <string name="tutorial_usage_text_2">Você pode iniciar seus aplicativos com gestos de toque ou apertando um botão.</string>
<string name="tutorial_setup_title">Configurar</string> <string name="tutorial_setup_title">Configurar</string>
<string name="tutorial_setup_text">Selecionamos alguns aplicativos padrão para você. Se quiser, você pode alterá-los agora:</string> <string name="tutorial_setup_text">Selecionamos alguns aplicativos padrão para você. Se quiser, você pode alterá-los agora:</string>
<string name="tutorial_setup_text_2">Você pode alterar suas escolhas mais tarde.</string> <string name="tutorial_setup_text_2">Você pode alterar suas escolhas mais tarde.</string>
<string name="tutorial_finish_title">Vamos lá!</string> <string name="tutorial_finish_title">Vamos lá!</string>
<string name="tutorial_finish_text">Tá todo pronto para começar! Espero que isso seja de grande valor para você! - Finn (que criou o Launcher) \te Josia (que fez algumas melhorias e tb mantém o fork do μLauncher)</string> <string name="tutorial_finish_text">Tá todo pronto para começar!\n\nEspero que isso seja de grande valor para você!\n\n- Finn (que criou o Launcher) e Josia (que fez algumas melhorias e tb mantém o fork do μLauncher)</string>
<string name="tutorial_finish_button">Começar</string> <string name="tutorial_finish_button">Começar</string>
<string name="settings">Configurações</string> <string name="settings">Configurações</string>
<string name="ic_menu_alt">Mais opções</string> <string name="ic_menu_alt">Mais opções</string>
@ -154,11 +147,11 @@
<string name="alert_lock_screen_failed">Erro: Falha ao bloquear a tela. (Se você acabou de atualizar o app, tente desativar e reativar o Serviço de acessibilidade em configurações do aparelho)</string> <string name="alert_lock_screen_failed">Erro: Falha ao bloquear a tela. (Se você acabou de atualizar o app, tente desativar e reativar o Serviço de acessibilidade em configurações do aparelho)</string>
<string name="toast_accessibility_service_not_enabled">O Serviço de acessibilidade do μLauncher não está ativado. Entre em configurações para ativar</string> <string name="toast_accessibility_service_not_enabled">O Serviço de acessibilidade do μLauncher não está ativado. Entre em configurações para ativar</string>
<string name="settings_apps_hide_bound_apps">Não mostrar apps com um gesto atribuído na lista de aplicativos</string> <string name="settings_apps_hide_bound_apps">Não mostrar apps com um gesto atribuído na lista de aplicativos</string>
<string name="toast_device_admin_not_enabled">O µLauncher precisa tornar-se o Administrador do dispositivo para poder bloquear a tela.</string> <string name="toast_device_admin_not_enabled">O μLauncher precisa virar um Administrador do dispositivo para poder bloquear a tela.</string>
<string name="device_admin_explanation">Isto é necessário para realizar a ação de bloqueio da tela.</string> <string name="device_admin_explanation">Isto é necessário para realizar a ação de bloqueio da tela.</string>
<string name="device_admin_description">Permitir a ação de bloqueio da tela</string> <string name="device_admin_description">Permitir a ação de bloqueio da tela</string>
<string name="alert_torch_access_exception">Erro: Não é possível acessar a lanterna.</string> <string name="alert_torch_access_exception">Erro: Não é possível acessar a lanterna.</string>
<string name="accessibility_service_name">µLauncher - bloqueio da tela</string> <string name="accessibility_service_name">μLauncher</string>
<string name="screen_lock_method_use_accessibility">Usar o Serviço de acessibilidade</string> <string name="screen_lock_method_use_accessibility">Usar o Serviço de acessibilidade</string>
<string name="screen_lock_method_use_device_admin">Usar o Administrador do dispositivo</string> <string name="screen_lock_method_use_device_admin">Usar o Administrador do dispositivo</string>
<string name="screen_lock_method_dialog_title">Escolha um método de bloqueio</string> <string name="screen_lock_method_dialog_title">Escolha um método de bloqueio</string>
@ -167,7 +160,7 @@
<string name="alert_requires_android_m">Essa funcionalidade requer o Android 6 ou mais recente.</string> <string name="alert_requires_android_m">Essa funcionalidade requer o Android 6 ou mais recente.</string>
<string name="alert_no_torch_found">Nenhuma câmera com lanterna detectada.</string> <string name="alert_no_torch_found">Nenhuma câmera com lanterna detectada.</string>
<string name="toast_lock_screen_not_supported">Erro: O bloqueio da tela via Serviço de acessibilidade não é compatível com este aparelho. Tente usar Administrador do dispositivo como método alternativo.</string> <string name="toast_lock_screen_not_supported">Erro: O bloqueio da tela via Serviço de acessibilidade não é compatível com este aparelho. Tente usar Administrador do dispositivo como método alternativo.</string>
<string name="accessibility_service_description">Definindo µLauncher como Serviço de acessibilidade permite a ele bloquear a tela. Considere que é necessário conceder as permissões elevadas. Você nunca deveria autorizar essas permissões a qualquer aplicativo sem avaliação. O µLauncher usará o Serviço de acessibilidade somente para bloquear a tela. Você pode verificar o código-fonte para ter certeza. O bloqueio da tela também pode ser realizado dando ao µLauncher permissões de Administrador do dispositivo. Apesar de que esse método não funciona com impressão digital e desbloqueio facial.</string> <string name="accessibility_service_description">Definindo o μLauncher como Serviço de acessibilidade permite bloquear a tela e abrir o menu de apps recentes. Considere que é necessário conceder as permissões elevadas. Você nunca deveria autorizar essas permissões a qualquer aplicativo sem avaliação. O μLauncher usará o Serviço de acessibilidade somente para executar as seguintes ações quando solicitado pelo usuário: * bloquear a tela * abrir aplicativos recentes μLauncher nunca usará o Serviço de acessibilidade para coletar os dados. Você pode verificar o código-fonte para ter certeza. O bloqueio da tela também pode ser realizado dando ao μLauncher permissões de Administrador do dispositivo. Apesar de que esse método não funciona com impressão digital e desbloqueio facial.</string>
<string name="screen_lock_method_dialog_text"><![CDATA[ <string name="screen_lock_method_dialog_text"><![CDATA[
<h1>Escolha um método de bloqueio</h1> <h1>Escolha um método de bloqueio</h1>
Há dois métodos para bloquear a tela. Há dois métodos para bloquear a tela.
@ -181,9 +174,9 @@
<h3>Serviço de acessibilidade</h3> <h3>Serviço de acessibilidade</h3>
Exige permissões elevadas. Exige permissões elevadas.
O µLauncher usará essas permissões apenas para bloquear a tela. O μLauncher usará essas permissões apenas para bloquear a tela.
<br/> <br/>
(Você realmente não deveria confiar num app aleatório que você baixou que tá pedindo estas permissões, mas pode verificar o <a href=\"https://github.com/jrpie/Launcher\">código-fonte</a>.) (Você realmente não deveria confiar num app aleatório que você baixou e tá pedindo estas permissões, mas pode verificar o <a href=\"https://github.com/jrpie/Launcher\">código-fonte</a>.)
<br/> <br/>
Em alguns aparelhos após ativação do Serviço de acessibilidade não será mais exigido o PIN para acessar dados criptografados, na inicialização do celular. Em alguns aparelhos após ativação do Serviço de acessibilidade não será mais exigido o PIN para acessar dados criptografados, na inicialização do celular.
Isto pode ser <a href="https://issuetracker.google.com/issues/37010136#comment36">reativado</a> depois. Isto pode ser <a href="https://issuetracker.google.com/issues/37010136#comment36">reativado</a> depois.
@ -217,7 +210,7 @@
<string name="settings_enabled_gestures_edge_swipe_summary">Deslize na borda da tela</string> <string name="settings_enabled_gestures_edge_swipe_summary">Deslize na borda da tela</string>
<string name="settings_enabled_gestures_edge_swipe_edge_width">Largura da borda</string> <string name="settings_enabled_gestures_edge_swipe_edge_width">Largura da borda</string>
<string name="settings_meta_view_code">Ver código-fonte</string> <string name="settings_meta_view_code">Ver código-fonte</string>
<string name="settings_meta_join_chat">Entre no chat do µLauncher</string> <string name="settings_meta_join_chat">Entre no chat do μLauncher</string>
<string name="list_other_lock_screen">Bloquear a tela</string> <string name="list_other_lock_screen">Bloquear a tela</string>
<string name="settings_theme_text_shadow">Sombra no texto</string> <string name="settings_theme_text_shadow">Sombra no texto</string>
<string name="settings_theme_background_item_transparent">Transparente</string> <string name="settings_theme_background_item_transparent">Transparente</string>
@ -232,7 +225,6 @@
<string name="settings_list_layout_item_text">Texto</string> <string name="settings_list_layout_item_text">Texto</string>
<string name="settings_list_layout_item_grid">Grade</string> <string name="settings_list_layout_item_grid">Grade</string>
<string name="list_app_rename">Renomear</string> <string name="list_app_rename">Renomear</string>
<string name="dialog_rename_ok">beleza</string>
<string name="dialog_rename_title">Renomear %1$s</string> <string name="dialog_rename_title">Renomear %1$s</string>
<string name="settings_theme_font_item_serif_monospace">Serif monospace</string> <string name="settings_theme_font_item_serif_monospace">Serif monospace</string>
<string name="settings_theme_font_item_serif">Serif</string> <string name="settings_theme_font_item_serif">Serif</string>
@ -244,14 +236,18 @@
<string name="dialog_select_color_green">Verde</string> <string name="dialog_select_color_green">Verde</string>
<string name="dialog_select_color_color_hex">Cor</string> <string name="dialog_select_color_color_hex">Cor</string>
<string name="dialog_choose_color_title">Escola a cor</string> <string name="dialog_choose_color_title">Escola a cor</string>
<string name="dialog_consent_accessibility_consent">Autorizo a utilização do Serviço de acessibilidade para disponibilizar funcionalidades não relacionadas com a acessibilidade.</string> <string name="dialog_consent_accessibility_consent">Autorizo o μLauncher a usar Serviço de acessibilidade para acessar funcionalidades não relacionadas com a acessibilidade.</string>
<string name="dialog_consent_accessibility_data_collection">Não autorizo ao µLauncher a coleta de quaisquer dados.</string> <string name="dialog_consent_accessibility_data_collection">Não autorizo ao μLauncher coletar quaisquer dados.</string>
<string name="dialog_consent_accessibility_title">Ativação do Serviço de acessibilidade</string> <string name="dialog_consent_accessibility_title">Ativação do Serviço de acessibilidade</string>
<string name="dialog_consent_accessibility_ok">Ativar o Serviço de acessibilidade</string> <string name="dialog_consent_accessibility_ok">Ativar o Serviço de acessibilidade</string>
<string name="dialog_cancel">Cancelar</string> <string name="dialog_cancel">Cancelar</string>
<string name="dialog_consent_accessibility_text"><![CDATA[Você está prestes a ativar o Serviço de acessibilidade. Isto concederá <strong>permissões elevadas</strong> ao µLauncher.<br/>µLauncher usará estas permissões <strong>apenas para bloquear a tela</strong>. µLauncher <strong>nunca coletará nenhum dado</strong>. Sobretudo, o µLauncher não implementa o Serviço de acessibilidade para coletar dados.]]></string> <string name="dialog_consent_accessibility_text"><![CDATA[Você está prestes a ativar o Serviço de acessibilidade. Isto concederá <strong>permissões elevadas</strong> ao μLauncher.<br/>μLauncher usará estas permissões <strong>apenas</strong> para executar as seguintes ações:
<string name="dialog_select_color_ok">beleza</string> <ul>
<string name="dialog_consent_accessibility_privileges">Estou ciente de que isto concederá permissões elevadas ao µLauncher.</string> <li>Bloquear a tela</li>
<li>Apps recentes</li>
</ul>
μLauncher<strong>nunca coletará nenhum dado</strong>. Sobretudo, o μLauncher não implementa o Serviço de acessibilidade para coletar os dados.]]></string>
<string name="dialog_consent_accessibility_privileges">Estou ciente de que isto concederá permissões elevadas ao μLauncher.</string>
<string name="dialog_consent_accessibility_other_options">Estou ciente de que existem outras opções (permissões de Administrador do aparelho ou o botão de ligar).</string> <string name="dialog_consent_accessibility_other_options">Estou ciente de que existem outras opções (permissões de Administrador do aparelho ou o botão de ligar).</string>
<string name="settings_functionality_search_web">Pesquise na internet</string> <string name="settings_functionality_search_web">Pesquise na internet</string>
<string name="settings_functionality_search_web_summary">Ao buscar na lista de apps toque no Enter para iniciar uma pesquisa na internet.</string> <string name="settings_functionality_search_web_summary">Ao buscar na lista de apps toque no Enter para iniciar uma pesquisa na internet.</string>
@ -264,13 +260,13 @@
<string name="toast_private_space_locked">Espaço privado trancado</string> <string name="toast_private_space_locked">Espaço privado trancado</string>
<string name="toast_private_space_unlocked">Espaço privado liberado</string> <string name="toast_private_space_unlocked">Espaço privado liberado</string>
<string name="toast_private_space_not_available">Espaço privado indisponível</string> <string name="toast_private_space_not_available">Espaço privado indisponível</string>
<string name="toast_private_space_default_home_screen">O µLauncher precisa ser definido como a tela inicial padrão para poder usar Espaço privado.</string> <string name="toast_private_space_default_home_screen">O μLauncher precisa ser definido como a tela inicial padrão para poder usar Espaço privado.</string>
<string name="dialog_report_bug_button_clipboard">Copiar para memória</string> <string name="dialog_report_bug_button_clipboard">Copiar para memória</string>
<string name="dialog_report_bug_security_info">Não relate vulnerabilidades de segurança publicamente no GitHub, use o seguinte:</string> <string name="dialog_report_bug_security_info">Não relate vulnerabilidades de segurança publicamente no GitHub, use o seguinte:</string>
<string name="dialog_report_bug_button_security">Relatar vulnerabilidade de segurança</string> <string name="dialog_report_bug_button_security">Relatar vulnerabilidade de segurança</string>
<string name="dialog_report_bug_create_report">Criar relatório</string> <string name="dialog_report_bug_create_report">Criar relatório</string>
<string name="dialog_report_bug_title">Relatar um bug</string> <string name="dialog_report_bug_title">Relatar um bug</string>
<string name="dialog_report_bug_info">Obrigado por ajudar a melhorar o µLauncher!\nConsidere adicionar as seguintes informações ao relatório de bug:</string> <string name="dialog_report_bug_info">Obrigado por ajudar a melhorar o μLauncher!\nConsidere adicionar as seguintes informações ao relatório dos bugs:</string>
<string name="settings_functionality_auto_launch_summary">Toque no espaço para temporariamente desativar esta funcionalidade.</string> <string name="settings_functionality_auto_launch_summary">Toque no espaço para temporariamente desativar esta funcionalidade.</string>
<string name="toast_activity_not_found_browser">Não foi possível abrir a URL: nenhum navegador encontrado.</string> <string name="toast_activity_not_found_browser">Não foi possível abrir a URL: nenhum navegador encontrado.</string>
<string name="toast_activity_not_found_search_web">Nenhum app encontrado para efetuar a pesquisa.</string> <string name="toast_activity_not_found_search_web">Nenhum app encontrado para efetuar a pesquisa.</string>
@ -309,6 +305,18 @@
<string name="list_other_track_play_pause">Música: Reproduzir / Pausar</string> <string name="list_other_track_play_pause">Música: Reproduzir / Pausar</string>
<string name="settings_gesture_description_swipe_smaller_reverse">Canto inferior direito -&gt; centro esquerdo -&gt; canto superior direito</string> <string name="settings_gesture_description_swipe_smaller_reverse">Canto inferior direito -&gt; centro esquerdo -&gt; canto superior direito</string>
<string name="settings_gesture_description_swipe_lambda_reverse">Inferior direito -&gt; superior médio -&gt; inferior esquerdo</string> <string name="settings_gesture_description_swipe_lambda_reverse">Inferior direito -&gt; superior médio -&gt; inferior esquerdo</string>
<string name="settings_list_reverse_layout">Lista de apps inversa</string> <string name="settings_list_reverse_layout">Inverter a lista de apps</string>
<string name="pin_shortcut_button_ok">Ok</string> <string name="settings_meta_donate">Doar</string>
<string name="list_other_volume_adjust">Ajustar volume</string>
<string name="settings_display_hide_status_bar">Ocultar barra de status</string>
<string name="settings_display_hide_navigation_bar">Ocultar barra de navegação</string>
<string name="tutorial_concept_label_version">Versão</string>
<string name="tutorial_app_list_title">Todos apps</string>
<string name="tutorial_app_list_text">Você pode encontrar rápido todos os apps na lista de aplicativos.\n\nDeslize para cima para abrir ou definir um gesto específico.</string>
<string name="tutorial_app_list_text_2">Quando apenas um aplicativo corresponde, vai ser iniciado automaticamente.\nIsso pode ser desativado acrescentando um espaço durante a busca.</string>
<string name="settings_tab_actions">Ações</string>
<string name="list_other_recent_apps">Apps recentes</string>
<string name="alert_enable_accessibility_failed">Erro: Falha ao ativar o Serviço de acessibilidade.</string>
<string name="list_other_launch_other_launcher">Usar outro iniciador</string>
<string name="alert_recent_apps_failed">Erro: Falha ao mostrar apps recentes. (Se você acabou de atualizar o app, tente desativar e reativar o Serviço de acessibilidade em configurações do Android)</string>
</resources> </resources>

View file

@ -52,7 +52,6 @@
<string name="alert_cant_open_message">Ayarlarını değiştirmek ister misiniz?</string> <string name="alert_cant_open_message">Ayarlarını değiştirmek ister misiniz?</string>
<string name="toast_cant_open_message">Bu harekete bir eylem atamak için ayarlarıın</string> <string name="toast_cant_open_message">Bu harekete bir eylem atamak için ayarlarıın</string>
<string name="settings_title">Ayarlar</string> <string name="settings_title">Ayarlar</string>
<string name="settings_tab_app">Uygulamalar</string>
<string name="settings_tab_launcher">Başlatıcı</string> <string name="settings_tab_launcher">Başlatıcı</string>
<string name="settings_tab_meta">Daha Fazlası</string> <string name="settings_tab_meta">Daha Fazlası</string>
<string name="settings_gesture_up">Yukarı</string> <string name="settings_gesture_up">Yukarı</string>
@ -105,7 +104,6 @@
<string name="settings_gesture_time">Saat</string> <string name="settings_gesture_time">Saat</string>
<string name="settings_gesture_description_time">Saate tıklayın</string> <string name="settings_gesture_description_time">Saate tıklayın</string>
<string name="settings_apps_choose">Uygulama Seçin</string> <string name="settings_apps_choose">Uygulama Seçin</string>
<string name="settings_apps_view_all">Tüm uygulamaları göster</string>
<string name="settings_apps_install">Uygulamaları yükle</string> <string name="settings_apps_install">Uygulamaları yükle</string>
<string name="settings_apps_toast_store_not_found">Mağaza bulunamadı</string> <string name="settings_apps_toast_store_not_found">Mağaza bulunamadı</string>
<string name="settings_launcher_section_appearance">Görünüş</string> <string name="settings_launcher_section_appearance">Görünüş</string>
@ -120,8 +118,6 @@
<string name="list_other_nop">Hiçbir şey yapma</string> <string name="list_other_nop">Hiçbir şey yapma</string>
<string name="settings_meta_view_code">Kaynak kodunu göster</string> <string name="settings_meta_view_code">Kaynak kodunu göster</string>
<string name="settings_meta_report_bug">Hatayı bildirin</string> <string name="settings_meta_report_bug">Hatayı bildirin</string>
<string name="list_removed">Seçilen uygulama kaldırıldı</string>
<string name="list_not_removed">Uygulama kaldırılamadı</string>
<string name="list_apps_search_hint">Uygulamaları Ara</string> <string name="list_apps_search_hint">Uygulamaları Ara</string>
<string name="list_other_list">Tüm Uygulamalar</string> <string name="list_other_list">Tüm Uygulamalar</string>
<string name="list_other_list_favorites">Favori Uygulamalar</string> <string name="list_other_list_favorites">Favori Uygulamalar</string>
@ -134,10 +130,8 @@
<string name="settings_clock_show_seconds">Saniyeleri gösteri</string> <string name="settings_clock_show_seconds">Saniyeleri gösteri</string>
<string name="settings_clock_flip_date_time">Tarih ile zamanı yer değiştir</string> <string name="settings_clock_flip_date_time">Tarih ile zamanı yer değiştir</string>
<string name="settings_theme_wallpaper">Duvar kağıdı seç</string> <string name="settings_theme_wallpaper">Duvar kağıdı seç</string>
<string name="settings_launcher_change_wallpaper">Duvar kağıdını değiştir</string>
<string name="settings_launcher_section_display">Ekran</string> <string name="settings_launcher_section_display">Ekran</string>
<string name="settings_display_screen_timeout_disabled">Ekranıık tut</string> <string name="settings_display_screen_timeout_disabled">Ekranıık tut</string>
<string name="settings_display_full_screen">Tam ekran kullan</string>
<string name="settings_display_rotate_screen">Ekranı döndür</string> <string name="settings_display_rotate_screen">Ekranı döndür</string>
<string name="settings_launcher_section_functionality">İşlevsellik</string> <string name="settings_launcher_section_functionality">İşlevsellik</string>
<string name="settings_enabled_gestures_edge_swipe_summary">Ekranın köşesinden kaydırın</string> <string name="settings_enabled_gestures_edge_swipe_summary">Ekranın köşesinden kaydırın</string>
@ -165,7 +159,6 @@
<string name="settings_list_layout_item_text">Metin</string> <string name="settings_list_layout_item_text">Metin</string>
<string name="settings_list_layout_item_grid">Izgara</string> <string name="settings_list_layout_item_grid">Izgara</string>
<string name="settings_meta_cant_select_launcher">Uygulama Detayı</string> <string name="settings_meta_cant_select_launcher">Uygulama Detayı</string>
<string name="settings_meta_cant_select_launcher_msg">Sizin cihazınız bu özelliği desteklemiyor. Onun yerine uygulama detaylarını düzenleyin?</string>
<string name="settings_meta_reset">Ayarları Sıfırlayın</string> <string name="settings_meta_reset">Ayarları Sıfırlayın</string>
<string name="settings_meta_reset_confirm">Tüm tercihlerinizi bir kenara bırakacaksınız. Devam mı?</string> <string name="settings_meta_reset_confirm">Tüm tercihlerinizi bir kenara bırakacaksınız. Devam mı?</string>
<string name="settings_theme_font_item_monospace">Tek uzay</string> <string name="settings_theme_font_item_monospace">Tek uzay</string>
@ -198,7 +191,6 @@
<string name="alert_torch_access_exception">Hata: Fenere erişilemiyor.</string> <string name="alert_torch_access_exception">Hata: Fenere erişilemiyor.</string>
<string name="settings_actions_lock_method">Ekranı kilitleme yöntemini seçin</string> <string name="settings_actions_lock_method">Ekranı kilitleme yöntemini seçin</string>
<string name="dialog_cancel">İptal</string> <string name="dialog_cancel">İptal</string>
<string name="dialog_rename_ok">OK</string>
<string name="dialog_rename_title">Yeniden Adlandır %1$s</string> <string name="dialog_rename_title">Yeniden Adlandır %1$s</string>
<string name="settings_theme_color_theme_item_dynamic">Dinamik</string> <string name="settings_theme_color_theme_item_dynamic">Dinamik</string>
<string name="settings_clock_color">Renk</string> <string name="settings_clock_color">Renk</string>
@ -206,7 +198,6 @@
<string name="dialog_select_color_alpha">Alfa</string> <string name="dialog_select_color_alpha">Alfa</string>
<string name="dialog_select_color_blue">Mavi</string> <string name="dialog_select_color_blue">Mavi</string>
<string name="dialog_select_color_green">Yeşil</string> <string name="dialog_select_color_green">Yeşil</string>
<string name="dialog_select_color_ok">OK</string>
<string name="dialog_select_color_color_hex">Renk</string> <string name="dialog_select_color_color_hex">Renk</string>
<string name="dialog_choose_color_title">Renk seçin</string> <string name="dialog_choose_color_title">Renk seçin</string>
</resources> </resources>

View file

@ -1,6 +0,0 @@
<resources>
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
(such as screen margins) for screens with more than 820dp of available width. This
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
<dimen name="activity_horizontal_margin">64dp</dimen>
</resources>

View file

@ -5,96 +5,89 @@
<string name="ic_menu_alt">更多选项</string> <string name="ic_menu_alt">更多选项</string>
<string name="settings_title">设置</string> <string name="settings_title">设置</string>
<string name="settings_launcher_section_appearance">外观</string> <string name="settings_launcher_section_appearance">外观</string>
<string name="settings_theme_color_theme">主题</string> <string name="settings_theme_color_theme">色调风格</string>
<string name="settings_launcher_section_display">显示</string> <string name="settings_launcher_section_display">显示</string>
<string name="list_tab_other">其他</string> <string name="list_tab_other">其他</string>
<string name="settings_gesture_up"></string> <string name="settings_gesture_up"></string>
<string name="settings_gesture_down"></string> <string name="settings_gesture_down"></string>
<string name="alert_cant_open_title">无法打开应用</string> <string name="alert_cant_open_title">无法打开应用</string>
<string name="alert_cant_open_message">要更改其设置吗?</string> <string name="alert_cant_open_message">要更改其设置吗?</string>
<string name="toast_cant_open_message">打开设置,为该手势绑定一个应用程序</string> <string name="toast_cant_open_message">打开设置,为该手势绑定一个应用程序</string>
<string name="settings_tab_app">应用程序</string>
<string name="settings_tab_launcher">启动器</string> <string name="settings_tab_launcher">启动器</string>
<string name="settings_tab_meta">杂项</string> <string name="settings_tab_meta">杂项</string>
<string name="settings_gesture_left"></string> <string name="settings_gesture_left"></string>
<string name="settings_gesture_double_left">左滑两次</string> <string name="settings_gesture_double_left">双指左滑</string>
<string name="settings_gesture_double_up">上滑两次</string> <string name="settings_gesture_double_up">双指上滑</string>
<string name="settings_gesture_double_down">下滑两次</string> <string name="settings_gesture_double_down">双指下滑</string>
<string name="settings_gesture_right"></string> <string name="settings_gesture_right"></string>
<string name="settings_gesture_double_right">右滑两次</string> <string name="settings_gesture_double_right">双指右滑</string>
<string name="settings_gesture_right_top_edge">右(顶部)</string> <string name="settings_gesture_right_top_edge">(顶部)</string>
<string name="settings_gesture_right_bottom_edge">右(底部)</string> <string name="settings_gesture_right_bottom_edge">(底部)</string>
<string name="settings_gesture_left_bottom_edge">左(底部)</string> <string name="settings_gesture_left_bottom_edge">(底部)</string>
<string name="settings_gesture_left_top_edge">左(顶部)</string> <string name="settings_gesture_left_top_edge">(顶部)</string>
<string name="settings_gesture_up_left_edge">上(左边缘)</string> <string name="settings_gesture_up_left_edge">(左边缘)</string>
<string name="settings_gesture_up_right_edge">上(右边缘)</string> <string name="settings_gesture_up_right_edge">(右边缘)</string>
<string name="settings_gesture_down_left_edge">下(左边缘)</string> <string name="settings_gesture_down_left_edge">(左边缘)</string>
<string name="settings_gesture_down_right_edge">下(右边缘)</string> <string name="settings_gesture_down_right_edge">(右边缘)</string>
<string name="settings_gesture_vol_up">音量</string> <string name="settings_gesture_vol_up">音量增加键</string>
<string name="settings_gesture_vol_down">音量</string> <string name="settings_gesture_vol_down">音量降低键</string>
<string name="settings_gesture_double_click">双击</string> <string name="settings_gesture_double_click">双击</string>
<string name="settings_gesture_long_click">长按</string> <string name="settings_gesture_long_click">长按</string>
<string name="settings_gesture_date">日期</string> <string name="settings_gesture_date">桌面日期</string>
<string name="settings_gesture_time">时间</string> <string name="settings_gesture_time">桌面时钟</string>
<string name="settings_apps_choose">选择应用</string> <string name="settings_apps_choose">选择应用</string>
<string name="settings_apps_view_all">浏览全部应用</string>
<string name="settings_apps_install">安装应用</string> <string name="settings_apps_install">安装应用</string>
<string name="settings_apps_toast_store_not_found">没有找到应用市场</string> <string name="settings_apps_toast_store_not_found">没有找到应用市场</string>
<string name="settings_launcher_section_date_time"><![CDATA[日期和时间]]></string> <string name="settings_launcher_section_date_time"><![CDATA[日期和时间]]></string>
<string name="settings_theme_wallpaper">选择一个壁纸</string> <string name="settings_theme_wallpaper">选择壁纸</string>
<string name="settings_launcher_change_wallpaper">换壁纸</string>
<string name="settings_display_screen_timeout_disabled">保持屏幕常亮</string> <string name="settings_display_screen_timeout_disabled">保持屏幕常亮</string>
<string name="settings_display_full_screen">使用全屏</string>
<string name="settings_launcher_section_functionality">功能</string> <string name="settings_launcher_section_functionality">功能</string>
<string name="settings_enabled_gestures_edge_swipe">边缘滑动动作</string> <string name="settings_enabled_gestures_edge_swipe">边缘滑动手势</string>
<string name="settings_functionality_auto_launch">零点击启动唯一搜索结果</string> <string name="settings_functionality_auto_launch">自动启动搜索匹配项</string>
<string name="settings_functionality_auto_keyboard">搜索时呼出键盘</string> <string name="settings_functionality_auto_keyboard">自动激活搜索</string>
<string name="settings_launcher_sensitivity">灵敏度</string> <string name="settings_launcher_sensitivity">灵敏度</string>
<string name="settings_meta_cant_select_launcher">应用信息</string> <string name="settings_meta_cant_select_launcher">应用信息</string>
<string name="settings_meta_cant_select_launcher_msg">您的设备不支持此功能。要不打开应用程序详细?</string> <string name="settings_meta_show_tutorial">查看 µLauncher 的使用教程</string>
<string name="settings_meta_show_tutorial">查看启动器教程</string>
<string name="settings_meta_reset">重置设置</string> <string name="settings_meta_reset">重置设置</string>
<string name="settings_meta_reset_confirm">你将放弃你所有的配置。继续吗?</string> <string name="settings_meta_reset_confirm">该操作将丢弃您的所有配置。是否继续?</string>
<string name="settings_meta_report_bug">反馈 BUG</string> <string name="settings_meta_report_bug">错误反馈</string>
<string name="settings_meta_fork_contact">联系该 fork 版本的作者</string> <string name="settings_meta_fork_contact">联系该 fork 版本的作者</string>
<string name="settings_meta_privacy">隐私政策</string> <string name="settings_meta_privacy">隐私政策</string>
<string name="settings_meta_contact">联系原作者</string> <string name="settings_meta_contact">联系原作者</string>
<string name="settings_meta_discord">加入 Discord</string> <string name="settings_meta_discord">加入我们的 Discord 社区</string>
<string name="list_title_view">全部应用</string> <string name="list_title_view">全部应用</string>
<string name="list_title_pick">选择应用</string> <string name="list_title_pick">选择应用</string>
<string name="tutorial_start_text">花几秒时间学下咋用这个启动器吧!</string> <string name="tutorial_start_text">👋\n\n花几秒钟时间了解一下如何用这个启动器吧!</string>
<string name="tutorial_concept_title">概念</string> <string name="tutorial_concept_title">概念</string>
<string name="tutorial_concept_text_2">该应用是开源的MIT许可并在 GitHub 上可用!一定要来看看代码仓库!</string> <string name="tutorial_concept_text_2">这是一款自由软件(遵循 MIT 许可)!\n欢迎查看项目仓库!</string>
<string name="tutorial_usage_title">使用方法</string> <string name="tutorial_usage_title">使用方法</string>
<string name="tutorial_usage_text">您的主屏幕仅包含本地日期和时间,没有其它纷纷扰扰</string> <string name="tutorial_usage_text">您的桌面仅包含本地日期和时间,没有多余的项目</string>
<string name="tutorial_setup_title">设置</string> <string name="tutorial_setup_title">设置</string>
<string name="tutorial_setup_text">我们为您选择了一些默认应用。如果您愿意,现在可以更改它们</string> <string name="tutorial_setup_text">我们为您预设了一些快捷操作。如果您不满意,现在就试试点击右侧图标</string>
<string name="tutorial_setup_text_2">您也可以稍后更改选择。</string> <string name="tutorial_setup_text_2">您也可以稍后更改您的选择。</string>
<string name="tutorial_finish_title">开始!</string> <string name="tutorial_finish_title">开始!</string>
<string name="list_tab_app">应用</string> <string name="list_tab_app">应用</string>
<string name="list_app_delete">卸载</string> <string name="list_app_delete">卸载</string>
<string name="list_app_info">应用信息</string> <string name="list_app_info">应用信息</string>
<string name="list_not_removed">无法移除应用</string>
<string name="list_removed">移除了选定的应用</string>
<string name="list_apps_search_hint">搜索</string> <string name="list_apps_search_hint">搜索</string>
<string name="list_other_settings">启动器设置</string> <string name="list_other_settings">μLauncher 设置</string>
<string name="list_other_list">全部应用</string> <string name="list_other_list">全部应用</string>
<string name="list_other_volume_up">音乐:大声</string> <string name="list_other_volume_up">增大音量</string>
<string name="list_other_volume_down">音乐:小声</string> <string name="list_other_volume_down">降低音量</string>
<string name="list_other_track_previous">音乐:上一首</string> <string name="list_other_track_previous">音乐:上一首</string>
<string name="list_other_track_next">音乐:下一首</string> <string name="list_other_track_next">音乐:下一首</string>
<string name="list_other_nop">啥也不干</string> <string name="list_other_nop">不做任何设置</string>
<string name="tutorial_title">教程</string> <string name="tutorial_title">教程</string>
<string name="tutorial_concept_text">μLauncher 的设计是最小、高效且无干扰。它不付费、无广告、不追踪</string> <string name="tutorial_concept_text">μLauncher 的设计理念是简约、高效,无干扰。\n\n不含广告、且不收集任何数据</string>
<string name="tutorial_usage_text_2">只需滑动屏幕或按下按钮即可启动应用程序。在下一步向导中选择一些应用程序。</string> <string name="tutorial_usage_text_2">可以通过手势或按键来启动对您来说最重要的应用程序。</string>
<string name="settings_general_choose_home_screen">将 μLauncher 设为默认桌面</string> <string name="settings_general_choose_home_screen">将 μLauncher 设为默认启动器</string>
<string name="tutorial_finish_text">您已经准备好开始我希望这对您很有价值——FinnLauncher 作者)和 Josia做了一些改进并维护了 μLauncher 分支</string> <string name="tutorial_finish_text">您已经准备好开始使用本启动器了!\n\n希望本快捷教程能对您有所帮助\n\n- FinnLauncher 的作者)和 Josia对 μLauncher 进行了改进和维护</string>
<string name="settings_enabled_gestures_double_swipe">滑动作</string> <string name="settings_enabled_gestures_double_swipe">指滑动手势</string>
<string name="settings_clock_localized">使用本地日期格式</string> <string name="settings_clock_localized">使用本地日期格式</string>
<string name="settings_clock_time_visible">显示时间</string> <string name="settings_clock_time_visible">显示时间</string>
<string name="settings_clock_date_visible">显示日期</string> <string name="settings_clock_date_visible">显示日期</string>
<string name="settings_clock_flip_date_time">翻转日期和时间</string> <string name="settings_clock_flip_date_time">交换日期和时间位置</string>
<string name="settings_theme_background">背景(应用列表和设置)</string> <string name="settings_theme_background">背景(应用程序列表和设置页面</string>
<string name="settings_theme_font">字体</string> <string name="settings_theme_font">字体</string>
<string name="settings_theme_monochrome_icons">黑白应用图标</string> <string name="settings_theme_monochrome_icons">黑白应用图标</string>
<string name="settings_clock_show_seconds">显示秒</string> <string name="settings_clock_show_seconds">显示秒</string>
@ -107,12 +100,12 @@
<string name="alert_torch_access_exception">错误:无法访问闪光灯。</string> <string name="alert_torch_access_exception">错误:无法访问闪光灯。</string>
<string name="screen_lock_method_dialog_title">选择锁屏方法</string> <string name="screen_lock_method_dialog_title">选择锁屏方法</string>
<string name="settings_actions_lock_method">选择锁屏的方法</string> <string name="settings_actions_lock_method">选择锁屏的方法</string>
<string name="settings_apps_hide_bound_apps">不要在应用抽屉中显示被绑定到手势的应用</string> <string name="settings_apps_hide_bound_apps">不要在应用程序列表中显示已被绑定到手势操作的应用</string>
<string name="alert_requires_android_m">此功能需要 Android 6 或更高版本。</string> <string name="alert_requires_android_m">此功能需要 Android 6 或更高版本。</string>
<string name="snackbar_app_hidden">应用程序已隐藏。您可在设置中让它再次显示。</string> <string name="snackbar_app_hidden">应用程序已隐藏。您可在设置中让它再次显示。</string>
<string name="toast_device_admin_not_enabled">µLauncher 需要是设备管理员才能够锁定屏幕。</string> <string name="toast_device_admin_not_enabled">µLauncher 需要激活“设备管理应用”权限才能够锁定屏幕。</string>
<string name="device_admin_explanation">这是锁屏动作所必需的。</string> <string name="device_admin_explanation">这是执行锁屏操作所必需的。</string>
<string name="accessibility_service_name">µLauncher -锁屏</string> <string name="accessibility_service_name">µLauncher</string>
<string name="list_title_favorite">收藏的应用</string> <string name="list_title_favorite">收藏的应用</string>
<string name="list_app_favorite_add">添加到收藏夹</string> <string name="list_app_favorite_add">添加到收藏夹</string>
<string name="list_app_favorite_remove">从收藏夹中移除</string> <string name="list_app_favorite_remove">从收藏夹中移除</string>
@ -121,42 +114,41 @@
<string name="undo">撤销</string> <string name="undo">撤销</string>
<string name="settings_apps_hidden">隐藏的应用</string> <string name="settings_apps_hidden">隐藏的应用</string>
<string name="list_title_hidden">隐藏的应用</string> <string name="list_title_hidden">隐藏的应用</string>
<string name="settings_gesture_description_up">上滑</string> <string name="settings_gesture_description_up">上滑</string>
<string name="settings_gesture_description_double_up">用双指向上滑动</string> <string name="settings_gesture_description_double_up">使用双指向上滑动</string>
<string name="settings_gesture_description_down">下滑</string> <string name="settings_gesture_description_down">下滑</string>
<string name="settings_gesture_description_double_down">双指向下滑动</string> <string name="settings_gesture_description_double_down">使用双指向下滑动</string>
<string name="settings_gesture_description_left">左滑</string> <string name="settings_gesture_description_left">左滑</string>
<string name="settings_gesture_description_double_left">双指向左滑动</string> <string name="settings_gesture_description_double_left">使用双指向左滑动</string>
<string name="settings_gesture_description_right">右滑</string> <string name="settings_gesture_description_right">右滑</string>
<string name="settings_gesture_description_double_right">双指向右滑动</string> <string name="settings_gesture_description_double_right">使用双指向右滑动</string>
<string name="settings_gesture_description_right_top_edge">屏幕顶部向右滑动</string> <string name="settings_gesture_description_right_top_edge">桌面顶部向右滑动</string>
<string name="settings_gesture_description_right_bottom_edge">屏幕底部向右滑动</string> <string name="settings_gesture_description_right_bottom_edge">桌面底部向右滑动</string>
<string name="settings_gesture_description_left_bottom_edge">屏幕底部向左滑动</string> <string name="settings_gesture_description_left_bottom_edge">桌面底部向左滑动</string>
<string name="settings_gesture_description_left_top_edge">屏幕顶部向左滑动</string> <string name="settings_gesture_description_left_top_edge">桌面顶部向左滑动</string>
<string name="settings_gesture_description_up_left_edge">屏幕左边缘向上滑动</string> <string name="settings_gesture_description_up_left_edge">桌面左边缘向上滑动</string>
<string name="settings_gesture_description_up_right_edge">屏幕右边缘向上滑动</string> <string name="settings_gesture_description_up_right_edge">桌面右边缘向上滑动</string>
<string name="settings_gesture_description_down_left_edge">屏幕左边缘向下滑动</string> <string name="settings_gesture_description_down_left_edge">桌面左边缘向下滑动</string>
<string name="settings_gesture_description_down_right_edge">屏幕右边缘向下滑动</string> <string name="settings_gesture_description_down_right_edge">桌面右边缘向下滑动</string>
<string name="settings_gesture_description_vol_up">按下音量增大按钮</string> <string name="settings_gesture_description_vol_up">按下音量增加键</string>
<string name="settings_gesture_description_vol_down">按下音量降低按钮</string> <string name="settings_gesture_description_vol_down">按下音量降低</string>
<string name="settings_gesture_description_double_click">双击空白区域</string> <string name="settings_gesture_description_double_click">双击空白区域</string>
<string name="settings_gesture_description_long_click">长按空白区域</string> <string name="settings_gesture_description_long_click">长按空白区域</string>
<string name="settings_gesture_description_date">点击日期</string> <string name="settings_gesture_description_date">点击桌面日期</string>
<string name="settings_gesture_description_time">点击时间</string> <string name="settings_gesture_description_time">点击桌面时钟</string>
<string name="settings_meta_view_code">查看源代码</string> <string name="settings_meta_view_code">查看源代码</string>
<string name="settings_meta_join_chat">加入 µLauncher 聊天群</string> <string name="settings_meta_join_chat">加入 μLauncher 的聊天群</string>
<string name="list_other_list_favorites">收藏的应用</string> <string name="list_other_list_favorites">收藏的应用</string>
<string name="list_other_lock_screen">锁屏</string> <string name="list_other_lock_screen">锁屏</string>
<string name="settings_theme_text_shadow">文本阴影</string> <string name="settings_theme_text_shadow">文本阴影</string>
<string name="settings_enabled_gestures_double_swipe_summary">双指滑动</string> <string name="settings_enabled_gestures_double_swipe_summary">使用双指进行滑动手势操作</string>
<string name="dialog_rename_ok">确定</string>
<string name="dialog_rename_title">重命名 %1$s</string> <string name="dialog_rename_title">重命名 %1$s</string>
<string name="settings_theme_color_theme_item_default">默认</string> <string name="settings_theme_color_theme_item_default">默认</string>
<string name="settings_theme_color_theme_item_dark"></string> <string name="settings_theme_color_theme_item_dark"></string>
<string name="settings_theme_background_item_transparent">透明</string> <string name="settings_theme_background_item_transparent">透明</string>
<string name="settings_theme_background_item_dim"></string> <string name="settings_theme_background_item_dim"></string>
<string name="settings_theme_background_item_blur">模糊</string> <string name="settings_theme_background_item_blur">模糊</string>
<string name="settings_theme_background_item_solid">固实</string> <string name="settings_theme_background_item_solid">纯色</string>
<string name="settings_theme_font_item_system_default">系统默认</string> <string name="settings_theme_font_item_system_default">系统默认</string>
<string name="settings_theme_font_item_monospace">等宽</string> <string name="settings_theme_font_item_monospace">等宽</string>
<string name="settings_theme_font_item_serif">衬线</string> <string name="settings_theme_font_item_serif">衬线</string>
@ -165,52 +157,131 @@
<string name="settings_enabled_gestures_edge_swipe_edge_width">边缘宽度</string> <string name="settings_enabled_gestures_edge_swipe_edge_width">边缘宽度</string>
<string name="list_app_rename">重命名</string> <string name="list_app_rename">重命名</string>
<string name="device_admin_description">启用锁屏动作</string> <string name="device_admin_description">启用锁屏动作</string>
<string name="toast_accessibility_service_not_enabled">μLauncher 的无障碍服务未启用。请在设置中启用它</string> <string name="toast_accessibility_service_not_enabled">μLauncher 的“无障碍”服务未启用,请在设置中启用它。</string>
<string name="toast_lock_screen_not_supported">错误:此设备不支持使用无障碍功能锁定屏幕。请改用设备管理员</string> <string name="toast_lock_screen_not_supported">错误:此设备不支持使用“无障碍”服务锁定屏幕。请改用激活“设备管理应用”权限</string>
<string name="screen_lock_method_use_accessibility">使用无障碍服务</string> <string name="screen_lock_method_use_accessibility">使用无障碍服务</string>
<string name="screen_lock_method_use_device_admin">使用设备管理员</string> <string name="screen_lock_method_use_device_admin">激活“设备管理应用”权限</string>
<string name="dialog_cancel">取消</string> <string name="dialog_cancel">取消</string>
<string name="settings_theme_color_theme_item_light"></string> <string name="settings_theme_color_theme_item_light"></string>
<string name="list_other_expand_settings_panel">快速设置</string> <string name="list_other_expand_settings_panel">启动器设置</string>
<string name="alert_lock_screen_failed">错误:锁定屏幕失败。(如果您刚刚升级了应用程序,请尝试在手机设置中手动禁用并重新启用无障碍服务</string> <string name="alert_lock_screen_failed">错误:锁定屏幕失败。(如果您刚刚升级了本启动器,请尝试在手机设置中手动禁用再重新启用“无障碍”服务。</string>
<string name="settings_enabled_gestures_edge_swipe_summary">屏幕边缘滑动</string> <string name="settings_enabled_gestures_edge_swipe_summary">桌面边缘进行滑动手势操作</string>
<string name="accessibility_service_description">将 µLauncher 设为无障碍服务允许其锁定屏幕。请注意这需要过多的权限。你永远不应该轻易地授予任何应用程序这样的权限。µLauncher 将仅使用无障碍服务功能锁屏。您可以审计源代码。请注意,锁屏也可以通过授予 µLauncher 设备管理员权限来实现,然而,这种方法不适用于以指纹和面部解锁</string> <string name="accessibility_service_description">将 µLauncher 设置为“无障碍”服务以允许其锁定屏幕和展示最近应用屏幕。请注意,这会使 µLauncher 获得额外的权限。你永远不应该轻易地授予任何应用程序这样的权限。μLauncher 仅在被用户要求时才会使用“无障碍”服务权限以实现: * 锁定屏幕 * 展示最近应用屏幕。μLauncher 不会使用“无障碍”服务来收集任何数据。您可以审核我们的源代码。请注意,锁定屏幕也可以通过激活 µLauncher 的“设备管理应用”权限来实现,然而,这种方法无法与于指纹解锁和面部解锁兼容</string>
<string name="settings_gesture_back">返回</string> <string name="settings_gesture_back">返回操作</string>
<string name="dialog_select_color_red">红色</string> <string name="dialog_select_color_red">红色</string>
<string name="dialog_select_color_blue">蓝色</string> <string name="dialog_select_color_blue">蓝色</string>
<string name="dialog_select_color_alpha">透明度</string> <string name="dialog_select_color_alpha">透明度</string>
<string name="dialog_select_color_green">绿色</string> <string name="dialog_select_color_green">绿色</string>
<string name="dialog_select_color_ok">确定</string>
<string name="settings_theme_color_theme_item_dynamic">动态</string> <string name="settings_theme_color_theme_item_dynamic">动态</string>
<string name="list_title_private_space">私人空间</string> <string name="list_title_private_space">私人空间</string>
<string name="list_other_list_private_space">私人空间</string> <string name="list_other_list_private_space">私人空间</string>
<string name="dialog_choose_color_title">选择颜色</string> <string name="dialog_choose_color_title">设置颜色</string>
<string name="dialog_select_color_color_hex">颜色</string> <string name="dialog_select_color_color_hex">颜色</string>
<string name="dialog_report_bug_title">报告错误</string> <string name="dialog_report_bug_title">错误反馈</string>
<string name="settings_gesture_swipe_larger"><![CDATA[>]]></string> <string name="settings_gesture_swipe_larger"><![CDATA[>]]></string>
<string name="tooltip_lock_private_space">锁定私人空间</string> <string name="tooltip_lock_private_space">锁定私人空间</string>
<string name="settings_gesture_swipe_v">V</string> <string name="settings_gesture_swipe_v">V</string>
<string name="settings_gesture_swipe_lambda">Λ</string> <string name="settings_gesture_swipe_lambda">Λ</string>
<string name="settings_list_layout_item_text">文本</string> <string name="settings_list_layout_item_text">文本</string>
<string name="settings_list_layout_item_grid">网格</string> <string name="settings_list_layout_item_grid">网格</string>
<string name="dialog_report_bug_create_report">创建报告</string> <string name="dialog_report_bug_create_report">创建报告</string>
<string name="tooltip_unlock_private_space">解锁私人空间</string> <string name="tooltip_unlock_private_space">解锁私人空间</string>
<string name="settings_list_layout_item_default">默认</string> <string name="settings_list_layout_item_default">默认</string>
<string name="settings_clock_color">颜色</string> <string name="settings_clock_color">文本颜色</string>
<string name="settings_gesture_swipe_smaller"><![CDATA[<]]></string> <string name="settings_gesture_swipe_smaller"><![CDATA[<]]></string>
<string name="dialog_report_bug_button_clipboard">复制到剪贴板</string> <string name="dialog_report_bug_button_clipboard">复制到剪贴板</string>
<string name="alert_requires_android_v">此功能需要 Android 15 或更高版本。</string> <string name="alert_requires_android_v">此功能需要 Android 15 或更高版本。</string>
<string name="list_other_toggle_private_space_lock">切换私人空间锁</string> <string name="list_other_toggle_private_space_lock">切换私人空间锁</string>
<string name="dialog_consent_accessibility_ok">激活无障碍服务</string> <string name="dialog_consent_accessibility_ok">激活无障碍服务</string>
<string name="dialog_consent_accessibility_title">正在激活无障碍服务</string> <string name="dialog_consent_accessibility_title">正在激活无障碍服务</string>
<string name="settings_meta_licenses">开源许可证</string> <string name="settings_meta_licenses">开源许可证</string>
<string name="legal_info_title">开源许可证</string> <string name="legal_info_title">开源许可证</string>
<string name="pin_shortcut_switch_visible">在应用列表中显示</string> <string name="pin_shortcut_switch_visible">在应用程序列表中显示</string>
<string name="pin_shortcut_title">添加快捷方式</string> <string name="pin_shortcut_title">添加快捷方式</string>
<string name="toast_private_space_locked">私人空间已锁定</string> <string name="toast_private_space_locked">私人空间已锁定</string>
<string name="toast_private_space_unlocked">私人空间已解锁</string> <string name="toast_private_space_unlocked">私人空间已解锁</string>
<string name="toast_private_space_not_available">私人空间不可用</string> <string name="toast_private_space_not_available">私人空间不可用</string>
<string name="toast_private_space_default_home_screen">µLauncher 需要作为默认的主屏幕来访问私人空间。</string> <string name="toast_private_space_default_home_screen">µLauncher 需要作为默认启动器才能访问私人空间。</string>
<string name="toast_activity_not_found_search_web">没有找到处理搜索的应用。</string> <string name="toast_activity_not_found_search_web">没有找到处理搜索的应用。</string>
<string name="toast_activity_not_found_browser">无法打开 URL找不到浏览器。</string> <string name="toast_activity_not_found_browser">无法打开 URL找不到浏览器。</string>
<string name="dialog_consent_accessibility_privileges">我已知晓,这将赋予 μLauncher 广泛且重要的权限。</string>
<string name="settings_apps_hide_private_space_apps">在应用程序列表中隐藏私人空间</string>
<string name="settings_apps_hide_paused_apps">隐藏已被暂停的应用</string>
<string name="settings_gesture_description_back">返回按键 / 返回手势</string>
<string name="settings_gesture_description_tap_down">先单击然后再向下滑动</string>
<string name="settings_functionality_search_web">在网络上搜索</string>
<string name="settings_gesture_description_swipe_smaller">(从)右上(滑向)中左(滑向)右下</string>
<string name="settings_functionality_search_web_summary">输入搜索内容后,按回车键直接在应用程序列表界面启动网络搜索。</string>
<string name="settings_gesture_description_swipe_lambda">(从)左下(滑向)中上(滑向)右下</string>
<string name="screen_lock_method_dialog_text"><![CDATA[
<h1>选择锁定设备的方式</h1>
有2种方式可以用来锁定屏幕。
遗憾的是,两者都有缺点:<br/><br/>
<h3>通过激活“设备管理应用”权限</h3>
该方法无法和指纹解锁和脸部解锁共同使用。
<br/>
<br/>
<h3>通过“无障碍”功能</h3>
需要更多的权限。
μLauncher 将这些权限仅用于锁定屏幕。
<br/>
(对于任何一个从网上下载的应用所做的类似声明,你都不应该抱持“默认为可信”的态度,你可以并应该检查一下它的<a href=\"https://github.com/jrpie/Launcher\">源代码</a>.
<br/>
在某些设备上,激活“无障碍”服务后,启动 PIN 码将不再用于加密数据。
如果遇到该问题,可以通过<a href="https://issuetracker.google.com/issues/37010136#comment36">该方法</a>重新激活启动 PIN 码用于数据加密。
<br/><br/><br/><br/>
你可以在设置中随时更改这个选项。
]]></string>
<string name="list_apps_search_hint_no_auto_launch">搜索(不触发自动启动匹配项)</string>
<string name="dialog_consent_accessibility_text"><![CDATA[您即将激活“无障碍”服务。这将授予 μLauncher <strong>广泛且重要的权限</strong><br/>但 μLauncher <strong></strong>将这些权限用于:
<ul>
<li>锁定屏幕</li>
<li>展示最近应用屏幕</li>
</ul>
µLauncher <strong>绝不会收集任何数据</strong>。尤其是μLauncher 不会使用“无障碍”服务来收集任何数据。]]></string>
<string name="settings_gesture_description_swipe_larger">(从)左上(滑向)中右(滑向)左下</string>
<string name="settings_gesture_tap_up">单击 + 上滑</string>
<string name="settings_gesture_tap_down">单击 + 下滑</string>
<string name="settings_gesture_tap_left">单击 + 左滑</string>
<string name="settings_gesture_description_tap_left">先单击然后再向左滑动</string>
<string name="settings_gesture_description_tap_up">先单击然后再向上滑动</string>
<string name="settings_gesture_tap_right">单击 + 右滑</string>
<string name="settings_gesture_description_tap_right">先单击然后再向右滑动</string>
<string name="settings_gesture_description_swipe_larger_reverse">(从)左下(滑向)中右(滑向)左上</string>
<string name="settings_gesture_description_swipe_smaller_reverse">(从)右下(滑向)中左(滑向)右上</string>
<string name="settings_gesture_description_swipe_v">(从)左上(滑向)中下(滑向)右上</string>
<string name="settings_gesture_description_swipe_v_reverse">(从)右上(滑向)中下(滑向)左上</string>
<string name="settings_gesture_description_swipe_lambda_reverse">(从)右下(滑向)中上(滑向)左下</string>
<string name="settings_gesture_swipe_lambda_reverse">Λ (反向)</string>
<string name="settings_gesture_swipe_v_reverse">V反向</string>
<string name="settings_gesture_swipe_larger_reverse"><![CDATA[>(反向)]]></string>
<string name="settings_gesture_swipe_smaller_reverse"><![CDATA[<(反向)]]></string>
<string name="settings_functionality_auto_launch_summary">开启后将直接启动搜索所匹配到的应用,可以通过在搜索内容前添加空格来临时停用该功能。</string>
<string name="settings_list_layout">应用程序列表样式</string>
<string name="pin_shortcut_button_bind">绑定到手势</string>
<string name="list_other_track_play_pause">音乐:播放 / 暂停</string>
<string name="dialog_report_bug_button_security">报告安全漏洞</string>
<string name="dialog_report_bug_security_info">请不要在 Github 上以公开的方式报告安全漏洞,请使用以下方式进行报告:</string>
<string name="dialog_report_bug_info">感谢您帮助改进 µLauncher\n请考虑在您的应用程序错误反馈中添加以下信息</string>
<string name="dialog_consent_accessibility_other_options">我已知晓,还有其他替代方法(激活“设备管理应用”权限或通过电源按键)。</string>
<string name="dialog_consent_accessibility_data_collection">我同意 μLauncher 不收集任何数据。</string>
<string name="settings_meta_donate">捐赠</string>
<string name="list_other_volume_adjust">调整音量</string>
<string name="tutorial_concept_label_version">版本</string>
<string name="tutorial_app_list_title">所有应用</string>
<string name="tutorial_app_list_text">您可以在应用程序列表中快速找到已安装的应用程序。\n\n您可以通过上滑打开应用程序列表也可以通过绑定其他手势操作来打开应用程序列表。</string>
<string name="tutorial_app_list_text_2">您还可以搜索,当匹配到唯一的应用程序后,该应用将自动启动。\n如果你不想触发自动启动可以在搜索内容前加上空格以禁用。</string>
<string name="settings_display_hide_status_bar">隐藏状态栏</string>
<string name="settings_display_hide_navigation_bar">隐藏导航栏</string>
<string name="settings_list_reverse_layout">倒序排列应用程序</string>
<string name="dialog_consent_accessibility_consent">我同意 μLauncher 使用无障碍服务来提供与无障碍服务无关的其他功能。</string>
<string name="settings_tab_actions">快捷操作</string>
<string name="list_other_recent_apps">最近应用屏幕</string>
<string name="alert_enable_accessibility_failed">错误:启用“无障碍”服务失败。</string>
<string name="alert_recent_apps_failed">错误:无法展示最近应用屏幕。(如果您刚刚升级了本启动器,请尝试在手机设置中手动禁用再重新启用“无障碍”服务。)</string>
<string name="list_other_launch_other_launcher">启动其他启动器</string>
</resources> </resources>

View file

@ -176,7 +176,7 @@
<!-- Legal --> <!-- Legal -->
<string name="legal_info_text"><![CDATA[ <string name="legal_info_text"><![CDATA[
<h2>µLauncher</h2> <h2>μLauncher</h2>
Modifications to Launcher. Modifications to Launcher.
<p><a href=\"https://github.com/jrpie/launcher\">github.com/jrpie/launcher</a></p> <p><a href=\"https://github.com/jrpie/launcher\">github.com/jrpie/launcher</a></p>

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#000000</color>
</resources>

View file

@ -16,7 +16,7 @@
--> -->
<string name="settings_title">Settings</string> <string name="settings_title">Settings</string>
<string name="settings_tab_app">Apps</string> <string name="settings_tab_actions">Actions</string>
<string name="settings_tab_launcher">Launcher</string> <string name="settings_tab_launcher">Launcher</string>
<string name="settings_tab_meta">Meta</string> <string name="settings_tab_meta">Meta</string>
@ -85,9 +85,9 @@
<string name="settings_gesture_swipe_lambda_reverse">Λ (Reverse)</string> <string name="settings_gesture_swipe_lambda_reverse">Λ (Reverse)</string>
<string name="settings_gesture_description_swipe_lambda_reverse">Bottom right -> top mid -> bottom left</string> <string name="settings_gesture_description_swipe_lambda_reverse">Bottom right -> top mid -> bottom left</string>
<string name="settings_gesture_vol_up">Volume Up</string> <string name="settings_gesture_vol_up">Volume Up Key</string>
<string name="settings_gesture_description_vol_up">Press the volume up button</string> <string name="settings_gesture_description_vol_up">Press the volume up button</string>
<string name="settings_gesture_vol_down">Volume Down</string> <string name="settings_gesture_vol_down">Volume Down Key</string>
<string name="settings_gesture_description_vol_down">Press the volume down button</string> <string name="settings_gesture_description_vol_down">Press the volume down button</string>
<string name="settings_gesture_double_click">Double Click</string> <string name="settings_gesture_double_click">Double Click</string>
<string name="settings_gesture_description_double_click">Double click an empty area</string> <string name="settings_gesture_description_double_click">Double click an empty area</string>
@ -101,8 +101,6 @@
<string name="settings_apps_choose">Choose App</string> <string name="settings_apps_choose">Choose App</string>
<string name="settings_apps_view_all">View all apps</string>
<string name="settings_apps_install">Install apps</string> <string name="settings_apps_install">Install apps</string>
<string name="settings_apps_toast_store_not_found">Store not found</string> <string name="settings_apps_toast_store_not_found">Store not found</string>
@ -148,7 +146,6 @@
<string name="settings_clock_flip_date_time">Flip date and time</string> <string name="settings_clock_flip_date_time">Flip date and time</string>
<string name="settings_theme_wallpaper">Choose a wallpaper</string> <string name="settings_theme_wallpaper">Choose a wallpaper</string>
<string name="settings_launcher_change_wallpaper">Change wallpaper</string>
<string name="settings_launcher_section_display">Display</string> <string name="settings_launcher_section_display">Display</string>
@ -193,7 +190,7 @@
<string name="settings_general_choose_home_screen">Set μLauncher as home screen</string> <string name="settings_general_choose_home_screen">Set μLauncher as home screen</string>
<string name="settings_meta_cant_select_launcher">App Info</string> <string name="settings_meta_cant_select_launcher">App Info</string>
<string name="settings_meta_show_tutorial">View Launcher Tutorial</string> <string name="settings_meta_show_tutorial">View µLauncher Tutorial</string>
<string name="settings_meta_reset">Reset Settings</string> <string name="settings_meta_reset">Reset Settings</string>
<string name="settings_meta_reset_confirm">You are going to discard all your preferences. Continue?</string> <string name="settings_meta_reset_confirm">You are going to discard all your preferences. Continue?</string>
@ -202,14 +199,14 @@
<string name="settings_meta_report_bug">Report a bug</string> <string name="settings_meta_report_bug">Report a bug</string>
<string name="dialog_report_bug_title">Report a bug</string> <string name="dialog_report_bug_title">Report a bug</string>
<string name="dialog_report_bug_info">Thank you for helping to improve µLauncher!\nPlease consider adding the following information to your bug report:</string> <string name="dialog_report_bug_info">Thank you for helping to improve μLauncher!\nPlease consider adding the following information to your bug report:</string>
<string name="dialog_report_bug_button_clipboard">Copy to clipboard</string> <string name="dialog_report_bug_button_clipboard">Copy to clipboard</string>
<string name="dialog_report_bug_security_info">Please do not report security vulnerabilities publicly on GitHub, but use the following instead:</string> <string name="dialog_report_bug_security_info">Please do not report security vulnerabilities publicly on GitHub, but use the following instead:</string>
<string name="dialog_report_bug_button_security">Report a security vulnerability</string> <string name="dialog_report_bug_button_security">Report a security vulnerability</string>
<string name="dialog_report_bug_create_report">Create report</string> <string name="dialog_report_bug_create_report">Create report</string>
<string name="settings_meta_fork_contact">Contact the developer of the fork</string> <string name="settings_meta_fork_contact">Contact the developer of the fork</string>
<string name="settings_meta_join_chat">Join µLauncher chat</string> <string name="settings_meta_join_chat">Join μLauncher chat</string>
<string name="settings_meta_donate">Donate</string> <string name="settings_meta_donate">Donate</string>
<string name="settings_meta_privacy">Privacy Policy</string> <string name="settings_meta_privacy">Privacy Policy</string>
@ -240,13 +237,10 @@
<string name="list_app_hidden_remove">Show</string> <string name="list_app_hidden_remove">Show</string>
<string name="list_app_rename">Rename</string> <string name="list_app_rename">Rename</string>
<string name="list_removed">Removed the selected application</string>
<string name="list_not_removed">Unable to remove application</string>
<string name="list_apps_search_hint">Search</string> <string name="list_apps_search_hint">Search</string>
<string name="list_apps_search_hint_no_auto_launch">Search (no auto launch)</string> <string name="list_apps_search_hint_no_auto_launch">Search (no auto launch)</string>
<string name="list_other_settings">µLauncher Settings</string> <string name="list_other_settings">μLauncher Settings</string>
<string name="list_other_list">All Applications</string> <string name="list_other_list">All Applications</string>
<string name="list_other_list_favorites">Favorite Applications</string> <string name="list_other_list_favorites">Favorite Applications</string>
<string name="list_other_list_private_space">Private Space</string> <string name="list_other_list_private_space">Private Space</string>
@ -257,15 +251,16 @@
<string name="list_other_track_next">Music: Next</string> <string name="list_other_track_next">Music: Next</string>
<string name="list_other_track_previous">Music: Previous</string> <string name="list_other_track_previous">Music: Previous</string>
<string name="list_other_track_play_pause">Music: Play / Pause</string> <string name="list_other_track_play_pause">Music: Play / Pause</string>
<string name="list_other_expand_notifications_panel">Expand notifications panel</string> <string name="list_other_expand_notifications_panel">Expand Notifications Panel</string>
<string name="list_other_nop">Do nothing</string> <string name="list_other_recent_apps">Recent Apps</string>
<string name="list_other_nop">Do Nothing</string>
<string name="list_other_lock_screen">Lock Screen</string> <string name="list_other_lock_screen">Lock Screen</string>
<string name="list_other_torch">Toggle Torch</string> <string name="list_other_torch">Toggle Torch</string>
<string name="list_other_launch_other_launcher">Launch Other Home Screen</string>
<!-- Pin shortcuts --> <!-- Pin shortcuts -->
<string name="pin_shortcut_title">Add Shortcut</string> <string name="pin_shortcut_title">Add Shortcut</string>
<string name="pin_shortcut_button_bind">Bind to gesture</string> <string name="pin_shortcut_button_bind">Bind to gesture</string>
<string name="pin_shortcut_button_ok">Ok</string>
<string name="pin_shortcut_switch_visible">Show in app list</string> <string name="pin_shortcut_switch_visible">Show in app list</string>
<!-- <!--
@ -274,22 +269,29 @@
- -
--> -->
<string name="tutorial_title">Tutorial</string> <string name="tutorial_title">Tutorial</string>
<string name="tutorial_start_text">Take a few seconds to learn how to use this Launcher!</string> <string name="tutorial_start_text">👋\n\nTake a few seconds to learn how to use this Launcher!</string>
<string name="tutorial_concept_title">Concept</string> <string name="tutorial_concept_title">Concept</string>
<string name="tutorial_concept_text">Launcher is designed to be minimal, efficient and free of distraction. It is free of payments, ads and tracking services.</string> <string name="tutorial_concept_text">μLauncher is designed to be minimal, efficient and free of distraction.
<string name="tutorial_concept_text_2">The app is open-source (MIT license) and available on GitHub! Make sure to check out the repository!</string> \n\nIt contains no ads and collects no data.</string>
<string name="tutorial_concept_text_2">It is free software (MIT license)!\nMake sure to check out the repository!</string>
<string name="tutorial_concept_label_version">Version</string>
<string name="tutorial_usage_title">Usage</string> <string name="tutorial_usage_title">Usage</string>
<string name="tutorial_usage_text">Your home screen contains the local date and time. No distraction.</string> <string name="tutorial_usage_text">Your home screen contains the local date and time. No distraction.</string>
<string name="tutorial_usage_text_2">You can launch your apps with a single swipe or button press. Choose some in the next slide.</string> <string name="tutorial_usage_text_2">You can launch your most important apps with touch gestures or button presses.</string>
<string name="tutorial_app_list_title">All Apps</string>
<string name="tutorial_app_list_text">You can quickly search through all apps in the app list.\n\nSwipe up to open it, or bind it to a different gesture.</string>
<string name="tutorial_app_list_text_2">Once only one app matches, it launches automatically.\nThis can be disabled by prefixing the query with a space.</string>
<string name="tutorial_setup_title">Setup</string> <string name="tutorial_setup_title">Setup</string>
<string name="tutorial_setup_text">We chose some default apps for you. You can change them now if you want to:</string> <string name="tutorial_setup_text">We chose some default apps for you. You can change them now if you want to:</string>
<string name="tutorial_setup_text_2">You can also change your selection later.</string> <string name="tutorial_setup_text_2">You can also change your selection later.</string>
<string name="tutorial_finish_title">Let\'s go!</string> <string name="tutorial_finish_title">Let\'s go!</string>
<string name="tutorial_finish_text">You are ready to get started! I hope this is of great value to you! - Finn (who made Launcher) \tand Josia (who made some improvements and maintains the fork μLauncher)</string> <string name="tutorial_finish_text">You are ready to get started!\n\nI hope this is of great value to you!\n\n- Finn (who made Launcher) and Josia (who made some improvements and maintains the fork μLauncher)</string>
<string name="tutorial_finish_button">Start</string> <string name="tutorial_finish_button">Start</string>
@ -301,28 +303,35 @@
<string name="snackbar_app_hidden">App hidden. You can make it visible again in settings.</string> <string name="snackbar_app_hidden">App hidden. You can make it visible again in settings.</string>
<string name="undo">Undo</string> <string name="undo">Undo</string>
<string name="list_other_expand_settings_panel">Quick Settings</string> <string name="list_other_expand_settings_panel">Quick Settings</string>
<string name="toast_device_admin_not_enabled">µLauncher needs to be a device admin in order to lock the screen.</string> <string name="toast_device_admin_not_enabled">μLauncher needs to be a device admin in order to lock the screen.</string>
<string name="device_admin_explanation">This is required for the lock screen action.</string> <string name="device_admin_explanation">This is required for the lock screen action.</string>
<string name="device_admin_description">Enable the lock screen action</string> <string name="device_admin_description">Enable the lock screen action</string>
<string name="alert_no_torch_found">No camera with torch detected.</string> <string name="alert_no_torch_found">No camera with torch detected.</string>
<string name="alert_torch_access_exception">Error: Can\'t access torch.</string> <string name="alert_torch_access_exception">Error: Can\'t access torch.</string>
<string name="alert_lock_screen_failed">Error: Failed to lock screen. (If you just upgraded the app, try to disable and re-enable the accessibility service in phone settings)</string> <string name="alert_lock_screen_failed">Error: Failed to lock screen. (If you just upgraded the app, try to disable and re-enable the accessibility service in phone settings)</string>
<string name="alert_recent_apps_failed">Error: Failed to show recent apps. (If you just upgraded the app, try to disable and re-enable the accessibility service in phone settings)</string>
<string name="alert_enable_accessibility_failed">Error: Failed to enable the accessibility service.</string>
<string name="toast_accessibility_service_not_enabled">μLauncher\'s accessibility service is not enabled. Please enable it in settings</string> <string name="toast_accessibility_service_not_enabled">μLauncher\'s accessibility service is not enabled. Please enable it in settings</string>
<string name="toast_private_space_locked">Private space locked</string> <string name="toast_private_space_locked">Private space locked</string>
<string name="toast_private_space_unlocked">Private space unlocked</string> <string name="toast_private_space_unlocked">Private space unlocked</string>
<string name="toast_private_space_not_available">Private space is not available</string> <string name="toast_private_space_not_available">Private space is not available</string>
<string name="toast_private_space_default_home_screen">µLauncher needs to be the default home screen to access private space.</string> <string name="toast_private_space_default_home_screen">μLauncher needs to be the default home screen to access private space.</string>
<string name="tooltip_lock_private_space">Lock private space</string> <string name="tooltip_lock_private_space">Lock private space</string>
<string name="tooltip_unlock_private_space">Unlock private space</string> <string name="tooltip_unlock_private_space">Unlock private space</string>
<string name="toast_lock_screen_not_supported">Error: Locking the screen using accessibility is not supported on this device. Please use device admin instead.</string> <string name="toast_lock_screen_not_supported">Error: Locking the screen using accessibility is not supported on this device. Please use device admin instead.</string>
<string name="accessibility_service_name">µLauncher - lock screen</string> <string name="accessibility_service_name">μLauncher</string>
<string name="accessibility_service_description"> <string name="accessibility_service_description">
Setting µLauncher as an accessibility service allows it to lock the screen. Setting μLauncher as an accessibility service allows it to lock the screen and open the recent apps menu.
Note that excessive permissions are required. You should never grant such permissions lightly to any app. Note that excessive permissions are required. You should never grant such permissions lightly to any app.
µLauncher will use the accessibility service only for locking the screen. You can check the source code to make sure. μLauncher will use the accessibility service only for performing the following actions when requested by the user:
Note that locking the screen can also be accomplished by granting µLauncher device administrator permissions. However that method doesn\'t work with fingerprint and face unlock. * lock screen
* open recent apps
μLauncher will never use the accessibility service to collect data. You can check the source code to make sure.
Note that locking the screen can also be accomplished by granting μLauncher device administrator permissions. However that method doesn\'t work with fingerprint and face unlock.
</string> </string>
@ -340,7 +349,7 @@
<h3>Accessibility Service</h3> <h3>Accessibility Service</h3>
Requires excessive privileges. Requires excessive privileges.
µLauncher will use those privileges only for locking the screen. μLauncher will use those privileges only for locking the screen.
<br/> <br/>
(You really should not trust a random app you just downloaded with such a claim, but you can check the <a href=\"https://github.com/jrpie/Launcher\">source code</a>.) (You really should not trust a random app you just downloaded with such a claim, but you can check the <a href=\"https://github.com/jrpie/Launcher\">source code</a>.)
<br/> <br/>
@ -354,20 +363,23 @@
<string name="screen_lock_method_use_accessibility">Use Accessibility Service</string> <string name="screen_lock_method_use_accessibility">Use Accessibility Service</string>
<string name="screen_lock_method_use_device_admin">Use Device Admin</string> <string name="screen_lock_method_use_device_admin">Use Device Admin</string>
<string name="settings_actions_lock_method">Choose method for locking the screen</string> <string name="settings_actions_lock_method">Choose method for locking the screen</string>
<string name="dialog_rename_ok">Ok</string>
<string name="dialog_rename_title">Rename %1$s</string> <string name="dialog_rename_title">Rename %1$s</string>
<string name="dialog_select_color_red">Red</string> <string name="dialog_select_color_red">Red</string>
<string name="dialog_select_color_alpha">Alpha</string> <string name="dialog_select_color_alpha">Alpha</string>
<string name="dialog_select_color_blue">Blue</string> <string name="dialog_select_color_blue">Blue</string>
<string name="dialog_select_color_green">Green</string> <string name="dialog_select_color_green">Green</string>
<string name="dialog_select_color_ok">Ok</string>
<string name="dialog_select_color_color_hex">Color</string> <string name="dialog_select_color_color_hex">Color</string>
<string name="dialog_choose_color_title">Choose color</string> <string name="dialog_choose_color_title">Choose color</string>
<string name="dialog_consent_accessibility_privileges">I am aware that this will grant far-reaching privileges to µLauncher.</string> <string name="dialog_consent_accessibility_privileges">I am aware that this will grant far-reaching privileges to μLauncher.</string>
<string name="dialog_consent_accessibility_other_options">I am aware that other options exist (using device administrator privileges or the power button).</string> <string name="dialog_consent_accessibility_other_options">I am aware that other options exist (using device administrator privileges or the power button).</string>
<string name="dialog_consent_accessibility_consent">I consent to µLauncher using the accessibility service to provide functionality unrelated to accessibility.</string> <string name="dialog_consent_accessibility_consent">I consent to μLauncher using the accessibility service to provide functionality unrelated to accessibility.</string>
<string name="dialog_consent_accessibility_data_collection">I consent to µLauncher not collecting any data.</string> <string name="dialog_consent_accessibility_data_collection">I consent to μLauncher not collecting any data.</string>
<string name="dialog_consent_accessibility_text"><![CDATA[You are about to activate the accessibility service. This will grant <strong>far-reaching privileges</strong> to µLauncher.<br/>µLauncher will use these privileges <strong>only to lock the screen</strong>. µLauncher <strong>will never collect any data</strong>. In particular, µLauncher does not use the accessibility service to collect any data.]]></string> <string name="dialog_consent_accessibility_text"><![CDATA[You are about to activate the accessibility service. This will grant <strong>far-reaching privileges</strong> to μLauncher.<br/>μLauncher will use these privileges <strong>only</strong> to perform the following actions:
<ul>
<li>Lock Screen</li>
<li>Recent Apps</li>
</ul>
μLauncher <strong>will never collect any data</strong>. In particular, μLauncher does not use the accessibility service to collect any data.]]></string>
<string name="dialog_consent_accessibility_title">Activating the Accessibility Service</string> <string name="dialog_consent_accessibility_title">Activating the Accessibility Service</string>
<string name="dialog_consent_accessibility_ok">Activate Accessibility Service</string> <string name="dialog_consent_accessibility_ok">Activate Accessibility Service</string>
<string name="dialog_cancel">Cancel</string> <string name="dialog_cancel">Cancel</string>

View file

@ -105,17 +105,6 @@
<item name="android:fontFamily">serif</item> <item name="android:fontFamily">serif</item>
</style> </style>
<style name="textColorWhite">
<item name="android:textColor">@color/finnmglasTheme_text_color</item>
</style>
<style name="textColorWhiteAndShadow">
<item name="android:textColor">@color/finnmglasTheme_text_color</item>
</style>
<style name="textColorBlack">
<item name="android:textColor">#000</item>
</style>
<style name="PopupMenuCustom" parent="@android:style/Widget.PopupMenu" tools:keep="@style/PopupMenuCustom"> <style name="PopupMenuCustom" parent="@android:style/Widget.PopupMenu" tools:keep="@style/PopupMenuCustom">
<item name="android:popupBackground">#252827</item> <item name="android:popupBackground">#252827</item>
</style> </style>

View file

@ -2,7 +2,7 @@
buildscript { buildscript {
ext.kotlin_version = '2.0.0' ext.kotlin_version = '2.0.0'
ext.android_plugin_version = '8.8.1' ext.android_plugin_version = '8.9.1'
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
@ -10,7 +10,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:8.8.1' classpath 'com.android.tools.build:gradle:8.9.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.android.tools.build:gradle:$android_plugin_version" classpath "com.android.tools.build:gradle:$android_plugin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"

View file

@ -47,3 +47,4 @@ The complete list of changes can be viewed [here](https://github.com/jrpie/launc
--- ---
[original-repo]: https://github.com/finnmglas/Launcher [original-repo]: https://github.com/finnmglas/Launcher
[hack-font]: https://sourcefoundry.org/hack/

View file

@ -0,0 +1,5 @@
* Improved tutorial (thank you, wassupluke!)
* Added Japanese translation (thank you, anmoti!)
* Improved Chinese translation (thank you, nobody!)
* Fixed bug where gesture navigation triggered long click
* Fixed bug: switching from grayscale icons back to normal now works as expected

View file

@ -0,0 +1 @@
* Fixed bug where keyboard does not open automatically

View file

@ -0,0 +1 @@
* Fixed gesture detection in landscape orientation

View file

@ -0,0 +1,11 @@
* New action: Launch other launchers
* New action: Show recent apps (workaround for an Android bug)
* Fixed "Set µLauncher as home screen" button
* Size of "choose app" button was limited
* Added Arabic translation (thank you, letterhaven!)
* Started Lithuanian translation (thank you, IdeallyGrey!)
* Improved Chinese translation (thank you, monkeyotg!)
* Improved Portuguese translation (thank you, "Vossa Excelencia"!)
* Improved Spanish translation (thank you, T!)

View file

@ -0,0 +1,22 @@
µLauncherは、スワイプジェスチャとタップだけでアプリを起動できるホーム画面です。
必要最小限で、効率的で、気が散らない。
ホーム画面には日付、時刻、壁紙のみが表示されます。
戻るを押すか上にスワイプすると(これは設定可能)、
インストールされているすべてのアプリのリストが開き、効率的に検索できます。
このアプリは、Finn M Glas氏のアプリ <a href="https://f-droid.org/packages/com.finnmglas.launcher/">Launcher</a> のフォークです。
機能:
* 35種のジェスチャーにアクションを設定できます。
* アクションは以下のいずれかになります:
- アプリを起動
- アプリを表示
- お気に入りのアプリを表示
- ボリュームを上げる/下げる
- 音楽: 次/前の曲
- 画面をロック
- ライトの切り替え
- 通知 / クイック設定を表示
* 仕事用プロファイルに対応しているので、Shelterなどのアプリも使えます。

View file

@ -0,0 +1 @@
気が散らない、最小限の Android ホーム画面。

View file

@ -0,0 +1 @@
µLauncher

View file

@ -1,19 +1,21 @@
µLauncher 是主屏幕启动程序,允许您使用滑动手势和按下按钮来启动其他应用。 µLauncher 是桌面启动器程序,允许您使用各种滑动手势和按下按钮来启动其他应用。
它是<b>最小、高效且无干扰</b> 它是<b>简约、高效且无干扰</b>的
您的主屏幕仅显示日期、时间和壁纸。 您的桌面仅显示日期、时间和壁纸。
按返回或向上滑动(可以配置)打开 按返回按键或向上滑动(可自定义其他手势)即可打开
所有已安装应用的列表,可以高效地搜索。 应用程序列表,且支持高效地搜索。
这是 Finn M Glas 的应用 <a href="https://f-droid.org/packages/com.finnmglas.launcher/">Launcher</a> 的一个 fork 本启动器是基于 Finn M Glas 开发的 <a href="https://f-droid.org/packages/com.finnmglas.launcher/">Launcher 启动器</a> 的一个派生应用程序
显著变化: 功能:
* 边缘手势:可分为屏幕边缘滑动和中心滑动的设置。 * 您可以设定 35 个不同的手势操作。如:
* 与工作配置文件兼容,因此可以使用 Shelter 等应用。 - 启动一个应用程序
* 此应用使用系统壁纸而不是自定义解决方案。 - 打开应用程序列表
* 字体已更改为 Hack。 - 打开收藏的应用程序列表
* Material 图标所取代了 Font Awesome 图标。 - 调整音量
* 移除了主屏幕上的齿轮按钮。按返回按钮会打开应用列表,可以从那里访问应用设置。 - 快速切换 上一首/下一首 音乐
* 搜索算法已修改为优先匹配应用名称开头的内容即当搜索“te”时“termux”会排在“notes”之前。 - 锁定屏幕
* 搜索栏已移动到屏幕底部 - 开启/关闭 手机闪光灯
- 展开通知栏 / 快捷设定栏
* 兼容工作空间配置,因此支持使用 Shelter 等应用。

View file

@ -1 +1 @@
无干扰的最小主屏幕应用启动器。 无干扰的简约风格启动器。

View file

@ -19,6 +19,6 @@ android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
android.nonTransitiveRClass=false android.nonTransitiveRClass=true
android.nonFinalResIds=false android.nonFinalResIds=true
org.gradle.configuration-cache=true org.gradle.configuration-cache=true

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME