Cherish: Add GamingMode support [3/3]
Change-Id: I27960bbbf982a4cd855524baa743ed6647a2f0be Reviewed-on: https://review.exthmui.cn/c/android_packages_apps_exTHmSettings/+/209 Signed-off-by: cjybyjk <cjybyjk@zjnu.edu.cn> Signed-off-by: Hưng Phan <phandinhhungvp2001@gmail.com>
This commit is contained in:
55
src/com/cherish/settings/fragments/GamingModeSettings.java
Normal file
55
src/com/cherish/settings/fragments/GamingModeSettings.java
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The exTHmUI Open Source 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.cherish.settings.fragments;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.preference.SwitchPreference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.cherish.settings.preferences.PackageListPreference;
|
||||
|
||||
public class GamingModeSettings extends SettingsPreferenceFragment {
|
||||
|
||||
private PackageListPreference mGamingPrefList;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
|
||||
addPreferencesFromResource(R.xml.cherish_settings_gaming);
|
||||
|
||||
final PreferenceScreen prefScreen = getPreferenceScreen();
|
||||
|
||||
mGamingPrefList = (PackageListPreference) findPreference("gaming_mode_app_list");
|
||||
mGamingPrefList.setRemovedListKey(Settings.System.GAMING_MODE_REMOVED_APP_LIST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.cherish.settings.fragments.gaming;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.content.Context;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.Preference.OnPreferenceChangeListener;
|
||||
import androidx.preference.SwitchPreference;
|
||||
import android.provider.Settings;
|
||||
import com.android.settings.R;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
|
||||
public class DanmakuSettings extends SettingsPreferenceFragment implements
|
||||
OnPreferenceChangeListener {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
|
||||
addPreferencesFromResource(R.xml.cherish_settings_gaming_danmaku);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object objValue) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.cherish.settings.fragments.gaming;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.content.Context;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.Preference.OnPreferenceChangeListener;
|
||||
import androidx.preference.SwitchPreference;
|
||||
import android.provider.Settings;
|
||||
import com.android.settings.R;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
|
||||
public class QuickStartAppSettings extends SettingsPreferenceFragment implements
|
||||
OnPreferenceChangeListener {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
addPreferencesFromResource(R.xml.cherish_settings_gaming_qs_app);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object objValue) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
|
||||
}
|
||||
}
|
||||
206
src/com/cherish/settings/preferences/PackageListPreference.java
Normal file
206
src/com/cherish/settings/preferences/PackageListPreference.java
Normal file
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The exTHmUI Open Source 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.cherish.settings.preferences;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.provider.Settings;
|
||||
import android.os.UserHandle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.cherish.settings.preferences.PackageListAdapter;
|
||||
import com.cherish.settings.preferences.PackageListAdapter.PackageItem;
|
||||
|
||||
public class PackageListPreference extends PreferenceCategory implements
|
||||
Preference.OnPreferenceClickListener {
|
||||
|
||||
private Context mContext;
|
||||
private String mRemovedListKey;
|
||||
|
||||
private PackageListAdapter mPackageAdapter;
|
||||
private PackageManager mPackageManager;
|
||||
|
||||
private Preference mAddPackagePref;
|
||||
|
||||
private ContentResolver mContentResolver;
|
||||
|
||||
private ArrayList<String> mGamingPackages = new ArrayList<>();
|
||||
private ArrayList<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user