Allow extras to be passed to app info subscreens

And pass though some extras through to notification settings.

This enables us to highlight appropriate preferences on the
subscreens while still funneling users through the app info
screen.

Test: make RunSettingsRoboTests
Bug: 72764587
Change-Id: I0197b595fe4bf3504588d9dd2985dd20de73c640
This commit is contained in:
Julia Reynolds
2018-02-12 16:47:59 -05:00
parent 49c8080a50
commit bf3e2243ef
7 changed files with 108 additions and 6 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settings.applications.appinfo;
import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.ARG_PACKAGE_NAME;
import static com.android.settings.applications.appinfo.AppInfoDashboardFragment
.UNINSTALL_ALL_USERS_MENU;
import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.UNINSTALL_UPDATES;
@@ -23,6 +24,8 @@ import static com.android.settings.applications.appinfo.AppInfoDashboardFragment
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
@@ -33,18 +36,19 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.Bundle;
import android.os.UserManager;
import android.view.Menu;
import android.view.MenuItem;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
@@ -57,6 +61,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
@@ -315,4 +320,37 @@ public final class AppInfoDashboardFragmentTest {
verify(context).unregisterReceiver(mFragment.mPackageRemovedReceiver);
}
@Test
public void startAppInfoFragment_noCrashOnNullArgs() {
final SettingsPreferenceFragment caller = mock(SettingsPreferenceFragment.class);
final SettingsActivity sa = mock (SettingsActivity.class);
when(caller.getActivity()).thenReturn(sa);
final AppEntry appEntry = mock(AppEntry.class);
appEntry.info = mock(ApplicationInfo.class);
AppInfoDashboardFragment.startAppInfoFragment(AppInfoDashboardFragment.class, 0, null,
caller, appEntry);
}
@Test
public void startAppInfoFragment_includesNewAndOldArgs() {
final SettingsPreferenceFragment caller = mock(SettingsPreferenceFragment.class);
final SettingsActivity sa = mock (SettingsActivity.class);
when(caller.getActivity()).thenReturn(sa);
final AppEntry appEntry = mock(AppEntry.class);
appEntry.info = mock(ApplicationInfo.class);
final Bundle bundle = new Bundle();
bundle.putString("test", "test");
AppInfoDashboardFragment.startAppInfoFragment(AppInfoDashboardFragment.class, 0, bundle,
caller, appEntry);
final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
verify(sa).startPreferencePanel(any(), anyString(), captor.capture(), anyInt(), any(),
any(), anyInt());
assertThat(captor.getValue().containsKey("test"));
assertThat(captor.getValue().containsKey(ARG_PACKAGE_NAME));
}
}

View File

@@ -26,6 +26,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -39,6 +40,7 @@ import com.android.settingslib.applications.ApplicationsState;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
@@ -90,9 +92,12 @@ public class AppInfoPreferenceControllerBaseTest {
mController.handlePreferenceTreeClick(mPreference);
ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
verify(mActivity).startPreferencePanel(any(),
eq(mController.getDetailFragmentClass().getName()), any(), anyInt(), any(), any(),
anyInt());
eq(mController.getDetailFragmentClass().getName()), captor.capture(), anyInt(),
any(), any(), anyInt());
assertThat(captor.getValue().containsKey("test"));
}
private class TestPreferenceController extends AppInfoPreferenceControllerBase {
@@ -113,6 +118,13 @@ public class AppInfoPreferenceControllerBaseTest {
return AppNotificationSettings.class;
}
@Override
protected Bundle getArguments() {
Bundle bundle = new Bundle();
bundle.putString("test", "test");
return bundle;
}
}
}

View File

@@ -16,6 +16,8 @@
package com.android.settings.applications.appinfo;
import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -24,7 +26,9 @@ 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.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -87,4 +91,22 @@ public class AppNotificationPreferenceControllerTest {
verify(mPreference).setSummary(any());
}
@Test
public void getArguments_nullIfChannelIsNull() {
assertThat(mController.getArguments()).isNull();
}
@Test
public void getArguments_containsChannelId() {
Activity activity = mock(Activity.class);
Intent intent = new Intent();
intent.putExtra(EXTRA_FRAGMENT_ARG_KEY, "test");
when(mFragment.getActivity()).thenReturn(activity);
when(activity.getIntent()).thenReturn(intent);
AppNotificationPreferenceController controller =
new AppNotificationPreferenceController(mContext, mFragment);
assertThat(controller.getArguments().containsKey(EXTRA_FRAGMENT_ARG_KEY)).isTrue();
assertThat(controller.getArguments().getString(EXTRA_FRAGMENT_ARG_KEY)).isEqualTo("test");
}
}