Loading src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryController.java +20 −0 Original line number Diff line number Diff line Loading @@ -18,11 +18,31 @@ package com.android.settings.applications.appinfo; import android.content.Context; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; public class AdvancedAppInfoPreferenceCategoryController extends PreferenceCategoryController { private ApplicationsState.AppEntry mAppEntry; public AdvancedAppInfoPreferenceCategoryController(Context context, String key) { super(context, key); } @Override public void displayPreference(PreferenceScreen screen) { Preference preference = screen.findPreference(getPreferenceKey()); if (preference != null && !AppUtils.isAppInstalled(mAppEntry)) { preference.setEnabled(false); } super.displayPreference(screen); } public void setAppEntry(ApplicationsState.AppEntry appEntry) { mAppEntry = appEntry; } } src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java 100755 → 100644 +5 −3 Original line number Diff line number Diff line Loading @@ -215,9 +215,11 @@ public class AppInfoDashboardFragment extends DashboardFragment alarmsAndReminders.setPackageName(packageName); alarmsAndReminders.setParentFragment(this); use(AdvancedAppInfoPreferenceCategoryController.class).setChildren(Arrays.asList( writeSystemSettings, drawOverlay, pip, externalSource, acrossProfiles, alarmsAndReminders)); final AdvancedAppInfoPreferenceCategoryController advancedAppInfo = use(AdvancedAppInfoPreferenceCategoryController.class); advancedAppInfo.setChildren(Arrays.asList(writeSystemSettings, drawOverlay, pip, externalSource, acrossProfiles, alarmsAndReminders)); advancedAppInfo.setAppEntry(mAppEntry); final AppLocalePreferenceController appLocale = use(AppLocalePreferenceController.class); Loading tests/robotests/src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryControllerTest.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 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.applications.appinfo; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ApplicationInfo; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settingslib.applications.ApplicationsState; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class AdvancedAppInfoPreferenceCategoryControllerTest { @Mock private PreferenceScreen mPreferenceScreen; private Preference mPreference; private AdvancedAppInfoPreferenceCategoryController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); Context context = spy(RuntimeEnvironment.application); String preferenceKey = "preference_key"; mPreference = spy(new Preference(context)); mController = spy(new AdvancedAppInfoPreferenceCategoryController(context, preferenceKey)); when(mPreferenceScreen.findPreference(preferenceKey)).thenReturn(mPreference); } @Test public void displayPreference_shouldNotBeEnabledWhenAppIsUninstalledForUser() { final ApplicationInfo info = new ApplicationInfo(); info.flags = 0; final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); appEntry.info = info; mController.setAppEntry(appEntry); mController.displayPreference(mPreferenceScreen); assertThat(mPreference.isEnabled()).isFalse(); } } Loading
src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryController.java +20 −0 Original line number Diff line number Diff line Loading @@ -18,11 +18,31 @@ package com.android.settings.applications.appinfo; import android.content.Context; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; public class AdvancedAppInfoPreferenceCategoryController extends PreferenceCategoryController { private ApplicationsState.AppEntry mAppEntry; public AdvancedAppInfoPreferenceCategoryController(Context context, String key) { super(context, key); } @Override public void displayPreference(PreferenceScreen screen) { Preference preference = screen.findPreference(getPreferenceKey()); if (preference != null && !AppUtils.isAppInstalled(mAppEntry)) { preference.setEnabled(false); } super.displayPreference(screen); } public void setAppEntry(ApplicationsState.AppEntry appEntry) { mAppEntry = appEntry; } }
src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java 100755 → 100644 +5 −3 Original line number Diff line number Diff line Loading @@ -215,9 +215,11 @@ public class AppInfoDashboardFragment extends DashboardFragment alarmsAndReminders.setPackageName(packageName); alarmsAndReminders.setParentFragment(this); use(AdvancedAppInfoPreferenceCategoryController.class).setChildren(Arrays.asList( writeSystemSettings, drawOverlay, pip, externalSource, acrossProfiles, alarmsAndReminders)); final AdvancedAppInfoPreferenceCategoryController advancedAppInfo = use(AdvancedAppInfoPreferenceCategoryController.class); advancedAppInfo.setChildren(Arrays.asList(writeSystemSettings, drawOverlay, pip, externalSource, acrossProfiles, alarmsAndReminders)); advancedAppInfo.setAppEntry(mAppEntry); final AppLocalePreferenceController appLocale = use(AppLocalePreferenceController.class); Loading
tests/robotests/src/com/android/settings/applications/appinfo/AdvancedAppInfoPreferenceCategoryControllerTest.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 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.applications.appinfo; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ApplicationInfo; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settingslib.applications.ApplicationsState; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class AdvancedAppInfoPreferenceCategoryControllerTest { @Mock private PreferenceScreen mPreferenceScreen; private Preference mPreference; private AdvancedAppInfoPreferenceCategoryController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); Context context = spy(RuntimeEnvironment.application); String preferenceKey = "preference_key"; mPreference = spy(new Preference(context)); mController = spy(new AdvancedAppInfoPreferenceCategoryController(context, preferenceKey)); when(mPreferenceScreen.findPreference(preferenceKey)).thenReturn(mPreference); } @Test public void displayPreference_shouldNotBeEnabledWhenAppIsUninstalledForUser() { final ApplicationInfo info = new ApplicationInfo(); info.flags = 0; final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); appEntry.info = info; mController.setAppEntry(appEntry); mController.displayPreference(mPreferenceScreen); assertThat(mPreference.isEnabled()).isFalse(); } }