diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 81b3adcf4..095abb5bb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -65,11 +65,6 @@
android:exported="true"
android:screenOrientation="sensorLandscape"
android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize|density|keyboard|keyboardHidden|navigation">
-
-
-
-
-
@@ -88,6 +83,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
> = listOf(
+ DARK to R.string.setup_launcher_icon_dark,
+ LIGHT to R.string.setup_launcher_icon_light,
+ )
+
+ private fun component(context: Context, style: String) =
+ ComponentName(context, aliases.getValue(style))
+
+ private fun enabled(context: Context, style: String): Boolean =
+ when (context.packageManager.getComponentEnabledSetting(component(context, style))) {
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED -> true
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT -> style == DARK
+ else -> false
+ }
+
+ fun current(context: Context): String = aliases.keys.firstOrNull { enabled(context, it) } ?: DARK
+
+ fun activity(context: Context): ComponentName = component(context, current(context))
+
+ fun set(context: Context, style: String) {
+ if (style !in aliases || style == current(context)) return
+ val pm = context.packageManager
+ pm.setComponentEnabledSetting(component(context, style),
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)
+ aliases.keys.filter { it != style }.forEach {
+ pm.setComponentEnabledSetting(component(context, it),
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
+ }
+ }
+}
diff --git a/app/src/main/java/com/droiddeck/launcher/MainActivity.kt b/app/src/main/java/com/droiddeck/launcher/MainActivity.kt
index 279692714..ec5ff76c4 100644
--- a/app/src/main/java/com/droiddeck/launcher/MainActivity.kt
+++ b/app/src/main/java/com/droiddeck/launcher/MainActivity.kt
@@ -164,6 +164,7 @@ class MainActivity : ComponentActivity() {
private var downloadMirror by mutableStateOf("")
private var downloadPrefix by mutableStateOf("")
private var animationsEnabled by mutableStateOf(true)
+ private var launcherIcon by mutableStateOf(LauncherIcon.DARK)
private var gameStoresEnabled by mutableStateOf(true)
private var gameStoresSpeedTier by mutableStateOf("fast")
private var storesOpenTab by mutableStateOf(SessionPrefs.STORES_OPEN_LIBRARY)
@@ -484,6 +485,20 @@ class MainActivity : ComponentActivity() {
pickSaveDir.launch(InAppFilePicker.buildDirIntent(this, getString(R.string.game_file_folder), gameSyncFolder))
}
+ private fun switchLauncherIcon(style: String): Boolean {
+ val before = LauncherIcon.current(this)
+ LauncherIcon.set(this, style)
+ launcherIcon = LauncherIcon.current(this)
+ if (launcherIcon == before) return false
+ // Android finishes activities started through the alias that was just disabled.
+ startActivity(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER)
+ .setComponent(LauncherIcon.activity(this))
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
+ .putExtra(com.droiddeck.launcher.stores.download.StoreDownloadService.EXTRA_NAV, "setup:launcher"))
+ finishAndRemoveTask()
+ return true
+ }
+
private fun readGameIntent(request: Intent) {
request.getStringExtra(com.droiddeck.launcher.stores.download.StoreDownloadService.EXTRA_NAV)?.let { navRequest = it; request.removeExtra(com.droiddeck.launcher.stores.download.StoreDownloadService.EXTRA_NAV) }
shortcutPicker = request.action == Intent.ACTION_CREATE_SHORTCUT
@@ -739,6 +754,7 @@ class MainActivity : ComponentActivity() {
downloadPrefix = DownloadSource.custom(this)
DownloadSource.probe()
animationsEnabled = SessionPrefs.animationsEnabled(this)
+ launcherIcon = LauncherIcon.current(this)
gameStoresEnabled = SessionPrefs.gameStoresEnabled(this)
gameStoresSpeedTier = SessionPrefs.gameStoresSpeedTier(this)
storesOpenTab = SessionPrefs.storesOpenTab(this)
@@ -799,6 +815,7 @@ class MainActivity : ComponentActivity() {
downloadMirror = downloadMirror,
downloadPrefix = downloadPrefix,
animationsEnabled = animationsEnabled,
+ launcherIcon = launcherIcon,
gameStoresEnabled = gameStoresEnabled,
gameStoresSpeedTier = gameStoresSpeedTier,
storesOpenTab = storesOpenTab,
@@ -952,6 +969,7 @@ class MainActivity : ComponentActivity() {
onPageBack = { showPerformance = false; showComponents = false; showMapping = false },
onGameStoresEnabled = { on -> SessionPrefs.setGameStoresEnabled(this, on); gameStoresEnabled = on },
onTheme = { id -> SessionPrefs.setTheme(this, id); theme = id },
+ onLauncherIcon = { style -> switchLauncherIcon(style) },
onLanguage = { tag ->
if (tag != com.droiddeck.launcher.core.AppLanguage.chosen(this)) {
com.droiddeck.launcher.core.AppLanguage.setChosen(this, tag)
@@ -2045,7 +2063,7 @@ class MainActivity : ComponentActivity() {
com.droiddeck.launcher.core.AppLanguage.setChosen(this, com.droiddeck.launcher.core.AppLanguage.SYSTEM)
if (!ok) android.widget.Toast.makeText(this, R.string.setup_reset_settings_partial, android.widget.Toast.LENGTH_LONG).show()
com.droiddeck.launcher.ui.Motion.refresh(this)
- recreate()
+ if (!switchLauncherIcon(LauncherIcon.DARK)) recreate()
}
}, "reset-settings").start()
}
diff --git a/app/src/main/java/com/droiddeck/launcher/frontend/GameShortcuts.kt b/app/src/main/java/com/droiddeck/launcher/frontend/GameShortcuts.kt
index d5ca08be2..80cdd93c1 100644
--- a/app/src/main/java/com/droiddeck/launcher/frontend/GameShortcuts.kt
+++ b/app/src/main/java/com/droiddeck/launcher/frontend/GameShortcuts.kt
@@ -10,6 +10,7 @@ import android.graphics.BitmapFactory
import android.graphics.drawable.Icon
import android.net.Uri
import android.widget.Toast
+import com.droiddeck.launcher.LauncherIcon
import com.droiddeck.launcher.MainActivity
import com.droiddeck.launcher.R
import java.io.File
@@ -23,7 +24,7 @@ object GameShortcuts {
val name = game.name.ifBlank { context.getString(R.string.app_name) }
val icon = iconBitmap(game)?.let(Icon::createWithBitmap) ?: Icon.createWithResource(context, R.mipmap.ic_launcher)
return ShortcutInfo.Builder(context, "game:${game.gameIdString}")
- .setActivity(android.content.ComponentName(context, MainActivity::class.java))
+ .setActivity(LauncherIcon.activity(context))
.setShortLabel(name.take(40)).setLongLabel(name).setIcon(icon)
.setIntent(launchIntent(context, game.gameIdString)).build()
}
diff --git a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt
index 543778b34..0b9e784e5 100644
--- a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt
+++ b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndScreen.kt
@@ -138,6 +138,7 @@ class FrontEndState(
val downloadMirror: String = "",
val downloadPrefix: String = "",
val animationsEnabled: Boolean = true,
+ val launcherIcon: String = com.droiddeck.launcher.LauncherIcon.DARK,
val gameStoresEnabled: Boolean = true,
val gameStoresSpeedTier: String = "fast",
val storesOpenTab: String = SessionPrefs.STORES_OPEN_LIBRARY,
@@ -205,6 +206,7 @@ class FrontEndActions(
val onTheme: (String) -> Unit = {},
val onLanguage: (String) -> Unit = {},
val onAppScale: (Int) -> Unit = {},
+ val onLauncherIcon: (String) -> Unit = {},
val onOrientation: (Int) -> Unit = {},
val onLauncherFullscreen: (Boolean) -> Unit = {},
val onAnimationsEnabled: (Boolean) -> Unit = {},
@@ -386,6 +388,7 @@ private fun FrontEndScreenBody(s: FrontEndState, a: FrontEndActions, page: (@Com
when (target) {
"stores:downloads" -> { com.droiddeck.launcher.stores.StoresState.openDownloads = true; selected = "stores" }
"components" -> a.onComponents(true)
+ "setup:launcher" -> { SetupTabs.openLauncher = true; selected = "setup" }
else -> selected = target
}
a.onNavigated()
diff --git a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt
index 359450dae..42eb27d69 100644
--- a/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt
+++ b/app/src/main/java/com/droiddeck/launcher/ui/FrontEndSetup.kt
@@ -86,6 +86,11 @@ import com.droiddeck.launcher.R
private enum class CheckState { OK, WARN, BUSY }
private const val STORAGE_TAB = 3
+private const val LAUNCHER_TAB = 2
+
+internal object SetupTabs {
+ var openLauncher = false
+}
private const val GLASSES_TAB = 5
@Composable
@@ -177,7 +182,8 @@ internal fun SetupPanel(
onSave = { a.onDownloadPrefix(it); editDownloadPrefix = false },
)
val tabs = listOf(stringResource(R.string.setup_tab_overview), stringResource(R.string.setup_tab_controller), stringResource(R.string.setup_tab_launcher), stringResource(R.string.setup_tab_storage), stringResource(R.string.setup_tab_diagnostics), stringResource(R.string.setup_tab_glasses))
- var tab by rememberSaveable { mutableStateOf(0) }
+ var tab by rememberSaveable { mutableStateOf(if (SetupTabs.openLauncher) LAUNCHER_TAB else 0) }
+ SetupTabs.openLauncher = false
val chipFocus = remember { List(tabs.size) { FocusRequester() } }
var tabTurned by remember { mutableStateOf(false) }
val pick: (Int) -> Unit = { i -> tab = i; tabTurned = true }
@@ -362,6 +368,11 @@ internal fun SetupPanel(
)
}, s.appScale, onPick = a.onAppScale,
)
+ ChoiceRow(
+ host, "launcher-icon", stringResource(R.string.setup_launcher_icon), null,
+ com.droiddeck.launcher.LauncherIcon.options.map { (style, label) -> style to stringResource(label) },
+ s.launcherIcon, onPick = a.onLauncherIcon,
+ )
ToggleRow(host, "launcher-animations", stringResource(R.string.setup_animations), null,
s.animationsEnabled, onChange = a.onAnimationsEnabled)
LanguageRow(host, s.language, a.onLanguage)
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light.xml
new file mode 100644
index 000000000..275b9dfdd
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background_light.png b/app/src/main/res/mipmap-hdpi/ic_launcher_background_light.png
new file mode 100644
index 000000000..0ed586fce
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_background_light.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground_light.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground_light.png
new file mode 100644
index 000000000..e89aa93dd
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground_light.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background_light.png b/app/src/main/res/mipmap-mdpi/ic_launcher_background_light.png
new file mode 100644
index 000000000..f1bc876a2
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_background_light.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground_light.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground_light.png
new file mode 100644
index 000000000..ebb44b431
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground_light.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background_light.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_background_light.png
new file mode 100644
index 000000000..c7853a5a6
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_background_light.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground_light.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground_light.png
new file mode 100644
index 000000000..2e96d0934
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground_light.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background_light.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background_light.png
new file mode 100644
index 000000000..f8588e220
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background_light.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_light.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_light.png
new file mode 100644
index 000000000..134c0842a
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground_light.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background_light.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background_light.png
new file mode 100644
index 000000000..8cf80ad86
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background_light.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_light.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_light.png
new file mode 100644
index 000000000..7cc49e91c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground_light.png differ
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 3381ca393..fcc1b2258 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -741,6 +741,9 @@
%1$d%% (افتراضي)
المظهر
مظهر المشغّل
+ أيقونة التطبيق
+ داكنة
+ فاتحة
استخدام كشاشة رئيسية
يمكن أن يكون DroidDeck تطبيق الشاشة الرئيسية
لا يُعرَض DroidDeck أبدًا كتطبيق للشاشة الرئيسية
diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml
index 3ff6b8521..877992f59 100644
--- a/app/src/main/res/values-b+es+419/strings.xml
+++ b/app/src/main/res/values-b+es+419/strings.xml
@@ -752,6 +752,9 @@
%1$d%% (predeterminada)
Tema
Apariencia del launcher
+ Ícono de la app
+ Oscuro
+ Claro
Usar como pantalla de inicio
DroidDeck puede ser la app de inicio
DroidDeck nunca se ofrece como app de inicio
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index f562b8bb8..4e14e9940 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (по подразбиране)
Тема
Облик на лаунчъра
+ Икона на приложението
+ Тъмна
+ Светла
Използване като начален екран
DroidDeck може да бъде приложението за начален екран
DroidDeck никога не се предлага като приложение за начален екран
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index df75b0192..366be9edc 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -735,6 +735,9 @@
%1$d %% (výchozí)
Téma
Vzhled spouštěče
+ Ikona aplikace
+ Tmavá
+ Světlá
Použít jako domovskou obrazovku
DroidDeck může být domovská aplikace
DroidDeck se nikdy nenabízí jako domovská aplikace
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 931534a37..46d435398 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (standard)
Tema
Launcherens udseende
+ Appikon
+ Mørk
+ Lys
Brug som startskærm
DroidDeck kan være Home-appen
DroidDeck tilbydes aldrig som Home-app
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index dfaa30fed..66b18fde8 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -718,6 +718,9 @@
%1$d %% (Standard)
Design
Aussehen des Launchers
+ App-Symbol
+ Dunkel
+ Hell
Als Startbildschirm verwenden
DroidDeck kann die Startbildschirm-App sein
DroidDeck wird nie als Startbildschirm-App angeboten
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 7efafb770..786b4ddb5 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (Προεπιλογή)
Θέμα
Εμφάνιση εκκινητή
+ Εικονίδιο εφαρμογής
+ Σκούρο
+ Ανοιχτό
Χρήση ως αρχική οθόνη
Το DroidDeck μπορεί να είναι η εφαρμογή αρχικής οθόνης
Το DroidDeck δεν προτείνεται ποτέ ως εφαρμογή αρχικής οθόνης
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index ccc1e9e37..7db317747 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (predeterminada)
Tema
Apariencia del launcher
+ Icono de la app
+ Oscuro
+ Claro
Usar como pantalla de inicio
DroidDeck puede ser la app de inicio
DroidDeck nunca se ofrece como app de inicio
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 9b156663c..de265dcab 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -729,6 +729,9 @@
%1$d %% (Oletus)
Teema
Käynnistimen ulkoasu
+ Sovelluskuvake
+ Tumma
+ Vaalea
Käytä Aloitusnäyttönä
DroidDeck voi olla kotisovellus
DroidDeckiä ei koskaan tarjota kotisovellukseksi
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index fc79c4e3c..1d09298d5 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (par défaut)
Thème
Apparence du lanceur
+ Icône de l\'app
+ Sombre
+ Clair
Utiliser comme écran d\'accueil
DroidDeck peut être utilisé comme application d\'écran d\'accueil
DroidDeck ne sera pas proposé comme application d\'écran d\'accueil
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index a9cbd38f3..90c47ff45 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (डिफ़ॉल्ट)
थीम
लॉन्चर की दिखावट
+ ऐप आइकन
+ गहरा
+ हल्का
होम स्क्रीन के तौर पर इस्तेमाल करें
DroidDeck होम ऐप हो सकता है
DroidDeck को होम ऐप के तौर पर कभी नहीं दिखाया जाता
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 747aac900..96cb5ed36 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (Alapértelmezett)
Téma
Az indítóalkalmazás megjelenése
+ Alkalmazásikon
+ Sötét
+ Világos
Használat kezdőképernyőként
A DroidDeck lehet a kezdőképernyő alkalmazás
A DroidDeck soha nem jelenik meg kezdőképernyő alkalmazásként
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 2c695930b..9ab984dce 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -726,6 +726,9 @@
%1$d%% (Default)
Tema
Tampilan peluncur
+ Ikon aplikasi
+ Gelap
+ Terang
Gunakan sebagai Layar Utama
DroidDeck dapat menjadi aplikasi Utama
DroidDeck tidak pernah ditawarkan sebagai aplikasi Utama
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 4d6cb901c..cd769f615 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -721,6 +721,9 @@
%1$d%% (predefinita)
Tema
Aspetto del launcher
+ Icona dell\'app
+ Scura
+ Chiara
Usa come schermata Home
DroidDeck può essere l\'app Home
DroidDeck non viene mai proposta come app Home
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 2df5383a9..b350ede00 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -726,6 +726,9 @@
%1$d%%(デフォルト)
テーマ
ランチャーの外観
+ アプリアイコン
+ ダーク
+ ライト
ホーム画面として使用
DroidDeckをホームアプリとして使用できます
DroidDeckはホームアプリとして提供されません
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 0705efab9..f076dc4fb 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -726,6 +726,9 @@
%1$d%%(기본값)
테마
런처 외관
+ 앱 아이콘
+ 다크
+ 라이트
홈 화면으로 사용
DroidDeck을 홈 앱으로 사용할 수 있습니다
DroidDeck은 홈 앱으로 제공되지 않습니다
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index 6729d1e58..344e02520 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -726,6 +726,9 @@
%1$d%% (Lalai)
Tema
Rupa pelancar
+ Ikon apl
+ Gelap
+ Cerah
Gunakan sebagai skrin Utama
DroidDeck boleh menjadi apl Utama
DroidDeck tidak sekali-kali ditawarkan sebagai apl Utama
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 42962f25a..3b316f00e 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (Standard)
Tema
Launcherens utseende
+ Appikon
+ Mørk
+ Lys
Bruk som Hjem-skjerm
DroidDeck kan være Hjem-appen
DroidDeck tilbys aldri som en Hjem-app
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 46389acca..ec1b209ab 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -729,6 +729,9 @@
%1$d%% (Standaard)
Thema
Uiterlijk van de launcher
+ App-pictogram
+ Donker
+ Licht
Als startscherm gebruiken
DroidDeck kan de startschermapp zijn
DroidDeck wordt nooit aangeboden als startschermapp
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 32634d99b..35a3afaef 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -735,6 +735,9 @@
%1$d%% (domyślnie)
Motyw
Wygląd aplikacji
+ Ikona aplikacji
+ Ciemna
+ Jasna
Użyj jako ekranu głównego
DroidDeck może być aplikacją ekranu głównego
DroidDeck nigdy nie jest proponowany jako aplikacja ekranu głównego
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 13412341a..614ece612 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -721,6 +721,9 @@
%1$d%% (padrão)
Tema
Aspeto do iniciador
+ Ícone da app
+ Escuro
+ Claro
Utilizar como página inicial
O DroidDeck pode ser a app de página inicial
O DroidDeck nunca é proposto como app de página inicial
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index b3d775666..b5c4889e3 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -721,6 +721,9 @@
%1$d%% (padrão)
Tema
Aparência do inicializador
+ Ícone do app
+ Escuro
+ Claro
Usar como tela inicial
O DroidDeck pode ser o app de início
O DroidDeck nunca é oferecido como app de início
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 0453831e3..840d1dfb3 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -732,6 +732,9 @@
%1$d%% (Implicit)
Temă
Aspectul launcherului
+ Pictograma aplicației
+ Întunecată
+ Luminoasă
Folosește ca ecran Acasă
DroidDeck poate fi aplicația Acasă
DroidDeck nu este niciodată oferit ca aplicație Acasă
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 78d237c6c..f939fd97f 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -732,6 +732,9 @@
%1$d%% (по умолчанию)
Тема
Внешний вид лаунчера
+ Значок приложения
+ Тёмный
+ Светлый
Использовать как главный экран
DroidDeck может использоваться как приложение главного экрана
DroidDeck не будет доступен как приложение главного экрана
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 4ddc7eacc..58279d36b 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -729,6 +729,9 @@
%1$d %% (Standard)
Tema
Startprogrammets utseende
+ Appikon
+ Mörk
+ Ljus
Använd som startskärm
DroidDeck kan vara startskärmsappen
DroidDeck erbjuds aldrig som startskärmsapp
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 4bda3c786..f13ce19aa 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -726,6 +726,9 @@
%1$d%% (ค่าเริ่มต้น)
ธีม
รูปลักษณ์ของตัวเปิดแอป
+ ไอคอนแอป
+ มืด
+ สว่าง
ใช้เป็นหน้าจอหลัก
DroidDeck สามารถเป็นแอปหน้าจอหลักได้
DroidDeck จะไม่ถูกเสนอให้เป็นแอปหน้าจอหลัก
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 3322f1c92..7a7e40f23 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -718,6 +718,9 @@
%%%1$d (Varsayılan)
Tema
Başlatıcı görünümü
+ Uygulama simgesi
+ Koyu
+ Açık
Ana ekran olarak kullan
DroidDeck ana ekran uygulaması olabilir
DroidDeck hiçbir zaman ana ekran uygulaması olarak sunulmaz
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index fb30a8e4e..6a19b33c9 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -735,6 +735,9 @@
%1$d%% (стандартно)
Тема
Вигляд лаунчера
+ Значок застосунку
+ Темний
+ Світлий
Використовувати як головний екран
DroidDeck може бути додатком головного екрана
DroidDeck ніколи не пропонується як додаток головного екрана
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 64c63421b..e1f58f9e8 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -726,6 +726,9 @@
%1$d%% (Mặc định)
Giao diện
Giao diện launcher
+ Biểu tượng ứng dụng
+ Tối
+ Sáng
Dùng làm màn hình chính
DroidDeck có thể là ứng dụng Màn hình chính
DroidDeck không bao giờ được đề xuất làm ứng dụng Màn hình chính
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index c0acbc778..caf528050 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -726,6 +726,9 @@
%1$d%%(默认)
主题
启动器外观
+ 应用图标
+ 深色
+ 浅色
用作主屏幕
DroidDeck 可以设为主屏幕应用
系统不会把 DroidDeck 作为主屏幕应用提供
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index a8978f454..252446f85 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -726,6 +726,9 @@
%1$d%%(預設)
主題
啟動器外觀
+ 應用程式圖示
+ 深色
+ 淺色
用作主畫面
DroidDeck 可用作主畫面應用程式
DroidDeck 不會作為主畫面應用程式的選項
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 84195dcd7..10865ff6d 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -726,6 +726,9 @@
%1$d%%(預設)
佈景主題
啟動器外觀
+ 應用程式圖示
+ 深色
+ 淺色
用作主螢幕
DroidDeck 可以作為主螢幕應用程式
DroidDeck 不會作為主螢幕應用程式提供
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d1f8c0203..424d8e35b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -760,6 +760,9 @@
%1$d%% (Default)
Theme
Launcher appearance
+ App icon
+ Dark
+ Light
Use as Home screen
DroidDeck can be the Home app
DroidDeck is never offered as a Home app
diff --git a/app/src/test/java/com/droiddeck/launcher/frontend/GameLaunchLinkTest.kt b/app/src/test/java/com/droiddeck/launcher/frontend/GameLaunchLinkTest.kt
index e23faaf69..9493a630b 100644
--- a/app/src/test/java/com/droiddeck/launcher/frontend/GameLaunchLinkTest.kt
+++ b/app/src/test/java/com/droiddeck/launcher/frontend/GameLaunchLinkTest.kt
@@ -3,6 +3,7 @@ package com.droiddeck.launcher.frontend
import android.content.Intent
import android.net.Uri
import android.app.Activity
+import com.droiddeck.launcher.LauncherIcon
import com.droiddeck.launcher.MainActivity
import com.droiddeck.launcher.frontend.Library
import org.junit.Assert.assertEquals
@@ -68,12 +69,24 @@ class GameShortcutIntentTest {
val launch = requireNotNull(shortcut.intent)
assertEquals("game:8400", shortcut.id)
assertEquals("Geometry Wars: Retro Evolved", shortcut.shortLabel.toString())
- assertEquals(MainActivity::class.java.name, shortcut.activity?.className)
+ assertEquals("com.droiddeck.launcher.LauncherDark", shortcut.activity?.className)
+ assertEquals(MainActivity::class.java.name, launch.component?.className)
assertEquals(Intent.ACTION_VIEW, launch.action)
assertEquals(Uri.parse("droiddeck://game/8400"), launch.data)
assertEquals(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP, launch.flags)
}
+ @Test fun pinnedShortcutFollowsTheLightLauncherIcon() {
+ val activity = Robolectric.buildActivity(Activity::class.java).setup().get()
+ LauncherIcon.set(activity, LauncherIcon.LIGHT)
+
+ GameShortcuts.pin(activity, Library.SteamGame(8400, "Geometry Wars: Retro Evolved", null, "steam", 8400L))
+
+ val shortcut = activity.getSystemService(android.content.pm.ShortcutManager::class.java).pinnedShortcuts.single()
+ assertEquals(LauncherIcon.LIGHT, LauncherIcon.current(activity))
+ assertEquals("com.droiddeck.launcher.LauncherLight", shortcut.activity?.className)
+ }
+
@Test fun actionCreateShortcutUsesAndroidsShortcutResultIntentApi() {
val activity = Robolectric.buildActivity(Activity::class.java).setup().get()
val game = Library.SteamGame(8400, "Geometry Wars: Retro Evolved", null, "steam", 8400L)
diff --git a/artwork/README.md b/artwork/README.md
index 6b2f7de2e..7f4f24ec9 100644
--- a/artwork/README.md
+++ b/artwork/README.md
@@ -2,4 +2,4 @@
`droiddeck-mark.svg` is the editable source for the white split-D mark. The blue orb is `#1A9FFF`; its halo and the two separator bars are transparent cutouts. The bars are centered on x=63.97, the endpoint of the curved half in the original Steam Deck symbol, and use the halo's 15.83-unit thickness. The mark is optically centered in its view box with a small rightward offset to balance its asymmetric silhouette. Place it on black when a background is needed.
-Android currently consumes raster resources for the launcher layers and the Compose logo. The `mipmap-*/ic_launcher_foreground.png` files are density-sized exports of the SVG, with the mark kept inside the adaptive icon safe area. The matching backgrounds are black. `drawable-nodpi/logo.png` composes the same mark on a black circular badge.
+Android currently consumes raster resources for the launcher layers and the Compose logo. The `mipmap-*/ic_launcher_foreground.png` files are density-sized exports of the SVG, with the mark kept inside the adaptive icon safe area. The matching backgrounds are black. The `_light` variants recolor the mark black on a white background and back the light launcher icon users can pick in Settings. `drawable-nodpi/logo.png` composes the same mark on a black circular badge.