From 5040d8afb9280734b6bfc9ee61db8eb60249ab0e Mon Sep 17 00:00:00 2001 From: cjybyjk Date: Mon, 5 Apr 2021 23:53:36 +0800 Subject: [PATCH] Cherish: Add GamingMode support [3/3] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I27960bbbf982a4cd855524baa743ed6647a2f0be Reviewed-on: https://review.exthmui.cn/c/android_packages_apps_exTHmSettings/+/209 Signed-off-by: cjybyjk Signed-off-by: Hưng Phan --- res/drawable/ic_add.xml | 9 + res/drawable/ic_gaming_image.xml | 9 + res/values/cherish_strings.xml | 44 ++++ res/xml/cherish_settings_gaming.xml | 124 +++++++++++ res/xml/cherish_settings_gaming_danmaku.xml | 75 +++++++ res/xml/cherish_settings_gaming_qs_app.xml | 26 +++ res/xml/cherish_settings_misc.xml | 7 + .../fragments/GamingModeSettings.java | 55 +++++ .../fragments/gaming/DanmakuSettings.java | 49 +++++ .../gaming/QuickStartAppSettings.java | 47 ++++ .../preferences/PackageListPreference.java | 206 ++++++++++++++++++ 11 files changed, 651 insertions(+) create mode 100644 res/drawable/ic_add.xml create mode 100644 res/drawable/ic_gaming_image.xml create mode 100644 res/xml/cherish_settings_gaming.xml create mode 100644 res/xml/cherish_settings_gaming_danmaku.xml create mode 100644 res/xml/cherish_settings_gaming_qs_app.xml create mode 100644 src/com/cherish/settings/fragments/GamingModeSettings.java create mode 100644 src/com/cherish/settings/fragments/gaming/DanmakuSettings.java create mode 100644 src/com/cherish/settings/fragments/gaming/QuickStartAppSettings.java create mode 100644 src/com/cherish/settings/preferences/PackageListPreference.java diff --git a/res/drawable/ic_add.xml b/res/drawable/ic_add.xml new file mode 100644 index 0000000..de9a522 --- /dev/null +++ b/res/drawable/ic_add.xml @@ -0,0 +1,9 @@ + + + diff --git a/res/drawable/ic_gaming_image.xml b/res/drawable/ic_gaming_image.xml new file mode 100644 index 0000000..218f8a6 --- /dev/null +++ b/res/drawable/ic_gaming_image.xml @@ -0,0 +1,9 @@ + + + diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml index b2aefce..41b2b27 100644 --- a/res/values/cherish_strings.xml +++ b/res/values/cherish_strings.xml @@ -1342,4 +1342,48 @@ Monet Accuracy The More Accurate the slower (Def 16) + Add application + + + Gaming mode + Enable gaming mode + Disable automatic brightness + Disable auto brightness when entering game mode + Notification Danmaku + Display the notification content in the form of danmaku in the game + Quick Start Apps + Choose the application that you want to launch with a floating ball + + Performance + Use game driver + Use specific drivers for games + Performance tuning + Adjust performance level when starting game + Performance level + + Do not distrub + Disable notification alert + Do not allow floating notification and conversation bubbles other than incoming calls and alarms + No ringing + Turn off the ringing of incoming calls and notifications in gaming mode + Answering calls automatically + Answer calls automatically in the game and hands free when no headphones connected + + prevent accidental touch + Disable hardware keys + Disable gestures + + Game list + Dynamic mode + Try detecting and adding gaming apps automatically + + Show danmaku + Dynamic filtering notification + Automatically filter notifications such as download progress + Danmaku size (horizontal) + Danmaku size (vertical) + Danmaku speed (horizontal) + Danmaku speed (vertical) + Blacklist + diff --git a/res/xml/cherish_settings_gaming.xml b/res/xml/cherish_settings_gaming.xml new file mode 100644 index 0000000..31ded87 --- /dev/null +++ b/res/xml/cherish_settings_gaming.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/cherish_settings_gaming_danmaku.xml b/res/xml/cherish_settings_gaming_danmaku.xml new file mode 100644 index 0000000..b3904e6 --- /dev/null +++ b/res/xml/cherish_settings_gaming_danmaku.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/cherish_settings_gaming_qs_app.xml b/res/xml/cherish_settings_gaming_qs_app.xml new file mode 100644 index 0000000..6025d91 --- /dev/null +++ b/res/xml/cherish_settings_gaming_qs_app.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/res/xml/cherish_settings_misc.xml b/res/xml/cherish_settings_misc.xml index 191ac42..255048e 100644 --- a/res/xml/cherish_settings_misc.xml +++ b/res/xml/cherish_settings_misc.xml @@ -44,6 +44,13 @@ android:persistent="false" /> + + + mGamingPackages = new ArrayList<>(); + private ArrayList mRemovedPackages = new ArrayList<>(); + + public PackageListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + + mPackageManager = mContext.getPackageManager(); + mPackageAdapter = new PackageListAdapter(mContext); + + mContentResolver = mContext.getApplicationContext().getContentResolver(); + + mAddPackagePref = makeAddPref(); + + this.setOrderingAsAdded(false); + } + + private Preference makeAddPref() { + Preference pref = new Preference(mContext); + pref.setTitle(R.string.add_package_to_title); + pref.setIcon(R.drawable.ic_add); + pref.setPersistent(false); + pref.setOnPreferenceClickListener(this); + return pref; + } + + public void setRemovedListKey(String key) { + mRemovedListKey = key; + if (isAttached()) { + refreshCustomApplicationPrefs(); + } + } + + private ApplicationInfo getAppInfo(String packageName) { + try { + return mPackageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return null; + } + } + + private void parsePackageList() { + mGamingPackages.clear(); + mRemovedPackages.clear(); + + String packageListData = Settings.System.getString(mContentResolver, getKey()); + if (!TextUtils.isEmpty(packageListData)) { + String[] packageListArray = packageListData.split(";"); + mGamingPackages.addAll(Arrays.asList(packageListArray)); + } + if (!TextUtils.isEmpty(mRemovedListKey)) { + String removedPackageListData = Settings.System.getString(mContentResolver, mRemovedListKey); + if (!TextUtils.isEmpty(removedPackageListData)) { + String[] packageListArray = removedPackageListData.split(";"); + mRemovedPackages.addAll(Arrays.asList(packageListArray)); + } + } + } + + private void refreshCustomApplicationPrefs() { + parsePackageList(); + removeAll(); + addPreference(mAddPackagePref); + for (String pkg : mGamingPackages) { + addPackageToPref(pkg); + } + } + + private void savePackagesList() { + String packageListData = String.join(";", mGamingPackages); + Settings.System.putString(mContentResolver, getKey(), packageListData); + if (!TextUtils.isEmpty(mRemovedListKey)) { + String removedPackageListData = String.join(";", mRemovedPackages); + Settings.System.putString(mContentResolver, mRemovedListKey, removedPackageListData); + } + } + + private void addPackageToPref(String packageName) { + Preference pref = new Preference(mContext); + ApplicationInfo appInfo = getAppInfo(packageName); + if (appInfo == null) return; + pref.setKey(packageName); + pref.setTitle(appInfo.loadLabel(mPackageManager)); + pref.setIcon(appInfo.loadIcon(mPackageManager)); + pref.setPersistent(false); + pref.setOnPreferenceClickListener(this); + addPreference(pref); + } + + private void addPackageToList(String packageName) { + if (!mGamingPackages.contains(packageName)) { + mGamingPackages.add(packageName); + addPackageToPref(packageName); + } + mRemovedPackages.remove(packageName); + savePackagesList(); + } + + private void removePackageFromList(String packageName) { + if (!mRemovedPackages.contains(packageName)) { + mRemovedPackages.add(packageName); + } + mGamingPackages.remove(packageName); + savePackagesList(); + } + + @Override + public void onAttached() { + super.onAttached(); + refreshCustomApplicationPrefs(); + } + + @Override + public boolean onPreferenceClick(Preference preference) { + AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + if (preference == mAddPackagePref) { + ListView appsList = new ListView(mContext); + appsList.setAdapter(mPackageAdapter); + builder.setTitle(R.string.profile_choose_app); + builder.setNegativeButton(android.R.string.cancel, null); + builder.setView(appsList); + final Dialog dialog = builder.create(); + appsList.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + PackageItem info = (PackageItem) parent.getItemAtPosition(position); + addPackageToList(info.packageName); + dialog.cancel(); + } + }); + dialog.show(); + } else if (preference == findPreference(preference.getKey())) { + builder.setTitle(R.string.dialog_delete_title) + .setMessage(R.string.dialog_delete_message) + .setIconAttribute(android.R.attr.alertDialogIcon) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + removePackageFromList(preference.getKey()); + removePreference(preference); + } + }) + .setNegativeButton(android.R.string.cancel, null).show(); + } + return true; + } + +}