From 50f700f1d63da8e314a401289574d8b6949b6c7c Mon Sep 17 00:00:00 2001 From: Tim Van Patten Date: Fri, 9 Nov 2018 17:09:44 -0700 Subject: [PATCH] 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. The settings are also being moved from within the Android settings (here) to the ANGLE APK, so they can be updated more quickly/easily. Bug: 118384925 Test: Verify the default/ANGLE/native values are saved and applied and used by the loader. Change-Id: Ide449704dd703657bd316231987a07becf8699c9 --- res/xml/development_settings.xml | 3 - .../AngleEnabledAppPreferenceController.java | 119 --------------- ...evelopmentOptionsActivityRequestCodes.java | 8 +- .../DevelopmentSettingsDashboardFragment.java | 1 - ...gleEnabledAppPreferenceControllerTest.java | 138 ------------------ 5 files changed, 6 insertions(+), 263 deletions(-) delete mode 100644 src/com/android/settings/development/AngleEnabledAppPreferenceController.java delete mode 100644 tests/robotests/src/com/android/settings/development/AngleEnabledAppPreferenceControllerTest.java diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml index a0f019d3ff3..be45cd09f51 100644 --- a/res/xml/development_settings.xml +++ b/res/xml/development_settings.xml @@ -424,9 +424,6 @@ android:summary="%s" android:title="@string/simulate_color_space" /> - - diff --git a/src/com/android/settings/development/AngleEnabledAppPreferenceController.java b/src/com/android/settings/development/AngleEnabledAppPreferenceController.java deleted file mode 100644 index 3a7f6bf3a0f..00000000000 --- a/src/com/android/settings/development/AngleEnabledAppPreferenceController.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2018 The Android 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.android.settings.development; - -import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes - .REQUEST_CODE_ANGLE_ENABLED_APP; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.provider.Settings; -import androidx.annotation.VisibleForTesting; -import androidx.preference.Preference; - -import com.android.settings.R; -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settingslib.development.DeveloperOptionsPreferenceController; - -public class AngleEnabledAppPreferenceController extends DeveloperOptionsPreferenceController - implements PreferenceControllerMixin, OnActivityResultListener { - - private static final String ANGLE_ENABLED_APP_KEY = "angle_enabled_app"; - - private final DevelopmentSettingsDashboardFragment mFragment; - private final PackageManager mPackageManager; - - public AngleEnabledAppPreferenceController(Context context, - DevelopmentSettingsDashboardFragment fragment) { - super(context); - mFragment = fragment; - mPackageManager = mContext.getPackageManager(); - } - - @Override - public String getPreferenceKey() { - return ANGLE_ENABLED_APP_KEY; - } - - @Override - public boolean handlePreferenceTreeClick(Preference preference) { - if (ANGLE_ENABLED_APP_KEY.equals(preference.getKey())) { - // pass it on to settings - final Intent intent = getActivityStartIntent(); - mFragment.startActivityForResult(intent, REQUEST_CODE_ANGLE_ENABLED_APP); - return true; - } - return false; - } - - @Override - public void updateState(Preference preference) { - updatePreferenceSummary(); - } - - @Override - public boolean onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode != REQUEST_CODE_ANGLE_ENABLED_APP || resultCode != Activity.RESULT_OK) { - return false; - } - Settings.Global.putString(mContext.getContentResolver(), Settings.Global.ANGLE_ENABLED_APP, - data.getAction()); - updatePreferenceSummary(); - return true; - } - - @Override - protected void onDeveloperOptionsSwitchDisabled() { - super.onDeveloperOptionsSwitchDisabled(); - mPreference.setSummary(mContext.getResources().getString( - R.string.angle_enabled_app_not_set)); - } - - @VisibleForTesting - Intent getActivityStartIntent() { - Intent intent = new Intent(mContext, AppPicker.class); - intent.putExtra(AppPicker.EXTRA_NON_SYSTEM, true /* value */); - return intent; - } - - private void updatePreferenceSummary() { - final String angleEnabledApp = Settings.Global.getString( - mContext.getContentResolver(), Settings.Global.ANGLE_ENABLED_APP); - if (angleEnabledApp != null && angleEnabledApp.length() > 0) { - mPreference.setSummary(mContext.getResources().getString( - R.string.angle_enabled_app_set, - getAppLabel(angleEnabledApp))); - } else { - mPreference.setSummary(mContext.getResources().getString( - R.string.angle_enabled_app_not_set)); - } - } - - private String getAppLabel(String angleEnabledApp) { - try { - final ApplicationInfo ai = mPackageManager.getApplicationInfo(angleEnabledApp, - PackageManager.GET_DISABLED_COMPONENTS); - final CharSequence lab = mPackageManager.getApplicationLabel(ai); - return lab != null ? lab.toString() : angleEnabledApp; - } catch (PackageManager.NameNotFoundException e) { - return angleEnabledApp; - } - } -} diff --git a/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java b/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java index 3532a155c5f..e65d2ad69cf 100644 --- a/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java +++ b/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java @@ -26,7 +26,11 @@ public interface DevelopmentOptionsActivityRequestCodes { int REQUEST_MOCK_LOCATION_APP = 2; - int REQUEST_CODE_ANGLE_ENABLED_APP = 3; + int REQUEST_CODE_ANGLE_ALL_USE_ANGLE = 3; - int REQUEST_CODE_UPDATED_GFX_DRIVER_DEV_OPT_IN_APP = 4; + int REQUEST_CODE_ANGLE_DRIVER_PKGS = 4; + + int REQUEST_CODE_ANGLE_DRIVER_VALUES = 5; + + int REQUEST_CODE_UPDATED_GFX_DRIVER_DEV_OPT_IN_APP = 6; } diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index 4ddcc364c6d..aa9918ce436 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -423,7 +423,6 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra controllers.add(new SelectDebugAppPreferenceController(context, fragment)); controllers.add(new WaitForDebuggerPreferenceController(context)); controllers.add(new EnableGpuDebugLayersPreferenceController(context)); - controllers.add(new AngleEnabledAppPreferenceController(context, fragment)); controllers.add(new UpdatedGfxDriverDevOptInPreferenceController(context, fragment)); controllers.add(new VerifyAppsOverUsbPreferenceController(context)); controllers.add(new LogdSizePreferenceController(context)); diff --git a/tests/robotests/src/com/android/settings/development/AngleEnabledAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/AngleEnabledAppPreferenceControllerTest.java deleted file mode 100644 index 03837c2c143..00000000000 --- a/tests/robotests/src/com/android/settings/development/AngleEnabledAppPreferenceControllerTest.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2018 The Android 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.android.settings.development; - -import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes.REQUEST_CODE_ANGLE_ENABLED_APP; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.app.Activity; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.provider.Settings; - -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.util.ReflectionHelpers; - -@RunWith(SettingsRobolectricTestRunner.class) -public class AngleEnabledAppPreferenceControllerTest { - - @Mock - private Preference mPreference; - @Mock - private PreferenceScreen mPreferenceScreen; - @Mock - private DevelopmentSettingsDashboardFragment mFragment; - @Mock - private PackageManager mPackageManager; - - private Context mContext; - private AngleEnabledAppPreferenceController mController; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mController = spy(new AngleEnabledAppPreferenceController(mContext, mFragment)); - ReflectionHelpers - .setField(mController, "mPackageManager" /* field name */, mPackageManager); - when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) - .thenReturn(mPreference); - mController.displayPreference(mPreferenceScreen); - } - - @Test - public void handlePreferenceTreeClick_preferenceClicked_launchActivity() { - final Intent activityStartIntent = new Intent(mContext, AppPicker.class); - final String preferenceKey = mController.getPreferenceKey(); - doReturn(activityStartIntent).when(mController).getActivityStartIntent(); - when(mPreference.getKey()).thenReturn(preferenceKey); - mController.handlePreferenceTreeClick(mPreference); - - verify(mFragment).startActivityForResult(activityStartIntent, - REQUEST_CODE_ANGLE_ENABLED_APP); - } - - @Test - public void updateState_foobarAppSelected_shouldUpdateSummaryWithAngleEnabledAppLabel() { - final String angleEnabledApp = "foobar"; - final ContentResolver contentResolver = mContext.getContentResolver(); - Settings.Global.putString(contentResolver, Settings.Global.ANGLE_ENABLED_APP, - angleEnabledApp); - mController.updateState(mPreference); - - verify(mPreference).setSummary( - mContext.getString(R.string.angle_enabled_app_set, angleEnabledApp)); - } - - @Test - public void updateState_noAppSelected_shouldUpdateSummaryWithNoAppSelected() { - final String angleEnabledApp = null; - final ContentResolver contentResolver = mContext.getContentResolver(); - Settings.Global.putString(contentResolver, Settings.Global.ANGLE_ENABLED_APP, - angleEnabledApp); - mController.updateState(mPreference); - - verify(mPreference).setSummary( - mContext.getString(R.string.angle_enabled_app_not_set)); - } - - @Test - public void onActivityResult_foobarAppSelected_shouldUpdateSummaryWithAngleEnabledLabel() { - Intent activityResultIntent = new Intent(mContext, AppPicker.class); - final String appLabel = "foobar"; - activityResultIntent.setAction(appLabel); - final boolean result = mController - .onActivityResult(REQUEST_CODE_ANGLE_ENABLED_APP, Activity.RESULT_OK, - activityResultIntent); - - assertThat(result).isTrue(); - verify(mPreference).setSummary( - mContext.getString(R.string.angle_enabled_app_set, appLabel)); - } - - @Test - public void onActivityResult_badRequestCode_shouldReturnFalse() { - assertThat(mController.onActivityResult( - -1 /* requestCode */, -1 /* resultCode */, null /* intent */)).isFalse(); - } - - @Test - public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() { - mController.onDeveloperOptionsSwitchDisabled(); - - assertThat(mPreference.isEnabled()).isFalse(); - verify(mPreference).setSummary( - mContext.getString(R.string.angle_enabled_app_not_set)); - } -}