Loading src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java +23 −12 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp private Intent mAppLaunchIntent; private ApplicationsState.Session mSession; private RestrictedLockUtils.EnforcedAdmin mAppsControlDisallowedAdmin; private PreferenceScreen mScreen; private boolean mUpdatedSysApp = false; private boolean mListeningToPackageRemove = false; Loading Loading @@ -167,19 +168,9 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mScreen = screen; if (isAvailable()) { mButtonsPref = ((ActionButtonsPreference) screen.findPreference( KEY_ACTION_BUTTONS)) .setButton1Text(R.string.launch_instant_app) .setButton1Icon(R.drawable.ic_settings_open) .setButton1OnClickListener(v -> launchApplication()) .setButton2Text(R.string.uninstall_text) .setButton2Icon(R.drawable.ic_settings_delete) .setButton2OnClickListener(new UninstallAndDisableButtonListener()) .setButton3Text(R.string.force_stop) .setButton3Icon(R.drawable.ic_settings_force_stop) .setButton3OnClickListener(new ForceStopButtonListener()) .setButton3Enabled(false); initButtonPreference(); } } Loading Loading @@ -663,6 +654,11 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp } } // When the app was installed from instant state, buttons preferences could be null. if (mButtonsPref == null) { initButtonPreference(); mButtonsPref.setVisible(true); } updateOpenButton(); updateUninstallButton(); updateForceStopButton(); Loading @@ -670,6 +666,21 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp return true; } private void initButtonPreference() { mButtonsPref = ((ActionButtonsPreference) mScreen.findPreference( KEY_ACTION_BUTTONS)) .setButton1Text(R.string.launch_instant_app) .setButton1Icon(R.drawable.ic_settings_open) .setButton1OnClickListener(v -> launchApplication()) .setButton2Text(R.string.uninstall_text) .setButton2Icon(R.drawable.ic_settings_delete) .setButton2OnClickListener(new UninstallAndDisableButtonListener()) .setButton3Text(R.string.force_stop) .setButton3Icon(R.drawable.ic_settings_force_stop) .setButton3OnClickListener(new ForceStopButtonListener()) .setButton3Enabled(false); } private void startListeningToPackageRemove() { if (mListeningToPackageRemove) { return; Loading tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ import android.os.UserManager; import android.util.ArraySet; import android.view.View; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; Loading Loading @@ -116,6 +118,8 @@ public class AppButtonsPreferenceControllerTest { private UserManager mUserManager; @Mock private PackageInfo mPackageInfo; @Mock private PreferenceScreen mScreen; private Context mContext; private Intent mUninstallIntent; Loading Loading @@ -471,6 +475,20 @@ public class AppButtonsPreferenceControllerTest { assertThat(mController.refreshUi()).isFalse(); } @Test public void refreshUi_buttonPreferenceNull_shouldNotCrash() throws PackageManager.NameNotFoundException { doReturn(AppButtonsPreferenceController.AVAILABLE) .when(mController).getAvailabilityStatus(); doReturn(mPackageInfo).when(mPackageManger).getPackageInfo(anyString(), anyInt()); doReturn(mButtonPrefs).when(mScreen).findPreference(anyString()); mController.displayPreference(mScreen); mController.mButtonsPref = null; // Should not crash in this method assertThat(mController.refreshUi()).isTrue(); } @Test public void onPackageListChanged_available_shouldRefreshUi() { doReturn(AppButtonsPreferenceController.AVAILABLE) Loading Loading @@ -545,11 +563,19 @@ public class AppButtonsPreferenceControllerTest { private ActionButtonsPreference createMock() { final ActionButtonsPreference pref = mock(ActionButtonsPreference.class); when(pref.setButton1Text(anyInt())).thenReturn(pref); when(pref.setButton1Icon(anyInt())).thenReturn(pref); when(pref.setButton1Enabled(anyBoolean())).thenReturn(pref); when(pref.setButton1OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); when(pref.setButton2Text(anyInt())).thenReturn(pref); when(pref.setButton2Icon(anyInt())).thenReturn(pref); when(pref.setButton2Enabled(anyBoolean())).thenReturn(pref); when(pref.setButton2Visible(anyBoolean())).thenReturn(pref); when(pref.setButton2OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); when(pref.setButton3Text(anyInt())).thenReturn(pref); when(pref.setButton3Icon(anyInt())).thenReturn(pref); when(pref.setButton3Enabled(anyBoolean())).thenReturn(pref); when(pref.setButton3OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); return pref; } Loading Loading
src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java +23 −12 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp private Intent mAppLaunchIntent; private ApplicationsState.Session mSession; private RestrictedLockUtils.EnforcedAdmin mAppsControlDisallowedAdmin; private PreferenceScreen mScreen; private boolean mUpdatedSysApp = false; private boolean mListeningToPackageRemove = false; Loading Loading @@ -167,19 +168,9 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mScreen = screen; if (isAvailable()) { mButtonsPref = ((ActionButtonsPreference) screen.findPreference( KEY_ACTION_BUTTONS)) .setButton1Text(R.string.launch_instant_app) .setButton1Icon(R.drawable.ic_settings_open) .setButton1OnClickListener(v -> launchApplication()) .setButton2Text(R.string.uninstall_text) .setButton2Icon(R.drawable.ic_settings_delete) .setButton2OnClickListener(new UninstallAndDisableButtonListener()) .setButton3Text(R.string.force_stop) .setButton3Icon(R.drawable.ic_settings_force_stop) .setButton3OnClickListener(new ForceStopButtonListener()) .setButton3Enabled(false); initButtonPreference(); } } Loading Loading @@ -663,6 +654,11 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp } } // When the app was installed from instant state, buttons preferences could be null. if (mButtonsPref == null) { initButtonPreference(); mButtonsPref.setVisible(true); } updateOpenButton(); updateUninstallButton(); updateForceStopButton(); Loading @@ -670,6 +666,21 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp return true; } private void initButtonPreference() { mButtonsPref = ((ActionButtonsPreference) mScreen.findPreference( KEY_ACTION_BUTTONS)) .setButton1Text(R.string.launch_instant_app) .setButton1Icon(R.drawable.ic_settings_open) .setButton1OnClickListener(v -> launchApplication()) .setButton2Text(R.string.uninstall_text) .setButton2Icon(R.drawable.ic_settings_delete) .setButton2OnClickListener(new UninstallAndDisableButtonListener()) .setButton3Text(R.string.force_stop) .setButton3Icon(R.drawable.ic_settings_force_stop) .setButton3OnClickListener(new ForceStopButtonListener()) .setButton3Enabled(false); } private void startListeningToPackageRemove() { if (mListeningToPackageRemove) { return; Loading
tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ import android.os.UserManager; import android.util.ArraySet; import android.view.View; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; Loading Loading @@ -116,6 +118,8 @@ public class AppButtonsPreferenceControllerTest { private UserManager mUserManager; @Mock private PackageInfo mPackageInfo; @Mock private PreferenceScreen mScreen; private Context mContext; private Intent mUninstallIntent; Loading Loading @@ -471,6 +475,20 @@ public class AppButtonsPreferenceControllerTest { assertThat(mController.refreshUi()).isFalse(); } @Test public void refreshUi_buttonPreferenceNull_shouldNotCrash() throws PackageManager.NameNotFoundException { doReturn(AppButtonsPreferenceController.AVAILABLE) .when(mController).getAvailabilityStatus(); doReturn(mPackageInfo).when(mPackageManger).getPackageInfo(anyString(), anyInt()); doReturn(mButtonPrefs).when(mScreen).findPreference(anyString()); mController.displayPreference(mScreen); mController.mButtonsPref = null; // Should not crash in this method assertThat(mController.refreshUi()).isTrue(); } @Test public void onPackageListChanged_available_shouldRefreshUi() { doReturn(AppButtonsPreferenceController.AVAILABLE) Loading Loading @@ -545,11 +563,19 @@ public class AppButtonsPreferenceControllerTest { private ActionButtonsPreference createMock() { final ActionButtonsPreference pref = mock(ActionButtonsPreference.class); when(pref.setButton1Text(anyInt())).thenReturn(pref); when(pref.setButton1Icon(anyInt())).thenReturn(pref); when(pref.setButton1Enabled(anyBoolean())).thenReturn(pref); when(pref.setButton1OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); when(pref.setButton2Text(anyInt())).thenReturn(pref); when(pref.setButton2Icon(anyInt())).thenReturn(pref); when(pref.setButton2Enabled(anyBoolean())).thenReturn(pref); when(pref.setButton2Visible(anyBoolean())).thenReturn(pref); when(pref.setButton2OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); when(pref.setButton3Text(anyInt())).thenReturn(pref); when(pref.setButton3Icon(anyInt())).thenReturn(pref); when(pref.setButton3Enabled(anyBoolean())).thenReturn(pref); when(pref.setButton3OnClickListener(any(View.OnClickListener.class))).thenReturn(pref); return pref; } Loading