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.