From 380d0135c1188aa25bb9c155f0b85d171b6f0e7c Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 16 May 2022 09:49:56 +0530 Subject: [PATCH 001/214] GameSpace: Remove unnecessary assert Signed-off-by: Pranav Vashi --- .../gamespace/settings/PerAppSettingsActivity.kt | 2 +- .../io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt | 3 +-- .../main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt | 5 +---- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt index a0900fe7..7b8702c1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * Copyright (C) 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +20,6 @@ import android.os.Bundle import android.util.Log import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity import dagger.hilt.android.AndroidEntryPoint -import io.chaldeaprjkt.gamespace.utils.assertStarterOrigin @AndroidEntryPoint(CollapsingToolbarBaseActivity::class) class PerAppSettingsActivity : Hilt_PerAppSettingsActivity() { diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt index d6738e7a..2bc808a9 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * Copyright (C) 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,13 +19,11 @@ package io.chaldeaprjkt.gamespace.settings import android.os.Bundle import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity import dagger.hilt.android.AndroidEntryPoint -import io.chaldeaprjkt.gamespace.utils.assertStarterOrigin @AndroidEntryPoint(CollapsingToolbarBaseActivity::class) class SettingsActivity : Hilt_SettingsActivity() { override fun onCreate(savedInstanceState: Bundle?) { - assertStarterOrigin() super.onCreate(savedInstanceState) if (savedInstanceState == null) { supportFragmentManager diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt index feb0fb20..4ea5a830 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * Copyright (C) 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,9 +43,5 @@ val Int.dp fun WindowManager.isPortrait() = maximumWindowMetrics.bounds.width() < maximumWindowMetrics.bounds.height() -fun Activity.assertStarterOrigin() = - intent?.getStringExtra("referer")?.takeIf { it.isNotEmpty() } - ?: throw SecurityException("failed to assert starter origin") - inline fun Context.entryPointOf(): T = EntryPoints.get(applicationContext, T::class.java) From e6d2d32e24a59b1c3123cd754d74dfe67c4e9f8c Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 16 May 2022 10:28:24 +0530 Subject: [PATCH 002/214] GameSpace: Clean up strings for translations Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 36 ++++------ app/src/main/res/values-de/strings.xml | 70 ------------------ app/src/main/res/values-in/strings.xml | 70 ------------------ app/src/main/res/values-ru/strings.xml | 70 ------------------ app/src/main/res/values-zh-rCN/strings.xml | 55 -------------- app/src/main/res/values/arrays.xml | 20 ++++++ app/src/main/res/values/strings.xml | 84 ++++++++++------------ 7 files changed, 71 insertions(+), 334 deletions(-) delete mode 100644 app/src/main/res/values-de/strings.xml delete mode 100644 app/src/main/res/values-in/strings.xml delete mode 100644 app/src/main/res/values-ru/strings.xml delete mode 100644 app/src/main/res/values-zh-rCN/strings.xml diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 20c9a84a..baac656b 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -1,18 +1,20 @@ - + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> - - - - - Game Space - Verwalten Sie Ihre Spieleinstellungen - Wählen Sie ein Spiel - Auto-Helligkeit deaktivieren - Die Helligkeit im Spiel beibehalten - Heads-up deaktivieren - Deaktivieren der Benachrichtigungsvorschau im Spiel - Bibliothek - Bist Du sicher, dass du %1$s aus Deiner Bibliothek entfernen möchtest ? - Suche - Vorübergehende Deaktivierung der Screenshotgeste mit drei Fingern im Spiel - Wischen für Bildschirmfoto deaktivieren - chaldeaprjkt - aktiviert - daktiviert - - Modus - - Nicht unterstützt - Standard - Performance - Akkuschonend - - Heads-up - FPS-Info - Bildschirm wach halten - Bildschirm während des Spiels wach halten - - Klingelmodus im Spiel - - Still - Vibration - Normal - - - Vollbild-Ereignisse blockieren - Verhindern, dass Vollbild-Ereignisse wie eingehende Anrufe im Spiel angezeigt werden - - Spiel konfigurieren - Bevorzugter Modus - - Standard - Performance - Akkuschonend - - - ANGLE verwenden (experimentell) - Verwenden des ANGLE-Renderers anstelle der nativen GLES-Treiber.\nWARNUNG!! Kann Spielgrafiken beschädigen, mit Vorsicht verwenden! - ANGLE ist auf Deinem System nicht verfügbar - - %1$s aus der Bibliothek entfernen - - diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml deleted file mode 100644 index c530e980..00000000 --- a/app/src/main/res/values-in/strings.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - Game Space - Kelola pengaturan permainan Anda - Pilih permainan Anda - Nonaktifkan kecerahan otomatis - Jaga kecerahan tetap stabil saat dalam permainan - Nonaktifkan notifikasi mengambang - Nonaktifkan pemberitahuan notifikasi mengambang saat dalam permainan - Daftar permainan - Anda yakin ingin menghapus %1$s dari daftar permainan Anda? - Cari - Nonaktifkan sementara gerakan usap tiga jari untuk tangkapan layar saat dalam permainan - Nonaktifkan gerakan usap untuk tangkapan layar - chaldeaprjkt - aktifkan - nonaktifkan - - Mode - - Tidak didukung - Standar - Performa - Baterai - - Notifikasi mengambang - Info FPS - Tetap terbangun - Jaga agar layar tetap terbangun saat dalam permainan - - Mode dering dalam permainan - - Diam - Getar - Normal - - - Blokir acara layar penuh - Cegah acara layar penuh seperti panggilan masuk muncul saat dalam permainan - - Konfigurasi Permainan - Mode Pilihan - - Standar - Performa - Baterai - - - Gunakan ANGLE (percobaan) - Menggunakan perender ANGLE sebagai pengganti driver GLES asli.\nWARNING!! Dapat merusak grafik permainan, gunakan dengan hati-hati! - ANGLE tidak tersedia di sistem Anda - - Hapus %1$s dari daftar - - diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml deleted file mode 100644 index 758fa062..00000000 --- a/app/src/main/res/values-ru/strings.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - Game Space - Управляйте игровыми настройками - Выберите свою игру - Отключить авто-яркость - Не менять яркость пока вы в игре - Отключить уведомления - Отключить всплывающие уведомления пока вы в игре - Библиотека - Вы уверены, что хотите удалить %1$s из своей библиотеки? - Поиск - Временно отключить жест тремя пальцами для скриншота во время игры. - Отключить свайп для скриншота - chaldeaprjkt - включено - отключено - - Режим - - Не поддерживается - Баланс - Скорость - Экономия - - Уведомления - Отображать FPS - Не отключать экран - Не отключать экран, пока вы в игре - - Режим звонка в игре - - Беззвучный - Вибрация - Нормальный - - - Блокировать полноэкранные уведомления - Предотвращать появление полноэкранных уведомлений, таких как входящие вызовы, во время игры. - - Настроить игру - Предпочтительный режим - - Стандартный - Производительный - Экономный - - - Использовать ANGLE (эксперементально) - Использование рендерера ANGLE вместо собственных драйверов GLES.\nВНИМАНИЕ!! Может ломать игровую графику, использовать с осторожностью! - ANGLE недоступен в вашей системе - - Удалить %1$s из библиотеки - - diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml deleted file mode 100644 index a729293d..00000000 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - 游戏空间 - 管理您的游戏设置 - 选择您的游戏 - 禁用自动亮度 - 在游戏中保持亮度稳定 - 禁用悬浮通知 - 在游戏中禁用悬浮通知 - 游戏库 - 确定从你的游戏库中删除 %1$s 吗? - 搜索 - 游戏中临时禁用三指截图手势 - 禁用三指截图 - chaldeaprjkt - 已启用 - 禁用 - - 游戏模式 - - - 均衡 - 性能 - 省电 - - 警告 - 帧率信息 - 永不息屏 - 在游戏中保持亮屏 - - 游戏内铃声 - - 静音 - 振动 - 默认 - - - 阻止全屏事件 - 防止游戏中出现诸如来电之类的全屏事件 - diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 55ae50f6..8ba6840d 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -15,6 +15,20 @@ --> + + + @string/game_mode_unsupported + @string/game_mode_standard + @string/game_mode_performance + @string/game_mode_battery + + + + @string/ringer_mode_silent + @string/ringer_mode_vibrate + @string/ringer_mode_normal + + 0 1 @@ -26,4 +40,10 @@ 2 3 + + + @string/game_mode_standard + @string/game_mode_performance + @string/game_mode_battery + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e94b2a6a..559ab3c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,70 +1,60 @@ - - + + - Game Space + Game space Manage your gaming setup Pick your game Disable auto-brightness Keep brightness settled while in-game - Disable heads-up - Disable Notification heads-up while in-game + Disable heads up + Disallow pop up notifications while in-game Library - Are you sure you want to remove %1$s from your library ? + Are you sure you want to remove %1$s from your library? Search Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot - chaldeaprjkt enabled disabled - + + Mode - - Unsupported - Standard - Performance - Battery - - Heads-up - FPS Info - Stay Awake + Unsupported + Standard + Performance + Battery + + Heads up + FPS info + Stay awake Keep screen awake while in the game - In-game ringer mode - - Silent - Vibrate - Normal - + Ringer mode + Silent + Vibrate + Normal Block fullscreen event Prevent fullscreen events like incoming calls from appearing while in-game - Configure Game - Preferred Mode - - Standard - Performance - Battery - - + Configure game + Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system - Remove %1$s from library - From 2c417ed9d9ccc671d444f89377cb98b67d58ab2e Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 16 May 2022 10:44:17 +0530 Subject: [PATCH 003/214] GameSpace: Do not hardcode font to sans-serif * We have config overlay available for light font. Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index baac656b..90e5f406 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -39,7 +39,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="4dp" - android:fontFamily="sans-serif-light" + android:fontFamily="@*android:string/config_lightFontFamily" android:text="@string/settings_title" android:textSize="32sp" /> From 8bf3a491a683121f7708cad365757d5d7df2d3d2 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 16 May 2022 11:24:55 +0530 Subject: [PATCH 004/214] GameSpace: Improve panel view * Remove blank space below tiles. * Match panel corner radius with that of system dialogs. Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 90e5f406..28e50ae2 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -19,9 +19,9 @@ + app:cardCornerRadius="@*android:dimen/config_dialogCornerRadius"> Date: Mon, 16 May 2022 14:00:13 +0530 Subject: [PATCH 005/214] GameSpace: Add setting helper preferences Signed-off-by: Pranav Vashi --- app/src/main/Android.bp | 1 + .../preferences/CustomSeekBarPreference.java | 367 ++++++++++++++++++ .../SystemSettingListPreference.java | 73 ++++ .../SystemSettingMainSwitchPreference.java | 43 ++ .../SystemSettingSeekBarPreference.java | 37 ++ .../SystemSettingSwitchPreference.java | 54 +++ .../preferences/SystemSettingsStore.java | 72 ++++ .../res/drawable/ic_custom_seekbar_minus.xml | 25 ++ .../res/drawable/ic_custom_seekbar_plus.xml | 25 ++ .../res/drawable/ic_custom_seekbar_reset.xml | 25 ++ .../res/layout/preference_custom_seekbar.xml | 142 +++++++ app/src/main/res/values/attrs.xml | 27 ++ app/src/main/res/values/strings.xml | 8 +- 13 files changed, 898 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java create mode 100644 app/src/main/java/com/crdroid/settings/preferences/SystemSettingListPreference.java create mode 100644 app/src/main/java/com/crdroid/settings/preferences/SystemSettingMainSwitchPreference.java create mode 100644 app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java create mode 100644 app/src/main/java/com/crdroid/settings/preferences/SystemSettingSwitchPreference.java create mode 100644 app/src/main/java/com/crdroid/settings/preferences/SystemSettingsStore.java create mode 100644 app/src/main/res/drawable/ic_custom_seekbar_minus.xml create mode 100644 app/src/main/res/drawable/ic_custom_seekbar_plus.xml create mode 100644 app/src/main/res/drawable/ic_custom_seekbar_reset.xml create mode 100644 app/src/main/res/layout/preference_custom_seekbar.xml create mode 100644 app/src/main/res/values/attrs.xml diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp index df18d0a9..9d256a08 100644 --- a/app/src/main/Android.bp +++ b/app/src/main/Android.bp @@ -26,6 +26,7 @@ android_app { "kotlinx-coroutines-android", "gson-prebuilt-jar", "hilt_android", + "org.lineageos.platform.internal", ], kotlincflags: [ "-Xuse-experimental=kotlin.Experimental", diff --git a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java new file mode 100644 index 00000000..63408529 --- /dev/null +++ b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2016-2022 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.crdroid.settings.preferences; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.PorterDuff; +import androidx.core.content.res.TypedArrayUtils; +import androidx.preference.*; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.widget.ImageView; +import android.widget.SeekBar; +import android.widget.TextView; +import android.widget.Toast; + +import io.chaldeaprjkt.gamespace.R; + +public class CustomSeekBarPreference extends Preference implements SeekBar.OnSeekBarChangeListener { + protected final String TAG = getClass().getName(); + private static final String SETTINGS_NS = "http://schemas.android.com/apk/res/com.android.settings"; + protected static final String ANDROIDNS = "http://schemas.android.com/apk/res/android"; + + protected int mInterval = 1; + protected boolean mShowSign = false; + protected String mUnits = ""; + protected boolean mContinuousUpdates = false; + + protected int mMinValue = 0; + protected int mMaxValue = 100; + protected boolean mDefaultValueExists = false; + protected int mDefaultValue; + protected boolean mDefaultValueTextExists = false; + protected String mDefaultValueText; + + protected int mValue; + + protected TextView mValueTextView; + protected ImageView mResetImageView; + protected ImageView mMinusImageView; + protected ImageView mPlusImageView; + protected SeekBar mSeekBar; + + protected boolean mTrackingTouch = false; + protected int mTrackingValue; + + public CustomSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomSeekBarPreference); + try { + mShowSign = a.getBoolean(R.styleable.CustomSeekBarPreference_showSign, mShowSign); + String units = a.getString(R.styleable.CustomSeekBarPreference_units); + if (units != null) + mUnits = " " + units; + mContinuousUpdates = a.getBoolean(R.styleable.CustomSeekBarPreference_continuousUpdates, mContinuousUpdates); + String defaultValueText = a.getString(R.styleable.CustomSeekBarPreference_defaultValueText); + mDefaultValueTextExists = defaultValueText != null && !defaultValueText.isEmpty(); + if (mDefaultValueTextExists) { + mDefaultValueText = defaultValueText; + } + } finally { + a.recycle(); + } + + try { + String newInterval = attrs.getAttributeValue(SETTINGS_NS, "interval"); + if (newInterval != null) + mInterval = Integer.parseInt(newInterval); + } catch (Exception e) { + Log.e(TAG, "Invalid interval value", e); + } + mMinValue = attrs.getAttributeIntValue(SETTINGS_NS, "min", mMinValue); + mMaxValue = attrs.getAttributeIntValue(ANDROIDNS, "max", mMaxValue); + if (mMaxValue < mMinValue) + mMaxValue = mMinValue; + String defaultValue = attrs.getAttributeValue(ANDROIDNS, "defaultValue"); + mDefaultValueExists = defaultValue != null && !defaultValue.isEmpty(); + if (mDefaultValueExists) { + mDefaultValue = getLimitedValue(Integer.parseInt(defaultValue)); + mValue = mDefaultValue; + } else { + mValue = mMinValue; + } + + mSeekBar = new SeekBar(context, attrs); + setLayoutResource(R.layout.preference_custom_seekbar); + } + + public CustomSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public CustomSeekBarPreference(Context context, AttributeSet attrs) { + this(context, attrs, TypedArrayUtils.getAttr(context, + androidx.preference.R.attr.preferenceStyle, + android.R.attr.preferenceStyle)); + } + + public CustomSeekBarPreference(Context context) { + this(context, null); + } + + @Override + public void onDependencyChanged(Preference dependency, boolean disableDependent) { + super.onDependencyChanged(dependency, disableDependent); + this.setShouldDisableView(true); + if (mSeekBar != null) + mSeekBar.setEnabled(!disableDependent); + if (mResetImageView != null) + mResetImageView.setEnabled(!disableDependent); + if (mPlusImageView != null) + mPlusImageView.setEnabled(!disableDependent); + if (mMinusImageView != null) + mMinusImageView.setEnabled(!disableDependent); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + try + { + // move our seekbar to the new view we've been given + ViewParent oldContainer = mSeekBar.getParent(); + ViewGroup newContainer = (ViewGroup) holder.findViewById(R.id.seekbar); + if (oldContainer != newContainer) { + // remove the seekbar from the old view + if (oldContainer != null) { + ((ViewGroup) oldContainer).removeView(mSeekBar); + } + // remove the existing seekbar (there may not be one) and add ours + newContainer.removeAllViews(); + newContainer.addView(mSeekBar, ViewGroup.LayoutParams.FILL_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + } catch (Exception ex) { + Log.e(TAG, "Error binding view: " + ex.toString()); + } + + mSeekBar.setMax(getSeekValue(mMaxValue)); + mSeekBar.setProgress(getSeekValue(mValue)); + mSeekBar.setEnabled(isEnabled()); + + mValueTextView = (TextView) holder.findViewById(R.id.value); + mResetImageView = (ImageView) holder.findViewById(R.id.reset); + mMinusImageView = (ImageView) holder.findViewById(R.id.minus); + mPlusImageView = (ImageView) holder.findViewById(R.id.plus); + + updateValueViews(); + + mSeekBar.setOnSeekBarChangeListener(this); + mResetImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Toast.makeText(getContext(), getContext().getString(R.string.custom_seekbar_default_value_to_set, getTextValue(mDefaultValue)), + Toast.LENGTH_LONG).show(); + } + }); + mResetImageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + setValue(mDefaultValue, true); + return true; + } + }); + mMinusImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + setValue(mValue - mInterval, true); + } + }); + mMinusImageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + setValue(mMaxValue - mMinValue > mInterval * 2 && mMaxValue + mMinValue < mValue * 2 ? Math.floorDiv(mMaxValue + mMinValue, 2) : mMinValue, true); + return true; + } + }); + mPlusImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + setValue(mValue + mInterval, true); + } + }); + mPlusImageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + setValue(mMaxValue - mMinValue > mInterval * 2 && mMaxValue + mMinValue > mValue * 2 ? -1 * Math.floorDiv(-1 * (mMaxValue + mMinValue), 2) : mMaxValue, true); + return true; + } + }); + } + + protected int getLimitedValue(int v) { + return v < mMinValue ? mMinValue : (v > mMaxValue ? mMaxValue : v); + } + + protected int getSeekValue(int v) { + return 0 - Math.floorDiv(mMinValue - v, mInterval); + } + + protected String getTextValue(int v) { + if (mDefaultValueTextExists && mDefaultValueExists && v == mDefaultValue) { + return mDefaultValueText; + } + return (mShowSign && v > 0 ? "+" : "") + String.valueOf(v) + mUnits; + } + + protected void updateValueViews() { + if (mValueTextView != null) { + if (!mTrackingTouch || mContinuousUpdates) { + if (mDefaultValueTextExists && mDefaultValueExists && mValue == mDefaultValue) { + mValueTextView.setText(mDefaultValueText + " (" + + getContext().getString(R.string.custom_seekbar_default_value) + ")"); + } else { + mValueTextView.setText(getContext().getString(R.string.custom_seekbar_value, getTextValue(mValue)) + + (mDefaultValueExists && mValue == mDefaultValue ? " (" + + getContext().getString(R.string.custom_seekbar_default_value) + ")" : "")); + } + } else { + if (mDefaultValueTextExists && mDefaultValueExists && mTrackingValue == mDefaultValue) { + mValueTextView.setText("[" + mDefaultValueText + "]"); + } else { + mValueTextView.setText(getContext().getString(R.string.custom_seekbar_value, "[" + getTextValue(mTrackingValue) + "]")); + } + } + } + if (mResetImageView != null) { + if (!mDefaultValueExists || mValue == mDefaultValue || mTrackingTouch) + mResetImageView.setVisibility(View.INVISIBLE); + else + mResetImageView.setVisibility(View.VISIBLE); + } + if (mMinusImageView != null) { + if (mValue == mMinValue || mTrackingTouch) { + mMinusImageView.setClickable(false); + mMinusImageView.setColorFilter(getContext().getColor(R.color.disabled_text_color), + PorterDuff.Mode.MULTIPLY); + } else { + mMinusImageView.setClickable(true); + mMinusImageView.clearColorFilter(); + } + } + if (mPlusImageView != null) { + if (mValue == mMaxValue || mTrackingTouch) { + mPlusImageView.setClickable(false); + mPlusImageView.setColorFilter(getContext().getColor(R.color.disabled_text_color), PorterDuff.Mode.MULTIPLY); + } else { + mPlusImageView.setClickable(true); + mPlusImageView.clearColorFilter(); + } + } + } + + protected void changeValue(int newValue) { + // for subclasses + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + int newValue = getLimitedValue(mMinValue + (progress * mInterval)); + if (mTrackingTouch && !mContinuousUpdates) { + mTrackingValue = newValue; + updateValueViews(); + } else if (mValue != newValue) { + // change rejected, revert to the previous value + if (!callChangeListener(newValue)) { + mSeekBar.setProgress(getSeekValue(mValue)); + return; + } + // change accepted, store it + changeValue(newValue); + persistInt(newValue); + + mValue = newValue; + updateValueViews(); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + mTrackingValue = mValue; + mTrackingTouch = true; + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + mTrackingTouch = false; + if (!mContinuousUpdates) + onProgressChanged(mSeekBar, getSeekValue(mTrackingValue), false); + notifyChanged(); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + if (restoreValue) + mValue = getPersistedInt(mValue); + } + + @Override + public void setDefaultValue(Object defaultValue) { + if (defaultValue instanceof Integer) + setDefaultValue((Integer) defaultValue, mSeekBar != null); + else + setDefaultValue(defaultValue == null ? (String) null : defaultValue.toString(), mSeekBar != null); + } + + public void setDefaultValue(int newValue, boolean update) { + newValue = getLimitedValue(newValue); + if (!mDefaultValueExists || mDefaultValue != newValue) { + mDefaultValueExists = true; + mDefaultValue = newValue; + if (update) + updateValueViews(); + } + } + + public void setDefaultValue(String newValue, boolean update) { + if (mDefaultValueExists && (newValue == null || newValue.isEmpty())) { + mDefaultValueExists = false; + if (update) + updateValueViews(); + } else if (newValue != null && !newValue.isEmpty()) { + setDefaultValue(Integer.parseInt(newValue), update); + } + } + + public void setValue(int newValue) { + mValue = getLimitedValue(newValue); + if (mSeekBar != null) mSeekBar.setProgress(getSeekValue(mValue)); + } + + public void setValue(int newValue, boolean update) { + newValue = getLimitedValue(newValue); + if (mValue != newValue) { + if (update) + mSeekBar.setProgress(getSeekValue(newValue)); + else + mValue = newValue; + } + } + + public int getValue() { + return mValue; + } + + public void refresh(int newValue) { + // this will ... + setValue(newValue, mSeekBar != null); + } +} diff --git a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingListPreference.java b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingListPreference.java new file mode 100644 index 00000000..99679d23 --- /dev/null +++ b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingListPreference.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2016-2018 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.crdroid.settings.preferences; + +import android.content.Context; +import androidx.preference.ListPreference; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.provider.Settings; + +public class SystemSettingListPreference extends ListPreference { + + private boolean mAutoSummary = false; + + public SystemSettingListPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingListPreference(Context context) { + super(context); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + @Override + public void setValue(String value) { + super.setValue(value); + if (mAutoSummary || TextUtils.isEmpty(getSummary())) { + setSummary(getEntry(), true); + } + } + + @Override + public void setSummary(CharSequence summary) { + setSummary(summary, false); + } + + private void setSummary(CharSequence summary, boolean autoSummary) { + mAutoSummary = autoSummary; + super.setSummary(summary); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + // This is what default ListPreference implementation is doing without respecting + // real default value: + //setValue(restoreValue ? getPersistedString(mValue) : (String) defaultValue); + // Instead, we better do + setValue(restoreValue ? getPersistedString((String) defaultValue) : (String) defaultValue); + } + + public int getIntValue(int defValue) { + return getValue() == null ? defValue : Integer.valueOf(getValue()); + } +} diff --git a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingMainSwitchPreference.java b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingMainSwitchPreference.java new file mode 100644 index 00000000..e12878c6 --- /dev/null +++ b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingMainSwitchPreference.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2016-2022 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.crdroid.settings.preferences; + +import android.content.Context; +import android.provider.Settings; +import android.os.UserHandle; +import android.util.AttributeSet; + +import com.android.settingslib.widget.MainSwitchPreference; + +import com.crdroid.settings.preferences.SystemSettingsStore; + +public class SystemSettingMainSwitchPreference extends MainSwitchPreference { + + public SystemSettingMainSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingMainSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingMainSwitchPreference(Context context) { + super(context); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } +} diff --git a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java new file mode 100644 index 00000000..78d0a876 --- /dev/null +++ b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2016-2019 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.crdroid.settings.preferences; + +import android.content.Context; +import android.util.AttributeSet; + +public class SystemSettingSeekBarPreference extends CustomSeekBarPreference { + + public SystemSettingSeekBarPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingSeekBarPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } + + public SystemSettingSeekBarPreference(Context context) { + super(context, null); + setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); + } +} diff --git a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSwitchPreference.java b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSwitchPreference.java new file mode 100644 index 00000000..98526e47 --- /dev/null +++ b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSwitchPreference.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2016-2018 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.crdroid.settings.preferences; + +import android.content.Context; +import android.provider.Settings; +import android.os.UserHandle; +import android.util.AttributeSet; + +import lineageos.preference.SelfRemovingSwitchPreference; + +public class SystemSettingSwitchPreference extends SelfRemovingSwitchPreference { + + public SystemSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public SystemSettingSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SystemSettingSwitchPreference(Context context) { + super(context); + } + + @Override + protected boolean isPersisted() { + return Settings.System.getString(getContext().getContentResolver(), getKey()) != null; + } + + @Override + protected void putBoolean(String key, boolean value) { + Settings.System.putIntForUser(getContext().getContentResolver(), key, value ? 1 : 0, UserHandle.USER_CURRENT); + } + + @Override + protected boolean getBoolean(String key, boolean defaultValue) { + return Settings.System.getIntForUser(getContext().getContentResolver(), + key, defaultValue ? 1 : 0, UserHandle.USER_CURRENT) != 0; + } +} diff --git a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingsStore.java b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingsStore.java new file mode 100644 index 00000000..e7bb41b8 --- /dev/null +++ b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingsStore.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2016-2018 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.crdroid.settings.preferences; + +import android.content.ContentResolver; +import android.preference.PreferenceDataStore; +import android.os.UserHandle; +import android.provider.Settings; + +public class SystemSettingsStore extends androidx.preference.PreferenceDataStore + implements PreferenceDataStore { + + private ContentResolver mContentResolver; + + public SystemSettingsStore(ContentResolver contentResolver) { + mContentResolver = contentResolver; + } + + public boolean getBoolean(String key, boolean defValue) { + return Settings.System.getIntForUser(mContentResolver, key, defValue ? 1 : 0, UserHandle.USER_CURRENT) != 0; + } + + public float getFloat(String key, float defValue) { + return Settings.System.getFloatForUser(mContentResolver, key, defValue, UserHandle.USER_CURRENT); + } + + public int getInt(String key, int defValue) { + return Settings.System.getIntForUser(mContentResolver, key, defValue, UserHandle.USER_CURRENT); + } + + public long getLong(String key, long defValue) { + return Settings.System.getLongForUser(mContentResolver, key, defValue, UserHandle.USER_CURRENT); + } + + public String getString(String key, String defValue) { + String result = Settings.System.getString(mContentResolver, key); + return result == null ? defValue : result; + } + + public void putBoolean(String key, boolean value) { + putInt(key, value ? 1 : 0); + } + + public void putFloat(String key, float value) { + Settings.System.putFloatForUser(mContentResolver, key, value, UserHandle.USER_CURRENT); + } + + public void putInt(String key, int value) { + Settings.System.putIntForUser(mContentResolver, key, value, UserHandle.USER_CURRENT); + } + + public void putLong(String key, long value) { + Settings.System.putLongForUser(mContentResolver, key, value, UserHandle.USER_CURRENT); + } + + public void putString(String key, String value) { + Settings.System.putString(mContentResolver, key, value); + } +} diff --git a/app/src/main/res/drawable/ic_custom_seekbar_minus.xml b/app/src/main/res/drawable/ic_custom_seekbar_minus.xml new file mode 100644 index 00000000..56f0066c --- /dev/null +++ b/app/src/main/res/drawable/ic_custom_seekbar_minus.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_custom_seekbar_plus.xml b/app/src/main/res/drawable/ic_custom_seekbar_plus.xml new file mode 100644 index 00000000..26f3b548 --- /dev/null +++ b/app/src/main/res/drawable/ic_custom_seekbar_plus.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_custom_seekbar_reset.xml b/app/src/main/res/drawable/ic_custom_seekbar_reset.xml new file mode 100644 index 00000000..e072b055 --- /dev/null +++ b/app/src/main/res/drawable/ic_custom_seekbar_reset.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/layout/preference_custom_seekbar.xml b/app/src/main/res/layout/preference_custom_seekbar.xml new file mode 100644 index 00000000..75727392 --- /dev/null +++ b/app/src/main/res/layout/preference_custom_seekbar.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 00000000..a3f1bdd2 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 559ab3c4..327ba986 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - + Game space Manage your gaming setup Pick your game @@ -57,4 +57,10 @@ Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set From c146375c846249c89bd47e73db2e16d9d7433e96 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 16 May 2022 14:10:20 +0530 Subject: [PATCH 006/214] GameSpace: Do not hardcode in-game pref category title Signed-off-by: Pranav Vashi --- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/root_preferences.xml | 38 +++++++++++++---------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 327ba986..bce8b749 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,6 +23,7 @@ Keep brightness settled while in-game Disable heads up Disallow pop up notifications while in-game + In-game options Library Are you sure you want to remove %1$s from your library? Search diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 112f69d5..2279c969 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -1,28 +1,32 @@ - + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> - + + + - Date: Mon, 16 May 2022 22:17:07 +0530 Subject: [PATCH 007/214] GameSpace: Add option to customize overlay opacity Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/data/AppSettings.kt | 6 ++++++ .../io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/root_preferences.xml | 9 +++++++++ 4 files changed, 19 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 98ac3840..5f4bb0b9 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -61,11 +62,16 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getString(KEY_RINGER_MODE, "0").toInt() set(value) = db.edit().putString(KEY_RINGER_MODE, value.toString()).apply() + var menuOpacity: Int + get() = db.getInt(KEY_MENU_OPACITY, 75) + set(value) = db.edit().putInt(KEY_MENU_OPACITY, value).apply() + companion object { const val KEY_HEADS_UP_DISABLE = "gamespace_heads_up_disabled" const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" const val KEY_3SCREENSHOT_DISABLE = "gamespace_tfgesture_disabled" const val KEY_STAY_AWAKE = "gamespace_stay_awake" const val KEY_RINGER_MODE = "gamespace_ringer_mode" + const val KEY_MENU_OPACITY = "gamespace_menu_opacity" } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 63ed3cfc..aef9f964 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -277,6 +278,7 @@ class GameBarService : Hilt_GameBarService() { rootPanelView = LayoutInflater.from(this) .inflate(R.layout.window_panel, FrameLayout(this), false) as LinearLayout panelView = rootPanelView.findViewById(R.id.panel_view) + panelView.alpha = appSettings.menuOpacity / 100f rootPanelView.setOnClickListener { showPanel = false } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bce8b749..d3b9730b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,4 +64,6 @@ by default Default value: %s\nLong tap to set Default value is set + + Overlay menu opacity level diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 2279c969..56ad8133 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -64,6 +64,15 @@ android:key="gamespace_stay_awake" android:summary="@string/stay_awake_summary" android:title="@string/stay_awake_title" /> + + + Date: Mon, 16 May 2022 22:51:50 +0530 Subject: [PATCH 008/214] GameSpace: Use settings helper for suppress fullscreen intent Signed-off-by: Pranav Vashi --- .../gamespace/data/SystemSettings.kt | 17 +------------- .../gamespace/settings/SettingsFragment.kt | 23 ++----------------- app/src/main/res/xml/root_preferences.xml | 5 +--- 3 files changed, 4 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index 5e88dca8..b7dbec2c 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,22 +71,6 @@ class SystemSettings @Inject constructor( ) } - var suppressFullscreenIntent - get() = Settings.System.getIntForUser( - resolver, - Settings.System.GAMESPACE_SUPPRESS_FULLSCREEN_INTENT, - 0, - UserHandle.USER_CURRENT - ) == 1 - set(it) { - Settings.System.putIntForUser( - resolver, - Settings.System.GAMESPACE_SUPPRESS_FULLSCREEN_INTENT, - it.toInt(), - UserHandle.USER_CURRENT - ) - } - var userGames get() = Settings.System.getStringForUser( diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt index 4e4edafb..bc41afa1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,18 +23,13 @@ import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreference import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R -import io.chaldeaprjkt.gamespace.data.SystemSettings import io.chaldeaprjkt.gamespace.preferences.AppListPreferences import io.chaldeaprjkt.gamespace.preferences.appselector.AppSelectorActivity -import javax.inject.Inject @AndroidEntryPoint(PreferenceFragmentCompat::class) -class SettingsFragment : Hilt_SettingsFragment(), Preference.OnPreferenceChangeListener { - @Inject - lateinit var settings: SystemSettings +class SettingsFragment : Hilt_SettingsFragment() { private var apps: AppListPreferences? = null @@ -69,25 +65,10 @@ class SettingsFragment : Hilt_SettingsFragment(), Preference.OnPreferenceChangeL selectorResult.launch(Intent(context, AppSelectorActivity::class.java)) return@setOnPreferenceClickListener true } - - findPreference(Settings.System.GAMESPACE_SUPPRESS_FULLSCREEN_INTENT)?.apply { - isChecked = settings.suppressFullscreenIntent - onPreferenceChangeListener = this@SettingsFragment - } } override fun onResume() { super.onResume() apps?.updateAppList() } - - override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean { - when (preference?.key) { - Settings.System.GAMESPACE_SUPPRESS_FULLSCREEN_INTENT -> { - settings.suppressFullscreenIntent = newValue as Boolean - return true - } - } - return false - } } diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 56ad8133..4f88e528 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -40,11 +40,8 @@ android:summary="%s" android:title="@string/ringer_mode_title" /> - - From b89d9dc470896f4f333662d01c83c4082279b5a3 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 17 May 2022 00:46:17 +0530 Subject: [PATCH 009/214] GameSpace: Add toggle to turn off adb debugging Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/data/AppSettings.kt | 5 +++++ .../io/chaldeaprjkt/gamespace/data/GameSession.kt | 8 ++++++++ .../io/chaldeaprjkt/gamespace/data/SessionState.kt | 2 ++ .../io/chaldeaprjkt/gamespace/data/SystemSettings.kt | 11 +++++++++++ app/src/main/res/values/strings.xml | 3 +++ app/src/main/res/xml/root_preferences.xml | 6 ++++++ 6 files changed, 35 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 5f4bb0b9..e9c2257f 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -66,6 +66,10 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getInt(KEY_MENU_OPACITY, 75) set(value) = db.edit().putInt(KEY_MENU_OPACITY, value).apply() + var noAdbEnabled + get() = db.getBoolean(KEY_ADB_DISABLE, false) + set(it) = db.edit().putBoolean(KEY_ADB_DISABLE, it).apply() + companion object { const val KEY_HEADS_UP_DISABLE = "gamespace_heads_up_disabled" const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" @@ -73,5 +77,6 @@ class AppSettings @Inject constructor(private val context: Context) { const val KEY_STAY_AWAKE = "gamespace_stay_awake" const val KEY_RINGER_MODE = "gamespace_ringer_mode" const val KEY_MENU_OPACITY = "gamespace_menu_opacity" + const val KEY_ADB_DISABLE = "gamespace_adb_disabled" } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt index aad6c6b3..1b8b05f0 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,6 +60,7 @@ class GameSession @Inject constructor( headsUp = systemSettings.headsUp, threeScreenshot = systemSettings.threeScreenshot, ringerMode = audioManager.ringerModeInternal, + adbEnabled = systemSettings.adbEnabled, ) if (appSettings.noHeadsUp) { systemSettings.headsUp = false @@ -69,6 +71,9 @@ class GameSession @Inject constructor( if (appSettings.noThreeScreenshot) { systemSettings.threeScreenshot = false } + if (appSettings.noAdbEnabled) { + systemSettings.adbEnabled = false + } audioManager.ringerModeInternal = appSettings.ringerMode } @@ -83,6 +88,9 @@ class GameSession @Inject constructor( if (appSettings.noThreeScreenshot) { orig.threeScreenshot?.let { systemSettings.threeScreenshot = it } } + if (appSettings.noAdbEnabled) { + orig.adbEnabled?.let { systemSettings.adbEnabled = it } + } audioManager.ringerModeInternal = orig.ringerMode state = null } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt index 5cbe3e6f..1de808cc 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,4 +26,5 @@ data class SessionState( var headsUp: Boolean? = null, var threeScreenshot: Boolean? = null, var ringerMode: Int = AudioManager.RINGER_MODE_NORMAL, + var adbEnabled: Boolean? = null, ) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index b7dbec2c..b1a2c937 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -91,5 +91,16 @@ class SystemSettings @Inject constructor( gameModeUtils.setupBatteryMode(games.isNotEmpty()) } + var adbEnabled + get() = Settings.Global.getInt( + resolver, Settings.Global.ADB_ENABLED, 0 + ) == 1 + set(it) { + Settings.Global.putInt( + resolver, Settings.Global.ADB_ENABLED, + it.toInt() + ) + } + private fun Boolean.toInt() = if (this) 1 else 0 } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d3b9730b..31f95137 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -66,4 +66,7 @@ Default value is set Overlay menu opacity level + + Temporary disable USB ADB debugging while in-game + Disable USB debugging diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 4f88e528..01a6311b 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -70,6 +70,12 @@ app:min="0" app:units="%" /> + + Date: Wed, 18 May 2022 11:29:39 +0300 Subject: [PATCH 010/214] Update Crowdin configuration file --- crowdin.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..7fb1274d --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,3 @@ +files: + - source: /app/src/main/res/values/strings.xml + translation: /app/src/main/res/values-%android_code%/%original_file_name% From 4bed2a83b281ac4234ac66782d5ff39482a48d31 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 19 May 2022 18:46:53 +0300 Subject: [PATCH 011/214] New Crowdin updates (#1) * New translations strings.xml (Romanian) * New translations strings.xml (Korean) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Ukrainian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Japanese) * New translations strings.xml (French) * New translations strings.xml (Italian) * New translations strings.xml (Hungarian) * New translations strings.xml (Hebrew) * New translations strings.xml (Finnish) * New translations strings.xml (Greek) * New translations strings.xml (German) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Catalan) * New translations strings.xml (Arabic) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Turkish) * New translations strings.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Romanian) * New translations strings.xml (Spanish) * New translations strings.xml (Arabic) * New translations strings.xml (Italian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Romanian) * New translations strings.xml (Spanish) * New translations strings.xml (Arabic) * New translations strings.xml (Czech) * New translations strings.xml (German) * New translations strings.xml (Polish) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Spanish) * New translations strings.xml (German) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Vietnamese) * New translations strings.xml (Arabic) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Portuguese) --- app/src/main/res/values-af-rZA/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-ar-rSA/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-ca-rES/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-cs-rCZ/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-da-rDK/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-de-rDE/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-el-rGR/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-es-rES/strings.xml | 65 ++++++++++++++++++++++ app/src/main/res/values-fi-rFI/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-fr-rFR/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-hu-rHU/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-it-rIT/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-iw-rIL/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-ja-rJP/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-ko-rKR/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-nl-rNL/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-no-rNO/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-pl-rPL/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-pt-rBR/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-pt-rPT/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-ro-rRO/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-ru-rRU/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-sr-rSP/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-sv-rSE/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-tr-rTR/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-uk-rUA/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-vi-rVN/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 64 +++++++++++++++++++++ app/src/main/res/values-zh-rTW/strings.xml | 64 +++++++++++++++++++++ 29 files changed, 1857 insertions(+) create mode 100644 app/src/main/res/values-af-rZA/strings.xml create mode 100644 app/src/main/res/values-ar-rSA/strings.xml create mode 100644 app/src/main/res/values-ca-rES/strings.xml create mode 100644 app/src/main/res/values-cs-rCZ/strings.xml create mode 100644 app/src/main/res/values-da-rDK/strings.xml create mode 100644 app/src/main/res/values-de-rDE/strings.xml create mode 100644 app/src/main/res/values-el-rGR/strings.xml create mode 100644 app/src/main/res/values-es-rES/strings.xml create mode 100644 app/src/main/res/values-fi-rFI/strings.xml create mode 100644 app/src/main/res/values-fr-rFR/strings.xml create mode 100644 app/src/main/res/values-hu-rHU/strings.xml create mode 100644 app/src/main/res/values-it-rIT/strings.xml create mode 100644 app/src/main/res/values-iw-rIL/strings.xml create mode 100644 app/src/main/res/values-ja-rJP/strings.xml create mode 100644 app/src/main/res/values-ko-rKR/strings.xml create mode 100644 app/src/main/res/values-nl-rNL/strings.xml create mode 100644 app/src/main/res/values-no-rNO/strings.xml create mode 100644 app/src/main/res/values-pl-rPL/strings.xml create mode 100644 app/src/main/res/values-pt-rBR/strings.xml create mode 100644 app/src/main/res/values-pt-rPT/strings.xml create mode 100644 app/src/main/res/values-ro-rRO/strings.xml create mode 100644 app/src/main/res/values-ru-rRU/strings.xml create mode 100644 app/src/main/res/values-sr-rSP/strings.xml create mode 100644 app/src/main/res/values-sv-rSE/strings.xml create mode 100644 app/src/main/res/values-tr-rTR/strings.xml create mode 100644 app/src/main/res/values-uk-rUA/strings.xml create mode 100644 app/src/main/res/values-vi-rVN/strings.xml create mode 100644 app/src/main/res/values-zh-rCN/strings.xml create mode 100644 app/src/main/res/values-zh-rTW/strings.xml diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml new file mode 100644 index 00000000..de285f74 --- /dev/null +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -0,0 +1,64 @@ + + + + مساحة الألعاب + إدارة إعدادات ألعابك + إختر لعبتك + تعطيل السطوع التلقائي + حافظ على السطوع ثابتًا أثناء اللعب + تعطيل الإشعارات المنبثقة + عدم السماح بالإشعارات المنبثقة أثناء اللعب + خيارات داخل اللعبة + المكتبة + هل ترغب حقًا في إزالة «%1$s» من مكتبتك؟ + بحث + تعطيل مؤقت لإيماءة لقطة الشاشة بثلاثة أصابع أثناء اللعب + تعطيل السحب لأخذ لقطة الشاشة + مفعل + معطل + + الوضع + غير مدعوم + قياسي + نمط الاداء + توفير البطارية + الإشعارات المنبثقة + عداد معدل الإطارات + البقاء في الوضع النشط + إبقاء الشاشة مضاءة أثناء اللعب + وضع الرنين + صامت + إهتزاز + عادي + منع أحداث الشاشة الكاملة + منع أحداث ملء الشاشة مثل المكالمات الواردة من الظهور أثناء اللعب + ضبط اللعبة + الوضع المفضل + استخدام واجهة المستخدم الجديدة (التجريبية) + استخدام محرك ANGLE بدلاً من تعاريف GLES التقليدية. \n تحذير!! قد يعطل رسومات اللعبة، استخدم بحذر! + ANGLE غير متوفر على النظام الخاص بك + إزالة %1$s من المكتبة + + القيمة: %s + بشكل افتراضي + القيمة الافتراضية: %s\n أنقر مطولاً للتعيين + تم تعيين القيمة الافتراضية + مستوى شفافية القائمة العائمة + تعطيل مؤقت لوضع تصحيح أخطاء USB أثناء اللعب + تعطيل تصحيح أخطاء USB + diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 00000000..ad4c5bc9 --- /dev/null +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,64 @@ + + + + Herní prostor + Spravovat herního nastavení + Výběr hry + Zakázat automatický jas + Zachovat nastavení jasu ve hře + Zakázat plovoucí upozornění + Zakázat vyskakování oznámení během hry + Možnosti ve hře + Knihovna + Opravdu chcete odstranit %1$s z vaší knihovny? + Hledat + Dočasné vypnutí gesta screenshot třemi prsty během hry + Zakázat přejetí pro snímek obrazovky + povoleno + zakázáno + + Režim + Nepodporováno + Standardní + Výkon + Baterie + Plovoucí oznámení + Informace o FPS + Nevypínat obrazovku + Udržet obrazovku vzhůru během hry + Režim vyzvánění + Tichý + Vibrace + Normální + Blokovat událost na celou obrazovku + Zabránit zobrazení příchozích hovorů v režimu celé obrazovky během hry + Konfigurace hry + Preferovaný režim + Použít ANGLE (experimentální) + Používá ANGLE renderer místo nativních ovladačů GLA.\nVAROVÁNÍ!! Může se rozbít herní grafiku, používejte opatrně! + ANGLE není k dispozici ve vašem systému + Odebrat %1$s z knihovny + + Hodnota: %s + výchozí hodnota + Výchozí hodnota: %s\nDlouze klepněte pro její nastavení + Výchozí hodnota je nastavena + Úroveň průhlednosti překrytí menu + Dočasné vypnutí ladění USB ADB během hry + Zakázat ladění USB + diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 00000000..0ffbed53 --- /dev/null +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,64 @@ + + + + Spielemodus + Spieleinrichtung verwalten + Wähle dein Spiel + Auto-Helligkeit deaktivieren + Helligkeit während des Spiels behalten + Heads-Up deaktivieren + Pop-Up Benachrichtigungen während des Spiels verbieten + In-Game-Optionen + Bibliothek + Sind Sie sicher, dass Sie %1$s aus Ihrer Bibliothek entfernen möchten? + Suchen + Wischen für Screenshot im Spiel vorübergehend deaktivieren + Wischen für Screenshot deaktivieren + aktiviert + deaktiviert + + Modus + Nicht unterstützt + Standard + Leistung + Akku + Pop-Up + FPS-Info + Display eingeschaltet lassen + Display im Spiel eingeschaltet lassen + Klingelmodus + Stumm + Vibration + Normal + Vollbild-Ereignis blockieren + Vollbild-Ereignisse wie eingehende Anrufe während des Spiels verhindern + Spiel konfigurieren + Bevorzugter Modus + ANGLE benutzen (experimentell) + Verwendung von ANGLE Renderer statt nativer GLES Treiber.\nWARNUNG!! Kann Spielgrafiken falsch darstellen! + ANGLE ist auf Ihrem System nicht verfügbar + %1$s aus der Bibliothek entfernen + + Wert: %s + Standardmäßig + Standardwert: %s\nZum Einstellen gedrückt halten + Standardwert ist eingestellt + Transparenz des Overlay-Menüs + USB-ADB-Debugging vorübergehend während des Spiels deaktivieren + USB-Debugging deaktivieren + diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 00000000..33d7b652 --- /dev/null +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Τιμή: %s + από προεπιλογή + Προεπιλεγμένη τιμή: %s\nΠατήστε παρατεταμένα για να ορίσετε + Η προεπιλεγμένη τιμή έχει οριστεί + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml new file mode 100644 index 00000000..90a7ebc1 --- /dev/null +++ b/app/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,65 @@ + + + + Espacio de juegos + Administra tu configuración de juegos + Elige tu juego + Desactivar brillo automático + Mantener el brillo establecido durante el juego + Desactivar notificaciones flotantes + No permitir notificaciones emergentes durante el juego + Opciones en el juego + Biblioteca + ¿Está seguro que desea eliminar %1$s de su biblioteca? + Buscar + Deshabilita temporalmente el gesto de captura de pantalla con tres dedos durante el juego + Desactivar deslizar para captura de pantalla + activado + desactivado + + Modo + No soportado + Estándar + Rendimiento + Batería + Notificaciones flotantes + Información de FPS + Permanecer encendido + Mantener la pantalla encendida durante el juego + Modo de timbre + Silencio + Vibrar + Normal + Bloquear eventos en pantalla completa + Evitar que eventos de pantalla completa como llamadas entrantes aparezcan en el juego + Configurar juego + Modo preferido + Usar nueva interfaz de usuario (experimental) + Utilizar renderizado ANGLE en lugar de controladores GLES nativos. \n¡ADVERTENCIA! Puede romper los gráficos de juegos, ¡Úsalo con cuidado! + ANGLE no está disponible en su sistema + Eliminar %1$s de la biblioteca + + Valor: %s + predeterminado + Valor predeterminado: %s\n +Mantén presionado para establecer + Valor predeterminado establecido + Nivel de opacidad del menú de superposición + Inhabilita temporalmente la depuración USB ADB durante el juego + Desactivar depuración USB + diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 00000000..38b9b44b --- /dev/null +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Valeur : %s + par défaut + Valeur par défaut : %s\nRester appuyer pour définir + Valeur par défaut définie + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 00000000..f1d9ecba --- /dev/null +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + alapértelmezés szerint + Default value: %s\nLong tap to set + Az alapértelmezett érték beállítva + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 00000000..098fe265 --- /dev/null +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Gestisci la tua configurazione di gioco + Scegli il tuo gioco + Disabilita luminosità automatica + Mantieni la luminosità regolata durante la partita + Disattiva heads up + Disabilita le notifiche popup durante il gioco + Opzioni di gioco + Libreria + Sei sicuro di voler rimuovere %1$s dalla tua libreria? + Cerca + Disabilita temporaneamente il gesto dello screenshot a tre dita durante il gioco + Disabilita lo scorrimento per screenshot + abilita + disabilitato + + Modalità + Non supportato + Predefinito + Prestazioni + Batteria + Notifiche Fluttuanti + Info FPS + Resta attivo + Mantieni lo schermo attivo durante il gioco + Modalità suoneria + Silenzioso + Vibrazione + Normale + Blocca evento a schermo intero + Evitare che vengano visualizzati eventi a schermo intero come le chiamate in arrivo durante il gioco + Configura gioco + Modalità preferita + Usa nuova interfaccia (sperimentale) + Usando il renderer ANGLE invece dei driver nativi GLES.\nATTENZIONE!! Potrebbe rompere la grafica del gioco, usare con cautela! + ANGLE non è disponibile sul tuo sistema + Rimuovi %1$s dalla libreria + + Valore: %s + per impostazione predefinita + Valore predefinito: %s\nTocca a lungo per impostare + Valore predefinito impostato + Livello di opacità menù sovrapposizione + Disabilita temporaneamente il debug ADB USB durante il gioco + Disabilita debug USB + diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml new file mode 100644 index 00000000..8fcb59da --- /dev/null +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + 値: %s + 既定 + 既定値: %s\n長押しで設定 + 既定値が設定されています + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 00000000..588c7354 --- /dev/null +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + 값: %s + 기본값으로 설정 + 기본값: %s\n길게 눌러서 설정 + 기본값으로 설정됨 + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 00000000..9b6be059 --- /dev/null +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,64 @@ + + + + Spel ruimte + Beheer uw gaming-instellingen + Kies je spel + Automatische helderheid uitschakelen + Houd helderheid aan tijdens in-game + Deactiveer heads up + Zet pop-up meldingen uit terwijl je in-game bent + In-game opties + Bibliotheek + Weet je zeker dat je %1$s uit je bibliotheek wilt verwijderen? + Zoeken + Tijdelijk drie-vingers veeg schermafbeelding uitschakelen terwijl in-game + Veeg naar schermafbeelding uitschakelen + ingeschakeld + uitgeschakeld + + Modus + Niet ondersteund + Standaard + Prestatie + Batterij + Heads up + FPS info + Blijf aan + Houd scherm aan tijdens het spel + Beltoonmodus + Stil + Vibreren + Normaal + Blokkeer volledig scherm event + Voorkom dat volledig scherm events zoals inkomende oproepen worden weergegeven tijdens in-game + Spel configureren + Voorkeursmodus + Gebruik ANGLE (experimenteel) + Gebruik ANGLE renderer in plaats van oorspronkelijke GLES drivers.\nWAARSCHUWING!! Kan spel afbeeldingen breken, gebruik met voorzichtigheid! + ANGLE is niet beschikbaar op uw systeem + Verwijder %1$s uit bibliotheek + + Waarde: %s + standaard + Standaard waarde: %s\nLang indrukken om in te stellen + Standaard waarde is ingesteld + Transparantieniveau van overlappingsmenu + Tijdelijke uitschakelen USB ADB foutopsporing tijdens in-game + Usb-foutopsporing uitschakelen + diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 00000000..0b5a0e96 --- /dev/null +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,64 @@ + + + + Przestrzeń gier + Zarządzaj konfiguracją gier + Wybierz swoją grę + Wyłącz automatyczną jasność + Utrzymuj jasność na stałym poziomie podczas gry + Wyłącz wyskakujące powiadomienia + Zablokuj wyskakujące powiadomienia w grze + Opcje w grze + Biblioteka + Czy na pewno chcesz usunąć %1$s z Twojej biblioteki? + Szukaj + Tymczasowe wyłączenie gestu zrzutu ekranu trzema palcami podczas gry + Wyłączenie funkcji przeciągnięcia palcem w celu wykonania zrzutu ekranu + włączone + wyłączone + + Tryb + Nieobsługiwane + Standardowy + Wydajność + Bateria + Wyskakujące powiadomienia + Wskaźnik FPS + Pozostaw włączony ekran + Nie wyłączaj ekranu podczas gry + Ringer mode + Tryb cichy + Wibracje + Normalny + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Skonfiguruj grę + Preferowany tryb + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Wartość: %s + domyślnie + Wartość domyślna: %s\nPrzytrzymaj dłużej by ustawić + Wartość domyślna jest ustawiona + Overlay menu opacity level + Tymczasowe wyłączenie debugowania USB ADB podczas gry + Wyłącz debugowanie USB + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000..f52c1689 --- /dev/null +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,64 @@ + + + + Espaço de jogo + Gerencie sua configuração de jogos + Seletor de Aplicativos + Brilho automático desativado + Brilho automático desativado sumário + Desativar notificações Heads Up + Desativar notificações flutuantes enquanto estiver jogando + Opções do jogo + Lista de jogos + Tem certeza de que deseja remover %1$s da sua biblioteca? + Pesquisa + Desativar o gesto de três dedos para captura de tela durante o jogo + Desativar deslize para captura de tela + ativado + desabilitado + + Modo Jogo + Incompatível + Padrão + Desempenho + Bateria + Notificações flutuantes + Informações de FPS + Permanecer ativo + Mantenha a tela ligada quando estiver no jogo + Modo de toque + Silencioso + Vibrar + Normal + Bloquear eventos em tela cheia + Impedir que eventos em tela cheia apareçam durante o jogo + Configurar jogo + Modo preferencial + Usar ANGLE (experimental) + Usando ANGLE Renderer ao vez de drivers GLES.\nAVISO!! Pode causar fechamento nos jogos, use com cuidado! + ANGLE não está disponível no seu sistema + Remover %1$s da biblioteca + + Valor: %s + valor padrão + Valor padrão: %s\nToque longo para definir + Valor padrão definido + Nível de opacidade do menu de sobreposição + Desativar temporariamente a depuração USB durante o jogo + Desativar depuração USB + diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 00000000..5ab66891 --- /dev/null +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,64 @@ + + + + Espaço de jogo + Gerir a sua configuração de jogos + Escolha o seu jogo + Desativar brilho automático + Manter o brilho constante durante o jogo + Desativar notificações flutuantes + Desativar notificações flutuantes enquanto estiver a jogar + Opções do jogo + Lista de jogos + Tem certeza de que deseja remover %1$s da sua biblioteca? + Procurar + Temporary disable three-fingers-swipe screenshot gesture while in-game + Desativar deslizar para capturar ecrã + ativado + desativado + + Modo + Não suportado + Padrão + Desempenho + Bateria + Heads up + Info. de FPS + Manter ativo + Manter o ecrã ligado durante o jogo + Modo de toque + Silencioso + Vibrar + Normal + Bloquear eventos em ecrã inteiro + Impedir que eventos em ecrã inteiro, como receber chamadas, ocorram durante o jogo + Configurar jogo + Modo preferido + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remover %1$s da biblioteca + + Valor: %s + Por padrão + Valor padrão: %s\nO Prima para definir + O valor padrão está definido + Transparência do menu de sobreposição + Desativar temporariamente a depuração USB ADB durante o jogo + Desativar depuração USB + diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 00000000..e9cddfbd --- /dev/null +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,64 @@ + + + + Spațiul de jocuri + Gestionează-ți configurarea jocurilor + Alege-ți numele + Dezactivează luminozitatea automată + Păstrează luminozitatea setată în timpul jocului + Dezactivați atenționarea + Nu permiteți notificări pop-up în joc + Opțiuni în joc + Bibliotecă + Sunteți sigur că doriți să ștergeți %1$s din bibliotecă? + Căutare + Dezactivare temporară capturii de ecran cu trei degete în timpul jocului + Dezactivează glisarea pentru captură de ecran + activat + dezactivat + + Mod + Necompatibil + Standard + Performanță + Baterie + Atenționări + Informații FPS + Menține ecranul activ + Păstrează ecranul deschis în joc + Mod sonerie + Silențios + Vibrații + Normal + Blocare eveniment pe tot ecranul + Împiedică apariția evenimentelor pe tot ecranul, cum ar fi apelurile primite în timpul jocului + Configurare joc + Mod preferat + Utilizează ANGLE (experimental) + Folosind redare ANGLE în locul driverelor GLES nativi.\nATENȚIE!! Poate strica aspectul jocului, folosește cu prudență! + ANGLE nu este disponibil pe sistemul dumneavoastră + Elimină %1$s din bibliotecă + + Valoare: %s + implicit + Valoare implicită: %s\nAtingeți lung pentru a seta + Valoarea implicită este setată + Opacitate pentru meniul suprapus + Dezactivați temporar depanarea USB ADB în timpul jocului + Dezactivează depanarea USB + diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 00000000..833ff4f1 --- /dev/null +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,64 @@ + + + + Игровой режим + Настройка игровых возможностей + Выберите свою игру + Отключить автоматическую яркость + Не менять яркость во время игры + Отключить всплывающие уведомления + Запретить всплывающие уведомления во время игры + Настройки игры + Библиотека + Вы уверены, что хотите удалить %1$s из своей библиотеки? + Поиск + Временно отключить свайп тремя пальцами для скриншота время игры + Отключить свайп для скриншота + включено + отключено + + Режим + Не поддерживается + Стандартный + Производительный + Батарея + Всплывающие уведомления + Информация о FPS + Не отключать экран + Не отключать экран, пока вы в игре + Режим звонка в игре + Беззвучный + Вибрация + Обычный + Блокировать полноэкранные уведомления + Предотвращать появление полноэкранных уведомлений, таких как входящие вызовы, во время игры + Настроить игру + Предпочтительный режим + Использовать ANGLE (эксперементально) + Использование рендерера ANGLE вместо собственных драйверов GLES.\nВНИМАНИЕ!! Может ломать игровую графику, использовать с осторожностью! + ANGLE недоступен в вашей системе + Удалить %1$s из библиотеки + + Значение: %s + по умолчанию + Значение по умолчанию: %s\nУдерживайте для установки + Значение по умолчанию установлено + Уровень прозрачности меню игрового режима + Временно отключить отладку USB ADB во время игры + Отключить отладку по USB + diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 00000000..736517e8 --- /dev/null +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 00000000..d5048f13 --- /dev/null +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,64 @@ + + + + Oyun alanı + Oyun kurulumunuzu yönetin + Oyununu seç + Otomatik parlaklığı devre dışı bırak + Oyun içindeyken parlaklığı sabit tutun + Üst bildirimleri devre dışı bırak + Oyun içindeyken açılır bildirimlere izin verme + Oyun içi seçenekleri + Arşiv + %1$s arşivden kaldırmak istediğinizden emin misiniz? + Ara + Oyundayken üç parmakla kaydırarak ekran görüntüsü alma hareketini geçici olarak devre dışı bırak + Üç parmak hareketini devre dışı bırak + etkin + devre dışı + + Mod + Desteklenmiyor + Standart + Performans + Pil + Bildirim pencereleri + FPS bilgisi + Uyanık kal + Oyundayken ekranı uyanık tutun + Zil sesi modu + Sessiz + Titreşim + Normal + Tam ekran etkinliğini engelle + Oyun içindeyken gelen aramalar gibi tam ekran etkinliklerinin görünmesini engelleyin + Oyunu yapılandır + Tercih edilen mod + ANGLE kullan (deneysel) + Yerel GLES sürücüleri yerine ANGLE oluşturucu kullan.\nUYARI!! Oyun grafiklerini bozabilir, dikkatli kullanın! + ANGLE sisteminizde mevcut değil + %1$s arşivden kaldır + + Değer: %s + varsayılan + Varsayılan değer: %s\nAyarlamak için uzun basın + Varsayılan değer ayarlandı + Arayüz menüsü şeffaflığı + Oyun sırasında USB ADB hata ayıklamasını geçici olarak devre dışı bırakın + USB hata ayıklamasını devre dışı bırak + diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml new file mode 100644 index 00000000..3767c4a4 --- /dev/null +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -0,0 +1,64 @@ + + + + Ігровий простір + Керування налаштуваннями гри + Виберіть свою гру + Вимкнути автояскравість + Не змінювати яскравість під час гри + Вимкнути спливаючі сповіщення + Заборонити спливаючі сповіщення під час гри + Налаштування гри + Бібліотека + Ви впевнені, що хочете видалити %1$s зі своєї бібліотеки? + Пошук + Тимчасово вимкнути жест трьома пальцями для скриншоту під час гри + Вимкнути свайп для знімка екрану + увімкнено + вимкнуто + + Режим + Не підтримується + Стандартний + Продуктивний + Батарея + Спливаючі сповіщення + Інформація про FPS + Залишати активним + Залишати екран увімкненим під час гри + Режим дзвінка + Беззвучний + Вібрація + Звичайний + Блокувати повноекранні сповіщення + Запобігає появі повноекранних сповіщень, таких як вхідні дзвінки, під час гри + Налаштувати гру + Переважний режим + Використовувати ANGLE (експериментально) + Використовуючи візуалізатор ANGLE замість нативних драйверів GLES.\nУВАГА!! Може порушувати графіку гри, використовуйте з обережністю! + ANGLE недоступний у вашій системі + Видалити %1$s з бібліотеки + + Значення: %s + за замовчуванням + Значення за замовчуванням: %s\nДовге натискання для встановлення + Значення за замовчуванням встановлено + Рівень непрозорості меню ігрового режиму + Тимчасово вимкнути налагодження USB USB під час гри + Вимкнути налагодження USB + diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml new file mode 100644 index 00000000..5fd0387d --- /dev/null +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -0,0 +1,64 @@ + + + + Không gian game + Quản lý thiết lập trò chơi của bạn + Chọn trò chơi của bạn + Vô hiệu hóa độ sáng tự động + Giữ độ sáng ổn định khi ở trong trò chơi + Không cho phép cửa sổ nổi lên + Không cho phép thông báo bật lên khi ở trong trò chơi + Tùy chọn trong trò chơi + Thư viện + Yes? + Tìm kiếm + Tạm thời vô hiệu hóa cử chỉ vuốt ảnh chụp màn hình bằng ba ngón tay khi ở trong trò chơi + Tắt tính năng vuốt đến ảnh chụp màn hình + đã bật + đã tắt + + Chế độ + Không hỗ trợ + Tiêu chuẩn + Hiệu suất cao + Tiết kiệm pin + Thông báo nổi + Thông tin FPS + Không khóa màn hình + Giữ màn hình ở chế độ thức khi chơi trò chơi + Chế độ chuông + Im lặng + Rung + Bình thường + Chặn sự kiện toàn màn hình + Ngăn các sự kiện toàn màn hình như cuộc gọi đến xuất hiện khi ở trong trò chơi + Định cấu hình trò chơi + Chế độ ưu tiên + Sử dụng ANGLE (thử nghiệm) + Sử dụng trình kết xuất ANGLE thay vì trình điều khiển GLES gốc.\nCẢNH BÁO!! Có thể phá vỡ đồ họa trò chơi, hãy sử dụng một cách thận trọng! + ANGLE không có sẵn trên hệ thống của bạn + Xóa %1$s khỏi thư viện + + Giá trị: %s + mặc định + Giá trị mặc định: %s\nNhấn giữ lâu để thiết lập + Đã đặt giá trị mặc định + Mức độ mờ của menu + Tạm thời vô hiệu hóa gỡ lỗi USB ADB khi ở trong trò chơi + Vô hiệu hóa gỡ lỗi USB + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000..002aa747 --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + 值: %s + 默认 + 默认值: %s\n长按设置 + 恢复默认值 + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000..da700d75 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,64 @@ + + + + Game space + Manage your gaming setup + Pick your game + Disable auto-brightness + Keep brightness settled while in-game + Disable heads up + Disallow pop up notifications while in-game + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Temporary disable three-fingers-swipe screenshot gesture while in-game + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Keep screen awake while in the game + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing while in-game + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + 數值: %s + 預設 + 預設值:%s\n長按以設定 + 已設定為預設值 + Overlay menu opacity level + Temporary disable USB ADB debugging while in-game + Disable USB debugging + From d1bd86b54b7fc34fcef89262a42d4b924be5f9f9 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 23 May 2022 20:17:01 +0300 Subject: [PATCH 012/214] New Crowdin updates (#2) * New translations strings.xml (Portuguese) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Hungarian) --- app/src/main/res/values-hu-rHU/strings.xml | 20 +++--- app/src/main/res/values-pt-rPT/strings.xml | 12 ++-- app/src/main/res/values-zh-rCN/strings.xml | 78 +++++++++++----------- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index f1d9ecba..12112b6c 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -16,17 +16,17 @@ limitations under the License. --> - Game space + Játéktér Manage your gaming setup - Pick your game - Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game - In-game options - Library + Válaszd ki a játékod + Az automatikus fényerőszabályzás tiltása + Tartsa a beállított fényerőt játék közben + Felugró értesítés kikapcsolása + A felugró értesítések letiltása játék közben + Játékon belüli lehetőségek + Könyvtár Are you sure you want to remove %1$s from your library? - Search + Keresés Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled @@ -52,7 +52,7 @@ Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system - Remove %1$s from library + Eltávólítás a könyvtárból Value: %s alapértelmezés szerint diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 5ab66891..d67ea390 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -24,10 +24,10 @@ Desativar notificações flutuantes Desativar notificações flutuantes enquanto estiver a jogar Opções do jogo - Lista de jogos + Biblioteca de jogos Tem certeza de que deseja remover %1$s da sua biblioteca? Procurar - Temporary disable three-fingers-swipe screenshot gesture while in-game + Desativar temporariamente o gesto de deslizar três dedos para capturar ecrã enquanto estiver a jogar Desativar deslizar para capturar ecrã ativado desativado @@ -37,7 +37,7 @@ Padrão Desempenho Bateria - Heads up + Notificações flutuantes Info. de FPS Manter ativo Manter o ecrã ligado durante o jogo @@ -49,9 +49,9 @@ Impedir que eventos em ecrã inteiro, como receber chamadas, ocorram durante o jogo Configurar jogo Modo preferido - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system + Usar ANGLE (experimental) + A usar o renderizador ANGLE em vez de controladores GLES nativos.\nAVISO!! Pode quebrar os gráficos do jogo, use com cuidado! + ANGLE não está disponível no seu sistema Remover %1$s da biblioteca Valor: %s diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 002aa747..e5dcb9ca 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -16,49 +16,49 @@ limitations under the License. --> - Game space - Manage your gaming setup - Pick your game - Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Temporary disable three-fingers-swipe screenshot gesture while in-game - Disable swipe to screenshot - enabled - disabled + 游戏空间 + 管理您的游戏设置 + 选择您的游戏 + 禁用自动调节亮度 + 在游戏中保持亮度稳定 + 禁用浮动通知 + 游戏中不允许浮动通知弹出 + 游戏中选项 + 游戏列表 + 您确定要将 %1$s 从您的游戏列表中移除吗? + 搜索 + 游戏中暂时禁用滑动截屏 + 禁用滑动截屏 + 已启用 + 已禁用 - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info - Stay awake - Keep screen awake while in the game - Ringer mode - Silent - Vibrate - Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + 模式 + 不支持 + 标准 + 性能 + 省电 + 浮动通知 + FPS 信息 + 保持唤醒 + 游戏中保持屏幕唤醒状态 + 响铃模式 + 静音 + 振动 + 正常 + 屏蔽全屏事件 + 在游戏中阻止全屏事件如来电时显示 + 配置游戏 + 首选模式 + 使用 ANGLE 渲染器 (实验性) + 使用 ANGLE 渲染器而不是本机的 GLES 驱动器。\n警告!! 可能会破坏游戏图形, 请谨慎使用! + ANGLE 在您的系统上不可用 + 从游戏列表中移除 %1$s 值: %s 默认 默认值: %s\n长按设置 恢复默认值 - Overlay menu opacity level - Temporary disable USB ADB debugging while in-game - Disable USB debugging + 覆盖菜单不透明度级别 + 游戏中暂时禁用 USB ADB 调试 + 禁用 USB 调试 From 696fe0d4a3487929a49904e7e8c6d4b75347ba3a Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 29 May 2022 19:15:04 +0300 Subject: [PATCH 013/214] New translations (#3) --- app/src/main/res/values-pl-rPL/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 0b5a0e96..7f5bbe68 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -41,24 +41,24 @@ Wskaźnik FPS Pozostaw włączony ekran Nie wyłączaj ekranu podczas gry - Ringer mode + Tryb dzwonka Tryb cichy Wibracje Normalny - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Zablokuj wydarzenie na pełnym ekranie + Zapobiegaj pojawianiu się wydarzeń na pełnym ekranie, takich jak połączenia przychodzące podczas grania Skonfiguruj grę Preferowany tryb - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + Użyj ANGLE (eksperymentalne) + Używaj renderowania ANGLE zamiast natywnych sterowników GLES.\nOSTRZEŻENIE!! Może uszkodzić grafikę gry, używaj z ostrożnością! + ANGLE nie jest dostępne w Twoim systemie + Usuń %1$s z biblioteki Wartość: %s domyślnie Wartość domyślna: %s\nPrzytrzymaj dłużej by ustawić Wartość domyślna jest ustawiona - Overlay menu opacity level + Poziom przezroczystości nakładki menu Tymczasowe wyłączenie debugowania USB ADB podczas gry Wyłącz debugowanie USB From 078a978f528c96b0d9883784e3a6801aeeb38527 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 31 May 2022 23:21:40 +0530 Subject: [PATCH 014/214] GameSpace: Clean up strings Signed-off-by: Pranav Vashi --- app/src/main/res/values/strings.xml | 9 ++------- app/src/main/res/xml/root_preferences.xml | 5 ----- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 31f95137..2b44398d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -42,7 +39,6 @@ Heads up FPS info Stay awake - Keep screen awake while in the game Ringer mode Silent @@ -50,7 +46,7 @@ Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode @@ -67,6 +63,5 @@ Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 01a6311b..32febcd4 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -29,7 +29,6 @@ From 86b397c916ff2450fff7b613db3aa774a642eef1 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 1 Jun 2022 00:33:49 +0530 Subject: [PATCH 015/214] GameSpace: Rearrange preferences Signed-off-by: Pranav Vashi --- app/src/main/res/xml/root_preferences.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 32febcd4..69074ccf 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -27,10 +27,6 @@ android:key="in_game_preferences" android:title="@string/in_game_preferences_title"> - - + + + + @@ -55,8 +60,8 @@ + android:key="gamespace_adb_disabled" + android:title="@string/adb_disabled_title" /> - - Date: Wed, 1 Jun 2022 01:23:42 +0530 Subject: [PATCH 016/214] GameSpace: Add lock gesture tile Signed-off-by: Pranav Vashi --- .../gamespace/data/AppSettings.kt | 6 +- .../gamespace/gamebar/SessionService.kt | 2 + .../gamespace/utils/ScreenUtils.kt | 28 ++++++++++ .../gamespace/widget/tiles/LockGestureTile.kt | 55 +++++++++++++++++++ app/src/main/res/drawable/ic_gesture.xml | 9 +++ app/src/main/res/layout/tiles.xml | 32 ++++++----- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/root_preferences.xml | 5 ++ 8 files changed, 124 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/LockGestureTile.kt create mode 100644 app/src/main/res/drawable/ic_gesture.xml diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index e9c2257f..423a73b3 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -45,7 +45,6 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getBoolean(KEY_HEADS_UP_DISABLE, true) set(it) = db.edit().putBoolean(KEY_HEADS_UP_DISABLE, it).apply() - var noAutoBrightness get() = db.getBoolean(KEY_AUTO_BRIGHTNESS_DISABLE, true) set(it) = db.edit().putBoolean(KEY_AUTO_BRIGHTNESS_DISABLE, it).apply() @@ -70,6 +69,10 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getBoolean(KEY_ADB_DISABLE, false) set(it) = db.edit().putBoolean(KEY_ADB_DISABLE, it).apply() + var lockGesture + get() = db.getBoolean(KEY_LOCK_GESTURE, false) + set(value) = db.edit().putBoolean(KEY_LOCK_GESTURE, value).apply() + companion object { const val KEY_HEADS_UP_DISABLE = "gamespace_heads_up_disabled" const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" @@ -78,5 +81,6 @@ class AppSettings @Inject constructor(private val context: Context) { const val KEY_RINGER_MODE = "gamespace_ringer_mode" const val KEY_MENU_OPACITY = "gamespace_menu_opacity" const val KEY_ADB_DISABLE = "gamespace_adb_disabled" + const val KEY_LOCK_GESTURE = "gamespace_lock_gesture" } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index 7b0f19e5..02e51fc6 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -140,6 +141,7 @@ class SessionService : Hilt_SessionService() { applyGameModeConfig(app) gameBar.onGameStart() screenUtils.stayAwake = appSettings.stayAwake + screenUtils.lockGesture = appSettings.lockGesture } catch (e: Exception) { Log.d(TAG, e.toString()) } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt index 89c66ae4..6f899bfb 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,8 +26,12 @@ import android.os.Handler import android.os.IBinder import android.os.Looper import android.os.PowerManager +import android.os.RemoteException +import android.os.ServiceManager import android.os.UserHandle +import android.util.Log import android.view.WindowManager +import com.android.internal.statusbar.IStatusBarService import com.android.internal.util.ScreenshotHelper import com.android.systemui.screenrecord.IRemoteRecording import javax.inject.Inject @@ -57,6 +62,11 @@ class ScreenUtils @Inject constructor(private val context: Context) { val recorder: IRemoteRecording? get() = remoteRecording + private var isGestureLocked = false + private val statusBarService = IStatusBarService.Stub.asInterface( + ServiceManager.getService(Context.STATUS_BAR_SERVICE) + ) + fun bind() { isRecorderBound = context.bindServiceAsUser(Intent().apply { component = ComponentName( @@ -78,6 +88,12 @@ class ScreenUtils @Inject constructor(private val context: Context) { context.unbindService(recorderConnection) } remoteRecording = null + try { + statusBarService.setBlockedGesturalNavigation(false) + isGestureLocked = false + } catch (e: RemoteException) { + Log.e("GameSpace:ScreenUtils", "Failed to toggle gesture off") + } } fun takeScreenshot(onComplete: ((Uri?) -> Unit)? = null) { @@ -99,4 +115,16 @@ class ScreenUtils @Inject constructor(private val context: Context) { wakelock?.takeIf { it.isHeld }?.release() } } + + var lockGesture = false + get() = isGestureLocked + set(enable) { + try { + statusBarService.setBlockedGesturalNavigation(enable) + field = enable + isGestureLocked = enable + } catch (e: RemoteException) { + Log.e("GameSpace:ScreenUtils", "Failed to toggle gesture") + } + } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/LockGestureTile.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/LockGestureTile.kt new file mode 100644 index 00000000..e2ca2b77 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/LockGestureTile.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2022 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.widget.tiles + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import io.chaldeaprjkt.gamespace.R +import io.chaldeaprjkt.gamespace.utils.di.ServiceViewEntryPoint +import io.chaldeaprjkt.gamespace.utils.entryPointOf + +class LockGestureTile @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null +) : BaseTile(context, attrs) { + + private val screenUtils by lazy { context.entryPointOf().screenUtils() } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + shouldLockGesture = appSettings.lockGesture + title?.text = context.getString(R.string.lock_gesture_title) + icon?.setImageResource(R.drawable.ic_gesture) + } + + private var shouldLockGesture: Boolean = false + set(value) { + field = value + if (value) { + summary?.text = context.getString(R.string.state_enabled) + } else { + summary?.text = context.getString(R.string.state_disabled) + } + appSettings.lockGesture = value + isSelected = value + screenUtils.lockGesture = value + } + + override fun onClick(v: View?) { + super.onClick(v) + shouldLockGesture = !shouldLockGesture + } +} diff --git a/app/src/main/res/drawable/ic_gesture.xml b/app/src/main/res/drawable/ic_gesture.xml new file mode 100644 index 00000000..b65cfc22 --- /dev/null +++ b/app/src/main/res/drawable/ic_gesture.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/tiles.xml b/app/src/main/res/layout/tiles.xml index 7c6d99e1..ce3beff4 100644 --- a/app/src/main/res/layout/tiles.xml +++ b/app/src/main/res/layout/tiles.xml @@ -1,24 +1,26 @@ - + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2b44398d..97cbb7a8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,6 +39,7 @@ Heads up FPS info Stay awake + Lock gesture Ringer mode Silent diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 69074ccf..0fb95c69 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -45,6 +45,11 @@ android:key="gamespace_stay_awake" android:title="@string/stay_awake_title" /> + + From 38fe62cf191aadfc84ae29869eb9699ce751b877 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 4 Jun 2022 11:10:38 +0300 Subject: [PATCH 017/214] New Crowdin updates (#4) * New translations strings.xml (Greek) * New translations strings.xml (Greek) * New translations strings.xml (Romanian) * New translations strings.xml (Korean) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Ukrainian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Japanese) * New translations strings.xml (French) * New translations strings.xml (Italian) * New translations strings.xml (Hungarian) * New translations strings.xml (Hebrew) * New translations strings.xml (Finnish) * New translations strings.xml (Greek) * New translations strings.xml (German) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Catalan) * New translations strings.xml (Arabic) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Turkish) * New translations strings.xml (Greek) * New translations strings.xml (Vietnamese) * New translations strings.xml (French) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) --- app/src/main/res/values-af-rZA/strings.xml | 10 +-- app/src/main/res/values-ar-rSA/strings.xml | 10 +-- app/src/main/res/values-ca-rES/strings.xml | 10 +-- app/src/main/res/values-cs-rCZ/strings.xml | 10 +-- app/src/main/res/values-da-rDK/strings.xml | 10 +-- app/src/main/res/values-de-rDE/strings.xml | 10 +-- app/src/main/res/values-el-rGR/strings.xml | 74 ++++++++++------------ app/src/main/res/values-es-rES/strings.xml | 10 +-- app/src/main/res/values-fi-rFI/strings.xml | 10 +-- app/src/main/res/values-fr-rFR/strings.xml | 64 +++++++++---------- app/src/main/res/values-hu-rHU/strings.xml | 10 +-- app/src/main/res/values-it-rIT/strings.xml | 10 +-- app/src/main/res/values-iw-rIL/strings.xml | 10 +-- app/src/main/res/values-ja-rJP/strings.xml | 10 +-- app/src/main/res/values-ko-rKR/strings.xml | 10 +-- app/src/main/res/values-nl-rNL/strings.xml | 10 +-- app/src/main/res/values-no-rNO/strings.xml | 10 +-- app/src/main/res/values-pl-rPL/strings.xml | 10 +-- app/src/main/res/values-pt-rBR/strings.xml | 10 +-- app/src/main/res/values-pt-rPT/strings.xml | 8 +-- app/src/main/res/values-ro-rRO/strings.xml | 10 +-- app/src/main/res/values-ru-rRU/strings.xml | 10 +-- app/src/main/res/values-sr-rSP/strings.xml | 10 +-- app/src/main/res/values-sv-rSE/strings.xml | 10 +-- app/src/main/res/values-tr-rTR/strings.xml | 8 +-- app/src/main/res/values-uk-rUA/strings.xml | 10 +-- app/src/main/res/values-vi-rVN/strings.xml | 8 +-- app/src/main/res/values-zh-rCN/strings.xml | 12 ++-- app/src/main/res/values-zh-rTW/strings.xml | 10 +-- 29 files changed, 144 insertions(+), 260 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index de285f74..90b7fe83 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -20,14 +20,11 @@ إدارة إعدادات ألعابك إختر لعبتك تعطيل السطوع التلقائي - حافظ على السطوع ثابتًا أثناء اللعب - تعطيل الإشعارات المنبثقة - عدم السماح بالإشعارات المنبثقة أثناء اللعب + Disable heads up notifications خيارات داخل اللعبة المكتبة هل ترغب حقًا في إزالة «%1$s» من مكتبتك؟ بحث - تعطيل مؤقت لإيماءة لقطة الشاشة بثلاثة أصابع أثناء اللعب تعطيل السحب لأخذ لقطة الشاشة مفعل معطل @@ -40,13 +37,13 @@ الإشعارات المنبثقة عداد معدل الإطارات البقاء في الوضع النشط - إبقاء الشاشة مضاءة أثناء اللعب + Lock gesture وضع الرنين صامت إهتزاز عادي منع أحداث الشاشة الكاملة - منع أحداث ملء الشاشة مثل المكالمات الواردة من الظهور أثناء اللعب + Prevent fullscreen events like incoming calls from appearing ضبط اللعبة الوضع المفضل استخدام واجهة المستخدم الجديدة (التجريبية) @@ -59,6 +56,5 @@ القيمة الافتراضية: %s\n أنقر مطولاً للتعيين تم تعيين القيمة الافتراضية مستوى شفافية القائمة العائمة - تعطيل مؤقت لوضع تصحيح أخطاء USB أثناء اللعب تعطيل تصحيح أخطاء USB diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index ad4c5bc9..74ebff6b 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -20,14 +20,11 @@ Spravovat herního nastavení Výběr hry Zakázat automatický jas - Zachovat nastavení jasu ve hře - Zakázat plovoucí upozornění - Zakázat vyskakování oznámení během hry + Disable heads up notifications Možnosti ve hře Knihovna Opravdu chcete odstranit %1$s z vaší knihovny? Hledat - Dočasné vypnutí gesta screenshot třemi prsty během hry Zakázat přejetí pro snímek obrazovky povoleno zakázáno @@ -40,13 +37,13 @@ Plovoucí oznámení Informace o FPS Nevypínat obrazovku - Udržet obrazovku vzhůru během hry + Lock gesture Režim vyzvánění Tichý Vibrace Normální Blokovat událost na celou obrazovku - Zabránit zobrazení příchozích hovorů v režimu celé obrazovky během hry + Prevent fullscreen events like incoming calls from appearing Konfigurace hry Preferovaný režim Použít ANGLE (experimentální) @@ -59,6 +56,5 @@ Výchozí hodnota: %s\nDlouze klepněte pro její nastavení Výchozí hodnota je nastavena Úroveň průhlednosti překrytí menu - Dočasné vypnutí ladění USB ADB během hry Zakázat ladění USB diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 0ffbed53..a92f585e 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -20,14 +20,11 @@ Spieleinrichtung verwalten Wähle dein Spiel Auto-Helligkeit deaktivieren - Helligkeit während des Spiels behalten - Heads-Up deaktivieren - Pop-Up Benachrichtigungen während des Spiels verbieten + Disable heads up notifications In-Game-Optionen Bibliothek Sind Sie sicher, dass Sie %1$s aus Ihrer Bibliothek entfernen möchten? Suchen - Wischen für Screenshot im Spiel vorübergehend deaktivieren Wischen für Screenshot deaktivieren aktiviert deaktiviert @@ -40,13 +37,13 @@ Pop-Up FPS-Info Display eingeschaltet lassen - Display im Spiel eingeschaltet lassen + Lock gesture Klingelmodus Stumm Vibration Normal Vollbild-Ereignis blockieren - Vollbild-Ereignisse wie eingehende Anrufe während des Spiels verhindern + Prevent fullscreen events like incoming calls from appearing Spiel konfigurieren Bevorzugter Modus ANGLE benutzen (experimentell) @@ -59,6 +56,5 @@ Standardwert: %s\nZum Einstellen gedrückt halten Standardwert ist eingestellt Transparenz des Overlay-Menüs - USB-ADB-Debugging vorübergehend während des Spiels deaktivieren USB-Debugging deaktivieren diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 33d7b652..fe6bf798 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -16,49 +16,45 @@ limitations under the License. --> - Game space - Manage your gaming setup - Pick your game - Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Temporary disable three-fingers-swipe screenshot gesture while in-game - Disable swipe to screenshot - enabled - disabled + Χώρος παιχνιδιού + Διαχειριστείτε τις ρυθμίσεις παιχνιδιών σας + Διάλεξε το παιχνίδι σου + Απενεργοποίηση αυτόματης φωτεινότητας + Απενεργοποίηση αναδυόμενων ειδοποιήσεων + Επιλογές εντός του παιχνιδιού + Βιβλιοθήκη + Είστε βέβαιοι ότι θέλετε να αφαιρέσετε το %1$s από τη βιβλιοθήκη σας; + Αναζήτηση + Απενεργοποίηση συρσίματος για στιγμιότυπο οθόνης + ενεργό + ανενεργό - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info - Stay awake - Keep screen awake while in the game - Ringer mode - Silent - Vibrate - Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + Λειτουργία + Δεν υποστηρίζεται + Κανονικό + Επιδόσεις + Μπαταρία + Αναδυόμενες ειδοποιήσεις + Πληροφορίες FPS + Παραμονή σε λειτουργία + Χειρονομία κλειδώματος + Λειτουργία κουδουνίσματος + Αθόρυβο + Δόνηση + Κανονικό + Αποκλεισμός συμβάντος πλήρους οθόνης + Αποτροπή εμφάνισης συμβάντων πλήρους οθόνης όπως οι εισερχόμενες κλήσεις + Διαμόρφωση παιχνιδιού + Προτιμώμενη λειτουργία + Χρήση ANGLE (πειραματικό) + Χρήση του ANGLE renderer αντί των εγγενών προγραμμάτων οδήγησης GLES.\nΠΡΟΕΙΔΟΠΟΙΗΣΗ!! Μπορεί να χαλάσει τα γραφικά του παιχνιδιού, χρησιμοποιήστε με προσοχή! + Το ANGLE δεν είναι διαθέσιμο στο σύστημά σας + Αφαίρεση του %1$s από τη βιβλιοθήκη Τιμή: %s από προεπιλογή Προεπιλεγμένη τιμή: %s\nΠατήστε παρατεταμένα για να ορίσετε Η προεπιλεγμένη τιμή έχει οριστεί - Overlay menu opacity level - Temporary disable USB ADB debugging while in-game - Disable USB debugging + Επίπεδο αδιαφάνειας μενού επικάλυψης + Απενεργοποίηση εντοπισμού σφαλμάτων USB diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 90a7ebc1..64bb2398 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -20,14 +20,11 @@ Administra tu configuración de juegos Elige tu juego Desactivar brillo automático - Mantener el brillo establecido durante el juego - Desactivar notificaciones flotantes - No permitir notificaciones emergentes durante el juego + Disable heads up notifications Opciones en el juego Biblioteca ¿Está seguro que desea eliminar %1$s de su biblioteca? Buscar - Deshabilita temporalmente el gesto de captura de pantalla con tres dedos durante el juego Desactivar deslizar para captura de pantalla activado desactivado @@ -40,13 +37,13 @@ Notificaciones flotantes Información de FPS Permanecer encendido - Mantener la pantalla encendida durante el juego + Lock gesture Modo de timbre Silencio Vibrar Normal Bloquear eventos en pantalla completa - Evitar que eventos de pantalla completa como llamadas entrantes aparezcan en el juego + Prevent fullscreen events like incoming calls from appearing Configurar juego Modo preferido Usar nueva interfaz de usuario (experimental) @@ -60,6 +57,5 @@ Mantén presionado para establecer Valor predeterminado establecido Nivel de opacidad del menú de superposición - Inhabilita temporalmente la depuración USB ADB durante el juego Desactivar depuración USB diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 38b9b44b..16835305 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,49 +16,45 @@ limitations under the License. --> - Game space + Espace de jeu Manage your gaming setup - Pick your game - Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Temporary disable three-fingers-swipe screenshot gesture while in-game - Disable swipe to screenshot - enabled - disabled + Choisissez votre jeu + Désactiver la luminosité automatique + Désactiver les notifications flottantes + Options en jeu + Bibliothèque + Êtes-vous sûr de vouloir retirer %1$s de votre bibliothèque ? + Rechercher + Désactiver le glissement pour faire une capture d\'écran + activé + désactivé Mode - Unsupported + Non-supporté Standard Performance - Battery - Heads up - FPS info - Stay awake - Keep screen awake while in the game - Ringer mode - Silent - Vibrate + Batterie + Notifications flottantes + Infos FPS + Rester éveillé + Gestes de verrouillage + Mode sonnerie + Silencieux + Vibrer Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + Bloquer les évènements en plein écran + Empêcher les événements en plein écran comme les appels entrants d\'apparaître + Configurer le jeu + Mode préféré + Utiliser ANGLE (expérimental) + Utiliser le moteur de rendu ANGLE au lieu des pilotes GLES natifs.\nATTENTION!! Peut altérer le rendu graphique de jeu, utiliser avec précaution ! + ANGLE n\'est pas disponible pour votre système + Retirer %1$s de la bibliothèque Valeur : %s par défaut Valeur par défaut : %s\nRester appuyer pour définir Valeur par défaut définie - Overlay menu opacity level - Temporary disable USB ADB debugging while in-game - Disable USB debugging + Niveau d\'opacité du menu de superposition + Désactiver le débogage USB diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 12112b6c..fcbebbaa 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Válaszd ki a játékod Az automatikus fényerőszabályzás tiltása - Tartsa a beállított fényerőt játék közben - Felugró értesítés kikapcsolása - A felugró értesítések letiltása játék közben + Disable heads up notifications Játékon belüli lehetőségek Könyvtár Are you sure you want to remove %1$s from your library? Keresés - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Az alapértelmezett érték beállítva Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 098fe265..a5e21d86 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -20,14 +20,11 @@ Gestisci la tua configurazione di gioco Scegli il tuo gioco Disabilita luminosità automatica - Mantieni la luminosità regolata durante la partita - Disattiva heads up - Disabilita le notifiche popup durante il gioco + Disable heads up notifications Opzioni di gioco Libreria Sei sicuro di voler rimuovere %1$s dalla tua libreria? Cerca - Disabilita temporaneamente il gesto dello screenshot a tre dita durante il gioco Disabilita lo scorrimento per screenshot abilita disabilitato @@ -40,13 +37,13 @@ Notifiche Fluttuanti Info FPS Resta attivo - Mantieni lo schermo attivo durante il gioco + Lock gesture Modalità suoneria Silenzioso Vibrazione Normale Blocca evento a schermo intero - Evitare che vengano visualizzati eventi a schermo intero come le chiamate in arrivo durante il gioco + Prevent fullscreen events like incoming calls from appearing Configura gioco Modalità preferita Usa nuova interfaccia (sperimentale) @@ -59,6 +56,5 @@ Valore predefinito: %s\nTocca a lungo per impostare Valore predefinito impostato Livello di opacità menù sovrapposizione - Disabilita temporaneamente il debug ADB USB durante il gioco Disabilita debug USB diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 8fcb59da..80f2520d 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ 既定値: %s\n長押しで設定 既定値が設定されています Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 588c7354..a6ba02e3 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ 기본값: %s\n길게 눌러서 설정 기본값으로 설정됨 Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 9b6be059..1a4446b9 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -20,14 +20,11 @@ Beheer uw gaming-instellingen Kies je spel Automatische helderheid uitschakelen - Houd helderheid aan tijdens in-game - Deactiveer heads up - Zet pop-up meldingen uit terwijl je in-game bent + Disable heads up notifications In-game opties Bibliotheek Weet je zeker dat je %1$s uit je bibliotheek wilt verwijderen? Zoeken - Tijdelijk drie-vingers veeg schermafbeelding uitschakelen terwijl in-game Veeg naar schermafbeelding uitschakelen ingeschakeld uitgeschakeld @@ -40,13 +37,13 @@ Heads up FPS info Blijf aan - Houd scherm aan tijdens het spel + Lock gesture Beltoonmodus Stil Vibreren Normaal Blokkeer volledig scherm event - Voorkom dat volledig scherm events zoals inkomende oproepen worden weergegeven tijdens in-game + Prevent fullscreen events like incoming calls from appearing Spel configureren Voorkeursmodus Gebruik ANGLE (experimenteel) @@ -59,6 +56,5 @@ Standaard waarde: %s\nLang indrukken om in te stellen Standaard waarde is ingesteld Transparantieniveau van overlappingsmenu - Tijdelijke uitschakelen USB ADB foutopsporing tijdens in-game Usb-foutopsporing uitschakelen diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 7f5bbe68..7fdc058b 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -20,14 +20,11 @@ Zarządzaj konfiguracją gier Wybierz swoją grę Wyłącz automatyczną jasność - Utrzymuj jasność na stałym poziomie podczas gry - Wyłącz wyskakujące powiadomienia - Zablokuj wyskakujące powiadomienia w grze + Disable heads up notifications Opcje w grze Biblioteka Czy na pewno chcesz usunąć %1$s z Twojej biblioteki? Szukaj - Tymczasowe wyłączenie gestu zrzutu ekranu trzema palcami podczas gry Wyłączenie funkcji przeciągnięcia palcem w celu wykonania zrzutu ekranu włączone wyłączone @@ -40,13 +37,13 @@ Wyskakujące powiadomienia Wskaźnik FPS Pozostaw włączony ekran - Nie wyłączaj ekranu podczas gry + Lock gesture Tryb dzwonka Tryb cichy Wibracje Normalny Zablokuj wydarzenie na pełnym ekranie - Zapobiegaj pojawianiu się wydarzeń na pełnym ekranie, takich jak połączenia przychodzące podczas grania + Prevent fullscreen events like incoming calls from appearing Skonfiguruj grę Preferowany tryb Użyj ANGLE (eksperymentalne) @@ -59,6 +56,5 @@ Wartość domyślna: %s\nPrzytrzymaj dłużej by ustawić Wartość domyślna jest ustawiona Poziom przezroczystości nakładki menu - Tymczasowe wyłączenie debugowania USB ADB podczas gry Wyłącz debugowanie USB diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f52c1689..4b1f3d12 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -20,14 +20,11 @@ Gerencie sua configuração de jogos Seletor de Aplicativos Brilho automático desativado - Brilho automático desativado sumário - Desativar notificações Heads Up - Desativar notificações flutuantes enquanto estiver jogando + Desativar notificações flutuantes Opções do jogo Lista de jogos Tem certeza de que deseja remover %1$s da sua biblioteca? Pesquisa - Desativar o gesto de três dedos para captura de tela durante o jogo Desativar deslize para captura de tela ativado desabilitado @@ -40,13 +37,13 @@ Notificações flutuantes Informações de FPS Permanecer ativo - Mantenha a tela ligada quando estiver no jogo + Bloquear gestos Modo de toque Silencioso Vibrar Normal Bloquear eventos em tela cheia - Impedir que eventos em tela cheia apareçam durante o jogo + Impedir que eventos em tela cheia como chamadas recebidas apareçam Configurar jogo Modo preferencial Usar ANGLE (experimental) @@ -59,6 +56,5 @@ Valor padrão: %s\nToque longo para definir Valor padrão definido Nível de opacidade do menu de sobreposição - Desativar temporariamente a depuração USB durante o jogo Desativar depuração USB diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index d67ea390..34d1ce56 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -20,14 +20,11 @@ Gerir a sua configuração de jogos Escolha o seu jogo Desativar brilho automático - Manter o brilho constante durante o jogo Desativar notificações flutuantes - Desativar notificações flutuantes enquanto estiver a jogar Opções do jogo Biblioteca de jogos Tem certeza de que deseja remover %1$s da sua biblioteca? Procurar - Desativar temporariamente o gesto de deslizar três dedos para capturar ecrã enquanto estiver a jogar Desativar deslizar para capturar ecrã ativado desativado @@ -40,13 +37,13 @@ Notificações flutuantes Info. de FPS Manter ativo - Manter o ecrã ligado durante o jogo + Bloquear gestos Modo de toque Silencioso Vibrar Normal Bloquear eventos em ecrã inteiro - Impedir que eventos em ecrã inteiro, como receber chamadas, ocorram durante o jogo + Impedir que ocorram eventos em ecrã inteiro, como receber chamadas Configurar jogo Modo preferido Usar ANGLE (experimental) @@ -59,6 +56,5 @@ Valor padrão: %s\nO Prima para definir O valor padrão está definido Transparência do menu de sobreposição - Desativar temporariamente a depuração USB ADB durante o jogo Desativar depuração USB diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index e9cddfbd..cee063a9 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -20,14 +20,11 @@ Gestionează-ți configurarea jocurilor Alege-ți numele Dezactivează luminozitatea automată - Păstrează luminozitatea setată în timpul jocului - Dezactivați atenționarea - Nu permiteți notificări pop-up în joc + Disable heads up notifications Opțiuni în joc Bibliotecă Sunteți sigur că doriți să ștergeți %1$s din bibliotecă? Căutare - Dezactivare temporară capturii de ecran cu trei degete în timpul jocului Dezactivează glisarea pentru captură de ecran activat dezactivat @@ -40,13 +37,13 @@ Atenționări Informații FPS Menține ecranul activ - Păstrează ecranul deschis în joc + Lock gesture Mod sonerie Silențios Vibrații Normal Blocare eveniment pe tot ecranul - Împiedică apariția evenimentelor pe tot ecranul, cum ar fi apelurile primite în timpul jocului + Prevent fullscreen events like incoming calls from appearing Configurare joc Mod preferat Utilizează ANGLE (experimental) @@ -59,6 +56,5 @@ Valoare implicită: %s\nAtingeți lung pentru a seta Valoarea implicită este setată Opacitate pentru meniul suprapus - Dezactivați temporar depanarea USB ADB în timpul jocului Dezactivează depanarea USB diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 833ff4f1..724f9498 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -20,14 +20,11 @@ Настройка игровых возможностей Выберите свою игру Отключить автоматическую яркость - Не менять яркость во время игры - Отключить всплывающие уведомления - Запретить всплывающие уведомления во время игры + Disable heads up notifications Настройки игры Библиотека Вы уверены, что хотите удалить %1$s из своей библиотеки? Поиск - Временно отключить свайп тремя пальцами для скриншота время игры Отключить свайп для скриншота включено отключено @@ -40,13 +37,13 @@ Всплывающие уведомления Информация о FPS Не отключать экран - Не отключать экран, пока вы в игре + Lock gesture Режим звонка в игре Беззвучный Вибрация Обычный Блокировать полноэкранные уведомления - Предотвращать появление полноэкранных уведомлений, таких как входящие вызовы, во время игры + Prevent fullscreen events like incoming calls from appearing Настроить игру Предпочтительный режим Использовать ANGLE (эксперементально) @@ -59,6 +56,5 @@ Значение по умолчанию: %s\nУдерживайте для установки Значение по умолчанию установлено Уровень прозрачности меню игрового режима - Временно отключить отладку USB ADB во время игры Отключить отладку по USB diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 736517e8..1ac3f9a0 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ Default value: %s\nLong tap to set Default value is set Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index d5048f13..dddfee40 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -20,14 +20,11 @@ Oyun kurulumunuzu yönetin Oyununu seç Otomatik parlaklığı devre dışı bırak - Oyun içindeyken parlaklığı sabit tutun - Üst bildirimleri devre dışı bırak - Oyun içindeyken açılır bildirimlere izin verme + Uyarı bildirimlerini devre dışı bırak Oyun içi seçenekleri Arşiv %1$s arşivden kaldırmak istediğinizden emin misiniz? Ara - Oyundayken üç parmakla kaydırarak ekran görüntüsü alma hareketini geçici olarak devre dışı bırak Üç parmak hareketini devre dışı bırak etkin devre dışı @@ -40,7 +37,7 @@ Bildirim pencereleri FPS bilgisi Uyanık kal - Oyundayken ekranı uyanık tutun + Hareketi kilitle Zil sesi modu Sessiz Titreşim @@ -59,6 +56,5 @@ Varsayılan değer: %s\nAyarlamak için uzun basın Varsayılan değer ayarlandı Arayüz menüsü şeffaflığı - Oyun sırasında USB ADB hata ayıklamasını geçici olarak devre dışı bırakın USB hata ayıklamasını devre dışı bırak diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 3767c4a4..ec4c81e3 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -20,14 +20,11 @@ Керування налаштуваннями гри Виберіть свою гру Вимкнути автояскравість - Не змінювати яскравість під час гри - Вимкнути спливаючі сповіщення - Заборонити спливаючі сповіщення під час гри + Disable heads up notifications Налаштування гри Бібліотека Ви впевнені, що хочете видалити %1$s зі своєї бібліотеки? Пошук - Тимчасово вимкнути жест трьома пальцями для скриншоту під час гри Вимкнути свайп для знімка екрану увімкнено вимкнуто @@ -40,13 +37,13 @@ Спливаючі сповіщення Інформація про FPS Залишати активним - Залишати екран увімкненим під час гри + Lock gesture Режим дзвінка Беззвучний Вібрація Звичайний Блокувати повноекранні сповіщення - Запобігає появі повноекранних сповіщень, таких як вхідні дзвінки, під час гри + Prevent fullscreen events like incoming calls from appearing Налаштувати гру Переважний режим Використовувати ANGLE (експериментально) @@ -59,6 +56,5 @@ Значення за замовчуванням: %s\nДовге натискання для встановлення Значення за замовчуванням встановлено Рівень непрозорості меню ігрового режиму - Тимчасово вимкнути налагодження USB USB під час гри Вимкнути налагодження USB diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 5fd0387d..a5c8bcd7 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -20,14 +20,11 @@ Quản lý thiết lập trò chơi của bạn Chọn trò chơi của bạn Vô hiệu hóa độ sáng tự động - Giữ độ sáng ổn định khi ở trong trò chơi - Không cho phép cửa sổ nổi lên - Không cho phép thông báo bật lên khi ở trong trò chơi + Tắt thông báo nổi Tùy chọn trong trò chơi Thư viện Yes? Tìm kiếm - Tạm thời vô hiệu hóa cử chỉ vuốt ảnh chụp màn hình bằng ba ngón tay khi ở trong trò chơi Tắt tính năng vuốt đến ảnh chụp màn hình đã bật đã tắt @@ -40,7 +37,7 @@ Thông báo nổi Thông tin FPS Không khóa màn hình - Giữ màn hình ở chế độ thức khi chơi trò chơi + Khóa cử chỉ Chế độ chuông Im lặng Rung @@ -59,6 +56,5 @@ Giá trị mặc định: %s\nNhấn giữ lâu để thiết lập Đã đặt giá trị mặc định Mức độ mờ của menu - Tạm thời vô hiệu hóa gỡ lỗi USB ADB khi ở trong trò chơi Vô hiệu hóa gỡ lỗi USB diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e5dcb9ca..5bfd80d7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -20,19 +20,16 @@ 管理您的游戏设置 选择您的游戏 禁用自动调节亮度 - 在游戏中保持亮度稳定 禁用浮动通知 - 游戏中不允许浮动通知弹出 游戏中选项 游戏列表 您确定要将 %1$s 从您的游戏列表中移除吗? 搜索 - 游戏中暂时禁用滑动截屏 禁用滑动截屏 已启用 已禁用 - 模式 + 游戏模式 不支持 标准 性能 @@ -40,18 +37,18 @@ 浮动通知 FPS 信息 保持唤醒 - 游戏中保持屏幕唤醒状态 + 锁定手势 响铃模式 静音 振动 正常 屏蔽全屏事件 - 在游戏中阻止全屏事件如来电时显示 + 防止在游戏中出现来电等全屏事件 配置游戏 首选模式 使用 ANGLE 渲染器 (实验性) 使用 ANGLE 渲染器而不是本机的 GLES 驱动器。\n警告!! 可能会破坏游戏图形, 请谨慎使用! - ANGLE 在您的系统上不可用 + ANGLE 渲染器在当前系统中不可用 从游戏列表中移除 %1$s 值: %s @@ -59,6 +56,5 @@ 默认值: %s\n长按设置 恢复默认值 覆盖菜单不透明度级别 - 游戏中暂时禁用 USB ADB 调试 禁用 USB 调试 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index da700d75..16ddf9b2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -20,14 +20,11 @@ Manage your gaming setup Pick your game Disable auto-brightness - Keep brightness settled while in-game - Disable heads up - Disallow pop up notifications while in-game + Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? Search - Temporary disable three-fingers-swipe screenshot gesture while in-game Disable swipe to screenshot enabled disabled @@ -40,13 +37,13 @@ Heads up FPS info Stay awake - Keep screen awake while in the game + Lock gesture Ringer mode Silent Vibrate Normal Block fullscreen event - Prevent fullscreen events like incoming calls from appearing while in-game + Prevent fullscreen events like incoming calls from appearing Configure game Preferred mode Use ANGLE (experimental) @@ -59,6 +56,5 @@ 預設值:%s\n長按以設定 已設定為預設值 Overlay menu opacity level - Temporary disable USB ADB debugging while in-game Disable USB debugging From 871d4cdd74c7cdaa4ab727d25b5228c48f38aa54 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 5 Jun 2022 13:16:23 +0300 Subject: [PATCH 018/214] New Crowdin updates (#5) * New translations strings.xml (German) * New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-de-rDE/strings.xml | 6 ++--- app/src/main/res/values-zh-rTW/strings.xml | 26 +++++++++++----------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index a92f585e..6766e4bb 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -20,7 +20,7 @@ Spieleinrichtung verwalten Wähle dein Spiel Auto-Helligkeit deaktivieren - Disable heads up notifications + Pop-up-Benachrichtigungen deaktivieren In-Game-Optionen Bibliothek Sind Sie sicher, dass Sie %1$s aus Ihrer Bibliothek entfernen möchten? @@ -37,13 +37,13 @@ Pop-Up FPS-Info Display eingeschaltet lassen - Lock gesture + Gesten deaktivieren Klingelmodus Stumm Vibration Normal Vollbild-Ereignis blockieren - Prevent fullscreen events like incoming calls from appearing + Deaktivieren von Vollbildbenachrichtigungen (z. B. eingehende Anrufe) Spiel konfigurieren Bevorzugter Modus ANGLE benutzen (experimentell) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 16ddf9b2..68f760e0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,20 +16,20 @@ limitations under the License. --> - Game space - Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled + 遊戲空間 + 管理您的遊戲設定 + 選擇遊戲 + 停用自動亮度 + 停用浮動通知 + 遊戲中選項 + 遊戲庫 + 您確定要將 %1$s 從遊戲庫移除嗎? + 搜尋 + 停用滑動截圖手勢 + 已啟用 + 已停用 - Mode + 模式 Unsupported Standard Performance From 4851714f19d1032f4e36f38d1c96e2725bf7f04c Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 5 Jun 2022 16:11:38 +0530 Subject: [PATCH 019/214] GameSpace: Add time/date in panel view TODO: Check for better location / format later. Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 24 ++++++++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 26 insertions(+) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 28e50ae2..3040ad40 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -43,6 +43,30 @@ android:text="@string/settings_title" android:textSize="32sp" /> + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97cbb7a8..3c6e445c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,4 +65,6 @@ Overlay menu opacity level Disable USB debugging + + dd.MM.yyyy From 7f3727919bb4b1922e4cd93ac914d9beee2fa8d6 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 6 Jun 2022 02:12:01 +0530 Subject: [PATCH 020/214] GameSpace: Fix per game configure icon on light theme Signed-off-by: Pranav Vashi --- app/src/main/res/drawable/ic_gear.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/drawable/ic_gear.xml b/app/src/main/res/drawable/ic_gear.xml index 8fae13f4..f0590c25 100644 --- a/app/src/main/res/drawable/ic_gear.xml +++ b/app/src/main/res/drawable/ic_gear.xml @@ -14,16 +14,17 @@ See the License for the specific language governing permissions and limitations under the License. --> - + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0" + android:tint="?android:attr/colorControlNormal"> + From ad924d5acb9c336d82e270b399abb78774f54eea Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 6 Jun 2022 15:09:34 +0300 Subject: [PATCH 021/214] New Crowdin updates (#6) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Russian) * New translations strings.xml (Polish) * New translations strings.xml (Romanian) --- app/src/main/res/values-pl-rPL/strings.xml | 6 +-- app/src/main/res/values-ro-rRO/strings.xml | 6 +-- app/src/main/res/values-ru-rRU/strings.xml | 6 +-- app/src/main/res/values-zh-rTW/strings.xml | 46 +++++++++++----------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 7fdc058b..57ce7fb2 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -20,7 +20,7 @@ Zarządzaj konfiguracją gier Wybierz swoją grę Wyłącz automatyczną jasność - Disable heads up notifications + Wyłącz wyskakujące powiadomienia Opcje w grze Biblioteka Czy na pewno chcesz usunąć %1$s z Twojej biblioteki? @@ -37,13 +37,13 @@ Wyskakujące powiadomienia Wskaźnik FPS Pozostaw włączony ekran - Lock gesture + Gest blokady Tryb dzwonka Tryb cichy Wibracje Normalny Zablokuj wydarzenie na pełnym ekranie - Prevent fullscreen events like incoming calls from appearing + Zapobiegaj pojawianiu się wydarzeń na pełnym ekranie, takich jak połączenia przychodzące Skonfiguruj grę Preferowany tryb Użyj ANGLE (eksperymentalne) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index cee063a9..94a5831d 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -20,7 +20,7 @@ Gestionează-ți configurarea jocurilor Alege-ți numele Dezactivează luminozitatea automată - Disable heads up notifications + Dezactivează notificările de atenţionare Opțiuni în joc Bibliotecă Sunteți sigur că doriți să ștergeți %1$s din bibliotecă? @@ -37,13 +37,13 @@ Atenționări Informații FPS Menține ecranul activ - Lock gesture + Gest de blocare Mod sonerie Silențios Vibrații Normal Blocare eveniment pe tot ecranul - Prevent fullscreen events like incoming calls from appearing + Împiedicați apariția evenimentelor de pe tot ecranul, cum ar fi apelurile primite Configurare joc Mod preferat Utilizează ANGLE (experimental) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 724f9498..c77624fe 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -20,7 +20,7 @@ Настройка игровых возможностей Выберите свою игру Отключить автоматическую яркость - Disable heads up notifications + Отключить всплывающие уведомления Настройки игры Библиотека Вы уверены, что хотите удалить %1$s из своей библиотеки? @@ -37,13 +37,13 @@ Всплывающие уведомления Информация о FPS Не отключать экран - Lock gesture + Блокировать жесты Режим звонка в игре Беззвучный Вибрация Обычный Блокировать полноэкранные уведомления - Prevent fullscreen events like incoming calls from appearing + Предотвращение появления полноэкранных событий, таких как входящие вызовы Настроить игру Предпочтительный режим Использовать ANGLE (эксперементально) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 68f760e0..885fd3ef 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -29,32 +29,32 @@ 已啟用 已停用 - 模式 - Unsupported - Standard - Performance - Battery - Heads up - FPS info - Stay awake - Lock gesture - Ringer mode - Silent - Vibrate - Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + 模式 + 不支援 + 一般 + 高效能 + 省電 + 浮動通知 + 幀數 + 螢幕保持開啟 + 鎖定手勢 + 鈴聲模式 + 靜音 + 震動 + 正常 + 封鎖全螢幕活動 + 防止如電話等的應用程式彈出全螢幕畫面 + 遊戲選項 + 偏好模式 + 使用 ANGLE (實驗性功能) + 使用 ANGLE 渲染畫面而非原生的 GLES 驅動。\n警告!遊戲畫面可能出現破圖等現象,請謹慎使用。 + 您的系統不支援 ANGLE + 從遊戲庫中移除 %1$s 數值: %s 預設 預設值:%s\n長按以設定 已設定為預設值 - Overlay menu opacity level - Disable USB debugging + 不透明度 + 停用 USB 偵錯 From 7f30630ccae94724ca1e64723dc5378dab4e9a4b Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 6 Jun 2022 20:15:11 +0530 Subject: [PATCH 022/214] GameSpace: Set default panel view opacity to 100% * Panel view purpose is not to stay permanently on screen. Signed-off-by: Pranav Vashi --- app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt | 2 +- app/src/main/res/xml/root_preferences.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 423a73b3..9b6fbcb2 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -62,7 +62,7 @@ class AppSettings @Inject constructor(private val context: Context) { set(value) = db.edit().putString(KEY_RINGER_MODE, value.toString()).apply() var menuOpacity: Int - get() = db.getInt(KEY_MENU_OPACITY, 75) + get() = db.getInt(KEY_MENU_OPACITY, 100) set(value) = db.edit().putInt(KEY_MENU_OPACITY, value).apply() var noAdbEnabled diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 0fb95c69..831d243b 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -71,7 +71,7 @@ From 161799a26ce5f05982e682183e78a6572735e26c Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 6 Jun 2022 20:12:12 +0530 Subject: [PATCH 023/214] GameSpace: Redesign layout with time/date views * Follow time/date format same as that of system. Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 58 ++++++++++++++++---------- app/src/main/res/layout/tiles.xml | 4 +- app/src/main/res/values/strings.xml | 2 - 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 3040ad40..9c8ce155 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -35,37 +35,49 @@ android:orientation="vertical" android:padding="16dp"> - + android:layout_height="wrap_content"> - - - + android:layout_alignParentStart="true" + android:fontFamily="@*android:string/config_lightFontFamily" + android:gravity="start|center_vertical" + android:text="@string/settings_title" + android:textSize="32sp" /> - - + android:layout_alignParentEnd="true" + android:gravity="end|center_vertical" + android:orientation="vertical"> + + + + + + + diff --git a/app/src/main/res/layout/tiles.xml b/app/src/main/res/layout/tiles.xml index ce3beff4..f5ea0430 100644 --- a/app/src/main/res/layout/tiles.xml +++ b/app/src/main/res/layout/tiles.xml @@ -17,9 +17,9 @@ --> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3c6e445c..97cbb7a8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,6 +65,4 @@ Overlay menu opacity level Disable USB debugging - - dd.MM.yyyy From ccc0395c2b06a5bf5d5474f23d276ae1cfe2a787 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 6 Jun 2022 21:03:56 +0530 Subject: [PATCH 024/214] GameSpace: Add battery remaining text * Ported from old Gaming Space. Signed-off-by: Pranav Vashi --- .../gamespace/widget/BatteryView.kt | 70 +++++++++++++++++++ app/src/main/res/layout/panel_view.xml | 7 ++ app/src/main/res/values/strings.xml | 2 + 3 files changed, 79 insertions(+) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt new file mode 100644 index 00000000..24eb54d4 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2020 The exTHmUI Open Source Project + * 2021 AOSP-Krypton Project + * 2022 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.widget + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.BatteryManager +import android.util.AttributeSet +import android.widget.TextView + +import io.chaldeaprjkt.gamespace.R + +@SuppressLint("AppCompatCustomView") +class BatteryView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0, + defStyleRes: Int = 0, +) : TextView(context, attrs, defStyleAttr, defStyleRes) { + + private val batteryChangeReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + if (intent.action == Intent.ACTION_BATTERY_CHANGED) { + val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0) + val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0) + val percent = (level.toFloat() / scale * 100).toInt() + text = context.getString(R.string.battery_format, percent) + } + } + } + + init { + val batteryManager = context.getSystemService(BatteryManager::class.java) + text = context.getString( + R.string.battery_format, + batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) + ) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + context.registerReceiver( + batteryChangeReceiver, + IntentFilter(Intent.ACTION_BATTERY_CHANGED) + ) + } + + override fun onDetachedFromWindow() { + context.unregisterReceiver(batteryChangeReceiver) + super.onDetachedFromWindow() + } +} diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 9c8ce155..ab5dbd2b 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -79,6 +79,13 @@ + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97cbb7a8..c7d0f414 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,4 +65,6 @@ Overlay menu opacity level Disable USB debugging + + Battery: %1$d%% From cdd24063df6b7b2f610957c438c4ac03979a6cbf Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 7 Jun 2022 08:41:08 +0530 Subject: [PATCH 025/214] GameSpace: Redesign overlay with battery text and time views * Preview: https://ibb.co/WBKsj1r Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 58 +++++++++++++------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index ab5dbd2b..d181ffdb 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -47,45 +47,45 @@ android:fontFamily="@*android:string/config_lightFontFamily" android:gravity="start|center_vertical" android:text="@string/settings_title" - android:textSize="32sp" /> + android:textSize="30sp" /> - + android:format12Hour="h:mm" + android:format24Hour="kk:mm" + android:textSize="30sp" /> + - + - + - + - - From 5b8e1f3032904b97270abd162dcc82c35a4785c9 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 10 Jun 2022 20:42:35 +0530 Subject: [PATCH 026/214] GameSpace: Add memory info in game overlay * Reduce font sizes and padding slightly. Co-authored-by: LibXZR Co-authored-by: minarypenguin Signed-off-by: Pranav Vashi --- .../gamespace/widget/MemoryView.java | 82 +++++++++++++++++++ app/src/main/res/layout/panel_view.xml | 17 ++-- app/src/main/res/values/strings.xml | 2 + 3 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/widget/MemoryView.java diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MemoryView.java b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MemoryView.java new file mode 100644 index 00000000..8e18c8e9 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MemoryView.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2022 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.widget; + +import android.app.ActivityManager; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.util.AttributeSet; +import android.view.View; +import android.widget.TextView; + +import java.lang.Runnable; + +import io.chaldeaprjkt.gamespace.R; + +public class MemoryView extends TextView { + + private ActivityManager mActivityManager; + + private Handler mHandler; + private MemInfoWorker mWorker; + + public MemoryView(Context context, AttributeSet attrs) { + super(context, attrs); + + mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + mHandler = new Handler(Looper.getMainLooper()); + mWorker = new MemInfoWorker(); + } + + /* Hijack this method to detect visibility rather than + * onVisibilityChanged() because the the latter one can be + * influenced by more factors, leading to unstable behavior. */ + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + + if (visibility == VISIBLE) + mHandler.post(mWorker); + else + mHandler.removeCallbacks(mWorker); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + setVisibility(VISIBLE); + } + + @Override + public void onDetachedFromWindow() { + setVisibility(GONE); + super.onDetachedFromWindow(); + } + + private class MemInfoWorker implements Runnable { + @Override + public void run() { + ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); + mActivityManager.getMemoryInfo(memInfo); + int availMemMiB = (int)(memInfo.availMem / 1048576L); + int totalMemMiB = (int)(memInfo.totalMem / 1048576L); + setText(getContext().getString(R.string.memory_format, availMemMiB, totalMemMiB)); + + mHandler.postDelayed(this, 1000); + } + } +} diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index d181ffdb..b6d0abb4 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -33,7 +33,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" - android:padding="16dp"> + android:padding="13dp"> + android:textSize="26sp" /> + android:textSize="26sp" /> + android:textSize="13sp" /> + android:textSize="13sp" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c7d0f414..04afd1b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,4 +67,6 @@ Disable USB debugging Battery: %1$d%% + Memory: %1$d\/%2$d MB + From 1827689ae14ac8d6c6103ff17ef856fdaef3e488 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 13 Jun 2022 10:07:03 +0300 Subject: [PATCH 027/214] New Crowdin updates (#8) * New translations strings.xml (Romanian) * New translations strings.xml (Korean) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Ukrainian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Japanese) * New translations strings.xml (French) * New translations strings.xml (Italian) * New translations strings.xml (Hungarian) * New translations strings.xml (Hebrew) * New translations strings.xml (Finnish) * New translations strings.xml (Greek) * New translations strings.xml (German) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Catalan) * New translations strings.xml (Arabic) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-af-rZA/strings.xml | 2 + app/src/main/res/values-ar-rSA/strings.xml | 2 + app/src/main/res/values-ca-rES/strings.xml | 2 + app/src/main/res/values-cs-rCZ/strings.xml | 2 + app/src/main/res/values-da-rDK/strings.xml | 2 + app/src/main/res/values-de-rDE/strings.xml | 2 + app/src/main/res/values-el-rGR/strings.xml | 2 + app/src/main/res/values-es-rES/strings.xml | 2 + app/src/main/res/values-fi-rFI/strings.xml | 2 + app/src/main/res/values-fr-rFR/strings.xml | 2 + app/src/main/res/values-hu-rHU/strings.xml | 2 + app/src/main/res/values-it-rIT/strings.xml | 8 ++- app/src/main/res/values-iw-rIL/strings.xml | 2 + app/src/main/res/values-ja-rJP/strings.xml | 2 + app/src/main/res/values-ko-rKR/strings.xml | 72 +++++++++++----------- app/src/main/res/values-nl-rNL/strings.xml | 2 + app/src/main/res/values-no-rNO/strings.xml | 2 + app/src/main/res/values-pl-rPL/strings.xml | 2 + app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-pt-rPT/strings.xml | 2 + app/src/main/res/values-ro-rRO/strings.xml | 2 + app/src/main/res/values-ru-rRU/strings.xml | 2 + app/src/main/res/values-sr-rSP/strings.xml | 2 + app/src/main/res/values-sv-rSE/strings.xml | 2 + app/src/main/res/values-tr-rTR/strings.xml | 2 + app/src/main/res/values-uk-rUA/strings.xml | 8 ++- app/src/main/res/values-vi-rVN/strings.xml | 2 + app/src/main/res/values-zh-rCN/strings.xml | 2 + app/src/main/res/values-zh-rTW/strings.xml | 2 + 29 files changed, 99 insertions(+), 41 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 90b7fe83..ec32e76b 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -57,4 +57,6 @@ تم تعيين القيمة الافتراضية مستوى شفافية القائمة العائمة تعطيل تصحيح أخطاء USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 74ebff6b..6d0f2d40 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -57,4 +57,6 @@ Výchozí hodnota je nastavena Úroveň průhlednosti překrytí menu Zakázat ladění USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 6766e4bb..cea0e2fb 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -57,4 +57,6 @@ Standardwert ist eingestellt Transparenz des Overlay-Menüs USB-Debugging deaktivieren + Akku:  %1$d%%  + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index fe6bf798..3433a842 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -57,4 +57,6 @@ Η προεπιλεγμένη τιμή έχει οριστεί Επίπεδο αδιαφάνειας μενού επικάλυψης Απενεργοποίηση εντοπισμού σφαλμάτων USB + Μπαταρία: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 64bb2398..0420dab5 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -58,4 +58,6 @@ Mantén presionado para establecer Valor predeterminado establecido Nivel de opacidad del menú de superposición Desactivar depuración USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 16835305..316d7188 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -57,4 +57,6 @@ Valeur par défaut définie Niveau d\'opacité du menu de superposition Désactiver le débogage USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index fcbebbaa..c46a11b7 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -57,4 +57,6 @@ Az alapértelmezett érték beállítva Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index a5e21d86..efd04d49 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -20,7 +20,7 @@ Gestisci la tua configurazione di gioco Scegli il tuo gioco Disabilita luminosità automatica - Disable heads up notifications + Disabilita le notifiche fluttuanti Opzioni di gioco Libreria Sei sicuro di voler rimuovere %1$s dalla tua libreria? @@ -37,13 +37,13 @@ Notifiche Fluttuanti Info FPS Resta attivo - Lock gesture + Blocca gesto Modalità suoneria Silenzioso Vibrazione Normale Blocca evento a schermo intero - Prevent fullscreen events like incoming calls from appearing + Evitare la comparsa di eventi a schermo intero come le chiamate in arrivo Configura gioco Modalità preferita Usa nuova interfaccia (sperimentale) @@ -57,4 +57,6 @@ Valore predefinito impostato Livello di opacità menù sovrapposizione Disabilita debug USB + Batteria: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 80f2520d..e783dfb1 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -57,4 +57,6 @@ 既定値が設定されています Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index a6ba02e3..04d1f0ed 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -16,45 +16,47 @@ limitations under the License. --> - Game space - Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled + 게임 공간 + 게이밍 설정을 관리하기 + 게임을 선택하기 + 자동 밝기조절 해제 + 헤드업 알림 해제 + 인게임 옵션 + 라이브러리 + 라이브러리에서 %1$s 을(를) 제거하시겠습니까? + 검색 + 스와이프로 스크린샷 찍기 해제 + 활성화 + 비활성화 - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info - Stay awake - Lock gesture - Ringer mode - Silent - Vibrate - Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + 모드 + 미지원 + 일반 + 성능 + 배터리 + 헤드업 알림 + FPS 정보 + 화면 켜짐 상태 유지 + 잠금 제스처 + 벨소리 모드 + 무음 + 진동 + 기본 + 전체화면 이벤트 막기 + 전화를 수신할 때와 같은 전체화면 이벤트를 방지합니다 + 게임 설정 + 선호 모드 + ANGLE 사용 (실험적) + 기본 GLES 드라이버 대신 ANGLE 렌더러를 사용합니다.\n경고!! 게임 그래픽이 깨질 수 있으니 주의하여 사용하세요! + ANGLE을 이 시스템에서 사용할 수 없습니다 + %1$s 을(를) 라이브러리에서 제거 값: %s 기본값으로 설정 기본값: %s\n길게 눌러서 설정 기본값으로 설정됨 - Overlay menu opacity level - Disable USB debugging + 오버레이 메뉴 투명도 레벨 + USB 디버깅 비활성화 + 배터리: %1$d%% + 메모리: %1$d\/%2$d MB diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 1a4446b9..86ce8b15 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -57,4 +57,6 @@ Standaard waarde is ingesteld Transparantieniveau van overlappingsmenu Usb-foutopsporing uitschakelen + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 57ce7fb2..ccb0d39a 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -57,4 +57,6 @@ Wartość domyślna jest ustawiona Poziom przezroczystości nakładki menu Wyłącz debugowanie USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 4b1f3d12..f9bfb832 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -57,4 +57,6 @@ Valor padrão definido Nível de opacidade do menu de sobreposição Desativar depuração USB + Bateria: %1$d%% + Memória: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 34d1ce56..413fc7e2 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -57,4 +57,6 @@ O valor padrão está definido Transparência do menu de sobreposição Desativar depuração USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 94a5831d..4e7d8bd4 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -57,4 +57,6 @@ Valoarea implicită este setată Opacitate pentru meniul suprapus Dezactivează depanarea USB + Baterie: %1$d%% + Memorie %1$d\/%2$d MB diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index c77624fe..89780bda 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -57,4 +57,6 @@ Значение по умолчанию установлено Уровень прозрачности меню игрового режима Отключить отладку по USB + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 1ac3f9a0..690c5cf2 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -57,4 +57,6 @@ Default value is set Overlay menu opacity level Disable USB debugging + Battery: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index dddfee40..e94c4c17 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -57,4 +57,6 @@ Varsayılan değer ayarlandı Arayüz menüsü şeffaflığı USB hata ayıklamasını devre dışı bırak + Pil: %1$d%% + Hafıza: %1$d\/%2$d MB diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index ec4c81e3..d19a44c5 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -20,7 +20,7 @@ Керування налаштуваннями гри Виберіть свою гру Вимкнути автояскравість - Disable heads up notifications + Вимкнути спливаючі сповіщення Налаштування гри Бібліотека Ви впевнені, що хочете видалити %1$s зі своєї бібліотеки? @@ -37,13 +37,13 @@ Спливаючі сповіщення Інформація про FPS Залишати активним - Lock gesture + Жест блокування Режим дзвінка Беззвучний Вібрація Звичайний Блокувати повноекранні сповіщення - Prevent fullscreen events like incoming calls from appearing + Запобігти повноекранному режимі подій, наприклад, вхідні дзвінки Налаштувати гру Переважний режим Використовувати ANGLE (експериментально) @@ -57,4 +57,6 @@ Значення за замовчуванням встановлено Рівень непрозорості меню ігрового режиму Вимкнути налагодження USB + Акумулятор: %1$d%% + Пам\'ять: %1$d\/%2$d МБ diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index a5c8bcd7..01747024 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -57,4 +57,6 @@ Đã đặt giá trị mặc định Mức độ mờ của menu Vô hiệu hóa gỡ lỗi USB + Pin: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5bfd80d7..5c727e9b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -57,4 +57,6 @@ 恢复默认值 覆盖菜单不透明度级别 禁用 USB 调试 + 电量: %1$d%% + Memory: %1$d\/%2$d MB diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 885fd3ef..a0ecc009 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -57,4 +57,6 @@ 已設定為預設值 不透明度 停用 USB 偵錯 + 電量: %1$d%% + Memory: %1$d\/%2$d MB From b22c6eed7a55fee09c2f0998a75cd8a4ee502d4e Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 14 Jun 2022 13:10:08 +0530 Subject: [PATCH 028/214] GameSpace: Add tiles layour for portrait mode Preview: https://ibb.co/tsCBZmv https://ibb.co/VvRRhtv Signed-off-by: Pranav Vashi --- app/src/main/res/layout-land/tiles.xml | 46 ++++++++++++++++++++++++++ app/src/main/res/layout/tiles.xml | 2 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/layout-land/tiles.xml diff --git a/app/src/main/res/layout-land/tiles.xml b/app/src/main/res/layout-land/tiles.xml new file mode 100644 index 00000000..f5ea0430 --- /dev/null +++ b/app/src/main/res/layout-land/tiles.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/tiles.xml b/app/src/main/res/layout/tiles.xml index f5ea0430..4441dce7 100644 --- a/app/src/main/res/layout/tiles.xml +++ b/app/src/main/res/layout/tiles.xml @@ -20,7 +20,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:columnCount="3" + android:columnCount="2" android:orientation="horizontal"> Date: Mon, 20 Jun 2022 18:34:28 +0300 Subject: [PATCH 029/214] New Crowdin updates (#9) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Italian) * New translations strings.xml (Russian) * New translations strings.xml (Turkish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (French) * New translations strings.xml (Greek) * New translations strings.xml (Vietnamese) * New translations strings.xml (Spanish) * New translations strings.xml (Portuguese) * New translations strings.xml (Hungarian) --- app/src/main/res/values-el-rGR/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 10 +++++----- app/src/main/res/values-fr-rFR/strings.xml | 6 +++--- app/src/main/res/values-hu-rHU/strings.xml | 10 +++++----- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 4 ++-- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- app/src/main/res/values-tr-rTR/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 3433a842..7f14bf66 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -58,5 +58,5 @@ Επίπεδο αδιαφάνειας μενού επικάλυψης Απενεργοποίηση εντοπισμού σφαλμάτων USB Μπαταρία: %1$d%% - Memory: %1$d\/%2$d MB + Μνήμη: %1$d\/%2$d MB diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 0420dab5..b8b18dcc 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -20,7 +20,7 @@ Administra tu configuración de juegos Elige tu juego Desactivar brillo automático - Disable heads up notifications + Deshabilitar notificaciones emergentes Opciones en el juego Biblioteca ¿Está seguro que desea eliminar %1$s de su biblioteca? @@ -37,13 +37,13 @@ Notificaciones flotantes Información de FPS Permanecer encendido - Lock gesture + Gesto de bloqueo Modo de timbre Silencio Vibrar Normal Bloquear eventos en pantalla completa - Prevent fullscreen events like incoming calls from appearing + Evitar la aparición de eventos de pantalla completa como llamadas entrantes Configurar juego Modo preferido Usar nueva interfaz de usuario (experimental) @@ -58,6 +58,6 @@ Mantén presionado para establecer Valor predeterminado establecido Nivel de opacidad del menú de superposición Desactivar depuración USB - Battery: %1$d%% - Memory: %1$d\/%2$d MB + Batería: %1$d%% + Memoria: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 316d7188..cb35c1a1 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -17,7 +17,7 @@ --> Espace de jeu - Manage your gaming setup + Gérez votre configuration de jeu Choisissez votre jeu Désactiver la luminosité automatique Désactiver les notifications flottantes @@ -57,6 +57,6 @@ Valeur par défaut définie Niveau d\'opacité du menu de superposition Désactiver le débogage USB - Battery: %1$d%% - Memory: %1$d\/%2$d MB + Batterie : %1$d%% + Mémoire : %1$d\/%2$d Mo diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index c46a11b7..e4a7753d 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -26,8 +26,8 @@ Are you sure you want to remove %1$s from your library? Keresés Disable swipe to screenshot - enabled - disabled + engedélyezett + letiltott Mode Unsupported @@ -39,9 +39,9 @@ Stay awake Lock gesture Ringer mode - Silent - Vibrate - Normal + Néma + Rezgő + Normál Block fullscreen event Prevent fullscreen events like incoming calls from appearing Configure game diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index efd04d49..3fa7cd85 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -58,5 +58,5 @@ Livello di opacità menù sovrapposizione Disabilita debug USB Batteria: %1$d%% - Memory: %1$d\/%2$d MB + Memoria: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 413fc7e2..cccb1a5e 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -57,6 +57,6 @@ O valor padrão está definido Transparência do menu de sobreposição Desativar depuração USB - Battery: %1$d%% - Memory: %1$d\/%2$d MB + Bateria: %1$d%% + Memoria: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 89780bda..134f7576 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -57,6 +57,6 @@ Значение по умолчанию установлено Уровень прозрачности меню игрового режима Отключить отладку по USB - Battery: %1$d%% - Memory: %1$d\/%2$d MB + Батарея: %1$d%% + Память: %1$d\/%2$d МБ diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index e94c4c17..ccbfe465 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -58,5 +58,5 @@ Arayüz menüsü şeffaflığı USB hata ayıklamasını devre dışı bırak Pil: %1$d%% - Hafıza: %1$d\/%2$d MB + Hafıza: %1$d\/%2$d MB diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 01747024..be04f7e4 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -58,5 +58,5 @@ Mức độ mờ của menu Vô hiệu hóa gỡ lỗi USB Pin: %1$d%% - Memory: %1$d\/%2$d MB + Bộ nhớ: %1$d\/%2$d MB diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5c727e9b..565571eb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -57,6 +57,6 @@ 恢复默认值 覆盖菜单不透明度级别 禁用 USB 调试 - 电量: %1$d%% - Memory: %1$d\/%2$d MB + 电量: %1$d%% + 内存: %1$d\/%2$d MB From ac39a415252b8e25a292a7d15f720a856304bc13 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 22 Jun 2022 10:42:52 +0300 Subject: [PATCH 030/214] New translations (#10) --- app/src/main/res/values-pt-rPT/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index cccb1a5e..24dab0e5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -58,5 +58,5 @@ Transparência do menu de sobreposição Desativar depuração USB Bateria: %1$d%% - Memoria: %1$d\/%2$d MB + Memória: %1$d\/%2$d MB From 4ec4b86f80e6c6796fc4b5a3f1b9dc04e42c3177 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 24 Jun 2022 10:09:28 +0530 Subject: [PATCH 031/214] GameSpace: Improve strings Signed-off-by: Pranav Vashi --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 04afd1b0..3cdb3671 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -67,6 +67,6 @@ Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB From 521fcf1e270c9a6f843ef3d06b04cf97027548af Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 26 Jun 2022 09:47:52 +0300 Subject: [PATCH 032/214] New Crowdin updates (#11) * New translations strings.xml (Romanian) * New translations strings.xml (Korean) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Ukrainian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Japanese) * New translations strings.xml (French) * New translations strings.xml (Italian) * New translations strings.xml (Hungarian) * New translations strings.xml (Hebrew) * New translations strings.xml (Finnish) * New translations strings.xml (Greek) * New translations strings.xml (German) * New translations strings.xml (Danish) * New translations strings.xml (Czech) * New translations strings.xml (Catalan) * New translations strings.xml (Arabic) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Polish) * New translations strings.xml (Turkish) * New translations strings.xml (Greek) --- app/src/main/res/values-af-rZA/strings.xml | 4 ++-- app/src/main/res/values-ar-rSA/strings.xml | 4 ++-- app/src/main/res/values-ca-rES/strings.xml | 4 ++-- app/src/main/res/values-cs-rCZ/strings.xml | 4 ++-- app/src/main/res/values-da-rDK/strings.xml | 4 ++-- app/src/main/res/values-de-rDE/strings.xml | 4 ++-- app/src/main/res/values-el-rGR/strings.xml | 4 ++-- app/src/main/res/values-es-rES/strings.xml | 4 ++-- app/src/main/res/values-fi-rFI/strings.xml | 4 ++-- app/src/main/res/values-fr-rFR/strings.xml | 4 ++-- app/src/main/res/values-hu-rHU/strings.xml | 4 ++-- app/src/main/res/values-it-rIT/strings.xml | 4 ++-- app/src/main/res/values-iw-rIL/strings.xml | 4 ++-- app/src/main/res/values-ja-rJP/strings.xml | 4 ++-- app/src/main/res/values-ko-rKR/strings.xml | 4 ++-- app/src/main/res/values-nl-rNL/strings.xml | 4 ++-- app/src/main/res/values-no-rNO/strings.xml | 4 ++-- app/src/main/res/values-pl-rPL/strings.xml | 4 ++-- app/src/main/res/values-pt-rBR/strings.xml | 4 ++-- app/src/main/res/values-pt-rPT/strings.xml | 4 ++-- app/src/main/res/values-ro-rRO/strings.xml | 4 ++-- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- app/src/main/res/values-sr-rSP/strings.xml | 4 ++-- app/src/main/res/values-sv-rSE/strings.xml | 4 ++-- app/src/main/res/values-tr-rTR/strings.xml | 4 ++-- app/src/main/res/values-uk-rUA/strings.xml | 4 ++-- app/src/main/res/values-vi-rVN/strings.xml | 4 ++-- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 29 files changed, 57 insertions(+), 57 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index ec32e76b..f8cd285d 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - مساحة الألعاب + Game Space إدارة إعدادات ألعابك إختر لعبتك تعطيل السطوع التلقائي @@ -58,5 +58,5 @@ مستوى شفافية القائمة العائمة تعطيل تصحيح أخطاء USB Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 6d0f2d40..edae6a08 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Herní prostor + Game Space Spravovat herního nastavení Výběr hry Zakázat automatický jas @@ -58,5 +58,5 @@ Úroveň průhlednosti překrytí menu Zakázat ladění USB Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index cea0e2fb..ea8e63ef 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Spielemodus + Game Space Spieleinrichtung verwalten Wähle dein Spiel Auto-Helligkeit deaktivieren @@ -58,5 +58,5 @@ Transparenz des Overlay-Menüs USB-Debugging deaktivieren Akku:  %1$d%%  - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 7f14bf66..9c15210e 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Χώρος παιχνιδιού + Χώρος Παιχνιδιού Διαχειριστείτε τις ρυθμίσεις παιχνιδιών σας Διάλεξε το παιχνίδι σου Απενεργοποίηση αυτόματης φωτεινότητας @@ -58,5 +58,5 @@ Επίπεδο αδιαφάνειας μενού επικάλυψης Απενεργοποίηση εντοπισμού σφαλμάτων USB Μπαταρία: %1$d%% - Μνήμη: %1$d\/%2$d MB + Διαθέσιμη μνήμη: %1$d\/%2$d MB diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index b8b18dcc..58fdd2f6 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Espacio de juegos + Game Space Administra tu configuración de juegos Elige tu juego Desactivar brillo automático @@ -59,5 +59,5 @@ Mantén presionado para establecer Nivel de opacidad del menú de superposición Desactivar depuración USB Batería: %1$d%% - Memoria: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index cb35c1a1..e31ef4ea 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Espace de jeu + Game Space Gérez votre configuration de jeu Choisissez votre jeu Désactiver la luminosité automatique @@ -58,5 +58,5 @@ Niveau d\'opacité du menu de superposition Désactiver le débogage USB Batterie : %1$d%% - Mémoire : %1$d\/%2$d Mo + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index e4a7753d..8b0763ac 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Játéktér + Game Space Manage your gaming setup Válaszd ki a játékod Az automatikus fényerőszabályzás tiltása @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 3fa7cd85..09b51800 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Gestisci la tua configurazione di gioco Scegli il tuo gioco Disabilita luminosità automatica @@ -58,5 +58,5 @@ Livello di opacità menù sovrapposizione Disabilita debug USB Batteria: %1$d%% - Memoria: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index e783dfb1..53e12cb7 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 04d1f0ed..decaf5dc 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - 게임 공간 + Game Space 게이밍 설정을 관리하기 게임을 선택하기 자동 밝기조절 해제 @@ -58,5 +58,5 @@ 오버레이 메뉴 투명도 레벨 USB 디버깅 비활성화 배터리: %1$d%% - 메모리: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 86ce8b15..649957df 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Spel ruimte + Game Space Beheer uw gaming-instellingen Kies je spel Automatische helderheid uitschakelen @@ -58,5 +58,5 @@ Transparantieniveau van overlappingsmenu Usb-foutopsporing uitschakelen Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index ccb0d39a..45230665 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -57,6 +57,6 @@ Wartość domyślna jest ustawiona Poziom przezroczystości nakładki menu Wyłącz debugowanie USB - Battery: %1$d%% - Memory: %1$d\/%2$d MB + Bateria: %1$d%% + Dostępna pamięć: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f9bfb832..b4edc11f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Espaço de jogo + Game Space Gerencie sua configuração de jogos Seletor de Aplicativos Brilho automático desativado @@ -58,5 +58,5 @@ Nível de opacidade do menu de sobreposição Desativar depuração USB Bateria: %1$d%% - Memória: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 24dab0e5..5e64dd61 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Espaço de jogo + Game Space Gerir a sua configuração de jogos Escolha o seu jogo Desativar brilho automático @@ -58,5 +58,5 @@ Transparência do menu de sobreposição Desativar depuração USB Bateria: %1$d%% - Memória: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 4e7d8bd4..0c6a81d3 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Spațiul de jocuri + Game Space Gestionează-ți configurarea jocurilor Alege-ți numele Dezactivează luminozitatea automată @@ -58,5 +58,5 @@ Opacitate pentru meniul suprapus Dezactivează depanarea USB Baterie: %1$d%% - Memorie %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 134f7576..b8e8b883 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Игровой режим + Game Space Настройка игровых возможностей Выберите свою игру Отключить автоматическую яркость @@ -58,5 +58,5 @@ Уровень прозрачности меню игрового режима Отключить отладку по USB Батарея: %1$d%% - Память: %1$d\/%2$d МБ + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 690c5cf2..b001dbec 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game space + Game Space Manage your gaming setup Pick your game Disable auto-brightness @@ -58,5 +58,5 @@ Overlay menu opacity level Disable USB debugging Battery: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index ccbfe465..4001e8ce 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Oyun alanı + Oyun Alanı Oyun kurulumunuzu yönetin Oyununu seç Otomatik parlaklığı devre dışı bırak @@ -58,5 +58,5 @@ Arayüz menüsü şeffaflığı USB hata ayıklamasını devre dışı bırak Pil: %1$d%% - Hafıza: %1$d\/%2$d MB + Kullanılabilir bellek: %1$d\/%2$d MB diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index d19a44c5..f9e9aee9 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Ігровий простір + Game Space Керування налаштуваннями гри Виберіть свою гру Вимкнути автояскравість @@ -58,5 +58,5 @@ Рівень непрозорості меню ігрового режиму Вимкнути налагодження USB Акумулятор: %1$d%% - Пам\'ять: %1$d\/%2$d МБ + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index be04f7e4..5687681f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Không gian game + Game Space Quản lý thiết lập trò chơi của bạn Chọn trò chơi của bạn Vô hiệu hóa độ sáng tự động @@ -58,5 +58,5 @@ Mức độ mờ của menu Vô hiệu hóa gỡ lỗi USB Pin: %1$d%% - Bộ nhớ: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 565571eb..5137ddf2 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -58,5 +58,5 @@ 覆盖菜单不透明度级别 禁用 USB 调试 电量: %1$d%% - 内存: %1$d\/%2$d MB + 内存空闲: %1$d\/%2$d MB diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a0ecc009..57102a3b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - 遊戲空間 + Game Space 管理您的遊戲設定 選擇遊戲 停用自動亮度 @@ -58,5 +58,5 @@ 不透明度 停用 USB 偵錯 電量: %1$d%% - Memory: %1$d\/%2$d MB + Memory available: %1$d\/%2$d MB From c7c4ccc5f2711f58d9b1065dfd85213e40cd4d60 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 27 Jun 2022 09:40:19 +0300 Subject: [PATCH 033/214] New Crowdin updates (#12) * New translations strings.xml (Spanish) * New translations strings.xml (Russian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Romanian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Portuguese) * New translations strings.xml (Persian) --- app/src/main/res/values-es-rES/strings.xml | 8 +-- app/src/main/res/values-fa-rIR/strings.xml | 62 ++++++++++++++++++++++ app/src/main/res/values-pt-rBR/strings.xml | 12 ++--- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-ro-rRO/strings.xml | 4 +- app/src/main/res/values-ru-rRU/strings.xml | 4 +- app/src/main/res/values-uk-rUA/strings.xml | 6 +-- 7 files changed, 80 insertions(+), 18 deletions(-) create mode 100644 app/src/main/res/values-fa-rIR/strings.xml diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 58fdd2f6..fd992cc0 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -16,11 +16,11 @@ limitations under the License. --> - Game Space + Espacio de Juego Administra tu configuración de juegos Elige tu juego Desactivar brillo automático - Deshabilitar notificaciones emergentes + Desactivar notificaciones emergentes Opciones en el juego Biblioteca ¿Está seguro que desea eliminar %1$s de su biblioteca? @@ -43,7 +43,7 @@ Vibrar Normal Bloquear eventos en pantalla completa - Evitar la aparición de eventos de pantalla completa como llamadas entrantes + Evitar la aparición de eventos en pantalla completa como llamadas entrantes Configurar juego Modo preferido Usar nueva interfaz de usuario (experimental) @@ -59,5 +59,5 @@ Mantén presionado para establecer Nivel de opacidad del menú de superposición Desactivar depuración USB Batería: %1$d%% - Memory available: %1$d\/%2$d MB + Memoria disponible: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml new file mode 100644 index 00000000..b001dbec --- /dev/null +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -0,0 +1,62 @@ + + + + Game Space + Manage your gaming setup + Pick your game + Disable auto-brightness + Disable heads up notifications + In-game options + Library + Are you sure you want to remove %1$s from your library? + Search + Disable swipe to screenshot + enabled + disabled + + Mode + Unsupported + Standard + Performance + Battery + Heads up + FPS info + Stay awake + Lock gesture + Ringer mode + Silent + Vibrate + Normal + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + Overlay menu opacity level + Disable USB debugging + Battery: %1$d%% + Memory available: %1$d\/%2$d MB + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b4edc11f..1caf626c 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -18,18 +18,18 @@ Game Space Gerencie sua configuração de jogos - Seletor de Aplicativos - Brilho automático desativado + Escolha seu jogo + Desativar brilho automático Desativar notificações flutuantes Opções do jogo - Lista de jogos + Biblioteca Tem certeza de que deseja remover %1$s da sua biblioteca? Pesquisa Desativar deslize para captura de tela ativado desabilitado - Modo Jogo + Modo Incompatível Padrão Desempenho @@ -47,7 +47,7 @@ Configurar jogo Modo preferencial Usar ANGLE (experimental) - Usando ANGLE Renderer ao vez de drivers GLES.\nAVISO!! Pode causar fechamento nos jogos, use com cuidado! + Usando renderizador ANGLE em vez de drivers GLES nativos.\nAVISO!! Pode quebrar gráficos do jogo, use com cuidado! ANGLE não está disponível no seu sistema Remover %1$s da biblioteca @@ -55,7 +55,7 @@ valor padrão Valor padrão: %s\nToque longo para definir Valor padrão definido - Nível de opacidade do menu de sobreposição + Nível de opacidade do menu de opções Desativar depuração USB Bateria: %1$d%% Memory available: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 5e64dd61..2ed7a7ee 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -52,7 +52,7 @@ Remover %1$s da biblioteca Valor: %s - Por padrão + padrão Valor padrão: %s\nO Prima para definir O valor padrão está definido Transparência do menu de sobreposição diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 0c6a81d3..5c12cb78 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Spațiu de jocuri Gestionează-ți configurarea jocurilor Alege-ți numele Dezactivează luminozitatea automată @@ -58,5 +58,5 @@ Opacitate pentru meniul suprapus Dezactivează depanarea USB Baterie: %1$d%% - Memory available: %1$d\/%2$d MB + Memorie disponibilă: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index b8e8b883..104b1a02 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Игровое Пространство Настройка игровых возможностей Выберите свою игру Отключить автоматическую яркость @@ -58,5 +58,5 @@ Уровень прозрачности меню игрового режима Отключить отладку по USB Батарея: %1$d%% - Memory available: %1$d\/%2$d MB + Доступная память: %1$d\/%2$d MB diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index f9e9aee9..f055f19f 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Ігровий Простір Керування налаштуваннями гри Виберіть свою гру Вимкнути автояскравість @@ -43,7 +43,7 @@ Вібрація Звичайний Блокувати повноекранні сповіщення - Запобігти повноекранному режимі подій, наприклад, вхідні дзвінки + Запобігти появі повноекранних сповіщень, таких як вхідні дзвінки під час гри Налаштувати гру Переважний режим Використовувати ANGLE (експериментально) @@ -58,5 +58,5 @@ Рівень непрозорості меню ігрового режиму Вимкнути налагодження USB Акумулятор: %1$d%% - Memory available: %1$d\/%2$d MB + Доступно пам\'яті: %1$d\/%2$d MB From 233f3cf1f83057314f68aeb127d627edf0631ea8 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 6 Jul 2022 09:57:09 +0300 Subject: [PATCH 034/214] New Crowdin updates (#13) * New translations strings.xml (Persian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Korean) * New translations strings.xml (Portuguese) * New translations strings.xml (Vietnamese) * New translations strings.xml (Italian) * New translations strings.xml (Czech) * New translations strings.xml (Japanese) --- app/src/main/res/values-cs-rCZ/strings.xml | 12 ++-- app/src/main/res/values-fa-rIR/strings.xml | 82 +++++++++++----------- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-ja-rJP/strings.xml | 74 +++++++++---------- app/src/main/res/values-ko-rKR/strings.xml | 4 +- app/src/main/res/values-pt-rBR/strings.xml | 4 +- app/src/main/res/values-pt-rPT/strings.xml | 4 +- app/src/main/res/values-vi-rVN/strings.xml | 4 +- 8 files changed, 93 insertions(+), 93 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index edae6a08..569bb8a0 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -16,11 +16,11 @@ limitations under the License. --> - Game Space + Herní prostor Spravovat herního nastavení Výběr hry Zakázat automatický jas - Disable heads up notifications + Zakázat plovoucí oznámení Možnosti ve hře Knihovna Opravdu chcete odstranit %1$s z vaší knihovny? @@ -37,13 +37,13 @@ Plovoucí oznámení Informace o FPS Nevypínat obrazovku - Lock gesture + Zakázat gesta Režim vyzvánění Tichý Vibrace Normální Blokovat událost na celou obrazovku - Prevent fullscreen events like incoming calls from appearing + Zakázat zobrazení celoobrazovkových události, např. příchozí volání Konfigurace hry Preferovaný režim Použít ANGLE (experimentální) @@ -57,6 +57,6 @@ Výchozí hodnota je nastavena Úroveň průhlednosti překrytí menu Zakázat ladění USB - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Baterie: %1$d%% + Dostupná paměť: %1$d\/%2$d MB diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index b001dbec..c9caff2a 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -16,47 +16,47 @@ limitations under the License. --> - Game Space - Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled + فضای بازی + تنظیمات بازی خود را مدیریت کنید + بازی خود را انتخاب کنید + غیرفعالسازی روشنایی خودکار + غیرفعالسازی اعلان های فوری + گزینه های درون بازی + مجموعه + آیا مطمئن هستید که می خواهید %1$s را از مجموعه خود حذف کنید? + جستجو + غیرفعالسازی گرفتن اسکرین شات با کشیدن انگشت + فعال + غیرفعال - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info - Stay awake - Lock gesture - Ringer mode - Silent - Vibrate - Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + حالت + پشتیبانی نشده + استاندارد + کارایی + باتری + اعلان فوری + اطلاعات FPS + بیدار بمان + قفل کردن ژست + حالت با صدا + سکوت + لرزش + معمولی + مسدود کردن رویداد تمام صفحه + از نمایش رویدادهای تمام صفحه مانند تماس های دریافتی جلوگیری کنید + پیکربندی بازی + حالت ترجیحی + استفاده از ANGLE (آزمایشی) + استفاده از رندر ANGLE به جای درایورهای GLES بومی، اگر دستگاه از آن پشتیبانی کند.\nهشدار!! ممکن است گرافیک بازی را خراب کند، با احتیاط استفاده کنید! + ANGLE در سیستم شما در دسترس نیست + %1$s را از مجموعه حذف کنید - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set - Overlay menu opacity level - Disable USB debugging - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + ارزش: %s + به طور پیش فرض + ارزش پیش‌فرض: %s\n برای تنظیم نگه دارید + مقدار پیش‌فرض تعیین شده است + سطح شفافیت منوی همپوشانی + غیرفعال کردن اشکال زدایی USB + باتری: %1$d%% + حافظه موجود است: %1$d\/%2$d مگابایت diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 09b51800..019a7985 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Spazio di gioco Gestisci la tua configurazione di gioco Scegli il tuo gioco Disabilita luminosità automatica diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 53e12cb7..95b988ed 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -16,47 +16,47 @@ limitations under the License. --> - Game Space - Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled + ゲームスペース + ゲームの設定を管理 + ゲームを選択 + 自動明るさ調節を無効化 + Heads Up 通知を無効化 + ゲーム内オプション + ライブラリ + %1$s をライブラリから削除してもよろしいですか? + 検索 + スワイプでのスクリーンショットを無効化 + 有効 + 無効 - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info - Stay awake - Lock gesture - Ringer mode - Silent - Vibrate - Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library + モード + 非対応 + 標準 + パフォーマンス優先 + バッテリー優先 + Heads Up通知 + FPS 情報 + 常に画面点灯 + ジェスチャーをロック + 着信音モード + サイレント + バイブレーション + 標準 + 全画面表示イベントをブロック + ゲーム中は着信通話のような全画面イベントが表示されないようにする + ゲーム設定 + 優先モード + ANGLE を使用 (実験的) + ネイティブ GLES ドライバーの代わりに ANGLE レンダラーを使用します。\n警告! ゲームグラフィックが破損する可能性があります。注意して使用して下さい! + お使いのシステムでは ANGLE は利用できません + %1$s をライブラリから削除 値: %s 既定 既定値: %s\n長押しで設定 既定値が設定されています - Overlay menu opacity level - Disable USB debugging - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + オーバーレイメニューの不透明度 + USB デバッグを無効化 + バッテリー: %1$d%% + 利用可能メモリ: %1$d\/%2$d MB diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index decaf5dc..216c8870 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + 게임 공간 게이밍 설정을 관리하기 게임을 선택하기 자동 밝기조절 해제 @@ -58,5 +58,5 @@ 오버레이 메뉴 투명도 레벨 USB 디버깅 비활성화 배터리: %1$d%% - Memory available: %1$d\/%2$d MB + 메모리 사용가능량: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1caf626c..82c4f81a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Espaço de Jogo Gerencie sua configuração de jogos Escolha seu jogo Desativar brilho automático @@ -58,5 +58,5 @@ Nível de opacidade do menu de opções Desativar depuração USB Bateria: %1$d%% - Memory available: %1$d\/%2$d MB + Memória disponível: %1$d\/%2$d MB diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 2ed7a7ee..c074106c 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Espaço de jogo Gerir a sua configuração de jogos Escolha o seu jogo Desativar brilho automático @@ -58,5 +58,5 @@ Transparência do menu de sobreposição Desativar depuração USB Bateria: %1$d%% - Memory available: %1$d\/%2$d MB + Memória disponível: %1$d\/%2$d MB diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 5687681f..fa5c2265 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Không gian game Quản lý thiết lập trò chơi của bạn Chọn trò chơi của bạn Vô hiệu hóa độ sáng tự động @@ -58,5 +58,5 @@ Mức độ mờ của menu Vô hiệu hóa gỡ lỗi USB Pin: %1$d%% - Memory available: %1$d\/%2$d MB + Bộ nhớ khả dụng: %1$d\/%2$d MB From 2a2c4bbc633dc79ed7b04f9d6c9135bbe9e1a7e0 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 14 Jul 2022 17:06:35 +0300 Subject: [PATCH 035/214] New Crowdin updates (#14) * New translations strings.xml (French) * New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-fr-rFR/strings.xml | 4 ++-- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index e31ef4ea..1dae8181 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + Espace de jeu Gérez votre configuration de jeu Choisissez votre jeu Désactiver la luminosité automatique @@ -58,5 +58,5 @@ Niveau d\'opacité du menu de superposition Désactiver le débogage USB Batterie : %1$d%% - Memory available: %1$d\/%2$d MB + Mémoire disponible : %1$d\/%2$d Mo diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 57102a3b..8cd62962 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + 遊戲空間 管理您的遊戲設定 選擇遊戲 停用自動亮度 @@ -58,5 +58,5 @@ 不透明度 停用 USB 偵錯 電量: %1$d%% - Memory available: %1$d\/%2$d MB + 可用記憶體:<xliff:g id="availmemory" example="1000">\/<xliff:g id="totalmemory" example="5000"> MB From 559907a4429a25816dc7cdcf2346c6c61a239e7a Mon Sep 17 00:00:00 2001 From: cjh1249131356 Date: Thu, 2 Jun 2022 21:21:43 +0800 Subject: [PATCH 036/214] GameSpace: Add do not change option to ringer mode * And make it default option. Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/data/GameSession.kt | 8 ++++++-- app/src/main/res/values/arrays.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/root_preferences.xml | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt index 1b8b05f0..7aa06396 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt @@ -74,7 +74,9 @@ class GameSession @Inject constructor( if (appSettings.noAdbEnabled) { systemSettings.adbEnabled = false } - audioManager.ringerModeInternal = appSettings.ringerMode + if (appSettings.ringerMode != 3) { + audioManager.ringerModeInternal = appSettings.ringerMode + } } fun unregister() { @@ -91,7 +93,9 @@ class GameSession @Inject constructor( if (appSettings.noAdbEnabled) { orig.adbEnabled?.let { systemSettings.adbEnabled = it } } - audioManager.ringerModeInternal = orig.ringerMode + if (appSettings.ringerMode != 3) { + audioManager.ringerModeInternal = orig.ringerMode + } state = null } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 8ba6840d..bda4656b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -27,12 +27,14 @@ @string/ringer_mode_silent @string/ringer_mode_vibrate @string/ringer_mode_normal + @string/ringer_mode_no_change 0 1 2 + 3 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3cdb3671..7beb22b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,6 +45,7 @@ Silent Vibrate Normal + Do not change Block fullscreen event Prevent fullscreen events like incoming calls from appearing diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 831d243b..a5e239e8 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -28,7 +28,7 @@ android:title="@string/in_game_preferences_title"> Date: Sun, 17 Jul 2022 14:04:34 +0530 Subject: [PATCH 037/214] GameSpace: Fix default ringer mode value Signed-off-by: Pranav Vashi --- app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 9b6fbcb2..73d0ec46 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -58,7 +58,7 @@ class AppSettings @Inject constructor(private val context: Context) { set(value) = db.edit().putBoolean(KEY_STAY_AWAKE, value).apply() var ringerMode: Int - get() = db.getString(KEY_RINGER_MODE, "0").toInt() + get() = db.getString(KEY_RINGER_MODE, "3").toInt() set(value) = db.edit().putString(KEY_RINGER_MODE, value.toString()).apply() var menuOpacity: Int From ed80343487304786a9b22880902b7a0a212fe146 Mon Sep 17 00:00:00 2001 From: cjh1249131356 Date: Sat, 4 Jun 2022 18:46:57 +0800 Subject: [PATCH 038/214] GameSpace: Fix panel view not losing focus when touching outside Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index 5771cf96..5fa29708 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -49,8 +49,7 @@ class PanelView @JvmOverloads constructor( private fun applyRelativeLocation() { val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager - layoutParams.height = - if (wm.isPortrait()) wm.maximumWindowMetrics.bounds.height() / 2 else LayoutParams.MATCH_PARENT + layoutParams.height = LayoutParams.WRAP_CONTENT doOnLayout { if (defaultY == null) From 564bc4bc1749aebfd71453d3c060085cf9d3181d Mon Sep 17 00:00:00 2001 From: cjh1249131356 Date: Fri, 8 Jul 2022 00:36:13 +0800 Subject: [PATCH 039/214] GameSpace: Expose icon in launcher * Icon was taken from old GamingMode. Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 8 +- app/src/main/res/drawable/ic_launcher.xml | 5 ++ .../res/drawable/ic_launcher_background.xml | 74 +++++++++++++++++++ .../res/drawable/ic_launcher_foreground.xml | 24 ++++++ 4 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/ic_launcher.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4ab8acae..d4311160 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,13 +32,19 @@ + android:exported="true"> + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..fcaf7197 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..d7c34421 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,24 @@ + + + + + + + + From 2764f18e32161b8a3b1a7d988d3b66c4c4e18819 Mon Sep 17 00:00:00 2001 From: cjh1249131356 Date: Thu, 2 Jun 2022 21:33:22 +0800 Subject: [PATCH 040/214] GameSpace: Drop disable heads up option - Ready for implementing notification overlay from exTHmUI's gaming mode Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../gamespace/data/AppSettings.kt | 5 -- .../gamespace/data/GameSession.kt | 7 --- .../gamespace/data/SessionState.kt | 1 - .../gamespace/data/SystemSettings.kt | 11 ---- .../gamespace/widget/tiles/HeadsupTile.kt | 50 ------------------- .../main/res/drawable/ic_action_heads_up.xml | 32 ------------ app/src/main/res/layout-land/tiles.xml | 6 +-- app/src/main/res/layout/tiles.xml | 4 -- app/src/main/res/values/strings.xml | 2 - app/src/main/res/xml/root_preferences.xml | 4 -- 10 files changed, 1 insertion(+), 121 deletions(-) delete mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/HeadsupTile.kt delete mode 100644 app/src/main/res/drawable/ic_action_heads_up.xml diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 73d0ec46..668d8803 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -41,10 +41,6 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getBoolean("show_fps", false) set(point) = db.edit().putBoolean("show_fps", point).apply() - var noHeadsUp - get() = db.getBoolean(KEY_HEADS_UP_DISABLE, true) - set(it) = db.edit().putBoolean(KEY_HEADS_UP_DISABLE, it).apply() - var noAutoBrightness get() = db.getBoolean(KEY_AUTO_BRIGHTNESS_DISABLE, true) set(it) = db.edit().putBoolean(KEY_AUTO_BRIGHTNESS_DISABLE, it).apply() @@ -74,7 +70,6 @@ class AppSettings @Inject constructor(private val context: Context) { set(value) = db.edit().putBoolean(KEY_LOCK_GESTURE, value).apply() companion object { - const val KEY_HEADS_UP_DISABLE = "gamespace_heads_up_disabled" const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" const val KEY_3SCREENSHOT_DISABLE = "gamespace_tfgesture_disabled" const val KEY_STAY_AWAKE = "gamespace_stay_awake" diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt index 7aa06396..9c3dd2a0 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt @@ -57,14 +57,10 @@ class GameSession @Inject constructor( state = SessionState( packageName = sessionName, autoBrightness = systemSettings.autoBrightness, - headsUp = systemSettings.headsUp, threeScreenshot = systemSettings.threeScreenshot, ringerMode = audioManager.ringerModeInternal, adbEnabled = systemSettings.adbEnabled, ) - if (appSettings.noHeadsUp) { - systemSettings.headsUp = false - } if (appSettings.noAutoBrightness) { systemSettings.autoBrightness = false } @@ -81,9 +77,6 @@ class GameSession @Inject constructor( fun unregister() { val orig = state?.copy() ?: return - if (appSettings.noHeadsUp) { - orig.headsUp?.let { systemSettings.headsUp = it } - } if (appSettings.noAutoBrightness) { orig.autoBrightness?.let { systemSettings.autoBrightness = it } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt index 1de808cc..c3f5244d 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt @@ -23,7 +23,6 @@ import androidx.annotation.Keep data class SessionState( var packageName: String, var autoBrightness: Boolean? = null, - var headsUp: Boolean? = null, var threeScreenshot: Boolean? = null, var ringerMode: Int = AudioManager.RINGER_MODE_NORMAL, var adbEnabled: Boolean? = null, diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index b1a2c937..44f559fc 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -29,17 +29,6 @@ class SystemSettings @Inject constructor( private val resolver = context.contentResolver - var headsUp - get() = - Settings.Global.getInt(resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 1) == 1 - set(it) { - Settings.Global.putInt( - resolver, - Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, - it.toInt() - ) - } - var autoBrightness get() = Settings.System.getIntForUser( diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/HeadsupTile.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/HeadsupTile.kt deleted file mode 100644 index c62781e0..00000000 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/HeadsupTile.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2021 Chaldeaprjkt - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.chaldeaprjkt.gamespace.widget.tiles - -import android.content.Context -import android.util.AttributeSet -import android.view.View -import io.chaldeaprjkt.gamespace.R - -class HeadsupTile @JvmOverloads constructor( - context: Context, attrs: AttributeSet? = null -) : BaseTile(context, attrs) { - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - headsUpEnabled = systemSettings.headsUp - title?.text = context.getString(R.string.heads_up_title) - icon?.setImageResource(R.drawable.ic_action_heads_up) - } - - private var headsUpEnabled = false - set(value) { - field = value - if (value) { - summary?.text = context.getString(R.string.state_enabled) - } else { - summary?.text = context.getString(R.string.state_disabled) - } - systemSettings.headsUp = value - isSelected = value - } - - override fun onClick(v: View?) { - super.onClick(v) - headsUpEnabled = !headsUpEnabled - } -} diff --git a/app/src/main/res/drawable/ic_action_heads_up.xml b/app/src/main/res/drawable/ic_action_heads_up.xml deleted file mode 100644 index 5749b961..00000000 --- a/app/src/main/res/drawable/ic_action_heads_up.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-land/tiles.xml b/app/src/main/res/layout-land/tiles.xml index f5ea0430..394c7c46 100644 --- a/app/src/main/res/layout-land/tiles.xml +++ b/app/src/main/res/layout-land/tiles.xml @@ -20,17 +20,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:columnCount="3" + android:columnCount="2" android:orientation="horizontal"> - - diff --git a/app/src/main/res/layout/tiles.xml b/app/src/main/res/layout/tiles.xml index 4441dce7..394c7c46 100644 --- a/app/src/main/res/layout/tiles.xml +++ b/app/src/main/res/layout/tiles.xml @@ -27,10 +27,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7beb22b8..f428ff98 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,7 +20,6 @@ Manage your gaming setup Pick your game Disable auto-brightness - Disable heads up notifications In-game options Library Are you sure you want to remove %1$s from your library? @@ -36,7 +35,6 @@ Performance Battery - Heads up FPS info Stay awake Lock gesture diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index a5e239e8..142d9d5a 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -50,10 +50,6 @@ android:key="gamespace_lock_gesture" android:title="@string/lock_gesture_title" /> - - From 6a6d4b90d080217576350de85244bcde4d84ec81 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 17 Jul 2022 20:21:52 +0530 Subject: [PATCH 041/214] GameSpace: Adjust views to avoid overlap Signed-off-by: Pranav Vashi --- app/src/main/res/layout/panel_view.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index b6d0abb4..10ee6505 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -40,6 +40,7 @@ android:layout_height="wrap_content"> Date: Sun, 17 Jul 2022 20:33:53 +0530 Subject: [PATCH 042/214] GameSpace: Rearrange strings Co-authored-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../preferences/AppListPreferences.kt | 2 +- app/src/main/res/values/strings.xml | 50 ++++++++++--------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt index 7de8c8c0..cc7e08f0 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt @@ -52,7 +52,7 @@ class AppListPreferences @JvmOverloads constructor(context: Context, attrs: Attr private val makeAddPref by lazy { Preference(context).apply { - title = "Add" + title = context.getString(R.string.game_list_add_title) key = KEY_ADD_GAME setIcon(R.drawable.ic_add) isPersistent = false diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f428ff98..1b9f1f43 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,44 +16,46 @@ limitations under the License. --> + Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - - Mode - Unsupported - Standard - Performance - Battery - FPS info + + In-game options + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + Ringer mode Silent Vibrate Normal Do not change - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s @@ -61,11 +63,13 @@ Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - - Disable USB debugging - + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + enabled + disabled From 9d452ca28927f58a1b4fca5209a65491656f5ce2 Mon Sep 17 00:00:00 2001 From: cjh1249131356 Date: Thu, 9 Jun 2022 17:28:56 +0800 Subject: [PATCH 043/214] GameSpace: Let's take advantage of reTicker * It looks good in landscape mode, why not use it as notification overlay? This brings back in-game notifications settings. Signed-off-by: cjh1249131356 [@neobuddy89: Clean up strings labels.] Signed-off-by: Pranav Vashi --- .../gamespace/data/AppSettings.kt | 5 +++++ .../gamespace/data/GameSession.kt | 15 +++++++++++++ .../gamespace/data/SessionState.kt | 2 ++ .../gamespace/data/SystemSettings.kt | 22 +++++++++++++++++++ app/src/main/res/values/arrays.xml | 12 ++++++++++ app/src/main/res/values/strings.xml | 6 +++++ app/src/main/res/xml/root_preferences.xml | 8 +++++++ 7 files changed, 70 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 668d8803..e74e1f78 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -53,6 +53,10 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getBoolean(KEY_STAY_AWAKE, false) set(value) = db.edit().putBoolean(KEY_STAY_AWAKE, value).apply() + var notificationMode: Int + get() = db.getString(KEY_NOTIFICATION_MODE, "2").toInt() + set(value) = db.edit().putString(KEY_NOTIFICATION_MODE, value.toString()).apply() + var ringerMode: Int get() = db.getString(KEY_RINGER_MODE, "3").toInt() set(value) = db.edit().putString(KEY_RINGER_MODE, value.toString()).apply() @@ -73,6 +77,7 @@ class AppSettings @Inject constructor(private val context: Context) { const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" const val KEY_3SCREENSHOT_DISABLE = "gamespace_tfgesture_disabled" const val KEY_STAY_AWAKE = "gamespace_stay_awake" + const val KEY_NOTIFICATION_MODE = "gamespace_notification_mode" const val KEY_RINGER_MODE = "gamespace_ringer_mode" const val KEY_MENU_OPACITY = "gamespace_menu_opacity" const val KEY_ADB_DISABLE = "gamespace_adb_disabled" diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt index 9c3dd2a0..07c7dee6 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt @@ -58,6 +58,8 @@ class GameSession @Inject constructor( packageName = sessionName, autoBrightness = systemSettings.autoBrightness, threeScreenshot = systemSettings.threeScreenshot, + headsUp = systemSettings.headsUp, + reTicker = systemSettings.reTicker, ringerMode = audioManager.ringerModeInternal, adbEnabled = systemSettings.adbEnabled, ) @@ -70,6 +72,15 @@ class GameSession @Inject constructor( if (appSettings.noAdbEnabled) { systemSettings.adbEnabled = false } + if (appSettings.notificationMode == 0) { + systemSettings.headsUp = false + systemSettings.reTicker = false + } else if (appSettings.notificationMode == 1) { + systemSettings.headsUp = true + systemSettings.reTicker = false + } else { + systemSettings.reTicker = true + } if (appSettings.ringerMode != 3) { audioManager.ringerModeInternal = appSettings.ringerMode } @@ -86,6 +97,10 @@ class GameSession @Inject constructor( if (appSettings.noAdbEnabled) { orig.adbEnabled?.let { systemSettings.adbEnabled = it } } + if (appSettings.notificationMode != 2) { + orig.headsUp?.let { systemSettings.headsUp = it } + } + orig.reTicker?.let { systemSettings.reTicker = it } if (appSettings.ringerMode != 3) { audioManager.ringerModeInternal = orig.ringerMode } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt index c3f5244d..f556f9a1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt @@ -24,6 +24,8 @@ data class SessionState( var packageName: String, var autoBrightness: Boolean? = null, var threeScreenshot: Boolean? = null, + var headsUp: Boolean? = null, + var reTicker: Boolean? = null, var ringerMode: Int = AudioManager.RINGER_MODE_NORMAL, var adbEnabled: Boolean? = null, ) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index 44f559fc..fa993191 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -29,6 +29,28 @@ class SystemSettings @Inject constructor( private val resolver = context.contentResolver + var headsUp + get() = + Settings.Global.getInt(resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 1) == 1 + set(it) { + Settings.Global.putInt( + resolver, + Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, + it.toInt() + ) + } + + var reTicker + get() = + Settings.System.getInt(resolver, Settings.System.RETICKER_STATUS, 0) == 1 + set(it) { + Settings.System.putInt( + resolver, + Settings.System.RETICKER_STATUS, + it.toInt() + ) + } + var autoBrightness get() = Settings.System.getIntForUser( diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index bda4656b..601c8664 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -48,4 +48,16 @@ @string/game_mode_performance @string/game_mode_battery + + + @string/notification_mode_hide + @string/notification_mode_headsup + @string/notification_mode_reticker + + + + 0 + 1 + 2 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b9f1f43..1488cb34 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,12 @@ Disable USB debugging Overlay menu opacity level + + Notification mode + Do not show + Show as heads up + Show as reTicker + Ringer mode Silent diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 142d9d5a..1562bacb 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -27,6 +27,14 @@ android:key="in_game_preferences" android:title="@string/in_game_preferences_title"> + + Date: Tue, 21 Jun 2022 14:09:50 +0800 Subject: [PATCH 044/214] GameSpace: Port in-game danmaku feature * Adapt from https://github.com/Nameless-AOSP/packages_apps_GamingMode. * Add back tile for notification mode switch. Co-authored-by: jhonboy121 Co-authored-by: cjh1249131356 Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 9 + .../gamespace/data/AppSettings.kt | 2 +- .../gamespace/data/GameSession.kt | 7 +- .../gamespace/gamebar/DanmakuService.kt | 278 ++++++++++++++++++ .../gamespace/gamebar/GameBarService.kt | 6 + .../widget/tiles/NotificationTile.kt | 75 +++++ .../main/res/drawable/ic_action_heads_up.xml | 32 ++ app/src/main/res/layout-land/tiles.xml | 6 +- app/src/main/res/layout/tiles.xml | 4 + app/src/main/res/values/arrays.xml | 2 + app/src/main/res/values/dimens.xml | 3 + app/src/main/res/values/strings.xml | 7 +- app/src/main/res/xml/root_preferences.xml | 2 +- 13 files changed, 425 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt create mode 100644 app/src/main/res/drawable/ic_action_heads_up.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d4311160..9b5e4932 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -65,6 +65,15 @@ android:name=".gamebar.GameBarService" android:exported="false" /> + + + + + + () + + private val notificationListener = Listener() + + private var layoutParams: LayoutParams = LayoutParams().apply { + height = LayoutParams.WRAP_CONTENT + flags = flags or LayoutParams.FLAG_NOT_FOCUSABLE or + LayoutParams.FLAG_NOT_TOUCHABLE or + LayoutParams.FLAG_HARDWARE_ACCELERATED + type = LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY + format = PixelFormat.TRANSLUCENT + gravity = Gravity.TOP + } + + private var isPortrait: Boolean = + context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT + + private var verticalOffsetLandscape = 0 + private var verticalOffsetPortrait = 0 + + private var overlayAlphaAnimator: ValueAnimator? = null + private var overlayPositionAnimator: ValueAnimator? = null + + fun init() { + updateParams() + registerListener() + } + + fun updateConfiguration(newConfig: Configuration) { + isPortrait = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT + overlayAlphaAnimator?.end() + overlayPositionAnimator?.end() + updateParams() + updateViewLayoutSafely(layoutParams) + } + + fun destroy() { + unregisterListener() + overlayAlphaAnimator?.cancel() + overlayPositionAnimator?.cancel() + removeViewSafely() + } + + private fun registerListener() { + val componentName = ComponentName(context, DanmakuService::class.java) + try { + notificationListener.registerAsSystemService( + context, + componentName, + UserHandle.USER_CURRENT + ) + } catch (e: RemoteException) { + Log.e(TAG, "RemoteException while registering danmaku service") + } + } + + private fun unregisterListener() { + try { + notificationListener.unregisterAsSystemService() + } catch (e: RemoteException) { + Log.e(TAG, "RemoteException while registering danmaku service") + } + } + + private fun updateParams() { + with(context.resources) { + verticalOffsetLandscape = + getDimensionPixelSize(R.dimen.notification_vertical_offset_landscape) + verticalOffsetPortrait = + getDimensionPixelSize(R.dimen.notification_vertical_offset_portrait) + } + layoutParams.y = getOffsetForPosition() + layoutParams.width = (NOTIFICATION_MAX_WIDTH * windowManager.currentWindowMetrics.bounds.width()) / 100 + notificationOverlay.setTextSize( + TypedValue.COMPLEX_UNIT_PX, + (if (isPortrait) NOTIFICATION_SIZE_PORTRAIT else NOTIFICATION_SIZE_LANDSCAPE).toFloat() + ) + } + + private fun getOffsetForPosition(): Int { + return if (isPortrait) verticalOffsetPortrait else verticalOffsetLandscape + } + + private fun showNotificationAsOverlay(notification: String) { + if (notificationOverlay.parent == null) { + notificationOverlay.alpha = 0f + notificationOverlay.text = notification + windowManager.addView(notificationOverlay, layoutParams) + pushNotification() + } else { + notificationStack.add(notification) + } + } + + private fun pushNotification() { + val end = getOffsetForPosition().toFloat() + val start = end * (1 - SLIDE_ANIMATION_DISTANCE_FACTOR) + overlayPositionAnimator = getPositionAnimator(APPEAR_ANIMATION_DURATION, start, end).also { + it.addListener(onEnd = { + handler.postDelayed({ + popNotification() + }, DISPLAY_NOTIFICATION_DURATION) + }) + it.start() + } + startAlphaAnimation(APPEAR_ANIMATION_DURATION, 0f, 1f) + } + + private fun popNotification() { + val start = getOffsetForPosition().toFloat() + val end = start * (1 + SLIDE_ANIMATION_DISTANCE_FACTOR) + overlayPositionAnimator = + getPositionAnimator(DISAPPEAR_ANIMATION_DURATION, start, end).also { + it.addListener(onEnd = { + if (notificationStack.isEmpty()) { + removeViewSafely() + } else { + notificationOverlay.alpha = 0f + notificationOverlay.text = notificationStack.pop() + pushNotification() + } + }) + it.start() + } + startAlphaAnimation(DISAPPEAR_ANIMATION_DURATION, 1f, 0f) + } + + private fun getPositionAnimator(duration: Long, vararg values: Float): ValueAnimator { + val lpCopy = LayoutParams().also { it.copyFrom(layoutParams) } + return ValueAnimator.ofFloat(*values).apply { + this.duration = duration + addUpdateListener { + lpCopy.y = (it.animatedValue as Float).toInt() + updateViewLayoutSafely(lpCopy) + } + } + } + + private fun startAlphaAnimation(duration: Long, vararg values: Float) { + overlayAlphaAnimator = ValueAnimator.ofFloat(*values).apply { + this.duration = duration + addUpdateListener { + notificationOverlay.alpha = it.animatedValue as Float + } + }.also { it.start() } + } + + private fun updateViewLayoutSafely(layoutParams: LayoutParams) { + if (notificationOverlay.parent != null) + windowManager.updateViewLayout(notificationOverlay, layoutParams) + } + + private fun removeViewSafely() { + if (notificationOverlay.parent != null) + windowManager.removeViewImmediate(notificationOverlay) + } + + private inner class Listener : NotificationListenerService() { + + private val postedNotifications = mutableListOf() + + override fun onNotificationPosted(sbn: StatusBarNotification) { + if (appSettings.notificationMode != 3) return; + if (!sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + val extras = sbn.notification.extras + var title = extras.getString(Notification.EXTRA_TITLE) + if (title?.isNotBlank() != true) title = extras.getString(Notification.EXTRA_TITLE_BIG) + + var danmakuText = "" + if (title?.isNotBlank() == true) { + danmakuText += "[$title] " + } + val text = extras.getString(Notification.EXTRA_TEXT) + if (text?.isNotBlank() == true) { + danmakuText += text + } + + if (danmakuText.isNotBlank() && !postedNotifications.contains(danmakuText)) { + showNotificationAsOverlay(danmakuText) + insertPostedNotification(danmakuText) + } + } + + private fun insertPostedNotification(danmakuText: String) { + if (postedNotifications.size >= NOTIFICATIONS_MAX_CACHED) { + postedNotifications.clear() + } + postedNotifications.add(danmakuText) + } + } + + companion object { + private const val TAG = "DanmakuService" + + private const val SLIDE_ANIMATION_DISTANCE_FACTOR = 0.5f + + private const val APPEAR_ANIMATION_DURATION = 500L + private const val DISPLAY_NOTIFICATION_DURATION = 2000L + private const val DISAPPEAR_ANIMATION_DURATION = 300L + + private const val NOTIFICATION_SIZE_LANDSCAPE = 60 + private const val NOTIFICATION_SIZE_PORTRAIT = 60 + + private const val NOTIFICATION_MAX_WIDTH = 75 + + private const val NOTIFICATIONS_MAX_CACHED = 99 + } +} diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index aef9f964..8f62db33 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -63,6 +63,9 @@ class GameBarService : Hilt_GameBarService() { @Inject lateinit var screenUtils: ScreenUtils + @Inject + lateinit var danmakuService: DanmakuService + private val scope = CoroutineScope(Job() + Dispatchers.Main) private val wm by lazy { getSystemService(WINDOW_SERVICE) as WindowManager } private val handler by lazy { Handler(Looper.getMainLooper()) } @@ -138,6 +141,7 @@ class GameBarService : Hilt_GameBarService() { .inflate(R.layout.window_util, frame, false) barView = rootBarView.findViewById(R.id.container_bar) menuSwitcher = rootBarView.findViewById(R.id.action_menu_switcher) + danmakuService.init() } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { @@ -156,6 +160,7 @@ class GameBarService : Hilt_GameBarService() { } override fun onDestroy() { + danmakuService.destroy() onActionStop() super.onDestroy() } @@ -171,6 +176,7 @@ class GameBarService : Hilt_GameBarService() { } else { dockCollapsedMenu() } + danmakuService.updateConfiguration(newConfig) } // for client service diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt new file mode 100644 index 00000000..a3518e3e --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 Chaldeaprjkt + * Copyright (C) 2022 Nameless-AOSP + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.widget.tiles + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import io.chaldeaprjkt.gamespace.R + +class NotificationTile @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null +) : BaseTile(context, attrs) { + + private var activeMode = DANMAKU_MODE + set(value) { + field = value + appSettings.notificationMode = value + when (value) { + NO_NOTIFICATION -> { + systemSettings.headsUp = false + systemSettings.reTicker = false + summary?.text = context.getString(R.string.notification_hide) + } + HEADS_UP_MODE -> { + systemSettings.headsUp = true + systemSettings.reTicker = false + summary?.text = context.getString(R.string.notification_headsup) + } + RETICKER_MODE -> { + systemSettings.headsUp = true + systemSettings.reTicker = true + summary?.text = context.getString(R.string.notification_reticker) + } + DANMAKU_MODE -> { + systemSettings.headsUp = false + systemSettings.reTicker = false + summary?.text = context.getString(R.string.notification_danmaku) + } + } + isSelected = value != NO_NOTIFICATION + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + title?.text = context.getString(R.string.notification_mode_title) + activeMode = appSettings.notificationMode + icon?.setImageResource(R.drawable.ic_action_heads_up) + } + + override fun onClick(v: View?) { + super.onClick(v) + activeMode = if (activeMode == DANMAKU_MODE) NO_NOTIFICATION else activeMode + 1 + } + + companion object { + private const val NO_NOTIFICATION = 0 + private const val HEADS_UP_MODE = 1 + private const val RETICKER_MODE = 2 + private const val DANMAKU_MODE = 3 + } +} diff --git a/app/src/main/res/drawable/ic_action_heads_up.xml b/app/src/main/res/drawable/ic_action_heads_up.xml new file mode 100644 index 00000000..a058e928 --- /dev/null +++ b/app/src/main/res/drawable/ic_action_heads_up.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/app/src/main/res/layout-land/tiles.xml b/app/src/main/res/layout-land/tiles.xml index 394c7c46..b587d8aa 100644 --- a/app/src/main/res/layout-land/tiles.xml +++ b/app/src/main/res/layout-land/tiles.xml @@ -20,7 +20,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:columnCount="2" + android:columnCount="3" android:orientation="horizontal"> + + diff --git a/app/src/main/res/layout/tiles.xml b/app/src/main/res/layout/tiles.xml index 394c7c46..f2bc7f38 100644 --- a/app/src/main/res/layout/tiles.xml +++ b/app/src/main/res/layout/tiles.xml @@ -39,4 +39,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 601c8664..5f1c7d70 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -53,11 +53,13 @@ @string/notification_mode_hide @string/notification_mode_headsup @string/notification_mode_reticker + @string/notification_mode_danmaku 0 1 2 + 3 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index a7be8e51..acb95e7a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -17,4 +17,7 @@ 36dp + + 48dp + 36dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1488cb34..ba5f7c8b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -34,8 +34,9 @@ Notification mode Do not show - Show as heads up + Show as Heads Up Show as reTicker + Show as Danmaku Ringer mode @@ -76,6 +77,10 @@ Mode FPS info + Hide + Heads Up + reTicker + Danmaku enabled disabled diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 1562bacb..df6d5d6c 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -28,7 +28,7 @@ android:title="@string/in_game_preferences_title"> Date: Tue, 21 Jun 2022 21:57:14 +0800 Subject: [PATCH 045/214] GameSpace: Properly filter duplicated notification * Some apps like Telegram will repost unread messages along with new messages sent by someone others. Previously, we were just comparing text between notifications. It's not that accurate since people would spam same message text at different time which will be treated as a duplicated message. Take advantage of Notification.when, which records the time when notification gets posted, and won't change on a repost. Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/DanmakuService.kt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt index 08992d82..20e1e9ad 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt @@ -227,7 +227,7 @@ class DanmakuService @Inject constructor( private inner class Listener : NotificationListenerService() { - private val postedNotifications = mutableListOf() + private val postedNotifications = mutableMapOf() override fun onNotificationPosted(sbn: StatusBarNotification) { if (appSettings.notificationMode != 3) return; @@ -245,17 +245,21 @@ class DanmakuService @Inject constructor( danmakuText += text } - if (danmakuText.isNotBlank() && !postedNotifications.contains(danmakuText)) { + val time = sbn.notification.`when` + if (danmakuText.isNotBlank() && !( + postedNotifications.containsKey(danmakuText) && + postedNotifications[danmakuText] == time + )) { showNotificationAsOverlay(danmakuText) - insertPostedNotification(danmakuText) + insertPostedNotification(danmakuText, time) } } - private fun insertPostedNotification(danmakuText: String) { + private fun insertPostedNotification(danmakuText: String, time: Long) { if (postedNotifications.size >= NOTIFICATIONS_MAX_CACHED) { postedNotifications.clear() } - postedNotifications.add(danmakuText) + postedNotifications.put(danmakuText, time) } } From 44a2269c6b5edfcdcf765d980f0c3fbf46eda081 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 17 Jul 2022 22:38:32 +0530 Subject: [PATCH 046/214] GameSpace: Remove unimplemented method from Danmaku service * This is for app lock feature not used by us. Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt index 20e1e9ad..ac2766eb 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt @@ -231,7 +231,7 @@ class DanmakuService @Inject constructor( override fun onNotificationPosted(sbn: StatusBarNotification) { if (appSettings.notificationMode != 3) return; - if (!sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + if (!sbn.isClearable || sbn.isOngoing) return val extras = sbn.notification.extras var title = extras.getString(Notification.EXTRA_TITLE) if (title?.isNotBlank() != true) title = extras.getString(Notification.EXTRA_TITLE_BIG) From 03d7aaa1e11774753ef562eb94ca0839fa4ac307 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 17 Jul 2022 22:48:14 +0530 Subject: [PATCH 047/214] GameSpace: Re-sort ringer mode * Bring "Do not change" to top since it's default. Signed-off-by: Pranav Vashi --- app/src/main/res/values/arrays.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 5f1c7d70..dd6f1dbe 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -24,17 +24,17 @@ + @string/ringer_mode_no_change @string/ringer_mode_silent @string/ringer_mode_vibrate @string/ringer_mode_normal - @string/ringer_mode_no_change + 3 0 1 2 - 3 From b00583653d672f09ee790eeb698b9ab1dabf5714 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 17 Jul 2022 23:39:11 +0530 Subject: [PATCH 048/214] GameSpace: Change tile enabled/disabled case for consistency Signed-off-by: Pranav Vashi --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ba5f7c8b..f00c75c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -81,6 +81,6 @@ Heads Up reTicker Danmaku - enabled - disabled + Enabled + Disabled From 029c8edbca8bbd29eb258e5423cff60380b35a4f Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Tue, 19 Jul 2022 21:04:14 +0300 Subject: [PATCH 049/214] New Crowdin updates (#15) * New translations strings.xml (Italian) * New translations strings.xml (German) * New translations strings.xml (French) * New translations strings.xml (Korean) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Ukrainian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Norwegian) * New translations strings.xml (Dutch) * New translations strings.xml (Hungarian) * New translations strings.xml (Czech) * New translations strings.xml (Hebrew) * New translations strings.xml (Finnish) * New translations strings.xml (Greek) * New translations strings.xml (Danish) * New translations strings.xml (Catalan) * New translations strings.xml (Arabic) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (Romanian) * New translations strings.xml (German) * New translations strings.xml (Italian) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Japanese) * New translations strings.xml (Persian) * New translations strings.xml (Indonesian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Dutch) * New translations strings.xml (Persian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Ukrainian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Norwegian) * New translations strings.xml (Hungarian) * New translations strings.xml (Korean) * New translations strings.xml (Czech) * New translations strings.xml (Hebrew) * New translations strings.xml (Finnish) * New translations strings.xml (Greek) * New translations strings.xml (Danish) * New translations strings.xml (Catalan) * New translations strings.xml (Arabic) * New translations strings.xml (Afrikaans) * New translations strings.xml (Spanish) * New translations strings.xml (German) * New translations strings.xml (Italian) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Japanese) * New translations strings.xml (Indonesian) * New translations strings.xml (Turkish) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Russian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Indonesian) * New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-af-rZA/strings.xml | 57 ++++++++++------ app/src/main/res/values-ar-rSA/strings.xml | 57 ++++++++++------ app/src/main/res/values-ca-rES/strings.xml | 57 ++++++++++------ app/src/main/res/values-cs-rCZ/strings.xml | 57 ++++++++++------ app/src/main/res/values-da-rDK/strings.xml | 57 ++++++++++------ app/src/main/res/values-de-rDE/strings.xml | 61 ++++++++++------- app/src/main/res/values-el-rGR/strings.xml | 57 ++++++++++------ app/src/main/res/values-es-rES/strings.xml | 57 ++++++++++------ app/src/main/res/values-fa-rIR/strings.xml | 57 ++++++++++------ app/src/main/res/values-fi-rFI/strings.xml | 57 ++++++++++------ app/src/main/res/values-fr-rFR/strings.xml | 57 ++++++++++------ app/src/main/res/values-hu-rHU/strings.xml | 57 ++++++++++------ app/src/main/res/values-in-rID/strings.xml | 77 ++++++++++++++++++++++ app/src/main/res/values-it-rIT/strings.xml | 59 ++++++++++------- app/src/main/res/values-iw-rIL/strings.xml | 57 ++++++++++------ app/src/main/res/values-ja-rJP/strings.xml | 57 ++++++++++------ app/src/main/res/values-ko-rKR/strings.xml | 57 ++++++++++------ app/src/main/res/values-nl-rNL/strings.xml | 57 ++++++++++------ app/src/main/res/values-no-rNO/strings.xml | 57 ++++++++++------ app/src/main/res/values-pl-rPL/strings.xml | 57 ++++++++++------ app/src/main/res/values-pt-rBR/strings.xml | 57 ++++++++++------ app/src/main/res/values-pt-rPT/strings.xml | 57 ++++++++++------ app/src/main/res/values-ro-rRO/strings.xml | 57 ++++++++++------ app/src/main/res/values-ru-rRU/strings.xml | 57 ++++++++++------ app/src/main/res/values-sr-rSP/strings.xml | 57 ++++++++++------ app/src/main/res/values-sv-rSE/strings.xml | 57 ++++++++++------ app/src/main/res/values-tr-rTR/strings.xml | 57 ++++++++++------ app/src/main/res/values-uk-rUA/strings.xml | 57 ++++++++++------ app/src/main/res/values-vi-rVN/strings.xml | 57 ++++++++++------ app/src/main/res/values-zh-rCN/strings.xml | 57 ++++++++++------ app/src/main/res/values-zh-rTW/strings.xml | 57 ++++++++++------ 31 files changed, 1160 insertions(+), 633 deletions(-) create mode 100644 app/src/main/res/values-in-rID/strings.xml diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index f8cd285d..fae2e697 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -18,45 +18,60 @@ Game Space إدارة إعدادات ألعابك - إختر لعبتك - تعطيل السطوع التلقائي - Disable heads up notifications + خيارات داخل اللعبة - المكتبة - هل ترغب حقًا في إزالة «%1$s» من مكتبتك؟ - بحث - تعطيل السحب لأخذ لقطة الشاشة - مفعل - معطل - - الوضع - غير مدعوم - قياسي - نمط الاداء - توفير البطارية - الإشعارات المنبثقة - عداد معدل الإطارات + منع أحداث الشاشة الكاملة + Prevent fullscreen events like incoming calls from appearing البقاء في الوضع النشط Lock gesture + تعطيل السطوع التلقائي + تعطيل السحب لأخذ لقطة الشاشة + تعطيل تصحيح أخطاء USB + مستوى شفافية القائمة العائمة + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + وضع الرنين صامت إهتزاز عادي - منع أحداث الشاشة الكاملة - Prevent fullscreen events like incoming calls from appearing + Do not change + + المكتبة + Add + إختر لعبتك + بحث + Are you sure you want to remove %1$s from your game list? + ضبط اللعبة الوضع المفضل استخدام واجهة المستخدم الجديدة (التجريبية) استخدام محرك ANGLE بدلاً من تعاريف GLES التقليدية. \n تحذير!! قد يعطل رسومات اللعبة، استخدم بحذر! ANGLE غير متوفر على النظام الخاص بك إزالة %1$s من المكتبة + غير مدعوم + قياسي + نمط الاداء + توفير البطارية القيمة: %s بشكل افتراضي القيمة الافتراضية: %s\n أنقر مطولاً للتعيين تم تعيين القيمة الافتراضية - مستوى شفافية القائمة العائمة - تعطيل تصحيح أخطاء USB + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + الوضع + عداد معدل الإطارات + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 569bb8a0..92506514 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -18,45 +18,60 @@ Herní prostor Spravovat herního nastavení - Výběr hry - Zakázat automatický jas - Zakázat plovoucí oznámení + Možnosti ve hře - Knihovna - Opravdu chcete odstranit %1$s z vaší knihovny? - Hledat - Zakázat přejetí pro snímek obrazovky - povoleno - zakázáno - - Režim - Nepodporováno - Standardní - Výkon - Baterie - Plovoucí oznámení - Informace o FPS + Blokovat událost na celou obrazovku + Zakázat zobrazení celoobrazovkových události, např. příchozí volání Nevypínat obrazovku Zakázat gesta + Zakázat automatický jas + Zakázat přejetí pro snímek obrazovky + Zakázat ladění USB + Úroveň průhlednosti překrytí menu + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Režim vyzvánění Tichý Vibrace Normální - Blokovat událost na celou obrazovku - Zakázat zobrazení celoobrazovkových události, např. příchozí volání + Do not change + + Knihovna + Add + Výběr hry + Hledat + Are you sure you want to remove %1$s from your game list? + Konfigurace hry Preferovaný režim Použít ANGLE (experimentální) Používá ANGLE renderer místo nativních ovladačů GLA.\nVAROVÁNÍ!! Může se rozbít herní grafiku, používejte opatrně! ANGLE není k dispozici ve vašem systému Odebrat %1$s z knihovny + Nepodporováno + Standardní + Výkon + Baterie Hodnota: %s výchozí hodnota Výchozí hodnota: %s\nDlouze klepněte pro její nastavení Výchozí hodnota je nastavena - Úroveň průhlednosti překrytí menu - Zakázat ladění USB + Baterie: %1$d%% Dostupná paměť: %1$d\/%2$d MB + + Režim + Informace o FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index ea8e63ef..f53a066f 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -16,47 +16,62 @@ limitations under the License. --> - Game Space + Spielmodus Spieleinrichtung verwalten - Wähle dein Spiel - Auto-Helligkeit deaktivieren - Pop-up-Benachrichtigungen deaktivieren + In-Game-Optionen - Bibliothek - Sind Sie sicher, dass Sie %1$s aus Ihrer Bibliothek entfernen möchten? - Suchen - Wischen für Screenshot deaktivieren - aktiviert - deaktiviert - - Modus - Nicht unterstützt - Standard - Leistung - Akku - Pop-Up - FPS-Info + Vollbild-Ereignis blockieren + Deaktivieren von Vollbildbenachrichtigungen (z. B. eingehende Anrufe) Display eingeschaltet lassen Gesten deaktivieren + Auto-Helligkeit deaktivieren + Wischen für Screenshot deaktivieren + USB-Debugging deaktivieren + Transparenz des Overlay-Menüs + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Klingelmodus Stumm Vibration Normal - Vollbild-Ereignis blockieren - Deaktivieren von Vollbildbenachrichtigungen (z. B. eingehende Anrufe) + Do not change + + Bibliothek + Add + Wähle dein Spiel + Suchen + Are you sure you want to remove %1$s from your game list? + Spiel konfigurieren Bevorzugter Modus ANGLE benutzen (experimentell) Verwendung von ANGLE Renderer statt nativer GLES Treiber.\nWARNUNG!! Kann Spielgrafiken falsch darstellen! ANGLE ist auf Ihrem System nicht verfügbar %1$s aus der Bibliothek entfernen + Nicht unterstützt + Standard + Leistung + Akku Wert: %s Standardmäßig Standardwert: %s\nZum Einstellen gedrückt halten Standardwert ist eingestellt - Transparenz des Overlay-Menüs - USB-Debugging deaktivieren + Akku:  %1$d%%  - Memory available: %1$d\/%2$d MB + Freier Arbeitsspeicher: %1$d\/%2$d MB + + Modus + FPS-Info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 9c15210e..ae896b48 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -18,45 +18,60 @@ Χώρος Παιχνιδιού Διαχειριστείτε τις ρυθμίσεις παιχνιδιών σας - Διάλεξε το παιχνίδι σου - Απενεργοποίηση αυτόματης φωτεινότητας - Απενεργοποίηση αναδυόμενων ειδοποιήσεων + Επιλογές εντός του παιχνιδιού - Βιβλιοθήκη - Είστε βέβαιοι ότι θέλετε να αφαιρέσετε το %1$s από τη βιβλιοθήκη σας; - Αναζήτηση - Απενεργοποίηση συρσίματος για στιγμιότυπο οθόνης - ενεργό - ανενεργό - - Λειτουργία - Δεν υποστηρίζεται - Κανονικό - Επιδόσεις - Μπαταρία - Αναδυόμενες ειδοποιήσεις - Πληροφορίες FPS + Αποκλεισμός συμβάντος πλήρους οθόνης + Αποτροπή εμφάνισης συμβάντων πλήρους οθόνης όπως οι εισερχόμενες κλήσεις Παραμονή σε λειτουργία Χειρονομία κλειδώματος + Απενεργοποίηση αυτόματης φωτεινότητας + Απενεργοποίηση συρσίματος για στιγμιότυπο οθόνης + Απενεργοποίηση εντοπισμού σφαλμάτων USB + Επίπεδο αδιαφάνειας μενού επικάλυψης + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Λειτουργία κουδουνίσματος Αθόρυβο Δόνηση Κανονικό - Αποκλεισμός συμβάντος πλήρους οθόνης - Αποτροπή εμφάνισης συμβάντων πλήρους οθόνης όπως οι εισερχόμενες κλήσεις + Do not change + + Βιβλιοθήκη + Add + Διάλεξε το παιχνίδι σου + Αναζήτηση + Are you sure you want to remove %1$s from your game list? + Διαμόρφωση παιχνιδιού Προτιμώμενη λειτουργία Χρήση ANGLE (πειραματικό) Χρήση του ANGLE renderer αντί των εγγενών προγραμμάτων οδήγησης GLES.\nΠΡΟΕΙΔΟΠΟΙΗΣΗ!! Μπορεί να χαλάσει τα γραφικά του παιχνιδιού, χρησιμοποιήστε με προσοχή! Το ANGLE δεν είναι διαθέσιμο στο σύστημά σας Αφαίρεση του %1$s από τη βιβλιοθήκη + Δεν υποστηρίζεται + Κανονικό + Επιδόσεις + Μπαταρία Τιμή: %s από προεπιλογή Προεπιλεγμένη τιμή: %s\nΠατήστε παρατεταμένα για να ορίσετε Η προεπιλεγμένη τιμή έχει οριστεί - Επίπεδο αδιαφάνειας μενού επικάλυψης - Απενεργοποίηση εντοπισμού σφαλμάτων USB + Μπαταρία: %1$d%% Διαθέσιμη μνήμη: %1$d\/%2$d MB + + Λειτουργία + Πληροφορίες FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index fd992cc0..25673de7 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -18,46 +18,61 @@ Espacio de Juego Administra tu configuración de juegos - Elige tu juego - Desactivar brillo automático - Desactivar notificaciones emergentes + Opciones en el juego - Biblioteca - ¿Está seguro que desea eliminar %1$s de su biblioteca? - Buscar - Desactivar deslizar para captura de pantalla - activado - desactivado - - Modo - No soportado - Estándar - Rendimiento - Batería - Notificaciones flotantes - Información de FPS + Bloquear eventos en pantalla completa + Evitar la aparición de eventos en pantalla completa como llamadas entrantes Permanecer encendido Gesto de bloqueo + Desactivar brillo automático + Desactivar deslizar para captura de pantalla + Desactivar depuración USB + Nivel de opacidad del menú de superposición + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Modo de timbre Silencio Vibrar Normal - Bloquear eventos en pantalla completa - Evitar la aparición de eventos en pantalla completa como llamadas entrantes + Do not change + + Biblioteca + Add + Elige tu juego + Buscar + Are you sure you want to remove %1$s from your game list? + Configurar juego Modo preferido Usar nueva interfaz de usuario (experimental) Utilizar renderizado ANGLE en lugar de controladores GLES nativos. \n¡ADVERTENCIA! Puede romper los gráficos de juegos, ¡Úsalo con cuidado! ANGLE no está disponible en su sistema Eliminar %1$s de la biblioteca + No soportado + Estándar + Rendimiento + Batería Valor: %s predeterminado Valor predeterminado: %s\n Mantén presionado para establecer Valor predeterminado establecido - Nivel de opacidad del menú de superposición - Desactivar depuración USB + Batería: %1$d%% Memoria disponible: %1$d\/%2$d MB + + Modo + Información de FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index c9caff2a..9219799d 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -18,45 +18,60 @@ فضای بازی تنظیمات بازی خود را مدیریت کنید - بازی خود را انتخاب کنید - غیرفعالسازی روشنایی خودکار - غیرفعالسازی اعلان های فوری + گزینه های درون بازی - مجموعه - آیا مطمئن هستید که می خواهید %1$s را از مجموعه خود حذف کنید? - جستجو - غیرفعالسازی گرفتن اسکرین شات با کشیدن انگشت - فعال - غیرفعال - - حالت - پشتیبانی نشده - استاندارد - کارایی - باتری - اعلان فوری - اطلاعات FPS + مسدود کردن رویداد تمام صفحه + از نمایش رویدادهای تمام صفحه مانند تماس های دریافتی جلوگیری کنید بیدار بمان قفل کردن ژست + غیرفعالسازی روشنایی خودکار + غیرفعالسازی گرفتن اسکرین شات با کشیدن انگشت + غیرفعال کردن اشکال زدایی USB + سطح شفافیت منوی همپوشانی + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + حالت با صدا سکوت لرزش معمولی - مسدود کردن رویداد تمام صفحه - از نمایش رویدادهای تمام صفحه مانند تماس های دریافتی جلوگیری کنید + Do not change + + مجموعه + Add + بازی خود را انتخاب کنید + جستجو + Are you sure you want to remove %1$s from your game list? + پیکربندی بازی حالت ترجیحی استفاده از ANGLE (آزمایشی) استفاده از رندر ANGLE به جای درایورهای GLES بومی، اگر دستگاه از آن پشتیبانی کند.\nهشدار!! ممکن است گرافیک بازی را خراب کند، با احتیاط استفاده کنید! ANGLE در سیستم شما در دسترس نیست %1$s را از مجموعه حذف کنید + پشتیبانی نشده + استاندارد + کارایی + باتری ارزش: %s به طور پیش فرض ارزش پیش‌فرض: %s\n برای تنظیم نگه دارید مقدار پیش‌فرض تعیین شده است - سطح شفافیت منوی همپوشانی - غیرفعال کردن اشکال زدایی USB + باتری: %1$d%% حافظه موجود است: %1$d\/%2$d مگابایت + + حالت + اطلاعات FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 1dae8181..a711b19b 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -18,45 +18,60 @@ Espace de jeu Gérez votre configuration de jeu - Choisissez votre jeu - Désactiver la luminosité automatique - Désactiver les notifications flottantes + Options en jeu - Bibliothèque - Êtes-vous sûr de vouloir retirer %1$s de votre bibliothèque ? - Rechercher - Désactiver le glissement pour faire une capture d\'écran - activé - désactivé - - Mode - Non-supporté - Standard - Performance - Batterie - Notifications flottantes - Infos FPS + Bloquer les évènements en plein écran + Empêcher les événements en plein écran comme les appels entrants d\'apparaître Rester éveillé Gestes de verrouillage + Désactiver la luminosité automatique + Désactiver le glissement pour faire une capture d\'écran + Désactiver le débogage USB + Niveau d\'opacité du menu de superposition + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Mode sonnerie Silencieux Vibrer Normal - Bloquer les évènements en plein écran - Empêcher les événements en plein écran comme les appels entrants d\'apparaître + Do not change + + Bibliothèque + Add + Choisissez votre jeu + Rechercher + Are you sure you want to remove %1$s from your game list? + Configurer le jeu Mode préféré Utiliser ANGLE (expérimental) Utiliser le moteur de rendu ANGLE au lieu des pilotes GLES natifs.\nATTENTION!! Peut altérer le rendu graphique de jeu, utiliser avec précaution ! ANGLE n\'est pas disponible pour votre système Retirer %1$s de la bibliothèque + Non-supporté + Standard + Performance + Batterie Valeur : %s par défaut Valeur par défaut : %s\nRester appuyer pour définir Valeur par défaut définie - Niveau d\'opacité du menu de superposition - Désactiver le débogage USB + Batterie : %1$d%% Mémoire disponible : %1$d\/%2$d Mo + + Mode + Infos FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 8b0763ac..7ee9c927 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Válaszd ki a játékod - Az automatikus fényerőszabályzás tiltása - Disable heads up notifications + Játékon belüli lehetőségek - Könyvtár - Are you sure you want to remove %1$s from your library? - Keresés - Disable swipe to screenshot - engedélyezett - letiltott - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Az automatikus fényerőszabályzás tiltása + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Néma Rezgő Normál - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Könyvtár + Add + Válaszd ki a játékod + Keresés + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Eltávólítás a könyvtárból + Unsupported + Standard + Performance + Battery Value: %s alapértelmezés szerint Default value: %s\nLong tap to set Az alapértelmezett érték beállítva - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml new file mode 100644 index 00000000..c141727f --- /dev/null +++ b/app/src/main/res/values-in-rID/strings.xml @@ -0,0 +1,77 @@ + + + + Ruang Permainan + Kelola pengaturan game + + Opsi dalam game + Blokir acara layar penuh + Cegah acara layar penuh seperti panggilan masuk muncul saat dalam game + Tetap terjaga + Kunci gestur + Nonaktifkan kecerahan otomatis + Nonaktifkan gesek ke tangkapan layar + Nonaktifkan USB debugging + Tingkat opasitas hamparan menu + + Mode pemberitahuan + Jangan tampilkan + Muncul sebagai Heads Up + Muncul sebagai reTicker + Tampilkan danmaku + + Mode dering + Senyap + Getar + Normal + Jangan diubah + + Perpustakaan + Tambahkan + Pilih game Anda + Telusuri + Anda yakin ingin menghapus %1$s dari daftar permainan Anda? + + Konfigurasi game + Mode pilihan + Gunakan ANGLE (eksperimental) + Menggunakan perender ANGLE sebagai ganti driver GLES asli.\nPERINGATAN! Dapat merusak grafik game, gunakan dengan hati-hati! + ANGLE tidak tersedia di sistem Anda + Hapus %1$s dari pustaka + Tidak didukung + Standar + Peforma + Baterai + + Nilai: %s + bawaan + Nilai bawaan: %s\nTekan lama untuk menerapkan + Nilai bawaan telah diterapkan + + Baterai: %1$d%% + Memori tersedia: %1$d\/%2$d MB + + Mode + Info FPS + Sembunyikan + Notifikasi mengambang + reTicker + Danmaku + Aktif + Nonaktif + diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 019a7985..59cfb776 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -18,45 +18,60 @@ Spazio di gioco Gestisci la tua configurazione di gioco - Scegli il tuo gioco - Disabilita luminosità automatica - Disabilita le notifiche fluttuanti + Opzioni di gioco - Libreria - Sei sicuro di voler rimuovere %1$s dalla tua libreria? - Cerca - Disabilita lo scorrimento per screenshot - abilita - disabilitato - - Modalità - Non supportato - Predefinito - Prestazioni - Batteria - Notifiche Fluttuanti - Info FPS + Blocca evento a schermo intero + Evitare la comparsa di eventi a schermo intero come le chiamate in arrivo Resta attivo Blocca gesto + Disabilita luminosità automatica + Disabilita lo scorrimento per screenshot + Disabilita debug USB + Livello di opacità menù sovrapposizione + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Modalità suoneria Silenzioso Vibrazione Normale - Blocca evento a schermo intero - Evitare la comparsa di eventi a schermo intero come le chiamate in arrivo + Do not change + + Libreria + Add + Scegli il tuo gioco + Cerca + Are you sure you want to remove %1$s from your game list? + Configura gioco Modalità preferita Usa nuova interfaccia (sperimentale) Usando il renderer ANGLE invece dei driver nativi GLES.\nATTENZIONE!! Potrebbe rompere la grafica del gioco, usare con cautela! ANGLE non è disponibile sul tuo sistema Rimuovi %1$s dalla libreria + Non supportato + Predefinito + Prestazioni + Batteria Valore: %s per impostazione predefinita Valore predefinito: %s\nTocca a lungo per impostare Valore predefinito impostato - Livello di opacità menù sovrapposizione - Disabilita debug USB + Batteria: %1$d%% - Memory available: %1$d\/%2$d MB + Memoria disponibile: %1$d\/%2$d MB + + Modalità + Info FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 95b988ed..0dcd5059 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -18,45 +18,60 @@ ゲームスペース ゲームの設定を管理 - ゲームを選択 - 自動明るさ調節を無効化 - Heads Up 通知を無効化 + ゲーム内オプション - ライブラリ - %1$s をライブラリから削除してもよろしいですか? - 検索 - スワイプでのスクリーンショットを無効化 - 有効 - 無効 - - モード - 非対応 - 標準 - パフォーマンス優先 - バッテリー優先 - Heads Up通知 - FPS 情報 + 全画面表示イベントをブロック + ゲーム中は着信通話のような全画面イベントが表示されないようにする 常に画面点灯 ジェスチャーをロック + 自動明るさ調節を無効化 + スワイプでのスクリーンショットを無効化 + USB デバッグを無効化 + オーバーレイメニューの不透明度 + + 通知モード + 表示しない + ポップアップ表示する + Show as reTicker + Show as Danmaku + 着信音モード サイレント バイブレーション 標準 - 全画面表示イベントをブロック - ゲーム中は着信通話のような全画面イベントが表示されないようにする + 変更しない + + ライブラリ + 追加 + ゲームを選択 + 検索 + ゲームリストから%1$s を削除しますか? + ゲーム設定 優先モード ANGLE を使用 (実験的) ネイティブ GLES ドライバーの代わりに ANGLE レンダラーを使用します。\n警告! ゲームグラフィックが破損する可能性があります。注意して使用して下さい! お使いのシステムでは ANGLE は利用できません %1$s をライブラリから削除 + 非対応 + 標準 + パフォーマンス優先 + バッテリー優先 値: %s 既定 既定値: %s\n長押しで設定 既定値が設定されています - オーバーレイメニューの不透明度 - USB デバッグを無効化 + バッテリー: %1$d%% 利用可能メモリ: %1$d\/%2$d MB + + モード + FPS 情報 + 非表示にする + ポップアップ通知 + reTicker + Danmaku + 有効 + 無効 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 216c8870..e9de2842 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -18,45 +18,60 @@ 게임 공간 게이밍 설정을 관리하기 - 게임을 선택하기 - 자동 밝기조절 해제 - 헤드업 알림 해제 + 인게임 옵션 - 라이브러리 - 라이브러리에서 %1$s 을(를) 제거하시겠습니까? - 검색 - 스와이프로 스크린샷 찍기 해제 - 활성화 - 비활성화 - - 모드 - 미지원 - 일반 - 성능 - 배터리 - 헤드업 알림 - FPS 정보 + 전체화면 이벤트 막기 + 전화를 수신할 때와 같은 전체화면 이벤트를 방지합니다 화면 켜짐 상태 유지 잠금 제스처 + 자동 밝기조절 해제 + 스와이프로 스크린샷 찍기 해제 + USB 디버깅 비활성화 + 오버레이 메뉴 투명도 레벨 + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + 벨소리 모드 무음 진동 기본 - 전체화면 이벤트 막기 - 전화를 수신할 때와 같은 전체화면 이벤트를 방지합니다 + Do not change + + 라이브러리 + Add + 게임을 선택하기 + 검색 + Are you sure you want to remove %1$s from your game list? + 게임 설정 선호 모드 ANGLE 사용 (실험적) 기본 GLES 드라이버 대신 ANGLE 렌더러를 사용합니다.\n경고!! 게임 그래픽이 깨질 수 있으니 주의하여 사용하세요! ANGLE을 이 시스템에서 사용할 수 없습니다 %1$s 을(를) 라이브러리에서 제거 + 미지원 + 일반 + 성능 + 배터리 값: %s 기본값으로 설정 기본값: %s\n길게 눌러서 설정 기본값으로 설정됨 - 오버레이 메뉴 투명도 레벨 - USB 디버깅 비활성화 + 배터리: %1$d%% 메모리 사용가능량: %1$d\/%2$d MB + + 모드 + FPS 정보 + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 649957df..a283a3ad 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -18,45 +18,60 @@ Game Space Beheer uw gaming-instellingen - Kies je spel - Automatische helderheid uitschakelen - Disable heads up notifications + In-game opties - Bibliotheek - Weet je zeker dat je %1$s uit je bibliotheek wilt verwijderen? - Zoeken - Veeg naar schermafbeelding uitschakelen - ingeschakeld - uitgeschakeld - - Modus - Niet ondersteund - Standaard - Prestatie - Batterij - Heads up - FPS info + Blokkeer volledig scherm event + Prevent fullscreen events like incoming calls from appearing Blijf aan Lock gesture + Automatische helderheid uitschakelen + Veeg naar schermafbeelding uitschakelen + Usb-foutopsporing uitschakelen + Transparantieniveau van overlappingsmenu + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Beltoonmodus Stil Vibreren Normaal - Blokkeer volledig scherm event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Bibliotheek + Add + Kies je spel + Zoeken + Are you sure you want to remove %1$s from your game list? + Spel configureren Voorkeursmodus Gebruik ANGLE (experimenteel) Gebruik ANGLE renderer in plaats van oorspronkelijke GLES drivers.\nWAARSCHUWING!! Kan spel afbeeldingen breken, gebruik met voorzichtigheid! ANGLE is niet beschikbaar op uw systeem Verwijder %1$s uit bibliotheek + Niet ondersteund + Standaard + Prestatie + Batterij Waarde: %s standaard Standaard waarde: %s\nLang indrukken om in te stellen Standaard waarde is ingesteld - Transparantieniveau van overlappingsmenu - Usb-foutopsporing uitschakelen + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Modus + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 45230665..f5f84d6c 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -18,45 +18,60 @@ Przestrzeń gier Zarządzaj konfiguracją gier - Wybierz swoją grę - Wyłącz automatyczną jasność - Wyłącz wyskakujące powiadomienia + Opcje w grze - Biblioteka - Czy na pewno chcesz usunąć %1$s z Twojej biblioteki? - Szukaj - Wyłączenie funkcji przeciągnięcia palcem w celu wykonania zrzutu ekranu - włączone - wyłączone - - Tryb - Nieobsługiwane - Standardowy - Wydajność - Bateria - Wyskakujące powiadomienia - Wskaźnik FPS + Zablokuj wydarzenie na pełnym ekranie + Zapobiegaj pojawianiu się wydarzeń na pełnym ekranie, takich jak połączenia przychodzące Pozostaw włączony ekran Gest blokady + Wyłącz automatyczną jasność + Wyłączenie funkcji przeciągnięcia palcem w celu wykonania zrzutu ekranu + Wyłącz debugowanie USB + Poziom przezroczystości nakładki menu + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Tryb dzwonka Tryb cichy Wibracje Normalny - Zablokuj wydarzenie na pełnym ekranie - Zapobiegaj pojawianiu się wydarzeń na pełnym ekranie, takich jak połączenia przychodzące + Do not change + + Biblioteka + Add + Wybierz swoją grę + Szukaj + Are you sure you want to remove %1$s from your game list? + Skonfiguruj grę Preferowany tryb Użyj ANGLE (eksperymentalne) Używaj renderowania ANGLE zamiast natywnych sterowników GLES.\nOSTRZEŻENIE!! Może uszkodzić grafikę gry, używaj z ostrożnością! ANGLE nie jest dostępne w Twoim systemie Usuń %1$s z biblioteki + Nieobsługiwane + Standardowy + Wydajność + Bateria Wartość: %s domyślnie Wartość domyślna: %s\nPrzytrzymaj dłużej by ustawić Wartość domyślna jest ustawiona - Poziom przezroczystości nakładki menu - Wyłącz debugowanie USB + Bateria: %1$d%% Dostępna pamięć: %1$d\/%2$d MB + + Tryb + Wskaźnik FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 82c4f81a..3e17914a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -18,45 +18,60 @@ Espaço de Jogo Gerencie sua configuração de jogos - Escolha seu jogo - Desativar brilho automático - Desativar notificações flutuantes + Opções do jogo - Biblioteca - Tem certeza de que deseja remover %1$s da sua biblioteca? - Pesquisa - Desativar deslize para captura de tela - ativado - desabilitado - - Modo - Incompatível - Padrão - Desempenho - Bateria - Notificações flutuantes - Informações de FPS + Bloquear eventos em tela cheia + Impedir que eventos em tela cheia como chamadas recebidas apareçam Permanecer ativo Bloquear gestos + Desativar brilho automático + Desativar deslize para captura de tela + Desativar depuração USB + Nível de opacidade do menu de opções + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Modo de toque Silencioso Vibrar Normal - Bloquear eventos em tela cheia - Impedir que eventos em tela cheia como chamadas recebidas apareçam + Do not change + + Biblioteca + Add + Escolha seu jogo + Pesquisa + Are you sure you want to remove %1$s from your game list? + Configurar jogo Modo preferencial Usar ANGLE (experimental) Usando renderizador ANGLE em vez de drivers GLES nativos.\nAVISO!! Pode quebrar gráficos do jogo, use com cuidado! ANGLE não está disponível no seu sistema Remover %1$s da biblioteca + Incompatível + Padrão + Desempenho + Bateria Valor: %s valor padrão Valor padrão: %s\nToque longo para definir Valor padrão definido - Nível de opacidade do menu de opções - Desativar depuração USB + Bateria: %1$d%% Memória disponível: %1$d\/%2$d MB + + Modo + Informações de FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index c074106c..af00d9b2 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -18,45 +18,60 @@ Espaço de jogo Gerir a sua configuração de jogos - Escolha o seu jogo - Desativar brilho automático - Desativar notificações flutuantes + Opções do jogo - Biblioteca de jogos - Tem certeza de que deseja remover %1$s da sua biblioteca? - Procurar - Desativar deslizar para capturar ecrã - ativado - desativado - - Modo - Não suportado - Padrão - Desempenho - Bateria - Notificações flutuantes - Info. de FPS + Bloquear eventos em ecrã inteiro + Impedir que ocorram eventos em ecrã inteiro, como receber chamadas Manter ativo Bloquear gestos + Desativar brilho automático + Desativar deslizar para capturar ecrã + Desativar depuração USB + Transparência do menu de sobreposição + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Modo de toque Silencioso Vibrar Normal - Bloquear eventos em ecrã inteiro - Impedir que ocorram eventos em ecrã inteiro, como receber chamadas + Do not change + + Biblioteca de jogos + Add + Escolha o seu jogo + Procurar + Are you sure you want to remove %1$s from your game list? + Configurar jogo Modo preferido Usar ANGLE (experimental) A usar o renderizador ANGLE em vez de controladores GLES nativos.\nAVISO!! Pode quebrar os gráficos do jogo, use com cuidado! ANGLE não está disponível no seu sistema Remover %1$s da biblioteca + Não suportado + Padrão + Desempenho + Bateria Valor: %s padrão Valor padrão: %s\nO Prima para definir O valor padrão está definido - Transparência do menu de sobreposição - Desativar depuração USB + Bateria: %1$d%% Memória disponível: %1$d\/%2$d MB + + Modo + Info. de FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 5c12cb78..e86d78ed 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -18,45 +18,60 @@ Spațiu de jocuri Gestionează-ți configurarea jocurilor - Alege-ți numele - Dezactivează luminozitatea automată - Dezactivează notificările de atenţionare + Opțiuni în joc - Bibliotecă - Sunteți sigur că doriți să ștergeți %1$s din bibliotecă? - Căutare - Dezactivează glisarea pentru captură de ecran - activat - dezactivat - - Mod - Necompatibil - Standard - Performanță - Baterie - Atenționări - Informații FPS + Blocare eveniment pe tot ecranul + Împiedicați apariția evenimentelor de pe tot ecranul, cum ar fi apelurile primite Menține ecranul activ Gest de blocare + Dezactivează luminozitatea automată + Dezactivează glisarea pentru captură de ecran + Dezactivează depanarea USB + Opacitate pentru meniul suprapus + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Mod sonerie Silențios Vibrații Normal - Blocare eveniment pe tot ecranul - Împiedicați apariția evenimentelor de pe tot ecranul, cum ar fi apelurile primite + Do not change + + Bibliotecă + Add + Alege-ți numele + Căutare + Are you sure you want to remove %1$s from your game list? + Configurare joc Mod preferat Utilizează ANGLE (experimental) Folosind redare ANGLE în locul driverelor GLES nativi.\nATENȚIE!! Poate strica aspectul jocului, folosește cu prudență! ANGLE nu este disponibil pe sistemul dumneavoastră Elimină %1$s din bibliotecă + Necompatibil + Standard + Performanță + Baterie Valoare: %s implicit Valoare implicită: %s\nAtingeți lung pentru a seta Valoarea implicită este setată - Opacitate pentru meniul suprapus - Dezactivează depanarea USB + Baterie: %1$d%% Memorie disponibilă: %1$d\/%2$d MB + + Mod + Informații FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 104b1a02..a7ac2a0d 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -18,45 +18,60 @@ Игровое Пространство Настройка игровых возможностей - Выберите свою игру - Отключить автоматическую яркость - Отключить всплывающие уведомления + Настройки игры - Библиотека - Вы уверены, что хотите удалить %1$s из своей библиотеки? - Поиск - Отключить свайп для скриншота - включено - отключено - - Режим - Не поддерживается - Стандартный - Производительный - Батарея - Всплывающие уведомления - Информация о FPS + Блокировать полноэкранные уведомления + Предотвращение появления полноэкранных событий, таких как входящие вызовы Не отключать экран Блокировать жесты + Отключить автоматическую яркость + Отключить свайп для скриншота + Отключить отладку по USB + Уровень прозрачности меню игрового режима + + Режим уведомлений + Не показывать + Всплывающие уведомления + Новый стиль уведомлений + Прозрачные без фона + Режим звонка в игре Беззвучный Вибрация Обычный - Блокировать полноэкранные уведомления - Предотвращение появления полноэкранных событий, таких как входящие вызовы + Не изменять + + Библиотека + Добавить + Выберите свою игру + Поиск + Вы действительно хотите удалить %s из своего списка игр? + Настроить игру Предпочтительный режим Использовать ANGLE (эксперементально) Использование рендерера ANGLE вместо собственных драйверов GLES.\nВНИМАНИЕ!! Может ломать игровую графику, использовать с осторожностью! ANGLE недоступен в вашей системе Удалить %1$s из библиотеки + Не поддерживается + Стандартный + Производительный + Батарея Значение: %s по умолчанию Значение по умолчанию: %s\nУдерживайте для установки Значение по умолчанию установлено - Уровень прозрачности меню игрового режима - Отключить отладку по USB + Батарея: %1$d%% Доступная память: %1$d\/%2$d MB + + Режим + Информация о FPS + Скрыть + Всплывающее уведомление + Новый стиль уведомлений + Прозрачные без фона + Включено + Отключено diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index b001dbec..eada96df 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -18,45 +18,60 @@ Game Space Manage your gaming setup - Pick your game - Disable auto-brightness - Disable heads up notifications + In-game options - Library - Are you sure you want to remove %1$s from your library? - Search - Disable swipe to screenshot - enabled - disabled - - Mode - Unsupported - Standard - Performance - Battery - Heads up - FPS info + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing Stay awake Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Ringer mode Silent Vibrate Normal - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + Configure game Preferred mode Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system Remove %1$s from library + Unsupported + Standard + Performance + Battery Value: %s by default Default value: %s\nLong tap to set Default value is set - Overlay menu opacity level - Disable USB debugging + Battery: %1$d%% Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 4001e8ce..2240c5f7 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -18,45 +18,60 @@ Oyun Alanı Oyun kurulumunuzu yönetin - Oyununu seç - Otomatik parlaklığı devre dışı bırak - Uyarı bildirimlerini devre dışı bırak + Oyun içi seçenekleri - Arşiv - %1$s arşivden kaldırmak istediğinizden emin misiniz? - Ara - Üç parmak hareketini devre dışı bırak - etkin - devre dışı - - Mod - Desteklenmiyor - Standart - Performans - Pil - Bildirim pencereleri - FPS bilgisi + Tam ekran etkinliğini engelle + Oyun içindeyken gelen aramalar gibi tam ekran etkinliklerinin görünmesini engelleyin Uyanık kal Hareketi kilitle + Otomatik parlaklığı devre dışı bırak + Üç parmak hareketini devre dışı bırak + USB hata ayıklamasını devre dışı bırak + Arayüz menüsü şeffaflığı + + Bildirim modu + Gösterme + Bildirim penceresi olarak göster + ReTicker olarak göster + Danmaku olarak göster + Zil sesi modu Sessiz Titreşim Normal - Tam ekran etkinliğini engelle - Oyun içindeyken gelen aramalar gibi tam ekran etkinliklerinin görünmesini engelleyin + Değiştirme + + Arşiv + Ekle + Oyununu seç + Ara + %1$s oyun listenizden kaldırmak istediğinizden emin misiniz? + Oyunu yapılandır Tercih edilen mod ANGLE kullan (deneysel) Yerel GLES sürücüleri yerine ANGLE oluşturucu kullan.\nUYARI!! Oyun grafiklerini bozabilir, dikkatli kullanın! ANGLE sisteminizde mevcut değil %1$s arşivden kaldır + Desteklenmiyor + Standart + Performans + Pil Değer: %s varsayılan Varsayılan değer: %s\nAyarlamak için uzun basın Varsayılan değer ayarlandı - Arayüz menüsü şeffaflığı - USB hata ayıklamasını devre dışı bırak + Pil: %1$d%% Kullanılabilir bellek: %1$d\/%2$d MB + + Mod + FPS bilgisi + Gizle + Bildirim pencereleri + reTicker + Danmaku + Etkin + Devre dışı diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index f055f19f..db4d4354 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -18,45 +18,60 @@ Ігровий Простір Керування налаштуваннями гри - Виберіть свою гру - Вимкнути автояскравість - Вимкнути спливаючі сповіщення + Налаштування гри - Бібліотека - Ви впевнені, що хочете видалити %1$s зі своєї бібліотеки? - Пошук - Вимкнути свайп для знімка екрану - увімкнено - вимкнуто - - Режим - Не підтримується - Стандартний - Продуктивний - Батарея - Спливаючі сповіщення - Інформація про FPS + Блокувати повноекранні сповіщення + Запобігти появі повноекранних сповіщень, таких як вхідні дзвінки під час гри Залишати активним Жест блокування + Вимкнути автояскравість + Вимкнути свайп для знімка екрану + Вимкнути налагодження USB + Рівень непрозорості меню ігрового режиму + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Режим дзвінка Беззвучний Вібрація Звичайний - Блокувати повноекранні сповіщення - Запобігти появі повноекранних сповіщень, таких як вхідні дзвінки під час гри + Do not change + + Бібліотека + Add + Виберіть свою гру + Пошук + Are you sure you want to remove %1$s from your game list? + Налаштувати гру Переважний режим Використовувати ANGLE (експериментально) Використовуючи візуалізатор ANGLE замість нативних драйверів GLES.\nУВАГА!! Може порушувати графіку гри, використовуйте з обережністю! ANGLE недоступний у вашій системі Видалити %1$s з бібліотеки + Не підтримується + Стандартний + Продуктивний + Батарея Значення: %s за замовчуванням Значення за замовчуванням: %s\nДовге натискання для встановлення Значення за замовчуванням встановлено - Рівень непрозорості меню ігрового режиму - Вимкнути налагодження USB + Акумулятор: %1$d%% Доступно пам\'яті: %1$d\/%2$d MB + + Режим + Інформація про FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index fa5c2265..0797a707 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -18,45 +18,60 @@ Không gian game Quản lý thiết lập trò chơi của bạn - Chọn trò chơi của bạn - Vô hiệu hóa độ sáng tự động - Tắt thông báo nổi + Tùy chọn trong trò chơi - Thư viện - Yes? - Tìm kiếm - Tắt tính năng vuốt đến ảnh chụp màn hình - đã bật - đã tắt - - Chế độ - Không hỗ trợ - Tiêu chuẩn - Hiệu suất cao - Tiết kiệm pin - Thông báo nổi - Thông tin FPS + Chặn sự kiện toàn màn hình + Ngăn các sự kiện toàn màn hình như cuộc gọi đến xuất hiện khi ở trong trò chơi Không khóa màn hình Khóa cử chỉ + Vô hiệu hóa độ sáng tự động + Tắt tính năng vuốt đến ảnh chụp màn hình + Vô hiệu hóa gỡ lỗi USB + Mức độ mờ của menu + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + Chế độ chuông Im lặng Rung Bình thường - Chặn sự kiện toàn màn hình - Ngăn các sự kiện toàn màn hình như cuộc gọi đến xuất hiện khi ở trong trò chơi + Do not change + + Thư viện + Add + Chọn trò chơi của bạn + Tìm kiếm + Are you sure you want to remove %1$s from your game list? + Định cấu hình trò chơi Chế độ ưu tiên Sử dụng ANGLE (thử nghiệm) Sử dụng trình kết xuất ANGLE thay vì trình điều khiển GLES gốc.\nCẢNH BÁO!! Có thể phá vỡ đồ họa trò chơi, hãy sử dụng một cách thận trọng! ANGLE không có sẵn trên hệ thống của bạn Xóa %1$s khỏi thư viện + Không hỗ trợ + Tiêu chuẩn + Hiệu suất cao + Tiết kiệm pin Giá trị: %s mặc định Giá trị mặc định: %s\nNhấn giữ lâu để thiết lập Đã đặt giá trị mặc định - Mức độ mờ của menu - Vô hiệu hóa gỡ lỗi USB + Pin: %1$d%% Bộ nhớ khả dụng: %1$d\/%2$d MB + + Chế độ + Thông tin FPS + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5137ddf2..5f8ebfe1 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -18,45 +18,60 @@ 游戏空间 管理您的游戏设置 - 选择您的游戏 - 禁用自动调节亮度 - 禁用浮动通知 + 游戏中选项 - 游戏列表 - 您确定要将 %1$s 从您的游戏列表中移除吗? - 搜索 - 禁用滑动截屏 - 已启用 - 已禁用 - - 游戏模式 - 不支持 - 标准 - 性能 - 省电 - 浮动通知 - FPS 信息 + 屏蔽全屏事件 + 防止在游戏中出现来电等全屏事件 保持唤醒 锁定手势 + 禁用自动调节亮度 + 禁用滑动截屏 + 禁用 USB 调试 + 覆盖菜单不透明度级别 + + 通知模式 + 不显示 + 显示为浮动通知 + Show as reTicker + 显示为弹幕通知 + 响铃模式 静音 振动 正常 - 屏蔽全屏事件 - 防止在游戏中出现来电等全屏事件 + 不更改 + + 游戏列表 + 添加 + 选择您的游戏 + 搜索 + 您确定要将 %1$s 从您的游戏列表中移除吗? + 配置游戏 首选模式 使用 ANGLE 渲染器 (实验性) 使用 ANGLE 渲染器而不是本机的 GLES 驱动器。\n警告!! 可能会破坏游戏图形, 请谨慎使用! ANGLE 渲染器在当前系统中不可用 从游戏列表中移除 %1$s + 不支持 + 标准 + 性能 + 省电 值: %s 默认 默认值: %s\n长按设置 恢复默认值 - 覆盖菜单不透明度级别 - 禁用 USB 调试 + 电量: %1$d%% 内存空闲: %1$d\/%2$d MB + + 游戏模式 + FPS 信息 + 隐藏 + 浮动通知 + reTicker + 弹幕 + 已启用 + 已禁用 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8cd62962..9ecce856 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -18,45 +18,60 @@ 遊戲空間 管理您的遊戲設定 - 選擇遊戲 - 停用自動亮度 - 停用浮動通知 + 遊戲中選項 - 遊戲庫 - 您確定要將 %1$s 從遊戲庫移除嗎? - 搜尋 - 停用滑動截圖手勢 - 已啟用 - 已停用 - - 模式 - 不支援 - 一般 - 高效能 - 省電 - 浮動通知 - 幀數 + 封鎖全螢幕活動 + 防止如電話等的應用程式彈出全螢幕畫面 螢幕保持開啟 鎖定手勢 + 停用自動亮度 + 停用滑動截圖手勢 + 停用 USB 偵錯 + 不透明度 + + 通知模式 + 不顯示 + 彈出式通知 + reTicker + 彈幕式通知 + 鈴聲模式 靜音 震動 正常 - 封鎖全螢幕活動 - 防止如電話等的應用程式彈出全螢幕畫面 + 不變更 + + 遊戲庫 + 新增 + 選擇遊戲 + 搜尋 + 您確定要將 %1$s 從遊戲庫移除嗎? + 遊戲選項 偏好模式 使用 ANGLE (實驗性功能) 使用 ANGLE 渲染畫面而非原生的 GLES 驅動。\n警告!遊戲畫面可能出現破圖等現象,請謹慎使用。 您的系統不支援 ANGLE 從遊戲庫中移除 %1$s + 不支援 + 一般 + 高效能 + 省電 數值: %s 預設 預設值:%s\n長按以設定 已設定為預設值 - 不透明度 - 停用 USB 偵錯 + 電量: %1$d%% 可用記憶體:<xliff:g id="availmemory" example="1000">\/<xliff:g id="totalmemory" example="5000"> MB + + 模式 + 幀數 + 隱藏 + 彈出通知 + reTicker + 彈幕式通知 + 已啟用 + 已停用 From 94ef7479223cbb537b0ff204d1840e170fedd452 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 23 Jul 2022 17:51:58 +0300 Subject: [PATCH 050/214] New Crowdin updates (#16) * New translations strings.xml (Arabic) * New translations strings.xml (Polish) * New translations strings.xml (Italian) * New translations strings.xml (Greek) * New translations strings.xml (Korean) * New translations strings.xml (German) --- app/src/main/res/values-ar-rSA/strings.xml | 2 +- app/src/main/res/values-de-rDE/strings.xml | 24 +++++++++++----------- app/src/main/res/values-el-rGR/strings.xml | 24 +++++++++++----------- app/src/main/res/values-it-rIT/strings.xml | 8 ++++---- app/src/main/res/values-ko-rKR/strings.xml | 24 +++++++++++----------- app/src/main/res/values-pl-rPL/strings.xml | 24 +++++++++++----------- 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index fae2e697..5cffe9f8 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Game Space + وضع الألعاب إدارة إعدادات ألعابك خيارات داخل اللعبة diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index f53a066f..c81e34b9 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -29,23 +29,23 @@ USB-Debugging deaktivieren Transparenz des Overlay-Menüs - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Benachrichtigungsmodus + Nicht anzeigen + Als Pop-up anzeigen + Als reTicker anzeigen + Als Danmaku anzeigen Klingelmodus Stumm Vibration Normal - Do not change + Nicht ändern Bibliothek - Add + Hinzufügen Wähle dein Spiel Suchen - Are you sure you want to remove %1$s from your game list? + Soll %1$s wirklich aus der Spielebibliothek entfernt werden? Spiel konfigurieren Bevorzugter Modus @@ -68,10 +68,10 @@ Modus FPS-Info - Hide - Heads Up + Ausblenden + Pop-up reTicker Danmaku - Enabled - Disabled + Aktiviert + Deaktiviert diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index ae896b48..48b9bc39 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -29,23 +29,23 @@ Απενεργοποίηση εντοπισμού σφαλμάτων USB Επίπεδο αδιαφάνειας μενού επικάλυψης - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Λειτουργία ειδοποιήσεων + Να μην εμφανίζεται + Εμφάνιση ως Αναδυόμενες ειδοποιήσεις + Εμφάνιση ως reTicker + Εμφάνιση ως Danmaku Λειτουργία κουδουνίσματος Αθόρυβο Δόνηση Κανονικό - Do not change + Χωρίς αλλαγή Βιβλιοθήκη - Add + Προσθήκη Διάλεξε το παιχνίδι σου Αναζήτηση - Are you sure you want to remove %1$s from your game list? + Είστε βέβαιοι ότι θέλετε να αφαιρέσετε το %1$s από τη λίστα των παιχνιδιών σας; Διαμόρφωση παιχνιδιού Προτιμώμενη λειτουργία @@ -68,10 +68,10 @@ Λειτουργία Πληροφορίες FPS - Hide - Heads Up + Απόκρυψη + Αναδυόμενες ειδοποιήσεις reTicker Danmaku - Enabled - Disabled + Ενεργοποιημένο + Απενεργοποιημένο diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 59cfb776..d3f95f9a 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -31,7 +31,7 @@ Notification mode Do not show - Show as Heads Up + Mostra come notifiche a comparsa Show as reTicker Show as Danmaku @@ -42,7 +42,7 @@ Do not change Libreria - Add + Aggiungi Scegli il tuo gioco Cerca Are you sure you want to remove %1$s from your game list? @@ -68,8 +68,8 @@ Modalità Info FPS - Hide - Heads Up + Nascondi + Notifiche a comparsa reTicker Danmaku Enabled diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index e9de2842..6d1708b1 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -29,23 +29,23 @@ USB 디버깅 비활성화 오버레이 메뉴 투명도 레벨 - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + 알림 모드 + 표시 안 함 + 헤드업으로 보기 + reTicker로 보기 + Danmaku로 보기 벨소리 모드 무음 진동 기본 - Do not change + 변경 안함 라이브러리 - Add + 추가 게임을 선택하기 검색 - Are you sure you want to remove %1$s from your game list? + 정말 게임리스트에서 %1$s을(를) 삭제하겠습니까? 게임 설정 선호 모드 @@ -68,10 +68,10 @@ 모드 FPS 정보 - Hide - Heads Up + 숨기기 + 헤드업 reTicker Danmaku - Enabled - Disabled + 활성화됨 + 사용 안 함 diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index f5f84d6c..a88db211 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -29,23 +29,23 @@ Wyłącz debugowanie USB Poziom przezroczystości nakładki menu - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Opcje powiadomień + Nie pokazuj + Wyświetl jako Heads-up + Pokaż jako reTicker + Pokaż pasek danmaku Tryb dzwonka Tryb cichy Wibracje Normalny - Do not change + Nie zmieniaj Biblioteka - Add + Dodaj Wybierz swoją grę Szukaj - Are you sure you want to remove %1$s from your game list? + Czy na pewno chcesz usunąć %1$s z listy gry? Skonfiguruj grę Preferowany tryb @@ -68,10 +68,10 @@ Tryb Wskaźnik FPS - Hide - Heads Up + Ukryj + Powiadomienia \"Heads up\" reTicker Danmaku - Enabled - Disabled + Włączono + Wyłączono From 9c144f61a262c06f23ca09e246ff4a95f40eb3fc Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 24 Jul 2022 22:22:16 +0530 Subject: [PATCH 051/214] GameSpace: Fix inconsistencies for multi-user usage Signed-off-by: Pranav Vashi --- .../chaldeaprjkt/gamespace/data/SystemSettings.kt | 9 ++++++--- .../gamespace/gamebar/GameBarService.kt | 13 ++++++++----- .../gamespace/gamebar/GameBroadcastReceiver.kt | 3 ++- .../gamespace/gamebar/SessionService.kt | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index fa993191..9a86b9cc 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -42,12 +42,15 @@ class SystemSettings @Inject constructor( var reTicker get() = - Settings.System.getInt(resolver, Settings.System.RETICKER_STATUS, 0) == 1 + Settings.System.getIntForUser( + resolver, Settings.System.RETICKER_STATUS, 0, + UserHandle.USER_CURRENT) == 1 set(it) { - Settings.System.putInt( + Settings.System.putIntForUser( resolver, Settings.System.RETICKER_STATUS, - it.toInt() + it.toInt(), + UserHandle.USER_CURRENT ) } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 8f62db33..d9d7facf 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -126,11 +126,14 @@ class GameBarService : Hilt_GameBarService() { private var showPanel: Boolean = false set(value) { field = value - if (value && !::rootPanelView.isInitialized || !rootPanelView.isAttachedToWindow) { - setupPanelView() - wm.addView(rootPanelView, panelLayoutParam) - } else if (!value && ::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { - wm.removeView(rootPanelView) + if (value) { + if (!::rootPanelView.isInitialized) + setupPanelView() + if (!rootPanelView.isAttachedToWindow) + wm.addView(rootPanelView, panelLayoutParam) + } else if (!value) { + if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) + wm.removeView(rootPanelView) } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt index 52143264..626d84bd 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,7 +55,7 @@ class GameBroadcastReceiver : BroadcastReceiver() { ?.forEach { (intent.clone() as Intent).apply { setPackage(it) - sendBroadcastAsUser(this, UserHandle.ALL) + sendBroadcastAsUser(this, UserHandle.CURRENT) } } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index 02e51fc6..fad1e68e 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -192,6 +192,6 @@ class SessionService : Hilt_SessionService() { fun stop(context: Context) = Intent(context, SessionService::class.java) .apply { action = STOP } .takeIf { isRunning } - ?.run { context.startServiceAsUser(this, UserHandle.CURRENT) } + ?.run { context.stopServiceAsUser(this, UserHandle.CURRENT) } } } From 05387a278484a12eed20d8a730e8dfa0b45353e4 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 4 Aug 2022 14:17:53 +0300 Subject: [PATCH 052/214] New Crowdin updates (#17) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Romanian) * New translations strings.xml (Indonesian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Ukrainian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Ukrainian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Polish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (French) * New translations strings.xml (French) --- app/src/main/res/values-fr-rFR/strings.xml | 24 +++++++++---------- app/src/main/res/values-in-rID/strings.xml | 20 ++++++++-------- app/src/main/res/values-pl-rPL/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 24 +++++++++---------- app/src/main/res/values-ro-rRO/strings.xml | 24 +++++++++---------- app/src/main/res/values-uk-rUA/strings.xml | 28 +++++++++++----------- app/src/main/res/values-vi-rVN/strings.xml | 28 +++++++++++----------- app/src/main/res/values-zh-rCN/strings.xml | 2 +- 8 files changed, 76 insertions(+), 76 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index a711b19b..f6657126 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Espace de jeu + Espace jeu Gérez votre configuration de jeu Options en jeu @@ -29,23 +29,23 @@ Désactiver le débogage USB Niveau d\'opacité du menu de superposition - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Mode notification + Ne pas afficher + Afficher en :notification flottante + Afficher en :reTicker + Afficher en Danmaku Mode sonnerie Silencieux - Vibrer + Vibreur Normal - Do not change + Ne pas changer Bibliothèque - Add + Ajouter Choisissez votre jeu Rechercher - Are you sure you want to remove %1$s from your game list? + Êtes-vous sûr de vouloir retirer %1$s de votre bibliothèque ? Configurer le jeu Mode préféré @@ -60,7 +60,7 @@ Valeur : %s par défaut - Valeur par défaut : %s\nRester appuyer pour définir + Valeur par défaut : %s\nRester appuyé pour définir Valeur par défaut définie Batterie : %1$d%% @@ -68,7 +68,7 @@ Mode Infos FPS - Hide + Masquer Heads Up reTicker Danmaku diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index c141727f..3f72b202 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Ruang Permainan - Kelola pengaturan game + Ruang Game + Kelola pengaturan game Anda Opsi dalam game Blokir acara layar penuh @@ -31,9 +31,9 @@ Mode pemberitahuan Jangan tampilkan - Muncul sebagai Heads Up + Muncul sebagai Notifikasi Mengambang Muncul sebagai reTicker - Tampilkan danmaku + Muncul sebagai Danmaku Mode dering Senyap @@ -41,11 +41,11 @@ Normal Jangan diubah - Perpustakaan - Tambahkan + Pustaka + Tambah Pilih game Anda Telusuri - Anda yakin ingin menghapus %1$s dari daftar permainan Anda? + Anda yakin ingin menghapus %1$s dari daftar game Anda? Konfigurasi game Mode pilihan @@ -55,7 +55,7 @@ Hapus %1$s dari pustaka Tidak didukung Standar - Peforma + Kinerja Baterai Nilai: %s @@ -72,6 +72,6 @@ Notifikasi mengambang reTicker Danmaku - Aktif - Nonaktif + Diaktifkan + Dinonaktifkan diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index a88db211..3d3f71c5 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -45,7 +45,7 @@ Dodaj Wybierz swoją grę Szukaj - Czy na pewno chcesz usunąć %1$s z listy gry? + Czy na pewno chcesz usunąć %1$s z listy gier? Skonfiguruj grę Preferowany tryb diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3e17914a..eda33b81 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -29,23 +29,23 @@ Desativar depuração USB Nível de opacidade do menu de opções - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Estilo das notificações + Não mostrar + Mostrar como notificação flutuante + Mostrar como reTicker + Mostrar como Danmaku Modo de toque Silencioso Vibrar Normal - Do not change + Não mudar Biblioteca - Add + Adicionar Escolha seu jogo Pesquisa - Are you sure you want to remove %1$s from your game list? + Tem certeza de que deseja remover %1$s da sua lista de jogos? Configurar jogo Modo preferencial @@ -68,10 +68,10 @@ Modo Informações de FPS - Hide - Heads Up + Ocultar + Notificações flutuantes reTicker Danmaku - Enabled - Disabled + Ativado + Desativado diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index e86d78ed..58f07cb0 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -29,23 +29,23 @@ Dezactivează depanarea USB Opacitate pentru meniul suprapus - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Modul notificare + Nu se afișează + Arată ca HeadsUp + Arată ca reTicker + Arată ca Danmaku Mod sonerie Silențios Vibrații Normal - Do not change + Nu schimba Bibliotecă - Add + Adaugă Alege-ți numele Căutare - Are you sure you want to remove %1$s from your game list? + Ești sigur că vrei să ștergi %1$s din lista ta de jocuri? Configurare joc Mod preferat @@ -68,10 +68,10 @@ Mod Informații FPS - Hide - Heads Up + Ascunde + Atenționări reTicker Danmaku - Enabled - Disabled + Activat + Dezactivat diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index db4d4354..824ab505 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -29,23 +29,23 @@ Вимкнути налагодження USB Рівень непрозорості меню ігрового режиму - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Режим сповіщень + Не показувати + Відображаюти як спливаючі сповіщення + Показати як в новому стилі спливаючих сповіщень + Показати як Данмаку Режим дзвінка Беззвучний Вібрація Звичайний - Do not change + Не змінювати Бібліотека - Add + Додати Виберіть свою гру Пошук - Are you sure you want to remove %1$s from your game list? + Ви впевнені, що хочете видалити %1$s зі свого списку ігор? Налаштувати гру Переважний режим @@ -68,10 +68,10 @@ Режим Інформація про FPS - Hide - Heads Up - reTicker - Danmaku - Enabled - Disabled + Приховати + Спливаючі сповіщення + Новий стиль спливаючих сповіщень + Данмаку + Увімкнено + Вимкнено diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 0797a707..04e89250 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Không gian game + Không gian trò chơi Quản lý thiết lập trò chơi của bạn Tùy chọn trong trò chơi @@ -29,23 +29,23 @@ Vô hiệu hóa gỡ lỗi USB Mức độ mờ của menu - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Kiểu thông báo + Không hiển thị + Hiện kiểu thông báo nổi + Hiện kiểu reTicker + Hiện kiểu Danmaku Chế độ chuông Im lặng Rung Bình thường - Do not change + Không thay đổi Thư viện - Add + Thêm Chọn trò chơi của bạn Tìm kiếm - Are you sure you want to remove %1$s from your game list? + Bạn có chắc chắn muốn xóa %1$s khỏi danh sách trò chơi chứ? Định cấu hình trò chơi Chế độ ưu tiên @@ -64,14 +64,14 @@ Đã đặt giá trị mặc định Pin: %1$d%% - Bộ nhớ khả dụng: %1$d\/%2$d MB + Bộ nhớ có sẵn: %1$d\/%2$d MB Chế độ Thông tin FPS - Hide - Heads Up + Ẩn + Thông báo nổi reTicker Danmaku - Enabled - Disabled + Bật + Tắt diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5f8ebfe1..dbf583cf 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -32,7 +32,7 @@ 通知模式 不显示 显示为浮动通知 - Show as reTicker + 以 reTicker 形式显示 显示为弹幕通知 响铃模式 From 41467653194b2365f858e68f2dbceea218e94964 Mon Sep 17 00:00:00 2001 From: timjosten Date: Tue, 2 Aug 2022 13:29:44 +0000 Subject: [PATCH 053/214] GameSpace: Fix crash when "Device & app notifications" access is allowed Crash log: https://paste.evolution-x.org/V0DLud Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9b5e4932..d4311160 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -65,15 +65,6 @@ android:name=".gamebar.GameBarService" android:exported="false" /> - - - - - - Date: Tue, 9 Aug 2022 19:17:08 +0300 Subject: [PATCH 054/214] New Crowdin updates (#18) * New translations strings.xml (Indonesian) * New translations strings.xml (Vietnamese) * New translations strings.xml (Italian) * New translations strings.xml (Ukrainian) * New translations strings.xml (Arabic) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Spanish) * New translations strings.xml (Japanese) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) --- app/src/main/res/values-ar-rSA/strings.xml | 30 +++++++++++----------- app/src/main/res/values-cs-rCZ/strings.xml | 24 ++++++++--------- app/src/main/res/values-es-rES/strings.xml | 24 ++++++++--------- app/src/main/res/values-in-rID/strings.xml | 2 +- app/src/main/res/values-it-rIT/strings.xml | 16 ++++++------ app/src/main/res/values-ja-rJP/strings.xml | 4 +-- app/src/main/res/values-pt-rBR/strings.xml | 4 +-- app/src/main/res/values-uk-rUA/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 4 +-- 9 files changed, 55 insertions(+), 55 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 5cffe9f8..da5d56b1 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -21,31 +21,31 @@ خيارات داخل اللعبة منع أحداث الشاشة الكاملة - Prevent fullscreen events like incoming calls from appearing + منع أحداث ملء الشاشة مثل المكالمات الواردة من الظهور أثناء اللعب البقاء في الوضع النشط - Lock gesture + قفل الايماءات تعطيل السطوع التلقائي تعطيل السحب لأخذ لقطة الشاشة تعطيل تصحيح أخطاء USB مستوى شفافية القائمة العائمة - Notification mode - Do not show - Show as Heads Up - Show as reTicker + وضع الإشعارات + اخفاء + إظهار كتنبيهات + إظهار كمؤشر Show as Danmaku وضع الرنين صامت إهتزاز عادي - Do not change + لا تقم بالتغيير المكتبة - Add + إضافة إختر لعبتك بحث - Are you sure you want to remove %1$s from your game list? + هل أنت متحقِّق من أنك تريد إزالة %1$s من قائمة ألعابك؟ ضبط اللعبة الوضع المفضل @@ -63,15 +63,15 @@ القيمة الافتراضية: %s\n أنقر مطولاً للتعيين تم تعيين القيمة الافتراضية - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + البطارية: %1$d%% + الذاكرة المتاحة: %1$d\/%2$d ميغابايت الوضع عداد معدل الإطارات - Hide - Heads Up + إخفاء + التنبيهات العلوية reTicker Danmaku - Enabled - Disabled + مفعّل + معطل diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 92506514..131107ee 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -29,23 +29,23 @@ Zakázat ladění USB Úroveň průhlednosti překrytí menu - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Režim upozornění + Nezobrazovat + Zobrazit jako plovoucí oznámení + Zobrazit jako reTicker + Zobrazit jako Danmaku Režim vyzvánění Tichý Vibrace Normální - Do not change + Neměnit Knihovna - Add + Přidat Výběr hry Hledat - Are you sure you want to remove %1$s from your game list? + Opravdu chcete odstranit %1$s z vaší herní knihovny? Konfigurace hry Preferovaný režim @@ -68,10 +68,10 @@ Režim Informace o FPS - Hide - Heads Up + Skrýt + Plovoucí oznámení reTicker Danmaku - Enabled - Disabled + Povoleno + Zakázáno diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 25673de7..c178962b 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -29,23 +29,23 @@ Desactivar depuración USB Nivel de opacidad del menú de superposición - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Modo de notificación + No mostrar + Mostrar como notificaciones emergentes + Mostrar como reTicker + Mostrar como Danmaku Modo de timbre Silencio Vibrar Normal - Do not change + No cambiar Biblioteca - Add + Añadir Elige tu juego Buscar - Are you sure you want to remove %1$s from your game list? + ¿Estás seguro de que quieres eliminar %1$s de tu biblioteca? Configurar juego Modo preferido @@ -69,10 +69,10 @@ Mantén presionado para establecer Modo Información de FPS - Hide - Heads Up + Ocultar + Notificaciones flotantes reTicker Danmaku - Enabled - Disabled + Activado + Desactivado diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 3f72b202..9855da7a 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -29,7 +29,7 @@ Nonaktifkan USB debugging Tingkat opasitas hamparan menu - Mode pemberitahuan + Mode notifikasi Jangan tampilkan Muncul sebagai Notifikasi Mengambang Muncul sebagai reTicker diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index d3f95f9a..80a3ee3b 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -29,23 +29,23 @@ Disabilita debug USB Livello di opacità menù sovrapposizione - Notification mode - Do not show + Modalità notifica + Non visualizzare Mostra come notifiche a comparsa - Show as reTicker - Show as Danmaku + Mostra come reTicker + Mostra come Danmaku Modalità suoneria Silenzioso Vibrazione Normale - Do not change + Non modificare Libreria Aggiungi Scegli il tuo gioco Cerca - Are you sure you want to remove %1$s from your game list? + Sei sicuro di voler rimuovere %1$s dalla tua lista dei giochi? Configura gioco Modalità preferita @@ -72,6 +72,6 @@ Notifiche a comparsa reTicker Danmaku - Enabled - Disabled + Abilitato + Disabilitato diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 0dcd5059..2d72ad73 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -32,8 +32,8 @@ 通知モード 表示しない ポップアップ表示する - Show as reTicker - Show as Danmaku + reTicker として表示 + Danmaku として表示 着信音モード サイレント diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index eda33b81..1b4cc6e3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Espaço de Jogo + Modo Gamer Gerencie sua configuração de jogos Opções do jogo @@ -29,7 +29,7 @@ Desativar depuração USB Nível de opacidade do menu de opções - Estilo das notificações + Modo das notificações Não mostrar Mostrar como notificação flutuante Mostrar como reTicker diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 824ab505..907fb45c 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -68,7 +68,7 @@ Режим Інформація про FPS - Приховати + Зховати Спливаючі сповіщення Новий стиль спливаючих сповіщень Данмаку diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 04e89250..9401590b 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -26,8 +26,8 @@ Khóa cử chỉ Vô hiệu hóa độ sáng tự động Tắt tính năng vuốt đến ảnh chụp màn hình - Vô hiệu hóa gỡ lỗi USB - Mức độ mờ của menu + Tắt gỡ lỗi USB + Độ mờ của menu Kiểu thông báo Không hiển thị From 3563974f25db70790c98b00cb8444104eb78759c Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 13 Aug 2022 17:05:02 +0300 Subject: [PATCH 055/214] New Crowdin updates (#20) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pl-rPL/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 3d3f71c5..95a1d1fb 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -33,7 +33,7 @@ Nie pokazuj Wyświetl jako Heads-up Pokaż jako reTicker - Pokaż pasek danmaku + Pokaż jako pasek danmaku Tryb dzwonka Tryb cichy diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1b4cc6e3..5f15e798 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Modo Gamer + Espaço de Jogos Gerencie sua configuração de jogos Opções do jogo @@ -29,8 +29,8 @@ Desativar depuração USB Nível de opacidade do menu de opções - Modo das notificações - Não mostrar + Estilo das notificações + Não exibir Mostrar como notificação flutuante Mostrar como reTicker Mostrar como Danmaku From 319b676d46447438420ae432c4b7a5335ea234fb Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 21 Aug 2022 11:34:01 +0300 Subject: [PATCH 056/214] New Crowdin updates (#21) * New translations strings.xml (Arabic) * New translations strings.xml (Greek) --- app/src/main/res/values-ar-rSA/strings.xml | 2 +- app/src/main/res/values-el-rGR/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index da5d56b1..70cac041 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -33,7 +33,7 @@ اخفاء إظهار كتنبيهات إظهار كمؤشر - Show as Danmaku + إظهار ك Danmaku وضع الرنين صامت diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 48b9bc39..bc7de88a 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -29,7 +29,7 @@ Απενεργοποίηση εντοπισμού σφαλμάτων USB Επίπεδο αδιαφάνειας μενού επικάλυψης - Λειτουργία ειδοποιήσεων + Ειδοποιήσεις Να μην εμφανίζεται Εμφάνιση ως Αναδυόμενες ειδοποιήσεις Εμφάνιση ως reTicker From 32f26e90e9682b4db615d244d50abbf1b1eb0c49 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 25 Aug 2022 22:23:31 +0300 Subject: [PATCH 057/214] New Crowdin updates (#22) * New translations strings.xml (Hungarian) * New translations strings.xml (Hungarian) * New translations strings.xml (Hungarian) * New translations strings.xml (Hungarian) --- app/src/main/res/values-hu-rHU/strings.xml | 74 +++++++++++----------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 7ee9c927..9bdc5a7a 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -16,62 +16,62 @@ limitations under the License. --> - Game Space - Manage your gaming setup + Játéktér + Játékbeállítások kezelése Játékon belüli lehetőségek - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture + Teljes képernyős mód blokkolása + Teljes képernyős események, mint például a bejövő hívás megjelenítésének megakadályozása + Ne zárja le a képernyőt + Gesztusok gátlása Az automatikus fényerőszabályzás tiltása - Disable swipe to screenshot - Disable USB debugging - Overlay menu opacity level + Képernyőfotóhoz való húzás letiltása + Az USB-hibakeresés tiltása + Átfedés menü átlátszósági szintje - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Értesítési mód + Ne jelenjen meg + Felugró értesítés + Megjelenítés mint reTicker + Mutasd mint Danmaku - Ringer mode + Csengés mód Néma Rezgő Normál - Do not change + Ne változtassa meg Könyvtár - Add + Hozzáad Válaszd ki a játékod Keresés - Are you sure you want to remove %1$s from your game list? + Biztos vagy benne, hogy el akarod távolítani a(z) %1$s-t a játéklistádról? - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system + Játék konfigurálása + Preferált mód + ANGLE használata (kísérleti) + ANGLE renderelő használata a natív GLES illesztőprogramok helyett.\nFIGYELEM!!! Elronthatja a játék grafikáját, óvatosan használd! + ANGLE nem elérhető ezen a rendszeren Eltávólítás a könyvtárból - Unsupported - Standard - Performance - Battery + Nem támogatott + Általános + Teljesítmény + Akkumulátor - Value: %s + Érték: %s alapértelmezés szerint - Default value: %s\nLong tap to set + Alapértelmezett érték: %s\nHosszú koppintás a beállításhoz Az alapértelmezett érték beállítva - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Akkumulátor: %1$d%% + Elérhető memória: %1$d\/%2$d MB - Mode - FPS info - Hide - Heads Up + Mód + FPS-adatok + Elrejt + Lebegő értesítés reTicker Danmaku - Enabled - Disabled + Engedélyezve + Letiltva From 7bfc5744e3bcdee019920edc90ac4227c9a9c5e1 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 31 Aug 2022 15:39:55 +0300 Subject: [PATCH 058/214] New Crowdin updates (#23) * New translations strings.xml (Vietnamese) * New translations strings.xml (Russian) * New translations strings.xml (French) * New translations strings.xml (Hungarian) --- app/src/main/res/values-fr-rFR/strings.xml | 4 ++-- app/src/main/res/values-hu-rHU/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index f6657126..cfd1d498 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -72,6 +72,6 @@ Heads Up reTicker Danmaku - Enabled - Disabled + Activé + Désactivé diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 9bdc5a7a..2fd1a9d9 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -52,7 +52,7 @@ ANGLE használata (kísérleti) ANGLE renderelő használata a natív GLES illesztőprogramok helyett.\nFIGYELEM!!! Elronthatja a játék grafikáját, óvatosan használd! ANGLE nem elérhető ezen a rendszeren - Eltávólítás a könyvtárból + %1$s eltávolítása a könyvtáradból Nem támogatott Általános Teljesítmény diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index a7ac2a0d..9c8907e9 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -31,7 +31,7 @@ Режим уведомлений Не показывать - Всплывающие уведомления + Показывать в виде всплывающих уведомлений Новый стиль уведомлений Прозрачные без фона @@ -45,7 +45,7 @@ Добавить Выберите свою игру Поиск - Вы действительно хотите удалить %s из своего списка игр? + Вы действительно хотите удалить %1$s из своего списка игр? Настроить игру Предпочтительный режим diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 9401590b..95835a13 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -31,7 +31,7 @@ Kiểu thông báo Không hiển thị - Hiện kiểu thông báo nổi + Hiện thông báo nổi Hiện kiểu reTicker Hiện kiểu Danmaku From 66a964614c9d5c137464ce98ee364e5c57f4372c Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 10 Sep 2022 18:30:02 +0300 Subject: [PATCH 059/214] New translations (#24) --- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 95835a13..7a7a4f63 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -25,7 +25,7 @@ Không khóa màn hình Khóa cử chỉ Vô hiệu hóa độ sáng tự động - Tắt tính năng vuốt đến ảnh chụp màn hình + Tắt tính năng vuốt 3 ngón để chụp ảnh màn hình Tắt gỡ lỗi USB Độ mờ của menu From 88132e00b58d8d496f2dd36fcc1f57f538d3459f Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 15 Sep 2022 18:09:14 +0300 Subject: [PATCH 060/214] New translations (#25) --- app/src/main/res/values-pt-rPT/strings.xml | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index af00d9b2..a72e7f9a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -29,23 +29,23 @@ Desativar depuração USB Transparência do menu de sobreposição - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Modo de notificação + Não mostrar + Mostrar como notificação flutuante + Mostrar como reTicker + Mostrar como Danmaku Modo de toque Silencioso Vibrar Normal - Do not change + Não mudar Biblioteca de jogos - Add + Adicionar Escolha o seu jogo Procurar - Are you sure you want to remove %1$s from your game list? + Tem certeza de que deseja remover %1$s da sua biblioteca? Configurar jogo Modo preferido @@ -68,10 +68,10 @@ Modo Info. de FPS - Hide - Heads Up + Ocultar + Notificações flutuantes reTicker Danmaku - Enabled - Disabled + Ativado + Desativado From 10725bc014269721f10cf1ceab001bf3459e0cf8 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 22 Sep 2022 18:37:19 +0300 Subject: [PATCH 061/214] New Crowdin updates (#26) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index a283a3ad..0fc469bf 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -16,36 +16,36 @@ limitations under the License. --> - Game Space + Game ruimte Beheer uw gaming-instellingen In-game opties Blokkeer volledig scherm event - Prevent fullscreen events like incoming calls from appearing + Voorkom dat volledig scherm events zoals inkomende oproepen worden weergegeven tijdens in-game Blijf aan - Lock gesture + Vergrendel gebaar Automatische helderheid uitschakelen Veeg naar schermafbeelding uitschakelen Usb-foutopsporing uitschakelen Transparantieniveau van overlappingsmenu - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Notificatie modus + Niet tonen + Heads-up tonen + Toon als reTicker + Weergeven als Danmaku Beltoonmodus Stil Vibreren Normaal - Do not change + Niet wijzigen Bibliotheek - Add + Toevoegen Kies je spel Zoeken - Are you sure you want to remove %1$s from your game list? + Weet je zeker dat je %1$s uit je bibliotheek wilt verwijderen? Spel configureren Voorkeursmodus @@ -63,15 +63,15 @@ Standaard waarde: %s\nLang indrukken om in te stellen Standaard waarde is ingesteld - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Batterij: %1$d%% + Geheugen beschikbaar: %1$d\/%2$d MB Modus FPS info - Hide - Heads Up + Verbergen + Pop-up reTicker - Danmaku - Enabled - Disabled + Denemarken + Ingeschakeld + Uitgechakeld From fd2d3456155a32e42e9227bfbfb89bc0713e1c59 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 8 Oct 2022 20:28:22 +0300 Subject: [PATCH 062/214] New translations (#27) --- app/src/main/res/values-fr-rFR/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index cfd1d498..6ef681bb 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -31,8 +31,8 @@ Mode notification Ne pas afficher - Afficher en :notification flottante - Afficher en :reTicker + Afficher en notification flottante + Afficher en reTicker Afficher en Danmaku Mode sonnerie @@ -69,7 +69,7 @@ Mode Infos FPS Masquer - Heads Up + Notification flotante reTicker Danmaku Activé From 8323e759db33713b8fe60b1ab3b17a067e63bd46 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Sun, 28 Aug 2022 10:38:23 +0700 Subject: [PATCH 063/214] GameSpace: migrate to the new and shiny registerTaskFpsCallback() Reference: https://android.googlesource.com/platform/frameworks/base.git/+/399e06d648a15d2e2239cc3e66a270e6212a7b4d Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 1 + .../gamespace/widget/MenuSwitcher.kt | 16 +++++++++++----- ...ivapp_whitelist_io.chaldeaprjkt.gamespace.xml | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d4311160..afd464b2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,6 +29,7 @@ + + From b11b56eafcd951c4b8de781f36f0b05e354b35c5 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Mon, 29 Aug 2022 00:56:14 +0700 Subject: [PATCH 064/214] GameSpace: add proper permission to the receiver Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 2 +- .../chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index afd464b2..d8934b25 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -69,7 +69,7 @@ + android:permission="android.permission.MANAGE_GAME_MODE"> diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt index 626d84bd..18cedb9e 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt @@ -55,7 +55,8 @@ class GameBroadcastReceiver : BroadcastReceiver() { ?.forEach { (intent.clone() as Intent).apply { setPackage(it) - sendBroadcastAsUser(this, UserHandle.CURRENT) + sendBroadcastAsUser(this, UserHandle.CURRENT, + android.Manifest.permission.MANAGE_GAME_MODE) } } } @@ -65,4 +66,3 @@ class GameBroadcastReceiver : BroadcastReceiver() { const val GAME_STOP = "io.chaldeaprjkt.gamespace.action.GAME_STOP" } } - From f1f29d75f7542ece5249e03df14c06aa9fbcaa13 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Mon, 29 Aug 2022 01:18:51 +0700 Subject: [PATCH 065/214] GameSpace: update links to 13/gamespace branches Signed-off-by: Pranav Vashi --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 15f11632..093a4ba5 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ chaldeaprjkt's GameSpace is an alternative to the Google's proprietary implementation of the Game Dashboard with a goals of providing basic user-interface for the [Android Game Mode API](https://developer.android.com/games/gamemode/gamemode-api). Gamespace requires several patches to be applied on the AOSP's SystemUI and Settings : -- [frameworks/base](https://github.com/chaldeaprjkt/chaldea_frameworks_base/commits/12L/gamespace) -- [packages/apps/Settings](https://github.com/chaldeaprjkt/chaldea_packages_apps_Settings/commits/12L/gamespace) +- [frameworks/base](https://github.com/chaldeaprjkt/chaldea_frameworks_base/commits/13/gamespace) +- [packages/apps/Settings](https://github.com/chaldeaprjkt/chaldea_packages_apps_Settings/commits/13/gamespace) ## License From 8e02cce571392a72006b4f94e1c155f08bdb0d62 Mon Sep 17 00:00:00 2001 From: Genkzsz11 Date: Mon, 29 Aug 2022 17:54:29 +0700 Subject: [PATCH 066/214] GameSpace: Whitelist android.permission.MANAGE_GAME_MODE Signed-off-by: Pranav Vashi --- app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml index f9b6030a..716c1e41 100644 --- a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml +++ b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml @@ -18,5 +18,6 @@ + From 3701f961e4a6d043b1216522b4e70a829ea59b50 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 12 Oct 2022 19:14:45 +0530 Subject: [PATCH 067/214] GameSpace: Update for preferences Signed-off-by: Pranav Vashi --- app/src/main/Android.bp | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp index 9d256a08..9505ad43 100644 --- a/app/src/main/Android.bp +++ b/app/src/main/Android.bp @@ -27,6 +27,7 @@ android_app { "gson-prebuilt-jar", "hilt_android", "org.lineageos.platform.internal", + "LineagePreferenceLib", ], kotlincflags: [ "-Xuse-experimental=kotlin.Experimental", From 04d764e8d5a17274b07af4a211c0d53e787d5102 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 30 Oct 2022 19:52:11 +0200 Subject: [PATCH 068/214] New translations (#28) --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9ecce856..dd72107d 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -64,7 +64,7 @@ 已設定為預設值 電量: %1$d%% - 可用記憶體:<xliff:g id="availmemory" example="1000">\/<xliff:g id="totalmemory" example="5000"> MB + 可用記憶體:<xliff:g id=\"availmemory\" example=\"1000\">\/<xliff:g id=\"totalmemory\" example=\"5000\"> MB 模式 幀數 From b442cde677bebfaf0f87fad941834ec3f1d5e2d6 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 12 Dec 2022 02:44:09 +0530 Subject: [PATCH 069/214] GameSpace: Update takeScreenshot API in ScreenUtils Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt index 6f899bfb..53d2b841 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt @@ -99,9 +99,9 @@ class ScreenUtils @Inject constructor(private val context: Context) { fun takeScreenshot(onComplete: ((Uri?) -> Unit)? = null) { val handler = Handler(Looper.getMainLooper()) ScreenshotHelper(context).takeScreenshot( - WindowManager.TAKE_SCREENSHOT_FULLSCREEN, true, true, - WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS, handler - ) { handler.post { onComplete?.invoke(it) } } + WindowManager.TAKE_SCREENSHOT_FULLSCREEN, + WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS, handler, 1000, null + ) } var stayAwake = false From 7aa9333e168e646c8a4b992716cedeabac5e743a Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 17 Dec 2022 18:56:15 +0200 Subject: [PATCH 070/214] New Crowdin updates (#30) * New translations strings.xml (Persian) * New translations strings.xml (Persian) --- app/src/main/res/values-fa-rIR/strings.xml | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 9219799d..317f8eac 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -29,23 +29,23 @@ غیرفعال کردن اشکال زدایی USB سطح شفافیت منوی همپوشانی - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + حالت اعلان‌ها + عدم نمایش + نمایش به صورت اعلان فوری + نمایش به صورت reTicker + نمایش به صورت Danmaku حالت با صدا سکوت لرزش معمولی - Do not change + بدون تغییر مجموعه - Add + افزودن بازی خود را انتخاب کنید جستجو - Are you sure you want to remove %1$s from your game list? + آیا مطمئن هستید می‌خواهید %1$s را از فهرست بازی‌های خود حذف کنید؟ پیکربندی بازی حالت ترجیحی @@ -68,10 +68,10 @@ حالت اطلاعات FPS - Hide - Heads Up + پنهان کردن + اعلان فوری reTicker Danmaku - Enabled - Disabled + فعال شد + غیرفعال شد From 88488917d9022fbb93a94861dbbf48bbcc29d733 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 25 Dec 2022 15:12:47 +0200 Subject: [PATCH 071/214] New translations (#31) --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index dd72107d..fc93f0b5 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -64,7 +64,7 @@ 已設定為預設值 電量: %1$d%% - 可用記憶體:<xliff:g id=\"availmemory\" example=\"1000\">\/<xliff:g id=\"totalmemory\" example=\"5000\"> MB + 可用記憶體:%1$d\/%2$d MB 模式 幀數 From 0b8340e75909fe49202b4e584fa6c957b53b3fd9 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 8 Jan 2023 16:58:44 +0200 Subject: [PATCH 072/214] New translations (#32) --- app/src/main/res/values-in-rID/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 9855da7a..ccb4a2c9 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Ruang Game + Ruang Permainan Kelola pengaturan game Anda Opsi dalam game From 5ae0f12919796b795b45884318efba91be662eeb Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 21 Jan 2023 11:30:38 +0200 Subject: [PATCH 073/214] New Crowdin updates (#33) * New translations strings.xml (Catalan) * New translations strings.xml (Catalan) --- app/src/main/res/values-ca-rES/strings.xml | 90 +++++++++++----------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index eada96df..e4773def 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -16,62 +16,62 @@ limitations under the License. --> - Game Space - Manage your gaming setup + Espai de Jocs + Gestiona la configuració de joc - In-game options - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture - Disable auto-brightness - Disable swipe to screenshot - Disable USB debugging - Overlay menu opacity level + Opcions en el joc + Bloqueja els esdeveniments a pantalla completa + Impedeix els esdeveniments a pantalla completa com trucades entrants + Mantén la pantalla encesa + Gest de bloqueig + Desactiva la brillantor automàtica + Desactiva el lliscament per a fer captures de pantalla + Desactiva la depuració USB + Nivell d\'opacitat del menú flotant - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Mode de notificació + No ho mostris + Mostra com a notificació emergent + Mostra amb el reTicker + Mostra amb el Danmaku - Ringer mode - Silent - Vibrate + Mode amb so + Silenci + Vibració Normal - Do not change + No el canviïs - Library - Add - Pick your game - Search - Are you sure you want to remove %1$s from your game list? + Biblioteca + Afegeix + Trieu el joc + Cerca + Segur que voleu eliminar %1$s de la llista de jocs? - Configure game - Preferred mode - Use ANGLE (experimental) + Configura el joc + Mode preferit + Utilitza l\'ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library - Unsupported - Standard - Performance - Battery + ANGLE no està disponible en el sistema + Elimina %1$s de la biblioteca + No suportat + Estàndard + De rendiment + Bateria - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set + Valor: %s + per defecte + Valor per defecte: %s\nPremeu prolongadament per a establir-lo + El valor per defecte s\'ha establert - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Bateria: %1$d%% + Memòria disponible: %1$d\/%2$d MB Mode - FPS info - Hide - Heads Up + Informació dels FPS + Amaga + Notificacions emergents reTicker Danmaku - Enabled - Disabled + Activat + Desactivat From 33ba47d28c23deb213af2fff0894aca490ddcf97 Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Wed, 23 Nov 2022 14:29:18 +0800 Subject: [PATCH 074/214] GameSpace: Remove dim layer from the panel view * observed from Oplus/Realme game mode panels Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index d9d7facf..0271b427 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -91,10 +91,9 @@ class GameBarService : Hilt_GameBarService() { WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - or WindowManager.LayoutParams.FLAG_DIM_BEHIND, + or WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT ).apply { - dimAmount = 0.7f width = WindowManager.LayoutParams.MATCH_PARENT height = WindowManager.LayoutParams.MATCH_PARENT layoutInDisplayCutoutMode = From c972b966e0f8c91a0e0586b0dcc3f54879856d9d Mon Sep 17 00:00:00 2001 From: Mohammad Hasan Keramat J Date: Mon, 23 Jan 2023 22:02:21 +0000 Subject: [PATCH 075/214] fixup! GameSpace: Update takeScreenshot API in ScreenUtils Change-Id: I799ba0293624cb1415a97fbd15bddaa6045f2fa0 Signed-off-by: Mohammad Hasan Keramat J Signed-off-by: Pranav Vashi --- .../main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt index 53d2b841..0884583c 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt @@ -100,8 +100,8 @@ class ScreenUtils @Inject constructor(private val context: Context) { val handler = Handler(Looper.getMainLooper()) ScreenshotHelper(context).takeScreenshot( WindowManager.TAKE_SCREENSHOT_FULLSCREEN, - WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS, handler, 1000, null - ) + WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS, handler + ) { handler.post { onComplete?.invoke(it) } } } var stayAwake = false From 6f1cc82bdc84badb9ef90eb40725574d4a975fbc Mon Sep 17 00:00:00 2001 From: cjh1249131356 Date: Thu, 2 Jun 2022 22:26:30 +0800 Subject: [PATCH 076/214] GameSpace: Long click Settings icon to open Settings Dashboard Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 0271b427..39dc032e 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -41,6 +41,7 @@ import com.android.systemui.screenrecord.IRecordingCallback import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.AppSettings +import io.chaldeaprjkt.gamespace.settings.SettingsActivity import io.chaldeaprjkt.gamespace.utils.ScreenUtils import io.chaldeaprjkt.gamespace.utils.dp import io.chaldeaprjkt.gamespace.utils.registerDraggableTouchListener @@ -346,6 +347,10 @@ class GameBarService : Hilt_GameBarService() { actionPanel.setOnClickListener { showPanel = !showPanel } + actionPanel.setOnLongClickListener { + startActivity(Intent(this, SettingsActivity::class.java).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) + true + } } private fun screenshotButton() { From 7c10a188e9bfcdf1ebc804d387e755937341e7ab Mon Sep 17 00:00:00 2001 From: cjybyjk Date: Thu, 9 Jun 2022 20:17:40 +0800 Subject: [PATCH 077/214] GameSpace: Port auto answer/reject calls feature * Adapt from https://github.com/Nameless-AOSP/packages_apps_GamingMode. Co-authored-by: jhonboy121 Co-authored-by: cjh1249131356 Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 1 + .../gamespace/data/AppSettings.kt | 5 + .../gamespace/gamebar/CallListener.kt | 149 ++++++++++++++++++ .../gamespace/gamebar/SessionService.kt | 7 + ...pp_whitelist_io.chaldeaprjkt.gamespace.xml | 1 + app/src/main/res/values/arrays.xml | 12 ++ app/src/main/res/values/strings.xml | 5 + app/src/main/res/xml/root_preferences.xml | 8 + 8 files changed, 188 insertions(+) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d8934b25..16736f4d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,6 +30,7 @@ + = + audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS) + return audioDeviceInfoArr.any { + it.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES || + it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || + it.type == AudioDeviceInfo.TYPE_USB_HEADSET + } + } + + private fun checkPermission(): Boolean { + if (ActivityCompat.checkSelfPermission( + context, + Manifest.permission.ANSWER_PHONE_CALLS + ) != PackageManager.PERMISSION_GRANTED + ) { + Log.e(TAG, "App does not have required permission ANSWER_PHONE_CALLS") + return false + } + return true + } + + private inner class Callback : TelephonyCallback(), TelephonyCallback.CallStateListener { + private var previousState = TelephonyManager.CALL_STATE_IDLE + private var previousAudioMode = audioManager.mode + + override fun onCallStateChanged(state: Int) { + if (callsMode == 0) return + when (state) { + TelephonyManager.CALL_STATE_RINGING -> { + if (!checkPermission()) return + @Suppress("DEPRECATION") + if (callsMode == 1) { + telecomManager.acceptRingingCall() + } else { + telecomManager.endCall() + } + } + TelephonyManager.CALL_STATE_OFFHOOK -> { + if (callsMode == 2) return + if (previousState == TelephonyManager.CALL_STATE_RINGING) { + if (isHeadsetPluggedIn()) { + audioManager.isSpeakerphoneOn = false + AudioSystem.setForceUse( + AudioSystem.FOR_COMMUNICATION, + AudioSystem.FORCE_NONE + ) + } else { + audioManager.isSpeakerphoneOn = true + AudioSystem.setForceUse( + AudioSystem.FOR_COMMUNICATION, + AudioSystem.FORCE_SPEAKER + ) + } + audioManager.mode = AudioManager.MODE_IN_COMMUNICATION + } + } + TelephonyManager.CALL_STATE_IDLE -> { + if (callsMode == 2) return + if (previousState == TelephonyManager.CALL_STATE_OFFHOOK) { + audioManager.mode = previousAudioMode + AudioSystem.setForceUse( + AudioSystem.FOR_COMMUNICATION, + AudioSystem.FORCE_NONE + ) + audioManager.isSpeakerphoneOn = false + } + } + } + previousState = state + } + } + + companion object { + private const val TAG = "CallListener" + } +} diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index fad1e68e..d3fb4459 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -57,6 +57,9 @@ class SessionService : Hilt_SessionService() { @Inject lateinit var gameModeUtils: GameModeUtils + @Inject + lateinit var callListener: CallListener + private val scope = CoroutineScope(Job() + Dispatchers.IO) private val gameBarConnection = object : ServiceConnection { @@ -113,6 +116,8 @@ class SessionService : Hilt_SessionService() { override fun onBind(intent: Intent?): IBinder? = null override fun onDestroy() { + callListener.destory() + if (isBarConnected) { gameBar.onGameLeave() unbindService(gameBarConnection) @@ -145,6 +150,8 @@ class SessionService : Hilt_SessionService() { } catch (e: Exception) { Log.d(TAG, e.toString()) } + + callListener.init() } private fun tryStartFromDeath(): Int { diff --git a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml index 716c1e41..3f82d6c6 100644 --- a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml +++ b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml @@ -16,6 +16,7 @@ --> + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index dd6f1dbe..7cb0011d 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -62,4 +62,16 @@ 2 3 + + + @string/in_game_calls_no_action + @string/in_game_calls_auto_answer + @string/in_game_calls_auto_reject + + + + 0 + 1 + 2 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f00c75c7..b6057839 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,4 +83,9 @@ Danmaku Enabled Disabled + + Call mode + No action + Auto answer + Auto reject diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index df6d5d6c..3c06ecc3 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -27,6 +27,14 @@ android:key="in_game_preferences" android:title="@string/in_game_preferences_title"> + + Date: Mon, 20 Jun 2022 23:51:10 +0800 Subject: [PATCH 078/214] GameSpace: Notify in-coming call number when receiving/rejecting call Switch to PhoneStateListener for call state listening - Ya, it's deprecated, but in-coming call number is an important information that can be useful in such case. Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/CallListener.kt | 28 +++++++++---------- app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt index 172291d7..53e5c95a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt @@ -25,24 +25,23 @@ import android.media.AudioDeviceInfo import android.media.AudioManager import android.media.AudioSystem import android.telecom.TelecomManager -import android.telephony.TelephonyCallback +import android.telephony.PhoneStateListener import android.telephony.TelephonyManager import android.util.Log +import android.widget.Toast import androidx.core.app.ActivityCompat import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.scopes.ServiceScoped -import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors - import javax.inject.Inject import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.AppSettings @ServiceScoped +@Suppress("DEPRECATION") class CallListener @Inject constructor( @ApplicationContext private val context: Context, private val appSettings: AppSettings @@ -54,20 +53,16 @@ class CallListener @Inject constructor( private val callsMode = appSettings.callsMode - private val telephonyCallback = Callback() - - private var executor: ExecutorService? = null + private val phoneStateListener = Listener() private var callStatus: Int = TelephonyManager.CALL_STATE_OFFHOOK fun init() { - executor = Executors.newSingleThreadExecutor() - telephonyManager.registerTelephonyCallback(executor!!, telephonyCallback) + telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) } fun destory() { - telephonyManager.unregisterTelephonyCallback(telephonyCallback) - executor?.shutdownNow() + telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) } private fun isHeadsetPluggedIn(): Boolean { @@ -92,20 +87,25 @@ class CallListener @Inject constructor( return true } - private inner class Callback : TelephonyCallback(), TelephonyCallback.CallStateListener { + private inner class Listener : PhoneStateListener() { private var previousState = TelephonyManager.CALL_STATE_IDLE private var previousAudioMode = audioManager.mode - override fun onCallStateChanged(state: Int) { + override fun onCallStateChanged(state: Int, incomingNumber: String) { if (callsMode == 0) return when (state) { TelephonyManager.CALL_STATE_RINGING -> { if (!checkPermission()) return - @Suppress("DEPRECATION") if (callsMode == 1) { telecomManager.acceptRingingCall() + Toast.makeText(context, context.getString( + R.string.in_game_calls_received_number, incomingNumber), + Toast.LENGTH_SHORT).show() } else { telecomManager.endCall() + Toast.makeText(context, context.getString( + R.string.in_game_calls_rejected_number, incomingNumber), + Toast.LENGTH_SHORT).show() } } TelephonyManager.CALL_STATE_OFFHOOK -> { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b6057839..ba78d155 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -88,4 +88,6 @@ No action Auto answer Auto reject + Received call from %1$s + Rejected call from %1$s From 6089481421b3e03cff30fddbaf672451512d9fdf Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 19 Feb 2023 18:52:27 +0200 Subject: [PATCH 079/214] New Crowdin updates (#34) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Polish) * New translations strings.xml (Indonesian) --- app/src/main/res/values-af-rZA/strings.xml | 6 ++++++ app/src/main/res/values-ar-rSA/strings.xml | 6 ++++++ app/src/main/res/values-ca-rES/strings.xml | 6 ++++++ app/src/main/res/values-cs-rCZ/strings.xml | 6 ++++++ app/src/main/res/values-da-rDK/strings.xml | 6 ++++++ app/src/main/res/values-de-rDE/strings.xml | 6 ++++++ app/src/main/res/values-el-rGR/strings.xml | 6 ++++++ app/src/main/res/values-es-rES/strings.xml | 6 ++++++ app/src/main/res/values-fa-rIR/strings.xml | 6 ++++++ app/src/main/res/values-fi-rFI/strings.xml | 6 ++++++ app/src/main/res/values-fr-rFR/strings.xml | 6 ++++++ app/src/main/res/values-hu-rHU/strings.xml | 6 ++++++ app/src/main/res/values-in-rID/strings.xml | 6 ++++++ app/src/main/res/values-it-rIT/strings.xml | 6 ++++++ app/src/main/res/values-iw-rIL/strings.xml | 6 ++++++ app/src/main/res/values-ja-rJP/strings.xml | 6 ++++++ app/src/main/res/values-ko-rKR/strings.xml | 6 ++++++ app/src/main/res/values-nl-rNL/strings.xml | 6 ++++++ app/src/main/res/values-no-rNO/strings.xml | 6 ++++++ app/src/main/res/values-pl-rPL/strings.xml | 6 ++++++ app/src/main/res/values-pt-rBR/strings.xml | 6 ++++++ app/src/main/res/values-pt-rPT/strings.xml | 6 ++++++ app/src/main/res/values-ro-rRO/strings.xml | 6 ++++++ app/src/main/res/values-ru-rRU/strings.xml | 6 ++++++ app/src/main/res/values-sr-rSP/strings.xml | 6 ++++++ app/src/main/res/values-sv-rSE/strings.xml | 6 ++++++ app/src/main/res/values-tr-rTR/strings.xml | 6 ++++++ app/src/main/res/values-uk-rUA/strings.xml | 6 ++++++ app/src/main/res/values-vi-rVN/strings.xml | 6 ++++++ app/src/main/res/values-zh-rCN/strings.xml | 6 ++++++ app/src/main/res/values-zh-rTW/strings.xml | 6 ++++++ 31 files changed, 186 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 70cac041..b45edae5 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -74,4 +74,10 @@ Danmaku مفعّل معطل + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index e4773def..e70cdd3e 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -74,4 +74,10 @@ Danmaku Activat Desactivat + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 131107ee..8f778db1 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -74,4 +74,10 @@ Danmaku Povoleno Zakázáno + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c81e34b9..96932c21 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -74,4 +74,10 @@ Danmaku Aktiviert Deaktiviert + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index bc7de88a..42cd8d9f 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -74,4 +74,10 @@ Danmaku Ενεργοποιημένο Απενεργοποιημένο + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index c178962b..f0dd198d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -75,4 +75,10 @@ Mantén presionado para establecer Danmaku Activado Desactivado + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 317f8eac..b68233ed 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -74,4 +74,10 @@ Danmaku فعال شد غیرفعال شد + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 6ef681bb..c0a210a3 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -74,4 +74,10 @@ Danmaku Activé Désactivé + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 2fd1a9d9..829675ad 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -74,4 +74,10 @@ Danmaku Engedélyezve Letiltva + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index ccb4a2c9..c21d720a 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -74,4 +74,10 @@ Danmaku Diaktifkan Dinonaktifkan + Mode panggilan + Tidak ada tindakan + Jawab otomatis + Tolak otomatis + Menerima panggilan dari %1$s + Menolak panggilan dari %1$s diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 80a3ee3b..4327dcdb 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -74,4 +74,10 @@ Danmaku Abilitato Disabilitato + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 2d72ad73..099e6083 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -74,4 +74,10 @@ Danmaku 有効 無効 + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 6d1708b1..c854b41b 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -74,4 +74,10 @@ Danmaku 활성화됨 사용 안 함 + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 0fc469bf..a9087697 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -74,4 +74,10 @@ Denemarken Ingeschakeld Uitgechakeld + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 95a1d1fb..b3b045a8 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -74,4 +74,10 @@ Danmaku Włączono Wyłączono + Tryb połączeń + Brak akcji + Automatyczne odbieranie + Automatyczne odrzucanie + Odebrano połączenie od %1$s + Odrzucono połączenie od %1$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 5f15e798..07f50bef 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -74,4 +74,10 @@ Danmaku Ativado Desativado + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index a72e7f9a..dd345293 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -74,4 +74,10 @@ Danmaku Ativado Desativado + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 58f07cb0..2c03b5f3 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -74,4 +74,10 @@ Danmaku Activat Dezactivat + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 9c8907e9..871bc808 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -74,4 +74,10 @@ Прозрачные без фона Включено Отключено + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index eada96df..a480d317 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -74,4 +74,10 @@ Danmaku Enabled Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 2240c5f7..c1b9752e 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -74,4 +74,10 @@ Danmaku Etkin Devre dışı + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 907fb45c..2361467e 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -74,4 +74,10 @@ Данмаку Увімкнено Вимкнено + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 7a7a4f63..85a64fe9 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -74,4 +74,10 @@ Danmaku Bật Tắt + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index dbf583cf..a7f56cfa 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -74,4 +74,10 @@ 弹幕 已启用 已禁用 + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fc93f0b5..8564c12e 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -74,4 +74,10 @@ 彈幕式通知 已啟用 已停用 + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s From f191e925c42f2ff95081629cd149f8272a478b73 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 23 Feb 2023 20:51:20 +0200 Subject: [PATCH 080/214] New Crowdin updates (#35) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Russian) * New translations strings.xml (German) * New translations strings.xml (German) * New translations strings.xml (Spanish) * New translations strings.xml (Romanian) --- app/src/main/res/values-de-rDE/strings.xml | 12 ++++++------ app/src/main/res/values-es-rES/strings.xml | 12 ++++++------ app/src/main/res/values-pt-rBR/strings.xml | 12 ++++++------ app/src/main/res/values-ro-rRO/strings.xml | 12 ++++++------ app/src/main/res/values-ru-rRU/strings.xml | 12 ++++++------ app/src/main/res/values-zh-rCN/strings.xml | 12 ++++++------ 6 files changed, 36 insertions(+), 36 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 96932c21..7f0f7c34 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -74,10 +74,10 @@ Danmaku Aktiviert Deaktiviert - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Anruf-Modus + Keine Aktion + Automatische Antwort + Automatisch ablehnen + Empfangener Anruf von %1$s + Abgelehnter Anruf von %1$s diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index f0dd198d..a15b6482 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -75,10 +75,10 @@ Mantén presionado para establecer Danmaku Activado Desactivado - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Modo llamada + Sin acción + Respuesta automática + Rechazo automático + Llamada recibida de %1$s + Llamada rechazada de %1$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 07f50bef..f5e89640 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -74,10 +74,10 @@ Danmaku Ativado Desativado - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Modo de chamada + Nenhuma ação + Atender automaticamente + Recusar automaticamente + Chamada recebida de %1$s + Chamada recusada de %1$s diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 2c03b5f3..b6808b5c 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -74,10 +74,10 @@ Danmaku Activat Dezactivat - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Mod apel + Nicio acțiune + Răspuns automat + Respingere automată + Apel primit de la %1$s + Apel respins de la %1$s diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 871bc808..ed199874 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -74,10 +74,10 @@ Прозрачные без фона Включено Отключено - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Режим звонка + Нет действия + Автоответ + Автосброс + Поступил звонок от %1$s + Отклонён вызов от %1$s diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a7f56cfa..714a2e7e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -74,10 +74,10 @@ 弹幕 已启用 已禁用 - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + 通话模式 + 无操作 + 自动接听 + 自动挂断 + 收到了来自 %1$s 的来电 + 拒绝了来自 %1$s 的来电 From 94207ee2eda642e706065b1cec0e29149b78a219 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 3 Mar 2023 15:09:25 +0200 Subject: [PATCH 081/214] New Crowdin updates (#36) * New translations strings.xml (Spanish) * New translations strings.xml (Greek) * New translations strings.xml (Vietnamese) * New translations strings.xml (Ukrainian) --- app/src/main/res/values-el-rGR/strings.xml | 12 ++++++------ app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-uk-rUA/strings.xml | 12 ++++++------ app/src/main/res/values-vi-rVN/strings.xml | 12 ++++++------ 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 42cd8d9f..f8451baf 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -74,10 +74,10 @@ Danmaku Ενεργοποιημένο Απενεργοποιημένο - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Λειτουργία κλήσης + Καμία ενέργεια + Αυτόματη απάντηση + Αυτόματη απόρριψη + Λήφθηκε κλήση από %1$s + Απορρίφθηκε κλήση από %1$s diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index a15b6482..0b34ce8d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -75,7 +75,7 @@ Mantén presionado para establecer Danmaku Activado Desactivado - Modo llamada + Modo de llamada Sin acción Respuesta automática Rechazo automático diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 2361467e..091de0e7 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -74,10 +74,10 @@ Данмаку Увімкнено Вимкнено - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Режим виклику + Немає дій + Автовідповідач + Відхилити автоматично + Отримано дзвінок від %1$s + Пропущений дзвінок від %1$s diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 85a64fe9..e5a699b5 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -74,10 +74,10 @@ Danmaku Bật Tắt - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Chế độ cuộc gọi + Không có hành động nào + Tự động trả lời + Tự động từ chối + Nhận cuộc gọi từ %1$s + Từ chối cuộc gọi từ %1$s From 9072b035c87d0d35eea94f8d9af5b95824221d2d Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 5 Mar 2023 10:44:11 +0200 Subject: [PATCH 082/214] New Crowdin updates (#37) * New translations strings.xml (Vietnamese) * New translations strings.xml (Slovak) * New translations strings.xml (Indonesian) --- app/src/main/res/values-in-rID/strings.xml | 2 +- app/src/main/res/values-sk-rSK/strings.xml | 83 ++++++++++++++++++++++ app/src/main/res/values-vi-rVN/strings.xml | 2 +- 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/values-sk-rSK/strings.xml diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index c21d720a..aa77d8d2 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Ruang Permainan + Ruang Game Kelola pengaturan game Anda Opsi dalam game diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 00000000..a480d317 --- /dev/null +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,83 @@ + + + + Game Space + Manage your gaming setup + + In-game options + Block fullscreen event + Prevent fullscreen events like incoming calls from appearing + Stay awake + Lock gesture + Disable auto-brightness + Disable swipe to screenshot + Disable USB debugging + Overlay menu opacity level + + Notification mode + Do not show + Show as Heads Up + Show as reTicker + Show as Danmaku + + Ringer mode + Silent + Vibrate + Normal + Do not change + + Library + Add + Pick your game + Search + Are you sure you want to remove %1$s from your game list? + + Configure game + Preferred mode + Use ANGLE (experimental) + Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + ANGLE is not available on your system + Remove %1$s from library + Unsupported + Standard + Performance + Battery + + Value: %s + by default + Default value: %s\nLong tap to set + Default value is set + + Battery: %1$d%% + Memory available: %1$d\/%2$d MB + + Mode + FPS info + Hide + Heads Up + reTicker + Danmaku + Enabled + Disabled + Call mode + No action + Auto answer + Auto reject + Received call from %1$s + Rejected call from %1$s + diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index e5a699b5..90c17e1f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -75,7 +75,7 @@ Bật Tắt Chế độ cuộc gọi - Không có hành động nào + Không làm gì Tự động trả lời Tự động từ chối Nhận cuộc gọi từ %1$s From 73d0fb3716f166f97e490e4be82f033717a4af85 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 9 Mar 2023 20:05:55 +0200 Subject: [PATCH 083/214] New translations (#39) --- app/src/main/res/values-tr-rTR/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index c1b9752e..f2fbfb3d 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -74,10 +74,10 @@ Danmaku Etkin Devre dışı - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Araç modu + Eylem yok + Otomatik cevaplama + Otomatik reddet + %1$s kullanıcısından gelen arama + %1$s kullanıcısından gelen arama From 211cc395e847b8389e68400d076c4f433d523cf6 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 5 Apr 2023 21:00:30 +0300 Subject: [PATCH 084/214] New Crowdin updates (#40) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Italian) * New translations strings.xml (Portuguese) * New translations strings.xml (Korean) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Persian) --- app/src/main/res/values-ca-rES/strings.xml | 14 +-- app/src/main/res/values-de-rDE/strings.xml | 2 +- app/src/main/res/values-fa-rIR/strings.xml | 12 +-- app/src/main/res/values-it-rIT/strings.xml | 12 +-- app/src/main/res/values-ko-rKR/strings.xml | 12 +-- app/src/main/res/values-pt-rPT/strings.xml | 12 +-- app/src/main/res/values-sk-rSK/strings.xml | 106 ++++++++++----------- 7 files changed, 85 insertions(+), 85 deletions(-) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index e70cdd3e..4d8e5d9a 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -50,7 +50,7 @@ Configura el joc Mode preferit Utilitza l\'ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! + Utilitza el renderitzador ANGLE en lloc dels controladors natius GLES.\nATENCIÓ! Pot trenca els gràfics del joc, utilitzeu amb precaució! ANGLE no està disponible en el sistema Elimina %1$s de la biblioteca No suportat @@ -74,10 +74,10 @@ Danmaku Activat Desactivat - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Mode de trucada + Sense acció + Resposta automàtica + Rebutja automàticament + S\'ha rebut una trucada de %1$s + S\'ha rebutjat una trucada de %1$s diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 7f0f7c34..c236ca93 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -76,7 +76,7 @@ Deaktiviert Anruf-Modus Keine Aktion - Automatische Antwort + Automatisch ans Telefon gehen Automatisch ablehnen Empfangener Anruf von %1$s Abgelehnter Anruf von %1$s diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index b68233ed..8e9c5bce 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -74,10 +74,10 @@ Danmaku فعال شد غیرفعال شد - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + حالت تماس + هیچ کاری انجام نده + پاسخگویی خودکار + رد دادن تماس + تماس دریافت شده از %1$s + تماس رد شده از %1$s diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 4327dcdb..2e627a24 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -74,10 +74,10 @@ Danmaku Abilitato Disabilitato - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Modalità chiamata + Nessuna azione + Risposta automatica + Rifiuto automatico + Chiamata ricevuta da %1$s + Chiamata rifiutata da %1$s diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index c854b41b..6b84e329 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -74,10 +74,10 @@ Danmaku 활성화됨 사용 안 함 - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + 전화 모드 + 동작 없음 + 자동 응답 + 자동 거부 + %1$s 에서 전화 받음 + %1$s 에서 전화 거부함 diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index dd345293..dbceeb5b 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -74,10 +74,10 @@ Danmaku Ativado Desativado - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Modo de chamada + Nenhuma ação + Resposta automática + Rejeitar automaticamente + Chamada de %1$s recebida + Chamada de %1$s rejeitada diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index a480d317..38e3ba44 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -16,68 +16,68 @@ limitations under the License. --> - Game Space - Manage your gaming setup + Herný priestor + Správa herných nastavení - In-game options - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture - Disable auto-brightness - Disable swipe to screenshot - Disable USB debugging - Overlay menu opacity level + Možnosti v hre + Blokovať udalosti na celej obrazovke + Nezobrazovať udalosti na celej obrazovke, napr. prichádzajúci hovor + Nevypínať obrazovku + Gesto uzamknutia + Zakázať automatický jas + Zakázať gesto pre snímku obrazovky + Zakázať ladenie USB + Priehľadnosť vrstvy menu - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Režim upozornení + Nezobrazovať + Zobraziť plávajúce oznámenia + Zobraziť reTicker + Zobraziť Danmaku - Ringer mode - Silent - Vibrate - Normal - Do not change + Režim zvonenia + Tichý + Vibrácie + Normálny + Nemeniť - Library - Add - Pick your game - Search - Are you sure you want to remove %1$s from your game list? + Knižnica + Pridať + Výber hry + Hľadať + Naozaj odstrániť %1$s zo zoznamu hier? - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library - Unsupported - Standard - Performance - Battery + Nastaviť hru + Preferovaný režim + Použiť ANGLE (experimentálne) + Namiesto natívnych ovládačov GELS sa používa renderer ANGLE.\nUPOZORNENIE!! Môže narušiť grafiku hry, používajte opatrne! + ANGLE nie je k dispozícii + Odstrániť %1$s z knižnice + Nepodporované + Štandardný + Výkon + Batéria - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set + Hodnota: %s + predvolená + Predvolená hodnota: %s\nPodržte pre nastavenie + Predvolená hodnota je nastavená - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Batéria: %1$d%% + Dostupná pamäť: %1$d\/%2$d MB - Mode + Režim FPS info - Hide - Heads Up + Skryť + Plávajúce upozornenia reTicker Danmaku - Enabled - Disabled - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Zapnuté + Zakázané + Režim hovorov + Žiadna akcia + Automaticky prijať + Automaticky odmietnuť + Prijatý hovor od %1$s + Odmietnutý hovor od %1$s From e4dc0fb273b4173e6fac22de824d4e73cded7e2f Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Thu, 2 Mar 2023 18:42:11 +0700 Subject: [PATCH 085/214] GameSpace: use relative-location on landscape as well We already use scrollview anyway, so countless grid will still be accessible even with wrapped height. Signed-off-by: Pranav Vashi --- .../chaldeaprjkt/gamespace/widget/PanelView.kt | 18 ++++-------------- app/src/main/res/layout/window_panel.xml | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index 5fa29708..f1f0cf4b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -20,12 +20,10 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.view.WindowInsets -import android.view.WindowManager import android.widget.LinearLayout import androidx.core.view.doOnLayout import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.utils.dp -import io.chaldeaprjkt.gamespace.utils.isPortrait import kotlin.math.max import kotlin.math.min @@ -48,22 +46,14 @@ class PanelView @JvmOverloads constructor( } private fun applyRelativeLocation() { - val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager - layoutParams.height = LayoutParams.WRAP_CONTENT - doOnLayout { if (defaultY == null) defaultY = y - y = if (wm.isPortrait()) { - val safeArea = rootWindowInsets.getInsets(WindowInsets.Type.systemBars()) - val minY = safeArea.top + 16.dp - val maxY = safeArea.top + (parent as View).height - safeArea.bottom - height - 16.dp - min(max(relativeY, minY), maxY).toFloat() - } else { - defaultY ?: 16f - } - + val safeArea = rootWindowInsets.getInsets(WindowInsets.Type.systemBars()) + val minY = safeArea.top + 16.dp + val maxY = safeArea.top + (parent as View).height - safeArea.bottom - height - 16.dp + y = min(max(relativeY, minY), maxY).toFloat() } } diff --git a/app/src/main/res/layout/window_panel.xml b/app/src/main/res/layout/window_panel.xml index 909da32e..81044a85 100644 --- a/app/src/main/res/layout/window_panel.xml +++ b/app/src/main/res/layout/window_panel.xml @@ -23,5 +23,5 @@ + android:layout_height="wrap_content" /> From 2652e6647fcae1db6b7a57e1941d126575c5ee91 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Thu, 2 Mar 2023 19:49:06 +0700 Subject: [PATCH 086/214] GameSpace: trim expand button width Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt | 10 +++++++--- app/src/main/res/layout/bar_menu_switcher.xml | 1 - 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt index 78b8c75c..721274ef 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt @@ -47,7 +47,7 @@ class MenuSwitcher @JvmOverloads constructor( var showFps = false set(value) { - layoutParams.width = if (value) LayoutParams.WRAP_CONTENT else 36.dp + setMenuIcon(null) field = value } @@ -84,8 +84,12 @@ class MenuSwitcher @JvmOverloads constructor( } } - private fun setMenuIcon(icon: Int = R.drawable.ic_close) { - val ic = if (showFps) null else resources.getDrawable(icon, context.theme) + private fun setMenuIcon(icon: Int?) { + when (icon) { + R.drawable.ic_close, R.drawable.ic_drag -> layoutParams.width = 36.dp + else -> layoutParams.width = LayoutParams.WRAP_CONTENT + } + val ic = icon?.takeIf { !showFps }?.let { resources.getDrawable(it, context.theme) } content?.textScaleX = if (showFps) 1f else 0f content?.setCompoundDrawablesRelativeWithIntrinsicBounds(null, ic, null, null) } diff --git a/app/src/main/res/layout/bar_menu_switcher.xml b/app/src/main/res/layout/bar_menu_switcher.xml index 7bedf997..d1e64374 100644 --- a/app/src/main/res/layout/bar_menu_switcher.xml +++ b/app/src/main/res/layout/bar_menu_switcher.xml @@ -12,7 +12,6 @@ android:layout_gravity="center" android:drawableTop="@drawable/ic_arrow_left" android:minEms="3" - android:paddingHorizontal="8dp" android:textAlignment="center" android:textColor="@color/onBarBackground" android:textSize="13sp" /> From c5cb469054abbce255ad1334f04e6947061c3635 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Sat, 4 Mar 2023 13:01:57 +0700 Subject: [PATCH 087/214] GameSpace: update gradle config and dependencies Signed-off-by: Pranav Vashi --- .gitignore | 2 +- app/build.gradle | 63 +++++++++--------------- build.gradle | 23 ++++++--- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 2 +- 5 files changed, 43 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index b29554cf..264b2908 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,5 @@ local.properties /app/release /magisk* /prebuilts -/SettingsLibParts +/SettingsLib /gradlew.bat diff --git a/app/build.gradle b/app/build.gradle index c56432e3..4498a2f2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,3 +1,6 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' @@ -5,14 +8,14 @@ plugins { } android { - compileSdk 31 + compileSdk 33 defaultConfig { applicationId "io.chaldeaprjkt.gamespace" - minSdk 31 - targetSdk 31 - versionCode 99 - versionName "0.1-beta" + minSdk 33 + targetSdk 33 + versionCode 100 + versionName "0.2" } signingConfigs { platform { @@ -34,54 +37,34 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = '1.8' + + tasks.withType(KotlinCompile).configureEach { + compilerOptions.jvmTarget = JvmTarget.JVM_1_8 } + sourceSets { main { aidl.srcDirs = ['src/main/java'] } } - lintOptions { - disable 'ContentDescription' - disable 'QueryAllPackagesPermission' - disable 'ProtectedPermissions' - disable 'OldTargetApi' - disable 'UseCompatLoadingForDrawables' - disable 'UnsafeProtectedBroadcastReceiver' - disable 'AppCompatCustomView' + lint { + disable 'ContentDescription', 'QueryAllPackagesPermission', 'ProtectedPermissions', 'OldTargetApi', 'UseCompatLoadingForDrawables', 'UnsafeProtectedBroadcastReceiver', 'AppCompatCustomView' } } -def androidPath = "${rootDir}/../../../" -def frameworkClassesJar = "${androidPath}/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar" - dependencies { - kapt 'com.google.dagger:hilt-compiler:2.40.5' + compileOnly files(frameworkJar) + implementation project(path: ':SettingsLib') - compileOnly files(frameworkClassesJar) - - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.preference:preference-ktx:1.1.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'com.google.code.gson:gson:2.8.6' - implementation 'com.google.dagger:hilt-android:2.40.5' - implementation project(path: ':SettingsLibParts') + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.preference:preference-ktx:1.2.0' + implementation 'com.google.android.material:material:1.8.0' + implementation 'com.google.code.gson:gson:2.10.1' + implementation 'com.google.dagger:hilt-android:2.45' + kapt 'com.google.dagger:hilt-compiler:2.45' } kapt { correctErrorTypes true } - -allprojects { - gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - options.compilerArgs.add("-Xbootclasspath/p:$frameworkClassesJar") - } - } -} diff --git a/build.gradle b/build.gradle index 5a48e391..25bdc04f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,21 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '7.1.0-beta05' apply false - id 'com.android.library' version '7.1.0-beta05' apply false - id 'org.jetbrains.kotlin.android' version '1.6.0' apply false + id 'com.android.application' version '7.4.2' apply false + id 'com.android.library' version '7.4.2' apply false + id 'org.jetbrains.kotlin.android' version '1.8.10' apply false } -task clean(type: Delete) { +tasks.register('clean') { delete rootProject.buildDir -} \ No newline at end of file +} + +allprojects { + ext.frameworkJar = "${rootDir}/prebuilts/framework.jar" + + gradle.projectsEvaluated { + tasks.withType(JavaCompile).tap { + configureEach { + options.compilerArgs.add("-Xbootclasspath/p:$frameworkJar") + } + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f0637684..e8a522aa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Nov 22 21:23:34 WIB 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 2b88ee7b..8a6ce76e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,4 @@ dependencyResolutionManagement { } rootProject.name = "GameSpace" include ':app' -include ':SettingsLibParts' +include ':SettingsLib' From f2ac1a47571a611bc97f785d02c927ab8a6e2bba Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Sat, 4 Mar 2023 13:03:12 +0700 Subject: [PATCH 088/214] GameSpace: update deprecated API usages Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 4 +-- .../gamebar/GameBroadcastReceiver.kt | 10 +++--- .../preferences/AppListPreferences.kt | 3 +- .../appselector/AppSelectorFragment.kt | 34 ++++++++++--------- .../settings/PerAppSettingsFragment.kt | 21 ++++++------ .../gamespace/utils/GameModeUtils.kt | 12 ++++--- .../gamespace/widget/PanelView.kt | 5 +-- 7 files changed, 47 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 39dc032e..c31e7da1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -53,8 +53,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch import javax.inject.Inject -import kotlin.math.max -import kotlin.math.min @AndroidEntryPoint(Service::class) class GameBarService : Hilt_GameBarService() { @@ -274,7 +272,7 @@ class GameBarService : Hilt_GameBarService() { val safeArea = statusbarHeight + 4.dp val safeHeight = wm.maximumWindowMetrics.bounds.height() - safeArea - barLayoutParam.y = max(min(barLayoutParam.y, safeHeight), safeArea) + barLayoutParam.y = barLayoutParam.y.coerceIn(safeArea, safeHeight) updateBackground() updateContainerGaps() diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt index 18cedb9e..3e50b7be 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt @@ -19,6 +19,7 @@ package io.chaldeaprjkt.gamespace.gamebar import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.os.Handler import android.os.Looper import android.os.UserHandle @@ -49,10 +50,11 @@ class GameBroadcastReceiver : BroadcastReceiver() { setPackage(null) component = null } - packageManager.queryBroadcastReceivers(intent, 0) - ?.mapNotNull { it.activityInfo?.packageName } - ?.filter { it != packageName } - ?.forEach { + val flags = PackageManager.ResolveInfoFlags.of(0) + packageManager.queryBroadcastReceivers(intent, flags) + .mapNotNull { it.activityInfo?.packageName } + .filter { it != packageName } + .forEach { (intent.clone() as Intent).apply { setPackage(it) sendBroadcastAsUser(this, UserHandle.CURRENT, diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt index cc7e08f0..f0c85bf3 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/AppListPreferences.kt @@ -61,7 +61,8 @@ class AppListPreferences @JvmOverloads constructor(context: Context, attrs: Attr } private fun getAppInfo(packageName: String): ApplicationInfo? = try { - context.packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA) + val flags = PackageManager.ApplicationInfoFlags.of(PackageManager.GET_META_DATA.toLong()) + context.packageManager.getApplicationInfo(packageName, flags) } catch (e: PackageManager.NameNotFoundException) { null } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt index 51ef97b4..49a60e4d 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt @@ -27,8 +27,10 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.SearchView +import androidx.core.view.MenuProvider import androidx.core.view.ViewCompat import androidx.fragment.app.Fragment +import androidx.lifecycle.Lifecycle import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.appbar.AppBarLayout @@ -49,9 +51,17 @@ class AppSelectorFragment : Hilt_AppSelectorFragment(), SearchView.OnQueryTextLi private var appsAdapter: AppsAdapter? = null private var appBarLayout: AppBarLayout? = null - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) + private val menuProvider = object : MenuProvider { + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { + menuInflater.inflate(R.menu.app_selector_menu, menu) + val searchMenuItem = menu.findItem(R.id.app_search_menu) + val searchView = searchMenuItem.actionView as? SearchView + searchView?.setOnQueryTextListener(this@AppSelectorFragment) + searchView?.queryHint = getString(R.string.app_search_title) + searchMenuItem.setOnActionExpandListener(this@AppSelectorFragment) + } + + override fun onMenuItemSelected(menuItem: MenuItem) = false } override fun onCreateView( @@ -66,25 +76,17 @@ class AppSelectorFragment : Hilt_AppSelectorFragment(), SearchView.OnQueryTextLi override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + activity?.addMenuProvider(menuProvider, viewLifecycleOwner, Lifecycle.State.RESUMED) view.findViewById(R.id.app_list)?.apply { setupAppListView(this) } } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - super.onCreateOptionsMenu(menu, inflater) - inflater.inflate(R.menu.app_selector_menu, menu) - val searchMenuItem = menu.findItem(R.id.app_search_menu) - val searchView = searchMenuItem.actionView as SearchView - searchView.setOnQueryTextListener(this) - searchView.queryHint = getString(R.string.app_search_title) - searchMenuItem.setOnActionExpandListener(this) - } - private fun setupAppListView(view: RecyclerView) { appListView = view + val flags = PackageManager.ApplicationInfoFlags.of(PackageManager.GET_META_DATA.toLong()) val apps = view.context.packageManager - .getInstalledApplications(PackageManager.GET_META_DATA) + .getInstalledApplications(flags) .filter { it.packageName != context?.packageName && it.flags and ApplicationInfo.FLAG_SYSTEM == 0 && @@ -110,13 +112,13 @@ class AppSelectorFragment : Hilt_AppSelectorFragment(), SearchView.OnQueryTextLi return false } - override fun onMenuItemActionExpand(item: MenuItem?): Boolean { + override fun onMenuItemActionExpand(item: MenuItem): Boolean { appBarLayout?.setExpanded(false, false) appListView?.let { ViewCompat.setNestedScrollingEnabled(it, false) } return true } - override fun onMenuItemActionCollapse(item: MenuItem?): Boolean { + override fun onMenuItemActionCollapse(item: MenuItem): Boolean { appBarLayout?.setExpanded(false, false) appListView?.let { ViewCompat.setNestedScrollingEnabled(it, true) } return true diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt index c86649b1..f000c746 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt @@ -17,6 +17,7 @@ package io.chaldeaprjkt.gamespace.settings import android.app.Activity import android.content.Intent +import android.content.pm.PackageManager import android.os.Bundle import android.view.View import androidx.preference.ListPreference @@ -42,10 +43,10 @@ class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), lateinit var gameModeUtils: GameModeUtils private val currentGame by lazy { - context?.packageManager?.getApplicationInfo( - activity?.intent?.getStringExtra(PerAppSettingsActivity.EXTRA_PACKAGE), - 0 - ) + activity?.intent?.getStringExtra(PerAppSettingsActivity.EXTRA_PACKAGE)?.let { + val flags = PackageManager.ApplicationInfoFlags.of(0) + context?.packageManager?.getApplicationInfo(it, flags) + } } private val currentConfig: UserGame? @@ -64,15 +65,15 @@ class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), super.onViewCreated(view, savedInstanceState) findPreference("headers")?.apply { layoutResource = R.layout.per_app_header - icon = currentGame?.loadIcon(context?.packageManager) - title = context?.packageManager?.let { currentGame?.loadLabel(it) } + icon = currentGame?.loadIcon(context.packageManager) + title = context.packageManager?.let { currentGame?.loadLabel(it) } } findPreference(PREF_PREFERRED_MODE)?.apply { currentConfig?.mode?.let { value = it.toString() } onPreferenceChangeListener = this@PerAppSettingsFragment } findPreference(PREF_USE_ANGLE)?.apply { - context?.resources?.getBoolean(R.bool.config_allow_per_app_angle_usage)?.let { + context.resources?.getBoolean(R.bool.config_allow_per_app_angle_usage)?.let { isVisible = it if (!it) return@apply } @@ -89,7 +90,7 @@ class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), findPreference(PREF_UNREGISTER)?.apply { summary = context.getString( R.string.per_app_unregister, - currentGame?.loadLabel(context?.packageManager) + currentGame?.loadLabel(context.packageManager) ) setOnPreferenceClickListener { activity?.setResult(Activity.RESULT_OK, Intent().apply { @@ -101,9 +102,9 @@ class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), } } - override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { val gameInfo = currentGame ?: return false - when (preference?.key) { + when (preference.key) { PREF_PREFERRED_MODE -> { val newMode = (newValue as String).toIntOrNull() ?: 1 gameModeUtils.setGameModeFor(gameInfo.packageName, settings, newMode) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/GameModeUtils.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/GameModeUtils.kt index 231fe4ae..20b2e2a8 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/GameModeUtils.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/GameModeUtils.kt @@ -18,6 +18,7 @@ package io.chaldeaprjkt.gamespace.utils import android.app.GameManager import android.content.Context import android.content.Intent +import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.os.IDeviceIdleController import android.os.RemoteException @@ -81,10 +82,13 @@ class GameModeUtils @Inject constructor(private val context: Context) { } } - fun findAnglePackage() = context.packageManager.queryIntentActivities( - Intent(ACTION_ANGLE_FOR_ANDROID), - PackageManager.MATCH_SYSTEM_ONLY - ).firstOrNull()?.activityInfo + + fun findAnglePackage(): ActivityInfo? { + val intent = Intent(ACTION_ANGLE_FOR_ANDROID) + val flags = PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_SYSTEM_ONLY.toLong()) + val info = context.packageManager.queryIntentActivities(intent, flags) + return info.firstOrNull()?.activityInfo + } fun isAngleUsed(packageName: String?) = packageName?.let { DeviceConfig.getString(DeviceConfig.NAMESPACE_GAME_OVERLAY, it, null) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index f1f0cf4b..268652a5 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -24,8 +24,6 @@ import android.widget.LinearLayout import androidx.core.view.doOnLayout import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.utils.dp -import kotlin.math.max -import kotlin.math.min class PanelView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null @@ -53,8 +51,7 @@ class PanelView @JvmOverloads constructor( val safeArea = rootWindowInsets.getInsets(WindowInsets.Type.systemBars()) val minY = safeArea.top + 16.dp val maxY = safeArea.top + (parent as View).height - safeArea.bottom - height - 16.dp - y = min(max(relativeY, minY), maxY).toFloat() + y = relativeY.coerceIn(minY, maxY).toFloat() } } - } From b73b5c144791e8f49f539c44a9f80af3b7222393 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Fri, 3 Mar 2023 08:58:06 +0700 Subject: [PATCH 089/214] GameSpace: Fix layout jumps after dragging the bar Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index c31e7da1..af192d01 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -225,14 +225,6 @@ class GameBarService : Hilt_GameBarService() { recorderButton() } - private fun onBarDragged(dragged: Boolean) { - menuSwitcher.isDragged = dragged - if (dragged) { - barView.translationX = 0f - } - updateBackground() - } - private fun updateBackground() { val barDragged = !barExpanded && barView.translationX == 0f val collapsedAtStart = !barDragged && barLayoutParam.x < 0 @@ -269,16 +261,22 @@ class GameBarService : Hilt_GameBarService() { barLayoutParam.x = halfWidth } - val safeArea = statusbarHeight + 4.dp val safeHeight = wm.maximumWindowMetrics.bounds.height() - safeArea barLayoutParam.y = barLayoutParam.y.coerceIn(safeArea, safeHeight) updateBackground() updateContainerGaps() - updateLayout() menuSwitcher.showFps = if (barExpanded) false else appSettings.showFps menuSwitcher.updateIconState(barExpanded, barLayoutParam.x) + try { + if (rootBarView.isAttachedToWindow) { + wm.removeView(rootBarView) + } + wm.addView(rootBarView, barLayoutParam) + } catch (_: IllegalStateException) { + wm.updateViewLayout(rootBarView, barLayoutParam) + } } private fun setupPanelView() { @@ -326,14 +324,20 @@ class GameBarService : Hilt_GameBarService() { menuSwitcher.registerDraggableTouchListener( initPoint = { Point(barLayoutParam.x, barLayoutParam.y) }, listener = { x, y -> - onBarDragged(true) - barLayoutParam.x = x - barLayoutParam.y = y - updateLayout() + if (!menuSwitcher.isDragged) { + menuSwitcher.isDragged = true + barView.translationX = 0f + } + updateLayout { + it.x = x + it.y = y + } + updateBackground() }, onComplete = { - onBarDragged(false) + menuSwitcher.isDragged = false dockCollapsedMenu() + updateBackground() appSettings.x = barLayoutParam.x appSettings.y = barLayoutParam.y } From 0e4b0a8da690e436ce8c5e354e0cc8d8e53da2c8 Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Sat, 4 Mar 2023 21:01:52 +0700 Subject: [PATCH 090/214] GameSpace: remove duplicate drawables Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 4 +-- app/src/main/res/drawable/bar_dragged.xml | 19 ------------- .../{bar_expanded.xml => bar_normal.xml} | 0 app/src/main/res/drawable/ic_panel.xml | 27 ------------------- app/src/main/res/layout/library_item.xml | 5 ++-- app/src/main/res/layout/window_util.xml | 5 ++-- 6 files changed, 7 insertions(+), 53 deletions(-) delete mode 100644 app/src/main/res/drawable/bar_dragged.xml rename app/src/main/res/drawable/{bar_expanded.xml => bar_normal.xml} (100%) delete mode 100644 app/src/main/res/drawable/ic_panel.xml diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index af192d01..0ac7b3b6 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -231,10 +231,10 @@ class GameBarService : Hilt_GameBarService() { val collapsedAtEnd = !barDragged && barLayoutParam.x > 0 barView.setBackgroundResource( when { - barExpanded -> R.drawable.bar_expanded + barExpanded -> R.drawable.bar_normal collapsedAtStart -> R.drawable.bar_collapsed_start collapsedAtEnd -> R.drawable.bar_collapsed_end - else -> R.drawable.bar_dragged + else -> R.drawable.bar_normal } ) } diff --git a/app/src/main/res/drawable/bar_dragged.xml b/app/src/main/res/drawable/bar_dragged.xml deleted file mode 100644 index 99c194f2..00000000 --- a/app/src/main/res/drawable/bar_dragged.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/bar_expanded.xml b/app/src/main/res/drawable/bar_normal.xml similarity index 100% rename from app/src/main/res/drawable/bar_expanded.xml rename to app/src/main/res/drawable/bar_normal.xml diff --git a/app/src/main/res/drawable/ic_panel.xml b/app/src/main/res/drawable/ic_panel.xml deleted file mode 100644 index 192ff7b5..00000000 --- a/app/src/main/res/drawable/ic_panel.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/library_item.xml b/app/src/main/res/layout/library_item.xml index 5b50a06b..8d56e788 100644 --- a/app/src/main/res/layout/library_item.xml +++ b/app/src/main/res/layout/library_item.xml @@ -58,6 +58,7 @@ android:layout_height="24dp" android:layout_margin="12dp" android:scaleType="fitCenter" - android:src="@drawable/ic_gear" /> + android:src="@drawable/ic_gear" + android:tint="?android:attr/colorControlNormal" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/window_util.xml b/app/src/main/res/layout/window_util.xml index cbcd5e2b..aeb6718b 100644 --- a/app/src/main/res/layout/window_util.xml +++ b/app/src/main/res/layout/window_util.xml @@ -15,7 +15,6 @@ --> @@ -26,7 +25,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="10dp" - android:background="@drawable/bar_expanded" + android:background="@drawable/bar_normal" android:gravity="center_horizontal" android:orientation="vertical" android:paddingVertical="5dp" @@ -44,7 +43,7 @@ android:layout_marginTop="5dp" android:padding="8dp" android:scaleType="centerInside" - android:src="@drawable/ic_panel" /> + android:src="@drawable/ic_gear" /> Date: Fri, 17 Mar 2023 14:54:24 +0700 Subject: [PATCH 091/214] GameSpace: Switch Xuse-experimental flags into opt-in warning: flag is not supported by this version of the compiler: -Xuse-experimental=kotlin.Experimental warning: flag is not supported by this version of the compiler: -Xuse-experimental=kotlin.ExperimentalStdlibApi Signed-off-by: Pranav Vashi --- app/src/main/Android.bp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp index 9505ad43..d805a757 100644 --- a/app/src/main/Android.bp +++ b/app/src/main/Android.bp @@ -30,8 +30,8 @@ android_app { "LineagePreferenceLib", ], kotlincflags: [ - "-Xuse-experimental=kotlin.Experimental", - "-Xuse-experimental=kotlin.ExperimentalStdlibApi", + "-opt-in=kotlin.Experimental", + "-opt-in=kotlin.ExperimentalStdlibApi", ], plugins: [ "dagger2-compiler", From 76204563f9c2f7cf05df08be5ca729bc3f6a405c Mon Sep 17 00:00:00 2001 From: Nauval Rizky Date: Thu, 6 Apr 2023 22:26:52 +0700 Subject: [PATCH 092/214] GameSpace: safely update rootBarView's LayoutParam Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 0ac7b3b6..7572057b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -48,10 +48,6 @@ import io.chaldeaprjkt.gamespace.utils.registerDraggableTouchListener import io.chaldeaprjkt.gamespace.utils.statusbarHeight import io.chaldeaprjkt.gamespace.widget.MenuSwitcher import io.chaldeaprjkt.gamespace.widget.PanelView -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.launch import javax.inject.Inject @AndroidEntryPoint(Service::class) @@ -65,7 +61,6 @@ class GameBarService : Hilt_GameBarService() { @Inject lateinit var danmakuService: DanmakuService - private val scope = CoroutineScope(Job() + Dispatchers.Main) private val wm by lazy { getSystemService(WINDOW_SERVICE) as WindowManager } private val handler by lazy { Handler(Looper.getMainLooper()) } @@ -148,8 +143,8 @@ class GameBarService : Hilt_GameBarService() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) when (intent?.action) { - ACTION_STOP -> onActionStop() - ACTION_START -> onActionStart() + ACTION_STOP -> onGameLeave() + ACTION_START -> onGameStart() } return START_STICKY } @@ -162,7 +157,7 @@ class GameBarService : Hilt_GameBarService() { override fun onDestroy() { danmakuService.destroy() - onActionStop() + onGameLeave() super.onDestroy() } @@ -181,27 +176,39 @@ class GameBarService : Hilt_GameBarService() { } // for client service - fun onGameStart() = scope.launch { onActionStart() } - fun onGameLeave() = scope.launch { onActionStop() } - - private fun onActionStart() { + fun onGameStart() { rootBarView.isVisible = false rootBarView.alpha = 0f - if (!rootBarView.isAttachedToWindow) { - wm.addView(rootBarView, barLayoutParam) - } + updateRootBarView() handler.postDelayed(firstPaint, 500) } - private fun onActionStop() { + fun onGameLeave() { if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { wm.removeViewImmediate(rootPanelView) } - if (rootBarView.isAttachedToWindow) { + if (::rootBarView.isInitialized && rootBarView.isAttachedToWindow) { wm.removeViewImmediate(rootBarView) } } + private fun updateRootBarView() { + if (!::rootBarView.isInitialized) return + + // Try to remove and add the view manually to avoid animation jumps. + // Otherwise, use updateViewLayout + try { + if (rootBarView.isAttachedToWindow) { + wm.removeViewImmediate(rootBarView) + } + wm.addView(rootBarView, barLayoutParam) + } catch (_: RuntimeException) { + if (rootBarView.isAttachedToWindow) { + wm.updateViewLayout(rootBarView, barLayoutParam) + } + } + } + private fun updateLayout(with: (WindowManager.LayoutParams) -> Unit = {}) { if (rootBarView.isAttachedToWindow) { wm.updateViewLayout(rootBarView, barLayoutParam.apply(with)) @@ -269,14 +276,7 @@ class GameBarService : Hilt_GameBarService() { updateContainerGaps() menuSwitcher.showFps = if (barExpanded) false else appSettings.showFps menuSwitcher.updateIconState(barExpanded, barLayoutParam.x) - try { - if (rootBarView.isAttachedToWindow) { - wm.removeView(rootBarView) - } - wm.addView(rootBarView, barLayoutParam) - } catch (_: IllegalStateException) { - wm.updateViewLayout(rootBarView, barLayoutParam) - } + updateRootBarView() } private fun setupPanelView() { From 626074cd04c30ed7ef2ed4191f0b682c192f518e Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 10 Apr 2023 07:08:04 +0300 Subject: [PATCH 093/214] New Crowdin updates (#43) * New translations strings.xml (Afrikaans) * New translations strings.xml (Afrikaans) --- app/src/main/res/values-af-rZA/strings.xml | 106 ++++++++++----------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index a480d317..915dba87 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -17,67 +17,67 @@ --> Game Space - Manage your gaming setup + Bestuur jou speletjie-opstelling - In-game options - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture - Disable auto-brightness - Disable swipe to screenshot - Disable USB debugging - Overlay menu opacity level + In-speletjie opsies + Blokkeer volskermgebeurtenisse + Verhoed dat volskermgebeurtenisse soos inkomende oproepe verskyn + Bly wakker + Sluit gebaar + Deaktiveer outo-helderheid + Deaktiveer \"Swipe to screenshot\" + Deaktiveer \"USB debugging\" + Oorleg kieslys ondeursigtigheid vlak - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Kennisgewingmodus + Moet nie wys + Wys as \"Heads Up\" + Wys as \"reTicker\" + Wys as \"Danmaku\" - Ringer mode - Silent - Vibrate - Normal - Do not change + Belmodus + Stil + Vibreer + Normaal + Moet nie verander - Library - Add - Pick your game - Search - Are you sure you want to remove %1$s from your game list? + Biblioteek + Voeg by + Kies jou speletjie + Soek + Is jy seker dat jy %1$s van jou speletjieslys wil verwyder? - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library - Unsupported - Standard - Performance + Stel speletjie in + Voorkeurmodus + Gebruik ANGLE (eksperimenteel) + Gebruik ANGLE weergawe in plaas van die inheemse GLES bestuurders.\nWAARSKUWING!!! Mag speletjie se grafika verbreek, gebruik versigtig! + ANGLE is nie op jou stelsel beskikbaar nie + Verwyder %1$s van biblioteek + Ongesteun + Standaard + Werkverrigting Battery - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set + Waarde %s + by verstek + Standaard waarde: %s\nLang tik om te stel + Standaard waarde is gestel Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Geheue beskikbaar: %1$d\/%2$d MB - Mode - FPS info - Hide - Heads Up - reTicker - Danmaku - Enabled - Disabled - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Modus + FPS informasie + Steek weg + \"Heads Up\" + \"reTicker\" + \"Danmaku\" + Geaktiveer + Gedeaktiveer + Oproepmodus + Geen aksie + Outo-antwoord + Outo-verwerp + Oproep vanaf %1$s ontvang + Oproep vanaf %1$s verwerp From d669b775d3d0dad2501bda46427ff773b59ecbdf Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 13 May 2023 21:50:14 +0300 Subject: [PATCH 094/214] New Crowdin updates (#44) * New translations strings.xml (Turkish) * New translations strings.xml (French) * New translations strings.xml (Dutch) * New translations strings.xml (Japanese) --- app/src/main/res/values-fr-rFR/strings.xml | 12 ++++++------ app/src/main/res/values-ja-rJP/strings.xml | 12 ++++++------ app/src/main/res/values-nl-rNL/strings.xml | 2 +- app/src/main/res/values-tr-rTR/strings.xml | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index c0a210a3..7788a3e3 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -74,10 +74,10 @@ Danmaku Activé Désactivé - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Mode d\'appels + Pas d\'action + Décrochage automatique + Raccrochage automatique + Appel reçu de %1$s + Appel de %1$s rejeté diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 099e6083..ae4145a6 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -74,10 +74,10 @@ Danmaku 有効 無効 - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + 着信モード + なし + 自動応答 + 自動拒否 + %1$s からの着信を受信しました + %1$s からの着信を拒否しました diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index a9087697..e7f88a73 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -75,7 +75,7 @@ Ingeschakeld Uitgechakeld Call mode - No action + Geen actie Auto answer Auto reject Received call from %1$s diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index f2fbfb3d..27543571 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -74,7 +74,7 @@ Danmaku Etkin Devre dışı - Araç modu + Çağrı modu Eylem yok Otomatik cevaplama Otomatik reddet From 47e431738eef9025c7cef15d25e92cbd01158d59 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 24 May 2023 12:27:05 +0300 Subject: [PATCH 095/214] New Crowdin updates (#45) * New translations strings.xml (Vietnamese) * New translations strings.xml (French) --- app/src/main/res/values-fr-rFR/strings.xml | 14 +++++++------- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 7788a3e3..32e9b5f6 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,12 +16,12 @@ limitations under the License. --> - Espace jeu + Espace Jeux Gérez votre configuration de jeu Options en jeu - Bloquer les évènements en plein écran - Empêcher les événements en plein écran comme les appels entrants d\'apparaître + Bloquer les évènements plein écran + Empêcher les événements plein écran comme montrer les appels entrants Rester éveillé Gestes de verrouillage Désactiver la luminosité automatique @@ -32,8 +32,8 @@ Mode notification Ne pas afficher Afficher en notification flottante - Afficher en reTicker - Afficher en Danmaku + Afficher comme reTicker + Afficher comme Danmaku Mode sonnerie Silencieux @@ -45,12 +45,12 @@ Ajouter Choisissez votre jeu Rechercher - Êtes-vous sûr de vouloir retirer %1$s de votre bibliothèque ? + Êtes-vous sûr de vouloir supprimer %1$s de votre bibliothèque ? Configurer le jeu Mode préféré Utiliser ANGLE (expérimental) - Utiliser le moteur de rendu ANGLE au lieu des pilotes GLES natifs.\nATTENTION!! Peut altérer le rendu graphique de jeu, utiliser avec précaution ! + Utiliser le moteur de rendu ANGLE au lieu des pilotes GLES natifs.\nATTENTION!! Peut casser le rendu graphique des jeux, à utiliser avec précaution ! ANGLE n\'est pas disponible pour votre système Retirer %1$s de la bibliothèque Non-supporté diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 90c17e1f..64de3bb7 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -33,7 +33,7 @@ Không hiển thị Hiện thông báo nổi Hiện kiểu reTicker - Hiện kiểu Danmaku + Thông báo nổi kiểu hiện đại Chế độ chuông Im lặng From aaada76e8ba1e3ecafee5dfd003ca5564ccc77e5 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 1 Jun 2023 22:27:59 +0300 Subject: [PATCH 096/214] New Crowdin updates (#46) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 12 ++++++------ app/src/main/res/values-zh-rTW/strings.xml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index b45edae5..608cabed 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -74,10 +74,10 @@ Danmaku مفعّل معطل - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + وضع المكالمة + بلا إجراء + رد تلقائي + رفض تلقائي + مكالمة متلقاة منذ %1$s + مكالمة مرفوضة منذ%1$s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8564c12e..fcce82ff 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -74,10 +74,10 @@ 彈幕式通知 已啟用 已停用 - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + 通話模式 + 不採取動作 + 自動接聽 + 自動拒接 + 接聽 %1$s 的來電 + 錯過 %1$s 的來電 From 9f416582e60e9ddd3d20be2f8ba49a264dc2a183 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 15 Jun 2023 19:54:45 +0300 Subject: [PATCH 097/214] New translations (#47) --- app/src/main/res/values-vi-rVN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 64de3bb7..d6a898dd 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -70,8 +70,8 @@ Thông tin FPS Ẩn Thông báo nổi - reTicker - Danmaku + Kiểu mới + Kiểu hiện đại Bật Tắt Chế độ cuộc gọi From 6fef568db6851ae40fb7418398b38f13835bf8ea Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 19 Apr 2023 22:53:22 +0530 Subject: [PATCH 098/214] Revert "GameSpace: Remove unimplemented method from Danmaku service" This reverts commit 44a2269c6b5edfcdcf765d980f0c3fbf46eda081. --- .../java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt index ac2766eb..20e1e9ad 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt @@ -231,7 +231,7 @@ class DanmakuService @Inject constructor( override fun onNotificationPosted(sbn: StatusBarNotification) { if (appSettings.notificationMode != 3) return; - if (!sbn.isClearable || sbn.isOngoing) return + if (!sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return val extras = sbn.notification.extras var title = extras.getString(Notification.EXTRA_TITLE) if (title?.isNotBlank() != true) title = extras.getString(Notification.EXTRA_TITLE_BIG) From 2b14818a825f7a942ba37c177a5ab6b9c2e832b7 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Tue, 4 Jul 2023 18:14:32 +0300 Subject: [PATCH 099/214] New translations (#48) --- app/src/main/res/values-nl-rNL/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index e7f88a73..b7b945af 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -74,10 +74,10 @@ Denemarken Ingeschakeld Uitgechakeld - Call mode + Oproepmodus Geen actie - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Auto antwoord + Automatisch afwijzen + Oproep ontvangen van %1$s + Oproep van %1$s afgewezen From 5bed258b054949a2ab72c6fd6d32345d70384244 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 21 Jul 2023 08:39:49 +0300 Subject: [PATCH 100/214] New Crowdin updates (#50) * New translations strings.xml (Dutch) * New translations strings.xml (Vietnamese) --- app/src/main/res/values-nl-rNL/strings.xml | 8 ++++---- app/src/main/res/values-vi-rVN/strings.xml | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index b7b945af..ed4ac218 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -21,8 +21,8 @@ In-game opties Blokkeer volledig scherm event - Voorkom dat volledig scherm events zoals inkomende oproepen worden weergegeven tijdens in-game - Blijf aan + Voorkom dat volledig scherm events zoals inkomende oproepen worden weergegeven + Blijf wakker Vergrendel gebaar Automatische helderheid uitschakelen Veeg naar schermafbeelding uitschakelen @@ -37,7 +37,7 @@ Beltoonmodus Stil - Vibreren + Trillen Normaal Niet wijzigen @@ -71,7 +71,7 @@ Verbergen Pop-up reTicker - Denemarken + Danmaku Ingeschakeld Uitgechakeld Oproepmodus diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index d6a898dd..7e24281f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -24,15 +24,15 @@ Ngăn các sự kiện toàn màn hình như cuộc gọi đến xuất hiện khi ở trong trò chơi Không khóa màn hình Khóa cử chỉ - Vô hiệu hóa độ sáng tự động - Tắt tính năng vuốt 3 ngón để chụp ảnh màn hình + Tắt độ sáng tự động + Tắt tính năng chụp ảnh màn hình Tắt gỡ lỗi USB - Độ mờ của menu + Độ mờ bảng điều khiển nổi Kiểu thông báo Không hiển thị Hiện thông báo nổi - Hiện kiểu reTicker + Thông báo nổi kiểu mới Thông báo nổi kiểu hiện đại Chế độ chuông @@ -69,7 +69,7 @@ Chế độ Thông tin FPS Ẩn - Thông báo nổi + Cửa sổ nổi Kiểu mới Kiểu hiện đại Bật From 853b0f3c1ab71759d563f1da8bc4ebe4a35ce24f Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Sun, 20 Aug 2023 20:30:31 +0800 Subject: [PATCH 101/214] GameSpace: Add missing permission usage for Danmaku service Change-Id: Idbe4ff3d007c95eff667be06c7123f27d2890caf Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 1 + app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16736f4d..638a3774 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,6 +31,7 @@ + + From 411f9f3a761683d842757a85904888f920fae008 Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Mon, 29 May 2023 15:21:11 +0800 Subject: [PATCH 102/214] GameSpace: Import new game illustration from motorola Change-Id: I7784bed7fef6f1834aae2046ae5412d0072b5145 Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/res/raw/game_settings_illustration.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/raw/game_settings_illustration.json b/app/src/main/res/raw/game_settings_illustration.json index be46150c..8a7d2f46 100644 --- a/app/src/main/res/raw/game_settings_illustration.json +++ b/app/src/main/res/raw/game_settings_illustration.json @@ -1 +1 @@ -{"v":"5.7.8","fr":30,"ip":0,"op":240,"w":412,"h":300,"nm":"GameDashboard_anim_v6_light","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Close btn pulse","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":145,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":155,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":331,"s":[100]},{"t":343,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[251.845,57.941,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":155,"s":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":165,"s":[110,110,100]},{"t":175,"s":[200,200,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.541176470588,0.705882352941,0.972549019608,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue300","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue300"}],"ip":145,"op":176,"st":105,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Game btn pulse","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":221,"s":[100]},{"t":233,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[248.095,150.941,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":45,"s":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[110,110,100]},{"t":65,"s":[200,200,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.541176470588,0.705882352941,0.972549019608,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue300","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue300"}],"ip":35,"op":66,"st":-5,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Game icn pressed","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[100]},{"t":65,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150,0],"ix":2,"l":2},"a":{"a":0,"k":[12,12.25,0],"ix":1,"l":2},"s":{"a":0,"k":[90,90,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.552]],"o":[[0.553,0],[0,0.552],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[15,9.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".white","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"white"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.553]],"o":[[0.553,0],[0,0.553],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".white","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"white"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.5,-2.5],[-0.5,-2.5],[-0.5,-0.5],[-2.5,-0.5],[-2.5,0.5],[-0.5,0.5],[-0.5,2.5],[0.5,2.5],[0.5,0.5],[2.5,0.5],[2.5,-0.5],[0.5,-0.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.5,10.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".white","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"white"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.069,-0.09],[0.21,0],[0.1,0.101],[0,0],[0,0],[0,0],[0.15,0],[0.08,0.091],[-0.031,0.21],[0,0],[-0.99,0],[0,0],[-0.139,-0.98],[0,0]],"o":[[-0.08,0.091],[-0.149,0],[0,0],[0,0],[0,0],[-0.1,0.101],[-0.209,0],[-0.081,-0.09],[0,0],[0.149,-0.969],[0,0],[0.989,0],[0,0],[0.03,0.201]],"v":[[7.48,4.81],[7.059,5],[6.669,4.84],[3.831,2],[-3.831,2],[-6.669,4.84],[-7.061,5],[-7.479,4.81],[-7.609,4.371],[-6.52,-3.29],[-4.529,-5],[4.531,-5],[6.51,-3.279],[7.6,4.38]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.219,1.54],[0,0],[1.989,0],[0,0],[0.281,-1.971],[0,0],[-1.549,0],[-0.481,0.481],[0,0],[0,0],[0,0],[-0.67,0]],"o":[[0,0],[-0.281,-1.971],[0,0],[-1.99,0],[0,0],[-0.219,1.54],[0.681,0],[0,0],[0,0],[0,0],[0.48,0.481],[1.561,0]],"v":[[9.581,4.09],[8.49,-3.569],[4.531,-7],[-4.529,-7],[-8.49,-3.569],[-9.581,4.09],[-7.061,7],[-5.26,6.25],[-2.999,4],[3.001,4],[5.251,6.25],[7.049,7]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".white","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"white"}],"ip":55,"op":66,"st":55,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Game btn pressed","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":230,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":235,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":311,"s":[100]},{"t":323,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150.441,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":0,"k":[140,140,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.443137254902,0.898039215686,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue600","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue600"}],"ip":55,"op":66,"st":85,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Game icn normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"t":180,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150,0],"ix":2,"l":2},"a":{"a":0,"k":[12,12.25,0],"ix":1,"l":2},"s":{"a":0,"k":[90,90,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.552]],"o":[[0.553,0],[0,0.552],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.450980392157,0.909803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[15,9.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue600","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue600"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.553]],"o":[[0.553,0],[0,0.553],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.450980392157,0.909803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue600","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"blue600"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.5,-2.5],[-0.5,-2.5],[-0.5,-0.5],[-2.5,-0.5],[-2.5,0.5],[-0.5,0.5],[-0.5,2.5],[0.5,2.5],[0.5,0.5],[2.5,0.5],[2.5,-0.5],[0.5,-0.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.450980392157,0.909803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.5,10.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue600","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"blue600"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.069,-0.09],[0.21,0],[0.1,0.101],[0,0],[0,0],[0,0],[0.15,0],[0.08,0.091],[-0.031,0.21],[0,0],[-0.99,0],[0,0],[-0.139,-0.98],[0,0]],"o":[[-0.08,0.091],[-0.149,0],[0,0],[0,0],[0,0],[-0.1,0.101],[-0.209,0],[-0.081,-0.09],[0,0],[0.149,-0.969],[0,0],[0.989,0],[0,0],[0.03,0.201]],"v":[[7.48,4.81],[7.059,5],[6.669,4.84],[3.831,2],[-3.831,2],[-6.669,4.84],[-7.061,5],[-7.479,4.81],[-7.609,4.371],[-6.52,-3.29],[-4.529,-5],[4.531,-5],[6.51,-3.279],[7.6,4.38]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.219,1.54],[0,0],[1.989,0],[0,0],[0.281,-1.971],[0,0],[-1.549,0],[-0.481,0.481],[0,0],[0,0],[0,0],[-0.67,0]],"o":[[0,0],[-0.281,-1.971],[0,0],[-1.99,0],[0,0],[-0.219,1.54],[0.681,0],[0,0],[0,0],[0,0],[0.48,0.481],[1.561,0]],"v":[[9.581,4.09],[8.49,-3.569],[4.531,-7],[-4.529,-7],[-8.49,-3.569],[-9.581,4.09],[-7.061,7],[-5.26,6.25],[-2.999,4],[3.001,4],[5.251,6.25],[7.049,7]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.450980392157,0.909803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue600","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"blue600"}],"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Game btn normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":180,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":256,"s":[100]},{"t":268,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150.441,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":0,"k":[140,140,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803921569,0.941176470588,0.996078431373,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue50","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue50"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Close btn","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[251.5,58.375,0],"ix":2,"l":2},"a":{"a":0,"k":[43.75,-88.125,0],"ix":1,"l":2},"s":{"a":0,"k":[60,60,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"f","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[50.75,-93.715],[49.34,-95.125],[43.75,-89.535],[38.16,-95.125],[36.75,-93.715],[42.34,-88.125],[36.75,-82.535],[38.16,-81.125],[43.75,-86.715],[49.34,-81.125],[50.75,-82.535],[45.16,-88.125]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[22.628,21.513],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960784314,0.447058823529,0.901960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.814,-88.244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue600","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue600"}],"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"UI Grid","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[206,162,0],"to":[0,-1.667,0],"ti":[0,1.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[206,152,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[206,152,0],"to":[0,1.667,0],"ti":[0,-1.667,0]},{"t":180,"s":[206,162,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28,34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-30,34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-30,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"UI Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[206,170,0],"to":[0,-1.667,0],"ti":[0,1.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[206,160,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[206,160,0],"to":[0,1.667,0],"ti":[0,-1.667,0]},{"t":180,"s":[206,170,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[10,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-15,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.862745098039,0.878431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-40,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey300","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"grey300"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"UI Bg","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-5.514],[0,0],[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0]],"o":[[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0],[0,0],[0,-5.514],[0,0]],"v":[[51.398,-119.204],[61.398,-109.204],[61.398,109.204],[51.398,119.204],[-51.398,119.204],[-61.398,109.204],[-61.398,-109.204],[-51.398,-119.204]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803921569,0.917647058824,0.929411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[186.201,142.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey200","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey200"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"HW Vol","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.271,-12.669],[-1.271,-12.669],[-1.271,12.669],[1.271,12.669]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.756862745098,0.776470588235,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.6,106.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey400","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey400"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"HW Power","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.271,-6.357],[-1.271,-6.357],[-1.271,6.357],[1.271,6.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.756862745098,0.776470588235,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.6,69.223],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey400","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey400"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"HW Frame","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.627,0],[0,0],[0,-6.627],[0,0],[-6.628,0],[0,0],[0,6.628],[0,0]],"o":[[0,0],[-6.628,0],[0,0],[0,6.628],[0,0],[6.627,0],[0,0],[0,-6.627]],"v":[[51.398,-121.204],[-51.398,-121.204],[-63.398,-109.204],[-63.398,109.204],[-51.398,121.204],[51.398,121.204],[63.398,109.204],[63.398,-109.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-5.514],[0,0],[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0]],"o":[[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0],[0,0],[0,-5.514],[0,0]],"v":[[51.398,-119.204],[61.398,-109.204],[61.398,109.204],[51.398,119.204],[-51.398,119.204],[-61.398,109.204],[-61.398,-109.204],[-51.398,-119.204]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.756862745098,0.776470588235,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[186.201,142.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey400","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey400"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Phone bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-5.514],[0,0],[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0]],"o":[[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0],[0,0],[0,-5.514],[0,0]],"v":[[51.398,-119.204],[61.398,-109.204],[61.398,109.204],[51.398,119.204],[-51.398,119.204],[-61.398,109.204],[-61.398,-109.204],[-51.398,-119.204]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[186.201,142.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".white","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"white"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[412,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":28,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[187.971,131.945],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".white","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"white"}],"ip":0,"op":240,"st":30,"bm":0}],"markers":[{"tm":60,"cm":"OPEN","dr":0},{"tm":210,"cm":"CLOSE","dr":0}]} \ No newline at end of file +{"v":"5.7.7","fr":29,"ip":0,"op":110,"w":200,"h":200,"nm":"toturial_fps01","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"fps 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[100]},{"t":19,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46.442,90,0],"ix":2,"l":2},"a":{"a":0,"k":[6.471,6.471,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":6,"s":[43,43,100]},{"t":11,"s":[92,92,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[160,160],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":43,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"fps","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"t":35,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46.442,90,0],"ix":2,"l":2},"a":{"a":0,"k":[6.471,6.471,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.326,0],[0.26,0.092],[0.161,0.147],[0,0],[-0.21,-0.082],[-0.208,0],[-0.111,0.084],[0,0.139],[0.064,0.068],[0.104,0.041],[0.176,0.049],[0.172,0.078],[0.122,0.172],[0,0.287],[-0.111,0.203],[-0.225,0.119],[-0.323,0],[-0.215,-0.066],[-0.161,-0.123],[0,0],[0.327,0],[0.109,-0.09],[0,-0.147],[-0.125,-0.071],[-0.262,-0.07],[-0.172,-0.078],[-0.123,-0.168],[0,-0.287],[0.113,-0.204],[0.226,-0.119]],"o":[[-0.28,0],[-0.26,-0.093],[0,0],[0.151,0.135],[0.21,0.082],[0.233,0],[0.111,-0.084],[0,-0.103],[-0.065,-0.067],[-0.104,-0.041],[-0.269,-0.078],[-0.172,-0.078],[-0.122,-0.173],[0,-0.251],[0.111,-0.203],[0.224,-0.119],[0.226,0],[0.215,0.065],[0,0],[-0.326,-0.225],[-0.229,0],[-0.109,0.091],[0,0.148],[0.126,0.072],[0.269,0.078],[0.172,0.078],[0.124,0.168],[0,0.246],[-0.112,0.203],[-0.226,0.119]],"v":[[-0.033,2.227],[-0.842,2.09],[-1.473,1.73],[-1.195,0.979],[-0.654,1.305],[-0.027,1.428],[0.49,1.301],[0.656,0.967],[0.56,0.71],[0.307,0.548],[-0.113,0.413],[-0.775,0.178],[-1.215,-0.197],[-1.398,-0.885],[-1.232,-1.566],[-0.729,-2.048],[0.092,-2.227],[0.753,-2.128],[1.318,-1.846],[1.064,-1.089],[0.085,-1.428],[-0.423,-1.292],[-0.587,-0.936],[-0.398,-0.607],[0.182,-0.393],[0.844,-0.16],[1.288,0.21],[1.473,0.893],[1.303,1.566],[0.796,2.049]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.631,6.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.129,0.113],[0,0.208],[0.129,0.112],[0.244,0],[0,0],[0,0]],"o":[[0.244,0],[0.129,-0.113],[0,-0.211],[-0.129,-0.113],[0,0],[0,0],[0,0]],"v":[[-0.153,-0.21],[0.406,-0.379],[0.6,-0.861],[0.406,-1.347],[-0.153,-1.517],[-0.61,-1.517],[-0.61,-0.21]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.231,-0.111],[-0.126,-0.204],[0,-0.279],[0.125,-0.207],[0.231,-0.109],[0.312,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.312,0],[0.231,0.111],[0.125,0.205],[0,0.276],[-0.126,0.206],[-0.231,0.109],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.11,-2.227],[0.705,-2.06],[1.24,-1.587],[1.428,-0.861],[1.24,-0.137],[0.705,0.336],[-0.11,0.5],[-0.61,0.5],[-0.61,2.227],[-1.428,2.227],[-1.428,-2.227]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.447,6.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.411,-1.528],[-0.411,-0.533],[1.014,-0.533],[1.014,0.167],[-0.411,0.167],[-0.411,2.227],[-1.229,2.227],[-1.229,-2.227],[1.229,-2.227],[1.229,-1.528]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.111,6.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"sidebar","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"t":35,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[45.882,100.588,0],"ix":2,"l":2},"a":{"a":0,"k":[29.412,40.588,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 9","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 10","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.657,0],[0,0],[0,-1.657],[0,0],[1.656,0],[0,0],[0,1.657],[0,0]],"o":[[0,0],[1.656,0],[0,0],[0,1.657],[0,0],[-1.657,0],[0,0],[0,-1.657]],"v":[[-26.412,-40.588],[26.412,-40.588],[29.412,-37.588],[29.412,37.588],[26.412,40.588],[-26.412,40.588],[-29.412,37.588],[-29.412,-37.588]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.412,40.588],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 12","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"60","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"t":108,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.316,78.323,0],"ix":2,"l":2},"a":{"a":0,"k":[7.188,5.113,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.301,0.49],[0.652,0],[0.297,-0.487],[0.01,-1.011],[0,0],[-0.313,-0.514],[-0.633,0],[-0.303,0.484],[-0.014,1.039]],"o":[[0,-1.071],[-0.301,-0.489],[-0.646,0],[-0.296,0.488],[0,0],[0,1.075],[0.311,0.511],[0.625,0],[0.303,-0.483],[0,0]],"v":[[1.877,-0.998],[1.426,-3.34],[-0.003,-4.074],[-1.418,-3.343],[-1.876,-1.094],[-1.876,0.93],[-1.407,3.313],[0.011,4.081],[1.402,3.356],[1.877,1.073]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.506,-0.719],[1.076,0],[0.511,0.705],[0.019,1.4],[0,0],[-0.506,0.711],[-1.08,0],[-0.506,-0.686],[-0.014,-1.431]],"o":[[0,1.482],[-0.506,0.72],[-1.062,0],[-0.509,-0.703],[0,0],[0,-1.463],[0.506,-0.711],[1.071,0],[0.506,0.686],[0,0]],"v":[[3.142,0.731],[2.383,4.033],[0.011,5.113],[-2.348,4.057],[-3.141,0.902],[-3.141,-0.786],[-2.382,-4.047],[-0.003,-5.113],[2.362,-4.084],[3.142,-0.909]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[11.236,5.113],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.547,0],[0.364,-0.26],[0.141,-0.391],[0,0],[-0.37,-0.501],[-0.551,0],[-0.325,0.418],[0,0.679],[0.331,0.422]],"o":[[-0.434,0],[-0.366,0.259],[0,0],[0,0.82],[0.369,0.501],[0.57,0],[0.326,-0.419],[0,-0.684],[-0.33,-0.421]],"v":[[0.082,-0.564],[-1.114,-0.174],[-1.873,0.803],[-1.873,1.268],[-1.319,3.25],[0.061,4.002],[1.404,3.374],[1.894,1.726],[1.397,0.068]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.583,-0.566],[0.091,-1.026],[-0.907,0],[-0.516,-0.61],[0,-0.966],[0.558,-0.615],[0.939,0],[0.592,0.732],[0,1.154],[0,0],[-0.781,0.968],[-1.545,0.022]],"o":[[0,0],[0,0],[-0.985,0.018],[-0.584,0.565],[0.524,-0.602],[0.865,0],[0.518,0.611],[0,1.025],[-0.558,0.616],[-0.953,0],[-0.593,-0.731],[0,0],[0,-1.832],[0.783,-0.969],[0,0]],"v":[[1.743,-5.048],[1.743,-3.975],[1.511,-3.975],[-0.841,-3.1],[-1.853,-0.714],[0.294,-1.617],[2.368,-0.701],[3.145,1.665],[2.307,4.125],[0.061,5.048],[-2.256,3.951],[-3.145,1.124],[-3.145,0.639],[-1.973,-3.561],[1.518,-5.048]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.145,5.178],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"cycle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"t":108,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.317,78.323,0],"ix":2,"l":2},"a":{"a":0,"k":[19.074,19.074,0],"ix":1,"l":2},"s":{"a":0,"k":[84,84,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-10.353,0],[0,-10.353],[10.353,0],[0,10.352]],"o":[[10.353,0],[0,10.352],[-10.353,0],[0,-10.353]],"v":[[0,-18.824],[18.824,0.001],[0,18.824],[-18.824,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.074,19.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2,"l":2},"a":{"a":0,"k":[99.729,93.191,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,2.603],[0,0],[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0]],"o":[[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0],[0,2.602],[0,0],[0,0]],"v":[[-84.45,44.874],[-89.207,40.117],[-89.207,-40.117],[-84.45,-44.874],[84.451,-44.874],[89.207,-40.117],[89.207,40.028],[84.451,44.784],[-84.45,44.784]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.101960791794,0.090196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.551,92.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.075,5.481],[0,0],[1.075,5.392],[5.556,0],[0,0],[1.165,-5.481],[0,0],[-1.075,-5.481],[-5.556,0],[0,0]],"o":[[1.075,-5.391],[0,0],[-1.075,-5.481],[0,0],[-5.557,0],[-1.075,4.942],[0,0],[1.075,5.481],[0,0],[5.556,-0.09]],"v":[[97.866,38.593],[99.479,-0.045],[97.866,-38.683],[86.395,-48.118],[-86.484,-48.118],[-97.956,-38.773],[-99.479,0.045],[-97.866,38.683],[-86.395,48.118],[86.395,48.118]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180392156863,0.192156877705,0.20000001496,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.729,93.191],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-51.33,0],[0,-51.33],[51.33,0],[0,51.33]],"o":[[51.33,0],[0,51.33],[-51.33,0],[0,-51.33]],"v":[[0,-92.941],[92.941,0],[0,92.941],[-92.941,0]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.301960784314,0.270588235294,0.258823529412,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.729,93.191],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":176,"st":0,"bm":0}],"markers":[]} From f708e219bac6512948139e794981853598917171 Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Mon, 21 Aug 2023 02:29:08 +0800 Subject: [PATCH 103/214] GameSpace: Fix notification listener service test: allow "device & app notification" access, set to danmaku mode, no crashes observed Change-Id: I0a3d10aec7173fe32f96eee76272ba3efbf33dbf Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 9 +++ .../gamespace/gamebar/DanmakuService.kt | 58 +++++------------- .../gamebar/DanmakuServiceListener.kt | 60 +++++++++++++++++++ 3 files changed, 85 insertions(+), 42 deletions(-) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 638a3774..faa03682 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -68,6 +68,15 @@ android:name=".gamebar.GameBarService" android:exported="false" /> + + + + + + () - private val notificationListener = Listener() - private var layoutParams: LayoutParams = LayoutParams().apply { height = LayoutParams.WRAP_CONTENT flags = flags or LayoutParams.FLAG_NOT_FOCUSABLE or @@ -92,6 +99,8 @@ class DanmakuService @Inject constructor( private var overlayPositionAnimator: ValueAnimator? = null fun init() { + notificationListener = DanmakuServiceListener() + notificationListener.notificationSettings = this updateParams() registerListener() } @@ -151,7 +160,7 @@ class DanmakuService @Inject constructor( return if (isPortrait) verticalOffsetPortrait else verticalOffsetLandscape } - private fun showNotificationAsOverlay(notification: String) { + override fun showNotificationAsOverlay(notification: String) { if (notificationOverlay.parent == null) { notificationOverlay.alpha = 0f notificationOverlay.text = notification @@ -162,6 +171,9 @@ class DanmakuService @Inject constructor( } } + override val notificationMode: Int + get() = appSettings.notificationMode + private fun pushNotification() { val end = getOffsetForPosition().toFloat() val start = end * (1 - SLIDE_ANIMATION_DISTANCE_FACTOR) @@ -225,44 +237,6 @@ class DanmakuService @Inject constructor( windowManager.removeViewImmediate(notificationOverlay) } - private inner class Listener : NotificationListenerService() { - - private val postedNotifications = mutableMapOf() - - override fun onNotificationPosted(sbn: StatusBarNotification) { - if (appSettings.notificationMode != 3) return; - if (!sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return - val extras = sbn.notification.extras - var title = extras.getString(Notification.EXTRA_TITLE) - if (title?.isNotBlank() != true) title = extras.getString(Notification.EXTRA_TITLE_BIG) - - var danmakuText = "" - if (title?.isNotBlank() == true) { - danmakuText += "[$title] " - } - val text = extras.getString(Notification.EXTRA_TEXT) - if (text?.isNotBlank() == true) { - danmakuText += text - } - - val time = sbn.notification.`when` - if (danmakuText.isNotBlank() && !( - postedNotifications.containsKey(danmakuText) && - postedNotifications[danmakuText] == time - )) { - showNotificationAsOverlay(danmakuText) - insertPostedNotification(danmakuText, time) - } - } - - private fun insertPostedNotification(danmakuText: String, time: Long) { - if (postedNotifications.size >= NOTIFICATIONS_MAX_CACHED) { - postedNotifications.clear() - } - postedNotifications.put(danmakuText, time) - } - } - companion object { private const val TAG = "DanmakuService" diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt new file mode 100644 index 00000000..37770953 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2020 The exTHmUI Open Source Project + * Copyright (C) 2021 AOSP-Krypton Project + * Copyright (C) 2022 Nameless-AOSP Project + * Copyright (C) 2023 the risingOS android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.chaldeaprjkt.gamespace.gamebar + +import android.app.Notification +import android.service.notification.NotificationListenerService +import android.service.notification.StatusBarNotification + +import io.chaldeaprjkt.gamespace.data.AppSettings + +class DanmakuServiceListener : NotificationListenerService() { + + private val postedNotifications = mutableMapOf() + + var notificationSettings: NotificationSettings? = null + + override fun onNotificationPosted(sbn: StatusBarNotification) { + if (notificationSettings?.notificationMode != 3 || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + + val extras = sbn.notification.extras + val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) + val text = extras.getString(Notification.EXTRA_TEXT) + + var danmakuText = "" + if (title?.isNotBlank() == true) danmakuText += "[$title] " + if (text?.isNotBlank() == true) danmakuText += text + + val time = sbn.notification.`when` + if (danmakuText.isNotBlank() && !(postedNotifications[danmakuText] == time)) { + notificationSettings?.showNotificationAsOverlay(danmakuText) + insertPostedNotification(danmakuText, time) + } + } + + private fun insertPostedNotification(danmakuText: String, time: Long) { + if (postedNotifications.size >= NOTIFICATIONS_MAX_CACHED) postedNotifications.clear() + postedNotifications[danmakuText] = time + } + + companion object { + private const val NOTIFICATIONS_MAX_CACHED = 99 + } +} From 93b399ee130d8ac15eff1408fbf8de10632aba63 Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Tue, 22 Aug 2023 17:31:34 +0800 Subject: [PATCH 104/214] Gamespace: Cleanup notification modes Drop support custom notification modes * this doesnt really go well with headsup and other modes - part of UX cleanup for U+ upstream Change-Id: Ic2160cafcf08ee5af9e2e71c66048c2b31558e66 Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- .../gamespace/data/AppSettings.kt | 11 ++--- .../gamespace/data/GameSession.kt | 22 ++++----- .../gamespace/data/SessionState.kt | 3 +- .../gamespace/data/SystemSettings.kt | 23 ++-------- .../gamespace/gamebar/DanmakuService.kt | 12 ++--- .../gamebar/DanmakuServiceListener.kt | 6 +-- .../widget/tiles/NotificationTile.kt | 45 +++++-------------- app/src/main/res/values/strings.xml | 5 +++ app/src/main/res/xml/root_preferences.xml | 14 +++--- 9 files changed, 51 insertions(+), 90 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 4324cad6..c2484784 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -1,6 +1,7 @@ /* * Copyright (C) 2021 Chaldeaprjkt * 2022 crDroid Android Project + * 2023 risingOS Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,14 +54,14 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getBoolean(KEY_STAY_AWAKE, false) set(value) = db.edit().putBoolean(KEY_STAY_AWAKE, value).apply() + var danmakuNotification + get() = db.getBoolean(KEY_DANMAKU_NOTIFICATION_MODE, true) + set(value) = db.edit().putBoolean(KEY_DANMAKU_NOTIFICATION_MODE, value).apply() + var callsMode: Int get() = db.getString(KEY_CALLS_MODE, "0").toInt() set(value) = db.edit().putString(KEY_CALLS_MODE, value.toString()).apply() - var notificationMode: Int - get() = db.getString(KEY_NOTIFICATION_MODE, "3").toInt() - set(value) = db.edit().putString(KEY_NOTIFICATION_MODE, value.toString()).apply() - var ringerMode: Int get() = db.getString(KEY_RINGER_MODE, "3").toInt() set(value) = db.edit().putString(KEY_RINGER_MODE, value.toString()).apply() @@ -81,7 +82,7 @@ class AppSettings @Inject constructor(private val context: Context) { const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" const val KEY_3SCREENSHOT_DISABLE = "gamespace_tfgesture_disabled" const val KEY_STAY_AWAKE = "gamespace_stay_awake" - const val KEY_NOTIFICATION_MODE = "gamespace_notification_mode" + const val KEY_DANMAKU_NOTIFICATION_MODE = "gamespace_danmaku_notification_mode" const val KEY_CALLS_MODE = "gamespace_calls_mode" const val KEY_RINGER_MODE = "gamespace_ringer_mode" const val KEY_MENU_OPACITY = "gamespace_menu_opacity" diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt index 2dd32872..4e10f7e1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt @@ -1,6 +1,7 @@ /* * Copyright (C) 2021 Chaldeaprjkt * 2022 crDroid Android Project + * Copyright (C) 2023 risingOS Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -57,31 +58,23 @@ class GameSession @Inject constructor( state = SessionState( packageName = sessionName, autoBrightness = systemSettings.autoBrightness, + headsup = systemSettings.headsup, threeScreenshot = systemSettings.threeScreenshot, - headsUp = systemSettings.headsUp, - reTicker = systemSettings.reTicker, ringerMode = audioManager.ringerModeInternal, adbEnabled = systemSettings.adbEnabled, ) if (appSettings.noAutoBrightness) { systemSettings.autoBrightness = false } + if (appSettings.danmakuNotification) { + systemSettings.headsup = false + } if (appSettings.noThreeScreenshot) { systemSettings.threeScreenshot = false } if (appSettings.noAdbEnabled) { systemSettings.adbEnabled = false } - if (appSettings.notificationMode == 0 || appSettings.notificationMode == 3) { - systemSettings.headsUp = false - systemSettings.reTicker = false - } else if (appSettings.notificationMode == 1) { - systemSettings.headsUp = true - systemSettings.reTicker = false - } else { - systemSettings.headsUp = true - systemSettings.reTicker = true - } if (appSettings.ringerMode != 3) { audioManager.ringerModeInternal = appSettings.ringerMode } @@ -92,14 +85,15 @@ class GameSession @Inject constructor( if (appSettings.noAutoBrightness) { orig.autoBrightness?.let { systemSettings.autoBrightness = it } } + if (appSettings.danmakuNotification) { + orig.headsup?.let { systemSettings.headsup = it } + } if (appSettings.noThreeScreenshot) { orig.threeScreenshot?.let { systemSettings.threeScreenshot = it } } if (appSettings.noAdbEnabled) { orig.adbEnabled?.let { systemSettings.adbEnabled = it } } - orig.headsUp?.let { systemSettings.headsUp = it } - orig.reTicker?.let { systemSettings.reTicker = it } if (appSettings.ringerMode != 3) { audioManager.ringerModeInternal = orig.ringerMode } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt index f556f9a1..f3f0bcdf 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt @@ -23,9 +23,8 @@ import androidx.annotation.Keep data class SessionState( var packageName: String, var autoBrightness: Boolean? = null, + var headsup: Boolean? = null, var threeScreenshot: Boolean? = null, - var headsUp: Boolean? = null, - var reTicker: Boolean? = null, var ringerMode: Int = AudioManager.RINGER_MODE_NORMAL, var adbEnabled: Boolean? = null, ) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index 9a86b9cc..cd6bf65f 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -29,31 +29,16 @@ class SystemSettings @Inject constructor( private val resolver = context.contentResolver - var headsUp - get() = - Settings.Global.getInt(resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 1) == 1 + var headsup + get() = Settings.Global.getInt( + resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 1) == 1 set(it) { Settings.Global.putInt( - resolver, - Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, + resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, it.toInt() ) } - var reTicker - get() = - Settings.System.getIntForUser( - resolver, Settings.System.RETICKER_STATUS, 0, - UserHandle.USER_CURRENT) == 1 - set(it) { - Settings.System.putIntForUser( - resolver, - Settings.System.RETICKER_STATUS, - it.toInt(), - UserHandle.USER_CURRENT - ) - } - var autoBrightness get() = Settings.System.getIntForUser( diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt index 5a0db91a..abf75452 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt @@ -52,8 +52,8 @@ import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.AppSettings import io.chaldeaprjkt.gamespace.gamebar.DanmakuServiceListener -interface NotificationSettings { - val notificationMode: Int +interface DanmakuServiceInterface { + val danmakuNotificationMode: Boolean fun showNotificationAsOverlay(danmakuText: String) } @@ -61,7 +61,7 @@ interface NotificationSettings { class DanmakuService @Inject constructor( @ApplicationContext private val context: Context, private val appSettings: AppSettings -) : NotificationSettings { +) : DanmakuServiceInterface { private lateinit var notificationListener: DanmakuServiceListener @@ -100,7 +100,7 @@ class DanmakuService @Inject constructor( fun init() { notificationListener = DanmakuServiceListener() - notificationListener.notificationSettings = this + notificationListener.danmakuServiceInterface = this updateParams() registerListener() } @@ -171,8 +171,8 @@ class DanmakuService @Inject constructor( } } - override val notificationMode: Int - get() = appSettings.notificationMode + override val danmakuNotificationMode: Boolean + get() = appSettings.danmakuNotification private fun pushNotification() { val end = getOffsetForPosition().toFloat() diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 37770953..9d4cca28 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -29,10 +29,10 @@ class DanmakuServiceListener : NotificationListenerService() { private val postedNotifications = mutableMapOf() - var notificationSettings: NotificationSettings? = null + var danmakuServiceInterface: DanmakuServiceInterface? = null override fun onNotificationPosted(sbn: StatusBarNotification) { - if (notificationSettings?.notificationMode != 3 || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return val extras = sbn.notification.extras val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) @@ -44,7 +44,7 @@ class DanmakuServiceListener : NotificationListenerService() { val time = sbn.notification.`when` if (danmakuText.isNotBlank() && !(postedNotifications[danmakuText] == time)) { - notificationSettings?.showNotificationAsOverlay(danmakuText) + danmakuServiceInterface?.showNotificationAsOverlay(danmakuText) insertPostedNotification(danmakuText, time) } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt index a3518e3e..61d9e3da 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/tiles/NotificationTile.kt @@ -1,6 +1,7 @@ /* * Copyright (C) 2021 Chaldeaprjkt * Copyright (C) 2022 Nameless-AOSP + * Copyright (C) 2023 the risingOS Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,51 +26,29 @@ class NotificationTile @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : BaseTile(context, attrs) { - private var activeMode = DANMAKU_MODE + private var activeMode = true set(value) { field = value - appSettings.notificationMode = value - when (value) { - NO_NOTIFICATION -> { - systemSettings.headsUp = false - systemSettings.reTicker = false - summary?.text = context.getString(R.string.notification_hide) - } - HEADS_UP_MODE -> { - systemSettings.headsUp = true - systemSettings.reTicker = false - summary?.text = context.getString(R.string.notification_headsup) - } - RETICKER_MODE -> { - systemSettings.headsUp = true - systemSettings.reTicker = true - summary?.text = context.getString(R.string.notification_reticker) - } - DANMAKU_MODE -> { - systemSettings.headsUp = false - systemSettings.reTicker = false - summary?.text = context.getString(R.string.notification_danmaku) - } + appSettings.danmakuNotification = value + summary?.text = if (value) { + systemSettings.headsup = false + context.getString(R.string.notification_danmaku) + } else { + systemSettings.headsup = true + context.getString(R.string.state_default) } - isSelected = value != NO_NOTIFICATION + isSelected = value } override fun onAttachedToWindow() { super.onAttachedToWindow() title?.text = context.getString(R.string.notification_mode_title) - activeMode = appSettings.notificationMode + activeMode = appSettings.danmakuNotification icon?.setImageResource(R.drawable.ic_action_heads_up) } override fun onClick(v: View?) { super.onClick(v) - activeMode = if (activeMode == DANMAKU_MODE) NO_NOTIFICATION else activeMode + 1 - } - - companion object { - private const val NO_NOTIFICATION = 0 - private const val HEADS_UP_MODE = 1 - private const val RETICKER_MODE = 2 - private const val DANMAKU_MODE = 3 + activeMode = !activeMode } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ba78d155..ccd1e338 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,7 @@ Danmaku Enabled Disabled + Default Call mode No action @@ -90,4 +91,8 @@ Auto reject Received call from %1$s Rejected call from %1$s + + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 3c06ecc3..be6771f2 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -27,6 +27,12 @@ android:key="in_game_preferences" android:title="@string/in_game_preferences_title"> + + - - Date: Sun, 8 Oct 2023 19:17:36 +0300 Subject: [PATCH 105/214] New Crowdin updates (#52) * New translations strings.xml (Russian) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Slovak) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Korean) * New translations strings.xml (Ukrainian) * New translations strings.xml (Polish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Slovak) * New translations strings.xml (Vietnamese) * New translations strings.xml (Turkish) --- app/src/main/res/values-af-rZA/strings.xml | 4 ++++ app/src/main/res/values-ar-rSA/strings.xml | 4 ++++ app/src/main/res/values-ca-rES/strings.xml | 4 ++++ app/src/main/res/values-cs-rCZ/strings.xml | 4 ++++ app/src/main/res/values-da-rDK/strings.xml | 4 ++++ app/src/main/res/values-de-rDE/strings.xml | 4 ++++ app/src/main/res/values-el-rGR/strings.xml | 4 ++++ app/src/main/res/values-es-rES/strings.xml | 4 ++++ app/src/main/res/values-fa-rIR/strings.xml | 4 ++++ app/src/main/res/values-fi-rFI/strings.xml | 4 ++++ app/src/main/res/values-fr-rFR/strings.xml | 4 ++++ app/src/main/res/values-hu-rHU/strings.xml | 4 ++++ app/src/main/res/values-in-rID/strings.xml | 4 ++++ app/src/main/res/values-it-rIT/strings.xml | 4 ++++ app/src/main/res/values-iw-rIL/strings.xml | 4 ++++ app/src/main/res/values-ja-rJP/strings.xml | 4 ++++ app/src/main/res/values-ko-rKR/strings.xml | 4 ++++ app/src/main/res/values-nl-rNL/strings.xml | 4 ++++ app/src/main/res/values-no-rNO/strings.xml | 4 ++++ app/src/main/res/values-pl-rPL/strings.xml | 4 ++++ app/src/main/res/values-pt-rBR/strings.xml | 4 ++++ app/src/main/res/values-pt-rPT/strings.xml | 4 ++++ app/src/main/res/values-ro-rRO/strings.xml | 4 ++++ app/src/main/res/values-ru-rRU/strings.xml | 4 ++++ app/src/main/res/values-sk-rSK/strings.xml | 4 ++++ app/src/main/res/values-sr-rSP/strings.xml | 4 ++++ app/src/main/res/values-sv-rSE/strings.xml | 4 ++++ app/src/main/res/values-tr-rTR/strings.xml | 4 ++++ app/src/main/res/values-uk-rUA/strings.xml | 4 ++++ app/src/main/res/values-vi-rVN/strings.xml | 4 ++++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++++ app/src/main/res/values-zh-rTW/strings.xml | 4 ++++ 32 files changed, 128 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 915dba87..c10a052e 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -74,10 +74,14 @@ \"Danmaku\" Geaktiveer Gedeaktiveer + Default Oproepmodus Geen aksie Outo-antwoord Outo-verwerp Oproep vanaf %1$s ontvang Oproep vanaf %1$s verwerp + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 608cabed..a693c82e 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -74,10 +74,14 @@ Danmaku مفعّل معطل + Default وضع المكالمة بلا إجراء رد تلقائي رفض تلقائي مكالمة متلقاة منذ %1$s مكالمة مرفوضة منذ%1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 4d8e5d9a..36b0faa5 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -74,10 +74,14 @@ Danmaku Activat Desactivat + Default Mode de trucada Sense acció Resposta automàtica Rebutja automàticament S\'ha rebut una trucada de %1$s S\'ha rebutjat una trucada de %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 8f778db1..fb76d25d 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -74,10 +74,14 @@ Danmaku Povoleno Zakázáno + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index a480d317..f08ef916 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -74,10 +74,14 @@ Danmaku Enabled Disabled + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c236ca93..0287e013 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -74,10 +74,14 @@ Danmaku Aktiviert Deaktiviert + Standard Anruf-Modus Keine Aktion Automatisch ans Telefon gehen Automatisch ablehnen Empfangener Anruf von %1$s Abgelehnter Anruf von %1$s + + Benachrichtigungsmodus „Danmaku“ + Bei aktivem Spiel Benachrichtigungen als „Bullet-Kommentare“ aka „Danmaku“ anzeigen diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index f8451baf..d12e11ad 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -74,10 +74,14 @@ Danmaku Ενεργοποιημένο Απενεργοποιημένο + Προεπιλογή Λειτουργία κλήσης Καμία ενέργεια Αυτόματη απάντηση Αυτόματη απόρριψη Λήφθηκε κλήση από %1$s Απορρίφθηκε κλήση από %1$s + + Λειτουργία ειδοποιήσεων Danmaku + Εμφάνιση ειδοποίησης ως danmaku άλλως κουκκίδα σχόλια ενώ το παιχνίδι είναι ενεργό diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 0b34ce8d..fd6f1f3d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -75,10 +75,14 @@ Mantén presionado para establecer Danmaku Activado Desactivado + Default Modo de llamada Sin acción Respuesta automática Rechazo automático Llamada recibida de %1$s Llamada rechazada de %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 8e9c5bce..9d09db5a 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -74,10 +74,14 @@ Danmaku فعال شد غیرفعال شد + Default حالت تماس هیچ کاری انجام نده پاسخگویی خودکار رد دادن تماس تماس دریافت شده از %1$s تماس رد شده از %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index a480d317..f08ef916 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -74,10 +74,14 @@ Danmaku Enabled Disabled + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 32e9b5f6..191a29d9 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -74,10 +74,14 @@ Danmaku Activé Désactivé + Default Mode d\'appels Pas d\'action Décrochage automatique Raccrochage automatique Appel reçu de %1$s Appel de %1$s rejeté + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 829675ad..c5c117ee 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -74,10 +74,14 @@ Danmaku Engedélyezve Letiltva + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index aa77d8d2..7fa98f7f 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -74,10 +74,14 @@ Danmaku Diaktifkan Dinonaktifkan + Default Mode panggilan Tidak ada tindakan Jawab otomatis Tolak otomatis Menerima panggilan dari %1$s Menolak panggilan dari %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 2e627a24..af327520 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -74,10 +74,14 @@ Danmaku Abilitato Disabilitato + Default Modalità chiamata Nessuna azione Risposta automatica Rifiuto automatico Chiamata ricevuta da %1$s Chiamata rifiutata da %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index a480d317..f08ef916 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -74,10 +74,14 @@ Danmaku Enabled Disabled + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index ae4145a6..162bf961 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -74,10 +74,14 @@ Danmaku 有効 無効 + Default 着信モード なし 自動応答 自動拒否 %1$s からの着信を受信しました %1$s からの着信を拒否しました + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 6b84e329..6e1b4c3c 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -74,10 +74,14 @@ Danmaku 활성화됨 사용 안 함 + 기본값 전화 모드 동작 없음 자동 응답 자동 거부 %1$s 에서 전화 받음 %1$s 에서 전화 거부함 + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index ed4ac218..40349633 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -74,10 +74,14 @@ Danmaku Ingeschakeld Uitgechakeld + Default Oproepmodus Geen actie Auto antwoord Automatisch afwijzen Oproep ontvangen van %1$s Oproep van %1$s afgewezen + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index a480d317..f08ef916 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -74,10 +74,14 @@ Danmaku Enabled Disabled + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index b3b045a8..9ab03c57 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -74,10 +74,14 @@ Danmaku Włączono Wyłączono + Domyślnie Tryb połączeń Brak akcji Automatyczne odbieranie Automatyczne odrzucanie Odebrano połączenie od %1$s Odrzucono połączenie od %1$s + + Tryb powiadomień Danmaku + Wyświetlaj powiadomienie jako danmaku w postaci wypunktowanych komentarzy, gdy gra jest aktywna diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f5e89640..bc39edbe 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -74,10 +74,14 @@ Danmaku Ativado Desativado + Default Modo de chamada Nenhuma ação Atender automaticamente Recusar automaticamente Chamada recebida de %1$s Chamada recusada de %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index dbceeb5b..ad052ce1 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -74,10 +74,14 @@ Danmaku Ativado Desativado + Default Modo de chamada Nenhuma ação Resposta automática Rejeitar automaticamente Chamada de %1$s recebida Chamada de %1$s rejeitada + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index b6808b5c..e6b22478 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -74,10 +74,14 @@ Danmaku Activat Dezactivat + Default Mod apel Nicio acțiune Răspuns automat Respingere automată Apel primit de la %1$s Apel respins de la %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index ed199874..1c28c9a8 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -74,10 +74,14 @@ Прозрачные без фона Включено Отключено + Default Режим звонка Нет действия Автоответ Автосброс Поступил звонок от %1$s Отклонён вызов от %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 38e3ba44..8504e1f8 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -74,10 +74,14 @@ Danmaku Zapnuté Zakázané + Predvolené Režim hovorov Žiadna akcia Automaticky prijať Automaticky odmietnuť Prijatý hovor od %1$s Odmietnutý hovor od %1$s + + Režim notifikácií Danmaku + Počas aktívnej hry zobraziť upozornenia ako danmaku alias odrážky diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index a480d317..f08ef916 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -74,10 +74,14 @@ Danmaku Enabled Disabled + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index a480d317..f08ef916 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -74,10 +74,14 @@ Danmaku Enabled Disabled + Default Call mode No action Auto answer Auto reject Received call from %1$s Rejected call from %1$s + + Danmaku Notification mode + Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 27543571..f340b420 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -74,10 +74,14 @@ Danmaku Etkin Devre dışı + Varsayılan Çağrı modu Eylem yok Otomatik cevaplama Otomatik reddet %1$s kullanıcısından gelen arama %1$s kullanıcısından gelen arama + + Danmaku Bildirim modu + Oyun aktifken danmaku bullet yorumları olarak bildirim göster diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 091de0e7..11b5a46d 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -74,10 +74,14 @@ Данмаку Увімкнено Вимкнено + За замовчанням Режим виклику Немає дій Автовідповідач Відхилити автоматично Отримано дзвінок від %1$s Пропущений дзвінок від %1$s + + Режим сповіщень Danmaku + Показувати сповіщення як Danmaku aka bullet коментарями під час гри активними diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 7e24281f..ea66b190 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -74,10 +74,14 @@ Kiểu hiện đại Bật Tắt + Mặc định Chế độ cuộc gọi Không làm gì Tự động trả lời Tự động từ chối Nhận cuộc gọi từ %1$s Từ chối cuộc gọi từ %1$s + + Chế độ thông báo hiện đại + Hiển thị thông báo hiện đại hay còn gọi là nhận xét về dấu đầu dòng khi trò chơi đang hoạt động diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 714a2e7e..afc734ae 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -74,10 +74,14 @@ 弹幕 已启用 已禁用 + 默认 通话模式 无操作 自动接听 自动挂断 收到了来自 %1$s 的来电 拒绝了来自 %1$s 的来电 + + 弹幕通知模式 + 当游戏处于活动状态时,以弹幕的形式显示通知消息。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fcce82ff..57389d8a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -74,10 +74,14 @@ 彈幕式通知 已啟用 已停用 + 預設 通話模式 不採取動作 自動接聽 自動拒接 接聽 %1$s 的來電 錯過 %1$s 的來電 + + 彈幕式通知模式 + 當遊戲處於活動狀態時,以彈幕的形式顯示通知訊息。 From 3714251f6ac7a4a55f518e2a2402d295579722ed Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 20 Oct 2023 20:35:38 +0300 Subject: [PATCH 106/214] New Crowdin updates (#53) * New translations strings.xml (French) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-es-rES/strings.xml | 6 +++--- app/src/main/res/values-fr-rFR/strings.xml | 6 +++--- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index fd6f1f3d..e048764e 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -75,7 +75,7 @@ Mantén presionado para establecer Danmaku Activado Desactivado - Default + Predeterminado Modo de llamada Sin acción Respuesta automática @@ -83,6 +83,6 @@ Mantén presionado para establecer Llamada recibida de %1$s Llamada rechazada de %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Modo notificación silenciosa + Mostrar notificación diseño circular mientras el juego está activo diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 191a29d9..86d96cf9 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -74,7 +74,7 @@ Danmaku Activé Désactivé - Default + Par défaut Mode d\'appels Pas d\'action Décrochage automatique @@ -82,6 +82,6 @@ Appel reçu de %1$s Appel de %1$s rejeté - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Mode de notification Danmaku + Afficher une notification en tant que danmaku (les commentaires flottants) lorsque le jeu est actif diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index afc734ae..9a2fe1cc 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -83,5 +83,5 @@ 拒绝了来自 %1$s 的来电 弹幕通知模式 - 当游戏处于活动状态时,以弹幕的形式显示通知消息。 + 游戏中以弹幕的形式显示通知 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 57389d8a..b70b7e1f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -82,6 +82,6 @@ 接聽 %1$s 的來電 錯過 %1$s 的來電 - 彈幕式通知模式 - 當遊戲處於活動狀態時,以彈幕的形式顯示通知訊息。 + 彈幕通知模式 + 遊戲中以彈幕形式顯示通知。 From 618a9466c18cc58d02ff803defc87d306248e21a Mon Sep 17 00:00:00 2001 From: someone5678 Date: Fri, 6 Oct 2023 23:01:36 +0900 Subject: [PATCH 107/214] GameSpace: Replace gson-prebuilt-jar to gson Change-Id: I5f5eb2974d92d52d9f5d176d06411a8c2732586e Signed-off-by: Pranav Vashi --- app/src/main/Android.bp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp index d805a757..ba9aad54 100644 --- a/app/src/main/Android.bp +++ b/app/src/main/Android.bp @@ -24,7 +24,7 @@ android_app { "com.google.android.material_material", "kotlin-stdlib", "kotlinx-coroutines-android", - "gson-prebuilt-jar", + "gson", "hilt_android", "org.lineageos.platform.internal", "LineagePreferenceLib", From 947b4d7fea61b4412ca3d6541fb059c073e2ce5a Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 29 Oct 2023 10:29:33 +0530 Subject: [PATCH 108/214] Remove unimplemented notification function Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 9d4cca28..3367c80a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -32,7 +32,7 @@ class DanmakuServiceListener : NotificationListenerService() { var danmakuServiceInterface: DanmakuServiceInterface? = null override fun onNotificationPosted(sbn: StatusBarNotification) { - if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing) return val extras = sbn.notification.extras val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) From 00fcbdeb9db002fc6070f0d17b26f96853c52d15 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 25 Nov 2023 20:18:41 +0200 Subject: [PATCH 109/214] New Crowdin updates (#56) * New translations strings.xml (Czech) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Russian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Romanian) --- app/src/main/res/values-cs-rCZ/strings.xml | 18 +++++++++--------- app/src/main/res/values-fa-rIR/strings.xml | 2 +- app/src/main/res/values-in-rID/strings.xml | 6 +++--- app/src/main/res/values-it-rIT/strings.xml | 6 +++--- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-ko-rKR/strings.xml | 4 ++-- app/src/main/res/values-nl-rNL/strings.xml | 8 ++++---- app/src/main/res/values-ro-rRO/strings.xml | 6 +++--- app/src/main/res/values-ru-rRU/strings.xml | 6 +++--- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index fb76d25d..040e9509 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -74,14 +74,14 @@ Danmaku Povoleno Zakázáno - Default - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Výchozí + Režim volání + Žádná akce + Automatická odpověď + Automaticky odmítnout + Odmítnutý hovor od %1$s + Zamítnutý hovor z %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Režim upozornění Danmaku + Zobrazit oznámení jako odrážku pro danmaku akci, pokud je hra aktivní diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 9d09db5a..2239a710 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -74,7 +74,7 @@ Danmaku فعال شد غیرفعال شد - Default + پيشفرض حالت تماس هیچ کاری انجام نده پاسخگویی خودکار diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 7fa98f7f..d0bf7d9e 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -74,7 +74,7 @@ Danmaku Diaktifkan Dinonaktifkan - Default + Bawaan Mode panggilan Tidak ada tindakan Jawab otomatis @@ -82,6 +82,6 @@ Menerima panggilan dari %1$s Menolak panggilan dari %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Mode Pemberitahuan Danmaku + Tampilkan notifikasi sebagai danmaku alias komentar bullet saat permainan aktif diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index af327520..8d4f9880 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -74,7 +74,7 @@ Danmaku Abilitato Disabilitato - Default + Predefinito Modalità chiamata Nessuna azione Risposta automatica @@ -82,6 +82,6 @@ Chiamata ricevuta da %1$s Chiamata rifiutata da %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Modalità notifica Danmaku + Mostra la notifica come Danmaku, ovvero i commenti sui proiettili, mentre il gioco è attivo diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 162bf961..9593ca59 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -74,7 +74,7 @@ Danmaku 有効 無効 - Default + デフォルト 着信モード なし 自動応答 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 6e1b4c3c..4c6884eb 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -82,6 +82,6 @@ %1$s 에서 전화 받음 %1$s 에서 전화 거부함 - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Danmaku 알림 모드 + 게임이 활성화 중일 때 bullet comments, 일명 danmaku로 알림 표시 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 40349633..8885d4b8 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -71,10 +71,10 @@ Verbergen Pop-up reTicker - Danmaku + Denemarken Ingeschakeld Uitgechakeld - Default + Standaard Oproepmodus Geen actie Auto antwoord @@ -82,6 +82,6 @@ Oproep ontvangen van %1$s Oproep van %1$s afgewezen - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Danmaku meldingsmodus + Melding weergeven als danmaku aka bullet reacties wanneer het spel actief is diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index e6b22478..f38d5e95 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -74,7 +74,7 @@ Danmaku Activat Dezactivat - Default + Prestabilit Mod apel Nicio acțiune Răspuns automat @@ -82,6 +82,6 @@ Apel primit de la %1$s Apel respins de la %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Mod notificări Danmaku + Arată notificarea ca și comentariile de tip glonț aka glonț cât timp jocul este activ diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 1c28c9a8..c28f4d3b 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -74,7 +74,7 @@ Прозрачные без фона Включено Отключено - Default + По умолчанию Режим звонка Нет действия Автоответ @@ -82,6 +82,6 @@ Поступил звонок от %1$s Отклонён вызов от %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Режим уведомления Danmaku + Показывать уведомление в виде комментариев danmaku aka bullet, пока игра активна From f5724239def00fe7bd01cee48edeeb950337a4d0 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 1 Dec 2023 22:07:19 +0200 Subject: [PATCH 110/214] New translations (#60) --- app/src/main/res/values-ru-rRU/strings.xml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index c28f4d3b..98987668 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -24,14 +24,14 @@ Предотвращение появления полноэкранных событий, таких как входящие вызовы Не отключать экран Блокировать жесты - Отключить автоматическую яркость - Отключить свайп для скриншота + Отключить автояркость + Отключить снимок экрана тремя пальцами Отключить отладку по USB Уровень прозрачности меню игрового режима Режим уведомлений Не показывать - Показывать в виде всплывающих уведомлений + Всплывающие уведомления Новый стиль уведомлений Прозрачные без фона @@ -43,14 +43,14 @@ Библиотека Добавить - Выберите свою игру + Выберите игру Поиск Вы действительно хотите удалить %1$s из своего списка игр? Настроить игру Предпочтительный режим Использовать ANGLE (эксперементально) - Использование рендерера ANGLE вместо собственных драйверов GLES.\nВНИМАНИЕ!! Может ломать игровую графику, использовать с осторожностью! + Использование отрисовку ANGLE вместо собственных драйверов GLES.\nВНИМАНИЕ!! Может ломать игровую графику, использовать с осторожностью! ANGLE недоступен в вашей системе Удалить %1$s из библиотеки Не поддерживается @@ -67,7 +67,7 @@ Доступная память: %1$d\/%2$d MB Режим - Информация о FPS + кадр/сек Скрыть Всплывающее уведомление Новый стиль уведомлений @@ -75,13 +75,13 @@ Включено Отключено По умолчанию - Режим звонка - Нет действия + Режим вызова + Без действий Автоответ Автосброс Поступил звонок от %1$s Отклонён вызов от %1$s - Режим уведомления Danmaku - Показывать уведомление в виде комментариев danmaku aka bullet, пока игра активна + Режим прозрачных уведомлений + Показывать уведомление в виде прозрачных комментариев, пока игра активна From 7fa19cba343095b695c8218db3ba20cd08ab3012 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 2 Dec 2023 17:00:27 +0530 Subject: [PATCH 111/214] GameSpace: Fix NPE in PanelView Log: 11-30 22:39:23.443 E/OpenGLRenderer(20239): Unable to match the desired swap behavior. 11-30 22:39:23.443 D/AndroidRuntime(20239): Shutting down VM 11-30 22:39:23.444 E/AndroidRuntime(20239): FATAL EXCEPTION: main 11-30 22:39:23.444 E/AndroidRuntime(20239): Process: io.chaldeaprjkt.gamespace, PID: 20239 11-30 22:39:23.444 E/AndroidRuntime(20239): java.lang.IllegalArgumentException: Cannot coerce value to an empty range: maximum -22 is less than minimum 54. 11-30 22:39:23.444 E/AndroidRuntime(20239): at kotlin.ranges.RangesKt___RangesKt.coerceIn(_Ranges.kt:1413) 11-30 22:39:23.444 E/AndroidRuntime(20239): at kotlin.ranges.RangesKt.coerceIn(Unknown Source:0) 11-30 22:39:23.444 E/AndroidRuntime(20239): at io.chaldeaprjkt.gamespace.widget.PanelView$applyRelativeLocation$$inlined$doOnLayout$1.onLayoutChange(View.kt:54) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.View.layout(View.java:24442) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java:6439) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1891) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1729) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.widget.LinearLayout.onLayout(LinearLayout.java:1638) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.View.layout(View.java:24421) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.ViewGroup.layout(ViewGroup.java:6439) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:4258) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3583) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2465) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9309) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1339) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1348) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.Choreographer.doCallbacks(Choreographer.java:952) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.Choreographer.doFrame(Choreographer.java:882) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1322) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.os.Handler.handleCallback(Handler.java:958) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.os.Handler.dispatchMessage(Handler.java:99) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.os.Looper.loopOnce(Looper.java:205) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.os.Looper.loop(Looper.java:294) 11-30 22:39:23.444 E/AndroidRuntime(20239): at android.app.ActivityThread.main(ActivityThread.java:8172) 11-30 22:39:23.444 E/AndroidRuntime(20239): at java.lang.reflect.Method.invoke(Native Method) 11-30 22:39:23.444 E/AndroidRuntime(20239): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) 11-30 22:39:23.444 E/AndroidRuntime(20239): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878) 11-30 22:39:23.449 I/DropBoxManagerService( 1720): add tag=system_app_crash isTagEnabled=true flags=0x2 Signed-off-by: Pranav Vashi --- .../main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index 268652a5..8032840b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -51,7 +51,11 @@ class PanelView @JvmOverloads constructor( val safeArea = rootWindowInsets.getInsets(WindowInsets.Type.systemBars()) val minY = safeArea.top + 16.dp val maxY = safeArea.top + (parent as View).height - safeArea.bottom - height - 16.dp - y = relativeY.coerceIn(minY, maxY).toFloat() + if (minY > maxY) { + y = relativeY.coerceIn(maxY, minY).toFloat() + } else { + y = relativeY.coerceIn(minY, maxY).toFloat() + } } } } From 33242de8019a02b0d8d5a8ada967be3405f45d27 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 10 Dec 2023 17:04:10 +0200 Subject: [PATCH 112/214] New Crowdin updates (#61) * New translations strings.xml (Hebrew) * New translations strings.xml (Hebrew) --- app/src/main/res/values-iw-rIL/strings.xml | 102 ++++++++++----------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index f08ef916..df85c1b6 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -16,72 +16,72 @@ limitations under the License. --> - Game Space - Manage your gaming setup + מרכז משחקים + נהל את הגדרות המשחק שלך - In-game options - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture - Disable auto-brightness - Disable swipe to screenshot - Disable USB debugging + הגדרות משחקים + חסום התראות קופצות במסך מלא + חסום התראות קופצות במסך מלא כולל שיחות טלפון + השאר פועל + נעל מחוות + בטל בהירות אוטומטית + בטל מחוות מסך מגע + למנוע איתור באגים Overlay menu opacity level - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + מצב התראה + אל תראה + הצג כ Heads up + הצג כ reTicker + הצג כ Danmaku - Ringer mode - Silent - Vibrate - Normal - Do not change + מצב צלצול + שקט + רטט + רגיל + ללא שינוי - Library - Add - Pick your game - Search - Are you sure you want to remove %1$s from your game list? + ספריה + הוסף + בחר משחק + חיפוש + האם אתה בטוח שאתה רוצה להסיר את %1$s מרשימת המשחקים? - Configure game - Preferred mode + הגדרות משחק + מצב מועדף Use ANGLE (experimental) Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! ANGLE is not available on your system - Remove %1$s from library - Unsupported - Standard - Performance - Battery + הסר את %1$s מהספריה + לא נתמך + סטנדרטי + ביצועים + סוללה - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set + ערך: %s + כברירת מחדל + ברירת מחדל %s\n. לחיצה ממושכת להגדרה + ערך ברירת מחדל מוגדר - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + סוללה: %1$d%% + זכרון זמין: %1$d%2$d MB - Mode - FPS info - Hide + מצב + מידע על FPS + הסתר Heads Up reTicker Danmaku - Enabled - Disabled - Default - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + מופעל + מושבת + ברירת המחדל + מצב שיחות + ללא פעולה + מענה אוטומטי + דחיה אוטומטית של השיחה + קבל שיחות מ%1$s + דחה שיחות מ%1$s - Danmaku Notification mode + מצב התראה Danmaku Show notification as danmaku aka bullet comments while game is active From fe8c8ea56090d6f0c73546d26b570991ee9e0eaf Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 20 Dec 2023 08:41:38 +0200 Subject: [PATCH 113/214] New translations (#63) --- app/src/main/res/values-hu-rHU/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index c5c117ee..0fcf2b45 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -74,14 +74,14 @@ Danmaku Engedélyezve Letiltva - Default - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Alapértelmezett + Hívás mód + Nincs művelet + Automata válasz + Automata elutasítás + Hívás fogadva %1$s-tól + Hívás elutasítva %1$s-tól - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Danmaku Értesítő mód + Értesítések danmakuként mutatása, avagy kommentek kilövése játék mód közben From 2da26a5fbbb1c2488cf4e88fcf9838f6d943aec8 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 31 Dec 2023 12:48:00 +0200 Subject: [PATCH 114/214] New Crowdin updates (#65) * New translations strings.xml (Russian) * New translations strings.xml (Russian) --- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 98987668..9777d77a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Игровое Пространство + Поиграем? Настройка игровых возможностей Настройки игры @@ -27,7 +27,7 @@ Отключить автояркость Отключить снимок экрана тремя пальцами Отключить отладку по USB - Уровень прозрачности меню игрового режима + Уровень прозрачности панели Режим уведомлений Не показывать From c8d31e34421c10dd50a4b7599585a1d955efce2b Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 1 Jan 2024 06:07:47 +0530 Subject: [PATCH 115/214] Revert "Remove unimplemented notification function" This reverts commit 947b4d7fea61b4412ca3d6541fb059c073e2ce5a. --- .../io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 3367c80a..9d4cca28 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -32,7 +32,7 @@ class DanmakuServiceListener : NotificationListenerService() { var danmakuServiceInterface: DanmakuServiceInterface? = null override fun onNotificationPosted(sbn: StatusBarNotification) { - if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing) return + if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return val extras = sbn.notification.extras val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) From ceec4fa924e06ce9bb9fdff4bb9ad8bdf0f3d30c Mon Sep 17 00:00:00 2001 From: mukesh22584 Date: Tue, 2 Jan 2024 21:12:13 +0530 Subject: [PATCH 116/214] GameSpace: Update icon - Change background color - Add monochrome icon support - Remove unused background drawable --- app/src/main/res/drawable/ic_launcher.xml | 3 +- .../res/drawable/ic_launcher_background.xml | 74 ------------------- .../res/drawable/ic_launcher_foreground.xml | 30 ++------ app/src/main/res/values/colors.xml | 1 + 4 files changed, 11 insertions(+), 97 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_launcher_background.xml diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml index 6fcf5044..66d289fd 100644 --- a/app/src/main/res/drawable/ic_launcher.xml +++ b/app/src/main/res/drawable/ic_launcher.xml @@ -1,5 +1,6 @@ - + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index fcaf7197..00000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index d7c34421..abd869d9 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,24 +1,10 @@ - - - - - - + android:width="512dp" + android:height="512dp" + android:viewportWidth="512" + android:viewportHeight="512"> + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index fa9957ae..e56b3e07 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -16,4 +16,5 @@ #000000 @android:color/system_accent1_400 #c0c0c0 + #ffc000 From e38e08c8ad0d7539c6af65b66e2241d99f3a4f29 Mon Sep 17 00:00:00 2001 From: mukesh22584 Date: Fri, 5 Jan 2024 19:10:33 +0530 Subject: [PATCH 117/214] GameSpace: Use same illustration for dark theme too - Also update animation --- app/src/main/res/raw-night/game_settings_illustration.json | 1 - app/src/main/res/raw/game_settings_illustration.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 app/src/main/res/raw-night/game_settings_illustration.json diff --git a/app/src/main/res/raw-night/game_settings_illustration.json b/app/src/main/res/raw-night/game_settings_illustration.json deleted file mode 100644 index a5dbc6db..00000000 --- a/app/src/main/res/raw-night/game_settings_illustration.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.7.8","fr":30,"ip":0,"op":240,"w":412,"h":300,"nm":"GameDashboard_anim_v7_dark","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Close btn pulse","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":145,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":155,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":165,"s":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":331,"s":[100]},{"t":343,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[251.845,57.941,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":155,"s":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":165,"s":[110,110,100]},{"t":175,"s":[200,200,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.541176470588,0.705882352941,0.972549019608,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue300","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue300"}],"ip":145,"op":176,"st":105,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Game btn pulse","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[70]},{"t":70,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[248.345,149.941,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[200,200,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[110,110,100]},{"t":70,"s":[200,200,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.541176470588,0.705882352941,0.972549019608,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue300","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue300"}],"ip":40,"op":71,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Game icn pressed","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[100]},{"t":65,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150,0],"ix":2,"l":2},"a":{"a":0,"k":[12,12.25,0],"ix":1,"l":2},"s":{"a":0,"k":[90,90,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.552]],"o":[[0.553,0],[0,0.552],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[15,9.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".black","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"black"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.553]],"o":[[0.553,0],[0,0.553],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".black","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"black"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.5,-2.5],[-0.5,-2.5],[-0.5,-0.5],[-2.5,-0.5],[-2.5,0.5],[-0.5,0.5],[-0.5,2.5],[0.5,2.5],[0.5,0.5],[2.5,0.5],[2.5,-0.5],[0.5,-0.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.5,10.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".black","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"black"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.069,-0.09],[0.21,0],[0.1,0.101],[0,0],[0,0],[0,0],[0.15,0],[0.08,0.091],[-0.031,0.21],[0,0],[-0.99,0],[0,0],[-0.139,-0.98],[0,0]],"o":[[-0.08,0.091],[-0.149,0],[0,0],[0,0],[0,0],[-0.1,0.101],[-0.209,0],[-0.081,-0.09],[0,0],[0.149,-0.969],[0,0],[0.989,0],[0,0],[0.03,0.201]],"v":[[7.48,4.81],[7.059,5],[6.669,4.84],[3.831,2],[-3.831,2],[-6.669,4.84],[-7.061,5],[-7.479,4.81],[-7.609,4.371],[-6.52,-3.29],[-4.529,-5],[4.531,-5],[6.51,-3.279],[7.6,4.38]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.219,1.54],[0,0],[1.989,0],[0,0],[0.281,-1.971],[0,0],[-1.549,0],[-0.481,0.481],[0,0],[0,0],[0,0],[-0.67,0]],"o":[[0,0],[-0.281,-1.971],[0,0],[-1.99,0],[0,0],[-0.219,1.54],[0.681,0],[0,0],[0,0],[0,0],[0.48,0.481],[1.561,0]],"v":[[9.581,4.09],[8.49,-3.569],[4.531,-7],[-4.529,-7],[-8.49,-3.569],[-9.581,4.09],[-7.061,7],[-5.26,6.25],[-2.999,4],[3.001,4],[5.251,6.25],[7.049,7]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".black","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"black"}],"ip":55,"op":66,"st":55,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Game btn pressed","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":230,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":235,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":311,"s":[100]},{"t":323,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150.441,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":0,"k":[140,140,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue400","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue400"}],"ip":55,"op":66,"st":85,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Game icn normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"t":180,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150,0],"ix":2,"l":2},"a":{"a":0,"k":[12,12.25,0],"ix":1,"l":2},"s":{"a":0,"k":[90,90,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.552]],"o":[[0.553,0],[0,0.552],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[15,9.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue400","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue400"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.553,0],[0,-0.552],[0.553,0],[0,0.553]],"o":[[0.553,0],[0,0.553],[-0.553,0],[0,-0.552]],"v":[[0,-1],[1,0],[0,1],[-1,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[17,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue400","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"blue400"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.5,-2.5],[-0.5,-2.5],[-0.5,-0.5],[-2.5,-0.5],[-2.5,0.5],[-0.5,0.5],[-0.5,2.5],[0.5,2.5],[0.5,0.5],[2.5,0.5],[2.5,-0.5],[0.5,-0.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.5,10.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue400","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"blue400"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.069,-0.09],[0.21,0],[0.1,0.101],[0,0],[0,0],[0,0],[0.15,0],[0.08,0.091],[-0.031,0.21],[0,0],[-0.99,0],[0,0],[-0.139,-0.98],[0,0]],"o":[[-0.08,0.091],[-0.149,0],[0,0],[0,0],[0,0],[-0.1,0.101],[-0.209,0],[-0.081,-0.09],[0,0],[0.149,-0.969],[0,0],[0.989,0],[0,0],[0.03,0.201]],"v":[[7.48,4.81],[7.059,5],[6.669,4.84],[3.831,2],[-3.831,2],[-6.669,4.84],[-7.061,5],[-7.479,4.81],[-7.609,4.371],[-6.52,-3.29],[-4.529,-5],[4.531,-5],[6.51,-3.279],[7.6,4.38]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.219,1.54],[0,0],[1.989,0],[0,0],[0.281,-1.971],[0,0],[-1.549,0],[-0.481,0.481],[0,0],[0,0],[0,0],[-0.67,0]],"o":[[0,0],[-0.281,-1.971],[0,0],[-1.99,0],[0,0],[-0.219,1.54],[0.681,0],[0,0],[0,0],[0,0],[0.48,0.481],[1.561,0]],"v":[[9.581,4.09],[8.49,-3.569],[4.531,-7],[-4.529,-7],[-8.49,-3.569],[-9.581,4.09],[-7.061,7],[-5.26,6.25],[-2.999,4],[3.001,4],[5.251,6.25],[7.049,7]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12,12.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue400","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"blue400"}],"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Game btn normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":180,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":256,"s":[100]},{"t":268,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[247.641,150.441,0],"ix":2,"l":2},"a":{"a":0,"k":[228.922,131.908,0],"ix":1,"l":2},"s":{"a":0,"k":[140,140,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.717],[5.717,0],[0,-5.716],[-5.717,0]],"o":[[0,-5.716],[-5.717,0],[0,5.717],[5.717,0]],"v":[[10.351,0],[0,-10.351],[-10.351,0],[0,10.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.129411764706,0.141176470588,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[228.922,131.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey900","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey900"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Close btn","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[251.5,58.375,0],"ix":2,"l":2},"a":{"a":0,"k":[43.75,-88.125,0],"ix":1,"l":2},"s":{"a":0,"k":[60,60,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"f","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[50.75,-93.715],[49.34,-95.125],[43.75,-89.535],[38.16,-95.125],[36.75,-93.715],[42.34,-88.125],[36.75,-82.535],[38.16,-81.125],[43.75,-86.715],[49.34,-81.125],[50.75,-82.535],[45.16,-88.125]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[22.628,21.513],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.814,-88.244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".blue400","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"blue400"}],"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"UI Grid","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[206,162,0],"to":[0,-1.667,0],"ti":[0,1.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[206,152,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[206,152,0],"to":[0,1.667,0],"ti":[0,-1.667,0]},{"t":180,"s":[206,162,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28,34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-30,34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[50,50],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":7,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-30,-25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"UI Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[206,170,0],"to":[0,-1.667,0],"ti":[0,1.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[206,160,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[206,160,0],"to":[0,1.667,0],"ti":[0,-1.667,0]},{"t":180,"s":[206,170,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[10,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-15,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960784314,0.525490196078,0.545098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-40,-80],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey600","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"cl":"grey600"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"UI Bg","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":180,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-5.514],[0,0],[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0]],"o":[[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0],[0,0],[0,-5.514],[0,0]],"v":[[51.398,-119.204],[61.398,-109.204],[61.398,109.204],[51.398,119.204],[-51.398,119.204],[-61.398,109.204],[-61.398,-109.204],[-51.398,-119.204]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[186.201,142.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey800","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey800"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"HW Vol","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.271,-12.669],[-1.271,-12.669],[-1.271,12.669],[1.271,12.669]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.372549019608,0.388235294118,0.407843137255,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.6,106.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey700","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey700"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"HW Power","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.271,-6.357],[-1.271,-6.357],[-1.271,6.357],[1.271,6.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.372549019608,0.388235294118,0.407843137255,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.6,69.223],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey700","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey700"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"HW Frame","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.627,0],[0,0],[0,-6.627],[0,0],[-6.628,0],[0,0],[0,6.628],[0,0]],"o":[[0,0],[-6.628,0],[0,0],[0,6.628],[0,0],[6.627,0],[0,0],[0,-6.627]],"v":[[51.398,-121.204],[-51.398,-121.204],[-63.398,-109.204],[-63.398,109.204],[-51.398,121.204],[51.398,121.204],[63.398,109.204],[63.398,-109.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-5.514],[0,0],[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0]],"o":[[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0],[0,0],[0,-5.514],[0,0]],"v":[[51.398,-119.204],[61.398,-109.204],[61.398,109.204],[51.398,119.204],[-51.398,119.204],[-61.398,109.204],[-61.398,-109.204],[-51.398,-119.204]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.372549019608,0.388235294118,0.407843137255,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[186.201,142.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".grey700","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"grey700"}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Phone Bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-5.514],[0,0],[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0]],"o":[[5.514,0],[0,0],[0,5.513],[0,0],[-5.515,0],[0,0],[0,-5.514],[0,0]],"v":[[51.398,-119.204],[61.398,-109.204],[61.398,109.204],[51.398,119.204],[-51.398,119.204],[-61.398,109.204],[-61.398,-109.204],[-51.398,-119.204]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[186.201,142.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Black","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":240,"st":30,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,160,0],"ix":2,"l":2},"a":{"a":0,"k":[187.577,141.967,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[412,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":28,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[187.971,131.945],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Bg","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":240,"st":30,"bm":0}],"markers":[{"tm":60,"cm":"OPEN","dr":0},{"tm":210,"cm":"CLOSE","dr":0}]} \ No newline at end of file diff --git a/app/src/main/res/raw/game_settings_illustration.json b/app/src/main/res/raw/game_settings_illustration.json index 8a7d2f46..a0215b44 100644 --- a/app/src/main/res/raw/game_settings_illustration.json +++ b/app/src/main/res/raw/game_settings_illustration.json @@ -1 +1 @@ -{"v":"5.7.7","fr":29,"ip":0,"op":110,"w":200,"h":200,"nm":"toturial_fps01","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"fps 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[100]},{"t":19,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46.442,90,0],"ix":2,"l":2},"a":{"a":0,"k":[6.471,6.471,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":6,"s":[43,43,100]},{"t":11,"s":[92,92,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[160,160],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":43,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"fps","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"t":35,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46.442,90,0],"ix":2,"l":2},"a":{"a":0,"k":[6.471,6.471,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.326,0],[0.26,0.092],[0.161,0.147],[0,0],[-0.21,-0.082],[-0.208,0],[-0.111,0.084],[0,0.139],[0.064,0.068],[0.104,0.041],[0.176,0.049],[0.172,0.078],[0.122,0.172],[0,0.287],[-0.111,0.203],[-0.225,0.119],[-0.323,0],[-0.215,-0.066],[-0.161,-0.123],[0,0],[0.327,0],[0.109,-0.09],[0,-0.147],[-0.125,-0.071],[-0.262,-0.07],[-0.172,-0.078],[-0.123,-0.168],[0,-0.287],[0.113,-0.204],[0.226,-0.119]],"o":[[-0.28,0],[-0.26,-0.093],[0,0],[0.151,0.135],[0.21,0.082],[0.233,0],[0.111,-0.084],[0,-0.103],[-0.065,-0.067],[-0.104,-0.041],[-0.269,-0.078],[-0.172,-0.078],[-0.122,-0.173],[0,-0.251],[0.111,-0.203],[0.224,-0.119],[0.226,0],[0.215,0.065],[0,0],[-0.326,-0.225],[-0.229,0],[-0.109,0.091],[0,0.148],[0.126,0.072],[0.269,0.078],[0.172,0.078],[0.124,0.168],[0,0.246],[-0.112,0.203],[-0.226,0.119]],"v":[[-0.033,2.227],[-0.842,2.09],[-1.473,1.73],[-1.195,0.979],[-0.654,1.305],[-0.027,1.428],[0.49,1.301],[0.656,0.967],[0.56,0.71],[0.307,0.548],[-0.113,0.413],[-0.775,0.178],[-1.215,-0.197],[-1.398,-0.885],[-1.232,-1.566],[-0.729,-2.048],[0.092,-2.227],[0.753,-2.128],[1.318,-1.846],[1.064,-1.089],[0.085,-1.428],[-0.423,-1.292],[-0.587,-0.936],[-0.398,-0.607],[0.182,-0.393],[0.844,-0.16],[1.288,0.21],[1.473,0.893],[1.303,1.566],[0.796,2.049]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.631,6.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.129,0.113],[0,0.208],[0.129,0.112],[0.244,0],[0,0],[0,0]],"o":[[0.244,0],[0.129,-0.113],[0,-0.211],[-0.129,-0.113],[0,0],[0,0],[0,0]],"v":[[-0.153,-0.21],[0.406,-0.379],[0.6,-0.861],[0.406,-1.347],[-0.153,-1.517],[-0.61,-1.517],[-0.61,-0.21]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.231,-0.111],[-0.126,-0.204],[0,-0.279],[0.125,-0.207],[0.231,-0.109],[0.312,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.312,0],[0.231,0.111],[0.125,0.205],[0,0.276],[-0.126,0.206],[-0.231,0.109],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.11,-2.227],[0.705,-2.06],[1.24,-1.587],[1.428,-0.861],[1.24,-0.137],[0.705,0.336],[-0.11,0.5],[-0.61,0.5],[-0.61,2.227],[-1.428,2.227],[-1.428,-2.227]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.447,6.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.411,-1.528],[-0.411,-0.533],[1.014,-0.533],[1.014,0.167],[-0.411,0.167],[-0.411,2.227],[-1.229,2.227],[-1.229,-2.227],[1.229,-2.227],[1.229,-1.528]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.111,6.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"sidebar","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"t":35,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[45.882,100.588,0],"ix":2,"l":2},"a":{"a":0,"k":[29.412,40.588,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 9","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 10","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.657,0],[0,0],[0,-1.657],[0,0],[1.656,0],[0,0],[0,1.657],[0,0]],"o":[[0,0],[1.656,0],[0,0],[0,1.657],[0,0],[-1.657,0],[0,0],[0,-1.657]],"v":[[-26.412,-40.588],[26.412,-40.588],[29.412,-37.588],[29.412,37.588],[26.412,40.588],[-26.412,40.588],[-29.412,37.588],[-29.412,-37.588]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.412,40.588],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 12","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"60","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"t":108,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.316,78.323,0],"ix":2,"l":2},"a":{"a":0,"k":[7.188,5.113,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.301,0.49],[0.652,0],[0.297,-0.487],[0.01,-1.011],[0,0],[-0.313,-0.514],[-0.633,0],[-0.303,0.484],[-0.014,1.039]],"o":[[0,-1.071],[-0.301,-0.489],[-0.646,0],[-0.296,0.488],[0,0],[0,1.075],[0.311,0.511],[0.625,0],[0.303,-0.483],[0,0]],"v":[[1.877,-0.998],[1.426,-3.34],[-0.003,-4.074],[-1.418,-3.343],[-1.876,-1.094],[-1.876,0.93],[-1.407,3.313],[0.011,4.081],[1.402,3.356],[1.877,1.073]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.506,-0.719],[1.076,0],[0.511,0.705],[0.019,1.4],[0,0],[-0.506,0.711],[-1.08,0],[-0.506,-0.686],[-0.014,-1.431]],"o":[[0,1.482],[-0.506,0.72],[-1.062,0],[-0.509,-0.703],[0,0],[0,-1.463],[0.506,-0.711],[1.071,0],[0.506,0.686],[0,0]],"v":[[3.142,0.731],[2.383,4.033],[0.011,5.113],[-2.348,4.057],[-3.141,0.902],[-3.141,-0.786],[-2.382,-4.047],[-0.003,-5.113],[2.362,-4.084],[3.142,-0.909]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[11.236,5.113],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.547,0],[0.364,-0.26],[0.141,-0.391],[0,0],[-0.37,-0.501],[-0.551,0],[-0.325,0.418],[0,0.679],[0.331,0.422]],"o":[[-0.434,0],[-0.366,0.259],[0,0],[0,0.82],[0.369,0.501],[0.57,0],[0.326,-0.419],[0,-0.684],[-0.33,-0.421]],"v":[[0.082,-0.564],[-1.114,-0.174],[-1.873,0.803],[-1.873,1.268],[-1.319,3.25],[0.061,4.002],[1.404,3.374],[1.894,1.726],[1.397,0.068]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.583,-0.566],[0.091,-1.026],[-0.907,0],[-0.516,-0.61],[0,-0.966],[0.558,-0.615],[0.939,0],[0.592,0.732],[0,1.154],[0,0],[-0.781,0.968],[-1.545,0.022]],"o":[[0,0],[0,0],[-0.985,0.018],[-0.584,0.565],[0.524,-0.602],[0.865,0],[0.518,0.611],[0,1.025],[-0.558,0.616],[-0.953,0],[-0.593,-0.731],[0,0],[0,-1.832],[0.783,-0.969],[0,0]],"v":[[1.743,-5.048],[1.743,-3.975],[1.511,-3.975],[-0.841,-3.1],[-1.853,-0.714],[0.294,-1.617],[2.368,-0.701],[3.145,1.665],[2.307,4.125],[0.061,5.048],[-2.256,3.951],[-3.145,1.124],[-3.145,0.639],[-1.973,-3.561],[1.518,-5.048]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.145,5.178],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"cycle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"t":108,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.317,78.323,0],"ix":2,"l":2},"a":{"a":0,"k":[19.074,19.074,0],"ix":1,"l":2},"s":{"a":0,"k":[84,84,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-10.353,0],[0,-10.353],[10.353,0],[0,10.352]],"o":[[10.353,0],[0,10.352],[-10.353,0],[0,-10.353]],"v":[[0,-18.824],[18.824,0.001],[0,18.824],[-18.824,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.074,19.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2,"l":2},"a":{"a":0,"k":[99.729,93.191,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,2.603],[0,0],[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0]],"o":[[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0],[0,2.602],[0,0],[0,0]],"v":[[-84.45,44.874],[-89.207,40.117],[-89.207,-40.117],[-84.45,-44.874],[84.451,-44.874],[89.207,-40.117],[89.207,40.028],[84.451,44.784],[-84.45,44.784]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.101960791794,0.090196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.551,92.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.075,5.481],[0,0],[1.075,5.392],[5.556,0],[0,0],[1.165,-5.481],[0,0],[-1.075,-5.481],[-5.556,0],[0,0]],"o":[[1.075,-5.391],[0,0],[-1.075,-5.481],[0,0],[-5.557,0],[-1.075,4.942],[0,0],[1.075,5.481],[0,0],[5.556,-0.09]],"v":[[97.866,38.593],[99.479,-0.045],[97.866,-38.683],[86.395,-48.118],[-86.484,-48.118],[-97.956,-38.773],[-99.479,0.045],[-97.866,38.683],[-86.395,48.118],[86.395,48.118]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180392156863,0.192156877705,0.20000001496,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.729,93.191],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-51.33,0],[0,-51.33],[51.33,0],[0,51.33]],"o":[[51.33,0],[0,51.33],[-51.33,0],[0,-51.33]],"v":[[0,-92.941],[92.941,0],[0,92.941],[-92.941,0]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.301960784314,0.270588235294,0.258823529412,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.729,93.191],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":176,"st":0,"bm":0}],"markers":[]} +{"nm":"toturial_fps01","ddd":0,"h":200,"w":200,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"fps 2","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[6.471,6.471,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[43,43,100],"t":6},{"s":[92,92,100],"t":11}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[46.442,90,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":3},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":8},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":14},{"s":[0],"t":19}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 4","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.471,6.471],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 6","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[160,160],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.471,6.471],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":43,"ix":7}}]}],"ind":1},{"ty":4,"nm":"fps","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[6.471,6.471,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[46.442,90,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":18},{"s":[0],"t":35}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.326,0],[0.26,0.092],[0.161,0.147],[0,0],[-0.21,-0.082],[-0.208,0],[-0.111,0.084],[0,0.139],[0.064,0.068],[0.104,0.041],[0.176,0.049],[0.172,0.078],[0.122,0.172],[0,0.287],[-0.111,0.203],[-0.225,0.119],[-0.323,0],[-0.215,-0.066],[-0.161,-0.123],[0,0],[0.327,0],[0.109,-0.09],[0,-0.147],[-0.125,-0.071],[-0.262,-0.07],[-0.172,-0.078],[-0.123,-0.168],[0,-0.287],[0.113,-0.204],[0.226,-0.119]],"o":[[-0.28,0],[-0.26,-0.093],[0,0],[0.151,0.135],[0.21,0.082],[0.233,0],[0.111,-0.084],[0,-0.103],[-0.065,-0.067],[-0.104,-0.041],[-0.269,-0.078],[-0.172,-0.078],[-0.122,-0.173],[0,-0.251],[0.111,-0.203],[0.224,-0.119],[0.226,0],[0.215,0.065],[0,0],[-0.326,-0.225],[-0.229,0],[-0.109,0.091],[0,0.148],[0.126,0.072],[0.269,0.078],[0.172,0.078],[0.124,0.168],[0,0.246],[-0.112,0.203],[-0.226,0.119]],"v":[[-0.033,2.227],[-0.842,2.09],[-1.473,1.73],[-1.195,0.979],[-0.654,1.305],[-0.027,1.428],[0.49,1.301],[0.656,0.967],[0.56,0.71],[0.307,0.548],[-0.113,0.413],[-0.775,0.178],[-1.215,-0.197],[-1.398,-0.885],[-1.232,-1.566],[-0.729,-2.048],[0.092,-2.227],[0.753,-2.128],[1.318,-1.846],[1.064,-1.089],[0.085,-1.428],[-0.423,-1.292],[-0.587,-0.936],[-0.398,-0.607],[0.182,-0.393],[0.844,-0.16],[1.288,0.21],[1.473,0.893],[1.303,1.566],[0.796,2.049]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[9.631,6.607],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":5,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.129,0.113],[0,0.208],[0.129,0.112],[0.244,0],[0,0],[0,0]],"o":[[0.244,0],[0.129,-0.113],[0,-0.211],[-0.129,-0.113],[0,0],[0,0],[0,0]],"v":[[-0.153,-0.21],[0.406,-0.379],[0.6,-0.861],[0.406,-1.347],[-0.153,-1.517],[-0.61,-1.517],[-0.61,-0.21]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 2","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.231,-0.111],[-0.126,-0.204],[0,-0.279],[0.125,-0.207],[0.231,-0.109],[0.312,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.312,0],[0.231,0.111],[0.125,0.205],[0,0.276],[-0.126,0.206],[-0.231,0.109],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.11,-2.227],[0.705,-2.06],[1.24,-1.587],[1.428,-0.861],[1.24,-0.137],[0.705,0.336],[-0.11,0.5],[-0.61,0.5],[-0.61,2.227],[-1.428,2.227],[-1.428,-2.227]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":1},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 2","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.447,6.606],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 3","ix":3,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.411,-1.528],[-0.411,-0.533],[1.014,-0.533],[1.014,0.167],[-0.411,0.167],[-0.411,2.227],[-1.229,2.227],[-1.229,-2.227],[1.229,-2.227],[1.229,-1.528]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.111,6.606],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 4","ix":4,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.471,6.471],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"sidebar","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[29.412,40.588,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[45.882,100.588,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":18},{"s":[0],"t":35}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,65.294],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,47.647],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 3","ix":3,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,30],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 4","ix":4,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,12.353],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 5","ix":5,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30,65.294],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 6","ix":6,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30,47.647],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 7","ix":7,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30,12.353],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 8","ix":8,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,65.294],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 9","ix":9,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,47.647],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 10","ix":10,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,30],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 11","ix":11,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,12.353],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 12","ix":12,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.657,0],[0,0],[0,-1.657],[0,0],[1.656,0],[0,0],[0,1.657],[0,0]],"o":[[0,0],[1.656,0],[0,0],[0,1.657],[0,0],[-1.657,0],[0,0],[0,-1.657]],"v":[[-26.412,-40.588],[26.412,-40.588],[29.412,-37.588],[29.412,37.588],[26.412,40.588],[-26.412,40.588],[-29.412,37.588],[-29.412,-37.588]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[29.412,40.588],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"60","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[7.188,5.113,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[163.316,78.323,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":40},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":55},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":96},{"s":[0],"t":108}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.301,0.49],[0.652,0],[0.297,-0.487],[0.01,-1.011],[0,0],[-0.313,-0.514],[-0.633,0],[-0.303,0.484],[-0.014,1.039]],"o":[[0,-1.071],[-0.301,-0.489],[-0.646,0],[-0.296,0.488],[0,0],[0,1.075],[0.311,0.511],[0.625,0],[0.303,-0.483],[0,0]],"v":[[1.877,-0.998],[1.426,-3.34],[-0.003,-4.074],[-1.418,-3.343],[-1.876,-1.094],[-1.876,0.93],[-1.407,3.313],[0.011,4.081],[1.402,3.356],[1.877,1.073]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 2","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.506,-0.719],[1.076,0],[0.511,0.705],[0.019,1.4],[0,0],[-0.506,0.711],[-1.08,0],[-0.506,-0.686],[-0.014,-1.431]],"o":[[0,1.482],[-0.506,0.72],[-1.062,0],[-0.509,-0.703],[0,0],[0,-1.463],[0.506,-0.711],[1.071,0],[0.506,0.686],[0,0]],"v":[[3.142,0.731],[2.383,4.033],[0.011,5.113],[-2.348,4.057],[-3.141,0.902],[-3.141,-0.786],[-2.382,-4.047],[-0.003,-5.113],[2.362,-4.084],[3.142,-0.909]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[11.236,5.113],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":5,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.547,0],[0.364,-0.26],[0.141,-0.391],[0,0],[-0.37,-0.501],[-0.551,0],[-0.325,0.418],[0,0.679],[0.331,0.422]],"o":[[-0.434,0],[-0.366,0.259],[0,0],[0,0.82],[0.369,0.501],[0.57,0],[0.326,-0.419],[0,-0.684],[-0.33,-0.421]],"v":[[0.082,-0.564],[-1.114,-0.174],[-1.873,0.803],[-1.873,1.268],[-1.319,3.25],[0.061,4.002],[1.404,3.374],[1.894,1.726],[1.397,0.068]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 2","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0.583,-0.566],[0.091,-1.026],[-0.907,0],[-0.516,-0.61],[0,-0.966],[0.558,-0.615],[0.939,0],[0.592,0.732],[0,1.154],[0,0],[-0.781,0.968],[-1.545,0.022]],"o":[[0,0],[0,0],[-0.985,0.018],[-0.584,0.565],[0.524,-0.602],[0.865,0],[0.518,0.611],[0,1.025],[-0.558,0.616],[-0.953,0],[-0.593,-0.731],[0,0],[0,-1.832],[0.783,-0.969],[0,0]],"v":[[1.743,-5.048],[1.743,-3.975],[1.511,-3.975],[-0.841,-3.1],[-1.853,-0.714],[0.294,-1.617],[2.368,-0.701],[3.145,1.665],[2.307,4.125],[0.061,5.048],[-2.256,3.951],[-3.145,1.124],[-3.145,0.639],[-1.973,-3.561],[1.518,-5.048]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":1},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 2","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.145,5.178],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"cycle","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[19.074,19.074,0],"ix":1},"s":{"a":0,"k":[84,84,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[163.317,78.323,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":33},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":49},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":96},{"s":[0],"t":108}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-10.353,0],[0,-10.353],[10.353,0],[0,10.352]],"o":[[10.353,0],[0,10.352],[-10.353,0],[0,-10.353]],"v":[[0,-18.824],[18.824,0.001],[0,18.824],[-18.824,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[19.074,19.074],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5},{"ty":4,"nm":"bg","sr":1,"st":0,"op":176,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[99.729,93.191,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[100,100,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,2.603],[0,0],[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0]],"o":[[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0],[0,2.602],[0,0],[0,0]],"v":[[-84.45,44.874],[-89.207,40.117],[-89.207,-40.117],[-84.45,-44.874],[84.451,-44.874],[89.207,-40.117],[89.207,40.028],[84.451,44.784],[-84.45,44.784]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0,0,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[99.551,92.952],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.075,5.481],[0,0],[1.075,5.392],[5.556,0],[0,0],[1.165,-5.481],[0,0],[-1.075,-5.481],[-5.556,0],[0,0]],"o":[[1.075,-5.391],[0,0],[-1.075,-5.481],[0,0],[-5.557,0],[-1.075,4.942],[0,0],[1.075,5.481],[0,0],[5.556,-0.09]],"v":[[97.866,38.593],[99.479,-0.045],[97.866,-38.683],[86.395,-48.118],[-86.484,-48.118],[-97.956,-38.773],[-99.479,0.045],[-97.866,38.683],[-86.395,48.118],[86.395,48.118]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.698,0.698,0.698],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[99.729,93.191],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-51.33,0],[0,-51.33],[51.33,0],[0,51.33]],"o":[[51.33,0],[0,51.33],[-51.33,0],[0,-51.33]],"v":[[0,-92.941],[92.941,0],[0,92.941],[-92.941,0]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.9647,0.9725],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[99.729,93.191],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6}],"v":"5.7.7","fr":29,"op":110,"ip":0,"assets":[]} From 4b81092754c0414a023d3627faf0aca165aac6e2 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 20 Jan 2024 17:33:44 +0200 Subject: [PATCH 118/214] New translations (#68) --- app/src/main/res/values-pt-rBR/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index bc39edbe..f8081617 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -74,7 +74,7 @@ Danmaku Ativado Desativado - Default + Padrão Modo de chamada Nenhuma ação Atender automaticamente @@ -82,6 +82,6 @@ Chamada recebida de %1$s Chamada recusada de %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Modo de notificação Danmaku + Mostrar notificações como balões de comentários durante o jogo From d547042caee844fbbd6a7876097b7aefdb7cd7a9 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 21 Feb 2024 07:49:53 +0200 Subject: [PATCH 119/214] New Crowdin updates (#69) * New translations strings.xml (Finnish) * New translations strings.xml (Finnish) --- app/src/main/res/values-fi-rFI/strings.xml | 94 +++++++++++----------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index f08ef916..6f87e544 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -17,63 +17,63 @@ --> Game Space - Manage your gaming setup + Hallitse peliasetuksiasi - In-game options - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture - Disable auto-brightness - Disable swipe to screenshot - Disable USB debugging - Overlay menu opacity level + Pelin sisäiset asetukset + Estä koko näytön tapahtuma + Estää koko näytön tapahtumien, kuten saapuvien puhelujen näkymisen + Pysy hereillä + Lukitusele + Poista automaattinen kirkkaus käytöstä + Poista kuvakaappausten pyyhkäisyele käytöstä + Poista USB-vianetsintä käytöstä + Peittokuvavalikon läpinäkyvyystaso - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Ilmoitustila + Älä näytä + Näytä Heads up + Näytä reTickerinä + Näytä Danmaku - Ringer mode - Silent - Vibrate - Normal - Do not change + Soittotila + Äänetön + Värinä + Normaali + Älä muuta - Library - Add - Pick your game - Search - Are you sure you want to remove %1$s from your game list? + Peliluettelo + Lisää + Valitse pelisi + Etsi + Oletko varma, että haluat poistaa %1$s peliluettelostasi? - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library - Unsupported - Standard - Performance - Battery + Määritä peli + Ensisijainen tila + Käytä ANGLE (kokeellinen) + ANGLE-renderöijän käyttäminen natiivien GLES-ajurien sijaan.\nVAROITUS!!! Saattaa rikkoa pelin grafiikkaa, käytä varoen! + ANGLE ei ole käytettävissä järjestelmässäsi + Poista %1$s peliluettelosta + Ei tuettu + Vakio + Suorituskyky + Akku - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set + Arvo: %s + oletuksena + Oletusarvo: %s\nAseta napauttamalla pitkään + Oletusarvo asetettu - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Akku: %1$d%% + Käytettävissä oleva muisti: %1$d\/%2$d MB - Mode - FPS info - Hide - Heads Up + Tila + FPS-tiedot + Piilota + Leijuvat ilmoitukset reTicker Danmaku - Enabled - Disabled + Käytössä + Pois käytöstä Default Call mode No action From c53e94de1acc245c3d04a45d7f7b05f4c12724c9 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 23 Mar 2024 14:48:53 +0530 Subject: [PATCH 120/214] Revert "Revert "Remove unimplemented notification function"" This reverts commit c8d31e34421c10dd50a4b7599585a1d955efce2b. --- .../io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 9d4cca28..3367c80a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -32,7 +32,7 @@ class DanmakuServiceListener : NotificationListenerService() { var danmakuServiceInterface: DanmakuServiceInterface? = null override fun onNotificationPosted(sbn: StatusBarNotification) { - if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing) return val extras = sbn.notification.extras val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) From ee7f52b5f940eb37b28e2c8d2f92b0db6ed52049 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 23 Mar 2024 16:59:14 +0530 Subject: [PATCH 121/214] GameSpace: Fix A14 QPR2 compile issues Signed-off-by: Pranav Vashi --- .../chaldeaprjkt/gamespace/data/AppSettings.kt | 10 +++++----- .../gamespace/gamebar/CallListener.kt | 9 +++++---- .../gamespace/gamebar/DanmakuService.kt | 3 ++- .../gamespace/gamebar/GameBarService.kt | 18 +++++++++--------- .../gamespace/gamebar/GameBroadcastReceiver.kt | 4 ++-- .../gamespace/gamebar/SessionService.kt | 4 ++-- .../gamespace/widget/BatteryView.kt | 4 ++-- 7 files changed, 27 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index c2484784..c6a6536f 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * 2023 risingOS Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -59,12 +59,12 @@ class AppSettings @Inject constructor(private val context: Context) { set(value) = db.edit().putBoolean(KEY_DANMAKU_NOTIFICATION_MODE, value).apply() var callsMode: Int - get() = db.getString(KEY_CALLS_MODE, "0").toInt() - set(value) = db.edit().putString(KEY_CALLS_MODE, value.toString()).apply() + get() = db.getInt(KEY_CALLS_MODE, 0) + set(value) = db.edit().putInt(KEY_CALLS_MODE, value).apply() var ringerMode: Int - get() = db.getString(KEY_RINGER_MODE, "3").toInt() - set(value) = db.edit().putString(KEY_RINGER_MODE, value.toString()).apply() + get() = db.getInt(KEY_RINGER_MODE, 3) + set(value) = db.edit().putInt(KEY_RINGER_MODE, value).apply() var menuOpacity: Int get() = db.getInt(KEY_MENU_OPACITY, 100) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt index 53e5c95a..4d85f4cf 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt @@ -2,6 +2,7 @@ * Copyright (C) 2020 The exTHmUI Open Source Project * Copyright (C) 2021 AOSP-Krypton Project * Copyright (C) 2022 Nameless-AOSP Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,9 +48,9 @@ class CallListener @Inject constructor( private val appSettings: AppSettings ) { - private val audioManager = context.getSystemService(AudioManager::class.java) - private val telephonyManager = context.getSystemService(TelephonyManager::class.java) - private val telecomManager = context.getSystemService(TelecomManager::class.java) + private val audioManager = context.getSystemService(AudioManager::class.java)!! + private val telephonyManager = context.getSystemService(TelephonyManager::class.java)!! + private val telecomManager = context.getSystemService(TelecomManager::class.java)!! private val callsMode = appSettings.callsMode @@ -67,7 +68,7 @@ class CallListener @Inject constructor( private fun isHeadsetPluggedIn(): Boolean { val audioDeviceInfoArr: Array = - audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS) + audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)!! return audioDeviceInfoArr.any { it.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES || it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt index abf75452..636754a7 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt @@ -3,6 +3,7 @@ * Copyright (C) 2021 AOSP-Krypton Project * Copyright (C) 2022 Nameless-AOSP Project * Copyright (C) 2023 the risingOS android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,7 +74,7 @@ class DanmakuService @Inject constructor( isClickable = false } - private val windowManager: WindowManager = context.getSystemService(WindowManager::class.java) + private val windowManager: WindowManager = context.getSystemService(WindowManager::class.java)!! private val handler = Handler(Looper.getMainLooper()) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 7572057b..18c561a3 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -134,9 +134,9 @@ class GameBarService : Hilt_GameBarService() { super.onCreate() val frame = FrameLayout(this) rootBarView = LayoutInflater.from(this) - .inflate(R.layout.window_util, frame, false) - barView = rootBarView.findViewById(R.id.container_bar) - menuSwitcher = rootBarView.findViewById(R.id.action_menu_switcher) + .inflate(R.layout.window_util, frame, false)!! + barView = rootBarView.findViewById(R.id.container_bar)!! + menuSwitcher = rootBarView.findViewById(R.id.action_menu_switcher)!! danmakuService.init() } @@ -282,7 +282,7 @@ class GameBarService : Hilt_GameBarService() { private fun setupPanelView() { rootPanelView = LayoutInflater.from(this) .inflate(R.layout.window_panel, FrameLayout(this), false) as LinearLayout - panelView = rootPanelView.findViewById(R.id.panel_view) + panelView = rootPanelView.findViewById(R.id.panel_view)!! panelView.alpha = appSettings.menuOpacity / 100f rootPanelView.setOnClickListener { showPanel = false @@ -345,7 +345,7 @@ class GameBarService : Hilt_GameBarService() { } private fun panelButton() { - val actionPanel = rootBarView.findViewById(R.id.action_panel) + val actionPanel = rootBarView.findViewById(R.id.action_panel)!! actionPanel.setOnClickListener { showPanel = !showPanel } @@ -356,15 +356,15 @@ class GameBarService : Hilt_GameBarService() { } private fun screenshotButton() { - val actionScreenshot = rootBarView.findViewById(R.id.action_screenshot) + val actionScreenshot = rootBarView.findViewById(R.id.action_screenshot)!! actionScreenshot.setOnClickListener { takeShot() } } private fun recorderButton() { - val actionRecorder = rootBarView.findViewById(R.id.action_record) - val recorder = screenUtils.recorder ?: let { actionRecorder.isVisible = false; return } + val actionRecorder = rootBarView.findViewById(R.id.action_record)!! + val recorder = screenUtils.recorder ?: let { actionRecorder?.isVisible = false; return } recorder.addRecordingCallback(object : IRecordingCallback.Stub() { override fun onRecordingStart() { handler.post { diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt index 3e50b7be..fddcff59 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,7 +36,7 @@ class GameBroadcastReceiver : BroadcastReceiver() { private fun Context.onGameStart(intent: Intent) { handler.post { resendBroadcast(intent) } - val app = intent.getStringExtra(SessionService.EXTRA_PACKAGE_NAME) + val app = intent.getStringExtra(SessionService.EXTRA_PACKAGE_NAME)!! SessionService.start(this, app) } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index d3fb4459..ae591ccc 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -141,7 +141,7 @@ class SessionService : Hilt_SessionService() { // something is not right, bailing out stopSelf() } - val app = commandIntent.getStringExtra(EXTRA_PACKAGE_NAME) + val app = commandIntent.getStringExtra(EXTRA_PACKAGE_NAME)!! session.register(app) applyGameModeConfig(app) gameBar.onGameStart() diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt index 24eb54d4..9db7dea9 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/BatteryView.kt @@ -1,7 +1,7 @@ /* * Copyright (C) 2020 The exTHmUI Open Source Project + * Copyright (C) 2022-2024 crDroid Android Project * 2021 AOSP-Krypton Project - * 2022 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,7 +48,7 @@ class BatteryView @JvmOverloads constructor( } init { - val batteryManager = context.getSystemService(BatteryManager::class.java) + val batteryManager = context.getSystemService(BatteryManager::class.java)!! text = context.getString( R.string.battery_format, batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) From 70183647a6abf41f3f32b1bcb1cd95fa9ff22d7d Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 25 Mar 2024 23:21:21 +0530 Subject: [PATCH 122/214] GameSpace: Update preferences to meet latest spec Signed-off-by: Pranav Vashi --- .../settings/PerAppSettingsActivity.kt | 2 +- .../settings/PerAppSettingsFragment.kt | 5 +-- .../gamespace/settings/SettingsActivity.kt | 2 +- .../gamespace/settings/SettingsFragment.kt | 2 +- app/src/main/res/xml/per_app_preferences.xml | 35 ++++++++++--------- app/src/main/res/xml/root_preferences.xml | 14 ++++---- 6 files changed, 31 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt index 7b8702c1..2fcebc7a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * Copyright (C) 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt index f000c746..f3ce44ec 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt @@ -1,5 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +24,7 @@ import android.view.View import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreference +import androidx.preference.SwitchPreferenceCompat import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.GameConfig @@ -72,7 +73,7 @@ class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), currentConfig?.mode?.let { value = it.toString() } onPreferenceChangeListener = this@PerAppSettingsFragment } - findPreference(PREF_USE_ANGLE)?.apply { + findPreference(PREF_USE_ANGLE)?.apply { context.resources?.getBoolean(R.bool.config_allow_per_app_angle_usage)?.let { isVisible = it if (!it) return@apply diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt index 2bc808a9..11ef57ca 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * Copyright (C) 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt index bc41afa1..a340f9f1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * 2022 crDroid Android Project + * Copyright (C) 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/app/src/main/res/xml/per_app_preferences.xml b/app/src/main/res/xml/per_app_preferences.xml index 45ac1caa..b95ae27b 100644 --- a/app/src/main/res/xml/per_app_preferences.xml +++ b/app/src/main/res/xml/per_app_preferences.xml @@ -1,19 +1,20 @@ - - + + @@ -30,7 +31,7 @@ android:summary="%s" android:title="@string/per_app_mode_title" /> - - Danmaku Notification mode + Modo de notificação Danmaku Show notification as danmaku aka bullet comments while game is active From e2dde42d9f452fa873b81a8f42dc66c7cb744590 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 5 Apr 2024 23:06:31 +0300 Subject: [PATCH 125/214] New translations (#72) --- app/src/main/res/values-ro-rRO/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index f38d5e95..753c4320 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -23,7 +23,7 @@ Blocare eveniment pe tot ecranul Împiedicați apariția evenimentelor de pe tot ecranul, cum ar fi apelurile primite Menține ecranul activ - Gest de blocare + Blochează gesturile Dezactivează luminozitatea automată Dezactivează glisarea pentru captură de ecran Dezactivează depanarea USB @@ -31,7 +31,7 @@ Modul notificare Nu se afișează - Arată ca HeadsUp + Arată ca atenționare Arată ca reTicker Arată ca Danmaku From 5e77e3fe1ae6ca20c3a7fe61491fe8f63f5a7e14 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 9 Apr 2024 22:24:43 +0530 Subject: [PATCH 126/214] GameSpace: Switch to FPS sysfs node * Seems like FPS callback method is broken on A14 QPR2. Use traditional method that we also use for FPS Info tile. * This requires proper path to be configured in XML and appropriate sepolicy. Signed-off-by: Pranav Vashi --- .../gamespace/widget/MenuSwitcher.kt | 102 +++++++++++++++--- app/src/main/res/values/config.xml | 6 ++ 2 files changed, 91 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt index 721274ef..9f55c136 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt @@ -1,13 +1,28 @@ +/* + * Copyright (C) 2024 crDroid Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package io.chaldeaprjkt.gamespace.widget -import android.app.ActivityTaskManager import android.content.Context +import android.os.Handler +import android.os.Looper import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater -import android.view.WindowManager import android.widget.LinearLayout import android.widget.TextView -import android.window.TaskFpsCallback import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.utils.di.ServiceViewEntryPoint import io.chaldeaprjkt.gamespace.utils.dp @@ -15,7 +30,13 @@ import io.chaldeaprjkt.gamespace.utils.entryPointOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch + +import java.io.File +import java.io.IOException +import java.io.RandomAccessFile import java.math.RoundingMode import java.text.DecimalFormat @@ -23,24 +44,69 @@ class MenuSwitcher @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { + private var fpsInfoNode: RandomAccessFile? = null + private var fpsReadJob: Job? = null + private var fpsReadInterval = 1000L + init { + val nodePath = resources.getString(R.string.config_fpsInfoSysNode) + val file = File(nodePath) + if (file.exists() && file.canRead()) { + try { + fpsInfoNode = RandomAccessFile(nodePath, "r") + } catch (e: IOException) { + Log.e(TAG, "Error while opening file: $nodePath", e) + } + } else { + Log.e(TAG, "$nodePath does not exist or is not readable") + } + fpsReadInterval = resources.getInteger(R.integer.config_fpsReadInterval).toLong() LayoutInflater.from(context).inflate(R.layout.bar_menu_switcher, this, true) } private val appSettings by lazy { context.entryPointOf().appSettings() } private val scope = CoroutineScope(Job() + Dispatchers.Main) - private val taskManager by lazy { ActivityTaskManager.getService() } - private val taskFpsCallback = object : TaskFpsCallback() { - override fun onFpsReported(fps: Float) { - if (isAttachedToWindow) { - onFrameUpdated(fps) - } + private val handler = Handler(Looper.getMainLooper()) + + private fun startReading() { + if (fpsReadJob != null) return + fpsReadJob = scope.launch { + do { + val fps = measureFps() + handler.post { + onFrameUpdated(fps) + } + delay(fpsReadInterval) + } while (isActive) } } - private val wm: WindowManager - get() = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + private fun stopReading() { + if (fpsReadJob == null) return + fpsReadJob?.cancel() + fpsReadJob = null + } + + private fun measureFps(): Float { + fpsInfoNode!!.seek(0L) + val measuredFps: String + try { + measuredFps = fpsInfoNode!!.readLine() + } catch (e: IOException) { + Log.e(TAG, "IOException while reading from FPS node, ${e.message}") + return -1.0f + } + try { + val fps: Float = measuredFps.trim().let { + if (it.contains(": ")) it.split("\\s+".toRegex())[1] else it + }.toFloat() + return fps + } catch (e: NumberFormatException) { + Log.e(TAG, "NumberFormatException occurred while parsing FPS info, ${e.message}") + } + return -1.0f + } private val content: TextView? get() = findViewById(R.id.menu_content) @@ -58,7 +124,7 @@ class MenuSwitcher @JvmOverloads constructor( } fun updateIconState(isExpanded: Boolean, location: Int) { - showFps = if (isExpanded) false else appSettings.showFps + showFps = if (isExpanded) false else fpsInfoNode != null && appSettings.showFps when { isExpanded -> R.drawable.ic_close location > 0 -> R.drawable.ic_arrow_right @@ -76,11 +142,9 @@ class MenuSwitcher @JvmOverloads constructor( private fun updateFrameRateBinding() { if (showFps) { - taskManager?.focusedRootTaskInfo?.taskId?.let { - wm.registerTaskFpsCallback(it, Runnable::run, taskFpsCallback) - } + startReading() } else { - wm.unregisterTaskFpsCallback(taskFpsCallback) + stopReading() } } @@ -96,6 +160,10 @@ class MenuSwitcher @JvmOverloads constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() - wm.unregisterTaskFpsCallback(taskFpsCallback) + stopReading() + } + + companion object { + private const val TAG = "MenuSwitcher" } } diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 5921d98c..e7a16f68 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -17,4 +17,10 @@ true + + + /sys/class/drm/sde-crtc-0/measured_fps + + + 1000 From eb3f0d2268c7174b80c00e0a018e07f50bef5d26 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 14 Apr 2024 09:31:45 +0530 Subject: [PATCH 127/214] Revert "Revert "Revert "Remove unimplemented notification function""" This reverts commit c53e94de1acc245c3d04a45d7f7b05f4c12724c9. --- .../io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 3367c80a..9d4cca28 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -32,7 +32,7 @@ class DanmakuServiceListener : NotificationListenerService() { var danmakuServiceInterface: DanmakuServiceInterface? = null override fun onNotificationPosted(sbn: StatusBarNotification) { - if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing) return + if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return val extras = sbn.notification.extras val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) From ea4717ae3f9cc82672d181ca1b6ffe113971f43a Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Sat, 11 Nov 2023 18:17:15 +0800 Subject: [PATCH 128/214] GameSpace: Update gson prebuilt namespace to gson-prebuilt-jar-2.9.1 Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/Android.bp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp index ba9aad54..cb0f8d87 100644 --- a/app/src/main/Android.bp +++ b/app/src/main/Android.bp @@ -24,7 +24,7 @@ android_app { "com.google.android.material_material", "kotlin-stdlib", "kotlinx-coroutines-android", - "gson", + "gson-prebuilt-jar-2.9.1", "hilt_android", "org.lineageos.platform.internal", "LineagePreferenceLib", From fb6e01cfda0d08a51e048875cd3f452e43e013aa Mon Sep 17 00:00:00 2001 From: Dhina17 Date: Fri, 15 Sep 2023 14:24:27 +0530 Subject: [PATCH 129/214] GameSpace: Don't set device_config property directly GTS don't allow any app to have the android.permission.WRITE_DEVICE_CONFIG permission i.e we can't modify device_config property from our game space. So write the property to our custom Settings.Secure.GAME_OVERLAY. Then observe the value changes and set the property to the device_config from GameManagerService. Since GameManagerService is a part of system_server, GTS will be happy. Change-Id: I6e223f60608cebe974f5e4bdb863e4c0e0817fc4 Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 3 ++- .../io/chaldeaprjkt/gamespace/utils/GameModeUtils.kt | 11 +++++++++-- .../privapp_whitelist_io.chaldeaprjkt.gamespace.xml | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index faa03682..96978727 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,12 +26,13 @@ - + + ? = null) { - DeviceConfig.setProperty( - DeviceConfig.NAMESPACE_GAME_OVERLAY, packageName, modeData?.asConfig(), false + // Separate key and value by ;; to identify them from + // com.android.server.app.GameManagerService for the device_config property. + // Example: com.libremobileos.game;;mode=2,downscaleFactor=0.7:mode=3,downscaleFactor=0.8 + val configValue = "${packageName};;${modeData?.asConfig()}" + Settings.Secure.putString( + context.contentResolver, + Settings.Secure.GAME_OVERLAY, + configValue ) } diff --git a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml index 92045243..c70eb0ca 100644 --- a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml +++ b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml @@ -21,5 +21,6 @@ + From 2cf4e9a32afb04708cec297272cfed8e1eb3de3c Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Sun, 26 Nov 2023 10:58:52 +0800 Subject: [PATCH 130/214] GameSpace: Update deprecated telephony APIs test: m GameSpace Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 2 + .../gamespace/gamebar/CallListener.kt | 136 ++++++++---------- .../gamespace/gamebar/SessionService.kt | 2 +- 3 files changed, 60 insertions(+), 80 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 96978727..b0294216 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,6 +33,8 @@ + + handleIncomingCall() + TelephonyManager.CALL_STATE_OFFHOOK -> handleOffhookState() + TelephonyManager.CALL_STATE_IDLE -> handleIdleState() + } + } + } fun init() { - telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) + telephonyManager.registerTelephonyCallback(context.mainExecutor, telephonyCallback) } - fun destory() { - telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) + fun destroy() { + telephonyManager.unregisterTelephonyCallback(telephonyCallback) } - private fun isHeadsetPluggedIn(): Boolean { - val audioDeviceInfoArr: Array = - audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)!! - return audioDeviceInfoArr.any { - it.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES || - it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || - it.type == AudioDeviceInfo.TYPE_USB_HEADSET + private fun handleIncomingCall() { + if (callsMode == 1) { + telecomManager.acceptRingingCall() + Toast.makeText(context, context.getString( + R.string.in_game_calls_received_number, ""), + Toast.LENGTH_SHORT).show() + } else if (callsMode == 2) { + telecomManager.endCall() + Toast.makeText(context, context.getString( + R.string.in_game_calls_rejected_number, ""), + Toast.LENGTH_SHORT).show() } } - private fun checkPermission(): Boolean { - if (ActivityCompat.checkSelfPermission( - context, - Manifest.permission.ANSWER_PHONE_CALLS - ) != PackageManager.PERMISSION_GRANTED - ) { - Log.e(TAG, "App does not have required permission ANSWER_PHONE_CALLS") - return false + private fun handleOffhookState() { + if (callsMode == 2) return + if (isHeadsetPluggedIn()) { + audioManager.isSpeakerphoneOn = false + AudioSystem.setForceUse( + AudioSystem.FOR_COMMUNICATION, + AudioSystem.FORCE_NONE + ) + } else { + audioManager.isSpeakerphoneOn = true + AudioSystem.setForceUse( + AudioSystem.FOR_COMMUNICATION, + AudioSystem.FORCE_SPEAKER + ) } - return true + audioManager.mode = AudioManager.MODE_IN_COMMUNICATION } - private inner class Listener : PhoneStateListener() { - private var previousState = TelephonyManager.CALL_STATE_IDLE - private var previousAudioMode = audioManager.mode - - override fun onCallStateChanged(state: Int, incomingNumber: String) { - if (callsMode == 0) return - when (state) { - TelephonyManager.CALL_STATE_RINGING -> { - if (!checkPermission()) return - if (callsMode == 1) { - telecomManager.acceptRingingCall() - Toast.makeText(context, context.getString( - R.string.in_game_calls_received_number, incomingNumber), - Toast.LENGTH_SHORT).show() - } else { - telecomManager.endCall() - Toast.makeText(context, context.getString( - R.string.in_game_calls_rejected_number, incomingNumber), - Toast.LENGTH_SHORT).show() - } - } - TelephonyManager.CALL_STATE_OFFHOOK -> { - if (callsMode == 2) return - if (previousState == TelephonyManager.CALL_STATE_RINGING) { - if (isHeadsetPluggedIn()) { - audioManager.isSpeakerphoneOn = false - AudioSystem.setForceUse( - AudioSystem.FOR_COMMUNICATION, - AudioSystem.FORCE_NONE - ) - } else { - audioManager.isSpeakerphoneOn = true - AudioSystem.setForceUse( - AudioSystem.FOR_COMMUNICATION, - AudioSystem.FORCE_SPEAKER - ) - } - audioManager.mode = AudioManager.MODE_IN_COMMUNICATION - } - } - TelephonyManager.CALL_STATE_IDLE -> { - if (callsMode == 2) return - if (previousState == TelephonyManager.CALL_STATE_OFFHOOK) { - audioManager.mode = previousAudioMode - AudioSystem.setForceUse( - AudioSystem.FOR_COMMUNICATION, - AudioSystem.FORCE_NONE - ) - audioManager.isSpeakerphoneOn = false - } - } - } - previousState = state - } + private fun handleIdleState() { + if (callsMode == 2) return + audioManager.mode = previousAudioMode + AudioSystem.setForceUse( + AudioSystem.FOR_COMMUNICATION, + AudioSystem.FORCE_NONE + ) } - companion object { - private const val TAG = "CallListener" + private fun isHeadsetPluggedIn(): Boolean { + val audioDeviceInfoArr: Array = + audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)!! + return audioDeviceInfoArr.any { + it.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES || + it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || + it.type == AudioDeviceInfo.TYPE_USB_HEADSET + } } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index ae591ccc..8f220f31 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -116,7 +116,7 @@ class SessionService : Hilt_SessionService() { override fun onBind(intent: Intent?): IBinder? = null override fun onDestroy() { - callListener.destory() + callListener.destroy() if (isBarConnected) { gameBar.onGameLeave() From d7e0affe4134aacb808ebb34284e7e566866ff2e Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Mon, 29 May 2023 15:21:11 +0800 Subject: [PATCH 131/214] GameSpace: Update game illustration from motorola Change-Id: I7784bed7fef6f1834aae2046ae5412d0072b5145 Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- app/src/main/res/raw/game_settings_illustration.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/raw/game_settings_illustration.json b/app/src/main/res/raw/game_settings_illustration.json index a0215b44..8520db49 100644 --- a/app/src/main/res/raw/game_settings_illustration.json +++ b/app/src/main/res/raw/game_settings_illustration.json @@ -1 +1 @@ -{"nm":"toturial_fps01","ddd":0,"h":200,"w":200,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"fps 2","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[6.471,6.471,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[43,43,100],"t":6},{"s":[92,92,100],"t":11}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[46.442,90,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":3},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":8},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":14},{"s":[0],"t":19}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 4","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.471,6.471],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 6","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[160,160],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.471,6.471],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":43,"ix":7}}]}],"ind":1},{"ty":4,"nm":"fps","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[6.471,6.471,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[46.442,90,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":18},{"s":[0],"t":35}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.326,0],[0.26,0.092],[0.161,0.147],[0,0],[-0.21,-0.082],[-0.208,0],[-0.111,0.084],[0,0.139],[0.064,0.068],[0.104,0.041],[0.176,0.049],[0.172,0.078],[0.122,0.172],[0,0.287],[-0.111,0.203],[-0.225,0.119],[-0.323,0],[-0.215,-0.066],[-0.161,-0.123],[0,0],[0.327,0],[0.109,-0.09],[0,-0.147],[-0.125,-0.071],[-0.262,-0.07],[-0.172,-0.078],[-0.123,-0.168],[0,-0.287],[0.113,-0.204],[0.226,-0.119]],"o":[[-0.28,0],[-0.26,-0.093],[0,0],[0.151,0.135],[0.21,0.082],[0.233,0],[0.111,-0.084],[0,-0.103],[-0.065,-0.067],[-0.104,-0.041],[-0.269,-0.078],[-0.172,-0.078],[-0.122,-0.173],[0,-0.251],[0.111,-0.203],[0.224,-0.119],[0.226,0],[0.215,0.065],[0,0],[-0.326,-0.225],[-0.229,0],[-0.109,0.091],[0,0.148],[0.126,0.072],[0.269,0.078],[0.172,0.078],[0.124,0.168],[0,0.246],[-0.112,0.203],[-0.226,0.119]],"v":[[-0.033,2.227],[-0.842,2.09],[-1.473,1.73],[-1.195,0.979],[-0.654,1.305],[-0.027,1.428],[0.49,1.301],[0.656,0.967],[0.56,0.71],[0.307,0.548],[-0.113,0.413],[-0.775,0.178],[-1.215,-0.197],[-1.398,-0.885],[-1.232,-1.566],[-0.729,-2.048],[0.092,-2.227],[0.753,-2.128],[1.318,-1.846],[1.064,-1.089],[0.085,-1.428],[-0.423,-1.292],[-0.587,-0.936],[-0.398,-0.607],[0.182,-0.393],[0.844,-0.16],[1.288,0.21],[1.473,0.893],[1.303,1.566],[0.796,2.049]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[9.631,6.607],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":5,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.129,0.113],[0,0.208],[0.129,0.112],[0.244,0],[0,0],[0,0]],"o":[[0.244,0],[0.129,-0.113],[0,-0.211],[-0.129,-0.113],[0,0],[0,0],[0,0]],"v":[[-0.153,-0.21],[0.406,-0.379],[0.6,-0.861],[0.406,-1.347],[-0.153,-1.517],[-0.61,-1.517],[-0.61,-0.21]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 2","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.231,-0.111],[-0.126,-0.204],[0,-0.279],[0.125,-0.207],[0.231,-0.109],[0.312,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.312,0],[0.231,0.111],[0.125,0.205],[0,0.276],[-0.126,0.206],[-0.231,0.109],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.11,-2.227],[0.705,-2.06],[1.24,-1.587],[1.428,-0.861],[1.24,-0.137],[0.705,0.336],[-0.11,0.5],[-0.61,0.5],[-0.61,2.227],[-1.428,2.227],[-1.428,-2.227]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":1},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 2","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.447,6.606],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 3","ix":3,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.411,-1.528],[-0.411,-0.533],[1.014,-0.533],[1.014,0.167],[-0.411,0.167],[-0.411,2.227],[-1.229,2.227],[-1.229,-2.227],[1.229,-2.227],[1.229,-1.528]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.111,6.606],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 4","ix":4,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[6.471,6.471],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"sidebar","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[29.412,40.588,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[45.882,100.588,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":18},{"s":[0],"t":35}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,65.294],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,47.647],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 3","ix":3,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,30],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 4","ix":4,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[47.647,12.353],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 5","ix":5,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30,65.294],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 6","ix":6,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30,47.647],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 7","ix":7,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30,12.353],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 8","ix":8,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,65.294],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 9","ix":9,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,47.647],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 10","ix":10,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,30],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 11","ix":11,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.8784,0.451,0.0941],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[12.353,12.353],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 12","ix":12,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.657,0],[0,0],[0,-1.657],[0,0],[1.656,0],[0,0],[0,1.657],[0,0]],"o":[[0,0],[1.656,0],[0,0],[0,1.657],[0,0],[-1.657,0],[0,0],[0,-1.657]],"v":[[-26.412,-40.588],[26.412,-40.588],[29.412,-37.588],[29.412,37.588],[26.412,40.588],[-26.412,40.588],[-29.412,37.588],[-29.412,-37.588]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[29.412,40.588],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"60","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[7.188,5.113,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[163.316,78.323,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":40},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":55},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":96},{"s":[0],"t":108}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.301,0.49],[0.652,0],[0.297,-0.487],[0.01,-1.011],[0,0],[-0.313,-0.514],[-0.633,0],[-0.303,0.484],[-0.014,1.039]],"o":[[0,-1.071],[-0.301,-0.489],[-0.646,0],[-0.296,0.488],[0,0],[0,1.075],[0.311,0.511],[0.625,0],[0.303,-0.483],[0,0]],"v":[[1.877,-0.998],[1.426,-3.34],[-0.003,-4.074],[-1.418,-3.343],[-1.876,-1.094],[-1.876,0.93],[-1.407,3.313],[0.011,4.081],[1.402,3.356],[1.877,1.073]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 2","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0.506,-0.719],[1.076,0],[0.511,0.705],[0.019,1.4],[0,0],[-0.506,0.711],[-1.08,0],[-0.506,-0.686],[-0.014,-1.431]],"o":[[0,1.482],[-0.506,0.72],[-1.062,0],[-0.509,-0.703],[0,0],[0,-1.463],[0.506,-0.711],[1.071,0],[0.506,0.686],[0,0]],"v":[[3.142,0.731],[2.383,4.033],[0.011,5.113],[-2.348,4.057],[-3.141,0.902],[-3.141,-0.786],[-2.382,-4.047],[-0.003,-5.113],[2.362,-4.084],[3.142,-0.909]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[11.236,5.113],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":5,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.547,0],[0.364,-0.26],[0.141,-0.391],[0,0],[-0.37,-0.501],[-0.551,0],[-0.325,0.418],[0,0.679],[0.331,0.422]],"o":[[-0.434,0],[-0.366,0.259],[0,0],[0,0.82],[0.369,0.501],[0.57,0],[0.326,-0.419],[0,-0.684],[-0.33,-0.421]],"v":[[0.082,-0.564],[-1.114,-0.174],[-1.873,0.803],[-1.873,1.268],[-1.319,3.25],[0.061,4.002],[1.404,3.374],[1.894,1.726],[1.397,0.068]]},"ix":2}},{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 2","ix":2,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0.583,-0.566],[0.091,-1.026],[-0.907,0],[-0.516,-0.61],[0,-0.966],[0.558,-0.615],[0.939,0],[0.592,0.732],[0,1.154],[0,0],[-0.781,0.968],[-1.545,0.022]],"o":[[0,0],[0,0],[-0.985,0.018],[-0.584,0.565],[0.524,-0.602],[0.865,0],[0.518,0.611],[0,1.025],[-0.558,0.616],[-0.953,0],[-0.593,-0.731],[0,0],[0,-1.832],[0.783,-0.969],[0,0]],"v":[[1.743,-5.048],[1.743,-3.975],[1.511,-3.975],[-0.841,-3.1],[-1.853,-0.714],[0.294,-1.617],[2.368,-0.701],[3.145,1.665],[2.307,4.125],[0.061,5.048],[-2.256,3.951],[-3.145,1.124],[-3.145,0.639],[-1.973,-3.561],[1.518,-5.048]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":1},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 2","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.7137,0.5216],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.145,5.178],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"cycle","sr":1,"st":0,"op":145,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[19.074,19.074,0],"ix":1},"s":{"a":0,"k":[84,84,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[163.317,78.323,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":33},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":49},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":96},{"s":[0],"t":108}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-10.353,0],[0,-10.353],[10.353,0],[0,10.352]],"o":[[10.353,0],[0,10.352],[-10.353,0],[0,-10.353]],"v":[[0,-18.824],[18.824,0.001],[0,18.824],[-18.824,0.001]]},"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"合并路径 1","mm":4},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.3216,0.1373,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[19.074,19.074],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5},{"ty":4,"nm":"bg","sr":1,"st":0,"op":176,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[99.729,93.191,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[100,100,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,2.603],[0,0],[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0]],"o":[[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0],[0,2.602],[0,0],[0,0]],"v":[[-84.45,44.874],[-89.207,40.117],[-89.207,-40.117],[-84.45,-44.874],[84.451,-44.874],[89.207,-40.117],[89.207,40.028],[84.451,44.784],[-84.45,44.784]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0,0,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[99.551,92.952],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 2","ix":2,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.075,5.481],[0,0],[1.075,5.392],[5.556,0],[0,0],[1.165,-5.481],[0,0],[-1.075,-5.481],[-5.556,0],[0,0]],"o":[[1.075,-5.391],[0,0],[-1.075,-5.481],[0,0],[-5.557,0],[-1.075,4.942],[0,0],[1.075,5.481],[0,0],[5.556,-0.09]],"v":[[97.866,38.593],[99.479,-0.045],[97.866,-38.683],[86.395,-48.118],[-86.484,-48.118],[-97.956,-38.773],[-99.479,0.045],[-97.866,38.683],[-86.395,48.118],[86.395,48.118]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[0.698,0.698,0.698],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[99.729,93.191],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"组 3","ix":3,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"路径 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-51.33,0],[0,-51.33],[51.33,0],[0,51.33]],"o":[[51.33,0],[0,51.33],[-51.33,0],[0,-51.33]],"v":[[0,-92.941],[92.941,0],[0,92.941],[-92.941,0]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"填充 1","c":{"a":0,"k":[1,0.9647,0.9725],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[99.729,93.191],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6}],"v":"5.7.7","fr":29,"op":110,"ip":0,"assets":[]} +{"v":"5.7.7","fr":29,"ip":0,"op":110,"w":200,"h":200,"nm":"toturial_fps01","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"fps 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[100]},{"t":19,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46.442,90,0],"ix":2,"l":2},"a":{"a":0,"k":[6.471,6.471,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":6,"s":[43,43,100]},{"t":11,"s":[92,92,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[160,160],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":43,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"fps","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"t":35,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46.442,90,0],"ix":2,"l":2},"a":{"a":0,"k":[6.471,6.471,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.326,0],[0.26,0.092],[0.161,0.147],[0,0],[-0.21,-0.082],[-0.208,0],[-0.111,0.084],[0,0.139],[0.064,0.068],[0.104,0.041],[0.176,0.049],[0.172,0.078],[0.122,0.172],[0,0.287],[-0.111,0.203],[-0.225,0.119],[-0.323,0],[-0.215,-0.066],[-0.161,-0.123],[0,0],[0.327,0],[0.109,-0.09],[0,-0.147],[-0.125,-0.071],[-0.262,-0.07],[-0.172,-0.078],[-0.123,-0.168],[0,-0.287],[0.113,-0.204],[0.226,-0.119]],"o":[[-0.28,0],[-0.26,-0.093],[0,0],[0.151,0.135],[0.21,0.082],[0.233,0],[0.111,-0.084],[0,-0.103],[-0.065,-0.067],[-0.104,-0.041],[-0.269,-0.078],[-0.172,-0.078],[-0.122,-0.173],[0,-0.251],[0.111,-0.203],[0.224,-0.119],[0.226,0],[0.215,0.065],[0,0],[-0.326,-0.225],[-0.229,0],[-0.109,0.091],[0,0.148],[0.126,0.072],[0.269,0.078],[0.172,0.078],[0.124,0.168],[0,0.246],[-0.112,0.203],[-0.226,0.119]],"v":[[-0.033,2.227],[-0.842,2.09],[-1.473,1.73],[-1.195,0.979],[-0.654,1.305],[-0.027,1.428],[0.49,1.301],[0.656,0.967],[0.56,0.71],[0.307,0.548],[-0.113,0.413],[-0.775,0.178],[-1.215,-0.197],[-1.398,-0.885],[-1.232,-1.566],[-0.729,-2.048],[0.092,-2.227],[0.753,-2.128],[1.318,-1.846],[1.064,-1.089],[0.085,-1.428],[-0.423,-1.292],[-0.587,-0.936],[-0.398,-0.607],[0.182,-0.393],[0.844,-0.16],[1.288,0.21],[1.473,0.893],[1.303,1.566],[0.796,2.049]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.631,6.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.129,0.113],[0,0.208],[0.129,0.112],[0.244,0],[0,0],[0,0]],"o":[[0.244,0],[0.129,-0.113],[0,-0.211],[-0.129,-0.113],[0,0],[0,0],[0,0]],"v":[[-0.153,-0.21],[0.406,-0.379],[0.6,-0.861],[0.406,-1.347],[-0.153,-1.517],[-0.61,-1.517],[-0.61,-0.21]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.231,-0.111],[-0.126,-0.204],[0,-0.279],[0.125,-0.207],[0.231,-0.109],[0.312,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.312,0],[0.231,0.111],[0.125,0.205],[0,0.276],[-0.126,0.206],[-0.231,0.109],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.11,-2.227],[0.705,-2.06],[1.24,-1.587],[1.428,-0.861],[1.24,-0.137],[0.705,0.336],[-0.11,0.5],[-0.61,0.5],[-0.61,2.227],[-1.428,2.227],[-1.428,-2.227]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.447,6.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.411,-1.528],[-0.411,-0.533],[1.014,-0.533],[1.014,0.167],[-0.411,0.167],[-0.411,2.227],[-1.229,2.227],[-1.229,-2.227],[1.229,-2.227],[1.229,-1.528]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.111,6.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[6.471,6.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"sidebar","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"t":35,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[45.882,100.588,0],"ix":2,"l":2},"a":{"a":0,"k":[29.412,40.588,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.647,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,65.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,47.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 9","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,30],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 10","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.574,0],[0,-3.574],[3.574,0],[0,3.573]],"o":[[3.574,0],[0,3.573],[-3.574,0],[0,-3.574]],"v":[[0,-6.471],[6.471,0.001],[0,6.471],[-6.471,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.450980422076,0.094117654539,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.353,12.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.657,0],[0,0],[0,-1.657],[0,0],[1.656,0],[0,0],[0,1.657],[0,0]],"o":[[0,0],[1.656,0],[0,0],[0,1.657],[0,0],[-1.657,0],[0,0],[0,-1.657]],"v":[[-26.412,-40.588],[26.412,-40.588],[29.412,-37.588],[29.412,37.588],[26.412,40.588],[-26.412,40.588],[-29.412,37.588],[-29.412,-37.588]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.412,40.588],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 12","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"60","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"t":108,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.316,78.323,0],"ix":2,"l":2},"a":{"a":0,"k":[7.188,5.113,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.301,0.49],[0.652,0],[0.297,-0.487],[0.01,-1.011],[0,0],[-0.313,-0.514],[-0.633,0],[-0.303,0.484],[-0.014,1.039]],"o":[[0,-1.071],[-0.301,-0.489],[-0.646,0],[-0.296,0.488],[0,0],[0,1.075],[0.311,0.511],[0.625,0],[0.303,-0.483],[0,0]],"v":[[1.877,-0.998],[1.426,-3.34],[-0.003,-4.074],[-1.418,-3.343],[-1.876,-1.094],[-1.876,0.93],[-1.407,3.313],[0.011,4.081],[1.402,3.356],[1.877,1.073]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.506,-0.719],[1.076,0],[0.511,0.705],[0.019,1.4],[0,0],[-0.506,0.711],[-1.08,0],[-0.506,-0.686],[-0.014,-1.431]],"o":[[0,1.482],[-0.506,0.72],[-1.062,0],[-0.509,-0.703],[0,0],[0,-1.463],[0.506,-0.711],[1.071,0],[0.506,0.686],[0,0]],"v":[[3.142,0.731],[2.383,4.033],[0.011,5.113],[-2.348,4.057],[-3.141,0.902],[-3.141,-0.786],[-2.382,-4.047],[-0.003,-5.113],[2.362,-4.084],[3.142,-0.909]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[11.236,5.113],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.547,0],[0.364,-0.26],[0.141,-0.391],[0,0],[-0.37,-0.501],[-0.551,0],[-0.325,0.418],[0,0.679],[0.331,0.422]],"o":[[-0.434,0],[-0.366,0.259],[0,0],[0,0.82],[0.369,0.501],[0.57,0],[0.326,-0.419],[0,-0.684],[-0.33,-0.421]],"v":[[0.082,-0.564],[-1.114,-0.174],[-1.873,0.803],[-1.873,1.268],[-1.319,3.25],[0.061,4.002],[1.404,3.374],[1.894,1.726],[1.397,0.068]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.583,-0.566],[0.091,-1.026],[-0.907,0],[-0.516,-0.61],[0,-0.966],[0.558,-0.615],[0.939,0],[0.592,0.732],[0,1.154],[0,0],[-0.781,0.968],[-1.545,0.022]],"o":[[0,0],[0,0],[-0.985,0.018],[-0.584,0.565],[0.524,-0.602],[0.865,0],[0.518,0.611],[0,1.025],[-0.558,0.616],[-0.953,0],[-0.593,-0.731],[0,0],[0,-1.832],[0.783,-0.969],[0,0]],"v":[[1.743,-5.048],[1.743,-3.975],[1.511,-3.975],[-0.841,-3.1],[-1.853,-0.714],[0.294,-1.617],[2.368,-0.701],[3.145,1.665],[2.307,4.125],[0.061,5.048],[-2.256,3.951],[-3.145,1.124],[-3.145,0.639],[-1.973,-3.561],[1.518,-5.048]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.713725490196,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.145,5.178],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"cycle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":96,"s":[100]},{"t":108,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[163.317,78.323,0],"ix":2,"l":2},"a":{"a":0,"k":[19.074,19.074,0],"ix":1,"l":2},"s":{"a":0,"k":[84,84,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-10.353,0],[0,-10.353],[10.353,0],[0,10.352]],"o":[[10.353,0],[0,10.352],[-10.353,0],[0,-10.353]],"v":[[0,-18.824],[18.824,0.001],[0,18.824],[-18.824,0.001]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.321568627451,0.137254901961,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[19.074,19.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":145,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2,"l":2},"a":{"a":0,"k":[99.729,93.191,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,2.603],[0,0],[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0]],"o":[[-2.603,0],[0,0],[0,-2.603],[0,0],[2.602,0],[0,0],[0,2.602],[0,0],[0,0]],"v":[[-84.45,44.874],[-89.207,40.117],[-89.207,-40.117],[-84.45,-44.874],[84.451,-44.874],[89.207,-40.117],[89.207,40.028],[84.451,44.784],[-84.45,44.784]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.101960791794,0.090196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.551,92.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.075,5.481],[0,0],[1.075,5.392],[5.556,0],[0,0],[1.165,-5.481],[0,0],[-1.075,-5.481],[-5.556,0],[0,0]],"o":[[1.075,-5.391],[0,0],[-1.075,-5.481],[0,0],[-5.557,0],[-1.075,4.942],[0,0],[1.075,5.481],[0,0],[5.556,-0.09]],"v":[[97.866,38.593],[99.479,-0.045],[97.866,-38.683],[86.395,-48.118],[-86.484,-48.118],[-97.956,-38.773],[-99.479,0.045],[-97.866,38.683],[-86.395,48.118],[86.395,48.118]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180392156863,0.192156877705,0.20000001496,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.729,93.191],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-51.33,0],[0,-51.33],[51.33,0],[0,51.33]],"o":[[51.33,0],[0,51.33],[-51.33,0],[0,-51.33]],"v":[[0,-92.941],[92.941,0],[0,92.941],[-92.941,0]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.301960784314,0.270588235294,0.258823529412,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.729,93.191],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":176,"st":0,"bm":0}],"markers":[]} \ No newline at end of file From 8f8f889d944903874257d69a9bafb33b70b4e6b3 Mon Sep 17 00:00:00 2001 From: hydrangea07 <104114625+hydrangea07@users.noreply.github.com> Date: Wed, 23 Nov 2022 18:56:50 +0800 Subject: [PATCH 132/214] GameSpace: Add light/dark support to Gamebar window utils Signed-off-by: Pranav Vashi --- app/src/main/res/drawable/ic_action_record.xml | 3 +-- app/src/main/res/drawable/ic_action_screenshot.xml | 8 ++++---- app/src/main/res/drawable/ic_arrow_left.xml | 2 +- app/src/main/res/drawable/ic_arrow_right.xml | 2 +- app/src/main/res/drawable/ic_close.xml | 2 +- app/src/main/res/drawable/ic_drag.xml | 2 +- app/src/main/res/layout/bar_menu_switcher.xml | 6 ++++-- app/src/main/res/layout/window_util.xml | 3 +++ app/src/main/res/values-night/colors.xml | 8 ++++++++ app/src/main/res/values/colors.xml | 13 +++++++------ 10 files changed, 31 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/drawable/ic_action_record.xml b/app/src/main/res/drawable/ic_action_record.xml index a47d26dd..b844505f 100644 --- a/app/src/main/res/drawable/ic_action_record.xml +++ b/app/src/main/res/drawable/ic_action_record.xml @@ -16,10 +16,9 @@ Copyright (C) 2020 The Android Open Source Project diff --git a/app/src/main/res/drawable/ic_action_screenshot.xml b/app/src/main/res/drawable/ic_action_screenshot.xml index 8670761c..5682e90a 100644 --- a/app/src/main/res/drawable/ic_action_screenshot.xml +++ b/app/src/main/res/drawable/ic_action_screenshot.xml @@ -19,16 +19,16 @@ Copyright (C) 2018 The Android Open Source Project android:viewportWidth="20" android:viewportHeight="20"> diff --git a/app/src/main/res/drawable/ic_arrow_left.xml b/app/src/main/res/drawable/ic_arrow_left.xml index 5d42237e..60b2028c 100644 --- a/app/src/main/res/drawable/ic_arrow_left.xml +++ b/app/src/main/res/drawable/ic_arrow_left.xml @@ -20,6 +20,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_arrow_right.xml b/app/src/main/res/drawable/ic_arrow_right.xml index b2be38d4..cee2b33c 100644 --- a/app/src/main/res/drawable/ic_arrow_right.xml +++ b/app/src/main/res/drawable/ic_arrow_right.xml @@ -20,6 +20,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml index 2adb4b4b..65b594ab 100644 --- a/app/src/main/res/drawable/ic_close.xml +++ b/app/src/main/res/drawable/ic_close.xml @@ -20,6 +20,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_drag.xml b/app/src/main/res/drawable/ic_drag.xml index e38e5e6b..127f7eda 100644 --- a/app/src/main/res/drawable/ic_drag.xml +++ b/app/src/main/res/drawable/ic_drag.xml @@ -20,6 +20,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/layout/bar_menu_switcher.xml b/app/src/main/res/layout/bar_menu_switcher.xml index d1e64374..8c3dcb22 100644 --- a/app/src/main/res/layout/bar_menu_switcher.xml +++ b/app/src/main/res/layout/bar_menu_switcher.xml @@ -12,8 +12,10 @@ android:layout_gravity="center" android:drawableTop="@drawable/ic_arrow_left" android:minEms="3" + android:fontFamily="@*android:string/config_headlineFontFamilyMedium" android:textAlignment="center" - android:textColor="@color/onBarBackground" - android:textSize="13sp" /> + android:textColor="@color/barButtonAccent" + android:textSize="14sp" + android:textStyle="bold" /> diff --git a/app/src/main/res/layout/window_util.xml b/app/src/main/res/layout/window_util.xml index aeb6718b..5146f6b8 100644 --- a/app/src/main/res/layout/window_util.xml +++ b/app/src/main/res/layout/window_util.xml @@ -43,6 +43,7 @@ android:layout_marginTop="5dp" android:padding="8dp" android:scaleType="centerInside" + android:tint="@color/onBarBackground" android:src="@drawable/ic_gear" /> @android:color/system_neutral1_50 @android:color/system_neutral1_50 @android:color/system_neutral2_100 + + @android:color/system_neutral1_900 + @android:color/system_neutral1_900 + @android:color/system_accent1_100 + @android:color/system_accent1_100 + @android:color/system_accent2_50 + @android:color/system_neutral1_1000 + @android:color/system_neutral1_0 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index e56b3e07..92137335 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,11 +10,12 @@ @android:color/system_neutral1_900 @android:color/system_neutral1_900 - #000000 - #A0000000 - @android:color/system_accent1_700 - #000000 - @android:color/system_accent1_400 - #c0c0c0 + @android:color/system_neutral1_50 + @android:color/system_neutral1_50 + @android:color/system_accent1_600 + @android:color/system_accent1_600 + @android:color/system_accent2_500 + @android:color/system_neutral1_0 + @android:color/system_neutral1_1000 #ffc000 From e7af59b19364696af1c0918d1a295d2f4454abfb Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Thu, 25 Apr 2024 23:55:24 +0530 Subject: [PATCH 133/214] GameSpace: Match menu switcher tint with other buttons Signed-off-by: Pranav Vashi --- app/src/main/res/drawable/ic_arrow_left.xml | 5 +++-- app/src/main/res/drawable/ic_arrow_right.xml | 5 +++-- app/src/main/res/drawable/ic_close.xml | 5 +++-- app/src/main/res/drawable/ic_drag.xml | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/drawable/ic_arrow_left.xml b/app/src/main/res/drawable/ic_arrow_left.xml index 60b2028c..5410efa9 100644 --- a/app/src/main/res/drawable/ic_arrow_left.xml +++ b/app/src/main/res/drawable/ic_arrow_left.xml @@ -18,8 +18,9 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="@color/barButtonAccent"> diff --git a/app/src/main/res/drawable/ic_arrow_right.xml b/app/src/main/res/drawable/ic_arrow_right.xml index cee2b33c..d834980b 100644 --- a/app/src/main/res/drawable/ic_arrow_right.xml +++ b/app/src/main/res/drawable/ic_arrow_right.xml @@ -18,8 +18,9 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="@color/barButtonAccent"> diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml index 65b594ab..d5ede52a 100644 --- a/app/src/main/res/drawable/ic_close.xml +++ b/app/src/main/res/drawable/ic_close.xml @@ -18,8 +18,9 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="@color/barButtonAccent"> diff --git a/app/src/main/res/drawable/ic_drag.xml b/app/src/main/res/drawable/ic_drag.xml index 127f7eda..18c6482b 100644 --- a/app/src/main/res/drawable/ic_drag.xml +++ b/app/src/main/res/drawable/ic_drag.xml @@ -18,8 +18,9 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="@color/barButtonAccent"> From 0b36ee4a28f85e4a1c00099d4c280fd0578b3ac1 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 26 Apr 2024 00:36:37 +0530 Subject: [PATCH 134/214] GameSpace: Apply opacity settings to menu switcher and game bar Fixes: https://github.com/crdroidandroid/issue_tracker/issues/377 Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 18c561a3..f8b1b2d7 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -136,7 +136,9 @@ class GameBarService : Hilt_GameBarService() { rootBarView = LayoutInflater.from(this) .inflate(R.layout.window_util, frame, false)!! barView = rootBarView.findViewById(R.id.container_bar)!! + barView.alpha = appSettings.menuOpacity / 100f menuSwitcher = rootBarView.findViewById(R.id.action_menu_switcher)!! + menuSwitcher.alpha = appSettings.menuOpacity / 100f danmakuService.init() } @@ -346,6 +348,7 @@ class GameBarService : Hilt_GameBarService() { private fun panelButton() { val actionPanel = rootBarView.findViewById(R.id.action_panel)!! + actionPanel.alpha = appSettings.menuOpacity / 100f actionPanel.setOnClickListener { showPanel = !showPanel } @@ -357,6 +360,7 @@ class GameBarService : Hilt_GameBarService() { private fun screenshotButton() { val actionScreenshot = rootBarView.findViewById(R.id.action_screenshot)!! + actionScreenshot.alpha = appSettings.menuOpacity / 100f actionScreenshot.setOnClickListener { takeShot() } @@ -364,6 +368,7 @@ class GameBarService : Hilt_GameBarService() { private fun recorderButton() { val actionRecorder = rootBarView.findViewById(R.id.action_record)!! + actionRecorder.alpha = appSettings.menuOpacity / 100f val recorder = screenUtils.recorder ?: let { actionRecorder?.isVisible = false; return } recorder.addRecordingCallback(object : IRecordingCallback.Stub() { override fun onRecordingStart() { From 37e89fe5dd9874282a57f2e17bd276868d7dea01 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 1 May 2024 10:12:16 +0530 Subject: [PATCH 135/214] GameSpace: Skip starting game bar if already connected Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index 8f220f31..88ec936a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -155,6 +155,10 @@ class SessionService : Hilt_SessionService() { } private fun tryStartFromDeath(): Int { + if (isBarConnected) { + return START_NOT_STICKY + } + val game = ActivityTaskManager.getService() ?.focusedRootTaskInfo ?.topActivity?.packageName From 68ccf658ca5914e8080c5cbf095b9bbe20bc8713 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 19 May 2024 19:57:37 +0300 Subject: [PATCH 136/214] New translations (#73) --- app/src/main/res/values-ja-rJP/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 9593ca59..567a0e4d 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -82,6 +82,6 @@ %1$s からの着信を受信しました %1$s からの着信を拒否しました - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + 弾幕通知モード + ゲーム中に弾幕コメントとして通知を表示する From d04cd667da95aece59c9f829a558a8bab24bf28e Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 16 Jun 2024 19:39:24 +0300 Subject: [PATCH 137/214] New Crowdin updates (#74) * New translations strings.xml (Arabic) * New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index a693c82e..e72ace69 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -74,7 +74,7 @@ Danmaku مفعّل معطل - Default + افتراضية وضع المكالمة بلا إجراء رد تلقائي @@ -82,6 +82,6 @@ مكالمة متلقاة منذ %1$s مكالمة مرفوضة منذ%1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + وضع إشعار Danmaku + إظهار تنبيه Danmaku كما هو معروف باِسم تعليقات سريعة عندما تكون اللعبة نشطة From 51b8a64b2674ebb68f1b59f656b8e588c61e78a9 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 5 Jul 2024 21:59:01 +0300 Subject: [PATCH 138/214] New Crowdin updates (#77) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Danish) * New translations strings.xml (Dutch) --- app/src/main/res/values-da-rDK/strings.xml | 106 ++++++++++----------- app/src/main/res/values-nl-rNL/strings.xml | 2 +- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index f08ef916..5a896f0b 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -16,72 +16,72 @@ limitations under the License. --> - Game Space - Manage your gaming setup + Spil Rum + Administrer dit spilopsætning - In-game options - Block fullscreen event - Prevent fullscreen events like incoming calls from appearing - Stay awake - Lock gesture - Disable auto-brightness - Disable swipe to screenshot - Disable USB debugging - Overlay menu opacity level + Indstillinger for spil + Bloker begivenhed i fuldskærm + Forhindr fuldskærms-begivenheder som indgående opkald i at blive vist + Forbliv vågen + Lås gestus + Deaktiver auto-lysstyrke + Deaktiver stryg til skærmbillede + Deaktiver USB-fejlretning + Overlay menu opacitet niveau - Notification mode - Do not show - Show as Heads Up - Show as reTicker - Show as Danmaku + Notifikations tilstand + Vis ikke + Vis som Heads Up + Vis som reTicker + Vis som Danmaku - Ringer mode - Silent - Vibrate + Ringetilstand + Stille + Vibrere Normal - Do not change + Ikke skift - Library - Add - Pick your game - Search - Are you sure you want to remove %1$s from your game list? + Bibliotek + Tilføj + Vælg dit spil + Søg + Er du sikker på, at du vil fjerne %1$s fra din spilliste? - Configure game - Preferred mode - Use ANGLE (experimental) - Using ANGLE renderer instead of native GLES drivers.\nWARNING!! May breaks game graphics, use with caution! - ANGLE is not available on your system - Remove %1$s from library - Unsupported + Konfigurer spil + Foretrukken tilstand + Brug ANGLE (eksperimentel) + Brug ANGLE renderer i stedet for indfødte GLES drivere.\nADVARSEL!!! Kan ødelægge spilgrafik, brug med forsigtighed! + ANGLE er ikke tilgængelig på dit system + Fjern %1$s fra bibliotek + Uunderstøttet Standard - Performance - Battery + Ydeevne + Batteri - Value: %s - by default - Default value: %s\nLong tap to set - Default value is set + Værdi: %s + som standard + Standardværdi: %s\nLangt tryk for at indstille + Standard værdi er sat - Battery: %1$d%% - Memory available: %1$d\/%2$d MB + Batteri: %1$d%% + Tilgængelig hukommelse: %1$d\/%2$d MB - Mode + Tilstand FPS info - Hide - Heads Up + Skjul + Banner Opad reTicker Danmaku - Enabled - Disabled - Default - Call mode - No action - Auto answer - Auto reject - Received call from %1$s - Rejected call from %1$s + Aktiveret + Deaktiveret + Standard + Opkaldstilstand + Ingen handling + Automatisk svar + Automatisk afvisning + Modtaget opkald fra %1$s + Afviste opkald fra %1$s - Danmaku Notification mode + Danmaku-meddelelsestilstand Show notification as danmaku aka bullet comments while game is active diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 8885d4b8..61c93b76 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -71,7 +71,7 @@ Verbergen Pop-up reTicker - Denemarken + Danmaku Ingeschakeld Uitgechakeld Standaard From b0647df136a98de3cd9ae2f131268300fa965d94 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 6 Jul 2024 02:15:11 +0530 Subject: [PATCH 139/214] Revert "GameSpace: Switch to FPS sysfs node" This reverts commit 5e77e3fe1ae6ca20c3a7fe61491fe8f63f5a7e14. --- .../gamespace/widget/MenuSwitcher.kt | 102 +++--------------- app/src/main/res/values/config.xml | 6 -- 2 files changed, 17 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt index 9f55c136..721274ef 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt @@ -1,28 +1,13 @@ -/* - * Copyright (C) 2024 crDroid Android Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package io.chaldeaprjkt.gamespace.widget +import android.app.ActivityTaskManager import android.content.Context -import android.os.Handler -import android.os.Looper import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater +import android.view.WindowManager import android.widget.LinearLayout import android.widget.TextView +import android.window.TaskFpsCallback import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.utils.di.ServiceViewEntryPoint import io.chaldeaprjkt.gamespace.utils.dp @@ -30,13 +15,7 @@ import io.chaldeaprjkt.gamespace.utils.entryPointOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.isActive import kotlinx.coroutines.launch - -import java.io.File -import java.io.IOException -import java.io.RandomAccessFile import java.math.RoundingMode import java.text.DecimalFormat @@ -44,69 +23,24 @@ class MenuSwitcher @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { - private var fpsInfoNode: RandomAccessFile? = null - private var fpsReadJob: Job? = null - private var fpsReadInterval = 1000L - init { - val nodePath = resources.getString(R.string.config_fpsInfoSysNode) - val file = File(nodePath) - if (file.exists() && file.canRead()) { - try { - fpsInfoNode = RandomAccessFile(nodePath, "r") - } catch (e: IOException) { - Log.e(TAG, "Error while opening file: $nodePath", e) - } - } else { - Log.e(TAG, "$nodePath does not exist or is not readable") - } - fpsReadInterval = resources.getInteger(R.integer.config_fpsReadInterval).toLong() LayoutInflater.from(context).inflate(R.layout.bar_menu_switcher, this, true) } private val appSettings by lazy { context.entryPointOf().appSettings() } private val scope = CoroutineScope(Job() + Dispatchers.Main) + private val taskManager by lazy { ActivityTaskManager.getService() } - private val handler = Handler(Looper.getMainLooper()) - - private fun startReading() { - if (fpsReadJob != null) return - fpsReadJob = scope.launch { - do { - val fps = measureFps() - handler.post { - onFrameUpdated(fps) - } - delay(fpsReadInterval) - } while (isActive) + private val taskFpsCallback = object : TaskFpsCallback() { + override fun onFpsReported(fps: Float) { + if (isAttachedToWindow) { + onFrameUpdated(fps) + } } } - private fun stopReading() { - if (fpsReadJob == null) return - fpsReadJob?.cancel() - fpsReadJob = null - } - - private fun measureFps(): Float { - fpsInfoNode!!.seek(0L) - val measuredFps: String - try { - measuredFps = fpsInfoNode!!.readLine() - } catch (e: IOException) { - Log.e(TAG, "IOException while reading from FPS node, ${e.message}") - return -1.0f - } - try { - val fps: Float = measuredFps.trim().let { - if (it.contains(": ")) it.split("\\s+".toRegex())[1] else it - }.toFloat() - return fps - } catch (e: NumberFormatException) { - Log.e(TAG, "NumberFormatException occurred while parsing FPS info, ${e.message}") - } - return -1.0f - } + private val wm: WindowManager + get() = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager private val content: TextView? get() = findViewById(R.id.menu_content) @@ -124,7 +58,7 @@ class MenuSwitcher @JvmOverloads constructor( } fun updateIconState(isExpanded: Boolean, location: Int) { - showFps = if (isExpanded) false else fpsInfoNode != null && appSettings.showFps + showFps = if (isExpanded) false else appSettings.showFps when { isExpanded -> R.drawable.ic_close location > 0 -> R.drawable.ic_arrow_right @@ -142,9 +76,11 @@ class MenuSwitcher @JvmOverloads constructor( private fun updateFrameRateBinding() { if (showFps) { - startReading() + taskManager?.focusedRootTaskInfo?.taskId?.let { + wm.registerTaskFpsCallback(it, Runnable::run, taskFpsCallback) + } } else { - stopReading() + wm.unregisterTaskFpsCallback(taskFpsCallback) } } @@ -160,10 +96,6 @@ class MenuSwitcher @JvmOverloads constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() - stopReading() - } - - companion object { - private const val TAG = "MenuSwitcher" + wm.unregisterTaskFpsCallback(taskFpsCallback) } } diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index e7a16f68..5921d98c 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -17,10 +17,4 @@ true - - - /sys/class/drm/sde-crtc-0/measured_fps - - - 1000 From d96327218820ef7dfc4465076a81f4b0fe88a397 Mon Sep 17 00:00:00 2001 From: Dhina17 Date: Fri, 14 Jun 2024 23:42:55 +0530 Subject: [PATCH 140/214] GameSpace: Update fps once menu switcher attached to window When fps is enabled by default, it just shows black bg with no fps text. This change fixes that issue. Change-Id: I8b7744c1d5eb2b80276df0727b7302858a6e1081 Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt index 721274ef..c2f5b5f5 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/MenuSwitcher.kt @@ -94,6 +94,11 @@ class MenuSwitcher @JvmOverloads constructor( content?.setCompoundDrawablesRelativeWithIntrinsicBounds(null, ic, null, null) } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + updateFrameRateBinding() + } + override fun onDetachedFromWindow() { super.onDetachedFromWindow() wm.unregisterTaskFpsCallback(taskFpsCallback) From 56830db7bb70ce2ccb0b9f2fd48d0d7fc973b120 Mon Sep 17 00:00:00 2001 From: Dhina17 Date: Fri, 14 Jun 2024 23:27:45 +0530 Subject: [PATCH 141/214] GameSpace: Fix stopping session service in secondary users Using a static variable to know if a service is running or not creates race condition in secondary users and so the game bar (floating action) is not getting closed until reboot. Hence, do check if service is running or not in a proper way. Change-Id: Ic41b719acdd16dd07cc34bb5fdf631059e4dcf50 Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/gamebar/SessionService.kt | 9 +++------ .../java/io/chaldeaprjkt/gamespace/utils/Extensions.kt | 8 ++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index 88ec936a..90ab42f6 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -34,6 +34,7 @@ import io.chaldeaprjkt.gamespace.data.GameSession import io.chaldeaprjkt.gamespace.data.SystemSettings import io.chaldeaprjkt.gamespace.utils.GameModeUtils import io.chaldeaprjkt.gamespace.utils.ScreenUtils +import io.chaldeaprjkt.gamespace.utils.isServiceRunning import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -90,7 +91,6 @@ class SessionService : Hilt_SessionService() { } gameManager = getSystemService(Context.GAME_SERVICE) as GameManager gameModeUtils.bind(gameManager) - isRunning = true } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { @@ -125,7 +125,6 @@ class SessionService : Hilt_SessionService() { session.unregister() gameModeUtils.unbind() screenUtils.unbind() - isRunning = false super.onDestroy() } @@ -189,20 +188,18 @@ class SessionService : Hilt_SessionService() { const val START = "game_start" const val STOP = "game_stop" const val EXTRA_PACKAGE_NAME = "package_name" - var isRunning = false - private set fun start(context: Context, app: String) = Intent(context, SessionService::class.java) .apply { action = START putExtra(EXTRA_PACKAGE_NAME, app) } - .takeIf { !isRunning } + .takeIf { !(context.isServiceRunning(SessionService::class.java)) } ?.run { context.startServiceAsUser(this, UserHandle.CURRENT) } fun stop(context: Context) = Intent(context, SessionService::class.java) .apply { action = STOP } - .takeIf { isRunning } + .takeIf { context.isServiceRunning(SessionService::class.java) } ?.run { context.stopServiceAsUser(this, UserHandle.CURRENT) } } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt index 4ea5a830..8bfe5e37 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/Extensions.kt @@ -17,6 +17,8 @@ package io.chaldeaprjkt.gamespace.utils import android.app.Activity +import android.app.ActivityManager +import android.app.Service import android.content.Context import android.content.res.Resources.getSystem import android.graphics.Point @@ -45,3 +47,9 @@ fun WindowManager.isPortrait() = inline fun Context.entryPointOf(): T = EntryPoints.get(applicationContext, T::class.java) + +@Suppress("DEPRECATION") // Deprecated for third party services. +fun Context.isServiceRunning(serviceClass: Class<*>): Boolean = + (getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager) + .getRunningServices(Integer.MAX_VALUE) + .any { it.service.className == serviceClass.name } From d6b81b2b2d0ba42f5717ac5735df70422100d7cc Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 26 Jul 2024 18:59:04 +0300 Subject: [PATCH 142/214] New translations (#79) --- app/src/main/res/values-pt-rPT/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 234eb03e..f5484a24 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -83,5 +83,5 @@ Chamada de %1$s rejeitada Modo de notificação Danmaku - Show notification as danmaku aka bullet comments while game is active + Mostrar notificações enquanto o jogo estiver aberto From 56e2c5bcf7a6b210b1e8c95b6c2ce6949a8e9f8e Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 14 Aug 2024 17:13:28 +0300 Subject: [PATCH 143/214] New Crowdin updates (#81) * New translations strings.xml (Catalan) * New translations strings.xml (Catalan) --- app/src/main/res/values-ca-rES/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 36b0faa5..38220dfd 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -74,7 +74,7 @@ Danmaku Activat Desactivat - Default + Per defecte Mode de trucada Sense acció Resposta automàtica @@ -82,6 +82,6 @@ S\'ha rebut una trucada de %1$s S\'ha rebutjat una trucada de %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + Mode de Notificació Danmaku + Mostra notificació mentre el joc està actiu From 5ba0abb71c28c328d310aa98cf4997adda766cd0 Mon Sep 17 00:00:00 2001 From: someone5678 Date: Sun, 21 Jul 2024 21:21:34 +0900 Subject: [PATCH 144/214] GameSpace: Enable enableOnBackInvokedCallback * Enable back gesture animations Change-Id: Ie16bb366867ae87e7e5c434853b8e19d14937752 Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0294216..c628b860 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,7 +41,8 @@ android:icon="@drawable/ic_launcher" android:label="@string/settings_title" android:supportsRtl="true" - android:theme="@style/GameSpaceTheme"> + android:theme="@style/GameSpaceTheme" + android:enableOnBackInvokedCallback="true"> Date: Fri, 26 Jul 2024 13:58:41 +0530 Subject: [PATCH 145/214] GameSpace: Don't add floating action if game closed too quickly We use handler.postDelayed() to draw the floating action with 500ms delay on starting game. If user opens and closes the game too quickly, the game is getting closed and called onGameLeave() before the handler.postDelayed execution so the floating action is drawn even after closing the game. Even the worse, user can't close that floating action without reboot and can create infinite floating actions. So don't draw the floating action if game closed before that. Change-Id: I7fc3748137ff6d3fdb71b8b3590580963f4d0c96 Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index f8b1b2d7..ed5a3314 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -130,6 +130,9 @@ class GameBarService : Hilt_GameBarService() { } } + // Whether to ignore the initActions (floating action) or not + private var shouldClose = false + override fun onCreate() { super.onCreate() val frame = FrameLayout(this) @@ -179,6 +182,7 @@ class GameBarService : Hilt_GameBarService() { // for client service fun onGameStart() { + shouldClose = false rootBarView.isVisible = false rootBarView.alpha = 0f updateRootBarView() @@ -186,6 +190,7 @@ class GameBarService : Hilt_GameBarService() { } fun onGameLeave() { + shouldClose = true if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { wm.removeViewImmediate(rootPanelView) } @@ -218,6 +223,7 @@ class GameBarService : Hilt_GameBarService() { } private fun initActions() { + if (shouldClose) return rootBarView.isVisible = true rootBarView.animate() .alpha(1f) From df6296d74d3a452374225eec55efaffed4cc5333 Mon Sep 17 00:00:00 2001 From: Dhina17 Date: Thu, 25 Jul 2024 13:00:04 +0530 Subject: [PATCH 146/214] GameSpace: Show correct default settings Change-Id: Ie97d4e6b7a1589f57d0458e7b5f94c7daf8b55f8 Signed-off-by: Pranav Vashi --- app/src/main/res/xml/root_preferences.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 40f5bbda..3ce9c3de 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -65,6 +65,7 @@ android:title="@string/lock_gesture_title" /> From afb93dcb74ad3cccf82fde0a7ec6282d9a54f927 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 21 Aug 2024 13:46:40 +0530 Subject: [PATCH 147/214] GameSpace: Update for three fingers gesture Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/data/GameSession.kt | 4 ++-- .../io/chaldeaprjkt/gamespace/data/SessionState.kt | 2 +- .../io/chaldeaprjkt/gamespace/data/SystemSettings.kt | 12 +++++++----- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt index 4e10f7e1..5f26c6c9 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameSession.kt @@ -70,7 +70,7 @@ class GameSession @Inject constructor( systemSettings.headsup = false } if (appSettings.noThreeScreenshot) { - systemSettings.threeScreenshot = false + systemSettings.threeScreenshot = 0 } if (appSettings.noAdbEnabled) { systemSettings.adbEnabled = false @@ -89,7 +89,7 @@ class GameSession @Inject constructor( orig.headsup?.let { systemSettings.headsup = it } } if (appSettings.noThreeScreenshot) { - orig.threeScreenshot?.let { systemSettings.threeScreenshot = it } + systemSettings.threeScreenshot = orig.threeScreenshot } if (appSettings.noAdbEnabled) { orig.adbEnabled?.let { systemSettings.adbEnabled = it } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt index f3f0bcdf..c9f714bb 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt @@ -24,7 +24,7 @@ data class SessionState( var packageName: String, var autoBrightness: Boolean? = null, var headsup: Boolean? = null, - var threeScreenshot: Boolean? = null, + var threeScreenshot: Int = 12, var ringerMode: Int = AudioManager.RINGER_MODE_NORMAL, var adbEnabled: Boolean? = null, ) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index cd6bf65f..296c281b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -22,6 +22,8 @@ import android.provider.Settings import io.chaldeaprjkt.gamespace.utils.GameModeUtils import javax.inject.Inject +import lineageos.providers.LineageSettings + class SystemSettings @Inject constructor( context: Context, private val gameModeUtils: GameModeUtils @@ -59,13 +61,13 @@ class SystemSettings @Inject constructor( } var threeScreenshot - get() = Settings.System.getIntForUser( - resolver, Settings.System.THREE_FINGER_GESTURE, 0, + get() = LineageSettings.System.getIntForUser( + resolver, LineageSettings.System.KEY_THREE_FINGERS_SWIPE_ACTION, 12, UserHandle.USER_CURRENT - ) == 1 + ) set(it) { - Settings.System.putIntForUser( - resolver, Settings.System.THREE_FINGER_GESTURE, + LineageSettings.System.putIntForUser( + resolver, LineageSettings.System.KEY_THREE_FINGERS_SWIPE_ACTION, it.toInt(), UserHandle.USER_CURRENT ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ccd1e338..195d21c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,7 +27,7 @@ Stay awake Lock gesture Disable auto-brightness - Disable swipe to screenshot + Disable three fingers swipe gesture Disable USB debugging Overlay menu opacity level From 74284987972821034acf42ab02203f4df2527925 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 23 Aug 2024 22:38:35 +0300 Subject: [PATCH 148/214] New Crowdin updates (#85) * New translations strings.xml (Catalan) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Norwegian) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) --- app/src/main/res/values-af-rZA/strings.xml | 2 +- app/src/main/res/values-ar-rSA/strings.xml | 2 +- app/src/main/res/values-ca-rES/strings.xml | 2 +- app/src/main/res/values-cs-rCZ/strings.xml | 2 +- app/src/main/res/values-da-rDK/strings.xml | 2 +- app/src/main/res/values-de-rDE/strings.xml | 2 +- app/src/main/res/values-el-rGR/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-fa-rIR/strings.xml | 2 +- app/src/main/res/values-fi-rFI/strings.xml | 2 +- app/src/main/res/values-fr-rFR/strings.xml | 2 +- app/src/main/res/values-hu-rHU/strings.xml | 2 +- app/src/main/res/values-in-rID/strings.xml | 2 +- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-iw-rIL/strings.xml | 2 +- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-ko-rKR/strings.xml | 2 +- app/src/main/res/values-nl-rNL/strings.xml | 2 +- app/src/main/res/values-no-rNO/strings.xml | 2 +- app/src/main/res/values-pl-rPL/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-ro-rRO/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 2 +- app/src/main/res/values-sk-rSK/strings.xml | 2 +- app/src/main/res/values-tr-rTR/strings.xml | 2 +- app/src/main/res/values-uk-rUA/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index c10a052e..5c91f58f 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -25,7 +25,7 @@ Bly wakker Sluit gebaar Deaktiveer outo-helderheid - Deaktiveer \"Swipe to screenshot\" + Disable three fingers swipe gesture Deaktiveer \"USB debugging\" Oorleg kieslys ondeursigtigheid vlak diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index e72ace69..4b5429da 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -25,7 +25,7 @@ البقاء في الوضع النشط قفل الايماءات تعطيل السطوع التلقائي - تعطيل السحب لأخذ لقطة الشاشة + Disable three fingers swipe gesture تعطيل تصحيح أخطاء USB مستوى شفافية القائمة العائمة diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 38220dfd..e1281f2b 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -25,7 +25,7 @@ Mantén la pantalla encesa Gest de bloqueig Desactiva la brillantor automàtica - Desactiva el lliscament per a fer captures de pantalla + Disable three fingers swipe gesture Desactiva la depuració USB Nivell d\'opacitat del menú flotant diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 040e9509..844f0409 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -25,7 +25,7 @@ Nevypínat obrazovku Zakázat gesta Zakázat automatický jas - Zakázat přejetí pro snímek obrazovky + Disable three fingers swipe gesture Zakázat ladění USB Úroveň průhlednosti překrytí menu diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 5a896f0b..48727b89 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -25,7 +25,7 @@ Forbliv vågen Lås gestus Deaktiver auto-lysstyrke - Deaktiver stryg til skærmbillede + Disable three fingers swipe gesture Deaktiver USB-fejlretning Overlay menu opacitet niveau diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 0287e013..2034e918 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -25,7 +25,7 @@ Display eingeschaltet lassen Gesten deaktivieren Auto-Helligkeit deaktivieren - Wischen für Screenshot deaktivieren + Disable three fingers swipe gesture USB-Debugging deaktivieren Transparenz des Overlay-Menüs diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index d12e11ad..86b42177 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -25,7 +25,7 @@ Παραμονή σε λειτουργία Χειρονομία κλειδώματος Απενεργοποίηση αυτόματης φωτεινότητας - Απενεργοποίηση συρσίματος για στιγμιότυπο οθόνης + Disable three fingers swipe gesture Απενεργοποίηση εντοπισμού σφαλμάτων USB Επίπεδο αδιαφάνειας μενού επικάλυψης diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e048764e..7f62643d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -25,7 +25,7 @@ Permanecer encendido Gesto de bloqueo Desactivar brillo automático - Desactivar deslizar para captura de pantalla + Disable three fingers swipe gesture Desactivar depuración USB Nivel de opacidad del menú de superposición diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 2239a710..ddc531e2 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -25,7 +25,7 @@ بیدار بمان قفل کردن ژست غیرفعالسازی روشنایی خودکار - غیرفعالسازی گرفتن اسکرین شات با کشیدن انگشت + Disable three fingers swipe gesture غیرفعال کردن اشکال زدایی USB سطح شفافیت منوی همپوشانی diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 6f87e544..960a48a3 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -25,7 +25,7 @@ Pysy hereillä Lukitusele Poista automaattinen kirkkaus käytöstä - Poista kuvakaappausten pyyhkäisyele käytöstä + Disable three fingers swipe gesture Poista USB-vianetsintä käytöstä Peittokuvavalikon läpinäkyvyystaso diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 86d96cf9..1371e467 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -25,7 +25,7 @@ Rester éveillé Gestes de verrouillage Désactiver la luminosité automatique - Désactiver le glissement pour faire une capture d\'écran + Disable three fingers swipe gesture Désactiver le débogage USB Niveau d\'opacité du menu de superposition diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 0fcf2b45..67e5f18c 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -25,7 +25,7 @@ Ne zárja le a képernyőt Gesztusok gátlása Az automatikus fényerőszabályzás tiltása - Képernyőfotóhoz való húzás letiltása + Disable three fingers swipe gesture Az USB-hibakeresés tiltása Átfedés menü átlátszósági szintje diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index d0bf7d9e..9f640717 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -25,7 +25,7 @@ Tetap terjaga Kunci gestur Nonaktifkan kecerahan otomatis - Nonaktifkan gesek ke tangkapan layar + Disable three fingers swipe gesture Nonaktifkan USB debugging Tingkat opasitas hamparan menu diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 8d4f9880..c53f86a9 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -25,7 +25,7 @@ Resta attivo Blocca gesto Disabilita luminosità automatica - Disabilita lo scorrimento per screenshot + Disable three fingers swipe gesture Disabilita debug USB Livello di opacità menù sovrapposizione diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index df85c1b6..fa98022f 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -25,7 +25,7 @@ השאר פועל נעל מחוות בטל בהירות אוטומטית - בטל מחוות מסך מגע + Disable three fingers swipe gesture למנוע איתור באגים Overlay menu opacity level diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 567a0e4d..dc7527f3 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -25,7 +25,7 @@ 常に画面点灯 ジェスチャーをロック 自動明るさ調節を無効化 - スワイプでのスクリーンショットを無効化 + Disable three fingers swipe gesture USB デバッグを無効化 オーバーレイメニューの不透明度 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 4c6884eb..0683b7ec 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -25,7 +25,7 @@ 화면 켜짐 상태 유지 잠금 제스처 자동 밝기조절 해제 - 스와이프로 스크린샷 찍기 해제 + Disable three fingers swipe gesture USB 디버깅 비활성화 오버레이 메뉴 투명도 레벨 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 61c93b76..b8928572 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -25,7 +25,7 @@ Blijf wakker Vergrendel gebaar Automatische helderheid uitschakelen - Veeg naar schermafbeelding uitschakelen + Disable three fingers swipe gesture Usb-foutopsporing uitschakelen Transparantieniveau van overlappingsmenu diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index f08ef916..12a6e565 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -25,7 +25,7 @@ Stay awake Lock gesture Disable auto-brightness - Disable swipe to screenshot + Disable three fingers swipe gesture Disable USB debugging Overlay menu opacity level diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 9ab03c57..20d0e97b 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -25,7 +25,7 @@ Pozostaw włączony ekran Gest blokady Wyłącz automatyczną jasność - Wyłączenie funkcji przeciągnięcia palcem w celu wykonania zrzutu ekranu + Disable three fingers swipe gesture Wyłącz debugowanie USB Poziom przezroczystości nakładki menu diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f8081617..8a4bc370 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -25,7 +25,7 @@ Permanecer ativo Bloquear gestos Desativar brilho automático - Desativar deslize para captura de tela + Disable three fingers swipe gesture Desativar depuração USB Nível de opacidade do menu de opções diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index f5484a24..21f230eb 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -25,7 +25,7 @@ Manter ativo Bloquear gestos Desativar brilho automático - Desativar deslizar para capturar ecrã + Disable three fingers swipe gesture Desativar depuração USB Transparência do menu de sobreposição diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 753c4320..4a2733c8 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -25,7 +25,7 @@ Menține ecranul activ Blochează gesturile Dezactivează luminozitatea automată - Dezactivează glisarea pentru captură de ecran + Disable three fingers swipe gesture Dezactivează depanarea USB Opacitate pentru meniul suprapus diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 9777d77a..4a3a3a2a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -25,7 +25,7 @@ Не отключать экран Блокировать жесты Отключить автояркость - Отключить снимок экрана тремя пальцами + Disable three fingers swipe gesture Отключить отладку по USB Уровень прозрачности панели diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 8504e1f8..465f1f33 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -25,7 +25,7 @@ Nevypínať obrazovku Gesto uzamknutia Zakázať automatický jas - Zakázať gesto pre snímku obrazovky + Disable three fingers swipe gesture Zakázať ladenie USB Priehľadnosť vrstvy menu diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index f340b420..f470acb8 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -25,7 +25,7 @@ Uyanık kal Hareketi kilitle Otomatik parlaklığı devre dışı bırak - Üç parmak hareketini devre dışı bırak + Disable three fingers swipe gesture USB hata ayıklamasını devre dışı bırak Arayüz menüsü şeffaflığı diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 11b5a46d..4e9977c2 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -25,7 +25,7 @@ Залишати активним Жест блокування Вимкнути автояскравість - Вимкнути свайп для знімка екрану + Disable three fingers swipe gesture Вимкнути налагодження USB Рівень непрозорості меню ігрового режиму diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index ea66b190..21969db7 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -25,7 +25,7 @@ Không khóa màn hình Khóa cử chỉ Tắt độ sáng tự động - Tắt tính năng chụp ảnh màn hình + Disable three fingers swipe gesture Tắt gỡ lỗi USB Độ mờ bảng điều khiển nổi diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9a2fe1cc..e7b33069 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -25,7 +25,7 @@ 保持唤醒 锁定手势 禁用自动调节亮度 - 禁用滑动截屏 + Disable three fingers swipe gesture 禁用 USB 调试 覆盖菜单不透明度级别 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b70b7e1f..19d47138 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -25,7 +25,7 @@ 螢幕保持開啟 鎖定手勢 停用自動亮度 - 停用滑動截圖手勢 + Disable three fingers swipe gesture 停用 USB 偵錯 不透明度 From 85cd48e83dec08625b2cc28af315d87785d4e783 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 26 Aug 2024 12:15:24 +0530 Subject: [PATCH 149/214] GameSpace: Remove default action for three finger swipe Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/data/SessionState.kt | 4 ++-- .../java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt index c9f714bb..6ea42078 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SessionState.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * 2022 crDroid Android Project + * 2022-2024 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ data class SessionState( var packageName: String, var autoBrightness: Boolean? = null, var headsup: Boolean? = null, - var threeScreenshot: Int = 12, + var threeScreenshot: Int = 0, var ringerMode: Int = AudioManager.RINGER_MODE_NORMAL, var adbEnabled: Boolean? = null, ) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt index 296c281b..9e245f11 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/SystemSettings.kt @@ -62,13 +62,13 @@ class SystemSettings @Inject constructor( var threeScreenshot get() = LineageSettings.System.getIntForUser( - resolver, LineageSettings.System.KEY_THREE_FINGERS_SWIPE_ACTION, 12, + resolver, LineageSettings.System.KEY_THREE_FINGERS_SWIPE_ACTION, 0, UserHandle.USER_CURRENT ) - set(it) { + set(value) { LineageSettings.System.putIntForUser( resolver, LineageSettings.System.KEY_THREE_FINGERS_SWIPE_ACTION, - it.toInt(), UserHandle.USER_CURRENT + value, UserHandle.USER_CURRENT ) } From f51d89f82fff7e98cdb31be0e59320cc42c9b0e9 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 29 Aug 2024 18:23:22 +0300 Subject: [PATCH 150/214] New Crowdin updates (#86) * New translations strings.xml (Vietnamese) * New translations strings.xml (Turkish) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Russian) * New translations strings.xml (Polish) * New translations strings.xml (Greek) --- app/src/main/res/values-el-rGR/strings.xml | 2 +- app/src/main/res/values-pl-rPL/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 2 +- app/src/main/res/values-tr-rTR/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 86b42177..a9384bcf 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -25,7 +25,7 @@ Παραμονή σε λειτουργία Χειρονομία κλειδώματος Απενεργοποίηση αυτόματης φωτεινότητας - Disable three fingers swipe gesture + Απενεργοποιήστε τη χειρονομία ολίσθησης με τρία δάχτυλα Απενεργοποίηση εντοπισμού σφαλμάτων USB Επίπεδο αδιαφάνειας μενού επικάλυψης diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 20d0e97b..34a6ba86 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -25,7 +25,7 @@ Pozostaw włączony ekran Gest blokady Wyłącz automatyczną jasność - Disable three fingers swipe gesture + Wyłącz gest przesuwania trzema palcami Wyłącz debugowanie USB Poziom przezroczystości nakładki menu diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8a4bc370..b3b38da5 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -25,7 +25,7 @@ Permanecer ativo Bloquear gestos Desativar brilho automático - Disable three fingers swipe gesture + Desativar gesto de deslizar três dedos Desativar depuração USB Nível de opacidade do menu de opções diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 4a3a3a2a..eed21886 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -25,7 +25,7 @@ Не отключать экран Блокировать жесты Отключить автояркость - Disable three fingers swipe gesture + Отключить жест тремя пальцами Отключить отладку по USB Уровень прозрачности панели diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index f470acb8..137a3b51 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -25,7 +25,7 @@ Uyanık kal Hareketi kilitle Otomatik parlaklığı devre dışı bırak - Disable three fingers swipe gesture + Üç parmakla kaydırma hareketini devre dışı bırak USB hata ayıklamasını devre dışı bırak Arayüz menüsü şeffaflığı diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 21969db7..1bf4e7ef 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -25,7 +25,7 @@ Không khóa màn hình Khóa cử chỉ Tắt độ sáng tự động - Disable three fingers swipe gesture + Tắt cử chỉ vuốt ba ngón tay Tắt gỡ lỗi USB Độ mờ bảng điều khiển nổi From a3775dd88e3524df26e59b31774efeedd2aba037 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 9 Sep 2024 17:59:36 +0300 Subject: [PATCH 151/214] New Crowdin updates (#87) * New translations strings.xml (Italian) * New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index c53f86a9..19b359b8 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -25,7 +25,7 @@ Resta attivo Blocca gesto Disabilita luminosità automatica - Disable three fingers swipe gesture + Disabilita il gesto di scorrimento a tre dita Disabilita debug USB Livello di opacità menù sovrapposizione diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 19d47138..126c49a6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -25,7 +25,7 @@ 螢幕保持開啟 鎖定手勢 停用自動亮度 - Disable three fingers swipe gesture + 停用三指滑動手勢 停用 USB 偵錯 不透明度 From bdf4c1317b9da67d4b009042f0f9482b8c9f148a Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Tue, 1 Oct 2024 20:17:52 +0300 Subject: [PATCH 152/214] New translations (#88) --- app/src/main/res/values-hu-rHU/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 67e5f18c..a9f63da0 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -25,7 +25,7 @@ Ne zárja le a képernyőt Gesztusok gátlása Az automatikus fényerőszabályzás tiltása - Disable three fingers swipe gesture + Három ujjas húzási gesztus letiltása Az USB-hibakeresés tiltása Átfedés menü átlátszósági szintje From c06c82dc6754531b19aa3f11cdb731eac5058380 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 6 Oct 2024 14:28:26 +0300 Subject: [PATCH 153/214] New Crowdin updates (#90) * New translations strings.xml (Persian) * New translations strings.xml (Japanese) * New translations strings.xml (German) * New translations strings.xml (Romanian) --- app/src/main/res/values-de-rDE/strings.xml | 2 +- app/src/main/res/values-fa-rIR/strings.xml | 6 +++--- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-ro-rRO/strings.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 2034e918..c40fc790 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -25,7 +25,7 @@ Display eingeschaltet lassen Gesten deaktivieren Auto-Helligkeit deaktivieren - Disable three fingers swipe gesture + Geste „Streichen mit drei Fingern“ deaktivieren USB-Debugging deaktivieren Transparenz des Overlay-Menüs diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index ddc531e2..6b138b56 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -25,7 +25,7 @@ بیدار بمان قفل کردن ژست غیرفعالسازی روشنایی خودکار - Disable three fingers swipe gesture + حرکت تند کشیدن سه انگشت را غیرفعال کنید غیرفعال کردن اشکال زدایی USB سطح شفافیت منوی همپوشانی @@ -82,6 +82,6 @@ تماس دریافت شده از %1$s تماس رد شده از %1$s - Danmaku Notification mode - Show notification as danmaku aka bullet comments while game is active + حالت اعلان گلوله جهنمی + در حالی که بازی فعال است، اعلان را به حالت اعلان گلوله جهنمی نشان دهید diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index dc7527f3..20335c76 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -25,7 +25,7 @@ 常に画面点灯 ジェスチャーをロック 自動明るさ調節を無効化 - Disable three fingers swipe gesture + 3本指スワイプジェスチャーを無効化 USB デバッグを無効化 オーバーレイメニューの不透明度 diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 4a2733c8..b069c328 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -25,7 +25,7 @@ Menține ecranul activ Blochează gesturile Dezactivează luminozitatea automată - Disable three fingers swipe gesture + Dezactivează gestul de trei degete Dezactivează depanarea USB Opacitate pentru meniul suprapus From f53a39afb50aee19d12c45402bb21dd8b64950d0 Mon Sep 17 00:00:00 2001 From: YiQiu Date: Tue, 20 Aug 2024 12:34:35 +0800 Subject: [PATCH 154/214] GameSpace: Introduce Quick Start app feature * tool for launching apps in freeform mode while gaming etc. Signed-off-by: minaripenguin Co-Authored-By: minaripenguin <110431802+minaripenguin@users.noreply.github.com> --- .../preferences/QuickStartAppPreference.java | 95 ++++++++ ...QuickStartAppPreferenceDialogFragment.java | 109 +++++++++ .../gamespace/settings/SettingsFragment.kt | 13 ++ .../gamespace/widget/QuickStartAppView.java | 212 ++++++++++++++++++ app/src/main/res/layout/panel_view.xml | 35 +++ app/src/main/res/values-zh-rCN/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/root_preferences.xml | 5 + 8 files changed, 473 insertions(+) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreference.java create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreference.java b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreference.java new file mode 100644 index 00000000..8f53f877 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreference.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2023-2024 the risingOS Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.preferences; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import androidx.preference.DialogPreference; + +import java.util.ArrayList; +import java.util.List; + +public class QuickStartAppPreference extends DialogPreference { + + private String[] appPackageNames; + private String[] appNames; + private Drawable[] appIcons; + + public QuickStartAppPreference(Context context, AttributeSet attrs) { + super(context, attrs); + loadInstalledUserApps(context); + } + + private void loadInstalledUserApps(Context context) { + PackageManager pm = context.getPackageManager(); + List apps = pm.getInstalledApplications(PackageManager.GET_META_DATA); + List packageNames = new ArrayList<>(); + List names = new ArrayList<>(); + List icons = new ArrayList<>(); + for (ApplicationInfo app : apps) { + if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { + packageNames.add(app.packageName); + names.add(pm.getApplicationLabel(app).toString()); + icons.add(pm.getApplicationIcon(app)); + } + } + appPackageNames = packageNames.toArray(new String[0]); + appNames = names.toArray(new String[0]); + appIcons = icons.toArray(new Drawable[0]); + sortAppsAlphabetically(); + } + + private void sortAppsAlphabetically() { + for (int i = 0; i < appNames.length - 1; i++) { + for (int j = i + 1; j < appNames.length; j++) { + if (appNames[i].compareToIgnoreCase(appNames[j]) > 0) { + swapApps(i, j); + } + } + } + } + + private void swapApps(int i, int j) { + String tempName = appNames[i]; + Drawable tempIcon = appIcons[i]; + String tempPackage = appPackageNames[i]; + appNames[i] = appNames[j]; + appIcons[i] = appIcons[j]; + appPackageNames[i] = appPackageNames[j]; + appNames[j] = tempName; + appIcons[j] = tempIcon; + appPackageNames[j] = tempPackage; + } + + public String[] getAppPackageNames() { + return appPackageNames; + } + + public String[] getAppNames() { + return appNames; + } + + public Drawable[] getAppIcons() { + return appIcons; + } + + public void saveValue(String value) { + persistString(value); + } +} \ No newline at end of file diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java new file mode 100644 index 00000000..8cd47644 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2023-2024 the risingOS Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.preferences; + +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.provider.Settings; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.preference.PreferenceDialogFragmentCompat; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +import io.chaldeaprjkt.gamespace.R; + +public class QuickStartAppPreferenceDialogFragment extends PreferenceDialogFragmentCompat { + + private Set selectedPackages = new HashSet<>(); + + public static QuickStartAppPreferenceDialogFragment newInstance(String key) { + final QuickStartAppPreferenceDialogFragment fragment = new QuickStartAppPreferenceDialogFragment(); + final Bundle b = new Bundle(1); + b.putString(ARG_KEY, key); + fragment.setArguments(b); + return fragment; + } + + @Override + protected void onPrepareDialogBuilder(@NonNull AlertDialog.Builder builder) { + super.onPrepareDialogBuilder(builder); + QuickStartAppPreference preference = (QuickStartAppPreference) getPreference(); + Context context = getContext(); + if (preference == null || context == null) { + return; + } + String savedApps = Settings.System.getString(context.getContentResolver(), "quick_start_apps"); + if (savedApps != null && !savedApps.isEmpty()) { + String[] savedAppsArray = savedApps.split(","); + for (String app : savedAppsArray) { + selectedPackages.add(app); + } + } + boolean[] checkedItems = new boolean[preference.getAppNames().length]; + String[] appPackageNames = preference.getAppPackageNames(); + for (int i = 0; i < appPackageNames.length; i++) { + checkedItems[i] = selectedPackages.contains(appPackageNames[i]); + } + builder.setTitle(R.string.quick_start_apps_title) + .setMultiChoiceItems(preference.getAppNames(), checkedItems, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + String selectedApp = appPackageNames[which]; + if (isChecked) { + if (selectedPackages.size() < 4) { + selectedPackages.add(selectedApp); + } else { + ((AlertDialog) dialog).getListView().setItemChecked(which, false); + } + } else { + selectedPackages.remove(selectedApp); + } + } + }) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + saveSelectedApps(context); + } + }) + .setNegativeButton(android.R.string.cancel, null); + } + + @Override + public void onDialogClosed(boolean positiveResult) {} + + private void saveSelectedApps(Context context) { + String[] selectedArray = selectedPackages.toArray(new String[0]); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 4; i++) { + if (i < selectedArray.length) { + sb.append(selectedArray[i]); + } + if (i < 3) { + sb.append(","); + } + } + Settings.System.putString(context.getContentResolver(), "quick_start_apps", sb.toString()); + QuickStartAppPreference preference = (QuickStartAppPreference) getPreference(); + if (preference != null) { + preference.saveValue(sb.toString()); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt index a340f9f1..83d9f0bb 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt @@ -1,6 +1,7 @@ /* * Copyright (C) 2021 Chaldeaprjkt * Copyright (C) 2022-2024 crDroid Android Project + * 2023-2024 the risingOS Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +28,8 @@ import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.preferences.AppListPreferences import io.chaldeaprjkt.gamespace.preferences.appselector.AppSelectorActivity +import io.chaldeaprjkt.gamespace.preferences.QuickStartAppPreference +import io.chaldeaprjkt.gamespace.preferences.QuickStartAppPreferenceDialogFragment @AndroidEntryPoint(PreferenceFragmentCompat::class) class SettingsFragment : Hilt_SettingsFragment() { @@ -71,4 +74,14 @@ class SettingsFragment : Hilt_SettingsFragment() { super.onResume() apps?.updateAppList() } + + override fun onDisplayPreferenceDialog(preference: Preference) { + if (preference is QuickStartAppPreference) { + val dialogFragment = QuickStartAppPreferenceDialogFragment.newInstance(preference.key) + dialogFragment.setTargetFragment(this, 0) + dialogFragment.show(parentFragmentManager, "QuickStartAppPreferenceDialogFragment") + } else { + super.onDisplayPreferenceDialog(preference) + } + } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java new file mode 100644 index 00000000..62efee73 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2023-2024 the risingOS Android Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.widget; + +import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.ActivityOptions; +import android.app.WindowConfiguration; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.database.ContentObserver; +import android.graphics.Point; +import android.graphics.Rect; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.RemoteException; +import android.os.UserHandle; +import android.provider.Settings; +import android.util.AttributeSet; +import android.view.Display; +import android.view.View; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.window.SplashScreen; + +import androidx.annotation.Nullable; + +import java.util.List; + +import io.chaldeaprjkt.gamespace.R; + +public class QuickStartAppView extends LinearLayout { + + private ImageView appIcon1; + private ImageView appIcon2; + private ImageView appIcon3; + private ImageView appIcon4; + private Context mContext; + private SettingsContentObserver mObserver; + private PackageManager mPackageManager; + private ActivityOptions mActivityOptions; + + public QuickStartAppView(Context context) { + super(context); + init(context); + } + + public QuickStartAppView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public QuickStartAppView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + appIcon1 = findViewById(R.id.app_icon_1); + appIcon2 = findViewById(R.id.app_icon_2); + appIcon3 = findViewById(R.id.app_icon_3); + appIcon4 = findViewById(R.id.app_icon_4); + updateAppIcons(); + } + + private void init(Context context) { + mContext = context; + mObserver = new SettingsContentObserver(new Handler()); + mContext.getContentResolver().registerContentObserver( + Settings.System.getUriFor("quick_start_apps"), true, mObserver); + mPackageManager = mContext.getPackageManager(); + mActivityOptions = ActivityOptions.makeBasic(); + mActivityOptions.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM); + } + + private void updateAppIcons() { + String appPackageNames = Settings.System.getString(mContext.getContentResolver(), "quick_start_apps"); + if (appPackageNames != null && !appPackageNames.isEmpty()) { + String[] packages = appPackageNames.split(","); + if (packages.length > 0) { + setupAppIcons(packages); + setVisibility(View.VISIBLE); + } else { + setVisibility(View.GONE); + } + } else { + setVisibility(View.GONE); + } + } + + private void setupAppIcons(String[] packages) { + hideAllIcons(); + for (int i = 0; i < packages.length; i++) { + String packageName = packages[i]; + switch (i) { + case 0: + setupAppIcon(appIcon1, packageName); + break; + case 1: + setupAppIcon(appIcon2, packageName); + break; + case 2: + setupAppIcon(appIcon3, packageName); + break; + case 3: + setupAppIcon(appIcon4, packageName); + break; + default: + break; + } + } + } + + private void hideAllIcons() { + appIcon1.setVisibility(GONE); + appIcon2.setVisibility(GONE); + appIcon3.setVisibility(GONE); + appIcon4.setVisibility(GONE); + } + + private void setupAppIcon(ImageView imageView, @Nullable String packageName) { + if (imageView == null) return; + if (packageName == null || packageName.isEmpty()) { + imageView.setVisibility(GONE); + } else { + try { + ApplicationInfo appInfo = mContext.getPackageManager().getApplicationInfo(packageName, 0); + imageView.setImageDrawable(mContext.getPackageManager().getApplicationIcon(appInfo)); + imageView.setOnClickListener(v -> launchAppInFreeformMode(packageName)); + imageView.setVisibility(VISIBLE); + } catch (PackageManager.NameNotFoundException e) { + imageView.setVisibility(GONE); + } + } + } + + private void launchAppInFreeformMode(String packageName) { + ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); + // force stop the app before launching in freeform to avoid ui glitches - follows legacy freeform behaviour + if (am != null) { + am.forceStopPackage(packageName); + } + WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + Display display = windowManager.getDefaultDisplay(); + Point screenSize = new Point(); + display.getSize(screenSize); + int halfWidth = screenSize.x / 2; + int halfHeight = screenSize.y / 2; + Configuration configuration = mContext.getResources().getConfiguration(); + boolean isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE; + Rect launchBounds; + if (isLandscape) { + launchBounds = new Rect(0, 0, halfWidth, halfHeight); + } else { + int centerX = screenSize.x / 2; + int centerY = screenSize.y / 2; + int width = Math.min(screenSize.x, screenSize.y) * 3 / 4; + int height = width; + launchBounds = new Rect(centerX - width / 2, centerY - height / 2, centerX + width / 2, centerY + height / 2); + } + mActivityOptions.setLaunchBounds(launchBounds); + mActivityOptions.setTaskAlwaysOnTop(true); + mActivityOptions.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); + mActivityOptions.setPendingIntentBackgroundActivityStartMode(MODE_BACKGROUND_ACTIVITY_START_ALLOWED); + mActivityOptions.setPendingIntentBackgroundActivityLaunchAllowedByPermission(true); + try { + Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(packageName); + if (startAppIntent != null) { + mContext.startActivity(startAppIntent, mActivityOptions.toBundle()); + } + } catch (Exception e) {} + } + + private class SettingsContentObserver extends ContentObserver { + SettingsContentObserver(Handler handler) { + super(handler); + } + @Override + public void onChange(boolean selfChange, Uri uri) { + super.onChange(selfChange, uri); + updateAppIcons(); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + mContext.getContentResolver().unregisterContentObserver(mObserver); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 10ee6505..5b2423e7 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -90,6 +90,41 @@ android:textSize="13sp" /> + + + + + + + + 快速启动应用程序 + 选择要快速启动的应用 游戏空间 管理您的游戏设置 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 195d21c7..6b15d97f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,6 +17,8 @@ --> + Quick Start Apps + Select apps to launch quickly Game Space Manage your gaming setup diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 3ce9c3de..0e509d0e 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -89,6 +89,11 @@ + + From 596953075f8a2b253d26dd5ef23bf0caea378b6a Mon Sep 17 00:00:00 2001 From: YiQiu Date: Wed, 21 Aug 2024 02:40:56 +0800 Subject: [PATCH 155/214] GameSpace: Fix the limit of only four widget apps --- app/build.gradle | 1 + ...QuickStartAppPreferenceDialogFragment.java | 15 +-- .../gamespace/widget/QuickStartAppView.java | 126 +++++++++++------- app/src/main/res/layout/panel_view.xml | 35 +---- .../main/res/layout/quick_start_app_item.xml | 13 ++ 5 files changed, 101 insertions(+), 89 deletions(-) create mode 100644 app/src/main/res/layout/quick_start_app_item.xml diff --git a/app/build.gradle b/app/build.gradle index 4498a2f2..b977da06 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,6 +62,7 @@ dependencies { implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.code.gson:gson:2.10.1' implementation 'com.google.dagger:hilt-android:2.45' + implementation 'androidx.recyclerview:recyclerview:1.1.0' kapt 'com.google.dagger:hilt-compiler:2.45' } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java index 8cd47644..55c57e74 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java @@ -67,11 +67,7 @@ protected void onPrepareDialogBuilder(@NonNull AlertDialog.Builder builder) { public void onClick(DialogInterface dialog, int which, boolean isChecked) { String selectedApp = appPackageNames[which]; if (isChecked) { - if (selectedPackages.size() < 4) { - selectedPackages.add(selectedApp); - } else { - ((AlertDialog) dialog).getListView().setItemChecked(which, false); - } + selectedPackages.add(selectedApp); } else { selectedPackages.remove(selectedApp); } @@ -92,11 +88,10 @@ public void onDialogClosed(boolean positiveResult) {} private void saveSelectedApps(Context context) { String[] selectedArray = selectedPackages.toArray(new String[0]); StringBuilder sb = new StringBuilder(); - for (int i = 0; i < 4; i++) { - if (i < selectedArray.length) { - sb.append(selectedArray[i]); - } - if (i < 3) { + for (int i = 0; i < selectedArray.length; i++) { + sb.append(selectedArray[i]); + + if (i < selectedArray.length - 1) { sb.append(","); } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java index 62efee73..3cf76d2e 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java @@ -37,24 +37,31 @@ import android.provider.Settings; import android.util.AttributeSet; import android.view.Display; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; import android.window.SplashScreen; import androidx.annotation.Nullable; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import io.chaldeaprjkt.gamespace.R; public class QuickStartAppView extends LinearLayout { - - private ImageView appIcon1; - private ImageView appIcon2; - private ImageView appIcon3; - private ImageView appIcon4; + private RecyclerView recyclerView; private Context mContext; private SettingsContentObserver mObserver; private PackageManager mPackageManager; @@ -78,10 +85,7 @@ public QuickStartAppView(Context context, @Nullable AttributeSet attrs, int defS @Override protected void onFinishInflate() { super.onFinishInflate(); - appIcon1 = findViewById(R.id.app_icon_1); - appIcon2 = findViewById(R.id.app_icon_2); - appIcon3 = findViewById(R.id.app_icon_3); - appIcon4 = findViewById(R.id.app_icon_4); + recyclerView = findViewById(R.id.quick_start_app_list); updateAppIcons(); } @@ -111,33 +115,12 @@ private void updateAppIcons() { } private void setupAppIcons(String[] packages) { - hideAllIcons(); - for (int i = 0; i < packages.length; i++) { - String packageName = packages[i]; - switch (i) { - case 0: - setupAppIcon(appIcon1, packageName); - break; - case 1: - setupAppIcon(appIcon2, packageName); - break; - case 2: - setupAppIcon(appIcon3, packageName); - break; - case 3: - setupAppIcon(appIcon4, packageName); - break; - default: - break; - } - } - } - - private void hideAllIcons() { - appIcon1.setVisibility(GONE); - appIcon2.setVisibility(GONE); - appIcon3.setVisibility(GONE); - appIcon4.setVisibility(GONE); + recyclerView.setHasFixedSize(true);//设置固定大小 + recyclerView.setItemAnimator(new DefaultItemAnimator());//设置默认动画 + LinearLayoutManager mLayoutManage = new LinearLayoutManager(mContext); + mLayoutManage.setOrientation(RecyclerView.HORIZONTAL);//设置滚动方向,横向滚动 + recyclerView.setLayoutManager(mLayoutManage); + recyclerView.setAdapter(new MyRecyclerViewAdapter(recyclerView, Arrays.asList(packages))); } private void setupAppIcon(ImageView imageView, @Nullable String packageName) { @@ -166,25 +149,20 @@ private void launchAppInFreeformMode(String packageName) { Display display = windowManager.getDefaultDisplay(); Point screenSize = new Point(); display.getSize(screenSize); - int halfWidth = screenSize.x / 2; - int halfHeight = screenSize.y / 2; Configuration configuration = mContext.getResources().getConfiguration(); - boolean isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE; - Rect launchBounds; - if (isLandscape) { - launchBounds = new Rect(0, 0, halfWidth, halfHeight); - } else { - int centerX = screenSize.x / 2; - int centerY = screenSize.y / 2; - int width = Math.min(screenSize.x, screenSize.y) * 3 / 4; - int height = width; - launchBounds = new Rect(centerX - width / 2, centerY - height / 2, centerX + width / 2, centerY + height / 2); - } + + int centerX = screenSize.x / 2; + int centerY = screenSize.y / 2; + int width = Math.min(screenSize.x, screenSize.y) * 1 / 2; + int height = Math.max(screenSize.x, screenSize.y) * 1 / 2; + Rect launchBounds = new Rect(centerX - width / 2, centerY - height / 2, centerX + width / 2, centerY + height / 2); + mActivityOptions.setLaunchBounds(launchBounds); mActivityOptions.setTaskAlwaysOnTop(true); mActivityOptions.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); mActivityOptions.setPendingIntentBackgroundActivityStartMode(MODE_BACKGROUND_ACTIVITY_START_ALLOWED); mActivityOptions.setPendingIntentBackgroundActivityLaunchAllowedByPermission(true); + try { Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(packageName); if (startAppIntent != null) { @@ -209,4 +187,52 @@ protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mContext.getContentResolver().unregisterContentObserver(mObserver); } -} \ No newline at end of file + + public class MyRecyclerViewAdapter extends RecyclerView.Adapter { + private Context mContext; + private List dataList = new ArrayList<>(); + + public MyRecyclerViewAdapter(RecyclerView recyclerView) { + this.mContext = recyclerView.getContext(); + } + + public MyRecyclerViewAdapter(RecyclerView recyclerView, List dataList) { + this.mContext = recyclerView.getContext(); + setData(dataList); + } + + public void setData(List dataList) { + if (null != dataList) { + this.dataList.clear(); + this.dataList.addAll(dataList); + notifyDataSetChanged(); + } + } + + @Override + public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.quick_start_app_item, parent, false); + return new RecyclerHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerHolder holder, int position) { + setupAppIcon(holder.imageView, dataList.get(position)); + } + + @Override + public int getItemCount() { + return dataList.size(); + } + + class RecyclerHolder extends RecyclerView.ViewHolder { + ImageView imageView; + + private RecyclerHolder(View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.app_icon); + imageView.setVisibility(GONE); + } + } + } +} diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 5b2423e7..36d3ea45 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -91,38 +91,15 @@ - - - - + + diff --git a/app/src/main/res/layout/quick_start_app_item.xml b/app/src/main/res/layout/quick_start_app_item.xml new file mode 100644 index 00000000..64e87380 --- /dev/null +++ b/app/src/main/res/layout/quick_start_app_item.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file From f7828ca2b4429ed79758586fce125dc371f51096 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 30 Oct 2024 20:36:55 +0200 Subject: [PATCH 156/214] New Crowdin updates (#91) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (French) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) --- app/src/main/res/values-cs-rCZ/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-fr-rFR/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 844f0409..932f8a69 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -25,7 +25,7 @@ Nevypínat obrazovku Zakázat gesta Zakázat automatický jas - Disable three fingers swipe gesture + Zakázat gesto přejetím třemi prsty Zakázat ladění USB Úroveň průhlednosti překrytí menu diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 7f62643d..48374e8d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -25,7 +25,7 @@ Permanecer encendido Gesto de bloqueo Desactivar brillo automático - Disable three fingers swipe gesture + Desactivar gesto de deslizar con tres dedos Desactivar depuración USB Nivel de opacidad del menú de superposición diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 1371e467..47f024d4 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -25,7 +25,7 @@ Rester éveillé Gestes de verrouillage Désactiver la luminosité automatique - Disable three fingers swipe gesture + Désactiver le geste de balayage à trois doigts Désactiver le débogage USB Niveau d\'opacité du menu de superposition diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e7b33069..be4ace47 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -25,7 +25,7 @@ 保持唤醒 锁定手势 禁用自动调节亮度 - Disable three fingers swipe gesture + 禁用三指滑动 禁用 USB 调试 覆盖菜单不透明度级别 From bec39c2d8837d32c1258070f5d10ae4029b10aa4 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Mon, 4 Nov 2024 14:36:43 +0200 Subject: [PATCH 157/214] New Crowdin updates (#94) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Turkish) * New translations strings.xml (Polish) * New translations strings.xml (Russian) * New translations strings.xml (German) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Italian) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Greek) --- app/src/main/res/values-af-rZA/strings.xml | 2 ++ app/src/main/res/values-ar-rSA/strings.xml | 2 ++ app/src/main/res/values-ca-rES/strings.xml | 2 ++ app/src/main/res/values-cs-rCZ/strings.xml | 2 ++ app/src/main/res/values-da-rDK/strings.xml | 2 ++ app/src/main/res/values-de-rDE/strings.xml | 2 ++ app/src/main/res/values-el-rGR/strings.xml | 2 ++ app/src/main/res/values-es-rES/strings.xml | 2 ++ app/src/main/res/values-fa-rIR/strings.xml | 2 ++ app/src/main/res/values-fi-rFI/strings.xml | 2 ++ app/src/main/res/values-fr-rFR/strings.xml | 2 ++ app/src/main/res/values-hu-rHU/strings.xml | 2 ++ app/src/main/res/values-in-rID/strings.xml | 2 ++ app/src/main/res/values-it-rIT/strings.xml | 2 ++ app/src/main/res/values-iw-rIL/strings.xml | 2 ++ app/src/main/res/values-ja-rJP/strings.xml | 2 ++ app/src/main/res/values-ko-rKR/strings.xml | 2 ++ app/src/main/res/values-nl-rNL/strings.xml | 2 ++ app/src/main/res/values-pl-rPL/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 2 ++ app/src/main/res/values-pt-rPT/strings.xml | 2 ++ app/src/main/res/values-ro-rRO/strings.xml | 2 ++ app/src/main/res/values-ru-rRU/strings.xml | 2 ++ app/src/main/res/values-sk-rSK/strings.xml | 2 ++ app/src/main/res/values-tr-rTR/strings.xml | 2 ++ app/src/main/res/values-uk-rUA/strings.xml | 2 ++ app/src/main/res/values-vi-rVN/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ 28 files changed, 56 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 5c91f58f..4e37b5ba 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Game Space Bestuur jou speletjie-opstelling diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 4b5429da..0183f4a2 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly وضع الألعاب إدارة إعدادات ألعابك diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index e1281f2b..f5e44b78 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Espai de Jocs Gestiona la configuració de joc diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 932f8a69..daa37cf9 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Herní prostor Spravovat herního nastavení diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 48727b89..d7e358bc 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Spil Rum Administrer dit spilopsætning diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c40fc790..f6ec2ea1 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Wähle Apps für den Schnellstart Spielmodus Spieleinrichtung verwalten diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index a9384bcf..29d4fdbb 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Εφαρμογές Γρήγορης Εκκίνησης + Επιλέξτε εφαρμογές για γρήγορη εκκίνηση Χώρος Παιχνιδιού Διαχειριστείτε τις ρυθμίσεις παιχνιδιών σας diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 48374e8d..86ca3c6b 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Espacio de Juego Administra tu configuración de juegos diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 6b138b56..f4fffd15 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly فضای بازی تنظیمات بازی خود را مدیریت کنید diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 960a48a3..de7fb371 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Game Space Hallitse peliasetuksiasi diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 47f024d4..9f73ee4c 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Espace Jeux Gérez votre configuration de jeu diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index a9f63da0..0df6b04a 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Játéktér Játékbeállítások kezelése diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 9f640717..ed1dfdd8 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Ruang Game Kelola pengaturan game Anda diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 19b359b8..9f776379 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + App di avvio rapido + Seleziona le app da avviare rapidamente Spazio di gioco Gestisci la tua configurazione di gioco diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index fa98022f..cee67bd4 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly מרכז משחקים נהל את הגדרות המשחק שלך diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 20335c76..324f1b9a 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly ゲームスペース ゲームの設定を管理 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 0683b7ec..f8927de1 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly 게임 공간 게이밍 설정을 관리하기 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index b8928572..5cd1f349 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Game ruimte Beheer uw gaming-instellingen diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 34a6ba86..0e47d3b4 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Aplikacje szybkiego startu + Wybierz aplikacje do szybkiego uruchamiania Przestrzeń gier Zarządzaj konfiguracją gier diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b3b38da5..fb2cc9d8 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Selecione os Aplicativos de Início Rápido Espaço de Jogos Gerencie sua configuração de jogos diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 21f230eb..e7b6f0e5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Espaço de jogo Gerir a sua configuração de jogos diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index b069c328..0b144020 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Spațiu de jocuri Gestionează-ți configurarea jocurilor diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index eed21886..2f4e1806 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Быстрый запуск приложений + Выберите приложения для быстрого запуска Поиграем? Настройка игровых возможностей diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 465f1f33..ffac545a 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Herný priestor Správa herných nastavení diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 137a3b51..5fb05781 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Hızlı Başlangıç Uygulamaları + Hızlı başlatmak için uygulamaları seçin Oyun Alanı Oyun kurulumunuzu yönetin diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 4e9977c2..a349e619 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Ігровий Простір Керування налаштуваннями гри diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 1bf4e7ef..7b146e1c 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Không gian trò chơi Quản lý thiết lập trò chơi của bạn diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 126c49a6..5abb2e52 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + 快速啟動應用程式 + 選擇要快速啟動的應用程式 遊戲空間 管理您的遊戲設定 From e41011b87b487a03ee80d0bab0af7f60c9063610 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 8 Nov 2024 16:03:25 +0200 Subject: [PATCH 158/214] New translations (#96) --- app/src/main/res/values-de-rDE/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index f6ec2ea1..23855018 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Quick Start Apps - Wähle Apps für den Schnellstart + Schnellstart-Apps + Apps für Schnellstart auswählen Spielmodus Spieleinrichtung verwalten From 3e8a2bacb6b2eeff3c23fb03faf94ffb71d60145 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 10 Nov 2024 09:22:45 +0200 Subject: [PATCH 159/214] New Crowdin updates (#97) * New translations strings.xml (Czech) * New translations strings.xml (Romanian) --- app/src/main/res/values-cs-rCZ/strings.xml | 4 ++-- app/src/main/res/values-ro-rRO/strings.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index daa37cf9..7460f6a8 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly + Rychlé spuštění aplikací + Vyberte aplikace pro rychlé spuštění Herní prostor Spravovat herního nastavení diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 0b144020..0c590b40 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly + Pornire rapidă a aplicațiilor + Selectați aplicațiile pentru lansare rapidă Spațiu de jocuri Gestionează-ți configurarea jocurilor From b88b734986fd85797aeeb141d50ae7fad491534c Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 14 Nov 2024 22:18:24 +0200 Subject: [PATCH 160/214] New Crowdin updates (#98) * New translations strings.xml (Persian) * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-fa-rIR/strings.xml | 4 ++-- app/src/main/res/values-pt-rBR/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index f4fffd15..4fdacc1c 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly + برنامه‌های شروع سریع + برنامه‌ها را برای راه‌اندازی سریع انتخاب کنید فضای بازی تنظیمات بازی خود را مدیریت کنید diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fb2cc9d8..358a0c82 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,7 +16,7 @@ limitations under the License. --> - Quick Start Apps + Iniciar Aplicativos rapidamente Selecione os Aplicativos de Início Rápido Espaço de Jogos Gerencie sua configuração de jogos From d88d4257043910f4ee6de8e6bec65a7cae11b8d9 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 18 Nov 2024 00:27:23 +0530 Subject: [PATCH 161/214] GameSpace: Prevent duplicate instances of gamebar Fixes: https://github.com/crdroidandroid/issue_tracker/issues/556 Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 20 ++++--- .../gamebar/GameBroadcastReceiver.kt | 24 ++++---- .../gamespace/gamebar/SessionService.kt | 58 +++++++++++++------ 3 files changed, 67 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index ed5a3314..6a544916 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -146,7 +146,9 @@ class GameBarService : Hilt_GameBarService() { } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - super.onStartCommand(intent, flags, startId) + if (::rootBarView.isInitialized && rootBarView.isAttachedToWindow) { + return START_STICKY + } when (intent?.action) { ACTION_STOP -> onGameLeave() ACTION_START -> onGameStart() @@ -161,8 +163,8 @@ class GameBarService : Hilt_GameBarService() { } override fun onDestroy() { - danmakuService.destroy() onGameLeave() + danmakuService.destroy() super.onDestroy() } @@ -191,11 +193,15 @@ class GameBarService : Hilt_GameBarService() { fun onGameLeave() { shouldClose = true - if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { - wm.removeViewImmediate(rootPanelView) - } - if (::rootBarView.isInitialized && rootBarView.isAttachedToWindow) { - wm.removeViewImmediate(rootBarView) + try { + if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { + wm.removeViewImmediate(rootPanelView) + } + if (::rootBarView.isInitialized && rootBarView.isAttachedToWindow) { + wm.removeViewImmediate(rootBarView) + } + } catch (e: Exception) { + e.printStackTrace() } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt index fddcff59..8b0a4ca1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBroadcastReceiver.kt @@ -24,25 +24,30 @@ import android.os.Handler import android.os.Looper import android.os.UserHandle - class GameBroadcastReceiver : BroadcastReceiver() { + private val handler by lazy { Handler(Looper.getMainLooper()) } + override fun onReceive(context: Context, intent: Intent) { when (intent.action) { GAME_START -> context.onGameStart(intent) - GAME_STOP -> context.onGameStop(intent) + GAME_STOP -> context.onGameStop() } } private fun Context.onGameStart(intent: Intent) { - handler.post { resendBroadcast(intent) } - val app = intent.getStringExtra(SessionService.EXTRA_PACKAGE_NAME)!! - SessionService.start(this, app) + val app = intent.getStringExtra(SessionService.EXTRA_PACKAGE_NAME) ?: return + handler.post { + resendBroadcast(intent) + SessionService.start(this, app) + } } - private fun Context.onGameStop(intent: Intent) { - handler.post { resendBroadcast(intent) } - SessionService.stop(this) + private fun Context.onGameStop() { + handler.post { + resendBroadcast(Intent(GAME_STOP)) + SessionService.stop(this) + } } private fun Context.resendBroadcast(prevIntent: Intent) { @@ -57,8 +62,7 @@ class GameBroadcastReceiver : BroadcastReceiver() { .forEach { (intent.clone() as Intent).apply { setPackage(it) - sendBroadcastAsUser(this, UserHandle.CURRENT, - android.Manifest.permission.MANAGE_GAME_MODE) + sendBroadcastAsUser(this, UserHandle.CURRENT, android.Manifest.permission.MANAGE_GAME_MODE) } } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index 90ab42f6..01f555f3 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -62,6 +62,7 @@ class SessionService : Hilt_SessionService() { lateinit var callListener: CallListener private val scope = CoroutineScope(Job() + Dispatchers.IO) + private var isRunning = false private val gameBarConnection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName?, service: IBinder?) { @@ -76,26 +77,34 @@ class SessionService : Hilt_SessionService() { } } - private lateinit var commandIntent: Intent private lateinit var gameBar: GameBarService private lateinit var gameManager: GameManager private var isBarConnected = false + private var commandIntent: Intent? = null @SuppressLint("WrongConstant") override fun onCreate() { super.onCreate() + isRunning = true try { screenUtils.bind() } catch (e: RemoteException) { - Log.d(TAG, e.toString()) + Log.e(TAG, "Error binding ScreenUtils: $e") } gameManager = getSystemService(Context.GAME_SERVICE) as GameManager gameModeUtils.bind(gameManager) } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + if (!isRunning) { + Log.w(TAG, "Service is not properly initialized. Stopping.") + stopSelf() + return START_NOT_STICKY + } + intent?.let { commandIntent = it } super.onStartCommand(intent, flags, startId) + if (intent == null && flags == 0 && startId > 1) { return tryStartFromDeath() } @@ -104,10 +113,14 @@ class SessionService : Hilt_SessionService() { START -> startGameBar() STOP -> stopSelf() } - return START_STICKY + return START_NOT_STICKY } private fun startGameBar() { + if (isBarConnected) { + Log.i(TAG, "GameBar is already connected.") + return + } Intent(this, GameBarService::class.java).apply { bindServiceAsUser(this, gameBarConnection, Context.BIND_AUTO_CREATE, UserHandle.CURRENT) } @@ -116,41 +129,50 @@ class SessionService : Hilt_SessionService() { override fun onBind(intent: Intent?): IBinder? = null override fun onDestroy() { - callListener.destroy() - if (isBarConnected) { gameBar.onGameLeave() unbindService(gameBarConnection) } + session.unregister() gameModeUtils.unbind() screenUtils.unbind() + callListener.destroy() + + isRunning = false super.onDestroy() } private fun onGameBarReady() { if (!isBarConnected) { + Log.w(TAG, "GameBar is not connected. Retrying connection.") startGameBar() return } try { - session.unregister() - if (!::commandIntent.isInitialized) { - // something is not right, bailing out + commandIntent?.let { intent -> + val app = intent.getStringExtra(EXTRA_PACKAGE_NAME) ?: run { + Log.e(TAG, "App package name missing in intent. Stopping service.") + stopSelf() + return + } + session.unregister() + session.register(app) + applyGameModeConfig(app) + gameBar.onGameStart() + screenUtils.stayAwake = appSettings.stayAwake + screenUtils.lockGesture = appSettings.lockGesture + } ?: run { + Log.e(TAG, "Command Intent is uninitialized. Stopping service.") stopSelf() } - val app = commandIntent.getStringExtra(EXTRA_PACKAGE_NAME)!! - session.register(app) - applyGameModeConfig(app) - gameBar.onGameStart() - screenUtils.stayAwake = appSettings.stayAwake - screenUtils.lockGesture = appSettings.lockGesture + + callListener.init() } catch (e: Exception) { - Log.d(TAG, e.toString()) + Log.e(TAG, "Error during GameBar initialization: $e") + stopSelf() } - - callListener.init() } private fun tryStartFromDeath(): Int { @@ -194,7 +216,7 @@ class SessionService : Hilt_SessionService() { action = START putExtra(EXTRA_PACKAGE_NAME, app) } - .takeIf { !(context.isServiceRunning(SessionService::class.java)) } + .takeIf { !context.isServiceRunning(SessionService::class.java) } ?.run { context.startServiceAsUser(this, UserHandle.CURRENT) } fun stop(context: Context) = Intent(context, SessionService::class.java) From 6f840acdf3329bb7459a281d2986243d521a8336 Mon Sep 17 00:00:00 2001 From: ShevT Date: Mon, 18 Nov 2024 10:18:15 +0300 Subject: [PATCH 162/214] GameSpace: Reduce text size for title and clock If the time is in 24-hour format, then the clock text is cut off on the right. The seconds don't fit completely. --- app/src/main/res/layout/panel_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/panel_view.xml b/app/src/main/res/layout/panel_view.xml index 36d3ea45..e04374dd 100644 --- a/app/src/main/res/layout/panel_view.xml +++ b/app/src/main/res/layout/panel_view.xml @@ -48,7 +48,7 @@ android:fontFamily="@*android:string/config_lightFontFamily" android:gravity="start|center_vertical" android:text="@string/settings_title" - android:textSize="26sp" /> + android:textSize="24sp" /> + android:textSize="24sp" /> Date: Fri, 3 Jun 2022 13:34:56 +0800 Subject: [PATCH 163/214] GameSpace: Adapt with base lock gesture change Change-Id: Ibb61213f9026addac24a6e05ab139f172ccc8c7e Signed-off-by: cjh1249131356 Signed-off-by: Pranav Vashi --- .../gamespace/utils/ScreenUtils.kt | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt index 0884583c..44914448 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt @@ -26,12 +26,9 @@ import android.os.Handler import android.os.IBinder import android.os.Looper import android.os.PowerManager -import android.os.RemoteException -import android.os.ServiceManager import android.os.UserHandle -import android.util.Log +import android.provider.Settings import android.view.WindowManager -import com.android.internal.statusbar.IStatusBarService import com.android.internal.util.ScreenshotHelper import com.android.systemui.screenrecord.IRemoteRecording import javax.inject.Inject @@ -63,9 +60,6 @@ class ScreenUtils @Inject constructor(private val context: Context) { val recorder: IRemoteRecording? get() = remoteRecording private var isGestureLocked = false - private val statusBarService = IStatusBarService.Stub.asInterface( - ServiceManager.getService(Context.STATUS_BAR_SERVICE) - ) fun bind() { isRecorderBound = context.bindServiceAsUser(Intent().apply { @@ -88,11 +82,10 @@ class ScreenUtils @Inject constructor(private val context: Context) { context.unbindService(recorderConnection) } remoteRecording = null - try { - statusBarService.setBlockedGesturalNavigation(false) + if (isGestureLocked) { + Settings.System.putInt(context.contentResolver, + Settings.System.LOCK_GESTURE_STATUS, 0) isGestureLocked = false - } catch (e: RemoteException) { - Log.e("GameSpace:ScreenUtils", "Failed to toggle gesture off") } } @@ -119,12 +112,9 @@ class ScreenUtils @Inject constructor(private val context: Context) { var lockGesture = false get() = isGestureLocked set(enable) { - try { - statusBarService.setBlockedGesturalNavigation(enable) - field = enable - isGestureLocked = enable - } catch (e: RemoteException) { - Log.e("GameSpace:ScreenUtils", "Failed to toggle gesture") - } + Settings.System.putInt(context.contentResolver, + Settings.System.LOCK_GESTURE_STATUS, if (enable) 1 else 0) + field = enable + isGestureLocked = enable } } From f3652594fb10086b70cb2ba5266af4ff41e2d94e Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 2 Dec 2024 10:28:20 +0530 Subject: [PATCH 164/214] GameSpace: Fix lock gesture not working for secondary users Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt index 44914448..62ba5f27 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/utils/ScreenUtils.kt @@ -83,8 +83,8 @@ class ScreenUtils @Inject constructor(private val context: Context) { } remoteRecording = null if (isGestureLocked) { - Settings.System.putInt(context.contentResolver, - Settings.System.LOCK_GESTURE_STATUS, 0) + Settings.System.putIntForUser(context.contentResolver, + Settings.System.LOCK_GESTURE_STATUS, 0, UserHandle.USER_CURRENT) isGestureLocked = false } } @@ -112,8 +112,9 @@ class ScreenUtils @Inject constructor(private val context: Context) { var lockGesture = false get() = isGestureLocked set(enable) { - Settings.System.putInt(context.contentResolver, - Settings.System.LOCK_GESTURE_STATUS, if (enable) 1 else 0) + Settings.System.putIntForUser(context.contentResolver, + Settings.System.LOCK_GESTURE_STATUS, if (enable) 1 else 0, + UserHandle.USER_CURRENT) field = enable isGestureLocked = enable } From b7b8ac711cad18c357020a7175258a67f3003764 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 27 Dec 2024 19:27:08 +0530 Subject: [PATCH 165/214] GameSpace: Replace get/setPendingIntentBackgroundActivityLaunchAllowedByPermission * Replace usages of the old get/setPendingIntentBackgroundActivityLaunchAllowedByPermission API with the new replacement (passing in mode = ALWAYS). Signed-off-by: Pranav Vashi --- .../io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java index 3cf76d2e..a4a9967d 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java @@ -15,8 +15,6 @@ */ package io.chaldeaprjkt.gamespace.widget; -import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED; - import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityOptions; @@ -160,8 +158,8 @@ private void launchAppInFreeformMode(String packageName) { mActivityOptions.setLaunchBounds(launchBounds); mActivityOptions.setTaskAlwaysOnTop(true); mActivityOptions.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); - mActivityOptions.setPendingIntentBackgroundActivityStartMode(MODE_BACKGROUND_ACTIVITY_START_ALLOWED); - mActivityOptions.setPendingIntentBackgroundActivityLaunchAllowedByPermission(true); + mActivityOptions.setPendingIntentBackgroundActivityStartMode( + ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS); try { Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(packageName); From 9c01b1ed1217d71c9064d4ca310076327962d0c5 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 8 Feb 2025 18:31:49 +0200 Subject: [PATCH 166/214] New Crowdin updates (#104) * New translations strings.xml (Slovak) * New translations strings.xml (Indonesian) --- app/src/main/res/values-in-rID/strings.xml | 4 +--- app/src/main/res/values-sk-rSK/strings.xml | 6 ++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index ed1dfdd8..b099fc6c 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Ruang Game Kelola pengaturan game Anda @@ -27,7 +25,7 @@ Tetap terjaga Kunci gestur Nonaktifkan kecerahan otomatis - Disable three fingers swipe gesture + Matikan gerakan geser tiga jari Nonaktifkan USB debugging Tingkat opasitas hamparan menu diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index ffac545a..572f2ea2 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Herný priestor Správa herných nastavení @@ -27,7 +25,7 @@ Nevypínať obrazovku Gesto uzamknutia Zakázať automatický jas - Disable three fingers swipe gesture + Vypnúť gesto prejdenia troma prstami Zakázať ladenie USB Priehľadnosť vrstvy menu @@ -73,7 +71,7 @@ Skryť Plávajúce upozornenia reTicker - Danmaku + Len textové notifikácie Zapnuté Zakázané Predvolené From 1e297c0d1710edc48d5efb1d55a8b913b8ad6c4c Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 23 Feb 2025 11:16:01 +0200 Subject: [PATCH 167/214] New Crowdin updates (#106) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Persian) --- app/src/main/res/values-af-rZA/strings.xml | 2 - app/src/main/res/values-ar-rSA/strings.xml | 4 +- app/src/main/res/values-ca-rES/strings.xml | 2 - app/src/main/res/values-cs-rCZ/strings.xml | 2 - app/src/main/res/values-da-rDK/strings.xml | 2 - app/src/main/res/values-de-rDE/strings.xml | 2 - app/src/main/res/values-el-rGR/strings.xml | 2 - app/src/main/res/values-es-rES/strings.xml | 2 - app/src/main/res/values-fa-rIR/strings.xml | 2 - app/src/main/res/values-fi-rFI/strings.xml | 2 - app/src/main/res/values-fr-rFR/strings.xml | 2 - app/src/main/res/values-hu-rHU/strings.xml | 2 - app/src/main/res/values-it-rIT/strings.xml | 2 - app/src/main/res/values-iw-rIL/strings.xml | 2 - app/src/main/res/values-ja-rJP/strings.xml | 2 - app/src/main/res/values-ko-rKR/strings.xml | 80 +++++++++++----------- app/src/main/res/values-nl-rNL/strings.xml | 2 - app/src/main/res/values-pl-rPL/strings.xml | 18 +++-- app/src/main/res/values-pt-rBR/strings.xml | 2 - app/src/main/res/values-pt-rPT/strings.xml | 2 - app/src/main/res/values-ro-rRO/strings.xml | 2 - app/src/main/res/values-ru-rRU/strings.xml | 8 +-- app/src/main/res/values-tr-rTR/strings.xml | 2 - app/src/main/res/values-uk-rUA/strings.xml | 2 - app/src/main/res/values-vi-rVN/strings.xml | 2 - app/src/main/res/values-zh-rCN/strings.xml | 2 - app/src/main/res/values-zh-rTW/strings.xml | 2 - 27 files changed, 51 insertions(+), 105 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 4e37b5ba..5c91f58f 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Game Space Bestuur jou speletjie-opstelling diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 0183f4a2..fa68de13 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly وضع الألعاب إدارة إعدادات ألعابك @@ -27,7 +25,7 @@ البقاء في الوضع النشط قفل الايماءات تعطيل السطوع التلقائي - Disable three fingers swipe gesture + تعطيل السحب بثلاثة أصابع لأخذ لقطة الشاشة تعطيل تصحيح أخطاء USB مستوى شفافية القائمة العائمة diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index f5e44b78..e1281f2b 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Espai de Jocs Gestiona la configuració de joc diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 7460f6a8..932f8a69 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Rychlé spuštění aplikací - Vyberte aplikace pro rychlé spuštění Herní prostor Spravovat herního nastavení diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index d7e358bc..48727b89 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Spil Rum Administrer dit spilopsætning diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 23855018..c40fc790 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Schnellstart-Apps - Apps für Schnellstart auswählen Spielmodus Spieleinrichtung verwalten diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 29d4fdbb..a9384bcf 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Εφαρμογές Γρήγορης Εκκίνησης - Επιλέξτε εφαρμογές για γρήγορη εκκίνηση Χώρος Παιχνιδιού Διαχειριστείτε τις ρυθμίσεις παιχνιδιών σας diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 86ca3c6b..48374e8d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Espacio de Juego Administra tu configuración de juegos diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 4fdacc1c..6b138b56 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - برنامه‌های شروع سریع - برنامه‌ها را برای راه‌اندازی سریع انتخاب کنید فضای بازی تنظیمات بازی خود را مدیریت کنید diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index de7fb371..960a48a3 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Game Space Hallitse peliasetuksiasi diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 9f73ee4c..47f024d4 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Espace Jeux Gérez votre configuration de jeu diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 0df6b04a..a9f63da0 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Játéktér Játékbeállítások kezelése diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 9f776379..19b359b8 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - App di avvio rapido - Seleziona le app da avviare rapidamente Spazio di gioco Gestisci la tua configurazione di gioco diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index cee67bd4..fa98022f 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly מרכז משחקים נהל את הגדרות המשחק שלך diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 324f1b9a..20335c76 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly ゲームスペース ゲームの設定を管理 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index f8927de1..619590b6 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -16,74 +16,72 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly - 게임 공간 - 게이밍 설정을 관리하기 + 게임 스페이스 + 게임용 설정 관리 인게임 옵션 - 전체화면 이벤트 막기 - 전화를 수신할 때와 같은 전체화면 이벤트를 방지합니다 - 화면 켜짐 상태 유지 - 잠금 제스처 - 자동 밝기조절 해제 - Disable three fingers swipe gesture - USB 디버깅 비활성화 - 오버레이 메뉴 투명도 레벨 + 전체 화면 이벤트 방지 + 걸려오는 전화 등 전체 화면 이벤트가 열리는 것을 방지합니다. + 화면 계속 켜 두기 + 제스처 잠금 + 자동 밝기 사용 안함 + 세 손가락 쓸기 제스처 사용 안함 + USB 디버깅 사용 안함 + 오버레이 메뉴 불투명도 알림 모드 - 표시 안 함 - 헤드업으로 보기 - reTicker로 보기 - Danmaku로 보기 + 표시 안함 + 헤드업으로 표시 + reTicker로 표시 + 탄막으로 표시 벨소리 모드 무음 진동 - 기본 - 변경 안함 + 소리 + 바꾸지 않음 라이브러리 추가 - 게임을 선택하기 + 게임 선택 검색 - 정말 게임리스트에서 %1$s을(를) 삭제하겠습니까? + 정말 게임 목록에서 %1$s 앱을 제거하시겠습니까? - 게임 설정 + 게임 구성 설정 선호 모드 - ANGLE 사용 (실험적) - 기본 GLES 드라이버 대신 ANGLE 렌더러를 사용합니다.\n경고!! 게임 그래픽이 깨질 수 있으니 주의하여 사용하세요! - ANGLE을 이 시스템에서 사용할 수 없습니다 - %1$s 을(를) 라이브러리에서 제거 - 미지원 - 일반 + ANGLE 사용(실험적) + 기본 GLES 드라이버 대신 ANGLE 렌더러를 사용합니다.\n경고! 게임 그래픽이 깨질 수 있습니다. 주의해서 사용하세요! + 이 시스템에서 ANGLE 드라이버를 사용할 수 없습니다. + 라이브러리에서 %1$s 제거 + 지원 안함 + 기본 성능 배터리 값: %s - 기본값으로 설정 - 기본값: %s\n길게 눌러서 설정 - 기본값으로 설정됨 + 기본값 + 기본값: %s\n길게 누르면 기본값으로 초기화합니다. + 기본값으로 초기화했습니다. 배터리: %1$d%% - 메모리 사용가능량: %1$d\/%2$d MB + 가용 메모리: %1$d\/%2$dMB 모드 FPS 정보 숨기기 헤드업 reTicker - Danmaku - 활성화됨 - 사용 안 함 + 탄막 + 켜짐 + 꺼짐 기본값 전화 모드 - 동작 없음 - 자동 응답 - 자동 거부 - %1$s 에서 전화 받음 - %1$s 에서 전화 거부함 + 작업 없음 + 자동으로 받기 + 자동으로 거부 + %1$s 번호에서 오는 전화 받기 + %1$s 번호에서 오는 전화 거부 - Danmaku 알림 모드 - 게임이 활성화 중일 때 bullet comments, 일명 danmaku로 알림 표시 + 탄막 알림 모드 + 게임 중일 때 알림을 탄막처럼 작게 표시 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 5cd1f349..b8928572 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Game ruimte Beheer uw gaming-instellingen diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 0e47d3b4..1d5291b3 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -16,15 +16,13 @@ limitations under the License. --> - Aplikacje szybkiego startu - Wybierz aplikacje do szybkiego uruchamiania Przestrzeń gier Zarządzaj konfiguracją gier Opcje w grze Zablokuj wydarzenie na pełnym ekranie Zapobiegaj pojawianiu się wydarzeń na pełnym ekranie, takich jak połączenia przychodzące - Pozostaw włączony ekran + Pozostaw ekran włączony Gest blokady Wyłącz automatyczną jasność Wyłącz gest przesuwania trzema palcami @@ -33,9 +31,9 @@ Opcje powiadomień Nie pokazuj - Wyświetl jako Heads-up + Wyświetl jako wyskakujące powiadomienia Pokaż jako reTicker - Pokaż jako pasek danmaku + Pokaż jako pasek Danmaku Tryb dzwonka Tryb cichy @@ -53,7 +51,7 @@ Preferowany tryb Użyj ANGLE (eksperymentalne) Używaj renderowania ANGLE zamiast natywnych sterowników GLES.\nOSTRZEŻENIE!! Może uszkodzić grafikę gry, używaj z ostrożnością! - ANGLE nie jest dostępne w Twoim systemie + ANGLE nie jest dostępne w twoim systemie Usuń %1$s z biblioteki Nieobsługiwane Standardowy @@ -62,16 +60,16 @@ Wartość: %s domyślnie - Wartość domyślna: %s\nPrzytrzymaj dłużej by ustawić + Wartość domyślna: %s\nPrzytrzymaj, aby ustawić Wartość domyślna jest ustawiona Bateria: %1$d%% Dostępna pamięć: %1$d\/%2$d MB Tryb - Wskaźnik FPS + Informacja o FPS Ukryj - Powiadomienia \"Heads up\" + Wyskakujące powiadomienia reTicker Danmaku Włączono @@ -85,5 +83,5 @@ Odrzucono połączenie od %1$s Tryb powiadomień Danmaku - Wyświetlaj powiadomienie jako danmaku w postaci wypunktowanych komentarzy, gdy gra jest aktywna + Wyświetlaj powiadomienie jako Danmaku w postaci wypunktowanych komentarzy, gdy gra jest aktywna diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 358a0c82..b3b38da5 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Iniciar Aplicativos rapidamente - Selecione os Aplicativos de Início Rápido Espaço de Jogos Gerencie sua configuração de jogos diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index e7b6f0e5..21f230eb 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Espaço de jogo Gerir a sua configuração de jogos diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 0c590b40..b069c328 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Pornire rapidă a aplicațiilor - Selectați aplicațiile pentru lansare rapidă Spațiu de jocuri Gestionează-ți configurarea jocurilor diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 2f4e1806..84121e10 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -16,15 +16,13 @@ limitations under the License. --> - Быстрый запуск приложений - Выберите приложения для быстрого запуска Поиграем? Настройка игровых возможностей Настройки игры - Блокировать полноэкранные уведомления + Блокировать полноэкранные события Предотвращение появления полноэкранных событий, таких как входящие вызовы - Не отключать экран + Не засыпать Блокировать жесты Отключить автояркость Отключить жест тремя пальцами @@ -78,7 +76,7 @@ Отключено По умолчанию Режим вызова - Без действий + Без действия Автоответ Автосброс Поступил звонок от %1$s diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 5fb05781..137a3b51 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Hızlı Başlangıç Uygulamaları - Hızlı başlatmak için uygulamaları seçin Oyun Alanı Oyun kurulumunuzu yönetin diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index a349e619..4e9977c2 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Ігровий Простір Керування налаштуваннями гри diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 7b146e1c..1bf4e7ef 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly Không gian trò chơi Quản lý thiết lập trò chơi của bạn diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 986e0b8a..be4ace47 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - 快速启动应用程序 - 选择要快速启动的应用 游戏空间 管理您的游戏设置 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5abb2e52..126c49a6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,8 +16,6 @@ limitations under the License. --> - 快速啟動應用程式 - 選擇要快速啟動的應用程式 遊戲空間 管理您的遊戲設定 From c0256ee94743c5357a274309c85d12857a2c13c1 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Wed, 12 Mar 2025 21:28:27 +0800 Subject: [PATCH 168/214] GameSpace: Adapt for QPR2 Change-Id: I960b7d1fa2880a9b572781e58ef36a30f8e603c4 Signed-off-by: Pranav Vashi --- .../gamespace/preferences/appselector/AppSelectorActivity.kt | 2 +- .../gamespace/preferences/appselector/AppSelectorFragment.kt | 2 +- .../chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt | 2 +- .../java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorActivity.kt index a4907e69..d6700279 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorActivity.kt @@ -26,7 +26,7 @@ class AppSelectorActivity : Hilt_AppSelectorActivity() { super.onCreate(savedInstanceState) if (savedInstanceState == null) { supportFragmentManager.beginTransaction() - .replace(com.android.settingslib.R.id.content_frame, AppSelectorFragment()) + .replace(com.android.settingslib.collapsingtoolbar.R.id.content_frame, AppSelectorFragment()) .commit() } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt index 49a60e4d..27ba55fe 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/appselector/AppSelectorFragment.kt @@ -70,7 +70,7 @@ class AppSelectorFragment : Hilt_AppSelectorFragment(), SearchView.OnQueryTextLi savedInstanceState: Bundle? ): View? { super.onCreateView(inflater, container, savedInstanceState) - appBarLayout = activity?.findViewById(com.android.settingslib.R.id.app_bar) + appBarLayout = activity?.findViewById(com.android.settingslib.collapsingtoolbar.R.id.app_bar) return inflater.inflate(R.layout.app_selector, container, false) } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt index 2fcebc7a..625c4e55 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsActivity.kt @@ -29,7 +29,7 @@ class PerAppSettingsActivity : Hilt_PerAppSettingsActivity() { if (savedInstanceState == null) { supportFragmentManager .beginTransaction() - .replace(com.android.settingslib.R.id.content_frame, PerAppSettingsFragment()) + .replace(com.android.settingslib.collapsingtoolbar.R.id.content_frame, PerAppSettingsFragment()) .commit() } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt index 11ef57ca..b97305ad 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsActivity.kt @@ -28,7 +28,7 @@ class SettingsActivity : Hilt_SettingsActivity() { if (savedInstanceState == null) { supportFragmentManager .beginTransaction() - .replace(com.android.settingslib.R.id.content_frame, SettingsFragment()) + .replace(com.android.settingslib.collapsingtoolbar.R.id.content_frame, SettingsFragment()) .commit() } } From edb475ad4669b0158372116075496dfc5c31b758 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:32:47 +0800 Subject: [PATCH 169/214] GameBarService: fixes and improvements Change-Id: I401f6fe587e4faecb840a3e2836c0bbf28e37a4e Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> --- app/src/main/AndroidManifest.xml | 3 + .../gamespace/gamebar/GameBarService.kt | 124 +++++++++++++----- .../gamespace/gamebar/SessionService.kt | 9 +- .../gamespace/widget/PanelView.kt | 20 --- ...pp_whitelist_io.chaldeaprjkt.gamespace.xml | 2 + app/src/main/res/values/strings.xml | 2 + 6 files changed, 104 insertions(+), 56 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c628b860..40cd24fa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,8 @@ + + onGameLeave() ACTION_START -> onGameStart() @@ -189,36 +226,50 @@ class GameBarService : Hilt_GameBarService() { rootBarView.alpha = 0f updateRootBarView() handler.postDelayed(firstPaint, 500) + startForegroundService() } fun onGameLeave() { shouldClose = true - try { - if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { + + handler.removeCallbacksAndMessages(null) + + runCatching { + if (::rootPanelView.isInitialized + && rootPanelView.isAttachedToWindow) { wm.removeViewImmediate(rootPanelView) } - if (::rootBarView.isInitialized && rootBarView.isAttachedToWindow) { + }.onFailure { it.printStackTrace() } + + runCatching { + if (::rootBarView.isInitialized + && rootBarView.isAttachedToWindow) { wm.removeViewImmediate(rootBarView) } - } catch (e: Exception) { - e.printStackTrace() - } + }.onFailure { it.printStackTrace() } + + barAdded = false + + stopForeground(true) + stopSelf() } private fun updateRootBarView() { if (!::rootBarView.isInitialized) return - // Try to remove and add the view manually to avoid animation jumps. - // Otherwise, use updateViewLayout - try { - if (rootBarView.isAttachedToWindow) { + runCatching { + if (barAdded) { wm.removeViewImmediate(rootBarView) } wm.addView(rootBarView, barLayoutParam) - } catch (_: RuntimeException) { - if (rootBarView.isAttachedToWindow) { - wm.updateViewLayout(rootBarView, barLayoutParam) - } + barAdded = true + }.onFailure { + it.printStackTrace() + runCatching { + if (barAdded) { + wm.updateViewLayout(rootBarView, barLayoutParam) + } + }.onFailure { err -> err.printStackTrace() } } } @@ -309,7 +360,14 @@ class GameBarService : Hilt_GameBarService() { rootPanelView.gravity = Gravity.END rootPanelView.setPaddingRelative(16, 16, barWidth, 16) } - panelView.relativeY = barView.locationOnScreen.last() - barView.height + } + + fun updatePanelTranslation() { + panelView.post { + val layoutParams = panelView.layoutParams as ViewGroup.MarginLayoutParams + layoutParams.topMargin = appSettings.y + panelView.layoutParams = layoutParams + } } private fun takeShot() { @@ -322,10 +380,10 @@ class GameBarService : Hilt_GameBarService() { updateLayout { it.alpha = 0f } handler.postDelayed({ - try { + runCatching { screenUtils.takeScreenshot { afterShot() } - } catch (e: Exception) { - e.printStackTrace() + }.onFailure { + it.printStackTrace() afterShot() } }, 250) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index 01f555f3..a455b7cb 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -111,9 +111,12 @@ class SessionService : Hilt_SessionService() { when (intent?.action) { START -> startGameBar() - STOP -> stopSelf() + STOP -> { + stopSelf() + return START_NOT_STICKY + } } - return START_NOT_STICKY + return START_STICKY } private fun startGameBar() { @@ -177,7 +180,7 @@ class SessionService : Hilt_SessionService() { private fun tryStartFromDeath(): Int { if (isBarConnected) { - return START_NOT_STICKY + return START_STICKY } val game = ActivityTaskManager.getService() diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index 8032840b..3edc73ac 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -29,9 +29,6 @@ class PanelView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { - private var defaultY: Float? = null - var relativeY = 0 - init { LayoutInflater.from(context).inflate(R.layout.panel_view, this, true) isClickable = true @@ -40,22 +37,5 @@ class PanelView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() - applyRelativeLocation() - } - - private fun applyRelativeLocation() { - doOnLayout { - if (defaultY == null) - defaultY = y - - val safeArea = rootWindowInsets.getInsets(WindowInsets.Type.systemBars()) - val minY = safeArea.top + 16.dp - val maxY = safeArea.top + (parent as View).height - safeArea.bottom - height - 16.dp - if (minY > maxY) { - y = relativeY.coerceIn(maxY, minY).toFloat() - } else { - y = relativeY.coerceIn(minY, maxY).toFloat() - } - } } } diff --git a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml index c70eb0ca..77685107 100644 --- a/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml +++ b/app/src/main/privapp_whitelist_io.chaldeaprjkt.gamespace.xml @@ -22,5 +22,7 @@ + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b15d97f..fdae66fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -97,4 +97,6 @@ Danmaku Notification mode Show notification as danmaku aka bullet comments while game is active + + Game Space is running From 8f6a83daf74b814046eb30c004efe0e00f5842b8 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Mon, 5 May 2025 22:43:44 +0530 Subject: [PATCH 170/214] GameBarService: Remove notification Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index a74a7249..c4381849 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -16,12 +16,8 @@ */ package io.chaldeaprjkt.gamespace.gamebar -import android.app.Notification -import android.app.NotificationChannel -import android.app.NotificationManager import android.app.Service import android.content.Intent -import android.content.pm.ServiceInfo import android.content.res.Configuration import android.graphics.PixelFormat import android.graphics.Point @@ -36,7 +32,6 @@ import android.view.WindowManager import android.widget.FrameLayout import android.widget.ImageButton import android.widget.LinearLayout -import androidx.core.app.NotificationCompat import androidx.core.view.children import androidx.core.view.isVisible import androidx.core.view.marginStart @@ -156,35 +151,6 @@ class GameBarService : Hilt_GameBarService() { danmakuService.init() } - private fun startForegroundService() { - val channelId = "gamespace_service_channel" - val channelName = "Game Space Service" - - val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager - - val channel = NotificationChannel( - channelId, - channelName, - NotificationManager.IMPORTANCE_HIGH - ).apply { - setSound(null, null) - enableVibration(false) - lockscreenVisibility = Notification.VISIBILITY_PUBLIC - } - manager.createNotificationChannel(channel) - - val notification = NotificationCompat.Builder(this, channelId) - .setContentTitle(getString(R.string.gamespace_running)) - .setSmallIcon(R.drawable.ic_gear) - .setPriority(NotificationCompat.PRIORITY_HIGH) - .setCategory(NotificationCompat.CATEGORY_SERVICE) - .setOngoing(true) - .setSilent(true) - .build() - - startForeground(1001, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE) - } - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { when (intent?.action) { ACTION_STOP -> onGameLeave() @@ -226,7 +192,6 @@ class GameBarService : Hilt_GameBarService() { rootBarView.alpha = 0f updateRootBarView() handler.postDelayed(firstPaint, 500) - startForegroundService() } fun onGameLeave() { From 579faa392fdae867dde9dfbaf36df9d6ebbfac86 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 27 Apr 2025 19:05:42 +0300 Subject: [PATCH 171/214] New translations (#108) --- app/src/main/res/values-uk-rUA/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 4e9977c2..06e14222 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -25,7 +25,7 @@ Залишати активним Жест блокування Вимкнути автояскравість - Disable three fingers swipe gesture + Вимкнути жест руху трьома пальцями Вимкнути налагодження USB Рівень непрозорості меню ігрового режиму From 33fa1f3cc4ce2c75ff77f0a7062bd1fc677e96b8 Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Tue, 9 Jul 2024 22:13:02 +0800 Subject: [PATCH 172/214] DanmakuService: Fix ClassCastException during onNotificationPosted 07-09 22:01:08.544 6056 6056 W Bundle : Key android.title expected String but value was a android.text.SpannableString. The default value was returned. 07-09 22:01:08.545 6056 6056 W Bundle : Attempt to cast generated internal exception: 07-09 22:01:08.545 6056 6056 W Bundle : java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String 07-09 22:01:08.545 6056 6056 W Bundle : at android.os.BaseBundle.getString(BaseBundle.java:1419) 07-09 22:01:08.545 6056 6056 W Bundle : at io.chaldeaprjkt.gamespace.gamebar.DanmakuServiceListener.onNotificationPosted(DanmakuServiceListener.kt:38) 07-09 22:01:08.545 6056 6056 W Bundle : at android.service.notification.NotificationListenerService.onNotificationPosted(NotificationListenerService.java:485) 07-09 22:01:08.545 6056 6056 W Bundle : at android.service.notification.NotificationListenerService$MyHandler.handleMessage(NotificationListenerService.java:2404) 07-09 22:01:08.545 6056 6056 W Bundle : at android.os.Handler.dispatchMessage(Handler.java:107) 07-09 22:01:08.545 6056 6056 W Bundle : at android.os.Looper.loopOnce(Looper.java:232) 07-09 22:01:08.545 6056 6056 W Bundle : at android.os.Looper.loop(Looper.java:317) 07-09 22:01:08.545 6056 6056 W Bundle : at android.app.ActivityThread.main(ActivityThread.java:8594) 07-09 22:01:08.545 6056 6056 W Bundle : at java.lang.reflect.Method.invoke(Native Method) 07-09 22:01:08.545 6056 6056 W Bundle : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:583) 07-09 22:01:08.545 6056 6056 W Bundle : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878) 07-09 22:01:08.545 6056 6056 W Bundle : Key android.title.big expected String but value was a android.text.SpannableString. The default value was returned. 07-09 22:01:08.545 6056 6056 W Bundle : Attempt to cast generated internal exception: 07-09 22:01:08.545 6056 6056 W Bundle : java.lang.ClassCastException: android.text.SpannableString cannot be cast to java.lang.String 07-09 22:01:08.545 6056 6056 W Bundle : at android.os.BaseBundle.getString(BaseBundle.java:1419) 07-09 22:01:08.545 6056 6056 W Bundle : at io.chaldeaprjkt.gamespace.gamebar.DanmakuServiceListener.onNotificationPosted(DanmakuServiceListener.kt:38) 07-09 22:01:08.545 6056 6056 W Bundle : at android.service.notification.NotificationListenerService.onNotificationPosted(NotificationListenerService.java:485) Signed-off-by: minaripenguin Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/DanmakuServiceListener.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 9d4cca28..1f05343d 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -35,8 +35,10 @@ class DanmakuServiceListener : NotificationListenerService() { if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return val extras = sbn.notification.extras - val title = extras.getString(Notification.EXTRA_TITLE) ?: extras.getString(Notification.EXTRA_TITLE_BIG) - val text = extras.getString(Notification.EXTRA_TEXT) + + val title = extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() + ?: extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() + val text = extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() var danmakuText = "" if (title?.isNotBlank() == true) danmakuText += "[$title] " From 0813dd25ddeae99c8a3e77098e0cfee62dfb3b44 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Thu, 1 May 2025 16:19:45 +0800 Subject: [PATCH 173/214] DanmakuService: Fix notification handling dont show same or old notifications when intiializing the notification listener or during onNotificationPosted Change-Id: Ib470ef434f08bebb3b83559f9556fe5da1ae238c Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: Pranav Vashi --- .../gamebar/DanmakuServiceListener.kt | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 1f05343d..7671a331 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -23,37 +23,57 @@ import android.app.Notification import android.service.notification.NotificationListenerService import android.service.notification.StatusBarNotification -import io.chaldeaprjkt.gamespace.data.AppSettings - class DanmakuServiceListener : NotificationListenerService() { - private val postedNotifications = mutableMapOf() + private val postedNotifications = mutableSetOf() var danmakuServiceInterface: DanmakuServiceInterface? = null + override fun onListenerConnected() { + super.onListenerConnected() + getActiveNotifications()?.forEach { sbn -> + if (sbn.isClearable && !sbn.isOngoing) { + val title = sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() + ?: sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() + val text = sbn.notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() + + val danmakuText = "[$title] $text".trim() + if (danmakuText.isNotBlank()) { + postedNotifications.add(danmakuText) + } + } + } + } + override fun onNotificationPosted(sbn: StatusBarNotification) { if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return - val extras = sbn.notification.extras - - val title = extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() - ?: extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() - val text = extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() + val title = sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() + ?: sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() + val text = sbn.notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() - var danmakuText = "" - if (title?.isNotBlank() == true) danmakuText += "[$title] " - if (text?.isNotBlank() == true) danmakuText += text + val danmakuText = "[$title] $text".trim() - val time = sbn.notification.`when` - if (danmakuText.isNotBlank() && !(postedNotifications[danmakuText] == time)) { + if (danmakuText.isNotBlank() && !postedNotifications.contains(danmakuText)) { danmakuServiceInterface?.showNotificationAsOverlay(danmakuText) - insertPostedNotification(danmakuText, time) + insertPostedNotification(danmakuText) + } + } + + override fun onNotificationRemoved(sbn: StatusBarNotification) { + val title = sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() + ?: sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() + val text = sbn.notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() + + val danmakuText = "[$title] $text".trim() + + if (danmakuText.isNotBlank()) { + postedNotifications.remove(danmakuText) } } - private fun insertPostedNotification(danmakuText: String, time: Long) { - if (postedNotifications.size >= NOTIFICATIONS_MAX_CACHED) postedNotifications.clear() - postedNotifications[danmakuText] = time + private fun insertPostedNotification(danmakuText: String) { + postedNotifications.add(danmakuText) } companion object { From da5bab4245f297c200265d47a3f485c1d5399ec0 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Fri, 2 May 2025 07:39:41 +0800 Subject: [PATCH 174/214] DanmakuService: Cleanup and improvements and fix notification handling for annoying notification header popups Change-Id: I3680ced6c18de3226aceb844af9f5889dea5cb1e Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/DanmakuService.kt | 12 ++++ .../gamebar/DanmakuServiceListener.kt | 66 ++++++++++++------- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt index 636754a7..999d6a45 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuService.kt @@ -56,6 +56,7 @@ import io.chaldeaprjkt.gamespace.gamebar.DanmakuServiceListener interface DanmakuServiceInterface { val danmakuNotificationMode: Boolean fun showNotificationAsOverlay(danmakuText: String) + fun getApplabel(packageName: String): String } @ServiceScoped @@ -172,6 +173,17 @@ class DanmakuService @Inject constructor( } } + override fun getApplabel(packageName: String): String { + return packageName.let { + try { + val appInfo = context.packageManager.getApplicationInfo(it, 0) + context.packageManager.getApplicationLabel(appInfo).toString() + } catch (e: Exception) { + "" + } + } + } + override val danmakuNotificationMode: Boolean get() = appSettings.danmakuNotification diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt index 7671a331..40faa29c 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/DanmakuServiceListener.kt @@ -25,7 +25,9 @@ import android.service.notification.StatusBarNotification class DanmakuServiceListener : NotificationListenerService() { - private val postedNotifications = mutableSetOf() + private val postedNotifications = mutableMapOf() + + private val appLabelsCache = mutableMapOf() var danmakuServiceInterface: DanmakuServiceInterface? = null @@ -33,47 +35,63 @@ class DanmakuServiceListener : NotificationListenerService() { super.onListenerConnected() getActiveNotifications()?.forEach { sbn -> if (sbn.isClearable && !sbn.isOngoing) { - val title = sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() - ?: sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() - val text = sbn.notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() - - val danmakuText = "[$title] $text".trim() + val danmakuText = extractDanmakuText(sbn) if (danmakuText.isNotBlank()) { - postedNotifications.add(danmakuText) + postedNotifications[danmakuText] = System.currentTimeMillis() } } } } override fun onNotificationPosted(sbn: StatusBarNotification) { - if (!(danmakuServiceInterface?.danmakuNotificationMode ?: false) || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return + val notificationMode = danmakuServiceInterface?.danmakuNotificationMode ?: return + if (!notificationMode || !sbn.isClearable || sbn.isOngoing || sbn.getIsContentSecure()) return - val title = sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() - ?: sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() - val text = sbn.notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() + val danmakuText = extractDanmakuText(sbn) - val danmakuText = "[$title] $text".trim() - - if (danmakuText.isNotBlank() && !postedNotifications.contains(danmakuText)) { - danmakuServiceInterface?.showNotificationAsOverlay(danmakuText) - insertPostedNotification(danmakuText) + if (danmakuText.isNotBlank()) { + if (!postedNotifications.containsKey(danmakuText)) { + postedNotifications[danmakuText] = System.currentTimeMillis() + danmakuServiceInterface?.showNotificationAsOverlay(danmakuText) + } } } override fun onNotificationRemoved(sbn: StatusBarNotification) { - val title = sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() - ?: sbn.notification.extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() - val text = sbn.notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() - - val danmakuText = "[$title] $text".trim() - + val danmakuText = extractDanmakuText(sbn) if (danmakuText.isNotBlank()) { postedNotifications.remove(danmakuText) } } - private fun insertPostedNotification(danmakuText: String) { - postedNotifications.add(danmakuText) + private fun extractDanmakuText(sbn: StatusBarNotification): String { + val extras = sbn.notification.extras + val title = extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() + ?: extras.getCharSequence(Notification.EXTRA_TITLE_BIG)?.toString() + val text = extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() + + val appLabel = appLabelsCache.getOrPut(sbn.packageName) { + danmakuServiceInterface?.getApplabel(sbn.packageName) + } ?: "" + + // Skip annoying notification headers + if (!title.isNullOrBlank() && !appLabel.isNullOrBlank()) { + if (sbn.isGroup && title.contains(appLabel, ignoreCase = true)) return "" + } + + return buildDanmakuText(title, text) + } + + private fun buildDanmakuText(title: String?, text: String?): String { + val sb = StringBuilder() + if (!title.isNullOrBlank()) { + sb.append("[").append(title).append("]") + } + if (!text.isNullOrBlank()) { + if (sb.isNotEmpty()) sb.append(" ") + sb.append(text) + } + return sb.toString().trim() } companion object { From e0b3f5c26ca242a4fc8b0c780c8b5c685184faed Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Mon, 5 May 2025 10:45:46 +0800 Subject: [PATCH 175/214] GameBarService: improve panel animation Change-Id: I77cc0d2fbc1989ee504d1e6bbf4a944596e852d2 Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index c4381849..3e0adf9a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -125,12 +125,32 @@ class GameBarService : Hilt_GameBarService() { updatePanelTranslation() if (!rootPanelView.isAttachedToWindow) { wm.addView(rootPanelView, panelLayoutParam) + rootPanelView.alpha = 0f + rootPanelView.visibility = View.VISIBLE + rootPanelView.animate() + .alpha(1f) + .setDuration(300) + .start() } else { wm.updateViewLayout(rootPanelView, panelLayoutParam) } - } else if (!value) { - if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) - wm.removeView(rootPanelView) + } else { + if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { + rootPanelView.animate() + .alpha(0f) + .setDuration(300) + .withEndAction { + rootPanelView.visibility = View.INVISIBLE + handler.postDelayed({ + runCatching { + if (rootPanelView.isAttachedToWindow) { + wm.removeView(rootPanelView) + } + }.onFailure { it.printStackTrace() } + }, 50) + } + .start() + } } } @@ -312,11 +332,16 @@ class GameBarService : Hilt_GameBarService() { private fun setupPanelView() { rootPanelView = LayoutInflater.from(this) .inflate(R.layout.window_panel, FrameLayout(this), false) as LinearLayout + rootPanelView.alpha = 0f + rootPanelView.visibility = View.INVISIBLE + panelView = rootPanelView.findViewById(R.id.panel_view)!! panelView.alpha = appSettings.menuOpacity / 100f + rootPanelView.setOnClickListener { showPanel = false } + val barWidth = barView.width + barView.marginStart if (barLayoutParam.x < 0) { rootPanelView.gravity = Gravity.START From bd98311353d9d871871009d8d30ef932db8f91df Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Mon, 5 May 2025 10:52:37 +0800 Subject: [PATCH 176/214] GameSpace: fix and animate panel view translation Change-Id: Ie8ef617160a21823d73b40f125f4be72c5296dd0 Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 9 -------- .../gamespace/widget/PanelView.kt | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 3e0adf9a..7c147273 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -122,7 +122,6 @@ class GameBarService : Hilt_GameBarService() { if (!::rootPanelView.isInitialized) { setupPanelView() } - updatePanelTranslation() if (!rootPanelView.isAttachedToWindow) { wm.addView(rootPanelView, panelLayoutParam) rootPanelView.alpha = 0f @@ -351,14 +350,6 @@ class GameBarService : Hilt_GameBarService() { rootPanelView.setPaddingRelative(16, 16, barWidth, 16) } } - - fun updatePanelTranslation() { - panelView.post { - val layoutParams = panelView.layoutParams as ViewGroup.MarginLayoutParams - layoutParams.topMargin = appSettings.y - panelView.layoutParams = layoutParams - } - } private fun takeShot() { val afterShot: () -> Unit = { diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index 3edc73ac..baa87418 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -15,27 +15,48 @@ */ package io.chaldeaprjkt.gamespace.widget +import android.animation.ValueAnimator import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater +import android.view.animation.DecelerateInterpolator import android.view.View +import android.view.ViewGroup import android.view.WindowInsets import android.widget.LinearLayout import androidx.core.view.doOnLayout import io.chaldeaprjkt.gamespace.R +import io.chaldeaprjkt.gamespace.utils.di.ServiceViewEntryPoint import io.chaldeaprjkt.gamespace.utils.dp +import io.chaldeaprjkt.gamespace.utils.entryPointOf class PanelView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { + private val appSettings by lazy { context.entryPointOf().appSettings() } + init { LayoutInflater.from(context).inflate(R.layout.panel_view, this, true) isClickable = true isFocusable = true } + + fun updateTranslationY() { + val targetMargin = appSettings.y + val params = layoutParams as ViewGroup.MarginLayoutParams + val animator = ValueAnimator.ofInt(params.topMargin, targetMargin) + animator.duration = 300L + animator.interpolator = DecelerateInterpolator() + animator.addUpdateListener { valueAnimator -> + params.topMargin = valueAnimator.animatedValue as Int + layoutParams = params + } + animator.start() + } override fun onAttachedToWindow() { super.onAttachedToWindow() + updateTranslationY() } } From 8a4949d85987d876266d9ca2e04da2e746b7809f Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Tue, 13 May 2025 07:40:37 +0300 Subject: [PATCH 177/214] New Crowdin updates (#110) * New translations strings.xml (Finnish) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) --- app/src/main/res/values-af-rZA/strings.xml | 3 +++ app/src/main/res/values-ar-rSA/strings.xml | 3 +++ app/src/main/res/values-ca-rES/strings.xml | 3 +++ app/src/main/res/values-cs-rCZ/strings.xml | 3 +++ app/src/main/res/values-da-rDK/strings.xml | 3 +++ app/src/main/res/values-de-rDE/strings.xml | 3 +++ app/src/main/res/values-el-rGR/strings.xml | 3 +++ app/src/main/res/values-es-rES/strings.xml | 3 +++ app/src/main/res/values-fa-rIR/strings.xml | 3 +++ app/src/main/res/values-fi-rFI/strings.xml | 3 +++ app/src/main/res/values-fr-rFR/strings.xml | 3 +++ app/src/main/res/values-hu-rHU/strings.xml | 3 +++ app/src/main/res/values-in-rID/strings.xml | 3 +++ app/src/main/res/values-it-rIT/strings.xml | 3 +++ app/src/main/res/values-iw-rIL/strings.xml | 3 +++ app/src/main/res/values-ja-rJP/strings.xml | 3 +++ app/src/main/res/values-ko-rKR/strings.xml | 3 +++ app/src/main/res/values-nl-rNL/strings.xml | 3 +++ app/src/main/res/values-pl-rPL/strings.xml | 3 +++ app/src/main/res/values-pt-rBR/strings.xml | 3 +++ app/src/main/res/values-pt-rPT/strings.xml | 3 +++ app/src/main/res/values-ro-rRO/strings.xml | 3 +++ app/src/main/res/values-ru-rRU/strings.xml | 3 +++ app/src/main/res/values-sk-rSK/strings.xml | 3 +++ app/src/main/res/values-tr-rTR/strings.xml | 3 +++ app/src/main/res/values-uk-rUA/strings.xml | 3 +++ app/src/main/res/values-vi-rVN/strings.xml | 3 +++ app/src/main/res/values-zh-rCN/strings.xml | 3 +++ app/src/main/res/values-zh-rTW/strings.xml | 3 +++ 29 files changed, 87 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 5c91f58f..6ef73d61 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Game Space Bestuur jou speletjie-opstelling @@ -84,4 +86,5 @@ Danmaku Notification mode Show notification as danmaku aka bullet comments while game is active + Game Space is running diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index fa68de13..215506f4 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + تطبيقات البداية السريعة + حدد التطبيقات للتشغيل السريع وضع الألعاب إدارة إعدادات ألعابك @@ -84,4 +86,5 @@ وضع إشعار Danmaku إظهار تنبيه Danmaku كما هو معروف باِسم تعليقات سريعة عندما تكون اللعبة نشطة + Game Space is running diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index e1281f2b..abe33828 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Espai de Jocs Gestiona la configuració de joc @@ -84,4 +86,5 @@ Mode de Notificació Danmaku Mostra notificació mentre el joc està actiu + Game Space is running diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 932f8a69..0c12f711 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Rychlé spuštění aplikací + Vyberte aplikace pro rychlé spuštění Herní prostor Spravovat herního nastavení @@ -84,4 +86,5 @@ Režim upozornění Danmaku Zobrazit oznámení jako odrážku pro danmaku akci, pokud je hra aktivní + Game Space is running diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 48727b89..c41b3a57 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Spil Rum Administrer dit spilopsætning @@ -84,4 +86,5 @@ Danmaku-meddelelsestilstand Show notification as danmaku aka bullet comments while game is active + Game Space is running diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c40fc790..3f80f88a 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Schnellstart-Apps + Apps für Schnellstart auswählen Spielmodus Spieleinrichtung verwalten @@ -84,4 +86,5 @@ Benachrichtigungsmodus „Danmaku“ Bei aktivem Spiel Benachrichtigungen als „Bullet-Kommentare“ aka „Danmaku“ anzeigen + Game Space is running diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index a9384bcf..f641e9c5 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Εφαρμογές Γρήγορης Εκκίνησης + Επιλέξτε εφαρμογές για γρήγορη εκκίνηση Χώρος Παιχνιδιού Διαχειριστείτε τις ρυθμίσεις παιχνιδιών σας @@ -84,4 +86,5 @@ Λειτουργία ειδοποιήσεων Danmaku Εμφάνιση ειδοποίησης ως danmaku άλλως κουκκίδα σχόλια ενώ το παιχνίδι είναι ενεργό + Game Space is running diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 48374e8d..e53eb19d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Aplicaciones de inicio rápido + Seleccionar aplicaciones para iniciar rápidamente Espacio de Juego Administra tu configuración de juegos @@ -85,4 +87,5 @@ Mantén presionado para establecer Modo notificación silenciosa Mostrar notificación diseño circular mientras el juego está activo + Game Space is running diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 6b138b56..7c6fc438 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + برنامه‌های شروع سریع + برنامه‌ها را برای راه‌اندازی سریع انتخاب کنید فضای بازی تنظیمات بازی خود را مدیریت کنید @@ -84,4 +86,5 @@ حالت اعلان گلوله جهنمی در حالی که بازی فعال است، اعلان را به حالت اعلان گلوله جهنمی نشان دهید + Game Space is running diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 960a48a3..a5c9da54 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Game Space Hallitse peliasetuksiasi @@ -84,4 +86,5 @@ Danmaku Notification mode Show notification as danmaku aka bullet comments while game is active + Game Space is running diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 47f024d4..a77684c3 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Applications de démarrage rapide + Sélectionnez les applications à lancer rapidement Espace Jeux Gérez votre configuration de jeu @@ -84,4 +86,5 @@ Mode de notification Danmaku Afficher une notification en tant que danmaku (les commentaires flottants) lorsque le jeu est actif + Game Space is running diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index a9f63da0..735b0b4f 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Gyorsindítási alkalmazások + Válassza ki a gyorsan indítandó alkalmazásokat Játéktér Játékbeállítások kezelése @@ -84,4 +86,5 @@ Danmaku Értesítő mód Értesítések danmakuként mutatása, avagy kommentek kilövése játék mód közben + Game Space is running diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index b099fc6c..beaf9a46 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Aplikasi Mulai Cepat + Pilih aplikasi untuk diluncurkan dengan cepat Ruang Game Kelola pengaturan game Anda @@ -84,4 +86,5 @@ Mode Pemberitahuan Danmaku Tampilkan notifikasi sebagai danmaku alias komentar bullet saat permainan aktif + Game Space is running diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 19b359b8..d165606e 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + App di avvio rapido + Seleziona le app da avviare rapidamente Spazio di gioco Gestisci la tua configurazione di gioco @@ -84,4 +86,5 @@ Modalità notifica Danmaku Mostra la notifica come Danmaku, ovvero i commenti sui proiettili, mentre il gioco è attivo + Game Space is running diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index fa98022f..c6c99b7b 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly מרכז משחקים נהל את הגדרות המשחק שלך @@ -84,4 +86,5 @@ מצב התראה Danmaku Show notification as danmaku aka bullet comments while game is active + Game Space is running diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 20335c76..2431dff9 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + クイックスタートするアプリ + 素早く起動するアプリを選択 ゲームスペース ゲームの設定を管理 @@ -84,4 +86,5 @@ 弾幕通知モード ゲーム中に弾幕コメントとして通知を表示する + Game Space is running diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 619590b6..7258064b 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly 게임 스페이스 게임용 설정 관리 @@ -84,4 +86,5 @@ 탄막 알림 모드 게임 중일 때 알림을 탄막처럼 작게 표시 + Game Space is running diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index b8928572..9206ede7 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Game ruimte Beheer uw gaming-instellingen @@ -84,4 +86,5 @@ Danmaku meldingsmodus Melding weergeven als danmaku aka bullet reacties wanneer het spel actief is + Game Space is running diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 1d5291b3..e124956d 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Aplikacje szybkiego startu + Wybierz aplikacje do szybkiego uruchamiania Przestrzeń gier Zarządzaj konfiguracją gier @@ -84,4 +86,5 @@ Tryb powiadomień Danmaku Wyświetlaj powiadomienie jako Danmaku w postaci wypunktowanych komentarzy, gdy gra jest aktywna + Przestrzeń gier jest uruchomiona diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b3b38da5..080606c2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Iniciar Aplicativos rapidamente + Selecione os Aplicativos de Início Rápido Espaço de Jogos Gerencie sua configuração de jogos @@ -84,4 +86,5 @@ Modo de notificação Danmaku Mostrar notificações como balões de comentários durante o jogo + Game Space is running diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 21f230eb..8e1f24ac 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Quick Start Apps + Select apps to launch quickly Espaço de jogo Gerir a sua configuração de jogos @@ -84,4 +86,5 @@ Modo de notificação Danmaku Mostrar notificações enquanto o jogo estiver aberto + Game Space is running diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index b069c328..ceb100be 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Pornire rapidă a aplicațiilor + Selectați aplicațiile pentru lansare rapidă Spațiu de jocuri Gestionează-ți configurarea jocurilor @@ -84,4 +86,5 @@ Mod notificări Danmaku Arată notificarea ca și comentariile de tip glonț aka glonț cât timp jocul este activ + Spațiul de joc rulează diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 84121e10..011bdfb4 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Быстрый запуск приложений + Выберите приложения для быстрого запуска Поиграем? Настройка игровых возможностей @@ -84,4 +86,5 @@ Режим прозрачных уведомлений Показывать уведомление в виде прозрачных комментариев, пока игра активна + Игровое пространство запущено diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 572f2ea2..7b65cc74 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Rýchly štart aplikácií + Vybrať aplikácie pre rýchly štart Herný priestor Správa herných nastavení @@ -84,4 +86,5 @@ Režim notifikácií Danmaku Počas aktívnej hry zobraziť upozornenia ako danmaku alias odrážky + Game Space is running diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 137a3b51..87cb5270 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Hızlı Başlangıç Uygulamaları + Hızlı başlatmak için uygulamaları seçin Oyun Alanı Oyun kurulumunuzu yönetin @@ -84,4 +86,5 @@ Danmaku Bildirim modu Oyun aktifken danmaku bullet yorumları olarak bildirim göster + Oyun Alanı çalışıyor diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 06e14222..3e0ca5ea 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Програми швидкого старту + Виберіть програми для швидкого запуску Ігровий Простір Керування налаштуваннями гри @@ -84,4 +86,5 @@ Режим сповіщень Danmaku Показувати сповіщення як Danmaku aka bullet коментарями під час гри активними + Game Space is running diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 1bf4e7ef..dd461a9e 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + Ứng dụng bắt đầu nhanh + Chọn ứng dụng để khởi chạy nhanh Không gian trò chơi Quản lý thiết lập trò chơi của bạn @@ -84,4 +86,5 @@ Chế độ thông báo hiện đại Hiển thị thông báo hiện đại hay còn gọi là nhận xét về dấu đầu dòng khi trò chơi đang hoạt động + Game Space is running diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index be4ace47..0392fd08 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + 快速启动应用程序 + 选择要快速启动的应用 游戏空间 管理您的游戏设置 @@ -84,4 +86,5 @@ 弹幕通知模式 游戏中以弹幕的形式显示通知 + 游戏空间正在运行 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 126c49a6..e8d9750e 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,6 +16,8 @@ limitations under the License. --> + 快速啟動應用程式 + 選擇要快速啟動的應用程式 遊戲空間 管理您的遊戲設定 @@ -84,4 +86,5 @@ 彈幕通知模式 遊戲中以彈幕形式顯示通知。 + 游戲空間正在運行 From a3e602578728bd7237191f5f699a2d720450e912 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 29 May 2025 20:56:00 +0300 Subject: [PATCH 178/214] New Crowdin updates (#111) * New translations strings.xml (German) * New translations strings.xml (Vietnamese) * New translations strings.xml (Italian) * New translations strings.xml (Persian) * New translations strings.xml (Vietnamese) --- app/src/main/res/values-de-rDE/strings.xml | 2 +- app/src/main/res/values-fa-rIR/strings.xml | 2 +- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 3f80f88a..c67c942f 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -86,5 +86,5 @@ Benachrichtigungsmodus „Danmaku“ Bei aktivem Spiel Benachrichtigungen als „Bullet-Kommentare“ aka „Danmaku“ anzeigen - Game Space is running + Spielmodus läuft diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 7c6fc438..d2d07c7c 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -86,5 +86,5 @@ حالت اعلان گلوله جهنمی در حالی که بازی فعال است، اعلان را به حالت اعلان گلوله جهنمی نشان دهید - Game Space is running + فضای بازی در حال اجراست diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index d165606e..c8542159 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -86,5 +86,5 @@ Modalità notifica Danmaku Mostra la notifica come Danmaku, ovvero i commenti sui proiettili, mentre il gioco è attivo - Game Space is running + GameSpace è in esecuzione diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index dd461a9e..a862c14b 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Ứng dụng bắt đầu nhanh - Chọn ứng dụng để khởi chạy nhanh + Mở nhanh ứng dụng + Chọn ứng dụng để mở nhanh Không gian trò chơi Quản lý thiết lập trò chơi của bạn @@ -86,5 +86,5 @@ Chế độ thông báo hiện đại Hiển thị thông báo hiện đại hay còn gọi là nhận xét về dấu đầu dòng khi trò chơi đang hoạt động - Game Space is running + Không gian trò chơi đang chạy From 39f5e21741a0365d78e6b64fe24588f01bd59d3c Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Tue, 17 Jun 2025 15:43:04 +0300 Subject: [PATCH 179/214] New translations (#112) --- app/src/main/res/values-es-rES/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e53eb19d..c5267459 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -87,5 +87,5 @@ Mantén presionado para establecer Modo notificación silenciosa Mostrar notificación diseño circular mientras el juego está activo - Game Space is running + El espacio del juego se está ejecutando From 6d8a731efde25234581e660eae91abda070441f2 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 4 Jul 2025 15:53:05 +0300 Subject: [PATCH 180/214] New translations (#114) --- app/src/main/res/values-pt-rPT/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 8e1f24ac..7edd5448 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Quick Start Apps - Select apps to launch quickly + Inicialização rápida de aplicativos + Selecione as apps para iniciar rapidamente Espaço de jogo Gerir a sua configuração de jogos @@ -27,7 +27,7 @@ Manter ativo Bloquear gestos Desativar brilho automático - Disable three fingers swipe gesture + Desativar gesto de deslizar três dedos Desativar depuração USB Transparência do menu de sobreposição @@ -86,5 +86,5 @@ Modo de notificação Danmaku Mostrar notificações enquanto o jogo estiver aberto - Game Space is running + Espaço de Jogo a ser executado From 9aa461959378d1a8b812d4c629de6c81d8d63828 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 20 Jul 2025 10:53:45 +0300 Subject: [PATCH 181/214] New translations strings.xml (Portuguese, Brazilian) (#115) --- app/src/main/res/values-pt-rBR/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 080606c2..62d5b725 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -16,8 +16,8 @@ limitations under the License. --> - Iniciar Aplicativos rapidamente - Selecione os Aplicativos de Início Rápido + Aplicativos de início rápido + Selecione Aplicativos para o Início Rápido Espaço de Jogos Gerencie sua configuração de jogos @@ -86,5 +86,5 @@ Modo de notificação Danmaku Mostrar notificações como balões de comentários durante o jogo - Game Space is running + Espaço de jogo em execução From 3dd7475d18cef6ab48a0816ca6a3166d7e24f108 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 31 Aug 2025 20:50:19 +0530 Subject: [PATCH 182/214] GameSpace: Update CustomSeekBarPreference to use material expressive layout Signed-off-by: Pranav Vashi --- .../preferences/CustomSeekBarPreference.java | 537 +++++++++--------- .../SystemSettingSeekBarPreference.java | 7 +- .../res/drawable/ic_custom_seekbar_minus.xml | 8 +- .../res/drawable/ic_custom_seekbar_plus.xml | 4 +- .../res/drawable/ic_custom_seekbar_reset.xml | 4 +- .../res/layout/preference_custom_seekbar.xml | 142 ----- 6 files changed, 265 insertions(+), 437 deletions(-) delete mode 100644 app/src/main/res/layout/preference_custom_seekbar.xml diff --git a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java index 63408529..2b1d792d 100644 --- a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java +++ b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2022 crDroid Android Project + * Copyright (C) 2016-2025 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,351 +17,326 @@ import android.content.Context; import android.content.res.TypedArray; -import android.graphics.PorterDuff; -import androidx.core.content.res.TypedArrayUtils; -import androidx.preference.*; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.util.Log; import android.view.View; +import android.view.MotionEvent; import android.view.ViewGroup; -import android.view.ViewParent; import android.widget.ImageView; -import android.widget.SeekBar; import android.widget.TextView; -import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.res.ResourcesCompat; +import androidx.core.view.ViewCompat; +import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; import io.chaldeaprjkt.gamespace.R; +import com.android.settingslib.widget.SliderPreference; + +import com.google.android.material.slider.LabelFormatter; +import com.google.android.material.slider.Slider; + +public class CustomSeekBarPreference extends SliderPreference { -public class CustomSeekBarPreference extends Preference implements SeekBar.OnSeekBarChangeListener { - protected final String TAG = getClass().getName(); private static final String SETTINGS_NS = "http://schemas.android.com/apk/res/com.android.settings"; - protected static final String ANDROIDNS = "http://schemas.android.com/apk/res/android"; + private static final String ANDROIDNS = "http://schemas.android.com/apk/res/android"; - protected int mInterval = 1; - protected boolean mShowSign = false; - protected String mUnits = ""; - protected boolean mContinuousUpdates = false; + private boolean mShowSign; + @Nullable + private String mUnits = ""; + @Nullable + private String mDefaultValueText; + private boolean mDefaultValueTextExists; + private boolean mDefaultValueExists; + private int mDefaultValue; - protected int mMinValue = 0; - protected int mMaxValue = 100; - protected boolean mDefaultValueExists = false; - protected int mDefaultValue; - protected boolean mDefaultValueTextExists = false; - protected String mDefaultValueText; + private CharSequence mUserSummary; - protected int mValue; + private boolean mInUserDrag = false; - protected TextView mValueTextView; - protected ImageView mResetImageView; - protected ImageView mMinusImageView; - protected ImageView mPlusImageView; - protected SeekBar mSeekBar; + public CustomSeekBarPreference(Context context, AttributeSet attrs) { + super(context, attrs); + readLegacyAttrs(context, attrs); + initDefaults(); + mUserSummary = super.getSummary(); + updateSummaryNow(); + } - protected boolean mTrackingTouch = false; - protected int mTrackingValue; + public CustomSeekBarPreference(Context context) { + super(context, null); + initDefaults(); + mUserSummary = super.getSummary(); + updateSummaryNow(); + } - public CustomSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); + private void initDefaults() { + setShowSliderValue(true); + setHapticFeedbackMode(HAPTIC_FEEDBACK_MODE_ON_TICKS); + setLabelFormater(new LabelFormatter() { + @Override public String getFormattedValue(float value) { + return formatValueForSummary((int) value); + } + }); + } - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomSeekBarPreference); + private void readLegacyAttrs(Context c, AttributeSet attrs) { + if (attrs == null) return; + final TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.CustomSeekBarPreference); try { - mShowSign = a.getBoolean(R.styleable.CustomSeekBarPreference_showSign, mShowSign); - String units = a.getString(R.styleable.CustomSeekBarPreference_units); - if (units != null) - mUnits = " " + units; - mContinuousUpdates = a.getBoolean(R.styleable.CustomSeekBarPreference_continuousUpdates, mContinuousUpdates); - String defaultValueText = a.getString(R.styleable.CustomSeekBarPreference_defaultValueText); - mDefaultValueTextExists = defaultValueText != null && !defaultValueText.isEmpty(); - if (mDefaultValueTextExists) { - mDefaultValueText = defaultValueText; + mShowSign = a.getBoolean(R.styleable.CustomSeekBarPreference_showSign, false); + final String units = a.getString(R.styleable.CustomSeekBarPreference_units); + if (units != null) mUnits = units; + + final boolean continuous = a.getBoolean( + R.styleable.CustomSeekBarPreference_continuousUpdates, false); + setUpdatesContinuously(continuous); + + mDefaultValueText = a.getString( + R.styleable.CustomSeekBarPreference_defaultValueText); + mDefaultValueTextExists = mDefaultValueText != null && !mDefaultValueText.isEmpty(); + + String defaultValue = attrs.getAttributeValue(ANDROIDNS, "defaultValue"); + if (defaultValue == null) { + defaultValue = attrs.getAttributeValue(SETTINGS_NS, "defaultValue"); + } + if (defaultValue != null && !defaultValue.isEmpty()) { + try { + mDefaultValue = Integer.parseInt(defaultValue); + mDefaultValueExists = true; + } catch (NumberFormatException ignored) { + mDefaultValueExists = false; + } } + + int interval = attrs.getAttributeIntValue(SETTINGS_NS, "interval", 0); + if (interval == 0) { + interval = attrs.getAttributeIntValue(ANDROIDNS, "interval", 0); + } + if (interval > 0) setSliderIncrement(interval); + } catch (Throwable ignored) { + // keep safe defaults } finally { a.recycle(); } + } - try { - String newInterval = attrs.getAttributeValue(SETTINGS_NS, "interval"); - if (newInterval != null) - mInterval = Integer.parseInt(newInterval); - } catch (Exception e) { - Log.e(TAG, "Invalid interval value", e); - } - mMinValue = attrs.getAttributeIntValue(SETTINGS_NS, "min", mMinValue); - mMaxValue = attrs.getAttributeIntValue(ANDROIDNS, "max", mMaxValue); - if (mMaxValue < mMinValue) - mMaxValue = mMinValue; - String defaultValue = attrs.getAttributeValue(ANDROIDNS, "defaultValue"); - mDefaultValueExists = defaultValue != null && !defaultValue.isEmpty(); - if (mDefaultValueExists) { - mDefaultValue = getLimitedValue(Integer.parseInt(defaultValue)); - mValue = mDefaultValue; - } else { - mValue = mMinValue; - } + @Override + public void setSummary(CharSequence summary) { + mUserSummary = summary; + updateSummaryNow(); + } - mSeekBar = new SeekBar(context, attrs); - setLayoutResource(R.layout.preference_custom_seekbar); + @Override + public void setValue(int sliderValue) { + super.setValue(sliderValue); + if (!mInUserDrag) updateSummaryNow(); } - public CustomSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) { - this(context, attrs, defStyleAttr, 0); + private void updateSummaryNow() { + CharSequence composed = composeSummary(mUserSummary, getValue()); + super.setSummary(composed); } - public CustomSeekBarPreference(Context context, AttributeSet attrs) { - this(context, attrs, TypedArrayUtils.getAttr(context, - androidx.preference.R.attr.preferenceStyle, - android.R.attr.preferenceStyle)); + private String formatValueForSummary(int v) { + if (mDefaultValueExists && mDefaultValueTextExists && v == mDefaultValue) { + return mDefaultValueText; + } + String s = String.valueOf(v); + if (mShowSign && v > 0) s = "+" + s; + if (mUnits != null && !mUnits.isEmpty()) s = s + " " + mUnits; + return s; } - public CustomSeekBarPreference(Context context) { - this(context, null); + private CharSequence composeSummary(CharSequence userSummary, int v) { + final String valueText = formatValueForSummary(v); + if (userSummary == null || userSummary.length() == 0) return valueText; + return valueText + " \u2022 " + userSummary; } @Override - public void onDependencyChanged(Preference dependency, boolean disableDependent) { - super.onDependencyChanged(dependency, disableDependent); - this.setShouldDisableView(true); - if (mSeekBar != null) - mSeekBar.setEnabled(!disableDependent); - if (mResetImageView != null) - mResetImageView.setEnabled(!disableDependent); - if (mPlusImageView != null) - mPlusImageView.setEnabled(!disableDependent); - if (mMinusImageView != null) - mMinusImageView.setEnabled(!disableDependent); + public void setDefaultValue(Object defaultValue) { + if (defaultValue instanceof Integer) { + mDefaultValueExists = true; + mDefaultValue = (Integer) defaultValue; + } + super.setDefaultValue(defaultValue); + updateSummaryNow(); } @Override - public void onBindViewHolder(PreferenceViewHolder holder) { + public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { super.onBindViewHolder(holder); - try - { - // move our seekbar to the new view we've been given - ViewParent oldContainer = mSeekBar.getParent(); - ViewGroup newContainer = (ViewGroup) holder.findViewById(R.id.seekbar); - if (oldContainer != newContainer) { - // remove the seekbar from the old view - if (oldContainer != null) { - ((ViewGroup) oldContainer).removeView(mSeekBar); - } - // remove the existing seekbar (there may not be one) and add ours - newContainer.removeAllViews(); - newContainer.addView(mSeekBar, ViewGroup.LayoutParams.FILL_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - } - } catch (Exception ex) { - Log.e(TAG, "Error binding view: " + ex.toString()); - } - mSeekBar.setMax(getSeekValue(mMaxValue)); - mSeekBar.setProgress(getSeekValue(mValue)); - mSeekBar.setEnabled(isEnabled()); + final TextView summaryView = (TextView) holder.findViewById(android.R.id.summary); + if (summaryView != null) { + summaryView.setText(composeSummary(mUserSummary, getValue())); + } - mValueTextView = (TextView) holder.findViewById(R.id.value); - mResetImageView = (ImageView) holder.findViewById(R.id.reset); - mMinusImageView = (ImageView) holder.findViewById(R.id.minus); - mPlusImageView = (ImageView) holder.findViewById(R.id.plus); + final View labelFrame = holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.label_frame); + final TextView startText = (TextView) holder.findViewById(android.R.id.text1); + final TextView endText = (TextView) holder.findViewById(android.R.id.text2); - updateValueViews(); + if (labelFrame != null) { + boolean hasStart = startText != null && startText.getText() != null + && startText.getText().length() > 0; + boolean hasEnd = endText != null && endText.getText() != null + && endText.getText().length() > 0; + boolean parentWantsLabels = hasStart || hasEnd; - mSeekBar.setOnSeekBarChangeListener(this); - mResetImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Toast.makeText(getContext(), getContext().getString(R.string.custom_seekbar_default_value_to_set, getTextValue(mDefaultValue)), - Toast.LENGTH_LONG).show(); - } - }); - mResetImageView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View view) { - setValue(mDefaultValue, true); - return true; - } - }); - mMinusImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - setValue(mValue - mInterval, true); - } - }); - mMinusImageView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View view) { - setValue(mMaxValue - mMinValue > mInterval * 2 && mMaxValue + mMinValue < mValue * 2 ? Math.floorDiv(mMaxValue + mMinValue, 2) : mMinValue, true); - return true; - } - }); - mPlusImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - setValue(mValue + mInterval, true); - } - }); - mPlusImageView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View view) { - setValue(mMaxValue - mMinValue > mInterval * 2 && mMaxValue + mMinValue > mValue * 2 ? -1 * Math.floorDiv(-1 * (mMaxValue + mMinValue), 2) : mMaxValue, true); - return true; - } - }); - } - - protected int getLimitedValue(int v) { - return v < mMinValue ? mMinValue : (v > mMaxValue ? mMaxValue : v); - } - - protected int getSeekValue(int v) { - return 0 - Math.floorDiv(mMinValue - v, mInterval); - } + labelFrame.setVisibility((parentWantsLabels || mDefaultValueExists) ? View.VISIBLE : View.GONE); + } - protected String getTextValue(int v) { - if (mDefaultValueTextExists && mDefaultValueExists && v == mDefaultValue) { - return mDefaultValueText; + if (endText != null) { + attachResetIcon(endText); } - return (mShowSign && v > 0 ? "+" : "") + String.valueOf(v) + mUnits; - } - protected void updateValueViews() { - if (mValueTextView != null) { - if (!mTrackingTouch || mContinuousUpdates) { - if (mDefaultValueTextExists && mDefaultValueExists && mValue == mDefaultValue) { - mValueTextView.setText(mDefaultValueText + " (" + - getContext().getString(R.string.custom_seekbar_default_value) + ")"); - } else { - mValueTextView.setText(getContext().getString(R.string.custom_seekbar_value, getTextValue(mValue)) + - (mDefaultValueExists && mValue == mDefaultValue ? " (" + - getContext().getString(R.string.custom_seekbar_default_value) + ")" : "")); + ViewGroup minusFrame = (ViewGroup) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_start_frame); + ImageView minusIcon = (ImageView) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_start); + + ViewGroup plusFrame = (ViewGroup) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_end_frame); + ImageView plusIcon = (ImageView) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_end); + + final Slider slider = (Slider) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.slider); + + if (minusFrame != null && minusIcon != null) { + minusFrame.setVisibility(View.VISIBLE); + minusIcon.setImageResource(R.drawable.ic_custom_seekbar_minus); + minusFrame.setOnClickListener(v -> { + if (!isEnabled()) return; + int base = slider != null ? Math.round(slider.getValue()) : getValue(); + int newVal = Math.max(getMin(), base - getSliderIncrement()); + if (newVal != getValue()) { + setValue(newVal); + updatePlusMinusEnabledStates(holder); } - } else { - if (mDefaultValueTextExists && mDefaultValueExists && mTrackingValue == mDefaultValue) { - mValueTextView.setText("[" + mDefaultValueText + "]"); - } else { - mValueTextView.setText(getContext().getString(R.string.custom_seekbar_value, "[" + getTextValue(mTrackingValue) + "]")); - } - } + }); } - if (mResetImageView != null) { - if (!mDefaultValueExists || mValue == mDefaultValue || mTrackingTouch) - mResetImageView.setVisibility(View.INVISIBLE); - else - mResetImageView.setVisibility(View.VISIBLE); - } - if (mMinusImageView != null) { - if (mValue == mMinValue || mTrackingTouch) { - mMinusImageView.setClickable(false); - mMinusImageView.setColorFilter(getContext().getColor(R.color.disabled_text_color), - PorterDuff.Mode.MULTIPLY); - } else { - mMinusImageView.setClickable(true); - mMinusImageView.clearColorFilter(); - } - } - if (mPlusImageView != null) { - if (mValue == mMaxValue || mTrackingTouch) { - mPlusImageView.setClickable(false); - mPlusImageView.setColorFilter(getContext().getColor(R.color.disabled_text_color), PorterDuff.Mode.MULTIPLY); - } else { - mPlusImageView.setClickable(true); - mPlusImageView.clearColorFilter(); - } + + if (plusFrame != null && plusIcon != null) { + plusFrame.setVisibility(View.VISIBLE); + plusIcon.setImageResource(R.drawable.ic_custom_seekbar_plus); + plusFrame.setOnClickListener(v -> { + if (!isEnabled()) return; + int base = slider != null ? Math.round(slider.getValue()) : getValue(); + int newVal = Math.min(getMax(), base + getSliderIncrement()); + if (newVal != getValue()) { + setValue(newVal); + updatePlusMinusEnabledStates(holder); + } + }); } - } - protected void changeValue(int newValue) { - // for subclasses - } + updatePlusMinusEnabledStates(holder); - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - int newValue = getLimitedValue(mMinValue + (progress * mInterval)); - if (mTrackingTouch && !mContinuousUpdates) { - mTrackingValue = newValue; - updateValueViews(); - } else if (mValue != newValue) { - // change rejected, revert to the previous value - if (!callChangeListener(newValue)) { - mSeekBar.setProgress(getSeekValue(mValue)); - return; - } - // change accepted, store it - changeValue(newValue); - persistInt(newValue); + if (slider != null && summaryView != null) { + slider.addOnChangeListener((s, value, fromUser) -> { + if (fromUser) { + summaryView.setText(composeSummary(mUserSummary, (int) value)); + updatePlusMinusEnabledStates(holder); + } + }); + slider.addOnSliderTouchListener(new Slider.OnSliderTouchListener() { + @Override + public void onStartTrackingTouch(@NonNull Slider s) { + mInUserDrag = true; + } - mValue = newValue; - updateValueViews(); + @Override + public void onStopTrackingTouch(@NonNull Slider s) { + mInUserDrag = false; + updateSummaryNow(); + updatePlusMinusEnabledStates(holder); + } + }); } } @Override - public void onStartTrackingTouch(SeekBar seekBar) { - mTrackingValue = mValue; - mTrackingTouch = true; - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - mTrackingTouch = false; - if (!mContinuousUpdates) - onProgressChanged(mSeekBar, getSeekValue(mTrackingValue), false); + public void onDependencyChanged(@NonNull Preference dependency, boolean disableDependent) { + super.onDependencyChanged(dependency, disableDependent); notifyChanged(); } - @Override - protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { - if (restoreValue) - mValue = getPersistedInt(mValue); - } - - @Override - public void setDefaultValue(Object defaultValue) { - if (defaultValue instanceof Integer) - setDefaultValue((Integer) defaultValue, mSeekBar != null); - else - setDefaultValue(defaultValue == null ? (String) null : defaultValue.toString(), mSeekBar != null); - } - - public void setDefaultValue(int newValue, boolean update) { - newValue = getLimitedValue(newValue); - if (!mDefaultValueExists || mDefaultValue != newValue) { - mDefaultValueExists = true; - mDefaultValue = newValue; - if (update) - updateValueViews(); + private void updatePlusMinusEnabledStates(PreferenceViewHolder holder) { + View minusFrame = holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_start_frame); + ImageView minusIcon = (ImageView) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_start); + View plusFrame = holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_end_frame); + ImageView plusIcon = (ImageView) holder.findViewById( + com.android.settingslib.widget.preference.slider.R.id.icon_end); + boolean enabled = isEnabled(); + int value = getValue(); + + if (minusFrame != null && minusIcon != null) { + int min = getMin(); + minusFrame.setEnabled(enabled && (value > min)); + minusIcon.setEnabled(enabled && (value > min)); + } + if (plusFrame != null && plusIcon != null) { + int max = getMax(); + plusFrame.setEnabled(enabled && (value < max)); + plusIcon.setEnabled(enabled && (value < max)); } } - public void setDefaultValue(String newValue, boolean update) { - if (mDefaultValueExists && (newValue == null || newValue.isEmpty())) { - mDefaultValueExists = false; - if (update) - updateValueViews(); - } else if (newValue != null && !newValue.isEmpty()) { - setDefaultValue(Integer.parseInt(newValue), update); + private void attachResetIcon(TextView tv) { + if (!mDefaultValueExists) { + tv.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, null); + tv.setOnTouchListener(null); + tv.setClickable(false); + return; } - } - public void setValue(int newValue) { - mValue = getLimitedValue(newValue); - if (mSeekBar != null) mSeekBar.setProgress(getSeekValue(mValue)); + final Drawable icon = ResourcesCompat.getDrawable( + tv.getResources(), R.drawable.ic_custom_seekbar_reset, tv.getContext().getTheme()); + if (icon == null) return; + + tv.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, icon, null); + tv.setCompoundDrawablePadding(dp(tv, 6)); + tv.setClickable(isEnabled()); + tv.setFocusable(isEnabled()); + + tv.setOnTouchListener((v, ev) -> { + if (!isEnabled()) return false; + + if (ev.getAction() != android.view.MotionEvent.ACTION_UP) return false; + final boolean isRtl = androidx.core.view.ViewCompat.getLayoutDirection(tv) + == androidx.core.view.ViewCompat.LAYOUT_DIRECTION_RTL; + final Drawable[] drs = tv.getCompoundDrawablesRelative(); + final Drawable end = isRtl ? drs[0] : drs[2]; + if (end == null) return false; + + final int iconW = end.getIntrinsicWidth(); + final int x = (int) ev.getX(); + if (!isRtl) { + int left = tv.getWidth() - tv.getPaddingRight() - iconW; + if (x >= left) { performReset(); return true; } + } else { + int right = tv.getPaddingLeft() + iconW; + if (x <= right) { performReset(); return true; } + } + return false; + }); } - public void setValue(int newValue, boolean update) { - newValue = getLimitedValue(newValue); - if (mValue != newValue) { - if (update) - mSeekBar.setProgress(getSeekValue(newValue)); - else - mValue = newValue; + private void performReset() { + if (mDefaultValueExists) { + setValue(mDefaultValue); + notifyChanged(); } } - public int getValue() { - return mValue; - } - - public void refresh(int newValue) { - // this will ... - setValue(newValue, mSeekBar != null); + private static int dp(TextView v, int dp) { + return Math.round(dp * v.getResources().getDisplayMetrics().density); } } diff --git a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java index 78d0a876..520c65d8 100644 --- a/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java +++ b/app/src/main/java/com/crdroid/settings/preferences/SystemSettingSeekBarPreference.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2019 crDroid Android Project + * Copyright (C) 2016-2025 crDroid Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,11 +20,6 @@ public class SystemSettingSeekBarPreference extends CustomSeekBarPreference { - public SystemSettingSeekBarPreference(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); - } - public SystemSettingSeekBarPreference(Context context, AttributeSet attrs) { super(context, attrs); setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver())); diff --git a/app/src/main/res/drawable/ic_custom_seekbar_minus.xml b/app/src/main/res/drawable/ic_custom_seekbar_minus.xml index 56f0066c..3e45679f 100644 --- a/app/src/main/res/drawable/ic_custom_seekbar_minus.xml +++ b/app/src/main/res/drawable/ic_custom_seekbar_minus.xml @@ -1,6 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 9f27afb9f6159de2bd734d7080213165c73e9dce Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Tue, 2 Sep 2025 19:19:42 +0530 Subject: [PATCH 183/214] GameSpace: Setup material expressive design for preferences Signed-off-by: Pranav Vashi --- .../gamespace/settings/PerAppSettingsFragment.kt | 8 ++++++-- .../chaldeaprjkt/gamespace/settings/SettingsFragment.kt | 9 ++++++--- app/src/main/res/layout/per_app_header.xml | 9 ++++++--- app/src/main/res/values/themes.xml | 4 ++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt index f3ce44ec..a5cabc9b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt @@ -23,17 +23,21 @@ import android.os.Bundle import android.view.View import androidx.preference.ListPreference import androidx.preference.Preference -import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreferenceCompat + +import com.android.settingslib.widget.SettingsBasePreferenceFragment; + import dagger.hilt.android.AndroidEntryPoint + import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.GameConfig import io.chaldeaprjkt.gamespace.data.SystemSettings import io.chaldeaprjkt.gamespace.data.UserGame import io.chaldeaprjkt.gamespace.utils.GameModeUtils + import javax.inject.Inject -@AndroidEntryPoint(PreferenceFragmentCompat::class) +@AndroidEntryPoint(SettingsBasePreferenceFragment::class) class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), Preference.OnPreferenceChangeListener { diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt index 83d9f0bb..18de585e 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2021 Chaldeaprjkt - * Copyright (C) 2022-2024 crDroid Android Project + * Copyright (C) 2022-2025 crDroid Android Project * 2023-2024 the risingOS Android Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,15 +23,18 @@ import android.provider.Settings import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.preference.Preference -import androidx.preference.PreferenceFragmentCompat + +import com.android.settingslib.widget.SettingsBasePreferenceFragment + import dagger.hilt.android.AndroidEntryPoint + import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.preferences.AppListPreferences import io.chaldeaprjkt.gamespace.preferences.appselector.AppSelectorActivity import io.chaldeaprjkt.gamespace.preferences.QuickStartAppPreference import io.chaldeaprjkt.gamespace.preferences.QuickStartAppPreferenceDialogFragment -@AndroidEntryPoint(PreferenceFragmentCompat::class) +@AndroidEntryPoint(SettingsBasePreferenceFragment::class) class SettingsFragment : Hilt_SettingsFragment() { private var apps: AppListPreferences? = null diff --git a/app/src/main/res/layout/per_app_header.xml b/app/src/main/res/layout/per_app_header.xml index 3542f163..37ed96a9 100644 --- a/app/src/main/res/layout/per_app_header.xml +++ b/app/src/main/res/layout/per_app_header.xml @@ -17,7 +17,7 @@ @@ -25,13 +25,14 @@ android:id="@android:id/icon" android:layout_width="54dp" android:layout_height="54dp" + android:layout_marginTop="12dp" android:layout_marginBottom="12dp" /> @@ -39,6 +40,8 @@ android:id="@android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="?android:attr/textColorSecondary" /> + android:layout_marginBottom="4dp" + android:textColor="?android:attr/textColorSecondary" + android:textSize="18sp" /> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index cd4800eb..11a3585e 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -16,9 +16,9 @@ - From 8ba2d5f98c494dd0b7bcd8619da21898ee26efe0 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 3 Sep 2025 14:10:37 +0530 Subject: [PATCH 184/214] GameSpace: Add slider increment guard for CustomSeekBarPreference Signed-off-by: Pranav Vashi --- .../preferences/CustomSeekBarPreference.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java index 2b1d792d..dd464937 100644 --- a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java +++ b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java @@ -115,6 +115,20 @@ private void readLegacyAttrs(Context c, AttributeSet attrs) { interval = attrs.getAttributeIntValue(ANDROIDNS, "interval", 0); } if (interval > 0) setSliderIncrement(interval); + + // Guard against improper slider increment + int min = getMin(); + int max = getMax(); + int span = Math.max(0, max - min); + + int step = getSliderIncrement(); + if (step <= 0 || span == 0) { + setSliderIncrement(1); // Always use discrete steps for CustomSeekBarPreference + } else if ((span % step) != 0) { + int gcd = gcd(span, step); + if (gcd <= 0) gcd = 1; + setSliderIncrement(gcd); + } } catch (Throwable ignored) { // keep safe defaults } finally { @@ -206,13 +220,15 @@ public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { final Slider slider = (Slider) holder.findViewById( com.android.settingslib.widget.preference.slider.R.id.slider); + int stepForClicks = Math.max(1, getSliderIncrement()); + if (minusFrame != null && minusIcon != null) { minusFrame.setVisibility(View.VISIBLE); minusIcon.setImageResource(R.drawable.ic_custom_seekbar_minus); minusFrame.setOnClickListener(v -> { if (!isEnabled()) return; int base = slider != null ? Math.round(slider.getValue()) : getValue(); - int newVal = Math.max(getMin(), base - getSliderIncrement()); + int newVal = Math.max(getMin(), base - stepForClicks); if (newVal != getValue()) { setValue(newVal); updatePlusMinusEnabledStates(holder); @@ -226,7 +242,7 @@ public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { plusFrame.setOnClickListener(v -> { if (!isEnabled()) return; int base = slider != null ? Math.round(slider.getValue()) : getValue(); - int newVal = Math.min(getMax(), base + getSliderIncrement()); + int newVal = Math.min(getMax(), base + stepForClicks); if (newVal != getValue()) { setValue(newVal); updatePlusMinusEnabledStates(holder); @@ -265,6 +281,16 @@ public void onDependencyChanged(@NonNull Preference dependency, boolean disableD notifyChanged(); } + private static int gcd(int a, int b) { + a = Math.abs(a); b = Math.abs(b); + if (a == 0) return b; + if (b == 0) return a; + while (b != 0) { + int t = b; b = a % b; a = t; + } + return a; + } + private void updatePlusMinusEnabledStates(PreferenceViewHolder holder) { View minusFrame = holder.findViewById( com.android.settingslib.widget.preference.slider.R.id.icon_start_frame); From 9b5bdf75a822335d16e08a27e1b577d9cac886b3 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 5 Sep 2025 09:54:00 +0530 Subject: [PATCH 185/214] GameSpace: Fix per-app header layout Signed-off-by: Pranav Vashi --- .../gamespace/settings/PerAppSettingsFragment.kt | 16 +++++++++++----- app/src/main/res/xml/per_app_preferences.xml | 6 ++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt index a5cabc9b..88cda8da 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/PerAppSettingsFragment.kt @@ -21,11 +21,15 @@ import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.view.View +import android.widget.ImageView +import android.widget.TextView + import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat -import com.android.settingslib.widget.SettingsBasePreferenceFragment; +import com.android.settingslib.widget.LayoutPreference +import com.android.settingslib.widget.SettingsBasePreferenceFragment import dagger.hilt.android.AndroidEntryPoint @@ -68,10 +72,12 @@ class PerAppSettingsFragment : Hilt_PerAppSettingsFragment(), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - findPreference("headers")?.apply { - layoutResource = R.layout.per_app_header - icon = currentGame?.loadIcon(context.packageManager) - title = context.packageManager?.let { currentGame?.loadLabel(it) } + findPreference("headers")?.apply { + isSelectable = false + findViewById(android.R.id.icon) + ?.setImageDrawable(currentGame?.loadIcon(requireContext().packageManager)) + findViewById(android.R.id.title) + ?.text = currentGame?.loadLabel(requireContext().packageManager) } findPreference(PREF_PREFERRED_MODE)?.apply { currentConfig?.mode?.let { value = it.toString() } diff --git a/app/src/main/res/xml/per_app_preferences.xml b/app/src/main/res/xml/per_app_preferences.xml index b95ae27b..6be5192b 100644 --- a/app/src/main/res/xml/per_app_preferences.xml +++ b/app/src/main/res/xml/per_app_preferences.xml @@ -18,9 +18,11 @@ - + android:layout="@layout/per_app_header" + app:allowDividerAbove="false" + app:allowDividerBelow="false" /> Date: Wed, 10 Sep 2025 09:41:37 +0530 Subject: [PATCH 186/214] GameSpace: Update view for Quick start apps dialog Signed-off-by: Pranav Vashi --- ...QuickStartAppPreferenceDialogFragment.java | 56 ++++++++++++++++++- .../gamespace/widget/QuickStartAppView.java | 12 ++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java index 55c57e74..d33de3f9 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/preferences/QuickStartAppPreferenceDialogFragment.java @@ -15,12 +15,22 @@ */ package io.chaldeaprjkt.gamespace.preferences; +import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.provider.Settings; +import android.view.View; +import android.view.Window; +import android.view.ViewGroup; +import android.widget.ListView; + import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.preference.PreferenceDialogFragmentCompat; import java.util.ArrayList; @@ -85,6 +95,50 @@ public void onClick(DialogInterface dialog, int which) { @Override public void onDialogClosed(boolean positiveResult) {} + @Override + public void onStart() { + super.onStart(); + final Dialog dialog = getDialog(); + if (dialog == null) return; + + final Window window = dialog.getWindow(); + if (window != null) { + WindowCompat.setDecorFitsSystemWindows(window, false); + final View decor = window.getDecorView(); + ViewCompat.setOnApplyWindowInsetsListener(decor, (v, insets) -> { + Insets bars = insets.getInsets( + WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); + v.setPadding(bars.left, bars.top, bars.right, bars.bottom); + return insets; + }); + } + + final ListView list = dialog.findViewById(android.R.id.list); + if (list != null) { + list.setClipToPadding(false); + list.setPadding( + list.getPaddingLeft(), + list.getPaddingTop(), + list.getPaddingRight(), + list.getPaddingBottom() + dp(16) // keeps last row from staying behind buttons + ); + + list.post(() -> { + int screenH = list.getResources().getDisplayMetrics().heightPixels; + int max = (int) (screenH * 0.6f); // cap to ~60% of screen + if (list.getHeight() > max) { + ViewGroup.LayoutParams lp = list.getLayoutParams(); + lp.height = max; + list.setLayoutParams(lp); + } + }); + } + } + + private int dp(int v) { + return Math.round(v * getResources().getDisplayMetrics().density); + } + private void saveSelectedApps(Context context) { String[] selectedArray = selectedPackages.toArray(new String[0]); StringBuilder sb = new StringBuilder(); @@ -101,4 +155,4 @@ private void saveSelectedApps(Context context) { preference.saveValue(sb.toString()); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java index a4a9967d..bceaaa3b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java @@ -44,6 +44,9 @@ import android.window.SplashScreen; import androidx.annotation.Nullable; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -119,6 +122,15 @@ private void setupAppIcons(String[] packages) { mLayoutManage.setOrientation(RecyclerView.HORIZONTAL);//设置滚动方向,横向滚动 recyclerView.setLayoutManager(mLayoutManage); recyclerView.setAdapter(new MyRecyclerViewAdapter(recyclerView, Arrays.asList(packages))); + + recyclerView.setNestedScrollingEnabled(false); + recyclerView.setClipToPadding(false); + ViewCompat.setOnApplyWindowInsetsListener(recyclerView, (v, insets) -> { + Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(), + Math.max(v.getPaddingBottom(), bars.bottom)); + return insets; + }); } private void setupAppIcon(ImageView imageView, @Nullable String packageName) { From 3c01f5333e4992d7ef7f539503e8589cdf4d039e Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Wed, 10 Sep 2025 09:38:08 +0530 Subject: [PATCH 187/214] GameSpace: Add callChangeListener() for all changes in CustomSeekBarPreference Fixes: https://github.com/crdroidandroid/issue_tracker/issues/778 Signed-off-by: Pranav Vashi --- .../preferences/CustomSeekBarPreference.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java index dd464937..d87e89b6 100644 --- a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java +++ b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java @@ -229,10 +229,8 @@ public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { if (!isEnabled()) return; int base = slider != null ? Math.round(slider.getValue()) : getValue(); int newVal = Math.max(getMin(), base - stepForClicks); - if (newVal != getValue()) { - setValue(newVal); - updatePlusMinusEnabledStates(holder); - } + applyUserValue(newVal, slider); + updatePlusMinusEnabledStates(holder); }); } @@ -243,10 +241,8 @@ public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { if (!isEnabled()) return; int base = slider != null ? Math.round(slider.getValue()) : getValue(); int newVal = Math.min(getMax(), base + stepForClicks); - if (newVal != getValue()) { - setValue(newVal); - updatePlusMinusEnabledStates(holder); - } + applyUserValue(newVal, slider); + updatePlusMinusEnabledStates(holder); }); } @@ -268,7 +264,7 @@ public void onStartTrackingTouch(@NonNull Slider s) { @Override public void onStopTrackingTouch(@NonNull Slider s) { mInUserDrag = false; - updateSummaryNow(); + applyUserValue(Math.round(s.getValue()), s); updatePlusMinusEnabledStates(holder); } }); @@ -281,6 +277,17 @@ public void onDependencyChanged(@NonNull Preference dependency, boolean disableD notifyChanged(); } + private void applyUserValue(int newVal, @Nullable Slider slider) { + if (newVal == getValue()) return; + if (!callChangeListener(newVal)) { + if (slider != null) slider.setValue(getValue()); + return; + } + setValue(newVal); + updateSummaryNow(); + notifyChanged(); + } + private static int gcd(int a, int b) { a = Math.abs(a); b = Math.abs(b); if (a == 0) return b; @@ -357,8 +364,7 @@ private void attachResetIcon(TextView tv) { private void performReset() { if (mDefaultValueExists) { - setValue(mDefaultValue); - notifyChanged(); + applyUserValue(mDefaultValue, null); } } From 8c83fdca45133da49b9aadb26b5cc70eb31e3dcc Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 5 Oct 2025 18:07:55 +0300 Subject: [PATCH 188/214] New Crowdin updates (#119) * New translations strings.xml (French) * New translations strings.xml (Arabic) * New translations strings.xml (Czech) * New translations strings.xml (Hungarian) * New translations strings.xml (Japanese) * New translations strings.xml (Slovak) * New translations strings.xml (Indonesian) --- app/src/main/res/values-ar-rSA/strings.xml | 2 +- app/src/main/res/values-cs-rCZ/strings.xml | 2 +- app/src/main/res/values-fr-rFR/strings.xml | 2 +- app/src/main/res/values-hu-rHU/strings.xml | 2 +- app/src/main/res/values-in-rID/strings.xml | 2 +- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-sk-rSK/strings.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 215506f4..b957b194 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -86,5 +86,5 @@ وضع إشعار Danmaku إظهار تنبيه Danmaku كما هو معروف باِسم تعليقات سريعة عندما تكون اللعبة نشطة - Game Space is running + diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 0c12f711..29cf5acf 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -86,5 +86,5 @@ Režim upozornění Danmaku Zobrazit oznámení jako odrážku pro danmaku akci, pokud je hra aktivní - Game Space is running + Herní prostředí běží diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index a77684c3..73d89f1b 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -86,5 +86,5 @@ Mode de notification Danmaku Afficher une notification en tant que danmaku (les commentaires flottants) lorsque le jeu est actif - Game Space is running + Espace de Jeux en cours de fonctionnement diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 735b0b4f..4d918408 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -86,5 +86,5 @@ Danmaku Értesítő mód Értesítések danmakuként mutatása, avagy kommentek kilövése játék mód közben - Game Space is running + A Játéktér fut diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index beaf9a46..a368c691 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -86,5 +86,5 @@ Mode Pemberitahuan Danmaku Tampilkan notifikasi sebagai danmaku alias komentar bullet saat permainan aktif - Game Space is running + Game Space sedang berjalan diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 2431dff9..447f2296 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -86,5 +86,5 @@ 弾幕通知モード ゲーム中に弾幕コメントとして通知を表示する - Game Space is running + ゲームスペースが実行中です diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 7b65cc74..ad5ae4cc 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -86,5 +86,5 @@ Režim notifikácií Danmaku Počas aktívnej hry zobraziť upozornenia ako danmaku alias odrážky - Game Space is running + Herný mód spustený From 05880b5d5d8cfd50616e8d28cc597fbb8605b0eb Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 10 Oct 2025 18:52:44 +0530 Subject: [PATCH 189/214] GameSpace: Fix reset icon in CustomSeekBarPreference in RTL layout * Also add tapSlop to increase area of target area. Fixes: https://github.com/crdroidandroid/issue_tracker/issues/803 Signed-off-by: Pranav Vashi --- .../preferences/CustomSeekBarPreference.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java index d87e89b6..6b3e78a4 100644 --- a/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java +++ b/app/src/main/java/com/crdroid/settings/preferences/CustomSeekBarPreference.java @@ -339,23 +339,24 @@ private void attachResetIcon(TextView tv) { tv.setClickable(isEnabled()); tv.setFocusable(isEnabled()); + final int tapSlop = dp(tv, 8); + tv.setOnTouchListener((v, ev) -> { - if (!isEnabled()) return false; + if (!isEnabled() || ev.getAction() != MotionEvent.ACTION_UP) return false; - if (ev.getAction() != android.view.MotionEvent.ACTION_UP) return false; - final boolean isRtl = androidx.core.view.ViewCompat.getLayoutDirection(tv) - == androidx.core.view.ViewCompat.LAYOUT_DIRECTION_RTL; + final boolean isRtl = ViewCompat.getLayoutDirection(tv) == ViewCompat.LAYOUT_DIRECTION_RTL; final Drawable[] drs = tv.getCompoundDrawablesRelative(); - final Drawable end = isRtl ? drs[0] : drs[2]; + final Drawable end = drs[2]; if (end == null) return false; final int iconW = end.getIntrinsicWidth(); final int x = (int) ev.getX(); + if (!isRtl) { - int left = tv.getWidth() - tv.getPaddingRight() - iconW; + final int left = tv.getWidth() - ViewCompat.getPaddingEnd(tv) - iconW - tapSlop; if (x >= left) { performReset(); return true; } } else { - int right = tv.getPaddingLeft() + iconW; + final int right = ViewCompat.getPaddingStart(tv) + iconW + tapSlop; if (x <= right) { performReset(); return true; } } return false; From b68fe22997fe9d43dc579f9df3c9c1a1b028cc46 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Thu, 20 Nov 2025 09:03:56 +0200 Subject: [PATCH 190/214] New translations (#121) --- app/src/main/res/values-el-rGR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index f641e9c5..3be4a64e 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -86,5 +86,5 @@ Λειτουργία ειδοποιήσεων Danmaku Εμφάνιση ειδοποίησης ως danmaku άλλως κουκκίδα σχόλια ενώ το παιχνίδι είναι ενεργό - Game Space is running + Ο Χώρος Παιχνιδιού εκτελείται From 38360c38ec1b9dad4921e9e02779418d5dad2136 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sun, 7 Dec 2025 10:03:22 +0530 Subject: [PATCH 191/214] GameSpace: Do not exclude activity from recents Signed-off-by: Pranav Vashi --- app/src/main/AndroidManifest.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 40cd24fa..23ac4314 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -47,7 +47,6 @@ android:enableOnBackInvokedCallback="true"> @@ -57,12 +56,10 @@ From 46423073d13377917f873eb58b96080d61821e99 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Fri, 26 Dec 2025 19:41:29 +0200 Subject: [PATCH 192/214] GameSpace: adjust panel position on screen based on available space Fixes https://github.com/crdroidandroid/issue_tracker/issues/779 --- .../gamespace/widget/PanelView.kt | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index baa87418..67a0656f 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -23,6 +23,7 @@ import android.view.animation.DecelerateInterpolator import android.view.View import android.view.ViewGroup import android.view.WindowInsets +import android.view.WindowManager import android.widget.LinearLayout import androidx.core.view.doOnLayout import io.chaldeaprjkt.gamespace.R @@ -43,16 +44,27 @@ class PanelView @JvmOverloads constructor( } fun updateTranslationY() { - val targetMargin = appSettings.y - val params = layoutParams as ViewGroup.MarginLayoutParams - val animator = ValueAnimator.ofInt(params.topMargin, targetMargin) - animator.duration = 300L - animator.interpolator = DecelerateInterpolator() - animator.addUpdateListener { valueAnimator -> - params.topMargin = valueAnimator.animatedValue as Int - layoutParams = params + doOnLayout { + val wm = context.getSystemService(Context. WINDOW_SERVICE) as WindowManager + val screenHeight = wm.maximumWindowMetrics.bounds.height() + val panelHeight = measuredHeight + + val targetMargin = appSettings.y + val params = layoutParams as ViewGroup.MarginLayoutParams + + // Ensure the panel doesn't go off-screen + val maxMargin = screenHeight - panelHeight - 16.dp + val adjustedMargin = targetMargin.coerceIn(0, maxMargin) + + val animator = ValueAnimator.ofInt(params.topMargin, adjustedMargin) + animator.duration = 300L + animator.interpolator = DecelerateInterpolator() + animator.addUpdateListener { valueAnimator -> + params.topMargin = valueAnimator.animatedValue as Int + layoutParams = params + } + animator.start() } - animator.start() } override fun onAttachedToWindow() { From 9b2c741bff14670a7e6b3a92a2e21dcec8a1b53c Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:17:10 +0800 Subject: [PATCH 193/214] GameSpace: Adding immersive call overlay feature Change-Id: Id47d39474d70fed5874488dc120db00fc7a7a294 Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: HDzungx Signed-off-by: Mrick343 Signed-off-by: Pranav Vashi --- app/src/main/Android.bp | 16 + .../gamespace/data/AppSettings.kt | 5 + .../gamespace/gamebar/CallListener.kt | 412 ++++++++++++++++-- .../gamebar/lifecycle/repeatWhenAttached.kt | 110 +++++ app/src/main/res/values/strings.xml | 4 + app/src/main/res/xml/root_preferences.xml | 6 + 6 files changed, 512 insertions(+), 41 deletions(-) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/lifecycle/repeatWhenAttached.kt diff --git a/app/src/main/Android.bp b/app/src/main/Android.bp index cb0f8d87..ee8aa8bc 100644 --- a/app/src/main/Android.bp +++ b/app/src/main/Android.bp @@ -28,13 +28,29 @@ android_app { "hilt_android", "org.lineageos.platform.internal", "LineagePreferenceLib", + "androidx.activity_activity-compose", + "androidx.compose.animation_animation-core", + "androidx.compose.animation_animation-graphics", + "androidx.compose.foundation_foundation", + "androidx.compose.material3_material3", + "androidx.compose.material3_material3-window-size-class", + "androidx.compose.material_material-icons-core", + "androidx.compose.material_material-icons-extended", + "androidx.compose.runtime_runtime", + "androidx.compose.ui_ui", + "kotlinx-coroutines-core", + "androidx.lifecycle_lifecycle-runtime-compose", ], kotlincflags: [ + "-Xjvm-default=all", "-opt-in=kotlin.Experimental", "-opt-in=kotlin.ExperimentalStdlibApi", + "-Xopt-in=kotlin.RequiresOptIn", + "-P plugin:androidx.compose.compiler.plugins.kotlin:sourceInformation=true", ], plugins: [ "dagger2-compiler", + "androidx.room_room-compiler-plugin", ], required: [ diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt index 20a376c4..f1baf0e6 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/AppSettings.kt @@ -78,6 +78,10 @@ class AppSettings @Inject constructor(private val context: Context) { get() = db.getBoolean(KEY_LOCK_GESTURE, false) set(value) = db.edit().putBoolean(KEY_LOCK_GESTURE, value).apply() + var callOverlayEnabled + get() = db.getBoolean(KEY_CALL_OVERLAY_ENABLED, true) + set(point) = db.edit().putBoolean(KEY_CALL_OVERLAY_ENABLED, point).apply() + companion object { const val KEY_AUTO_BRIGHTNESS_DISABLE = "gamespace_auto_brightness_disabled" const val KEY_3SCREENSHOT_DISABLE = "gamespace_tfgesture_disabled" @@ -88,5 +92,6 @@ class AppSettings @Inject constructor(private val context: Context) { const val KEY_MENU_OPACITY = "gamespace_menu_opacity" const val KEY_ADB_DISABLE = "gamespace_adb_disabled" const val KEY_LOCK_GESTURE = "gamespace_lock_gesture" + const val KEY_CALL_OVERLAY_ENABLED = "call_overlay_enabled" } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt index 29ff55a4..1d93edc8 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt @@ -3,6 +3,8 @@ * Copyright (C) 2021 AOSP-Krypton Project * Copyright (C) 2022 Nameless-AOSP Project * Copyright (C) 2022-2024 crDroid Android Project + * Copyright (C) 2023 the risingOS Android Project + * Copyright (C) 2025 AxionOS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,48 +21,83 @@ package io.chaldeaprjkt.gamespace.gamebar -import android.Manifest import android.content.Context -import android.content.pm.PackageManager +import android.graphics.BitmapFactory +import android.graphics.PixelFormat import android.media.AudioDeviceInfo import android.media.AudioManager import android.media.AudioSystem +import android.net.Uri +import android.provider.ContactsContract import android.telecom.TelecomManager +import android.telephony.PhoneStateListener import android.telephony.TelephonyCallback import android.telephony.TelephonyManager -import android.util.Log +import android.util.TypedValue +import android.view.Gravity +import android.view.View +import android.view.WindowManager import android.widget.Toast - -import androidx.core.app.ActivityCompat - +import androidx.compose.animation.* +import androidx.compose.animation.core.* +import androidx.compose.foundation.* +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Call +import androidx.compose.material.icons.filled.Close +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.* +import androidx.compose.ui.graphics.* +import androidx.compose.ui.layout.* +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.ViewCompositionStrategy +import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.repeatOnLifecycle import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.scopes.ServiceScoped - -import javax.inject.Inject - import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.AppSettings +import io.chaldeaprjkt.gamespace.gamebar.lifecycle.repeatWhenAttached +import io.chaldeaprjkt.gamespace.utils.dp as extDp +import javax.inject.Inject +import kotlinx.coroutines.* @ServiceScoped class CallListener @Inject constructor( @ApplicationContext private val context: Context, private val appSettings: AppSettings ) { - private val audioManager = context.getSystemService(AudioManager::class.java)!! private val telephonyManager = context.getSystemService(TelephonyManager::class.java)!! private val telecomManager = context.getSystemService(TelecomManager::class.java)!! + private val windowManager = context.getSystemService(WindowManager::class.java)!! private val callsMode = appSettings.callsMode - + private val callOverlayEnabled = appSettings.callOverlayEnabled private var previousAudioMode = audioManager.mode + private var ringerOverlay: ComposeView? = null + private var isOverlayShowing = false + + private val phoneStateListener = object: PhoneStateListener() { + override fun onCallStateChanged(state: Int, incomingNumber: String) { + if (state == TelephonyManager.CALL_STATE_RINGING && callOverlayEnabled) { + showRingerOverlay(incomingNumber) + } + } + } + private val telephonyCallback = object : TelephonyCallback(), TelephonyCallback.CallStateListener { override fun onCallStateChanged(state: Int) { - if (callsMode == 0) return - when (state) { - TelephonyManager.CALL_STATE_RINGING -> handleIncomingCall() + TelephonyManager.CALL_STATE_RINGING -> { + handleIncomingCall() + } TelephonyManager.CALL_STATE_OFFHOOK -> handleOffhookState() TelephonyManager.CALL_STATE_IDLE -> handleIdleState() } @@ -69,60 +106,353 @@ class CallListener @Inject constructor( fun init() { telephonyManager.registerTelephonyCallback(context.mainExecutor, telephonyCallback) + telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) } fun destroy() { telephonyManager.unregisterTelephonyCallback(telephonyCallback) + dismissRingerOverlay(immediate = true) + telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) } private fun handleIncomingCall() { - if (callsMode == 1) { - telecomManager.acceptRingingCall() - Toast.makeText(context, context.getString( - R.string.in_game_calls_received_number, ""), - Toast.LENGTH_SHORT).show() - } else if (callsMode == 2) { - telecomManager.endCall() - Toast.makeText(context, context.getString( - R.string.in_game_calls_rejected_number, ""), - Toast.LENGTH_SHORT).show() + if (callsMode == 0) return + + when (callsMode) { + 1 -> { + telecomManager.acceptRingingCall() + Toast.makeText( + context, + context.getString(R.string.in_game_calls_received_number, ""), + Toast.LENGTH_SHORT + ).show() + } + 2 -> { + telecomManager.endCall() + Toast.makeText( + context, + context.getString(R.string.in_game_calls_rejected_number, ""), + Toast.LENGTH_SHORT + ).show() + } } } private fun handleOffhookState() { - if (callsMode == 2) return + dismissRingerOverlay() + + if (callsMode == 0 || callsMode == 2) return + if (isHeadsetPluggedIn()) { audioManager.isSpeakerphoneOn = false - AudioSystem.setForceUse( - AudioSystem.FOR_COMMUNICATION, - AudioSystem.FORCE_NONE - ) + AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION, AudioSystem.FORCE_NONE) } else { audioManager.isSpeakerphoneOn = true - AudioSystem.setForceUse( - AudioSystem.FOR_COMMUNICATION, - AudioSystem.FORCE_SPEAKER - ) + AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION, AudioSystem.FORCE_SPEAKER) } audioManager.mode = AudioManager.MODE_IN_COMMUNICATION } private fun handleIdleState() { - if (callsMode == 2) return + dismissRingerOverlay() + + if (callsMode == 0 || callsMode == 2) return + audioManager.mode = previousAudioMode - AudioSystem.setForceUse( - AudioSystem.FOR_COMMUNICATION, - AudioSystem.FORCE_NONE - ) + AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION, AudioSystem.FORCE_NONE) } private fun isHeadsetPluggedIn(): Boolean { - val audioDeviceInfoArr: Array = - audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)!! - return audioDeviceInfoArr.any { + val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)!! + return devices.any { it.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES || it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || it.type == AudioDeviceInfo.TYPE_USB_HEADSET } } + + private fun showRingerOverlay(incomingNumber: String) { + if (isOverlayShowing) return + + val sidebarX = appSettings.x + + val layoutParams = WindowManager.LayoutParams( + WindowManager.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, + PixelFormat.TRANSLUCENT + ).apply { + gravity = if (sidebarX < 0) + Gravity.TOP or Gravity.END + else + Gravity.TOP or Gravity.START + + x = 1 + y = appSettings.y - 71.extDp + } + + val callerPhoto = loadContactPhoto(context, incomingNumber) + + ringerOverlay = ComposeView(context).apply { + repeatWhenAttached { + repeatOnLifecycle(Lifecycle.State.STARTED) { + setViewCompositionStrategy( + ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed + ) + setContent { + val isDark = isSystemInDarkTheme() + val scheme = if (isDark) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + MaterialTheme(colorScheme = scheme) { + CallOverlay( + onAccept = { + telecomManager.acceptRingingCall() + handleOffhookState() + dismissRingerOverlay() + }, + onReject = { + telecomManager.endCall() + dismissRingerOverlay() + }, + alignRight = sidebarX < 0, + onDismissAnimation = { dismissRingerOverlay() }, + callerPhoto = callerPhoto + ) + } + } + } + } + } + + try { + windowManager.addView(ringerOverlay, layoutParams) + isOverlayShowing = true + } catch (e: Exception) { + e.printStackTrace() + isOverlayShowing = false + } + } + + private fun dismissRingerOverlay(immediate: Boolean = false) { + ringerOverlay?.let { overlay -> + try { + if (overlay.isAttachedToWindow) { + if (immediate) { + windowManager.removeViewImmediate(overlay) + } else { + overlay.postDelayed({ + try { + windowManager.removeViewImmediate(overlay) + } catch (_: Exception) { } + }, 300) + } + } + } catch (e: Exception) { + e.printStackTrace() + } finally { + ringerOverlay = null + isOverlayShowing = false + } + } + } + + fun loadContactPhoto(context: Context, phoneNumber: String): ImageBitmap? { + val resolver = context.contentResolver + val uri = Uri.withAppendedPath( + ContactsContract.PhoneLookup.CONTENT_FILTER_URI, + Uri.encode(phoneNumber) + ) + + resolver.query(uri, arrayOf(ContactsContract.PhoneLookup.PHOTO_URI), null, null, null)?.use { cursor -> + if (cursor.moveToFirst()) { + val photoUri = cursor.getString(0) ?: return null + resolver.openInputStream(Uri.parse(photoUri))?.use { stream -> + return BitmapFactory.decodeStream(stream)?.asImageBitmap() + } + } + } + return null + } +} + +@Composable +fun CallOverlay( + onAccept: () -> Unit, + onReject: () -> Unit, + alignRight: Boolean, + onDismissAnimation: suspend () -> Unit, + callerPhoto: ImageBitmap? = null +) { + var isVisible by remember { mutableStateOf(false) } + var isDismissing by remember { mutableStateOf(false) } + var btnPressed by remember { mutableStateOf(false) } + + val scale by animateFloatAsState( + targetValue = when { + isDismissing -> 0f + isVisible -> 1f + else -> 0f + }, + animationSpec = tween(250, easing = FastOutSlowInEasing), + label = "shrink_scale" + ) + + val fadeAlpha by animateFloatAsState( + targetValue = if (isDismissing) 0f else 1f, + animationSpec = tween(250), + label = "fade" + ) + + val infiniteTransition = rememberInfiniteTransition(label = "pulse") + val pulseAlpha by infiniteTransition.animateFloat( + initialValue = 0.6f, + targetValue = 1f, + animationSpec = infiniteRepeatable( + animation = tween(1000, easing = FastOutSlowInEasing), + repeatMode = RepeatMode.Reverse + ), + label = "pulse_alpha" + ) + + val buttonScale by animateFloatAsState( + targetValue = if (btnPressed) 0.85f else 1f, + animationSpec = tween(100, easing = LinearOutSlowInEasing), + label = "button_press" + ) + + var showPhoto by remember { mutableStateOf(false) } + var acceptAlpha by remember { mutableStateOf(1f) } + var photoAlpha by remember { mutableStateOf(0f) } + + LaunchedEffect(Unit) { + isVisible = true + while (isVisible) { + showPhoto = false + acceptAlpha = 1f + photoAlpha = 0f + delay(1500) + + animate( + initialValue = 1f, + targetValue = 0f, + animationSpec = tween(500) + ) { value, _ -> acceptAlpha = value } + showPhoto = true + + animate( + initialValue = 0f, + targetValue = 1f, + animationSpec = tween(500) + ) { value, _ -> photoAlpha = value } + + delay(1500) + + animate( + initialValue = 1f, + targetValue = 0f, + animationSpec = tween(500) + ) { value, _ -> photoAlpha = value } + } + } + + LaunchedEffect(isDismissing) { + if (isDismissing) { + isVisible = false + delay(250) + onDismissAnimation() + } + } + + Box( + modifier = Modifier + .padding(horizontal = 12.dp, vertical = 8.dp) + .graphicsLayer( + scaleX = scale, + scaleY = scale, + alpha = fadeAlpha + ), + contentAlignment = if (alignRight) Alignment.TopEnd else Alignment.TopStart + ) { + Column( + verticalArrangement = Arrangement.spacedBy(12.dp), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .clip(CircleShape) + .background(MaterialTheme.colorScheme.surfaceContainerHighest) + .padding(12.dp) + .shadow(8.dp, CircleShape) + ) { + IconButton( + onClick = { + btnPressed = true + onReject() + isDismissing = true + }, + modifier = Modifier + .size(56.dp) + .scale(buttonScale) + .clip(CircleShape) + .background(Color(0xFFEF5350)) + ) { + Icon( + imageVector = Icons.Filled.Close, + contentDescription = "Reject", + tint = Color.White.copy(alpha = pulseAlpha), + modifier = Modifier.size(28.dp) + ) + } + + Box( + modifier = Modifier.size(56.dp), + contentAlignment = Alignment.Center + ) { + IconButton( + onClick = { + btnPressed = true + onAccept() + isDismissing = true + }, + modifier = Modifier + .fillMaxSize() + .graphicsLayer { alpha = acceptAlpha } + .scale(buttonScale) + .clip(CircleShape) + .background(Color(0xFF4CAF50)) + ) { + Icon( + imageVector = Icons.Filled.Call, + contentDescription = "Accept", + tint = Color.White.copy(alpha = pulseAlpha), + modifier = Modifier.size(28.dp) + ) + } + + callerPhoto?.let { photo -> + IconButton( + onClick = { + btnPressed = true + onAccept() + isDismissing = true + }, + modifier = Modifier + .fillMaxSize() + .graphicsLayer { alpha = photoAlpha } + .scale(buttonScale) + .clip(CircleShape) + ) { + Image( + bitmap = photo, + contentDescription = "Caller photo", + contentScale = ContentScale.Crop, + modifier = Modifier + .fillMaxSize() + .clip(CircleShape) + ) + } + } + } + } + } } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/lifecycle/repeatWhenAttached.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/lifecycle/repeatWhenAttached.kt new file mode 100644 index 00000000..6864447e --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/lifecycle/repeatWhenAttached.kt @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2025 AxionOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.chaldeaprjkt.gamespace.gamebar.lifecycle + +import android.view.View +import android.view.ViewTreeObserver +import androidx.annotation.MainThread +import androidx.lifecycle.* +import androidx.savedstate.* +import kotlinx.coroutines.* +import kotlin.coroutines.* + +@MainThread +fun View.repeatWhenAttached( + block: suspend LifecycleOwner.(View) -> Unit +): DisposableHandle { + val view = this + val lifecycleCoroutineContext = Dispatchers.Main + EmptyCoroutineContext + var lifecycleOwner: ViewLifecycleOwner? = null + + val onAttachListener = object : View.OnAttachStateChangeListener { + override fun onViewAttachedToWindow(v: View) { + lifecycleOwner?.onDestroy() + lifecycleOwner = createLifecycleOwnerAndRun(view, lifecycleCoroutineContext, block) + } + + override fun onViewDetachedFromWindow(v: View) { + lifecycleOwner?.onDestroy() + lifecycleOwner = null + } + } + + addOnAttachStateChangeListener(onAttachListener) + if (view.isAttachedToWindow) { + lifecycleOwner = createLifecycleOwnerAndRun(view, lifecycleCoroutineContext, block) + } + + return DisposableHandle { + lifecycleOwner?.onDestroy() + lifecycleOwner = null + view.removeOnAttachStateChangeListener(onAttachListener) + } +} + +private fun createLifecycleOwnerAndRun( + view: View, + coroutineContext: CoroutineContext, + block: suspend LifecycleOwner.(View) -> Unit +): ViewLifecycleOwner { + return ViewLifecycleOwner(view).apply { + onCreate() + lifecycleScope.launch(context = coroutineContext) { block(view) } + } +} + +class ViewLifecycleOwner(private val view: View) : LifecycleOwner { + private val registry = LifecycleRegistry(this) + private val windowVisibleListener = + ViewTreeObserver.OnWindowVisibilityChangeListener { updateState() } + private val windowFocusListener = + ViewTreeObserver.OnWindowFocusChangeListener { updateState() } + private val savedStateRegistryOwner = + object : SavedStateRegistryOwner { + private val savedStateRegistryController = + SavedStateRegistryController.create(this).apply { performRestore(null) } + override val savedStateRegistry = savedStateRegistryController.savedStateRegistry + override val lifecycle: Lifecycle + get() = registry + } + + fun onCreate() { + registry.currentState = Lifecycle.State.CREATED + view.viewTreeObserver.addOnWindowVisibilityChangeListener(windowVisibleListener) + view.viewTreeObserver.addOnWindowFocusChangeListener(windowFocusListener) + view.setViewTreeLifecycleOwner(this) + view.setViewTreeSavedStateRegistryOwner(savedStateRegistryOwner) + updateState() + } + + fun onDestroy() { + view.viewTreeObserver.removeOnWindowVisibilityChangeListener(windowVisibleListener) + view.viewTreeObserver.removeOnWindowFocusChangeListener(windowFocusListener) + view.setViewTreeLifecycleOwner(null) + view.setViewTreeSavedStateRegistryOwner(null) + registry.currentState = Lifecycle.State.DESTROYED + } + + override val lifecycle: Lifecycle get() = registry + + private fun updateState() { + registry.currentState = when { + view.windowVisibility != View.VISIBLE -> Lifecycle.State.CREATED + !view.hasWindowFocus() -> Lifecycle.State.STARTED + else -> Lifecycle.State.RESUMED + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fdae66fa..8981493f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -99,4 +99,8 @@ Show notification as danmaku aka bullet comments while game is active Game Space is running + + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 0e509d0e..ac5dade5 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -27,6 +27,12 @@ android:key="in_game_preferences" android:title="@string/in_game_preferences_title"> + + Date: Sun, 28 Dec 2025 18:31:11 +0900 Subject: [PATCH 194/214] GameSpace: adding dismiss button Change-Id: I1359f3a0e1f1466fa5b4500590a93470943a916e Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/CallListener.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt index 1d93edc8..5595751a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt @@ -46,6 +46,7 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -216,6 +217,7 @@ class CallListener @Inject constructor( telecomManager.endCall() dismissRingerOverlay() }, + onDismiss = { dismissRingerOverlay() }, alignRight = sidebarX < 0, onDismissAnimation = { dismissRingerOverlay() }, callerPhoto = callerPhoto @@ -281,6 +283,7 @@ class CallListener @Inject constructor( fun CallOverlay( onAccept: () -> Unit, onReject: () -> Unit, + onDismiss: () -> Unit, alignRight: Boolean, onDismissAnimation: suspend () -> Unit, callerPhoto: ImageBitmap? = null @@ -453,6 +456,25 @@ fun CallOverlay( } } } + + Box( + modifier = Modifier + .size(32.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.surfaceContainerHigh) + .clickable { + isDismissing = true + onDismiss() + }, + contentAlignment = Alignment.Center + ) { + Icon( + imageVector = Icons.Filled.KeyboardArrowDown, + contentDescription = "Dismiss", + tint = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.size(20.dp) + ) + } } } } From d7179bdabc709423d8e683c0a2d74a58b72e15e0 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Tue, 30 Dec 2025 22:33:20 +0200 Subject: [PATCH 195/214] New Crowdin updates (#123) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Russian) * New translations strings.xml (Slovak) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) --- app/src/main/res/values-af-rZA/strings.xml | 3 +++ app/src/main/res/values-ar-rSA/strings.xml | 3 +++ app/src/main/res/values-ca-rES/strings.xml | 3 +++ app/src/main/res/values-cs-rCZ/strings.xml | 3 +++ app/src/main/res/values-da-rDK/strings.xml | 3 +++ app/src/main/res/values-de-rDE/strings.xml | 3 +++ app/src/main/res/values-el-rGR/strings.xml | 3 +++ app/src/main/res/values-es-rES/strings.xml | 3 +++ app/src/main/res/values-fa-rIR/strings.xml | 3 +++ app/src/main/res/values-fi-rFI/strings.xml | 3 +++ app/src/main/res/values-fr-rFR/strings.xml | 3 +++ app/src/main/res/values-hu-rHU/strings.xml | 3 +++ app/src/main/res/values-in-rID/strings.xml | 3 +++ app/src/main/res/values-it-rIT/strings.xml | 3 +++ app/src/main/res/values-iw-rIL/strings.xml | 3 +++ app/src/main/res/values-ja-rJP/strings.xml | 3 +++ app/src/main/res/values-ko-rKR/strings.xml | 3 +++ app/src/main/res/values-nl-rNL/strings.xml | 3 +++ app/src/main/res/values-pl-rPL/strings.xml | 3 +++ app/src/main/res/values-pt-rBR/strings.xml | 3 +++ app/src/main/res/values-pt-rPT/strings.xml | 3 +++ app/src/main/res/values-ro-rRO/strings.xml | 3 +++ app/src/main/res/values-ru-rRU/strings.xml | 3 +++ app/src/main/res/values-sk-rSK/strings.xml | 3 +++ app/src/main/res/values-tr-rTR/strings.xml | 3 +++ app/src/main/res/values-uk-rUA/strings.xml | 3 +++ app/src/main/res/values-vi-rVN/strings.xml | 3 +++ app/src/main/res/values-zh-rCN/strings.xml | 3 +++ app/src/main/res/values-zh-rTW/strings.xml | 3 +++ 29 files changed, 87 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 6ef73d61..4b2aa9fa 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -87,4 +87,7 @@ Danmaku Notification mode Show notification as danmaku aka bullet comments while game is active Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index b957b194..99fa1d80 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -87,4 +87,7 @@ وضع إشعار Danmaku إظهار تنبيه Danmaku كما هو معروف باِسم تعليقات سريعة عندما تكون اللعبة نشطة + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index abe33828..6dde6e93 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -87,4 +87,7 @@ Mode de Notificació Danmaku Mostra notificació mentre el joc està actiu Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 29cf5acf..e1c61115 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -87,4 +87,7 @@ Režim upozornění Danmaku Zobrazit oznámení jako odrážku pro danmaku akci, pokud je hra aktivní Herní prostředí běží + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index c41b3a57..4bbe0626 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -87,4 +87,7 @@ Danmaku-meddelelsestilstand Show notification as danmaku aka bullet comments while game is active Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index c67c942f..dcb8850f 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -87,4 +87,7 @@ Benachrichtigungsmodus „Danmaku“ Bei aktivem Spiel Benachrichtigungen als „Bullet-Kommentare“ aka „Danmaku“ anzeigen Spielmodus läuft + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 3be4a64e..4ac29d53 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -87,4 +87,7 @@ Λειτουργία ειδοποιήσεων Danmaku Εμφάνιση ειδοποίησης ως danmaku άλλως κουκκίδα σχόλια ενώ το παιχνίδι είναι ενεργό Ο Χώρος Παιχνιδιού εκτελείται + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index c5267459..0aea709c 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -88,4 +88,7 @@ Mantén presionado para establecer Modo notificación silenciosa Mostrar notificación diseño circular mientras el juego está activo El espacio del juego se está ejecutando + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index d2d07c7c..bc4f6fca 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -87,4 +87,7 @@ حالت اعلان گلوله جهنمی در حالی که بازی فعال است، اعلان را به حالت اعلان گلوله جهنمی نشان دهید فضای بازی در حال اجراست + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index a5c9da54..b233824c 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -87,4 +87,7 @@ Danmaku Notification mode Show notification as danmaku aka bullet comments while game is active Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 73d89f1b..68f5735a 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -87,4 +87,7 @@ Mode de notification Danmaku Afficher une notification en tant que danmaku (les commentaires flottants) lorsque le jeu est actif Espace de Jeux en cours de fonctionnement + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 4d918408..58f95f9a 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -87,4 +87,7 @@ Danmaku Értesítő mód Értesítések danmakuként mutatása, avagy kommentek kilövése játék mód közben A Játéktér fut + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index a368c691..ece86d57 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -87,4 +87,7 @@ Mode Pemberitahuan Danmaku Tampilkan notifikasi sebagai danmaku alias komentar bullet saat permainan aktif Game Space sedang berjalan + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index c8542159..a6e99001 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -87,4 +87,7 @@ Modalità notifica Danmaku Mostra la notifica come Danmaku, ovvero i commenti sui proiettili, mentre il gioco è attivo GameSpace è in esecuzione + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index c6c99b7b..37753146 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -87,4 +87,7 @@ מצב התראה Danmaku Show notification as danmaku aka bullet comments while game is active Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 447f2296..9372cb70 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -87,4 +87,7 @@ 弾幕通知モード ゲーム中に弾幕コメントとして通知を表示する ゲームスペースが実行中です + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 7258064b..4a4d088c 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -87,4 +87,7 @@ 탄막 알림 모드 게임 중일 때 알림을 탄막처럼 작게 표시 Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 9206ede7..8ab7dc28 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -87,4 +87,7 @@ Danmaku meldingsmodus Melding weergeven als danmaku aka bullet reacties wanneer het spel actief is Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index e124956d..e2601b3c 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -87,4 +87,7 @@ Tryb powiadomień Danmaku Wyświetlaj powiadomienie jako Danmaku w postaci wypunktowanych komentarzy, gdy gra jest aktywna Przestrzeń gier jest uruchomiona + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 62d5b725..fe2644e2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -87,4 +87,7 @@ Modo de notificação Danmaku Mostrar notificações como balões de comentários durante o jogo Espaço de jogo em execução + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 7edd5448..37d21e93 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -87,4 +87,7 @@ Modo de notificação Danmaku Mostrar notificações enquanto o jogo estiver aberto Espaço de Jogo a ser executado + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index ceb100be..5fc65f3c 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -87,4 +87,7 @@ Mod notificări Danmaku Arată notificarea ca și comentariile de tip glonț aka glonț cât timp jocul este activ Spațiul de joc rulează + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 011bdfb4..5132faa7 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -87,4 +87,7 @@ Режим прозрачных уведомлений Показывать уведомление в виде прозрачных комментариев, пока игра активна Игровое пространство запущено + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index ad5ae4cc..eee8a6b2 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -87,4 +87,7 @@ Režim notifikácií Danmaku Počas aktívnej hry zobraziť upozornenia ako danmaku alias odrážky Herný mód spustený + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 87cb5270..8f62f6b4 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -87,4 +87,7 @@ Danmaku Bildirim modu Oyun aktifken danmaku bullet yorumları olarak bildirim göster Oyun Alanı çalışıyor + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 3e0ca5ea..8988acf2 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -87,4 +87,7 @@ Режим сповіщень Danmaku Показувати сповіщення як Danmaku aka bullet коментарями під час гри активними Game Space is running + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index a862c14b..01a413fb 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -87,4 +87,7 @@ Chế độ thông báo hiện đại Hiển thị thông báo hiện đại hay còn gọi là nhận xét về dấu đầu dòng khi trò chơi đang hoạt động Không gian trò chơi đang chạy + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0392fd08..ff30c4b4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -87,4 +87,7 @@ 弹幕通知模式 游戏中以弹幕的形式显示通知 游戏空间正在运行 + + Call overlay + Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e8d9750e..986c3df6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -87,4 +87,7 @@ 彈幕通知模式 遊戲中以彈幕形式顯示通知。 游戲空間正在運行 + + Call overlay + Show minimal call overlay to answer/reject calls From 724cdcee0a0dbeeb14c6ba683dda2cd5142ba3bb Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 31 Dec 2025 13:38:29 +0200 Subject: [PATCH 196/214] New Crowdin updates (#124) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Romanian) --- app/src/main/res/values-ro-rRO/strings.xml | 4 ++-- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 5fc65f3c..0fba12fa 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -88,6 +88,6 @@ Arată notificarea ca și comentariile de tip glonț aka glonț cât timp jocul este activ Spațiul de joc rulează - Call overlay - Show minimal call overlay to answer/reject calls + Apel suprapus + Afișați suprapunerea minimă a apelurilor pentru a răspunde/respinge apelurile diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ff30c4b4..0e1bf5e9 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -88,6 +88,6 @@ 游戏中以弹幕的形式显示通知 游戏空间正在运行 - Call overlay - Show minimal call overlay to answer/reject calls + 电话叠加层 + 显示最小呼叫叠加层以接听/拒接电话 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 986c3df6..427ba911 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -88,6 +88,6 @@ 遊戲中以彈幕形式顯示通知。 游戲空間正在運行 - Call overlay - Show minimal call overlay to answer/reject calls + 電話疊加層 + 顯示最少的通話疊加層以接聽/拒接電話 From 5621c827211421020bded1ebc355a74cd80dd678 Mon Sep 17 00:00:00 2001 From: mukesh22584 Date: Fri, 2 Jan 2026 14:27:34 +0530 Subject: [PATCH 197/214] GameSpace: Migrate app icons to mipmap and add multi-density assets Signed-off-by: mukesh22584 --- app/src/main/AndroidManifest.xml | 2 +- app/src/main/res/drawable/ic_launcher.xml | 6 ------ .../main/res/drawable/ic_launcher_foreground.xml | 10 ---------- .../main/res/mipmap-anydpi-v26/ic_launcher.xml | 6 ++++++ .../res/mipmap-anydpi-v26/ic_launcher_round.xml | 5 +++++ app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1562 bytes .../res/mipmap-hdpi/ic_launcher_background.webp | Bin 0 -> 42 bytes .../res/mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 1388 bytes .../main/res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 3178 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 962 bytes .../res/mipmap-mdpi/ic_launcher_background.webp | Bin 0 -> 44 bytes .../res/mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 836 bytes .../main/res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 2046 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 2044 bytes .../res/mipmap-xhdpi/ic_launcher_background.webp | Bin 0 -> 44 bytes .../res/mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 1906 bytes .../main/res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 4466 bytes app/src/main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 3012 bytes .../mipmap-xxhdpi/ic_launcher_background.webp | Bin 0 -> 50 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 2940 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 6858 bytes app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 4190 bytes .../mipmap-xxxhdpi/ic_launcher_background.webp | Bin 0 -> 50 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.webp | Bin 0 -> 4270 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 9808 bytes app/src/main/res/values/colors.xml | 1 - 26 files changed, 12 insertions(+), 18 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_launcher.xml delete mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 23ac4314..5ad130c6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,7 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index abd869d9..00000000 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..80bcc6f3 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..4ae7d123 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..1712766d8edc3f3d149242bd4368b3fe4f60fc05 GIT binary patch literal 1562 zcmV+#2IcuuNk&Ez1^@t8MM6+kP&iBm1^@srN5ByfD$4c$tCEyA?(XjHio3hJySux) zySBT#OZ7yC)O+{7``)IP7q?(Mg&_vElLouW0f>MVArOH-oR#OmW7+%R+)YJ-CUEf( zDjGNy0a*}+MW7-0S|ec99ZZuBv3L$6xpWMy+_f@5S41$q>j)|Y)~swK54LmuF)%rB zSat#(Of#vVwc|(v0I-attZm!2ZTn^0wr$(CZQI7#HU{gR2nb3PP-_7|pq#tA)l0sC z5P3v0ofW7gm*g(#ju~tKUB~_e(A4*xpr8SYsM0LMPEd%dbT6#EDD4IDL zh5!5bzDe+x#9yJP2e;bHG!bbcl`5=MVxlrLRoQ4Rml@)+{Q*gLAcX&7mEMeIm6|-f zT#=E=EYuOmsFqo-CBa`%jL&PvcTG831S|xActr*#^^faCG?B=^EZ3Tr3KS)Ti5JGB zp;(r0OTrC`(6-x41JM+~f+3n}ax+hE+%EBW%2loxtTCJ}ddX&}+0#cS7Ksv^u_ zhFK7s@^tj;SC)o?I514dEJ;bYhFthh+Ny;qGJDODXr#0Si^GVPrKS!)Meq@0O=S}D z4N}2h`A_1XDTC8SH8OP4<}_G;np?%#GL0d%&Ugx7BUXffHHV`)odmBCF6&JJpp9yY zL?`XUARwbn=ouznl8nt(fNSvjuG|ek;w{4&Ba!ZO0+~OWNJlKAEOjSWIK~B5%?_Kd zX6>7TXQ0DT!_Y<#znS*kwF_(KgOdsw9! ziV^V}fc2)*m%Z%q41kDV{A<)gKF1SzT%@B`JYVo^#BcgT=IvoW2>iq(zR8n%dFw5- z{FxF`jF{fvtTBW|yE((C8V4TFLL$GdT1433hN5Ysk~1OnTbf9vo)8rnurtKEf=nNi zah>V;|7#1DP+x?p!5fRAC=_W6qdfC)We(#tl7 zg!>bIm3n%kg}`BWeOG7)0A`8@VaB+S*lv%(QmmtP))>m?c&x2Dq2GbmUP2htE+if( zK?*`%Q9|r8n0j^8rV=wIg!URCvHnb~2uf@uo-6`ujmDv<-(nCU@QX=NwfTtr1A%uO zGUQpaixKh4D@6#f%kjkJ1lFI96|W*=o?odu>rQ5a*=#tQb5|e8`>$H@{sjVCZRIko zX0mw=B>OMZlp$E-xrT(_J8r>gtsK910mRJRiV=acSXD@5jbIv#=5q0Q1t9lds5E`i z(zo3U30R>$8AvS^;{6K1jK5}<^CjG5AJy9WpX zMEzy;!OReoKj+HI2D3!}2V~a{U$KKDrwYx&WpO@DCXiEjDqhHUr|Q}9)D2G9PiJaL zvpAo-#R>W5(58~y2e;XAhO_OKHOSS}pyfm(Sh>^s(CrRHQOp7m7J#PjTkn>fTovY6 zwms;qt*E!cY=UnGp*E!d@&bh90u5*2pW%D;r zedewchEtNHm|u00krIH00CWYQCjfoLe|xsQr1Jv)22JLDJM z`+s#a+p=3H*}rfn^o;N%o+G7jC-iJn++CN*CA$m_-5D%%*T^As6t!(6nLoFEE|}S) zWzaT~)CI2t^e@!R=*%HDA&JiNclB^LQA<)3K z4Y&Zb5CGc@%Adn0A5eA3j1XJ~?bg7rbe^a%BAQ6pBAzw^sfHF&fjwvQSERneL5&y+X;xZq;#H(cl-={o~ z6rdul2EX7x;{`r^E?XJYkU6F;Gx6;4+Xbko%|LUcJ!hF6Q#Hi$dH9K2%TMeFQ~=9F<=^V+HfleHojLaN> zkZW+!U{ZR*PRY1|w!QWJXEx@EY09kOC@d0&5NR7orkJZ7nZ{t9n=;=9I8_ZOmjeab4Hi-^I8G!sHkRs` zR8<|rQVzIH0Ocv>&=P6yB%;5y*+E$j#7zLbNlc|gTY+$Pp4uTR2aW-B2OtEWNyI$> z73c_?fkVD0&KCx%0i>z|6k^isU(gK>qO5^SpiAQ*zdz3Bj+WNQC1S3gCEkhOMJ}dd zGf;K#a1#dx_CXl1W@3m-1J^)YbpV>+C5F{QAZ9Iw==L`E+W!G?4}e-a^vgG}55Mph zFVT|am|j&iKndQg4gP?Twt-#@(JId}Fg}QQXbX@ueeIDsMvtI&G9?{gPCI*W5kYd( zixW_?NM=`aGKV<=)LlLTI+(&P1(OlBIb`B^qGE{a=QHegb`B4J7n9#{QrAtyNlZXX zoSS3J z`-OpFfS{^9NHhbhpcCv`JaaM#(_Gv(6K(JgaJ1cnB}+f-1YusB9nhiOz$=3_a0tV= z=O7(wZ9XW0=Xc*#7# zlR&(dBUw{fx#o)z2Nf)uevV_h7||%qp`}Px8gMixJkUgEDNmR%j87qwrS~*1{7@SU z1r&rCAyS59bwAC$C5T*0MIhg&3-b^0Qi9liK=Y5l|G0!>LZv0GEkNuv;AzPU#(4pc zvp6-<`G~E9w5*4BQ?|1Y5T|EWaxrsbFtzlL^IVQxmA6K2k%#DAtK}=0h_gILjvy2W z05TO>P66OLjStaUL?JrnNMM619UpQHDV-N zDQ|BNj0%0CBjJt$^T3KUs(f6>3V$t literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..fa62035e49d8c0ffff3a2bbdca05e067760f97a5 GIT binary patch literal 3178 zcmV-w43+azNk&Fu3;+OEMM6+kP&iCh3;+NxN5Byf>QKl1!slC?(XjH?(XjH?(XjH?(SCZ|FfCNz-pEh zmWEjr310g6gdsbG#?v}k(xpAfr{}d!3gWH+{9Fp7) zoZDpxao0$rNiiL$FozDaXZyvsR$?NsqQR`#I}He7TL=sQ5KR7T+qP}nwr$(CZQHhO z+qPX_+XVD~0>It#6Sq1)@rbG_gkm)x@!E)Df|I6Vs-Z$wWUwzqbQ_74CwU90-ue5t zr-Hq#$Wk*E00<^gft&@Z5NK4O-vTWPbRbBVf^>V$JvQm!^0%H7sC?I(06;ONq^JPF zBw3zP1$rUSu1x~7D&RC@hY0li;qwV_fvQNwlmP^?7HB}ABgW9GAQs_)TNMvhf#@~` zN7FPt@F?dRB3tCY(*R^s5(fbvu*&^6PzhHlijh63GO3UG^CZh;^Yv`McRT7`RbyBC=ty*?Cf zalRz--D?t(ZaEr?nu*P^+WnPr17p;n$GJam5xabxL7Q!fUlq^T9 zfZ}eEaEnWB0ZWVrMUE2Y%o2klRz7fx3lu0Dp;r|-N}98vh?|@$Mxb!XFc%4Y!8l5s zv$6rJIX@GI)qGar74xFxy;#iQEdlP3C=eV~z`Pg=t&01g2;|i&1H~y5N{1-fq$|{& zTJdYqi}{ZhJX!p1h&sC=|=(Lp2Rhkdf!F0|lOfxS!Iqh`atXWJZQ;4V_MVBB}Ake@UmabkH7sohaz_6f%2aIAbFUlnrs98ah-4 zP0woD0~9v^RPRW0S{<{|mbT%$qLZ+`gL2)F5CFTR; z4lHY?4NBTA5HPv{3QnKM?1}9hS6#=k%gce(9`nO>p5srmSz8JCt6Uqcx zP}IbhFB9AYB;foXk#+T?4f5WppSx=Ov|7C*0p8Zjg(MGxh(^o!A;WtPV2UYFF07An z6#abEg~1~f;CBbkJp@%XfWUP#eh7BRJ$W@oK@pK5pNY6taez8O>D=BY8Zfpuojsh-4w;uT)|<`SJ2wc4F(18GnJOekpL%rq1ozBmXm z+HMWby6O*`h%j^}>_Ws2%|1{dlVJ%8#Ho|`K3|CP00lsS;!fp^i#0Cl9uiHj!MS(+ z;o$qf%e+Mu1-BG%rkbmyK!lBwM{8yHsKHPGOkZiQQFM^SIFQ{#^b9u~V`rTAQ121C z%;5)9*^q0}>kLVyda^E^O8EAPDzAf%t*RvofRErA){xl}?#cesw9f=pCBR!Q zKLQga*xc5w0#R1|LsaY+za2U^I&Y@7^${oXYN~&)5u3d853`(X< zh|V3#hO#Lc;MJRu)PNWO@1z5S;!bB1Z=`7#>lzK4aD|%P(hnK*0;67obMHF)$NF$!qYj0Dv9C7a`)Xc@DtX zswQdjbqwvI9HU~5IYZrU=7k6>S$v=zze5?b{;r4*I}x!%i<2znBO;{4F8klT&jbjDP0+u0*>mgBeo z1O!wSOajaz7UN3qNvqpS$@%XoN zgew3h0ZROvd>MwGNNo0@hnDofbUQ@+6$zmF`WZyAT*wychC2&dBpudCskr%4IIOYiIP+{CWr7w`KH#Y6nqHqY)6v z^~Wf3#C=9z96k(*)ziz!IrFle%(HIpe}In$MFmK#9O3=PqUd{-VtPYN>$y`X zpaYD!Ajv~-R#+XJ%y$}Z&He_mTaM|7p0sa5uU*0(0Puz=wy;J8zoQ9GK3vHCKNaAq zR?CDjmxn#kPxES=_1cYd%_u8SoPn`cU=WasenC^&AlRe_M8x8D7&5C#@mgt{mi|2J znt~?!eaeyEL+|g8dp-R92YPNS>4q5(=zMwjnV8_T(P3l!1XMD9_Wpthl)A?z-CvO8 zk6lR!5Wf8qn^Rg^oEHzh<>HQOoLxqqIJ`Rh3#$UUXqBewbDREjrkBqV8G6~3UVz|KQs|O(hN|SB4{2~^F zMtG#+@zQlBSbN2f^wycM0j~6Q-h^=2*ejNnU*{Cx@kqn-4$Jf3*=P$dGpy5wM10^{ zUk|N`5>W1c$O5wcu=K~-eku6R4vIkLPnP=WyWpcX^nt5=J+~)9K(Wbe%#%Oyp@a)) zL^XF+i=YoCy6009*;v$j%?GYGx@|*{fGh#M8TVa#UbT~2G@_b2szuORc~nlO*?CMw&RlYer@kNf2Nj4s>aP}(YJR>ft##lpBh6fD-3lN51@1SlZlNT}Faicc zj9*;b>t=HOv$M=Tl-~F#4_IP|-|zQ-9pI1NNa;SMyztG1gO6SOKVcQGHb9b<+N)2X zepuahD?jI{wp@MEhu-J-W8r@5OG-SK$V zL)ZJx3IBXl;nna;AZcHFWze^;So=!?T9-GH^o<)y`sOEe*64Y3-D=*ipLjweN#AVg z%WwU%cE#;?@qzSxomNH*f41FfB%04l>b%+&>eZ`I`@C;odN%waAB0-N*H;UaZfm0s Q+!4KU<()p;#bTKx~R) z^!JwqQii%QB+ir(_v4|Ce-NPnl$HJ$^Lzh4X#_<;z=QZl1rUP}0e>n)iTLKfyYcuX zf8Reb+pr;D5Ug->!Qt;e9O3; zH@0=0WMbB*w&zdm*^`;*b433q0JWC-a^ZS5LQoSVgn=MbTVE%*z7`=OLr}xB>Pq3& z&l?btdr^j);!6XX9=)l;MWw}pON+{0eL;FjIeMqX#aMW8+3WA9oc3AQMD{aio5)VM_Pq%);= zykd;)+!93yKOlbDJ84b`kyK43?&==%`M=Pq%i4awk< zIbC8tB^t9TcKb;DFJc}zd-H&96HlsfBV(2h>@gz}^T8##*$UkFlDup+<|Ve7>6*xX zxlh_AvX7=m-)hQ=N{a=T7F8tuKwl+@7`;_hlvM~Wt5Ci-CWvPE??Ylra*EL8l!TA} k4P_89Hv9AQm*Ag&&5Q|>C%;Whg`4~)i23Uc;a^c}3He^hGynhq literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..0fb229325991a4da335cad9da05453d8f8e669e4 GIT binary patch literal 44 zcmWIYbaPW-U|fBw5YZ3F literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..f192edd176d995c50e6b9e200fe2abb5207c51c3 GIT binary patch literal 836 zcmV-K1H1fENk&FI0{{S5MM6+kP&iC40{{RoYrq;1hvvAEBt?oL|BYR^`!;B8Fp#!Q zw*UTx-UQpWksML?{`+t9a~nX8B-vHO%+n8H0sfo95kI)=-I;2&ZQC&LmdZPDfPDl7 z1rEnXgW&|jgyRZBN5KV-6Dl?e7A6`BCJGuR3JMGbXG}Oc1_}xc{z0WLa)clN0SE$7 z&r6wN;13`n01yy<5P*mI%T9NO<76}0BDYs2CDQO zF%peEk{|$$6e9uFOn)N@8cDN*b4&dHo|oVsoX?T#!MH;!-5~9@ZDVhCY_m>nBYIA3 z+qP{RwQbwBt^f2s?|p9G)9;Pw{{-Owxj&v9@9pXvJM>b*>jOjW?fugizWy_Amiv<4 z%;P3PrpK}sQV*!Q^-uUztB`Q|MSVu6Qb|~;v*Y(Pfi#!C)-k#In=~iA;Pxb(Bznii z#l`+2nNe?eeM=z2PP1lJONKtg>6T&$ek+#y2zb9?R7v`k!qx~$n_U6t4f?2q&j)XT zX5hG_1pqKtAm}HX{Uo>(xGib6j;8>fU{fNp2Y4W9na(1S1}^5oGgmOx>Fwp@Fsdw> zHE*L@v=NgVq~3G&>C^9k#fyj6k0y)N8w1CQh!z5HQ&i{`lS#E0BZ%%1y9~f6oQPZj zV2#=lCdFz|#zNy_X8~9Q5z#dOM(fnNnZ&432E`rFX6k zu#eRL@c69g(cJ?)Ac;}Mss5gT9787EWQL|MNdD)w}ZxWke(WhZ1{e4Jd8;fRx(O$`-noS;y zGB&GOl(5NRQNgB^MWZDD$^(~g-@AA3=DD54{*u~Q49f|-1kpS3a;8}vloI(E;%^hB zTww7`M)*@`eGx9f=L-v?1Z`mtp#8=cZTa9irYYh9WS-lm=@^p_AsXVJL+<%N4Jl?! zuwN|u2V_4?5c0nSwtofu1}q@ou1V3SYzO1Rkt#~zJrq`FdAxKLpfT=uY?eUa^PMxE&1(StB zm@E_lhk*W=`-yA}0&E?b3ZO0>oEhBvXc9(OT zT=4r203eBixdA$ap-ExF6-M~Z2y7g_AD{M5FiHe)3!|8zFlcTV_e@7*xR8wr@>CJ= z_^%X@6ah>C8|uUeO*-1RppE&jA#Y9A5N%A;y#S^|CIEw$GC}|~D-%EgQ#8DT;g$lJ z4wwKoZkLX-ih`;#Vkof(z~m(Y*tnCrW}x7Ph9MTG2nYw0hXP<_cI$?QPSgwx)Y+R1 ziaiM!Zi%jG=u|CC2wExrD$7B#;|43y@eVZ5$%byR2vq!|E4VpC04vpmGO|O>6nvVE z4rSdv+4NY7y^fW@BT!4WYguP^*4>@Vm*Vw5ER@k-t%ZOH5Lpt05_5D-MMQ5YE38T% z5fCc~Kq(zGBP*}NPYFkX$ILP;-FZPNr5)QaPSa#KPa>jPHD z6htiZnQ@z?b4Mt57fy^;hxBJt@;xQrQSb>1PEVf^bZiaf?j?vN7bV09Vv6pk_B_W~ zDIfw!5TrLr*AVf?k*m^?6_jVEc69B=7oFNe`F3W{8e3zdAl9{5DErk6kU#;jm|Z~` z(PC!qafzmacI{4AZm?+Wy!Swq(M#g`ji8v|D^+b}zN3a%^dP& zzajI;aE^3m7%&;ucQXu#je%Mi5~%Y%*KLhpMxki%Q=6fyh`7S)M6-JECC3da|6%YP z_^q%S#D!Pt>30wrAymKkTl2wfLZH@uG!Ty)txhPrL7}Jk$Qh;xKHYlKcQjM? z!s|a(|1)75`iY^Z0HP^vxc!SXKVfYcQ13!LwOxURK?hsuJpK za3G7%%VeF?r88VT`Lo70io9U@{tREnaHUMvnWC>qe~!MQpfq~UF-b%NtN!zlfGB|6 z*CYj-ykMm}ldfE$wAwnmLC&&Y7$gI(PrM{xri)agn;rvkoTgAp-||<3hVCu%YN>hB z0g69Y7)rchEww0}*g$FY2<5D`Bb%ShkFBy^N%a{9(1kNxJ^FEdt?BwQN)2N+WU8JN ze#VstP)d6b&+cgG{u*!B+@=g5|6`Rl>Ju6mYGJ0qp_~nV@s;xg<=ODdNjnjs!D3?8 z;WX&l9ZD%}S@Iod=mA=vH$1EkAo~r~tUw*(w+Pog=kGp5E_^7Re=3M8uZMDPaVo4e zwrd1PcS?!H>@6DTuVSRia5W#MkgIm)H$V~_A0g8v{XWBlQsz=6a zp58)nVE!pl|7w-#q7}(*6V}|JjfMD%nxBdhE5fVi09ITRUnRi?YSygtUhMS!(}^9t z*4iE`6ZH71d|PyZ&amM%Q3?={%#WWQBJz(p{dSJ${MACKyKZ*Ox^E-^01*htul(0zl(E(%9WzJz6-hOKujwM7GRG~a zf{l1&8xs;HUiMs)^{O)jRJqcCf0~PcvW<_t!&l`Grpob-#mlMaBll;6{qJn(N&`p5 zVN%2#G4FWeiof&t1U*$wQ2D3{a;knpv9})2J=TOHhDi}q0~}X2JSc{MbOP$v-}lCH z-#otrJ)STwXxM$(#>o z@s}4R-)U-h@KXfT{n0dT!|5WxiK3K5K*}Et&+0WuyOFB&8o#;TdtZI>Sq=ZVI7t%0 c$x2#}Vv??3k!d0_{m4;xs%8VR)rDZLh`;4XiYRk|@Mh|0Yd>wtpp$^2H4R zaP3{Mtp3A6#^W;C(I~_SvuE;1-{O>i5Q`}rRWt>qb9K(8X z7MH|ZQjbx|X9?C3%g)gxk)0GWp_nDA`J-Pm_CphKEal%tP~;PCj3K>H0A1ZGi9DHV z-=V|hx)dkTQNjkHsf+`+=_&Ro0#V{g9E3(O3xvKRW{jI;z!#Dfyc5?cQON_LuYdt9 zQi-vUFYsI1xN$^;v2rf#1ts0#yTWJHI2Dt-(;Z|G7E zq3ORqJ>Xna9ZJ6h0IGb!oGmnDqs<1No0PIcC)4o&WH}jBCQMlr0Ki28G>A3#;N!J0 zgr+Fl*#P9c7!e}1LX><4095{hSsUo6;HEV$oB{37%629IOCuS4xjEZ(aS%$$=RkY^ z^(baVzZUjGSxq4${Nz@^Whtd>@atm3GoJF|t0K4W2T2+I0`v>JC%L`4l;)_kXj|I zyrh~R5n-6;N^tn1DMl#M9tsZi?D$2X5^f3(HGgB>BLWqDJ~(u?<`#ik5r;iL6{uu8 zg2M)O1A=U%A>BBNjHldqFCAayvy9L3@ludW&Dlj2Z_u^Fp~q^dMy5WH4P-bDfa7=s z^5xznKtl#2YO^U0urs19m*RkKkK{X}ULN6j+QAO?t4~V-OIVS&Gu*;Ny zbc5TwFq*ChCVOtjK-P|5%DfC9-XKtO1~X`u`9uH{$Z{&(X?6MYEI=+3Ybo1O4A7DD zS`feneo-R;4Xx6Nvzi_tl?85Px`!lt$bLxrV+1)b#ENrd`3&__nR0IdDeiIhr&I75 z8oVp@04J#No9yQjv^{Q8bLbyQx2J&&Nc{#&jqp)AZqnkbJn`4%%T9n70CegE_;NrW z8v&juz!OMP?$RPuwhlk67e)N_>cmKQ!lcYA_kr8AGpp0sf{n}?e{5ZOudulH%7S<8 z8`YEFxa4{vCT!3N5eg(1xNTlWoc7Hl{R;;%!hhYW-$}9C!Yr*=W)w)UAEcwibI1GF z-9OhArxu;{P$1Duy(nfB2-pviK!JSkCB_TfcG@1!6oOY)`9`iw z&OGFp{=}BA#DUCM3WRm4%Ai1n75g7dwAo_rD~?J$^;r6)x6&`Ywif79TbFp|>F)R& zESaBMIj z8Hj>CgaR>I6=bUuQ%ZqK3e-}dPT<#XenO*{4`I;`q(FoM@w%j>Ymt|uSx&BI8F>Q! a0R`U(73jR&$5E(HJ|d&{{1 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..ba0bffed6f6dc67fbcc350aca93ccbf34b8601c2 GIT binary patch literal 44 zcmWIYbaPW-U| zbW_!pncXqmb^>>IcX#dcPT)3N?d0yhu7$h1yRO~}IqjzxcZU~n=ntG&9JG<-Nam06 zP~3eEU5wgDavXHc=F04g-1=Nd15ZAOSGoU+1M4$RSFG1Y`i&(_CooH7_S>9yHfl zXPOnH-4GX|QwGb6c2Gk!4N1tb)~V)6@uB#dtMjV4#T+8zXo>>tOK{BZe6%(|S`{zA zU)FVyp#c36KsmZJL<^@=@hVw0mq<~BWTR6t2FL(A&A!-G0vMbJ1LL3%hz57fiP+Wb z2G~5-X(&RJHG5)Ta~fbZ-_ii!4Bm<>v9HKyjL* zscr|QGf;wCb1bfNRBJnwS&B0>%i>&fScZ+h5VbADL&cj>Y+n$nnH%g)MGQY>OFox+uDFaLqN@bXs#4#P zseP%Myj<#iI6+he7JaGviuX3?Xj-NL)IUKw3z7_;Qa5v89cTi2fjdiij0i=4YJhbE zmKq?JEh6v4qXTZproCt^kpH_gMGAslkgLV{0k&}d( z0Z^pHE8ra<=2RfwiXa8_^m!o!ec1^xf+G)=N4i4i3Rsj43W%mD~Vh;)xFLo_Y(|EUL>wE(AXMAqP@ zvnR3~5TDGvOyjYY2(ST|0%QR0pFm}vWp!H0u;!T*&)RHnkMz9xCeqy-q=fmXI;4GX zWZJO#{?AP}NadHz%+D&*AtC_qU&YL+A_CL_P}~vF>dA1@d{SSJL z0FYJy1CrYm;2TH>Xd06NqN|^frX~TvX5JUkQk+U=R3jY+E(*M zT;v`=i4y@%;6bDZ*aQ|25{qWG3Nm7Zq)sFQL7WO0h;_wVHyHs&b>#^FDXj$@S(7#x z$avTu=%*HdNv;wow-=&H#s~JAWv~(s$bABOs{yj@8QjP~y6i~>nuKnzfc>HhpwAwX zM}}s>fgv;@L`{6o0j@LvZ!3F9FBzCK2Tfz5|70$~rL*sq>;gb0O$O@4{tr~F2$;^j z0}-7Iq#c=APdo>D4(R~E1I6M{^LQx{+bX`C)Z}?U5nu;c0U5xRxNHu&K_lYiyx#cO z20anoLT_vpCc@ab2?|jsBC?7T6ktk383lqu+=(cmPLLs-h!|ahGzmn+7_4N8F(k+k zMMR7~K@o05l+YyT7a}gIiG0$exg95|{NyzeAxp$=zU_|`Y#AY5fp*paum^)a{DjhR z2xteie~_1~ydj!~0HpP2-^#EOQHIH{pN+-&Pqx_y!~iFybFZ2eFB%c=HGR4!f}Cwn zLz;ZL8~`B#0NdFkWMCh*-!O{v2pMK7kqLj0mJvX)%Oadee~@G{kTh?WjscS07EgN< zqD4k%bbXoo7`twvYCQpc_XVGfJ`hau0~s6$EW7Xi$d79ZG78PS7szN|5ZK4}G}~T; z6U=lPJbXaLo@GDhDF7bi{}WPj<0#(UefKQ;+V;VqxN^5~K?nzwIzu|U+25lSm(Jc{ zN-I#W<0zQY2?q%F`9`HQBXYDP&`Cq z*Wg<1-tsORN`NwKOmb+W*DPjI`9g9_;BqZTkRc^YGbz(w0-uTgF~C-HP?h2i$&Bn2 zT@~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f2f26fc2feaabf260c80a80c7b8d60f08489580 GIT binary patch literal 4466 zcmV-&5smIrNk&F$5dZ*JMM6+kP&iCp5dZ)$U%(d->QK|r5X4-(Fs|EDSrc>2Kf@n(Vgtuz8Af<*ibY^&w zUadI_(pLodK}WeOcnb=Z+{BXVflHnnFrulj8p zv27dOSA|tN+h%9mwr$%^KHL7@d-rYwY1@WEzsrJb+qA37JwDfrZQHhO=h?Px+qP}~ z#kOsmCkuij$#I*WU31Bymb9JY4|KC_TP-Wc-QC^Y-QC^Y-QC^Y-QC@-xV?T`d+#Dn zH#qTW1$WpjOcB!*vPwX58t@8MAt%E-(3EUaXn+nJigJnFWv4XYT7X+A(*#ZdXC@}3 z1&1D{2s~Ybr#9F0z(onx!(=DLb`3}eQv#Z~^Ib$_-UHJFCAdeHSw0Qmq;LQLAkf&h zZQHhO+qP}n_O9G)+qP}%5D=6|+|;)1L<&Fw5~y5z!lx z%t`73=?i51u}{AJs+J1tV%yLjdmH!FHzque4C5$Dq}?Ljm*|f~r4qGDG$7HKL=*pf z!WI&>?DexVKEC63jsO5-8(Ujsx88u1;wWCE>k<`8G%68@5>P4#fD@(k28jyJ|I*!L z?_9$ju4)6~3KT8TQ;E6=rJM`GoFL3bqv5b1FfN5tG3dnFt!13l6D+jl4y|7kSNUHJa4S~hB*ED)>i;*W2k)y z!1^Q<>99mYgodLb?xRA{FsCnl({ll~QFZlV0Fe?TswXrW=Bg+h<+Qy-i2xU?x9GRQ zLGmI!C-lB1S54-9IXUEsVEffN4Iqw!{zQ0`tEwocCm#u5tJOmg_PAC@Q_eJH_J6pYfc@iN4f4pRfvn>bCUFfm?qamrb(TupEdvD!^J+=A_+t( zi$p_QBZZ>Wk&<20LIm6Rm<>F*qLfKma}Cv+#>QpkyHDU#*kFs&cYJEoqG`m>d3VBm zIL8kl2oEr>W~M033OZ;M@R)($`_ZY{O-xs69FoL1R8YrZzt_XX;LrpRYI4nG(%3kt z_D>jG>}3Z>l)Nal(AGR2$f=v7jRRUsy`bV%1H)iW-7^v|lJlrj19co;BVZW@%jign zCp_eV(ckHFo^~s=n4!ryO~%q}GOgz6w3)sa8T%VXBi_>EFs&D8JVyON8V=KJinh!2 zIAZu~XxET+W1!McX ziTyZRhry7ilxZb`37&YdOURLykYX7b>zFto!80G>49S^I?^9@p8v4|)b(sWgk1$8d zL4r^H;&pfxzyd;uv4k975>y5->?M>3-DQU~(Kx1rT$gpsM6#gi1jI)!N^{++{&AAo z9>>N(TB0;S1s#Jy>aa#=U2I}Uq{R+?!szkKsLv3#jI*ZWfeQm#Sr!rFgeuuH8F(9l z2x;gunC~G&xY>ix9IEs9u_hdM9EdDgB3TeUk3g+jx*6{x{LfOB71TsBXTS}lrLzj#zDoej$&;;6uFNh2<5mgU3c*& zgs8As!$^)y2$S%-c2#pNBLY9pZyFYX`<)y2msn2wUvWeSWVBxeGw#2?Uehor@lq1T zHVmtI!eiWDq*im-#z(HNgaeZJ6pvf>n2`U@J0m}WHxGvjs{Zl{0b&@+dAY9?1fdPH z`;_yvh^(P!k|#dq=EE{dB3Z;3q;ef`P9I_=b_sJiVdA<@9Sd!z0X0uS6o0T;BcB-D z{4wWrh$Qxi^1`XT&yp?{K0Ncqn0uEOstCE1Sp~vw;V05r&9899(^hQE6T-{m!o3i~ZZ%ctA0NX8e!ss*lD*zw!;gKi3 zP9n2k!Lm^LQ;JXsC+fKkr4pgh0N#QrR|gr;*aw3E#_J~7epCmQloMO6arX;MQ#|}ZpyJW)5Hh!u>vYGC3m4UHO z9K8K~feP*0vczkLWrkrOK%0i$!Tr(jB?12Y7AR#3@-nb$)-;Z%N#u(F0R1lGM+#Av z$d=IsfKy^R#sXrnifVO(FAg2ce)0qXW*F|B2=LgLpBPTJh7QISE}gallr)>fI%a6g zK#?ktg>`mL!E%toa_7YWlOZ0wck7jY_>X`FzY8{=0jF6~5m(Y+a3aPk8jVJv&@Ehn zWz^7qrHg|z_%XpX;G_x%dA}zMiWcVa5%0lUUp1q$;kpsARsc3zW;c020m$H|19jzxeP6|g_R{^&FjoWVMK}XVl)#_ z>bn_^tk15XHt6DX9WLREoG@ z$jWHn;8lJr>!X^2)e69{5b&A={h|s=)K57$rOu65Un={_e*_{c*D@>@xt2i@aO%0- zQ&O;O%HgB0kXHQsjzwR1j)40S0{|YGT=}=XG!#PQEtqn6qu~(9!Y|SMXI8)NWbz}y z4Fa;@V~LcTh+Mf-CMHQ+a=#^6xlX}l|2I<>*vQ(U=~uMMoj2v+h$5GxbJemMoPIjj z6xoY`07D>c8kVb|K{Vx%`+-JoIl+#ZDx8~o3Kp?DXa)Zh#)da7v zh+YK9lFD{H4jFXMRwG_HcK9npo>+O$l8r>O#SsO3thXjdl9*-*u=ZU~I(!0T6ugG` z**bTmQ;uBtwuYTmw8U|x^ELvIV$^g3ztR}6yNm0#YSPdL7T#&~&vNZY%4vmwns5xG z*tiz?wAFkzW@eVyA0wcp*9jpsU>DN?^h}js+D9A0>ir)9xh5ZmKp?AO^o%ddIdc*# z8(8^cGoWYnklHXi2LOc0d*r+4Jp%b#gMw+6!4U{nz93CUcBhDF25bLJ5z5e~086^< z^Pv`-CB8!T8+gEi8?5}E%TY{|`>ded(5D=2eMM_vJR8p)Q(()@hq2jy;4MhgEAvrx zZzT+qKLSckJqdkwu~&`>n{vaTJM0m|;-dYBJqH-+KI@7ZCizPcWTR^6b8?+_@$5ST zh668}bUeFZuf5QTllYHe9WY57y`6zMQvCs((!g-iAvuP~)m?Y{j60g!MUziP;9&nk zpww!iY3yGf=3M55A1Vi=JtUZHMtDA^{58p z&m|ksCa#)cbm_2;0DQA*zCxVQK)WW&h#Tc12SX(`|0() zOt#GW&w^_fGVmk>X#eFz2(*j8@}`?8&0(%O@}1FN2q53+qrWl5D|r47R=w=gkDr?j z9$}-6LL*QZvMt-{Mh$wDD?WNuFZE8-;H@}*cDTMc3_Qykp(h~%wRzUcXy7qRBZ?Ox z)&H5Dd9G!L-y#U!D1ETjWC(Qfp6g^9*;LU^CiR?P@qL|tbLVvM3f6x)s=G7_2n_Pw z^ZfrRwPLANKgn~(n@djbw-n95J6VI*FqzE)@VU;$YZZ%hJs<3;g=B+=_ zVH30Bx+Ag~_z>xx5ojW?Ecn2$G!oG@IWi2?Y2cEy*L$LSVl7 zH81PA0Euc4dX&_4fLy1&L13}h4JoelG5W42y-(s&2RdEDXy)n9H&rh5S3F;@`p3+o zJ360upM#X?li6PxaZgz^5g5|H$zEnNivNq==bqxd=s3a?^&l>VQ71Bmv)MM^DEOV&K z<-X`jqc??57Wls2;hRXivY&M=xv#6&Z~pLvEDO{VOTV(;T53s&BlVhpt`prW_eJMv z7wJvDPtANle_Y1bi2josS2*7N5qex;V$yG}#BEb)S61J}qC>KBrBVY@518cA(Ef@&h)~ z%1n$=-fq@Kty}qmcV$0n-tz|+5kgX*AI`|gh(uib!p~17gy^4nPuY)}9(-_&^7e_D z=WQ0qW}tzr^gzPZNnK);Hy^0UJZE3r#@wfST;!Sj%0Knib7Io&+EJ%OCaOQZWxM)r zOx53dianSA;77cqQ5p|G7*?`ic#KnjKLQ=^Mckbv8OXD zU-TmXeg8_lR#^Uvx=KH^SNp5Gnn~aF->>{r`>#vBR#@QLLZ4I}^mx1G92#01c;g4z0( z3c%uMx$*xyj`GKQ50Uq-1Mh7Cm*Ktl-h1!8_Z~uzV0W*wOZ7DSh}=t50-5IOxCXX| zs|4?=fF@J~;YF%oGssD4Lsb!8suC_DA}2ai0tL{4FXSSIl$i~$2uA&2ig`^?$2GuE z2kGUCaTVOCh8NO;RYkZ~F5DS4q+zR2gmo2hF?w#z8 zwmWm&i|bMDQHW{7(eRzS2N(M{2i7MM4MfB*o&#H(CwI$`jj2uxOO51|ktcc;fq$ z#h)BJ*+u@>zuO5Rl0kTh#M8Jydjj1E^eNE4Kz|~?>UxatzeKzS;3XW@1UeH4l=2dA zNNJGHp-#NWyo7feqLh~iP9Qje;sqLm;T{j=1gth0C0;}l`9vu%{j1pIg@3xv3=7`% z5DAHuOg+WnrE?mnV)U%K;?I>|6#=oLkN_Aui%IHIu__R;(gf4bO|uIqi~uaoX`g!V z;?mh*-n}jWd)XWo0xRn@MZyVpG#oGC&V?_Ys+Z6(tNx7gltUgt`f`TiC6q4z_T8>u zOg^E%J{#D+3A;ir+;C1bUGa-(Jt*gEG=_r!fHP!SBoIH#e-Mp36dVXn0r2|FiQ}k# zo08eD1s6rnX$c(FYf;{$0^s9G+p>nqPX=%402}qx$j3%Lr2|O!Im3@kf8)&LH~qJM z8}ZQayGA~=Q12zpQuoFQrpAH9Efi}Z2M&9o0WgAg9;r*<&;j!72o%O z;b$Bix}bdN$?S!Z+7CN#bUab+ot|HgLx>(zSN6~wbU*x#@pl4c^i{1E;bpfA%Nj_G zmxYm1wbr4C4z1C61bOxm5XO#CMOD8}JFNg6TD4{$j1%_OLG#X_V#OK+2Je;1+Y8Os zK_l#aGO1SQP@(C*A(9eXkP)OdAqpaJz`+&=gJIDLTTT=!QV{5ZyQRJw)xjr^ABk4Weu9 z2nFHNIhL|T&Jc`>wp0ksZVGP_NF!cSU31Xb2%3VtK*d7&O38{qlnD1t&h7*nz$ zVWppq-D?D)$P-^IwV6tz(l+eN3r(yPO^3!!2UrLZtQ0YIZa(}+^}F^;ix2LI>$VY4 zTTSEwCpILe?sCl9&soMQh@i&-V1*5^c#y#-pj9O>kChWNJ+|N_Weu9JPUAKJKD#8Fy9{%QK@;O6i9j*A>3W0x}mrRUB( zAaRXT(a0k!$8KrQ9at61n6S?oj?!yqt`v5lQxHce)o#u7Hvmvos>}gmMBxA_`-oWw zi;-Bp9!{DaScn!D7LU=Wtwatif{R?bz=TqHf(uhRK`(DigDyH|;90pMEfT%bR4lVL z)3qEcTWC(vV?t6mEMYY8%n~M|XDUgo&mDD<)QhHlVY^ur9iTD=e$O9&*1%J{9#!Mr z5XCj}JOJnb`koNkA{in6IO=~A06^=>oMFZ!5TAJ%H6ON&Ni@ynz<%g8KWvb=C8Gbv z^grrR9>@@?xhywW!CJi2DX zIYf$qP4MbIG?{xrCUi8n6F!jx96aY5$JK2H8h}eS46O~7U ziwGfRr#~r!&V`qAd0>A2IC*DaX+_XZ&K6)n)nTFLqow!GId-<8 zim6+>*#=+sMWep{w_@ZPpE))~GqwgAGx~oh=gSDE)h@q1ib=p&+@WaOV3noXoC4$7VM#C!8 z|KzEh7kS_utB#A&91~F~f^ydnFqyR!37NPX((B8V&iQ1{CS(NZ_*UaEX*O&zUYx4yw!`EPJ1_+6=Sr1ha;+^$f<;PX zk4eSyZ9)*PJkeuPws56zW$=bcsobrEE3JE&l+0bgGWx>gH32&slkz41ELavRFsWMm zJ-itE{*SlZRJQ1GTWz(~xYGF-N;#wNF?B!NF&bXjhHe5T^}8(NfjXY?AI}EHk`6%Y zNw=-!fn$`O!=&vDCunhZsLfFE5!g@p+#RtsoVg*?{}?7mxh2Bc>Av#?CqTdJ?&Qoj ztLd0%&gSaKpoKuy_m*yna24NV)BiAmw>Zk+7Ytb{RQ)&Z|1NH<_Q$4LEg2{2eS;kq z1k#y{IkD`#44Zp*<>Ey`oQhIYD4Cjz&=SkBIU|Aj9Nd+#!44|g+1sv0r+f&ofwdEn zxx!PsjquR!IVRI?#dRP^!!3EPJck+MMI5=QXqc}T2-w#%!) zOI7*e$D#=;WHZ2N$~b#)A+QZqWR({HU)TC%W`)2xww7Z6E6_fC2&?x_ejfPy>}mE9 zVl`&ZDVTxk-!aTALQCFm2Jl*HJa7;}BD4SMv_1uJ12B)GYPDIi`|5Qv{tozV{8fW4 z5fuDlmR%S>_d5n`@c`}e>>)qlgMkN9o+z9hLtEb1cb5Z>MxX8RT6`11g!y3DGu8e$ zkE$+D%sn<~Ko|g|*^`Fd^`s6UE#Rvik8o<(Gz|_(&uy`!Eu(;^-^PqNq02dK(bL_`0arZ!EZ*&4D2M{U1CRrlVgbU*G#^i<`DFIkYnDk{ zZ>78qme1Ir$XCkVV42kQWskgOGR>#LVq!nPH7f)u17K-y0gNeh+?fJ})3}NPM8h!n z@5Zj!khhx5&=4kT08#)AfEmD%LdTcZO(3neu;@QXq2oRC@TN_Z89~it04{*gW&+U0 z0~n%1L_In>{-g;&7Ijr-1U+N2!wevZ0ub$Ui~7EOQTNRbnK5FJj46tYK}BJV7%;;i G*<2~s|I5k% literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..ceb792309ab10105a26a33c6c90b7145c0f5b395 GIT binary patch literal 50 zcmWIYbaT^UU|&LG=HL1MyZ*l} FI{>iD_d0dH`n0XLtf;W=5B#KCwLA#I{sI zo0%EcKX?Gy%*>c#X6hZ0&!e-%3=hEQG3^70r46xZBT16^bGz_hT)6j7H-t!%WGmUV z`?(JjIKTk@O`!k)0OJ4u|NsC0|NsC0n*i$gzvKUo|2zKg_`l=-j{iIUU+Y2ua0G;5 zm>Wa6CL1Hqm|(3KP12^CL}Sr0Ax6GQIH#D_9r00UhCm8F0YDAV8t|uKYUH;MsSHiA zsj4sP$k8Mli!|~|hehg2&x`^eR{d-V$Ob}&2xX&!7vMj$;7zfjDUD?^0hS-L37VQB z#k$~=v))z3oK{YZ;V5`vRSW=}cyMSkWnBP&oOfjJilG?&1G_c>Y=WwyMexLVM|>(4 z4ZaNzny~6*3qZx_Nya07xmdxaAu<8mrNkSyAwY1%#YTKf28^`kSAA>^h*+kQU3M_C zdqZ^HJGv{w5NV}F_QVb)QfFzEZVw0VZ_>KwPAz-TlhCwuRu#b_w#u0Jgd}5bR*${iF zsQUx@#=sStXHO+ZyIGNGv4)sZOP@Ve^vxpgpC4gwD`~?T8;!MPE$oegBsr3fLssms zs?k~0jexIWi;<`pTm=}!%?ef+jVIgD1{7`cif%@vQCL7)xG!U}pP-Di*wF#|MFk74 zhap7S2n2##My66n7hydUt&Gho#u#A<>J>WpkPRQG=vr9L2;CH2NjNe_BVHR&BJ04y zj@k?G0ki>LfFWQG!~!eDv8h62)f`K1rxj2N5YXfJNR`0f4E4VxR;73$hQuL{UPE zT|C8TanY(KLJQKw`ZojMW+1@3C{AI;lcKsXO&+yQhMRxD4FH-2P%7*RXljBI*<)cQ zA}nIG{R7TJmJJJ&wGDt_DM677R|>G$#6RE#fX)Kw751Z%7bBK5#l|IC_6b}Rri;)0GcXH~wg_g(N8B+pS4)8uz-?DR zK5&wsCIv;C1NE+LL1^QZi$nx~j(q4;9z4RTW|*0QML;MJ5nbs* zz-3;FxgLg|%=v@;2tH+9tS>p7yg!Sbs#v_&^7a2G>`l~nf2MLvRr}Lv>ZcjP2h7aX zQGjKzjflsJCj+$r6t%p>(wwFzz`~FwCa-;Ir6s71KPWc~+WZc8U{iK2D0H9w!mR9g!F#O|sy^olO>~b??5DY=OyhktIL~T<60natI2FxtxSHhae#b&m)*~ z<=69MyCB%L8vrb14cO##IRrg)I-kMO$;sx2ci@Or4%urQ?0~^w2fzY%`6wF<_(@$! z&UeQzbfc@-bfku5hQ|!70C&m=wB{ptT!NoC!gG2EIjS|}NHSD2i~%Qjva0>$vH;2X z@Cc0P3Cj9&GPJv*8F3^TY8e*JY*RIV+*yF6oKnotGXbouo17HGj=WIVu_HCiGyH8} z!v^&%5j8p0A`3ku&{sJLZoluw6Dvn_q-NL!TT3!B95mu2C&f&_&Mr7_BX1{`yo4RS z+Bn!&;0IhVYqzfiJUfFT=Pc}g33h6cp4+s+XR){jsEP)5_5&}pF?d&Y9MSePo2Lub z^IACyEq0U*<;E=RL@M`p2^sfee70hzNiLw1Ev~=7@0(N0{_9 ziDJY)=dTruoTGiHpq7ua_#=A@d`hM?g(sD&5L%yMX5I zjluS~NJATP8VFQv!xne~7|F5=l(3tUofWu=G2=D_Sd%pX2OPR_`0wM!D5MPm`&Y6f zz|xJu5Nx>7R@#Pu7|IBsFFL`oqlcTrv>`w(3mw4?qaf7uB>Rpif=UGt%mj?Op{)=# z3xaz`l)^0%R7wDl$#i!&RE?u%4BRFB7`0f%I0Q`16px=?fE-_OddhBYYt#}nMCY|Tb zT!z5f>8)w5_lWogGNgrku^>`9m42V%Sj3=q1ry*vq zc#=FV!%J^Do>p!R1iUPh9OJ3lDwufL?g93vh}tYPc-az2k{d*gz=xMR%DTrBr^w)C z-8~>mqKTLD2%ZrIXyRoI9KkE1PPdwnL3K5u)Rn}`FYbz`Y84pqvhJA?wI#6evIS5i zcX*2IYg@qKWgEatuJH7YgW_dNKuS)^VtTovxkkFdbA$TOX`s|Z{#v(cS$8CwKgBv) zF{TEu8mS*ptbD2}3&jQijF;Z>Qm9lc)v!M%_yeK5yZsYf?)c>(86?Cirpn+Zv7-xs zP{A*Z(cWtrNM&JWk0qdJnmA#SgIfS9CUDw6g9m2z=iMMCe20LMlOaV?aOK?-F;m0F zw}|fqhd{2@p%ol>HZuVkW*V+w<=1rV=##@kkP6%POK`o2nQ^eEy^8oqP$#FGkO>aG zQgjn$dy*ZW?(r~kybgol)~CCmhP0J}hG)t-U*;|ye4u1_RK6HG3AZcu>dDHQTmyO8+lMbTtdT>;qWl;b$32jz*Z6=R zqTa5Foe>!3d>9zVBapWfz$ym4P}UW&)4in!bJq>zaT8=!lRhMl3ZXZak$e671oHYp zf;sorTg1;F)^qI?DW-uuZ-6Fk+PTjVf-mh@#Pemz|0XDkVaKjEi=jVAww)4O$1XpW z;ev@~w+>GzKG47+!FC-wD#!U+U1y!*~X{M3gCA$gS( z#>ZUIR4kzqO;9?YD_W@mOVs>vEpy@?#&PRXsWzdIHsgk3`VWNX1l5Qy2NYXPxTtIw zYZW=|fUv_62nf@AnJ(%_hT^wS2{+&uS}g2Y!yhKX^?@RLD&||81S;kElZ$#RMzUA; zU?6O#F#e{1vl$|rzL2T3N5RwN-lG6T=NAay3!3;n=d@={!7-`KLlZI`*%41UiMp%F z@o9we+x%?LIS9^vFa!ye{y5kM|I<|2u6Wr)fja*0_`l=-j{iIU@A$vt|BnCHDi8oy%43uO literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..dcd10529da41286719f76cae4a29bfd1cccfaa7d GIT binary patch literal 6858 zcmV;*8a3roNk&G(8UO%SMM6+kP&iDr8UO$5sua+d|3{*33HTQ7iFf%hV zGc!|T%``JJGc)6bGZ1dNuV>|Z&-wrV=iGA**-gq?PE9RGcIFUMDl_AN8JD+0!%(eb zW@dJoLT2dbEM&c|Y-VF;Gqq-lRwpT`bF*EMnVH#M-mNx=%h;J2u2kyS%uFfPgr?Xk zsUtJ{hGs9Mt(y$RX1@bwhIYj4Gx;(@Ib@vlN;M@-XlA>^;i$|*q1mN7kXyQDzXC2* zG?6jofyh)rzW}q{qvh?)bG-Eu%*+(IB{Mr4)f$$}++AkIS!bormJX$fi+{X>k-xlBubUlGpQ=q7XB08|a;p-xpIG zWsI45lkdXJC{~2h#VB8jDkP|WM%47S2U+rUpZHVA^}NlLDrDnLjLnErXGFuL=t3!a z6i1)TfJWnJK91JoXd8~Yanz5a0FLnHODugVEB(;UKllw#^-$MM40+oqk;in&8PLTu zpm%UI4M&~4Tv7s3N?2WGQ+RM~9g)IbHs6UKdCA<7g4j^HRc~l+dpO<|3!+nzz#P{Fd+U zb>&YWQ)d!%0FFM#(H@@Hdq}tf0&P+^*X#Kw+UNVDx#7w2a(SA7kOFr9)paAVeKJl3W?XOaq*)Rs#Oo|FN;&~hmdI$b1T4@A*BuWANVh@%NIufPz=oSr|UQs}O1s!~Zf&c@LWeu2o6)mg6(Pmys=o19yw(5(v6zx(^bI?pBUX+icR(WS~t2(bOZ@pq# zr{1cH(-LvCMBW+Q^p%*Fr7w_52 zyfeOu*_0ji8wP?@HZ=JR60WECB?KjqM~x*)4SCVvO;dF-$7wvj6J=m0e3e-Wv^kHK z;@+w%3t zOH`esV4LR+W|S*bTQCBUq#QZrC&^OjP($2YAryTYDPcMVpIy1JA)4npOHgJFx;Le^XYW zMzwhgwr0BU^nY%mm?yMSg3Ba`L;{Isjcx986Y>eGnmv4Dbic`2n+lUbbyc1rU!(ge zxl9ekhvZ2K+jun+R~_9qU96imFaV;~RaTg zF5PXLSb?cH6|^rG`qCq|CrDIkFr^UJNH{)3^OYISE3PpQfoK`Tj07>m zwy`=KlENrwyzleKNUnJcw)jfpO<_$1rs3u&YpO4jG-*0tn>I;sh_d+ffiF*v>a>8f z$`N}zm^C<58S&uuCpU|-r0keLnp}sXFEQ1KIetMItITAK_Y+t=92JG6WYkwvemoE) z9F8^crJ;5=cQp3rsX7~!TA$BGPx@y!G%MLN^_;b~(P95uPLt21OjR#8H+%!SuK* z(|9FjVC0G!kf}Uo^tb8rXd-B4LyofUtJnQgZanbgszv^0qpVC3#|jgM^YD1dfpoiN zEI7vLbNW6p6(#}?mmVfnn#0frZ;hDcefapUeI1|HSHdw+3l0BhpgX3v>O8sWzCtQu zYRK0r8@}hUW4s$bd~l4^j^cz2eD5pXYsVDcN({xRf)S1c3U{5!W1}ZYhRO(Spwko0U6Vrf!5HZ_qs9kC>U2hD>SPgz-s?Gv4?FzJ5h=B-$ z4Ln|Y%z?ZfmOZV{w8;Z=d5iSt35?tMsnbqeAToUBpPZmcX*vSOM`T01BTPS}ASo5LOkx z{LqI*H(SU>Lw?d1>t@iaplpW0WRfl~uw=GCyA}Oilw`1h*`p!_1@kRGITMG`nD1 z{PG8Z;}7?6rq9tJHU`4PER$idll~tL zfoF*qHG*8d9T?j7Taz%zDHWDkKsuMS<@SG-8bdGqe#wla@p(GwJ;>7ASl|(&WI*rWuQU;0g-Z40Bj82Es*4#z5)o z*l>zv{*dHs+b>@@i(U^tl}3S%gucV>=?5V#Esv(eRH4cCjO3k-OFu3`DMJ z1B#6MONxYJqh1ZBA|nwr0;P>r*^(dL>~Nn%<1hUR#1CKgZDB!e*7M#uts)&1=_E@@ z`Z_*0yiin2CU+)V1=*`eoRD4l6NC$=#>D?9+C|G!gQU)(haD^grW5;lO4wOmuua~XqFt_=k)O|$ZWB9b;snp1#*LUqCXkDkxYU@0Omv@l z*>S(kF!!d19rIo2^m{sGMk2^mVG{ZK`=USAh2sK?lROnxkm;4X-+={??g9B>AMzD+1^o2gR1Q7R~5a+7%euI&( zF|&bb-(Z$OV`NeP$g;B{kUnXPGta#Oxne(Dmm?4(4t2UpCj43^o zV%^D8H>onSi!Gur+uFKvDo!!fop2myOr~vZ=Ha*?k|arjl~a0{p7+KAj77?ffuPUV zV09QdsXkXm)R0CZc7DACO+lIKK#+3{P!s3RikZ|pWY{Law(zZ^hLYIO{ zLb?uQV+VtJDcj}x+#+NnF4|+yXsKz`oM!m5Bs`-Umn z6$mBz^o;qzehwt=)G{tr15W6LkUT9XMCFJyGs-IjvO2K`kc$piWBI2VtT= zgM6j=5%N-OciVSA>$8%3YO|YZqkMNY92t zRVYdlL{Af8nY1|*P$abR(}y7j798p>E*zr9`8+_x909&)m)*lXGz`S(AC*ctHbWTX z%5cc?FPN@3&4^E@r(Hu|=eReC6GBrNEyw)8{2VGz1}Rjy)7Jhjs3)_gWxwa;)>yU? zLT`t{F-3tT=xH~TyHIc3uXN(Tn{vqXxN{)nYtq*BHszMLLoW1RBpP}7|66-lZd8W6%iOnsy1&Lgec~tEQD2=WkBFu0lVy#=3yZ9wKYTxy{{92 zfyDAteg$9Wux)9LvarqS3jzOnnI_LD+Z!S?$Q4l-NGLVzZ7?;K5=MEHg>S1cF`%bj z+cas4uRQl)ATi8+kr;?C(CU63XjGkxF?p1QJr?O4;B|8ONv4nR!kK}+Apwa9j9(r}VVHgsWQ*YLyt-r?T*-+Xo&CMLP8i z`_wV}?fskxGPi_*=xBEGt1npxTv(BjU{X=SKWpi8(6qE?qZ#b6+%Xt!5*5Y8dwMp+0bnkviztz0}o zjE~*_O9P;*-J)#M=C~M`SbaVrDMKswwZ|O?ktC=T_d(FNe0Bg4KGlU*j1@+-3@EeY z0FyYn+4k807zWrb{LF@bpi#uO6?Aeg6HaYt zadK2o>a2+!JY#>FSK23y{67miHS;vu(bp*lo!Jc;0DMUZ32_+6uE;O}m>AV!Xd{3~ zhI=^2S`hwgLX}wxG-uS;vqjqIW$%DasTOH-&B8$5&wdF2l~ojbu^7n6*W_6sJ?#!% z9DFMGxoiPR&zB@|jz`yjqy7@K3zwfDPN?^NBU+2IQUTC(x<#~mbU!EQ^nmbzXd=9N zQe}>StVij@Vd!Zt{{hLA-B*hfe2$X1e%3}65QX%qi-oS3Z_VE%n%v(P|jenvd*sWb*?kE&h!Nn)#FG6KGMR4>&5dLo-GC0M5*E8GuZEczhzzAF9Ro#qoBakD*hw7+{Y74A?)6D?T7q$@^Boip+{Xf4QY45qYRlK= zOt4|e5%eWtAZM(PPOUtnA5ggLSbE(z$i26NQ@A4nonm*;o_B)b|Au(CH+mWhFqT(y2am`)(6cuyjl1dTvq8SmRvW+Kq6tL^*b+!qqZ zzw)Ml@mu3j{rj5#Y;T2tN`ry02oy;dH~1~bm7A~^Ft9iJEEWhST}QUFgBAkqsx-~y z&U4VuLAd|jZkekU0AuzV`}#iRjEf6Tmh2$QMj7Uape6e?GZgx`+5$R(tl#W<5&LSvKE%G-fR^WW&Q-q}C zE!Mc75VCpJ-~F1a1s!p$`F1Dx<*CDxN2IW)e}1_bsK`k-vDyO7A$wPezNF8eb59hP z6ls&aa@J)9#j7$i`5W_+Uv|yeD(0Br6NU9yJV`<`F;ICep5!=Ek&r4fwmjfvCzj~9 zk5vmwBejsVqV7J9J7delDyRbnLNO2*MnwSz%Hv1vnYxZj1M66@jme$%>KD9`ovUm_ zA21MM8&p&w2C6cZ7~NE-EL~eSUUZW-vm4u=BaO&QjHP5AHlm^Z@;7T~p;MAROWNGp z+S7ILVU49^0oEWdIkPwVf-&CTWySjhlp{yY=cE-F`u?u}g3!te&y2W+ip#lXNQ#op zn1t+w`C9FS`8)xR1`D(>nd9Er%w5-XCiRs!9Y#26yKK_MW+P5Vm-w2@As!$ z(VFC==-O`p0a+L*#XxPET;sN*WqdC+L_BJfF;IU;{`qC^m*As1XfP1&8B9$67hs?v zW3f4ld$5e|9(5DPwGac%U$Ca9rG_|C&an+DtLS;dYrOq3ms$Dv9xRi4g(;Gyv?iR| zJMek$&=!zHImh1puIqGW{|?JsX6@o0Ozz3k+7Qk19a$$NMX9^JJc*v>ItK<)?|L); zld;GO#x7vBWyeUC(&`g$=B^vg;fl~HoL3l#u|A#6gj0V9q|P#@rIwL5`UKk55=6Hk ztm->xGpA$iB|o2NZ2R>!CM&~0wGrtzB}+E8cpt4CS;l$Q&5Cp}U04&1NPp-jAKQ1o zt{MZ47&H$1bqg$|Y%@lr-w>DThwX~lXj!JE>3102uV0Kvzi~6)@3vnDd8fJgu2{#2 z^y{Z~-%D?@ik4x0-t3hPO!RxNJJngym)PlUUJd>6DGVf`8UuAh-@7X_6xw)jbLM2R zYV(#UGin+1+OBgtZGU`<8hU~DUs@N;;eK%;2m z$~$Df(28m<&V3Hj3fiZx_BAn(8$wRi)9rRL$335|sy%g^t-}B(yH2z1WGHIS_&@gY zZlCTt9J&3xxH?)N>Cp`cC25wp?mM1d1_Ct7`pe$r&u zI{N!Peoph9-<$ekAdYYys=(&pRkLwmVdVh@)jEY$d{Yn)%zQ6y?O-zMS30K$iSE5G z(&g8(-O4lQ9UbX%uurg#BfrX;H#3drzU*?K#7?(3PDKx=aTiVYe{Us>ZA#{nIuBWDh>h)d-dwBIt|Q?HtfgK|CiPltt)tUw&3T?( zrDdUZGL`5|6xZa1`#O1-7?J+4b8@P^;kJIr&DQJZNHc~_e$MNKts8GSkdUfB@WZ2S zx99ZL5e?qa!#~)~Q@ZW__)*5C&24qg8awZ9gSs2fVkh7TNqV~$8<(GCFNHhFMYA() zuGRnW8N=P*EfMwKF^$e?w-^5h^|##E`h@`*44gRFV<67G!Nnc6{vXtKl7);&e`Hr1 z@6@61?WS?Q?YZba`^+TNUx^Y-OPy^=`U2}RmuksTtt%(Z*4%Zr=c%_n7v0tzHM+8v zYspY(ZQ2}5k|dfoeYn4Vd7STicBPYTbM@QrtIuh-PPPA_{$Ve!f%}=+JCJ6~oLIU3 zoY$GTH+VP<6#C^=9!Olx9|ROv_b>9)uWoc|TMR>fhjpO;j*Vt@Cv@s?Ctcdg7jorW zG$Q@sxAxWY+<$qa7gx_OuTqx_{)3QY4Np?r zh@{@h$!WJT$ts;(?I(HeKe%9*d#QJEwR~&JJo0?vjQI}x{d(FqbUXUP{ZPFvANF33 z;^I=jzKhFI?&YvsuJ=O^cXYRgwx0X72YZykVddj$={$#*ou_S0_lDNKZZi2=H*~LQ z>uKjThqI-tj}^$HJRw=CkE?^_&pA8W6XfjtbCwRSKC)bJOxaRp<>a!GNh6oRpy*r` E0HF{)!2kdN literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..d2f78229499a1f71f449cc9462100646ee8eeeb1 GIT binary patch literal 4190 zcmV-k5TWllosur0r+QQ2ajS5vT|V+UN_W>jE)(jw zR5-jdC#iAQc9Kp4ZQG_>o#G|6ZQHhO+qP}ncE4@gwr!hn^4>+zwrxXh_DdB7fB+oZ zwrz8^o!87{dq1FVr>)txmF#@JdlSGmw9UmMff12l0TQw}B$W1>ozp~OOq!jOWr%Y& zYa$6I&9W@Z3Xlu~q&fjoOZ&sUhhBcIRC&dhN5M|7t1i57z-z*>|ECGT9 zgd56DV#axu_*B9?cb@>Eya^c1^4b)Wl*<1zk0Xs4`2#-An8ydWAry=nP75JGus+LS za zZ6tFkZ`}03fjG$->pNi-b18S!j5C(jCJF%gNeB>K&rze9OWDI_w)!Obl0i>mGGz^# z)oQU-q5OCA6NxDw2O*^3Kef^2<%ZB`Ko%l-hl&TyuP$O~kho_YWKxT)cmry}lDEckC2i zdGgLkE(ysYIyuE9uZ$E}m|`1G1=FYQ!wLI*V*O+?nwl))n<;-PSqI0JLhN!w07kXL zg=6ug=adrL67sZ<{1|7v9PqVRJeSp~)}4~T5rbR1I4?wFDn zpE6aiPwJMDBC_rAl66p$C}4V;RC939$Jw>fE8$36z4a@vB5 z(k@*XaH#8WQZ>(zh+;>g^WG2-hZ9fc<5V*B%F7YOL#AetdX9yo1=F%e;!JuF^-|YL zQ(AALei|`kL2l399f=JB(7EhXFqO$@V9KIuqbV>5NP9e_X_FeZCeH6^UieL8{hSDI z#>bf{q%>_IFdYa@DP7TJ0KNDW_G*DZeONjUlZn>|&&XravK`O5qa`#5*k(%Wi5>&U zB`%>QLn6qllc&;!=(B*Ds*;7Mkp@A3?0Sz62Qwe1<3wT*4SLl}_*Vn5kyEz{qQ%@( zGBdRFSQJqmDLw4_DA4kAF;_%1nTFLw`7n?&%`GVisuu3lNZktWMraB`)~CuI4y1fv z$Q5B?o30}@Y$NS5BPB_l4{rvOzRRTRIIa{% z3Ys*BXd=A>C%l$&$I%jkoKsai7bq>_Nox?fZB?TiL&CiT3!g0i ze59nHbe$6S-@vGvjrlP-Y9uO{4o)qOM&;|Z0q>hoY(`@Mt_MoHBik~9UU-s6E!ZplF;r(`^{3yJk(yy_2F zsJLbnq84^41xeB(YXY74|HrM$kaeuszeh6m8|)q;Omj;fDM=_TnR2528n{vB#|TMtj3w$PaKhSDKJ#NStP3d(Wa9oE zClV1SX_add^ZO_;iJU^4GNB$%KH0ILB3-9hHWt1@r&5DNdeSEJQ?T$YW#)?*C~eyV znFAv+rO)9o>5)H-ccYE#iXIa)aZcms;!uEdjyn`gIFJ#>6Jh%XBW%T` z0^8v%Ocik7K8{_a@P?L zNymP0dd|t*H;ED@DyZnRBcz=Nta+Z9_nxZxc-EPwEfBSi#i!KXOrc%3Z;-i>BOl2O$R|2165K}E%L2Ofo2g$iVmu}99o^`Lj>mtR1jXBo(7!bbb39WJOSt|`!vJ%|#7 zv;@b!#v~mQ0dM=!dQWg(jJvMy1R1z8B%(5pw8&tQBKxSJNK(&~jw87yvGk384pEzB zz>EZoktTu?km)$gR$(zl`YxfXl#J3FEUZ$u9J+F+n%lr4>gVxp7`k#HJ5PbdRGzd$ zSJMW&H?WBGcHFClu8!yb+Q8yAZj?e-QeWqR#fn`igsu=gT*`;8>~fFaO9Ks83Zbiq z1-><~xQ!d-(3NwUSqK)9-i-&1NRYL)wY3DfSDUlLVq~xSk$??vBt55GJfEx-TyhGl zI7Qax=n3yN|NN6%VlwqQ-t?m-7^wt&uq#+trDidpNgrNDf5N?t3X99N)qKDz zx$|IHa4!MMz54uAg(>8M-JkSb0#r>q0u5a4rhw!@bN-{i)P{IC7XwH`U_w3`cpRh| za5h-~sc@L;b$d4oIOppg9#&p-158pMXTo91xg@R?2blM!fQMoTy*ZT}AiAu5e=w+A$(>On0fgD+V4_+R2>aY4 z2MnI9*oJfl!X7b9@G9(KL!CRdIg$bctWBlZ#=L^M<`Tn2pG`I)p)4h%8AySF9;M`t zT#_n_isypif|HzvqI4Y-@WyZ$@S7jUvBXf6rgh@}8Q5?;vY^5?+t7r0J{bHIt9Gk8 zl#Kl*3>zHd`}8g)?@I;b#|lfLqQAXM$+Ot23O=~sRLo*clJ#0&m;y^^Kl$e5@?_a= zv3m?59PoNlHjb1Oiw^|487#T78h7Nuwxmqh``Iy+aF}P4sduC#Bt2|9SfXQopW<8c zR}yUR)fA(87ud*6_h0MJ<+zXDXP^ zvSk>8iWZ(_=2|hLuAG)_?lv-qA%?NyI@?*@j@O)Bc-EYE)+wnYKMnh0w!~prChq6V z<&CGXij#ZF$sziz{~}ebO^`c@{TmLG4vU2K+33>eroE~#bUBqSWAvDCm{OR~bwer> z5C)iCq2(fz*LJ`t0ilPP7~+P;4DncRX?llvRh3>OSl{W0)(VuE6zO1Cr8Ij z#z-Q6q^6xNnE%8Eh>X3&o7cI|LR}_G1CC+lA;1lf8RX8CIbgMU25u5S;BDN>iY7n` z0SY3#_9TS>*UvExZduX4QTx8VB|x#IYiThyJOIW7h)mf;8Ub=Ep10_DvT+#(*M}Yp zKbNM&4r_Y!ZX|thV<4t;Dk{;1gj@oY)^X60f%RC1$K{v=*T<0p-JHsoI@|R>uRR?I ztegO01c-AbC5r$>1gNQfzl))svX*5XiQ||7#~o=|57|bQYj){!>v1V5TV^H)f&ihd zS~`_gM1XPv)K$C5sX(_T$|v;M^wCEj$;PGqWXbyILqHJi3%<@zCG$H^fcn=bvTXI~ zauz_|csc^a6ClH}lrjQTsbRmq__o&8zJKqxF>steJOnFgf6Pn7{YS)i1h_smZQqBY z>s$Zm#=id2R;DxNL15)iZ^G`mzsWxD>&)Eu7UY|Ai}KHFDc$Fn+p>*4t?9R~evX2x=!1)7)Jm`&Gea#FTm_6ObSkCjT1oFIGE;nX?a=D!6S;^%YAlqOU0SD^odjJ3c literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000000000000000000000000000000000000..29a0ef40671e6939862df287dc4acd3092fb791e GIT binary patch literal 50 zcmWIYbaT^UU|l&9!_9!#g-no(;A>$&tMu^HaLf-bu&Q2w> zi!!4mif=!DfB2lod7Q`d@i>3LIabCd3{>m_heHkP}@j z8`a;0MZQ0mooU>HI~3>jehC3SAEsIM`|)It!jw?qv7j{seJhZR&3rerBAQ7_AYX zsoRlS{Drf*;mB-V`j7WAcc=!;Ceg+JfOANKY}`L=>*k>7QT>N*gHSdEwcStGrOovz9Vjl)~0%VJ6&3U zjGgO-=rG#Z6f);*L(Py+>$o*9)5)@V0drG{oMaLK&ooix-`Y4zt|pnvxxK`H#}>Cp z#xkbVy|QLOktFm&^oI=eJs!c(Q7x&yWJS+wAxLXF$kV~+!*{tCZZ_*(huQjeq`GA4 zzim8lt+^Diin+EI6F#}2C;VoXDkMw@orjq+)mC_)sd2E6Os)VZhi5g9wT4x#GqOu(GQur#FBbaGwmzdJsGT!6PEPmu6-?1P{SbV2ca}X(N zUYhA3nG>OrAH(c(B_3tyhEW| z{F`Fk6m>#@6$?V_l$Duc;j-tpn}JP!iv0{FWW>gV$t)+|q2JApJxJM0lUHL(9~bD# zok|V`1@zLU0!SP~^$6jRV3a|!WX9X+g?5Tl_aP#y96fgByjrHkDBY+wl{s)8z zzD1j39KvL%bJM@aiz4GZ{~aSQ7RWX}1n7w)(^(CP6$SM~*4-BxFz4-r>v6k6CT^<4 z5!@Xd`kXv9K_+~sgF1Oul6l~0wlH&b1eg8holljCE3W1T!;Vr*ZK12TCUjCcx2tTW zfr5y7`sm;cf7p_h=?i4Ekm3RT*W5j`abSJ*6D?rK0wUwSB#ex1g<4^7 zC_%uWs5F?u{D)|W`>4U&5)Jc;VknNC3W$P-j|eks$$X|X8HhG1iH6o@-4vuIzMFpO z(5N(yFNa(6iw6!Akdw!jNoIRr(&j5-MI;n_M3YTqLs#n7ITk!Yd%A%4TCz~nbuu-& z9>P74$={mtQ(N#aPjUlXs31kCf(a6t(QaIcFnv~jY)e@}#7*ehET@wA1ek7wD;7nM zqq`RRAm{80sX#OUwD(h3E1S%>`1o%Nk%@|4+CWnSl!j`b$IFM4MEG!daxA`L5f6RT z{m7V=4%)4>^?J2>cL$P>@PmdQ(2{f-NIGMtF@{K0YaB z5Q$pH1;;P=0oQRX1j@4&3LEgF@|i~>)l6UXx2X@qiPvqb@{ZZUTtAS>Xr3Yz$0J8Vdd5Z9Eaz|=jp4eRwb0@iGd zUfTZAWjal1$H=M;dg^Z}o$iqYC;`Um#1nuqHgkmqjlwPTnQ>>}2){)dsHfFiOsSt!+)A+e!NQ-x7b^oc+^b|Z@~ zDaL|7ox+-zwm3;FRr!8nL-CdOHA`cN;dUoT^2t(OQk9?fI)Q&;g?Eta%Y7nm$T5#b zEk(sN_Y~ptRV8Bd>%$kx%85uU4DU1nD%#@GRn&L!%;rVZRP16$!dfhk54av6S~vTg zH*b9T%=k#1h3~Q{TT=5Zrjo`1sIKHq@s!~eLuVPOy;$KYEP0)7z#e2DPCP}oh?iVb z7FYPbP^WNHsKnPoK9~^_XF0VL4laJ?S;ziCL7)nID7^Q!D-`||zC4WhVBx;Ol=AFD zI3@Bt$?!Y6Ah07?K)E4nkv~w^@CqUtu^}O4JG}VujJ_$3RZx@2-^7D4(rDkct@-w_ z9jz9wxmT9Udfa3DW|Ju)z?B77;xBtH&&L#)=C-9#O^jFug!Jfrf3K_F`}!ccj~RKjAb z8MF4kB}>uy&26Z=YgDc|WmnWYqwp$hy*$C{h&x{~iEAx?sYQZ8s4evb^0Ze)S1j(D ze6P1`D_y4D(fS%9%7hD*+x@heonG1e*3r7D`{gxd7E1}KV`w}bP(S7XiabTs(CZ)rmZ>D4FV~Er=SlX>XHF*pW4=3grJWPTA+IdOA?*{7bi{+qn;P?HT zFocAJ@OxtdFQ6Ha5eACsErQLqK|M`-CtnvwOTR%2S;87^=(P=x%sD2h z*yFUQfM^EZ>A6NX>pp`~1G(?h)qbWJG8=JFXJ(`$mnxK^oxsE!ascv{bI#$u8cp{r z#I@@HoAvEPDFdWCae^|T+e~Fam(N(Lviu&ynRo(N0!VnO16EHP|18lC+tGjtSw%Ud z2RL8t;CJDyS~*KPA)6}zhEQ;(+_aLOar!uT4&lrwADKk?cMXLXH@|}d^UAiq`X<&> z9trC`=1j{Qy#Y$sJ&{eb6BGEUtq|mv=rR_PDp_`FjZ5=dPKL?8?@!1GGgG}{A|xux z-m88{V6ATFltiL@JF)8(kA%iIux@S^R0k;;7asqH`9V5sIcLWz&Wcnc0UzTgLXCAR;81chSm>c563`EZI*ocPyzr4Te!MBqMbOOSg!pq zQ-loSrv%z-i8}+?b#jzY8%_J34;HS#K{-E(Ae{MY)92b#?U|&mQjB zL=Zd<{vbn|QTf$iRZv+txoF}3Uw5GZ;|)doC)vuU^{%;3%0`OLFo-t8_2HjSr(})$JVrU}Hw0+DSTa{M@3P}WPW~`2ACHo=%=^MRXGDer?Uk{pT*<3 zQ|ulK-@SnzU+vw;JU>mV37Y%_U6meM_ObAqDDlW*e#t)bgp2DrxnX+8T+4mDTxM5J z9DLB^`cnL8zVX{TCP8iX>=%ZPYFmO#yIC5Bjb@{rRUcOR^7A#TeR?$ZJoT)_sCSg zQF>T=S|u^vU$4efp1GOr@Q{spfUD4CoZLDY=|{*n^BaH5Fq!wfHOiRxj++*PM!K^# zS=&gpYT6<7pQaP7g?oJ_Pz#IqydsS`X)nghM#S4ERk|7n{qxMm{R$(yPfsYl)+ePV zG(1`2f_bi1ptVuaD>91G{mVJEprOJh;7(y z77S&9|AxSsY-VXNXIFrxgJ}0-b;3& zM0>0llphg))s<@92Nk&FUCIA3eMM6+kP&iCHCIA30zrZgLDooS1Et}lt74(dxVHQgkN6gZQ zrHC~eqnJh`W(^5PBODM6qsGI`3_T6s_X)!JPcFaT`#taTz8|at-=?b!>+tLntplcU zaMi(H1`HjhSxFtH4s@6q+F>$xm<`)hJMfjfRH}nBs(2Sp+MyqidIMcGl`SWlU6?tU z7*-ulhdJqutWEFC&{Z8?F+(fN*oIk#@vG`EXRLB(M-%3xs{@nYV1+p`<9b3`b@&a_ zI6P9ouu9Tl!%9_c_AdyIcb?FyvrA2wsoiGpQuT$IIhmSOI2|VAD2%-@?b2CFHR0L0 zUc1B0W=~eJR-q0@3R5dE6VB43&Ti~*%=XkQEvQPB1Zvxkw|R%8Zj;)bZQHi(t(a}4 zb8XvQZQHhOn}71-MbNfwLr(Wopap8@XAUgA@9w>_RP!U5(#bZiU z(U#6Y#RHUY%5hLC8x^oo*;uH2Y}9KkG>C(Sj)g{@%T-?S%YF2leWCS~pmd@sRK-J8 zj8PsGKMrcgMkB^T7je*o9P|MP{lP)AIcPNp?c|`t9Mr@?tsE5Opb!V4D{Jgw3!l2V zBG#VgdxNikwfXiX#z@seMYLE{J;bQkC}u3wWh`_m8$HZMUvtoM4%(|h^N7s=5{;F{ z^_rZ@1~}*xHtKv(VpJZgDk5XP3U}Vd+30)@dc&H74$&A@<}iY6M!<$e3!q}rf&fj+ zm5r3m2+$Uv`6k$j+YR1-0nB|1_me`^KrEh;gZhqz9^;^S9Mnvs;-EkUsUbs(3{6?IHjL{I z9WV0Mr^MX6@a9J2^0Cp)95jt<(Xave$a2|8xdxZ7%*PE^5!T!WW1(Rj^wITV^D=yq zX$2darmy!MFUmj|Q>&?Ax>gY-3sV{cG-6-h$w8~ocn)f-#R!B9x#70oxi7I;NS+`b24Vvi z<=nB*LO@SYI+bbq6glV|1F?aJa9FRHgZ@E#E5h^ysAGc$xL>gl7}4IiDDUbxsD-9C z?8FG3D$w-lUfl}BVpT!6DpM}tpe;0wmq(D&&~%NP7HFe~SgeeSIp`ajUXhd$See?; z^ie&#SnMIVVQk9T98`xlOE4#$@No)gl!1r%M#e&K;ms1f8JEQ);fS$mx-Rx#jv9|0#QQ%>0e#3hC3ii(7$%-znE@w=-kQ>IMB zR-r9l<`=ECF}wKs8}y(VnF>Dl;MgLk;;!(zbd^u4+L!DD$uXRzlvE^Ok&urviNX|1$u^M8-O13N)Qyv-X)<;u zOK-9d2EA!%5Pd>UPLuCpHT z@gkHuS$RaSBJsf)zlzh)!qd{O)7iD@`_~yMaFSL`b>a!rwAeUGh(fYV=VPTzdXeB6 zhh*td5~sTt)8v}*DU(M;036jegStfHUny-In1PHZNqH2eAqORbWK{`eH|?D~0aY`N z76n%AGpR>B0oBslzUk-B#K}s|kq}F3lXHZm)!w!`AChc&ru2RQVj1PfGo077b7Ja| z2nDIx>YX$5d^U;8MnW9P9ryTl8knCtWFVx@n?2Quk!Lb{>g3YAA4Np9&7_efGql?* zkI>?iyxKnqh>#hO;J1>WavG62i-?{)Z62Ds#X}L4Rv`7ve|~nJke7|aT)?sGIbLt+eKEySAP{*6hE&-L5Hz(VIjjY>l^WY?}js&)G%G^V|95-2w;3tZ38#`G7o3@x<5$v-z zM#?m`ZnP-U_{hDmx#d zZJtS&!nY#_%_C8y$|pCyeV)(HJr-VN?w+KTGe+F>{cD=vHnqeMa9Z+ zv(;S?Y=iN{uqbn2{YrcyMa(BrB&&|u{9GW7@XEhR9=;w4N|1fiTC+bXWOu`pCatu% z-BS{YHM3ad9CsRQD~XaY_00_>WNK!^Bq|-)BPj;khZ0U^>sE6X3zs-!7tvDOp$8kR zVugT67U?gz=(7F&J1ZAbsPUtx3}kSE5>pTmYo!9)rfXHpVH|~vPSue5=Z*kB8|u}d z=?yfwmH;Yf5m|lOJ2kmR1B28kb%Wz0`5CMSIXoZFJQMDQd%dxy{`8KPpi-iljSS^N z!V=Q8lBSvX1@!Zm1{Xr$nOc`v;Ff=l%)P`+^^_-E@CZC%R)H^yWs#=PELs4DbS-Im z{SaE8<=A<@N93b5h$h+kVK7QwO&fEcS5D0Ifm?b~ z)jJ;6-7vV}U3lgkb1PjLX11imbBBTknL(?2CqqXtkCkUH!5``tCs7#;KriG~6!_PH zF9|ida;9z~CwSEJE}+I1N_@Y zc|x0qpy1Wm%1PfIsHE2xE!kTZn>N7TG9n;Gk?=oU)^C`N04?v%OjwrJ{I>9i=C`pF z5J@X(Xb}YPA{>~dM`DwEoOpR=BOpO<)3_ebD9OqoJzd>76cKU^2g@3p-#&a=HAjyD zM1Oh^+871b9VmxU(h7C`{Zr|Q>sT%VBGWb-tw9??kfD7VTM@y9I^KB~!n?7EkrrRF zP()~T&+Hf`DV@4ma5!IQJ9Nhrg@bIl7TE^f4(GYsR}(z6{K%)p9n;0F`QNsWOhDC? zptPFXO3ZXha+y9-L>gU|nJF#b@&rCkzj}nQp-){}+=(|SV5omy76bFms8KLdlqW2f zE5liJI@%+`U4Fs`aGrjCpG^>9r@XYVeMn^!Z6BR4*a5?=DRo2U`E+(cQ8&~1EkZjm zMjWHXWC*8pcs@TvQJc7jczGBx3{yQ~I8Cf!W_(U)#DIZvWFI1WitpSn_snqcY4oPrlA@NzRsr#G-YXQ7 z#>uv@!R69CaoDuOus#Y|lSL%X=qUh)9jW> zSr>*!I}UtoD1hplN4#7ZUWN0;yA%|zTHANv0uz_3>-C*Z4*hD0#EC>eRQzK7zK=GA zAXfUJ@M&a8zJ?*D^$|Xr3~fIQK%+*_vH{HV8K5;N=LoIs2Ol5Yxg4mKGkJ~r!L5z8 z00+uOa1n!m=yYw)qG4uA-W-CCFV12KlC~w+Np#LFf=JVx##aTvC?R1$>ghcY_Zlzf zKut{B%E*DP(g|TKRtCmBOOIQi&dc7U)2j!9c|IG4Aenno|J*~6+Giz6`G8m>V7Z-b z-9QF1fx=fPy94thQn_IGP>;If(A87X_SuKM0QH*VbDCN^5X}9_5an%r%MC%CC zB{sD#0KNc7FkT=CqInhzlPYUJqepw+{ujWswq7Ix;&YGt3Mw*wetgLc1d|sf_@>m* zZnFuZ=JkPynHGOap?LKG5&*02@LV8R&2$i~DCa0KQvI&EJs{m(6z<@bXWD->hZclj zM8AP~gY4DzOpMfxnS&xq`)6i(fRFuuoIxwtP5_LVm&b>op@oy8HZX?=B(j7oJy}PD@M&S& zI1@&WO%HE|XB)DEa6WTF6h+PKMTEMdqsr@qt^7Vco^|ZJ%9iE%cZ%((GC#d$h_j@1E;P4!bzR3f0 z_u}09{~lS}$I|-#oM%IeL(1`BJre2t%Vg?KF^NQp&*2YlF#%LUQC@^;aVG;BVHGur zkpk%YKK@m3ro4(U_s67bVFz4q;_`HKF(sfLmP0xp2r4QGh+k-97Z;W3{4&UMtU6(A zbx;!621C)eq$o=8_Fc2>&!*}5{S0O~1Dj3{Z>F)8Q-Y#=$q~|qa+v#0R7$%iaHgn+ z7t{Ugg!RfO!3^n=uJ7Sb2?|aLhLm*^NIe1x zMLDm0<<1mEJ>CcNu9n#bXzK`C6y?dr$*Km16m=R0Ffanlj0lK}9IGFj(FB3yJs*)EJLNM? ztwVks2BhJopIkZ;V-YFU5jbp;?p!1KEsL2-b7~T0~h8?*@cF1U|;9 zfy79KAk%yU3@Pih4Ps)vS-(7S01yziLbK6g4CF9cAlN}ycZT9Z!nw`gHM=GJq2=9_ z1TtzAL?4y2NFYdAr*!}Wkh`m$*C5d3y?TMkh!<^iz8%9!`%4>J$v1Bh9F zf+&Z!YKV~JwHkx}G)l8uEpcFm_tAq*I|RW}>YsOr|8~Ma#s@W(O=dJxH3`JPew0U?2FgU|`ogUwu zMwg8<-`-XWe4I2*tO-N8VLkCF4Mi0H%CjJdbu&qY{oOq`Kr`?~v0#G#)JchN3j~?E zQn%Pp0xqq_R&o;Q+hCaLF;eMPiv?1InQSKz`<8hZ+u8YTwP3nBDq6FXYl;;Ks~}kZ zCsP8iPw=ZqQ|o!CmE6p1WPFC>7Ysh7H%FeJK7@##P&21kSRZD9t3x+MTriL z7Crd;_B>O>OtTyT`I^lw7X`!&0U0?*{Rcs`q$5fg#{J;#NTj*PiI!-Vwb}Ln$UK`{ zE}?w30bkG+@qf{X5+Mw1eDKLJOvFgPl|N)p8HlF0OGH3=`VP<2Qe47%9#KM{yd%Lq zH<)!qe;?+x0HW8`bx8Y#&iV53dg1D-TKKbZrdn=83|cUX-i{q@#-x z5Re)>!+Eq5?z!0@rjID0oBO9a?zvg22BE>sUBC8rPe}yR;vw+}ND1R?urlQ+ZHh<# z`j04~ql>c$+;hu>Wsddy-bpUa?U4Y)D)3gZ2uSYoo=%E{&G-}h{`H6wZnz}wu|eD% zJKH#>O0Bi^;;dw1K&mDdh(0EI>e!QKNIj zScyT*_uL5q*%`aMPfv?SAK#8Bq1}^%OO`%H3HE)>2e$y@(Aav(2*^rY?hd+^Ar8U5 zKca+AuAIvN!=i*Lr)^;fXHV;I$N>eo@RT1p(1{#IixXa8aNS3gF!#r&EKVeyq(W<- zx-KgJ2c9x8Ut2inLlugIO}K&m{e46UM<&5p^-IUjvZI3w`W3doL9anou?R@1nq$b{ zxPgP1Jbd4lYiT*xJ`;?bwY2!oAf^Y;^W39GnuUO3m->~(>4CA*X>hqT%j9*Q#&v|Y zd-zG+;?vm534HXt^qTtkdV=eoS^Co(j2frKU{E2yCz!lTn_xZDl@IOgEMnN z{6UVDw9Uagw2zhEj<%2LZ;hD=4*U@x64DV+n6b-`bVV?)KO0}Db9UzS;=CzCNJT?f zk5B3Fg@CGOK{%1u7Cxl^s}%YXPZhrY`^DBvmBn z^xBZm2@T^hJ77qVBzDFGQVZ!!b`2~FaMo;tL=0~>0@_<26xW02u&;N4O!HV7?v;R( zN)EdO+4xn+kj?{J@z10GHIRBp|84@$G_0Jmo)A`^H$Pr`PZ=(HI@hGz>jy*RC+)=< z{_B=W#+y_Ix0)T0_9vr5I?XCc=4CDc=g1~*b_ct@WrA)4OQh@Q;Uc!O@GC7z9|5Il zn*GXvC#P>qg9}3P-wA}a8^viD(sUUitj;5nOILRfcr4A_%P7H3sig0RE7<}a;}6Z| zvO>0YqzE?@1Hbqy+wsLi?uGjKJ=Gb8#M1rC@hTiLdBn5FSu~SW(!YTRv>RP6#|%5h zP1>NUG~JeVsm?ZNtrK{7#G4@VXS?s;Q;s23+4|Gz)k7vz{5{TzQ`DrkG`U`H-3C;o zW3oaF5s=u>VtFR<3%yoM1ITM{g*>Ji)ND{M$)(e)GaGr#_}UOrvzE7JXYEP?^#O6&FNT> z2TnH+I9E2$7-F(-j+A;tG*QV+OcHavI3Fs*yv^B>MTxScwDNJ|jV)!e(dOrB`SV72<^E37nxqieGd3E}MC z@A&_SG4Z@!ob>Hs_$#Bx@zd<)nT-(6fsf8i;4POVK~bS#y6&n}|2#!%JkgNBn!D0Q zK$k@2CNF|T3xL0r(UPXY1w-gh^A1PC@LdbKs$~q3xjIeB?#hsI+ zd?a9hu{hba^!VDGV+(JJ9iEr&dB+-e~B=Zsh~1 zYlnbNks`d5ZGc+$$ADEmUT&VF!G)O^XjwsvJ0_Ivd}Ucipk%b*Vce#z!xK;~(*XYq zN+V0>C8sKj_g+b@Boz#1;oWToRMWmZ0ur#93Axq$$;hwdjiWMAg~jE5MS}Z*&HS$2 zJea1}k5BGAVjZ*d>J$5spJq19|NiH{Tn;0Es=k=@&Fk5;zW-d056;L5%_ClTK-Fn& z-^}azg!P=A;Qn&Dq{6JD1h=XlDYcdSN-I#q_=z1MC{C3dwlDnn@rt=4{p6bMZJpn<|r;~hFNn6Hx{K3kQG2x*%Ji&;o>w+niTnLRg_d| zftYDE&+~0vw0GQygr&CU z9OW}aM$OVkq=gB_3 zo8Lj{qBhJN(oAK1$mooK?!$TRnXQyI6$!Oiyu1u#v{xVEt;+yxWSL6oKaCf*&Il+E zALfg+ttgX1hQd!R!$hSCZQqXtw^*03()nhDvJu-qsyV)CAp}&85oc2Rc9coM`xE}` z$!iGf*-QjfaaT-tY(^4IW^32=A*<8;8d&iA#7MPhQ9_@xoO`yF*DW8`WZs&eanbp?d|%` zT~P3*>>SnXJpne76WF^rn)p%ByOb{Wox`!!voFFxRvzlaSJ*@j`eGX_4MW5#}}$% zGku)wgtX~<*Mfc&l$&s?9$NWbEKR&~buTE#`c)w;_iWs}8mImYLt(KR+RPdysiyw^ z?Iq)aCu3sCQ~6%jZfWOTTvsn_<;J~y+I7(q+qQEhflx(Z$&s?22qEp5*Nfe3Jo$~; zS*{(g@-dlGLI{B7YDaZPiE$w`xM+s^M8f7R9)^hO+GK^cZTi$i!*6&+R)fTHb zx|lg|t3VXBn%W5H@Q*d*Sid@?_1=t~Rl^KQq+msXw{lSMEu$vZFtE|yb)9eiBHA_8 zuvZm~Vy|Xxj({?6T;(;?gX-L+ks@08R(q*nDA3jl@{=Sg&4_-j4ytoksMmNMTXSnQ zdrTFO;^|(heAWEk#dRxgT(`*Y6~sO!0!fra4DnLcgLer(Dxvh6`-HRK`v3`$1&Gu@Pg!Uw_p`49W054**h<}R|*`EIN z_J$nm_cAX2eYWN`T{JE9AS&Ol>tJtGzN*Q#P-ELi?!=*7{TMT&`mHQNDitV;L@HG# zN!voSl^Pvtn&y?f zuyrZ!P3%{x%dvj#62kd3Jyu3d$!pn5Eh%c?ckarQP8c)2rm!B(c=3|z>o0zvmCS3R zRtMgmpc)a7l-II~trxbgYg@m%Yqwf=`H(LC8a1HlMs+q z)uc$Z;=Vb*THVzL_x11T{q7vvwZ9_ARX5dM%QSFK`;fKJ}TR7~=e>aMP>?7b6%@%Hdg&ixTFtPOES zSX*l6&$kS3Vk+z5sOB2#o%4n~%>agbeHf4afBsnM9ozeaQ}3m;6J42uf*Mj(6?r5@ zrJ+%orj5#F>En6cDo$3%B1N=eSdaei-(YV9eXwil)p$c)QOie7R4reAZA)u#Pq;d6 zYIzZmQ^wAATh%67oNu{bZLIEEvR>6Uq_dlMaqr*uXh@rV8P2zH8b>_hBj((1)9Mu}1B0@FYDwY}wp6OUO?V~o@eM2cwL=f2YFJH2t29NiVVsvGZO zaT6_LTefy(9P_HVfqKH$ad0<7KoS~mjv5M0F^MnPUt_GU?&^Al0hHdrR`%YBL9}*V zAG|#_kkQ@@ZFk>4^2kBWixAez3y&P%w&KPfncmK* ziESG_x(yM+Te0u3p8Xfv{=WONK6rb4&Z`Tc^afp_tE;-Y@rO?`MIqE;j>a3AxjXRo zgs`KB2}eMhzGWG^N=2T)3tRUoym3^0)Gq1~{ncnFs*+de?1TFTHnil8Zf?s>Y<=&Y z*5<)GqwN!S)^Tm@xZTfch0a%4($$q4dpo=MsAWyD`6nn+$*zp0eql_!9&b-54OVEl z4%cAqSXCQ!ZL3fet+kI*x8<4ZA3?=Vk42@@j>)h5EFs zI$CorI%vEV&?2niT!W^O3j)%u9d*sCm{hXOx2-2AG{4PHKG8(Qi+>cV;>9PLX!6a^ zuh0{0E1zv8lPc!Aj@Efyj5JXTC|(p8ED#W5rfH;BxV*ljWmR+SDt0FME7{uG7D0t( zs+8Zvu8OvKRZB@android:color/system_accent2_500 @android:color/system_neutral1_0 @android:color/system_neutral1_1000 - #ffc000 From 71d56876ed1428b4caa5541f48a0d2d1e62ebf25 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 11 Jan 2026 19:17:44 +0200 Subject: [PATCH 198/214] New Crowdin updates (#125) * New translations strings.xml (Italian) * New translations strings.xml (Russian) * New translations strings.xml (Turkish) * New translations strings.xml (Polish) * New translations strings.xml (Polish) * New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 4 ++-- app/src/main/res/values-it-rIT/strings.xml | 4 ++-- app/src/main/res/values-pl-rPL/strings.xml | 4 ++-- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- app/src/main/res/values-tr-rTR/strings.xml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 99fa1d80..9ced4fa7 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -88,6 +88,6 @@ إظهار تنبيه Danmaku كما هو معروف باِسم تعليقات سريعة عندما تكون اللعبة نشطة - Call overlay - Show minimal call overlay to answer/reject calls + عرض المكالمة + إظهار الحد الأدنى من تراكب المكالمات للإجابة / رفض المكالمات diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index a6e99001..7a106c0f 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -88,6 +88,6 @@ Mostra la notifica come Danmaku, ovvero i commenti sui proiettili, mentre il gioco è attivo GameSpace è in esecuzione - Call overlay - Show minimal call overlay to answer/reject calls + Overlay chiamata + Mostra la sovrapposizione minima delle chiamate per rispondere/rifiutare le chiamate diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index e2601b3c..7d24214f 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -88,6 +88,6 @@ Wyświetlaj powiadomienie jako Danmaku w postaci wypunktowanych komentarzy, gdy gra jest aktywna Przestrzeń gier jest uruchomiona - Call overlay - Show minimal call overlay to answer/reject calls + Nakładka połączenia + Pokazuj minimalną nakładkę podczas odbierania/odrzucania połączeń telefonicznych diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 5132faa7..d6e52716 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -88,6 +88,6 @@ Показывать уведомление в виде прозрачных комментариев, пока игра активна Игровое пространство запущено - Call overlay - Show minimal call overlay to answer/reject calls + Оверлей вызова + Показывать компактный оверлей вызова для ответа или отклонения diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 8f62f6b4..416c2234 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -88,6 +88,6 @@ Oyun aktifken danmaku bullet yorumları olarak bildirim göster Oyun Alanı çalışıyor - Call overlay - Show minimal call overlay to answer/reject calls + Arama penceresi + Aramaları yanıtlamak veya reddetmek için minimal arama arayüzünü göster From 331c9f9b09a79e7379b5926784fc362fab148884 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 21 Jan 2026 19:44:58 +0200 Subject: [PATCH 199/214] New Crowdin updates (#128) * New translations strings.xml (Ukrainian) * New translations strings.xml (Indonesian) --- app/src/main/res/values-in-rID/strings.xml | 4 ++-- app/src/main/res/values-uk-rUA/strings.xml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index ece86d57..b13a9d3a 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -88,6 +88,6 @@ Tampilkan notifikasi sebagai danmaku alias komentar bullet saat permainan aktif Game Space sedang berjalan - Call overlay - Show minimal call overlay to answer/reject calls + Overlay panggilan + Tampilkan overlay panggilan minimal untuk menjawab/menolak panggilan diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 8988acf2..ed21ea7c 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -86,8 +86,8 @@ Режим сповіщень Danmaku Показувати сповіщення як Danmaku aka bullet коментарями під час гри активними - Game Space is running + Game Space активний - Call overlay - Show minimal call overlay to answer/reject calls + Накладання викликів + Показувати мінімальне накладення для відповіді/відхилення викликів From 4fdf72d0ccd15cc763d801b413b807cff10e3612 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sat, 31 Jan 2026 20:39:46 +0100 Subject: [PATCH 200/214] New Crowdin updates (#129) * New translations strings.xml (Hungarian) * New translations strings.xml (Vietnamese) --- app/src/main/res/values-hu-rHU/strings.xml | 4 ++-- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 58f95f9a..9112672f 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -88,6 +88,6 @@ Értesítések danmakuként mutatása, avagy kommentek kilövése játék mód közben A Játéktér fut - Call overlay - Show minimal call overlay to answer/reject calls + Hívás átfedés + Minimális hívásfelületet jelenít meg a hívások fogadásához/elutasításához diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 01a413fb..a5afb6cc 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -89,5 +89,5 @@ Không gian trò chơi đang chạy Call overlay - Show minimal call overlay to answer/reject calls + Hiển thị lớp phủ tối giản để trả lời/từ chối cuộc gọi From ba395391a2d76692a6e6791688cf1ddbc1de04a7 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 8 Feb 2026 18:47:32 +0200 Subject: [PATCH 201/214] New translations (#130) --- app/src/main/res/values-cs-rCZ/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index e1c61115..96c66d42 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -88,6 +88,6 @@ Zobrazit oznámení jako odrážku pro danmaku akci, pokud je hra aktivní Herní prostředí běží - Call overlay - Show minimal call overlay to answer/reject calls + Překrytí hovoru + Zobrazit minimální překrytí hovorů pro odpověď/odmítnutí hovorů From 1c0bfdd4d5aa3a8b23773424fe22ad681756cce7 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 15 Feb 2026 22:50:44 +0200 Subject: [PATCH 202/214] New Crowdin updates (#131) * New translations strings.xml (German) * New translations strings.xml (Vietnamese) --- app/src/main/res/values-de-rDE/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index dcb8850f..9f15f334 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -88,6 +88,6 @@ Bei aktivem Spiel Benachrichtigungen als „Bullet-Kommentare“ aka „Danmaku“ anzeigen Spielmodus läuft - Call overlay + Zeige Overlay Show minimal call overlay to answer/reject calls diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index a5afb6cc..701c9bf2 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -88,6 +88,6 @@ Hiển thị thông báo hiện đại hay còn gọi là nhận xét về dấu đầu dòng khi trò chơi đang hoạt động Không gian trò chơi đang chạy - Call overlay + Lớp phủ cuộc gọi Hiển thị lớp phủ tối giản để trả lời/từ chối cuộc gọi From e8f014d4713366cb81323118be970a7ba70ad1e7 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 4 Mar 2026 15:40:54 +0200 Subject: [PATCH 203/214] New translations (#132) --- app/src/main/res/values-es-rES/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 0aea709c..766ce268 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -89,6 +89,6 @@ Mantén presionado para establecer Mostrar notificación diseño circular mientras el juego está activo El espacio del juego se está ejecutando - Call overlay - Show minimal call overlay to answer/reject calls + Llamada en ventana flotante + Usar ventana flotante compacta para responder o rechazar llamadas From c80114af63a1fd8cd7ed1f3e26c3403599f709a4 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 15 Mar 2026 18:40:36 +0200 Subject: [PATCH 204/214] New Crowdin updates (#133) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Russian) --- app/src/main/res/values-pt-rBR/strings.xml | 4 ++-- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fe2644e2..77904fb2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -88,6 +88,6 @@ Mostrar notificações como balões de comentários durante o jogo Espaço de jogo em execução - Call overlay - Show minimal call overlay to answer/reject calls + Sobreposição de chamada + Mostrar sobreposição de chamada mínima para atender/rejeitar chamadas diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index d6e52716..2ee3ae7b 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -88,6 +88,6 @@ Показывать уведомление в виде прозрачных комментариев, пока игра активна Игровое пространство запущено - Оверлей вызова - Показывать компактный оверлей вызова для ответа или отклонения + Уведомление о вызове + Показывать минимальное уведомление о звонке для ответа/отклонения вызова From baa4538e8988ffd521ba9fd4ef26faa777cbb6e3 Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Wed, 18 Mar 2026 19:13:39 +0200 Subject: [PATCH 205/214] New translations (#135) --- app/src/main/res/values-fr-rFR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 68f5735a..ffcba24c 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -88,6 +88,6 @@ Afficher une notification en tant que danmaku (les commentaires flottants) lorsque le jeu est actif Espace de Jeux en cours de fonctionnement - Call overlay - Show minimal call overlay to answer/reject calls + Superposition d\'appels + Afficher la surcouche d\'appel minimale pour répondre/rejeter les appels From 67033011dd211ea62644023fc4765598ea15d49b Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Fri, 27 Mar 2026 21:09:26 +0530 Subject: [PATCH 206/214] GameSpace: Fix NPE in CallListener Fixes: https://github.com/crdroidandroid/issue_tracker/issues/953 Signed-off-by: Pranav Vashi --- .../java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt index 5595751a..5192ae98 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt @@ -86,9 +86,9 @@ class CallListener @Inject constructor( private var isOverlayShowing = false private val phoneStateListener = object: PhoneStateListener() { - override fun onCallStateChanged(state: Int, incomingNumber: String) { + override fun onCallStateChanged(state: Int, incomingNumber: String?) { if (state == TelephonyManager.CALL_STATE_RINGING && callOverlayEnabled) { - showRingerOverlay(incomingNumber) + showRingerOverlay(incomingNumber ?: "") } } } From 8bd1d775dc60ed083106fb0d78e3a7799043d98b Mon Sep 17 00:00:00 2001 From: ChrisCatto Date: Sun, 22 Feb 2026 15:16:47 +0000 Subject: [PATCH 207/214] Revert "GameSpace: adjust panel position on screen based on available space" This reverts commit 46423073d13377917f873eb58b96080d61821e99. Signed-off-by: Pranav Vashi --- .../gamespace/widget/PanelView.kt | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index 67a0656f..baa87418 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -23,7 +23,6 @@ import android.view.animation.DecelerateInterpolator import android.view.View import android.view.ViewGroup import android.view.WindowInsets -import android.view.WindowManager import android.widget.LinearLayout import androidx.core.view.doOnLayout import io.chaldeaprjkt.gamespace.R @@ -44,27 +43,16 @@ class PanelView @JvmOverloads constructor( } fun updateTranslationY() { - doOnLayout { - val wm = context.getSystemService(Context. WINDOW_SERVICE) as WindowManager - val screenHeight = wm.maximumWindowMetrics.bounds.height() - val panelHeight = measuredHeight - - val targetMargin = appSettings.y - val params = layoutParams as ViewGroup.MarginLayoutParams - - // Ensure the panel doesn't go off-screen - val maxMargin = screenHeight - panelHeight - 16.dp - val adjustedMargin = targetMargin.coerceIn(0, maxMargin) - - val animator = ValueAnimator.ofInt(params.topMargin, adjustedMargin) - animator.duration = 300L - animator.interpolator = DecelerateInterpolator() - animator.addUpdateListener { valueAnimator -> - params.topMargin = valueAnimator.animatedValue as Int - layoutParams = params - } - animator.start() + val targetMargin = appSettings.y + val params = layoutParams as ViewGroup.MarginLayoutParams + val animator = ValueAnimator.ofInt(params.topMargin, targetMargin) + animator.duration = 300L + animator.interpolator = DecelerateInterpolator() + animator.addUpdateListener { valueAnimator -> + params.topMargin = valueAnimator.animatedValue as Int + layoutParams = params } + animator.start() } override fun onAttachedToWindow() { From cf8ab36dbdd7ec6608596fe35ab81723a52e2d42 Mon Sep 17 00:00:00 2001 From: priiii08918 Date: Sun, 14 Sep 2025 16:44:04 +0000 Subject: [PATCH 208/214] GameSpace: Fix panel layout issues Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 1 + .../gamespace/widget/PanelView.kt | 39 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 7c147273..3198b8b6 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -349,6 +349,7 @@ class GameBarService : Hilt_GameBarService() { rootPanelView.gravity = Gravity.END rootPanelView.setPaddingRelative(16, 16, barWidth, 16) } + panelView.relativeY = barView.locationOnScreen.last() - barView.height } private fun takeShot() { diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt index baa87418..8032840b 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/PanelView.kt @@ -15,48 +15,47 @@ */ package io.chaldeaprjkt.gamespace.widget -import android.animation.ValueAnimator import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater -import android.view.animation.DecelerateInterpolator import android.view.View -import android.view.ViewGroup import android.view.WindowInsets import android.widget.LinearLayout import androidx.core.view.doOnLayout import io.chaldeaprjkt.gamespace.R -import io.chaldeaprjkt.gamespace.utils.di.ServiceViewEntryPoint import io.chaldeaprjkt.gamespace.utils.dp -import io.chaldeaprjkt.gamespace.utils.entryPointOf class PanelView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { - private val appSettings by lazy { context.entryPointOf().appSettings() } + private var defaultY: Float? = null + var relativeY = 0 init { LayoutInflater.from(context).inflate(R.layout.panel_view, this, true) isClickable = true isFocusable = true } - - fun updateTranslationY() { - val targetMargin = appSettings.y - val params = layoutParams as ViewGroup.MarginLayoutParams - val animator = ValueAnimator.ofInt(params.topMargin, targetMargin) - animator.duration = 300L - animator.interpolator = DecelerateInterpolator() - animator.addUpdateListener { valueAnimator -> - params.topMargin = valueAnimator.animatedValue as Int - layoutParams = params - } - animator.start() - } override fun onAttachedToWindow() { super.onAttachedToWindow() - updateTranslationY() + applyRelativeLocation() + } + + private fun applyRelativeLocation() { + doOnLayout { + if (defaultY == null) + defaultY = y + + val safeArea = rootWindowInsets.getInsets(WindowInsets.Type.systemBars()) + val minY = safeArea.top + 16.dp + val maxY = safeArea.top + (parent as View).height - safeArea.bottom - height - 16.dp + if (minY > maxY) { + y = relativeY.coerceIn(maxY, minY).toFloat() + } else { + y = relativeY.coerceIn(minY, maxY).toFloat() + } + } } } From d86ad590f44e56a0dde32216fa6e63829b4c1731 Mon Sep 17 00:00:00 2001 From: NurKeinNeid Date: Wed, 29 Jan 2025 01:10:51 +0100 Subject: [PATCH 209/214] GameSpace: Add game optimization settings Introduce new game optimization preferences to enhance gaming experience: - Launch Boost for faster game startup - Smart Memory Management - Loading Priority selection - Cache Management toggle Change-Id: I796619efc5de9e35d91af63342282f0708c6497f Signed-off-by: NurKeinNeid Signed-off-by: Pranav Vashi --- .../gamespace/data/GameOptimizationManager.kt | 121 ++++++++++++++++++ .../gamespace/gamebar/GameBarService.kt | 8 ++ .../gamespace/settings/SettingsFragment.kt | 53 +++++++- app/src/main/res/values/strings.xml | 23 ++++ app/src/main/res/xml/root_preferences.xml | 32 +++++ 5 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/io/chaldeaprjkt/gamespace/data/GameOptimizationManager.kt diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameOptimizationManager.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameOptimizationManager.kt new file mode 100644 index 00000000..e7820c17 --- /dev/null +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/data/GameOptimizationManager.kt @@ -0,0 +1,121 @@ +/* + * SPDX-FileCopyrightText: 2025 DerpFest AOSP + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.chaldeaprjkt.gamespace.data + +import android.app.ActivityManager +import android.content.Context +import android.content.ComponentCallbacks2 +import android.content.SharedPreferences +import android.os.Process +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class GameOptimizationManager @Inject constructor( + @ApplicationContext private val context: Context +) { + private val prefs: SharedPreferences = context.getSharedPreferences( + "game_optimization_settings", + Context.MODE_PRIVATE + ) + + private val activityManager: ActivityManager = context.getSystemService(ActivityManager::class.java) + + var isLaunchBoostEnabled: Boolean + get() = prefs.getBoolean(KEY_LAUNCH_BOOST, true) + set(value) = prefs.edit().putBoolean(KEY_LAUNCH_BOOST, value).apply() + + var isMemoryManagementEnabled: Boolean + get() = prefs.getBoolean(KEY_MEMORY_MANAGEMENT, false) + set(value) = prefs.edit().putBoolean(KEY_MEMORY_MANAGEMENT, value).apply() + + var loadPriority: String + get() = prefs.getString(KEY_LOAD_PRIORITY, "balanced") ?: "balanced" + set(value) = prefs.edit().putString(KEY_LOAD_PRIORITY, value).apply() + + var isCacheManagementEnabled: Boolean + get() = prefs.getBoolean(KEY_CACHE_MANAGEMENT, true) + set(value) = prefs.edit().putBoolean(KEY_CACHE_MANAGEMENT, value).apply() + + fun optimizeGameLaunch(packageName: String) { + if (isLaunchBoostEnabled) { + // Set process priority to foreground + Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND) + } + + if (isMemoryManagementEnabled) { + clearBackgroundProcesses() + } + + when (loadPriority) { + "performance" -> { + Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_DISPLAY) + trimMemory(ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW) + } + "powersave" -> { + Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) + trimMemory(ComponentCallbacks2.TRIM_MEMORY_COMPLETE) + } + else -> { + Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT) + trimMemory(ComponentCallbacks2.TRIM_MEMORY_MODERATE) + } + } + + if (isCacheManagementEnabled) { + optimizeGameCache(packageName) + } + } + + private fun trimMemory(level: Int) { + try { + val runtimeTrimMemory = ActivityManager::class.java.getMethod("trimMemory", Int::class.java) + runtimeTrimMemory.invoke(activityManager, level) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun clearBackgroundProcesses() { + val runningApps = activityManager.runningAppProcesses ?: return + runningApps.forEach { processInfo -> + if (processInfo.importance > ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { + activityManager.killBackgroundProcesses(processInfo.processName) + } + } + } + + private fun optimizeGameCache(packageName: String) { + try { + // Clear package cache if it's too large + val packageInfo = context.packageManager.getPackageInfo(packageName, 0) + packageInfo.applicationInfo?.dataDir?.let { dataDir -> + val dir = java.io.File(dataDir) + if (dir.exists()) { + val cacheSize = dir.walkTopDown() + .filter { it.isFile } + .map { it.length() } + .sum() + + if (cacheSize > CACHE_THRESHOLD) { + context.packageManager.clearPackagePreferredActivities(packageName) + } + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + companion object { + private const val KEY_LAUNCH_BOOST = "launch_boost" + private const val KEY_MEMORY_MANAGEMENT = "memory_management" + private const val KEY_LOAD_PRIORITY = "load_priority" + private const val KEY_CACHE_MANAGEMENT = "cache_management" + private const val CACHE_THRESHOLD = 100 * 1024 * 1024L // 100MB + } +} diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index 3198b8b6..ddf7939a 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -41,6 +41,7 @@ import com.android.systemui.screenrecord.IRecordingCallback import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.AppSettings +import io.chaldeaprjkt.gamespace.data.GameOptimizationManager import io.chaldeaprjkt.gamespace.settings.SettingsActivity import io.chaldeaprjkt.gamespace.utils.ScreenUtils import io.chaldeaprjkt.gamespace.utils.dp @@ -61,6 +62,9 @@ class GameBarService : Hilt_GameBarService() { @Inject lateinit var danmakuService: DanmakuService + @Inject + lateinit var gameOptimization: GameOptimizationManager + private val wm by lazy { getSystemService(WINDOW_SERVICE) as WindowManager } private val handler by lazy { Handler(Looper.getMainLooper()) } @@ -175,6 +179,10 @@ class GameBarService : Hilt_GameBarService() { ACTION_STOP -> onGameLeave() ACTION_START -> onGameStart() } + intent?.getStringExtra("package")?.let { packageName -> + // Apply game optimizations when game starts + gameOptimization.optimizeGameLaunch(packageName) + } return START_STICKY } diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt index 18de585e..35b7b2b1 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/settings/SettingsFragment.kt @@ -23,19 +23,26 @@ import android.provider.Settings import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.preference.Preference +import androidx.preference.SwitchPreferenceCompat +import androidx.preference.ListPreference import com.android.settingslib.widget.SettingsBasePreferenceFragment import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R +import io.chaldeaprjkt.gamespace.data.GameOptimizationManager import io.chaldeaprjkt.gamespace.preferences.AppListPreferences import io.chaldeaprjkt.gamespace.preferences.appselector.AppSelectorActivity import io.chaldeaprjkt.gamespace.preferences.QuickStartAppPreference import io.chaldeaprjkt.gamespace.preferences.QuickStartAppPreferenceDialogFragment +import javax.inject.Inject @AndroidEntryPoint(SettingsBasePreferenceFragment::class) -class SettingsFragment : Hilt_SettingsFragment() { +class SettingsFragment : Hilt_SettingsFragment(), Preference.OnPreferenceChangeListener { + + @Inject + lateinit var gameOptimization: GameOptimizationManager private var apps: AppListPreferences? = null @@ -59,6 +66,28 @@ class SettingsFragment : Hilt_SettingsFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + // Game Optimization preferences + findPreference("game_launch_boost")?.apply { + isChecked = gameOptimization.isLaunchBoostEnabled + onPreferenceChangeListener = this@SettingsFragment + } + + findPreference("game_memory_management")?.apply { + isChecked = gameOptimization.isMemoryManagementEnabled + onPreferenceChangeListener = this@SettingsFragment + } + + findPreference("game_load_priority")?.apply { + value = gameOptimization.loadPriority + onPreferenceChangeListener = this@SettingsFragment + } + + findPreference("game_cache_management")?.apply { + isChecked = gameOptimization.isCacheManagementEnabled + onPreferenceChangeListener = this@SettingsFragment + } + apps = findPreference(Settings.System.GAMESPACE_GAME_LIST) apps?.onRegisteredAppClick { perAppResult.launch(Intent(context, PerAppSettingsActivity::class.java).apply { @@ -87,4 +116,26 @@ class SettingsFragment : Hilt_SettingsFragment() { super.onDisplayPreferenceDialog(preference) } } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + when (preference.key) { + "game_launch_boost" -> { + gameOptimization.isLaunchBoostEnabled = newValue as Boolean + return true + } + "game_memory_management" -> { + gameOptimization.isMemoryManagementEnabled = newValue as Boolean + return true + } + "game_load_priority" -> { + gameOptimization.loadPriority = newValue as String + return true + } + "game_cache_management" -> { + gameOptimization.isCacheManagementEnabled = newValue as Boolean + return true + } + } + return false + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8981493f..0f33be4c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -103,4 +103,27 @@ Call overlay Show minimal call overlay to answer/reject calls + + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + + Balanced (Recommended) + Maximum Performance + Power Saving + + + + balanced + performance + powersave + diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index ac5dade5..2c564ab1 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -23,6 +23,38 @@ android:key="game_settings_illustration_video" app:lottie_rawRes="@raw/game_settings_illustration" /> + + + + + + + + + + + + From 9388adff033c36823e3c551745c085b72c9fd071 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Mon, 12 May 2025 07:43:17 +0800 Subject: [PATCH 210/214] GameBarService: prevent multiple game bar views Change-Id: I54d964679f2dadd7a298b7f84cf9e378fdc21ef0 Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com> Signed-off-by: Pranav Vashi --- .../gamespace/gamebar/GameBarService.kt | 341 ++++++++---------- .../gamespace/gamebar/SessionService.kt | 29 +- 2 files changed, 183 insertions(+), 187 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt index ddf7939a..5bea23cf 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/GameBarService.kt @@ -24,102 +24,89 @@ import android.graphics.Point import android.os.Binder import android.os.Handler import android.os.Looper -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager +import android.view.* import android.widget.FrameLayout import android.widget.ImageButton import android.widget.LinearLayout -import androidx.core.view.children -import androidx.core.view.isVisible -import androidx.core.view.marginStart -import androidx.core.view.updateMargins -import androidx.core.view.updatePadding +import androidx.core.view.* import com.android.systemui.screenrecord.IRecordingCallback import dagger.hilt.android.AndroidEntryPoint import io.chaldeaprjkt.gamespace.R import io.chaldeaprjkt.gamespace.data.AppSettings import io.chaldeaprjkt.gamespace.data.GameOptimizationManager import io.chaldeaprjkt.gamespace.settings.SettingsActivity -import io.chaldeaprjkt.gamespace.utils.ScreenUtils -import io.chaldeaprjkt.gamespace.utils.dp -import io.chaldeaprjkt.gamespace.utils.registerDraggableTouchListener -import io.chaldeaprjkt.gamespace.utils.statusbarHeight +import io.chaldeaprjkt.gamespace.utils.* import io.chaldeaprjkt.gamespace.widget.MenuSwitcher import io.chaldeaprjkt.gamespace.widget.PanelView import javax.inject.Inject +import kotlin.reflect.KProperty0 @AndroidEntryPoint(Service::class) class GameBarService : Hilt_GameBarService() { - @Inject - lateinit var appSettings: AppSettings - @Inject - lateinit var screenUtils: ScreenUtils - - @Inject - lateinit var danmakuService: DanmakuService + @Inject lateinit var appSettings: AppSettings + @Inject lateinit var screenUtils: ScreenUtils + @Inject lateinit var danmakuService: DanmakuService @Inject lateinit var gameOptimization: GameOptimizationManager private val wm by lazy { getSystemService(WINDOW_SERVICE) as WindowManager } private val handler by lazy { Handler(Looper.getMainLooper()) } + private val inflater by lazy { LayoutInflater.from(this) } + + private var halfWidth = 0 + private var safeHeight = 0 + private var safeArea = 0 - private val barLayoutParam = - WindowManager.LayoutParams( - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + private val barLayoutParam = WindowManager.LayoutParams( + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or - WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, - PixelFormat.TRANSLUCENT - ).apply { - width = WindowManager.LayoutParams.WRAP_CONTENT - height = WindowManager.LayoutParams.WRAP_CONTENT - layoutInDisplayCutoutMode = - WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS - preferMinimalPostProcessing = true - gravity = Gravity.TOP - } + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, + PixelFormat.TRANSLUCENT + ).apply { + width = WindowManager.LayoutParams.WRAP_CONTENT + height = WindowManager.LayoutParams.WRAP_CONTENT + layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS + preferMinimalPostProcessing = true + gravity = Gravity.TOP + } - private val panelLayoutParam = - WindowManager.LayoutParams( - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + private val panelLayoutParam = WindowManager.LayoutParams( + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or - WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, - PixelFormat.TRANSLUCENT - ).apply { - width = WindowManager.LayoutParams.MATCH_PARENT - height = WindowManager.LayoutParams.MATCH_PARENT - layoutInDisplayCutoutMode = - WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS - gravity = Gravity.CENTER_VERTICAL - } + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, + PixelFormat.TRANSLUCENT + ).apply { + width = WindowManager.LayoutParams.MATCH_PARENT + height = WindowManager.LayoutParams.MATCH_PARENT + layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS + gravity = Gravity.CENTER_VERTICAL + } private lateinit var rootBarView: View private lateinit var barView: LinearLayout private lateinit var menuSwitcher: MenuSwitcher private lateinit var rootPanelView: LinearLayout private lateinit var panelView: PanelView + private val binder = GameBarBinder() private val firstPaint = Runnable { initActions() } - private var barExpanded: Boolean = false + private var shouldClose = false + private var isGameStarting = false + + private var barExpanded = false set(value) { field = value menuSwitcher.updateIconState(value, barLayoutParam.x) - barView.children.forEach { - if (it.id != R.id.action_menu_switcher) { - it.isVisible = value - } - } + barView.children.forEach { if (it.id != R.id.action_menu_switcher) it.isVisible = value } updateBackground() updateContainerGaps() } - private var showPanel: Boolean = false + private var showPanel = false set(value) { field = value if (value) { @@ -128,52 +115,46 @@ class GameBarService : Hilt_GameBarService() { } if (!rootPanelView.isAttachedToWindow) { wm.addView(rootPanelView, panelLayoutParam) - rootPanelView.alpha = 0f - rootPanelView.visibility = View.VISIBLE - rootPanelView.animate() - .alpha(1f) - .setDuration(300) - .start() - } else { - wm.updateViewLayout(rootPanelView, panelLayoutParam) + rootPanelView.fadeIn() } } else { - if (::rootPanelView.isInitialized && rootPanelView.isAttachedToWindow) { - rootPanelView.animate() - .alpha(0f) - .setDuration(300) - .withEndAction { - rootPanelView.visibility = View.INVISIBLE - handler.postDelayed({ - runCatching { - if (rootPanelView.isAttachedToWindow) { - wm.removeView(rootPanelView) - } - }.onFailure { it.printStackTrace() } - }, 50) - } - .start() + if (safeAttached(::rootPanelView.isInitialized, rootPanelView)) { + rootPanelView.fadeOut { + rootPanelView.visibility = View.INVISIBLE + handler.postDelayed({ + runCatching { + wm.removeView(rootPanelView) + }.onFailure { it.printStackTrace() } + }, 50) + } } } } - private var barAdded = false - - // Whether to ignore the initActions (floating action) or not - private var shouldClose = false - override fun onCreate() { super.onCreate() val frame = FrameLayout(this) - rootBarView = LayoutInflater.from(this) - .inflate(R.layout.window_util, frame, false)!! - barView = rootBarView.findViewById(R.id.container_bar)!! - barView.alpha = appSettings.menuOpacity / 100f - menuSwitcher = rootBarView.findViewById(R.id.action_menu_switcher)!! - menuSwitcher.alpha = appSettings.menuOpacity / 100f + rootBarView = inflater.inflate(R.layout.window_util, frame, false) + barView = rootBarView.findViewById(R.id.container_bar) + menuSwitcher = rootBarView.findViewById(R.id.action_menu_switcher) + applyOpacity() + updateScreenMetrics() danmakuService.init() } + private fun updateScreenMetrics() { + val bounds = wm.maximumWindowMetrics.bounds + halfWidth = bounds.width() / 2 + safeArea = statusbarHeight + 4.dp + safeHeight = bounds.height() - safeArea + } + + private fun applyOpacity() { + val alphaValue = appSettings.menuOpacity / 100f + barView.alpha = alphaValue + menuSwitcher.alpha = alphaValue + } + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { when (intent?.action) { ACTION_STOP -> onGameLeave() @@ -200,6 +181,7 @@ class GameBarService : Hilt_GameBarService() { override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) + updateScreenMetrics() if (!rootBarView.isVisible) { handler.removeCallbacks(firstPaint) handler.postDelayed({ @@ -212,77 +194,60 @@ class GameBarService : Hilt_GameBarService() { danmakuService.updateConfiguration(newConfig) } - // for client service fun onGameStart() { - shouldClose = false - rootBarView.isVisible = false - rootBarView.alpha = 0f - updateRootBarView() - handler.postDelayed(firstPaint, 500) + if (isGameStarting) return + isGameStarting = true + + handler.post { + if (!::rootBarView.isInitialized) return@post + if (safeAttached(::rootBarView.isInitialized, rootBarView)) { + isGameStarting = false + return@post + } + + shouldClose = false + rootBarView.isVisible = false + rootBarView.alpha = 0f + wm.addView(rootBarView, barLayoutParam) + handler.postDelayed(firstPaint, 500) + isGameStarting = false + } } fun onGameLeave() { shouldClose = true - handler.removeCallbacksAndMessages(null) runCatching { - if (::rootPanelView.isInitialized - && rootPanelView.isAttachedToWindow) { + if (safeAttached(::rootPanelView.isInitialized, rootPanelView)) { wm.removeViewImmediate(rootPanelView) } - }.onFailure { it.printStackTrace() } + } runCatching { - if (::rootBarView.isInitialized - && rootBarView.isAttachedToWindow) { + if (safeAttached(::rootBarView.isInitialized, rootBarView)) { wm.removeViewImmediate(rootBarView) } - }.onFailure { it.printStackTrace() } - - barAdded = false + } stopForeground(true) stopSelf() } - private fun updateRootBarView() { - if (!::rootBarView.isInitialized) return - - runCatching { - if (barAdded) { - wm.removeViewImmediate(rootBarView) - } - wm.addView(rootBarView, barLayoutParam) - barAdded = true - }.onFailure { - it.printStackTrace() - runCatching { - if (barAdded) { - wm.updateViewLayout(rootBarView, barLayoutParam) - } - }.onFailure { err -> err.printStackTrace() } - } - } - - private fun updateLayout(with: (WindowManager.LayoutParams) -> Unit = {}) { + private fun updateLayout(update: WindowManager.LayoutParams.() -> Unit = {}) { + barLayoutParam.update() if (rootBarView.isAttachedToWindow) { - wm.updateViewLayout(rootBarView, barLayoutParam.apply(with)) + wm.updateViewLayout(rootBarView, barLayoutParam) } } private fun initActions() { if (shouldClose) return - rootBarView.isVisible = true - rootBarView.animate() - .alpha(1f) - .apply { duration = 300 } - .start() + rootBarView.fadeIn() barExpanded = false barLayoutParam.x = appSettings.x barLayoutParam.y = appSettings.y dockCollapsedMenu() - menuSwitcherButton() panelButton() screenshotButton() @@ -304,19 +269,23 @@ class GameBarService : Hilt_GameBarService() { } private fun updateContainerGaps() { - if (barExpanded) { - barView.updatePadding(8, 8, 8, 8) - (barView.layoutParams as ViewGroup.MarginLayoutParams) - .updateMargins(right = 48, left = 48) - } else { - barView.updatePadding(0, 0, 0, 0) - (barView.layoutParams as ViewGroup.MarginLayoutParams) - .updateMargins(right = 0, left = 0) + val currentParams = barView.layoutParams as ViewGroup.MarginLayoutParams + val targetLeft = if (barExpanded) 48 else 0 + val targetRight = if (barExpanded) 48 else 0 + + if (currentParams.leftMargin != targetLeft || currentParams.rightMargin != targetRight) { + barView.updatePaddingRelative( + start = if (barExpanded) 8 else 0, + top = if (barExpanded) 8 else 0, + end = if (barExpanded) 8 else 0, + bottom = if (barExpanded) 8 else 0 + ) + currentParams.setMargins(targetLeft, 0, targetRight, 0) + barView.layoutParams = currentParams } } private fun dockCollapsedMenu() { - val halfWidth = wm.maximumWindowMetrics.bounds.width() / 2 if (barLayoutParam.x < 0) { barView.translationX = -22f barLayoutParam.x = -halfWidth @@ -325,29 +294,25 @@ class GameBarService : Hilt_GameBarService() { barLayoutParam.x = halfWidth } - val safeArea = statusbarHeight + 4.dp - val safeHeight = wm.maximumWindowMetrics.bounds.height() - safeArea barLayoutParam.y = barLayoutParam.y.coerceIn(safeArea, safeHeight) - updateBackground() updateContainerGaps() menuSwitcher.showFps = if (barExpanded) false else appSettings.showFps menuSwitcher.updateIconState(barExpanded, barLayoutParam.x) - updateRootBarView() + if (safeAttached(::rootBarView.isInitialized, rootBarView)) { + wm.updateViewLayout(rootBarView, barLayoutParam) + } } private fun setupPanelView() { - rootPanelView = LayoutInflater.from(this) - .inflate(R.layout.window_panel, FrameLayout(this), false) as LinearLayout + rootPanelView = inflater.inflate(R.layout.window_panel, FrameLayout(this), false) as LinearLayout rootPanelView.alpha = 0f rootPanelView.visibility = View.INVISIBLE - panelView = rootPanelView.findViewById(R.id.panel_view)!! + panelView = rootPanelView.findViewById(R.id.panel_view) panelView.alpha = appSettings.menuOpacity / 100f - rootPanelView.setOnClickListener { - showPanel = false - } + rootPanelView.setOnClickListener { showPanel = false } val barWidth = barView.width + barView.marginStart if (barLayoutParam.x < 0) { @@ -361,14 +326,12 @@ class GameBarService : Hilt_GameBarService() { } private fun takeShot() { - val afterShot: () -> Unit = { + val afterShot = { barExpanded = false - handler.postDelayed({ - updateLayout { it.alpha = 1f } - }, 100) + handler.postDelayed({ updateLayout { alpha = 1f } }, 100) } - updateLayout { it.alpha = 0f } + updateLayout { alpha = 0f } handler.postDelayed({ runCatching { screenUtils.takeScreenshot { afterShot() } @@ -383,6 +346,7 @@ class GameBarService : Hilt_GameBarService() { menuSwitcher.setOnClickListener { barExpanded = !barExpanded } + menuSwitcher.registerDraggableTouchListener( initPoint = { Point(barLayoutParam.x, barLayoutParam.y) }, listener = { x, y -> @@ -391,8 +355,8 @@ class GameBarService : Hilt_GameBarService() { barView.translationX = 0f } updateLayout { - it.x = x - it.y = y + this.x = x + this.y = y } updateBackground() }, @@ -407,11 +371,9 @@ class GameBarService : Hilt_GameBarService() { } private fun panelButton() { - val actionPanel = rootBarView.findViewById(R.id.action_panel)!! + val actionPanel = rootBarView.findViewById(R.id.action_panel) actionPanel.alpha = appSettings.menuOpacity / 100f - actionPanel.setOnClickListener { - showPanel = !showPanel - } + actionPanel.setOnClickListener { showPanel = !showPanel } actionPanel.setOnLongClickListener { startActivity(Intent(this, SettingsActivity::class.java).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) true @@ -419,43 +381,58 @@ class GameBarService : Hilt_GameBarService() { } private fun screenshotButton() { - val actionScreenshot = rootBarView.findViewById(R.id.action_screenshot)!! - actionScreenshot.alpha = appSettings.menuOpacity / 100f - actionScreenshot.setOnClickListener { - takeShot() + rootBarView.findViewById(R.id.action_screenshot).apply { + alpha = appSettings.menuOpacity / 100f + setOnClickListener { takeShot() } } } private fun recorderButton() { - val actionRecorder = rootBarView.findViewById(R.id.action_record)!! + val actionRecorder = rootBarView.findViewById(R.id.action_record) actionRecorder.alpha = appSettings.menuOpacity / 100f - val recorder = screenUtils.recorder ?: let { actionRecorder?.isVisible = false; return } + val recorder = screenUtils.recorder ?: run { + actionRecorder.isVisible = false + return + } + recorder.addRecordingCallback(object : IRecordingCallback.Stub() { override fun onRecordingStart() { - handler.post { - actionRecorder.isSelected = true - } + handler.post { actionRecorder.isSelected = true } } override fun onRecordingEnd() { - handler.post { - actionRecorder.isSelected = false - } + handler.post { actionRecorder.isSelected = false } } }) + actionRecorder.setOnClickListener { - if (recorder.isStarting) { - return@setOnClickListener - } + if (recorder.isStarting) return@setOnClickListener + if (!recorder.isRecording) recorder.startRecording() else recorder.stopRecording() + barExpanded = false + } + } - if (!recorder.isRecording) { - recorder.startRecording() - } else { - recorder.stopRecording() - } + fun View.fadeIn(duration: Long = 300L) { + if (!isVisible || alpha < 1f) { + alpha = 0f + isVisible = true + animate().alpha(1f).setDuration(duration).start() + } + } - barExpanded = false + fun View.fadeOut(duration: Long = 300L, endAction: () -> Unit = {}) { + if (isVisible && alpha > 0f) { + animate().alpha(0f).setDuration(duration).withEndAction(endAction).start() + } else { + endAction() + } + } + + fun safeAttached(initialized: Boolean, view: T): Boolean { + if (!initialized) { + return false } + return view.isAttachedToWindow } companion object { diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt index a455b7cb..fd54a21f 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/SessionService.kt @@ -63,6 +63,8 @@ class SessionService : Hilt_SessionService() { private val scope = CoroutineScope(Job() + Dispatchers.IO) private var isRunning = false + + private var tarketPkgName = "" private val gameBarConnection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName?, service: IBinder?) { @@ -160,6 +162,7 @@ class SessionService : Hilt_SessionService() { stopSelf() return } + tarketPkgName = app session.unregister() session.register(app) applyGameModeConfig(app) @@ -183,16 +186,32 @@ class SessionService : Hilt_SessionService() { return START_STICKY } - val game = ActivityTaskManager.getService() + if (tarketPkgName.isBlank()) { + stopSelf() + return START_NOT_STICKY + } + + val focusedApp = ActivityTaskManager.getService() ?.focusedRootTaskInfo - ?.topActivity?.packageName - ?: return START_NOT_STICKY + ?.topActivity + ?.packageName - if (!settings.userGames.any { it.packageName == game }) { + if (focusedApp.isNullOrBlank()) { + stopSelf() + return START_NOT_STICKY + } + + if (!settings.userGames.any { it.packageName == focusedApp }) { + stopSelf() + return START_NOT_STICKY + } + + if (focusedApp != tarketPkgName) { + stopSelf() return START_NOT_STICKY } - commandIntent = Intent(START).putExtra(EXTRA_PACKAGE_NAME, game) + commandIntent = Intent(START).putExtra(EXTRA_PACKAGE_NAME, tarketPkgName) startGameBar() return START_STICKY } From a0b35a19872d32ceb1d823e2d45faad98abe4fae Mon Sep 17 00:00:00 2001 From: someone5678 Date: Mon, 22 Jul 2024 17:54:08 +0900 Subject: [PATCH 211/214] GameSpace: Import qs_tile_background ripple resource for tile * Makes ripple effect more looks like when pressing/hovering qs tile Change-Id: I5216a099937c2a5ca6aabcf21d321f90e74cf760 Signed-off-by: Pranav Vashi --- app/src/main/res/color/tile_ripple_color.xml | 25 +++++++++++++++++++ app/src/main/res/drawable/tile_background.xml | 4 +-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/color/tile_ripple_color.xml diff --git a/app/src/main/res/color/tile_ripple_color.xml b/app/src/main/res/color/tile_ripple_color.xml new file mode 100644 index 00000000..1f8517a0 --- /dev/null +++ b/app/src/main/res/color/tile_ripple_color.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/tile_background.xml b/app/src/main/res/drawable/tile_background.xml index 75c7482e..2e28f09b 100644 --- a/app/src/main/res/drawable/tile_background.xml +++ b/app/src/main/res/drawable/tile_background.xml @@ -15,10 +15,10 @@ --> + android:color="@color/tile_ripple_color"> - + From 5de2cb26b2eb84fe3ad3cdf60f6e0dc786c91efc Mon Sep 17 00:00:00 2001 From: minaripenguin Date: Wed, 4 Dec 2024 09:57:44 +0800 Subject: [PATCH 212/214] GameSpace: Integrate LMOFreeform to quick start apps * intended for non-sidebar users Signed-off-by: Pranav Vashi --- .../gamespace/widget/QuickStartAppView.java | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java index bceaaa3b..2bb644b4 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/widget/QuickStartAppView.java @@ -96,8 +96,6 @@ private void init(Context context) { mContext.getContentResolver().registerContentObserver( Settings.System.getUriFor("quick_start_apps"), true, mObserver); mPackageManager = mContext.getPackageManager(); - mActivityOptions = ActivityOptions.makeBasic(); - mActivityOptions.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM); } private void updateAppIcons() { @@ -150,33 +148,17 @@ private void setupAppIcon(ImageView imageView, @Nullable String packageName) { } private void launchAppInFreeformMode(String packageName) { - ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); - // force stop the app before launching in freeform to avoid ui glitches - follows legacy freeform behaviour - if (am != null) { - am.forceStopPackage(packageName); - } - WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); - Display display = windowManager.getDefaultDisplay(); - Point screenSize = new Point(); - display.getSize(screenSize); - Configuration configuration = mContext.getResources().getConfiguration(); - - int centerX = screenSize.x / 2; - int centerY = screenSize.y / 2; - int width = Math.min(screenSize.x, screenSize.y) * 1 / 2; - int height = Math.max(screenSize.x, screenSize.y) * 1 / 2; - Rect launchBounds = new Rect(centerX - width / 2, centerY - height / 2, centerX + width / 2, centerY + height / 2); - - mActivityOptions.setLaunchBounds(launchBounds); - mActivityOptions.setTaskAlwaysOnTop(true); - mActivityOptions.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); - mActivityOptions.setPendingIntentBackgroundActivityStartMode( - ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS); - try { - Intent startAppIntent = mPackageManager.getLaunchIntentForPackage(packageName); - if (startAppIntent != null) { - mContext.startActivity(startAppIntent, mActivityOptions.toBundle()); + PackageManager packageManager = mContext.getPackageManager(); + Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName); + if (launchIntent != null) { + String activityName = launchIntent.getComponent().getClassName(); + Intent freeformIntent = new Intent("com.libremobileos.freeform.START_FREEFORM") + .setPackage("com.libremobileos.freeform") + .putExtra("packageName", packageName) + .putExtra("activityName", activityName) + .putExtra("userId", UserHandle.myUserId()); + mContext.sendBroadcast(freeformIntent); } } catch (Exception e) {} } From 0eda348d1e638590dca0d3f2476616cf203a294a Mon Sep 17 00:00:00 2001 From: Lup Gabriel Date: Sun, 29 Mar 2026 18:41:41 +0300 Subject: [PATCH 213/214] New Crowdin updates (#137) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Russian) * New translations strings.xml (French) * New translations strings.xml (Romanian) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (Czech) * New translations strings.xml (Danish) * New translations strings.xml (German) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Italian) * New translations strings.xml (Japanese) * New translations strings.xml (Korean) * New translations strings.xml (Dutch) * New translations strings.xml (Polish) * New translations strings.xml (Portuguese) * New translations strings.xml (Slovak) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Polish) --- app/src/main/res/values-af-rZA/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-ar-rSA/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-ca-rES/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-cs-rCZ/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-da-rDK/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-de-rDE/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-el-rGR/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-es-rES/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-fa-rIR/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-fi-rFI/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-fr-rFR/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-hu-rHU/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-in-rID/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-it-rIT/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-iw-rIL/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-ja-rJP/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-ko-rKR/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-nl-rNL/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-pl-rPL/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-pt-rBR/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-pt-rPT/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-ro-rRO/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-ru-rRU/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-sk-rSK/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-tr-rTR/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-uk-rUA/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-vi-rVN/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 20 ++++++++++++++++++++ app/src/main/res/values-zh-rTW/strings.xml | 20 ++++++++++++++++++++ 29 files changed, 580 insertions(+) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 4b2aa9fa..c19563ca 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 9ced4fa7..eb2c4c33 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -90,4 +90,24 @@ عرض المكالمة إظهار الحد الأدنى من تراكب المكالمات للإجابة / رفض المكالمات + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 6dde6e93..bceee2c4 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 96c66d42..717743fe 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -90,4 +90,24 @@ Překrytí hovoru Zobrazit minimální překrytí hovorů pro odpověď/odmítnutí hovorů + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 4bbe0626..b7cc3808 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 9f15f334..a4818bde 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -90,4 +90,24 @@ Zeige Overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 4ac29d53..87eadd71 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 766ce268..40dba2b3 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -91,4 +91,24 @@ Mantén presionado para establecer Llamada en ventana flotante Usar ventana flotante compacta para responder o rechazar llamadas + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index bc4f6fca..85d2377d 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index b233824c..c50727df 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index ffcba24c..a1861d22 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -90,4 +90,24 @@ Superposition d\'appels Afficher la surcouche d\'appel minimale pour répondre/rejeter les appels + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 9112672f..9a68d251 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -90,4 +90,24 @@ Hívás átfedés Minimális hívásfelületet jelenít meg a hívások fogadásához/elutasításához + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index b13a9d3a..18a05882 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -90,4 +90,24 @@ Overlay panggilan Tampilkan overlay panggilan minimal untuk menjawab/menolak panggilan + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 7a106c0f..06f5e7b1 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -90,4 +90,24 @@ Overlay chiamata Mostra la sovrapposizione minima delle chiamate per rispondere/rifiutare le chiamate + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 37753146..460be05a 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 9372cb70..53f71bfb 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 4a4d088c..2c8b5e9f 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 8ab7dc28..7225ed1d 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 7d24214f..512d247c 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -90,4 +90,24 @@ Nakładka połączenia Pokazuj minimalną nakładkę podczas odbierania/odrzucania połączeń telefonicznych + + Uruchom optymalizację + Uruchom przyspieszenie + Zoptymalizuj wykorzystanie procesora i pamięci, aby gra uruchamiała się szybciej + Inteligentne zarządzanie pamięcią + Automatycznie zamykaj aplikacje działające w tle podczas uruchamiania gier + Ładowanie priorytetowe + Ustaw priorytet zasobów podczas uruchamiania gry + Zarządzanie pamięcią podręczną + Optymalizuj pamięć podręczną gry dla szybszego ładowania + + Zrównoważone (zalecane) + Maksymalna wydajność + Oszczędność baterii + + + zrównoważone + wydajność + oszczędzanie energii + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 77904fb2..e32cac2b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -90,4 +90,24 @@ Sobreposição de chamada Mostrar sobreposição de chamada mínima para atender/rejeitar chamadas + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 37d21e93..d0ad001e 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 0fba12fa..c256d45f 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -90,4 +90,24 @@ Apel suprapus Afișați suprapunerea minimă a apelurilor pentru a răspunde/respinge apelurile + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 2ee3ae7b..be42520d 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -90,4 +90,24 @@ Уведомление о вызове Показывать минимальное уведомление о звонке для ответа/отклонения вызова + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index eee8a6b2..c42ad185 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -90,4 +90,24 @@ Call overlay Show minimal call overlay to answer/reject calls + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 416c2234..94a27836 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -90,4 +90,24 @@ Arama penceresi Aramaları yanıtlamak veya reddetmek için minimal arama arayüzünü göster + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index ed21ea7c..75b50a18 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -90,4 +90,24 @@ Накладання викликів Показувати мінімальне накладення для відповіді/відхилення викликів + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 701c9bf2..87dc40fd 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -90,4 +90,24 @@ Lớp phủ cuộc gọi Hiển thị lớp phủ tối giản để trả lời/từ chối cuộc gọi + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0e1bf5e9..a387a2cc 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -90,4 +90,24 @@ 电话叠加层 显示最小呼叫叠加层以接听/拒接电话 + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 427ba911..ced75483 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -90,4 +90,24 @@ 電話疊加層 顯示最少的通話疊加層以接聽/拒接電話 + + Launch Optimization + Launch Boost + Optimize CPU and memory for faster game launch + Smart Memory Management + Automatically clear background apps when launching games + Loading Priority + Set resource priority during game launch + Cache Management + Optimize game cache for faster loading times + + Balanced (Recommended) + Maximum Performance + Power Saving + + + balanced + performance + powersave + From d7e9dd6302f0811969f6ec5f33b822374edd3104 Mon Sep 17 00:00:00 2001 From: Pzqqt <821026875@qq.com> Date: Tue, 31 Mar 2026 20:10:20 +0800 Subject: [PATCH 214/214] GameSpace: Fix the crash issue when incomingNumber was empty Fix: java.lang.IllegalArgumentException: URI: content://com.android.contacts/phone_lookup/, calling user: android.uid.system:1000, calling package is one of: [...] at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:207) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:177) at android.content.ContentProviderProxy.query(ContentProviderNative.java:495) at android.content.ContentResolver.query(ContentResolver.java:1231) at android.content.ContentResolver.query(ContentResolver.java:1163) at android.content.ContentResolver.query(ContentResolver.java:1119) at io.chaldeaprjkt.gamespace.gamebar.CallListener.loadContactPhoto(CallListener.kt:270) at io.chaldeaprjkt.gamespace.gamebar.CallListener.showRingerOverlay(CallListener.kt:198) at io.chaldeaprjkt.gamespace.gamebar.CallListener.access$showRingerOverlay(CallListener.kt:71) at io.chaldeaprjkt.gamespace.gamebar.CallListener$phoneStateListener$1.onCallStateChanged(CallListener.kt:91) at android.telephony.PhoneStateListener$IPhoneStateListenerStub.lambda$onLegacyCallStateChanged$10(PhoneStateListener.java:1379) at android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda43.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:1070) at android.os.Handler.dispatchMessage(Handler.java:125) at android.os.Looper.dispatchMessage(Looper.java:333) at android.os.Looper.loopOnce(Looper.java:263) at android.os.Looper.loop(Looper.java:367) at android.app.ActivityThread.main(ActivityThread.java:9298) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:569) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929) Signed-off-by: Pzqqt <821026875@qq.com> --- .../java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt index 5192ae98..aa2e7de9 100644 --- a/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt +++ b/app/src/main/java/io/chaldeaprjkt/gamespace/gamebar/CallListener.kt @@ -88,7 +88,7 @@ class CallListener @Inject constructor( private val phoneStateListener = object: PhoneStateListener() { override fun onCallStateChanged(state: Int, incomingNumber: String?) { if (state == TelephonyManager.CALL_STATE_RINGING && callOverlayEnabled) { - showRingerOverlay(incomingNumber ?: "") + showRingerOverlay(incomingNumber) } } } @@ -172,7 +172,7 @@ class CallListener @Inject constructor( } } - private fun showRingerOverlay(incomingNumber: String) { + private fun showRingerOverlay(incomingNumber: String?) { if (isOverlayShowing) return val sidebarX = appSettings.x @@ -195,7 +195,7 @@ class CallListener @Inject constructor( y = appSettings.y - 71.extDp } - val callerPhoto = loadContactPhoto(context, incomingNumber) + val callerPhoto = if (incomingNumber.isNullOrEmpty()) null else loadContactPhoto(context, incomingNumber) ringerOverlay = ComposeView(context).apply { repeatWhenAttached {