Commit c4e0a1e5 by Tim Van Patten Committed by Commit Bot

Revert "Enhance ANGLE for Android Developer Options"

This reverts commit fdbdb2b2. Reason for revert: I didn't mean to land this quite yet, since we are still working on the Android side of things. It seems doing CQ+2 merges it while I was trying for just a dry run while replying to Jamie's comments with updates (after checking with Boulder folks, I want CQ+1 next time). Once the Android changes are ready, I'll work on getting this landed again. Original change's description: > Enhance ANGLE for Android Developer Options > > Update ANGLE Developer Options > > Update ANGLE developer options to allow selecting the OpenGL driver > (default, ANGLE, native) for each app as well as forcing ANGLE for all > apps. > > Bug: angleproject:2962 > Test: Verify the default/ANGLE/native values are saved and applied and > used by the loader. > > Change-Id: I6041e7e49ca5cc65f90fc8ae6f1b084e4639d769 > Reviewed-on: https://chromium-review.googlesource.com/c/1330315 > Commit-Queue: Tim Van Patten <timvp@google.com> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=ynovikov@chromium.org,geofflang@chromium.org,jmadill@chromium.org,cnorthrop@google.com,tobine@google.com,courtneygo@google.com,ianelliott@google.com,timvp@google.com Change-Id: If3a4e917973c56b858244a0ca7f1b164143524f5 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2962 Reviewed-on: https://chromium-review.googlesource.com/c/1354099Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
parent 83b2f0e8
......@@ -60,4 +60,3 @@ Release_Win32/
Release_x64/
TestResults.qpa
tools/clang
.idea/
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The Chromium Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.google.android.angle">
<uses-sdk android:minSdkVersion="26"
android:targetSdkVersion="28">
</uses-sdk>
<application android:label="Android System Angle"
android:extractNativeLibs="false"
android:multiArch="true"
android:hasCode="false">
</application>
</manifest>
......@@ -49,8 +49,8 @@ angle_git_is_present = exec_script("src/commit_id.py",
angle_use_commit_id = angle_git_is_present == 1
import("src/compiler.gni")
import("src/libGLESv2.gni")
import("src/compiler.gni")
# This config is exported to dependent targets (and also applied to internal
# ones).
......@@ -962,23 +962,10 @@ if (is_android) {
"src/feature_support_util/a4a_rules.json",
]
}
android_resources("angle_apk_resources") {
custom_package = "com.google.android.angle"
resource_dirs = [ "android/res" ]
deps = [
"//third_party/android_deps:android_support_v14_preference_java",
"//third_party/android_deps:android_support_v7_preference_java",
]
}
android_apk("angle_apk") {
deps = [
":angle_apk_assets",
":angle_apk_resources",
"//base:base_java",
"//third_party/android_deps:android_support_v14_preference_java",
"//third_party/android_deps:android_support_v7_preference_java",
]
if (build_apk_secondary_abi && android_64bit_target_cpu) {
secondary_abi_shared_libraries = [
"//third_party/angle:libEGL${angle_libs_suffix}($android_secondary_abi_toolchain)",
......@@ -988,7 +975,7 @@ if (is_android) {
]
}
android_manifest = "android/AndroidManifest.xml"
android_manifest = "AndroidManifest.xml"
apk_name = "ANGLEPrebuilt"
uncompress_shared_libraries = true
......@@ -998,12 +985,5 @@ if (is_android) {
"//third_party/angle:libGLESv2${angle_libs_suffix}",
"//third_party/angle:libfeature_support${angle_libs_suffix}",
]
java_files = [
"android/src/com/google/android/angle/GlobalSettings.java",
"android/src/com/google/android/angle/MainActivity.java",
"android/src/com/google/android/angle/MainFragment.java",
"android/src/com/google/android/angle/Receiver.java",
]
}
}
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.angle">
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-sdk android:minSdkVersion="26"
android:targetSdkVersion="28">
</uses-sdk>
<application android:label="Android System Angle"
android:extractNativeLibs="false"
android:multiArch="true">
<activity android:name=".MainActivity"
android:label="@string/angle_preferences"
android:description="@string/angle_preferences_summary"
android:theme="@style/Theme.Settings"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.INFO"/>
</intent-filter>
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES" />
</intent-filter>
<!-- Mark this fragment as a dynamic setting in the development category. -->
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.development" />
<meta-data android:name="com.android.settings.summary" android:resource="@string/angle_preferences_summary" />
<meta-data android:name="com.android.settings.order" android:value="100" />
<meta-data android:name="com.android.settings.profile" android:value="primary_profile_only" />
</activity>
</application>
</manifest>
alanward@google.com
cnorthrop@google.com
courtneygo@google.com
ianelliott@google.com
timvp@google.com
tobine@google.com
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical">
<fragment android:name="com.google.android.angle.MainFragment"
android:id="@+id/fragment"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="PreferenceFragmentListSinglePane" parent="@*android:style/PreferenceFragmentList">
<item name="android:paddingStart">@dimen/settings_side_margin</item>
<item name="android:paddingEnd">@dimen/settings_side_margin</item>
<item name="android:layout_marginStart">0dp</item>
<item name="android:layout_marginEnd">0dp</item>
<item name="android:scrollbarStyle">outsideOverlay</item>
</style>
<style name="MultiSelectDialogStyle" parent="@style/Preference.Material">
<item name="negativeButtonText">@android:string/cancel</item>
<item name="positiveButtonText">@android:string/ok</item>
</style>
<style name="SettingsPreferenceFragmentStyle" parent="@style/PreferenceFragment.Material">
<item name="android:layout">@layout/preference_list_fragment</item>
</style>
<style name="PreferenceTheme" parent="@style/PreferenceThemeOverlay.v14.Material">
<item name="preferenceFragmentStyle">@style/SettingsPreferenceFragmentStyle</item>
<item name="dialogPreferenceStyle">@style/MultiSelectDialogStyle</item>
</style>
<style name="Theme.Settings" parent="@android:style/Theme.DeviceDefault.Settings" >
<item name="preferenceTheme">@style/PreferenceTheme</item>
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<resources>
<dimen name="settings_side_margin">0dip</dimen>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<resources>
<string name="default_driver">default</string>
<string-array name="driver_values">
<item>@string/default_driver</item>
<item>angle</item>
<item>native</item>
</string-array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<resources>
<string name="global_settings_driver_all_angle">angle_gl_driver_all_angle</string>
<string name="global_settings_driver_selection_pkgs">angle_gl_driver_selection_pkgs</string>
<string name="global_settings_driver_selection_values">angle_gl_driver_selection_values</string>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<resources>
<string name="pref_key_angle_flags_category">angle_flags_category</string>
<string name="pref_key_all_angle">all_pkgs_use_angle</string>
<string name="pref_key_select_opengl_driver_category">select_opengl_driver_category</string>
<string name="pref_key_installed_pkgs">installed_pkgs</string>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<resources>
<!-- This is the user visible name of the app and title. -->
<string name="angle_preferences">ANGLE Preferences</string>
<!-- This string is a description of what "ANGLE Preferences" is.
It is used as a subtitle or summary text to describe this ANGLE app. -->
<string name="angle_preferences_summary">Modify ANGLE settings</string>
<!-- Category title listing ANGLE flags [CHAR_LIMIT=50]-->
<string name="angle_general_title">General</string>
<!-- This is the label for a toggle button.
When the toggle is enabled, we will use ANGLE for all PKGs, regardless of any other settings.
This is also used as a Quick Settings tile label. -->
<string name="rules_file">Use ANGLE for all apps</string>
<!-- ListPreference title listing installed packages [CHAR_LIMIT=50]-->
<string name="select_opengl_driver_title">Select OpenGL Driver</string>
<!-- These are keywords that the user can use to search for this app.
'angle' should not be translated, as it is an app name. -->
<string name="keywords">angle, opengl, graphics</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 The ANGLE Project Authors. All rights reserved. Use of this
source code is governed by a BSD-style license that can be found in the
LICENSE file.
-->
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="@string/pref_key_angle_flags_category"
android:title="@string/angle_general_title">
<!--TODO : Issue 2989 : boulder-graphics-team@google.com
Enable the switch once Android can boot with ANGLE enabled for everything-->
<android.support.v14.preference.SwitchPreference
android:key="@string/pref_key_all_angle"
android:title="@string/rules_file"
android:summary="@string/global_settings_driver_all_angle"
android:defaultValue="false"
android:enabled="false"/>
</PreferenceCategory>
<PreferenceCategory
android:key="@string/pref_key_select_opengl_driver_category"
android:title="@string/select_opengl_driver_title">
</PreferenceCategory>
</android.support.v7.preference.PreferenceScreen>
/*
* Copyright 2018 The ANGLE Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
package com.google.android.angle;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.provider.Settings;
import android.util.Log;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class GlobalSettings
{
private final String TAG = this.getClass().getSimpleName();
private Context mContext;
private List<PackageInfo> mInstalledPkgs = new ArrayList<>();
private List<String> mGlobalSettingsDriverPkgs = new ArrayList<>();
private List<String> mGlobalSettingsDriverValues = new ArrayList<>();
GlobalSettings(Context context, List<PackageInfo> installedPkgs)
{
mContext = context;
setInstalledPkgs(installedPkgs);
}
Boolean getAllUseAngle()
{
ContentResolver contentResolver = mContext.getContentResolver();
try
{
int allUseAngle = Settings.Global.getInt(
contentResolver, mContext.getString(R.string.global_settings_driver_all_angle));
return (allUseAngle == 1);
}
catch (Settings.SettingNotFoundException e)
{
return false;
}
}
static void updateAllUseAngle(Context context, Boolean allUseAngle)
{
ContentResolver contentResolver = context.getContentResolver();
Settings.Global.putInt(contentResolver,
context.getString(R.string.global_settings_driver_all_angle), allUseAngle ? 1 : 0);
}
void updatePkg(String pkgName, String driver)
{
int pkgIndex = getGlobalSettingsPkgIndex(pkgName);
if (!isValidDiverValue(driver))
{
Log.e(TAG, "Attempting to update a PKG with an invalid driver: '" + driver + "'");
return;
}
String defaultDriver = mContext.getString(R.string.default_driver);
if (driver.equals(defaultDriver))
{
if (pkgIndex >= 0)
{
// We only store global settings for driver values other than the default
mGlobalSettingsDriverPkgs.remove(pkgIndex);
mGlobalSettingsDriverValues.remove(pkgIndex);
}
}
else
{
if (pkgIndex >= 0)
{
mGlobalSettingsDriverValues.set(pkgIndex, driver);
}
else
{
mGlobalSettingsDriverPkgs.add(pkgName);
mGlobalSettingsDriverValues.add(driver);
}
}
writeGlobalSettings();
}
String getDriverForPkg(String pkgName)
{
int pkgIndex = getGlobalSettingsPkgIndex(pkgName);
if (pkgIndex >= 0)
{
return mGlobalSettingsDriverValues.get(pkgIndex);
}
return null;
}
private void setInstalledPkgs(List<PackageInfo> installedPkgs)
{
mInstalledPkgs = installedPkgs;
updateGlobalSettings();
}
private void updateGlobalSettings()
{
readGlobalSettings();
validateGlobalSettings();
writeGlobalSettings();
}
private void readGlobalSettings()
{
mGlobalSettingsDriverPkgs = getGlobalSettingsString(
mContext.getString(R.string.global_settings_driver_selection_pkgs));
mGlobalSettingsDriverValues = getGlobalSettingsString(
mContext.getString(R.string.global_settings_driver_selection_values));
}
private List<String> getGlobalSettingsString(String globalSetting)
{
List<String> valueList;
ContentResolver contentResolver = mContext.getContentResolver();
String settingsValue = Settings.Global.getString(contentResolver, globalSetting);
if (settingsValue != null)
{
valueList = new ArrayList<>(Arrays.asList(settingsValue.split(",")));
}
else
{
valueList = new ArrayList<>();
}
return valueList;
}
private void writeGlobalSettings()
{
String driverPkgs = String.join(",", mGlobalSettingsDriverPkgs);
String driverValues = String.join(",", mGlobalSettingsDriverValues);
ContentResolver contentResolver = mContext.getContentResolver();
Settings.Global.putString(contentResolver,
mContext.getString(R.string.global_settings_driver_selection_pkgs), driverPkgs);
Settings.Global.putString(contentResolver,
mContext.getString(R.string.global_settings_driver_selection_values), driverValues);
}
private void validateGlobalSettings()
{
// Verify lengths
if (mGlobalSettingsDriverPkgs.size() != mGlobalSettingsDriverValues.size())
{
// The lengths don't match, so clear the values out and rebuild later.
mGlobalSettingsDriverPkgs.clear();
mGlobalSettingsDriverValues.clear();
return;
}
String defaultDriver = mContext.getString(R.string.default_driver);
// Use a temp list, since we're potentially modifying the original list.
List<String> globalSettingsDriverPkgs = new ArrayList<>(mGlobalSettingsDriverPkgs);
for (String pkgName : globalSettingsDriverPkgs)
{
// Remove any uninstalled packages.
if (!isPkgInstalled(pkgName))
{
removePkgFromGlobalSettings(pkgName);
}
// Remove any packages with invalid driver values
else if (!isValidDiverValue(getDriverForPkg(pkgName)))
{
removePkgFromGlobalSettings(pkgName);
}
// Remove any packages with the 'default' driver selected
else if (defaultDriver.equals(getDriverForPkg(pkgName)))
{
removePkgFromGlobalSettings(pkgName);
}
}
}
private void removePkgFromGlobalSettings(String pkgName)
{
int pkgIndex = getGlobalSettingsPkgIndex(pkgName);
mGlobalSettingsDriverPkgs.remove(pkgIndex);
mGlobalSettingsDriverValues.remove(pkgIndex);
}
private int getGlobalSettingsPkgIndex(String pkgName)
{
for (int pkgIndex = 0; pkgIndex < mGlobalSettingsDriverPkgs.size(); pkgIndex++)
{
if (mGlobalSettingsDriverPkgs.get(pkgIndex).equals(pkgName))
{
return pkgIndex;
}
}
return -1;
}
private Boolean isPkgInstalled(String pkgName)
{
for (PackageInfo pkg : mInstalledPkgs)
{
if (pkg.packageName.equals(pkgName))
{
return true;
}
}
return false;
}
private Boolean isValidDiverValue(String driverValue)
{
CharSequence[] drivers = mContext.getResources().getStringArray(R.array.driver_values);
for (CharSequence driver : drivers)
{
if (driverValue.equals(driver.toString()))
{
return true;
}
}
return false;
}
}
/*
* Copyright 2018 The ANGLE Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
package com.google.android.angle;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.preference.PreferenceManager;
public class MainActivity extends Activity
{
private final String TAG = this.getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment);
}
}
/*
* Copyright 2018 The ANGLE Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
package com.google.android.angle;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.os.Bundle;
import android.os.Process;
import android.support.v14.preference.PreferenceFragment;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceManager;
import android.util.Log;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
public class MainFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
{
private final String TAG = this.getClass().getSimpleName();
private static final String ACTION_REFRESH_PKGS = "com.google.android.angle.REFRESH_PKGS";
// Global.Settings value to indicate if ANGLE should be used for all PKGs.
private SharedPreferences mPrefs;
private GlobalSettings mGlobalSettings;
private Receiver mRefreshReceiver;
private SwitchPreference mAllAngleSwitchPref;
private List<PackageInfo> mInstalledPkgs = new ArrayList<>();
private List<ListPreference> mDriverListPrefs = new ArrayList<>();
SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key)
{
// Nothing to do yet
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getInstalledPkgsList();
mPrefs = PreferenceManager.getDefaultSharedPreferences(
getActivity().getApplicationContext());
validatePreferences();
mGlobalSettings = new GlobalSettings(getContext(), mInstalledPkgs);
mergeGlobalSettings();
mRefreshReceiver = new Receiver() {
@Override
public void onReceive(Context context, Intent intent)
{
getInstalledPkgsList();
}
};
String allUseAngleKey = getContext().getString(R.string.pref_key_all_angle);
Boolean allUseAngle = mPrefs.getBoolean(allUseAngleKey, false);
mAllAngleSwitchPref = (SwitchPreference) findPreference(allUseAngleKey);
mAllAngleSwitchPref.setChecked(mGlobalSettings.getAllUseAngle());
mAllAngleSwitchPref.setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference)
{
Receiver.updateAllUseAngle(getContext());
return true;
}
});
String selectDriverCatKey =
getContext().getString(R.string.pref_key_select_opengl_driver_category);
PreferenceCategory installedPkgsCat =
(PreferenceCategory) findPreference(selectDriverCatKey);
getInstalledPkgsList();
mDriverListPrefs.clear();
for (PackageInfo packageInfo : mInstalledPkgs)
{
ListPreference listPreference = new ListPreference(getActivity());
initListPreference(packageInfo, listPreference);
installedPkgsCat.addPreference(listPreference);
}
}
@Override
public void onResume()
{
super.onResume();
getActivity().registerReceiver(mRefreshReceiver, new IntentFilter(ACTION_REFRESH_PKGS));
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(
listener);
}
@Override
public void onPause()
{
getActivity().unregisterReceiver(mRefreshReceiver);
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
listener);
super.onPause();
}
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
{
addPreferencesFromResource(R.xml.main);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
Log.v(TAG, "Shared preference changed: key = '" + key + "'");
}
private void validatePreferences()
{
Map<String, ?> allPrefs = mPrefs.getAll();
// Remove Preference values for any uninstalled PKGs
for (String key : allPrefs.keySet())
{
// Remove any uninstalled PKGs
PackageInfo packageInfo = getPackageInfoForPackageName(key);
if (packageInfo != null)
{
removePkgPreference(key);
}
}
}
private void getInstalledPkgsList()
{
List<PackageInfo> pkgs = getActivity().getPackageManager().getInstalledPackages(0);
mInstalledPkgs.clear();
for (PackageInfo packageInfo : pkgs)
{
if (packageInfo.applicationInfo.uid == Process.SYSTEM_UID)
{
continue;
}
// Filter out apps that are system apps
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
{
continue;
}
mInstalledPkgs.add(packageInfo);
}
Collections.sort(mInstalledPkgs, displayNameComparator);
}
private final Comparator<PackageInfo> displayNameComparator = new Comparator<PackageInfo>() {
public final int compare(PackageInfo a, PackageInfo b)
{
return collator.compare(getAppName(a), getAppName(b));
}
private final Collator collator = Collator.getInstance();
};
private String getAppName(PackageInfo packageInfo)
{
return packageInfo.applicationInfo.loadLabel(getActivity().getPackageManager()).toString();
}
private void initListPreference(PackageInfo packageInfo, ListPreference listPreference)
{
CharSequence[] drivers = getResources().getStringArray(R.array.driver_values);
listPreference.setEntryValues(drivers);
listPreference.setEntries(drivers);
String defaultDriver = getContext().getString(R.string.default_driver);
listPreference.setDefaultValue(defaultDriver);
String dialogTitleKey = getContext().getString(R.string.select_opengl_driver_title);
listPreference.setDialogTitle(dialogTitleKey);
listPreference.setKey(packageInfo.packageName);
listPreference.setTitle(getAppName(packageInfo));
listPreference.setSummary(mPrefs.getString(packageInfo.packageName, defaultDriver));
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
ListPreference listPreference = (ListPreference) preference;
listPreference.setSummary(newValue.toString());
mGlobalSettings.updatePkg(preference.getKey(), newValue.toString());
return true;
}
});
mDriverListPrefs.add(listPreference);
}
private void removePkgPreference(String key)
{
SharedPreferences.Editor editor = mPrefs.edit();
editor.remove(key);
editor.apply();
for (ListPreference listPreference : mDriverListPrefs)
{
if (listPreference.getKey().equals(key))
{
mDriverListPrefs.remove(listPreference);
}
}
}
private PackageInfo getPackageInfoForPackageName(String pkgName)
{
PackageInfo foundPackageInfo = null;
for (PackageInfo packageInfo : mInstalledPkgs)
{
if (pkgName.equals(getAppName(packageInfo)))
{
foundPackageInfo = packageInfo;
break;
}
}
return foundPackageInfo;
}
private void mergeGlobalSettings()
{
SharedPreferences.Editor editor = mPrefs.edit();
for (PackageInfo packageInfo : mInstalledPkgs)
{
String driver = mGlobalSettings.getDriverForPkg(packageInfo.packageName);
if (driver != null)
{
editor.putString(packageInfo.packageName, driver);
}
}
editor.apply();
}
}
/*
* Copyright 2018 The ANGLE Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
package com.google.android.angle;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
public class Receiver extends BroadcastReceiver
{
private final static String TAG = Receiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent)
{
// Nothing to do yet...
}
static void updateAllUseAngle(Context context)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String allUseAngleKey = context.getString(R.string.pref_key_all_angle);
boolean allUseAngle = prefs.getBoolean(allUseAngleKey, false);
GlobalSettings.updateAllUseAngle(context, allUseAngle);
Log.v(TAG, "Use Rules File set to: " + allUseAngle);
}
}
......@@ -7,7 +7,6 @@ R"=====({"Rules":
"AppChoice" : true, "NonChoice" : true,
"Applications" :
[
{"AppName" : "com.android.angle"},
{"AppName" : "com.google.android.apps.internal.cubey"},
{"AppName" : "com.android.gl2jni"}
],
......
......@@ -892,11 +892,11 @@ ANGLE_EXPORT bool ANGLEUseForApplication(const char *appName,
RuleList *rules = RuleList::ReadRulesFromJsonString(jsonFileContents);
rules->logRules();
if (developerOption != ANGLE_PREFER_DEFAULT)
if (developerOption != ANGLE_NO_PREFERENCE)
{
rtn = (developerOption == ANGLE_PREFER_ANGLE);
}
else if ((appPreference != ANGLE_PREFER_DEFAULT) && rules->getAppChoice(scenario))
else if ((appPreference != ANGLE_NO_PREFERENCE) && rules->getAppChoice(scenario))
{
rtn = (appPreference == ANGLE_PREFER_ANGLE);
}
......
......@@ -27,9 +27,9 @@ constexpr unsigned int kFeatureVersion_HighestSupported = 1;
// strongly typed, and look at renaming it and its values.
typedef enum ANGLEPreference
{
ANGLE_PREFER_DEFAULT = 0,
ANGLE_PREFER_NATIVE = 1,
ANGLE_PREFER_ANGLE = 2,
ANGLE_NO_PREFERENCE = 0,
ANGLE_PREFER_NATIVE = 1,
ANGLE_PREFER_ANGLE = 2,
} ANGLEPreference;
// The Android EGL loader will call this function in order to determine whether
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment