Snap for 5060940 from 04434eb662 to qt-release

Change-Id: Idcb9cc1666b0697edf6a017f48b29dc19715230e
This commit is contained in:
android-build-team Robot
2018-10-11 03:11:35 +00:00
34 changed files with 196 additions and 219 deletions

View File

@@ -41,6 +41,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \
androidx.lifecycle_lifecycle-extensions \
guava \
jsr305 \
settings-contextual-card-protos-lite \
contextualcards \
settings-logtags \

Binary file not shown.

8
protos/Android.bp Normal file
View File

@@ -0,0 +1,8 @@
java_library_static {
name: "settings-contextual-card-protos-lite",
host_supported: true,
proto: {
type: "lite",
},
srcs: ["contextual_card_list.proto"],
}

View File

@@ -0,0 +1,19 @@
syntax = "proto2";
package com.android.settings.intelligence;
option java_outer_classname = "ContextualCardProto";
message ContextualCardList {
repeated ContextualCard card = 1;
}
message ContextualCard {
// Slice uri of the contextual card
optional string sliceUri = 1;
// {@link ContextualCardCategory}.
optional int32 category = 2;
// Name of the card. It should be identical in every app
optional string cardName = 3;
}

View File

@@ -10088,7 +10088,7 @@
<string name="homepage_all_settings">All Settings</string>
<!-- Homepage bottom menu. Title for display personalized Settings [CHAR LIMIT=30] -->
<string name="homepage_personal_settings">Your Settings</string>
<string name="homepage_personal_settings">Suggestions</string>
<!-- Setting Checkbox title whether to enable CBRS data. [CHAR LIMIT=40] -->
<string name="cbrs_data_switch">CBRS Data</string>

View File

@@ -46,10 +46,17 @@ public class MonitoringCertInfoActivity extends Activity implements OnClickListe
mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
final UserHandle user;
if (mUserId == UserHandle.USER_NULL) {
user = null;
} else {
user = UserHandle.of(mUserId);
}
DevicePolicyManager dpm = getSystemService(DevicePolicyManager.class);
final int numberOfCertificates = getIntent().getIntExtra(
Settings.EXTRA_NUMBER_OF_CERTIFICATES, 1);
final int titleId = RestrictedLockUtils.getProfileOrDeviceOwner(this, mUserId) != null
final int titleId = RestrictedLockUtils.getProfileOrDeviceOwner(this, user) != null
? R.plurals.ssl_ca_cert_settings_button // Check certificate
: R.plurals.ssl_ca_cert_dialog_title; // Trust or remove certificate
final CharSequence title = getResources().getQuantityText(titleId, numberOfCertificates);

View File

@@ -222,8 +222,8 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
public EnforcedAdmin getRestrictionEnforcedAdmin() {
mEnforcedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(getActivity(),
mRestrictionKey, UserHandle.myUserId());
if (mEnforcedAdmin != null && mEnforcedAdmin.userId == UserHandle.USER_NULL) {
mEnforcedAdmin.userId = UserHandle.myUserId();
if (mEnforcedAdmin != null && mEnforcedAdmin.user == null) {
mEnforcedAdmin.user = UserHandle.of(UserHandle.myUserId());
}
return mEnforcedAdmin;
}

View File

@@ -229,7 +229,7 @@ class TrustedCredentialsDialogBuilder extends AlertDialog.Builder {
&& !mDpm.isCaCertApproved(certHolder.getAlias(), certHolder.getUserId());
final boolean isProfileOrDeviceOwner = RestrictedLockUtils.getProfileOrDeviceOwner(
mActivity, certHolder.getUserId()) != null;
mActivity, UserHandle.of(certHolder.getUserId())) != null;
// Show trust button only when it requires consumer user (non-PO/DO) to approve
CharSequence displayText = mActivity.getText(!isProfileOrDeviceOwner && mNeedsApproval

View File

@@ -14,9 +14,9 @@
package com.android.settings.applications.autofill;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.view.autofill.AutofillManager;
import com.android.settings.applications.defaultapps.DefaultAutofillPicker;
@@ -34,23 +34,23 @@ public class AutofillPickerTrampolineActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// First check if the current user's service already belongs to the app...
final Intent intent = getIntent();
final String packageName = intent.getData().getSchemeSpecificPart();
final String currentService = DefaultAutofillPicker.getDefaultKey(
this, UserHandle.myUserId());
if (currentService != null && currentService.startsWith(packageName)) {
// ...and succeed right away if it does.
setResult(RESULT_OK);
final AutofillManager afm = getSystemService(AutofillManager.class);
// First check if the Autofill is available for the current user...
if (afm == null || !afm.hasAutofillFeature() || !afm.isAutofillSupported()) {
// ... and fail right away if it is not.
setResult(RESULT_CANCELED);
finish();
return;
}
// Then check if the Autofill is available for the current user...
final AutofillManager afm = getSystemService(AutofillManager.class);
if (afm == null || !afm.hasAutofillFeature() || !afm.isAutofillSupported()) {
// ... and fail right away if it is not.
setResult(RESULT_CANCELED);
// Then check if the current user's service already belongs to the app...
final Intent intent = getIntent();
final String packageName = intent.getData().getSchemeSpecificPart();
final ComponentName currentService = afm.getAutofillServiceComponentName();
if (currentService != null && currentService.getPackageName().equals(packageName)) {
// ...and succeed right away if it does.
setResult(RESULT_OK);
finish();
return;
}

View File

@@ -215,8 +215,8 @@ public abstract class RestrictedDashboardFragment extends DashboardFragment {
public EnforcedAdmin getRestrictionEnforcedAdmin() {
mEnforcedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(getActivity(),
mRestrictionKey, UserHandle.myUserId());
if (mEnforcedAdmin != null && mEnforcedAdmin.userId == UserHandle.USER_NULL) {
mEnforcedAdmin.userId = UserHandle.myUserId();
if (mEnforcedAdmin != null && mEnforcedAdmin.user == null) {
mEnforcedAdmin.user = UserHandle.of(UserHandle.myUserId());
}
return mEnforcedAdmin;
}

View File

@@ -73,7 +73,8 @@ public class BillingCycleSettings extends DataUsageBaseFragment implements
static final String KEY_SET_DATA_LIMIT = "set_data_limit";
private static final String KEY_DATA_LIMIT = "data_limit";
private NetworkTemplate mNetworkTemplate;
@VisibleForTesting
NetworkTemplate mNetworkTemplate;
private Preference mBillingCycle;
private Preference mDataWarning;
private SwitchPreference mEnableDataWarning;
@@ -100,10 +101,15 @@ public class BillingCycleSettings extends DataUsageBaseFragment implements
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mDataUsageController = new DataUsageController(getContext());
final Context context = getContext();
mDataUsageController = new DataUsageController(context);
Bundle args = getArguments();
mNetworkTemplate = args.getParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE);
if (mNetworkTemplate == null) {
mNetworkTemplate = DataUsageUtils.getDefaultTemplate(context,
DataUsageUtils.getDefaultSubscriptionId(context));
}
mBillingCycle = findPreference(KEY_BILLING_CYCLE);
mEnableDataWarning = (SwitchPreference) findPreference(KEY_SET_DATA_WARNING);

View File

@@ -172,8 +172,7 @@ public final class DataUsageUtils {
return SystemProperties.get(TEST_RADIOS_PROP).contains("wifi");
}
ConnectivityManager connectivityManager =
context.getSystemService(ConnectivityManager.class);
final ConnectivityManager connectivityManager = ConnectivityManager.from(context);
return connectivityManager != null && connectivityManager.isNetworkSupported(TYPE_WIFI);
}

View File

@@ -53,12 +53,18 @@ public class ActionDisabledByAdminDialog extends Activity
@androidx.annotation.VisibleForTesting
EnforcedAdmin getAdminDetailsFromIntent(Intent intent) {
final EnforcedAdmin admin = new EnforcedAdmin(null, UserHandle.myUserId());
final EnforcedAdmin admin = new EnforcedAdmin(null, UserHandle.of(UserHandle.myUserId()));
if (intent == null) {
return admin;
}
admin.component = intent.getParcelableExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN);
admin.userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
if (userId == UserHandle.USER_NULL) {
admin.user = null;
} else {
admin.user = UserHandle.of(userId);
}
return admin;
}

View File

@@ -16,6 +16,7 @@
package com.android.settings.enterprise;
import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -60,6 +61,14 @@ public class ActionDisabledByAdminDialogHelper {
mActivity = activity;
}
private @UserIdInt int getEnforcementAdminUserId() {
if (mEnforcedAdmin.user == null) {
return UserHandle.USER_NULL;
} else {
return mEnforcedAdmin.user.getIdentifier();
}
}
public AlertDialog.Builder prepareDialogBuilder(String restriction,
EnforcedAdmin enforcedAdmin) {
mEnforcedAdmin = enforcedAdmin;
@@ -68,7 +77,7 @@ public class ActionDisabledByAdminDialogHelper {
final AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
mDialogView = (ViewGroup) LayoutInflater.from(builder.getContext()).inflate(
R.layout.admin_support_details_dialog, null);
initializeDialogViews(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId,
initializeDialogViews(mDialogView, mEnforcedAdmin.component, getEnforcementAdminUserId(),
mRestriction);
return builder
.setPositiveButton(R.string.okay, null)
@@ -86,7 +95,7 @@ public class ActionDisabledByAdminDialogHelper {
}
mEnforcedAdmin = admin;
mRestriction = restriction;
initializeDialogViews(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId,
initializeDialogViews(mDialogView, mEnforcedAdmin.component, getEnforcementAdminUserId(),
mRestriction);
}
@@ -108,7 +117,15 @@ public class ActionDisabledByAdminDialogHelper {
}
setAdminSupportTitle(root, restriction);
setAdminSupportDetails(mActivity, root, new EnforcedAdmin(admin, userId));
final UserHandle user;
if (userId == UserHandle.USER_NULL) {
user = null;
} else {
user = UserHandle.of(userId);
}
setAdminSupportDetails(mActivity, root, new EnforcedAdmin(admin, user));
}
@VisibleForTesting
@@ -152,20 +169,27 @@ public class ActionDisabledByAdminDialogHelper {
if (enforcedAdmin == null || enforcedAdmin.component == null) {
return;
}
final int userId;
if (enforcedAdmin.user == null) {
userId = UserHandle.USER_NULL;
} else {
userId = enforcedAdmin.user.getIdentifier();
}
final DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
Context.DEVICE_POLICY_SERVICE);
if (!RestrictedLockUtilsInternal.isAdminInCurrentUserOrProfile(activity,
enforcedAdmin.component) || !RestrictedLockUtils.isCurrentUserOrProfile(
activity, enforcedAdmin.userId)) {
activity, userId)) {
enforcedAdmin.component = null;
} else {
if (enforcedAdmin.userId == UserHandle.USER_NULL) {
enforcedAdmin.userId = UserHandle.myUserId();
if (enforcedAdmin.user == null) {
enforcedAdmin.user = UserHandle.of(UserHandle.myUserId());
}
CharSequence supportMessage = null;
if (UserHandle.isSameApp(Process.myUid(), Process.SYSTEM_UID)) {
supportMessage = dpm.getShortSupportMessageForUser(
enforcedAdmin.component, enforcedAdmin.userId);
supportMessage = dpm.getShortSupportMessageForUser(enforcedAdmin.component, userId);
}
if (supportMessage != null) {
final TextView textView = root.findViewById(R.id.admin_support_msg);
@@ -183,8 +207,7 @@ public class ActionDisabledByAdminDialogHelper {
enforcedAdmin.component);
intent.putExtra(DeviceAdminAdd.EXTRA_CALLED_FROM_SUPPORT_DIALOG, true);
// DeviceAdminAdd class may need to run as managed profile.
activity.startActivityAsUser(intent,
new UserHandle(enforcedAdmin.userId));
activity.startActivityAsUser(intent, enforcedAdmin.user);
} else {
intent.setClass(activity, Settings.DeviceAdminSettingsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

View File

@@ -21,14 +21,12 @@ import static android.provider.SettingsSlicesContract.KEY_WIFI;
import android.annotation.Nullable;
import com.android.settings.homepage.deviceinfo.DataUsageSlice;
import com.android.settings.intelligence.ContextualCardProto.ContextualCard;
import com.android.settings.intelligence.ContextualCardProto.ContextualCardList;
import com.android.settings.wifi.WifiSlice;
import com.google.android.settings.intelligence.libs.contextualcards.ContextualCard;
import com.google.android.settings.intelligence.libs.contextualcards.ContextualCardProvider;
import java.util.ArrayList;
import java.util.List;
/** Provides dynamic card for SettingsIntelligence. */
public class SettingsContextualCardProvider extends ContextualCardProvider {
@@ -36,21 +34,22 @@ public class SettingsContextualCardProvider extends ContextualCardProvider {
@Override
@Nullable
public List<ContextualCard> getContextualCards() {
final List<ContextualCard> cards = new ArrayList<>();
public ContextualCardList getContextualCards() {
final ContextualCard wifiCard =
new ContextualCard.Builder()
ContextualCard.newBuilder()
.setSliceUri(WifiSlice.WIFI_URI.toString())
.setName(KEY_WIFI)
.setCardName(KEY_WIFI)
.build();
final ContextualCard dataUsageCard =
new ContextualCard.Builder()
ContextualCard.newBuilder()
.setSliceUri(DataUsageSlice.DATA_USAGE_CARD_URI.toString())
.setName(DataUsageSlice.PATH_DATA_USAGE_CARD)
.setCardName(DataUsageSlice.PATH_DATA_USAGE_CARD)
.build();
final ContextualCardList cards = ContextualCardList.newBuilder()
.addCard(wifiCard)
.addCard(dataUsageCard)
.build();
cards.add(wifiCard);
cards.add(dataUsageCard);
return cards;
}
}

View File

@@ -25,6 +25,7 @@ import androidx.preference.Preference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.utils.ThreadUtils;
public abstract class RingtonePreferenceControllerBase extends AbstractPreferenceController
implements PreferenceControllerMixin {
@@ -45,11 +46,17 @@ public abstract class RingtonePreferenceControllerBase extends AbstractPreferenc
@Override
public void updateState(Preference preference) {
ThreadUtils.postOnBackgroundThread(() -> updateSummary(preference));
}
private void updateSummary(Preference preference) {
Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(mContext, getRingtoneType());
final CharSequence summary = Ringtone.getTitle(
mContext, ringtoneUri, false /* followSettingsUri */, true /* allowRemote */);
if (summary != null) {
preference.setSummary(summary);
ThreadUtils.postOnMainThread(() -> {
preference.setSummary(summary);
});
}
}

View File

@@ -31,6 +31,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
import android.os.UserManager;
import android.view.View;
@@ -67,7 +68,8 @@ public class BluetoothEnablerTest {
@BeforeClass
public static void beforeClass() {
sFakeEnforcedAdmin = new EnforcedAdmin(new ComponentName("test.package", "test.Class"), 10);
sFakeEnforcedAdmin = new EnforcedAdmin(new ComponentName("test.package", "test.Class"),
UserHandle.of(10));
}
@Mock

View File

@@ -19,14 +19,11 @@ package com.android.settings.bluetooth;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
@@ -61,11 +58,6 @@ public class BluetoothSliceBuilderTest {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
}
@@ -98,4 +90,4 @@ public class BluetoothSliceBuilderTest {
assertThat(adapter.isEnabled()).isTrue();
}
}
}

View File

@@ -16,14 +16,17 @@
package com.android.settings.datausage;
import static android.net.NetworkPolicy.CYCLE_NONE;
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.nullable;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -32,14 +35,20 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkPolicyManager;
import android.os.Bundle;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.SwitchPreference;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.FooterPreferenceMixinCompat;
import org.junit.Before;
import org.junit.Test;
@@ -47,6 +56,7 @@ 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 BillingCycleSettingsTest {
@@ -60,6 +70,10 @@ public class BillingCycleSettingsTest {
PreferenceManager mMockPreferenceManager;
@Mock
private NetworkPolicyEditor mNetworkPolicyEditor;
@Mock
private ConnectivityManager mConnectivityManager;
@Mock
private NetworkPolicyManager mNetworkPolicyManager;
private Context mContext;
@Mock
@@ -96,7 +110,8 @@ public class BillingCycleSettingsTest {
public void testDataUsageLimit_shouldNotBeSetOnCancel() {
mConfirmLimitFragment.onClick(null, DialogInterface.BUTTON_NEGATIVE);
assertFalse(mSharedPreferences.getBoolean(BillingCycleSettings.KEY_SET_DATA_LIMIT, true));
assertThat(mSharedPreferences.getBoolean(BillingCycleSettings.KEY_SET_DATA_LIMIT, true))
.isFalse();
verify(mMockBillingCycleSettings, never()).setPolicyLimitBytes(anyLong());
}
@@ -104,7 +119,8 @@ public class BillingCycleSettingsTest {
public void testDataUsageLimit_shouldBeSetOnConfirmation() {
mConfirmLimitFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
assertTrue(mSharedPreferences.getBoolean(BillingCycleSettings.KEY_SET_DATA_LIMIT, false));
assertThat(mSharedPreferences.getBoolean(BillingCycleSettings.KEY_SET_DATA_LIMIT, false))
.isTrue();
verify(mMockBillingCycleSettings).setPolicyLimitBytes(LIMIT_BYTES);
}
@@ -124,4 +140,32 @@ public class BillingCycleSettingsTest {
verify(mBillingCycle).setSummary(null);
}
@Test
public void onCreate_emptyArguments_shouldSetDefaultNetworkTemplate() {
final BillingCycleSettings billingCycleSettings = spy(new BillingCycleSettings());
when(billingCycleSettings.getContext()).thenReturn(mContext);
when(billingCycleSettings.getArguments()).thenReturn(Bundle.EMPTY);
final FragmentActivity activity = mock(FragmentActivity.class);
when(billingCycleSettings.getActivity()).thenReturn(activity);
final Resources.Theme theme = mContext.getTheme();
when(activity.getTheme()).thenReturn(theme);
doNothing().when(billingCycleSettings)
.onCreatePreferences(any(Bundle.class), nullable(String.class));
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
.thenReturn(mNetworkPolicyManager);
when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
.thenReturn(mConnectivityManager);
when(mConnectivityManager.isNetworkSupported(anyInt())).thenReturn(true);
final SwitchPreference preference = mock(SwitchPreference.class);
when(billingCycleSettings.findPreference(anyString())).thenReturn(preference);
final FooterPreferenceMixinCompat footer = mock(FooterPreferenceMixinCompat.class);
ReflectionHelpers.setField(billingCycleSettings, "mFooterPreferenceMixin", footer);
when(footer.createFooterPreference()).thenReturn(mock(FooterPreference.class));
billingCycleSettings.onCreate(Bundle.EMPTY);
assertThat(billingCycleSettings.mNetworkTemplate).isNotNull();
}
}

View File

@@ -121,7 +121,7 @@ public class DataUsageSummaryPreferenceControllerTest {
mActivity = spy(Robolectric.buildActivity(FragmentActivity.class).get());
when(mActivity.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
when(mActivity.getSystemService(ConnectivityManager.class))
when(mActivity.getSystemService(Context.CONNECTIVITY_SERVICE))
.thenReturn(mConnectivityManager);
when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(false);

View File

@@ -27,6 +27,7 @@ import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -76,7 +77,7 @@ public class ActionDisabledByAdminDialogHelperTest {
final int userId = 123;
final ComponentName component = new ComponentName("some.package.name",
"some.package.name.SomeClass");
final EnforcedAdmin admin = new EnforcedAdmin(component, userId);
final EnforcedAdmin admin = new EnforcedAdmin(component, UserHandle.of(userId));
mHelper.showAdminPolicies(admin, mActivity);
@@ -90,7 +91,7 @@ public class ActionDisabledByAdminDialogHelperTest {
@Test
public void testShowAdminPoliciesWithoutComponent() {
final int userId = 123;
final EnforcedAdmin admin = new EnforcedAdmin(null, userId);
final EnforcedAdmin admin = new EnforcedAdmin(null, UserHandle.of(userId));
mHelper.showAdminPolicies(admin, mActivity);
final Intent intent = mActivityShadow.getNextStartedActivity();
assertEquals(intent.getComponent(), new ComponentName(mActivity,
@@ -146,7 +147,7 @@ public class ActionDisabledByAdminDialogHelperTest {
final ViewGroup view = new FrameLayout(mActivity);
final ComponentName component = new ComponentName("some.package.name",
"some.package.name.SomeClass");
final EnforcedAdmin admin = new EnforcedAdmin(component, 123);
final EnforcedAdmin admin = new EnforcedAdmin(component, UserHandle.of(123));
final TextView textView = new TextView(mActivity);
textView.setId(R.id.admin_support_msg);
@@ -169,7 +170,7 @@ public class ActionDisabledByAdminDialogHelperTest {
final ShadowUserManager userManagerShadow = Shadow.extract(userManager);
final ComponentName component = new ComponentName("some.package.name",
"some.package.name.SomeClass");
final EnforcedAdmin admin = new EnforcedAdmin(component, 123);
final EnforcedAdmin admin = new EnforcedAdmin(component, UserHandle.of(123));
dpmShadow.setShortSupportMessageForUser(component, 123, "some message");
dpmShadow.setIsAdminActiveAsUser(false);

View File

@@ -43,7 +43,7 @@ public class ActionDisabledByAdminDialogTest {
public void testGetAdminDetailsFromIntent() {
final int userId = 123;
final ComponentName component = new ComponentName("com.some.package", ".SomeClass");
final EnforcedAdmin expectedAdmin = new EnforcedAdmin(component, userId);
final EnforcedAdmin expectedAdmin = new EnforcedAdmin(component, UserHandle.of(userId));
final Intent intent = new Intent();
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, component);
@@ -54,7 +54,7 @@ public class ActionDisabledByAdminDialogTest {
@Test
public void testGetAdminDetailsFromNullIntent() {
final int userId = UserHandle.myUserId();
final EnforcedAdmin expectedAdmin = new EnforcedAdmin(null, userId);
final EnforcedAdmin expectedAdmin = new EnforcedAdmin(null, UserHandle.of(userId));
Assert.assertEquals(expectedAdmin, mDialog.getAdminDetailsFromIntent(null));
}

View File

@@ -19,12 +19,9 @@ package com.android.settings.flashlight;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.res.Resources;
import android.provider.Settings;
import androidx.slice.Slice;
@@ -55,11 +52,6 @@ public class FlashlightSliceBuilderTest {
public void setUp() {
mContext = spy(RuntimeEnvironment.application);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
}

View File

@@ -23,6 +23,7 @@ import android.net.Uri;
import com.android.settings.homepage.deviceinfo.DataUsageSlice;
import com.android.settings.homepage.deviceinfo.DeviceInfoSlice;
import com.android.settings.homepage.deviceinfo.StorageSlice;
import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -56,14 +57,15 @@ public class CardContentLoaderTest {
public void createStaticCards_shouldReturnTwoCards() {
final List<ContextualCard> defaultData = mCardContentLoader.createStaticCards();
assertThat(defaultData).hasSize(2);
assertThat(defaultData).hasSize(3);
}
@Test
public void createStaticCards_shouldContainDataUsageAndDeviceInfo() {
final Uri dataUsage = DataUsageSlice.DATA_USAGE_CARD_URI;
final Uri deviceInfo = DeviceInfoSlice.DEVICE_INFO_CARD_URI;
final List<Uri> expectedUris = Arrays.asList(dataUsage, deviceInfo);
final Uri storageInfo = StorageSlice.STORAGE_CARD_URI;
final List<Uri> expectedUris = Arrays.asList(dataUsage, deviceInfo, storageInfo);
final List<Uri> actualCardUris = mCardContentLoader.createStaticCards().stream().map(
ContextualCard::getSliceUri).collect(Collectors.toList());

View File

@@ -24,9 +24,9 @@ import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import com.android.settings.intelligence.ContextualCardProto.ContextualCardList;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.google.android.settings.intelligence.libs.contextualcards.ContextualCard;
import com.google.android.settings.intelligence.libs.contextualcards.ContextualCardProvider;
import org.junit.Before;
@@ -34,8 +34,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
@RunWith(SettingsRobolectricTestRunner.class)
public class SettingsContextualCardProviderTest {
@@ -54,11 +52,12 @@ public class SettingsContextualCardProviderTest {
}
@Test
public void contentProviderCall_returnCorrectSize() {
public void contentProviderCall_returnCorrectSize() throws Exception {
final Bundle returnValue =
mResolver.call(mUri, ContextualCardProvider.METHOD_GET_CARD_LIST, "", null);
final ArrayList<ContextualCard> cards =
returnValue.getParcelableArrayList(ContextualCardProvider.BUNDLE_CARD_LIST);
assertThat(cards.size()).isEqualTo(2);
final ContextualCardList cards =
ContextualCardList.parseFrom(
returnValue.getByteArray(ContextualCardProvider.BUNDLE_CARD_LIST));
assertThat(cards.getCardCount()).isEqualTo(2);
}
}

View File

@@ -19,12 +19,10 @@ package com.android.settings.homepage.deviceinfo;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.res.Resources;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
@@ -60,11 +58,6 @@ public class DataUsageSliceTest {
public void setUp() {
mContext = spy(RuntimeEnvironment.application);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);

View File

@@ -2,12 +2,9 @@ package com.android.settings.location;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.res.Resources;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
@@ -37,11 +34,6 @@ public class LocationSliceBuilderTest {
public void setUp() {
mContext = spy(RuntimeEnvironment.application);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
}

View File

@@ -23,7 +23,6 @@ import static android.app.slice.SliceItem.FORMAT_TEXT;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -32,7 +31,6 @@ import static org.mockito.Mockito.when;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.telephony.CarrierConfigManager;
import androidx.slice.Slice;
@@ -98,11 +96,6 @@ public class Enhanced4gLteSliceHelperTest {
//setup for SliceBroadcastReceiver test
mReceiver = spy(new SliceBroadcastReceiver());
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
mEnhanced4gLteSliceHelper = new FakeEnhanced4gLteSliceHelper(mContext);
// Set-up specs for SliceMetadata.

View File

@@ -20,14 +20,11 @@ import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.provider.Settings;
import androidx.slice.Slice;
@@ -60,11 +57,6 @@ public class ZenModeSliceBuilderTest {
public void setUp() {
mContext = spy(RuntimeEnvironment.application);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
}

View File

@@ -18,7 +18,6 @@ package com.android.settings.slices;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
@@ -27,7 +26,6 @@ import static org.mockito.Mockito.verify;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.provider.Settings;
import android.provider.SettingsSlicesContract;
@@ -85,11 +83,6 @@ public class SliceBuilderUtilsTest {
mFeatureFactory = FakeFeatureFactory.setupForTest();
mLoggingArgumentCatpor = ArgumentCaptor.forClass(Pair.class);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
}

View File

@@ -30,18 +30,12 @@ import org.robolectric.android.XmlResourceParserImpl;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.RealObject;
import org.robolectric.res.StyleData;
import org.robolectric.res.StyleResolver;
import org.robolectric.res.ThemeStyleSet;
import org.robolectric.shadows.ShadowAssetManager;
import org.robolectric.shadows.ShadowResources;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.ReflectionHelpers.ClassParameter;
import org.w3c.dom.Node;
import java.util.List;
import java.util.Map;
/**
* Shadow Resources and Theme classes to handle resource references that Robolectric shadows cannot
* handle because they are too new or private.
@@ -207,46 +201,10 @@ public class SettingsShadowResources extends ShadowResources {
if (attributeValue.contains("attr/fingerprint_layout_theme")) {
// Workaround for https://github.com/robolectric/robolectric/issues/2641
node.setNodeValue("@style/FingerprintLayoutTheme");
} else if (attributeValue.startsWith("@*android:string")) {
node.setNodeValue("PLACEHOLDER");
} else if (attributeValue.startsWith("@*android:dimen")) {
node.setNodeValue("321dp");
} else if (attributeValue.startsWith("@*android:drawable")) {
node.setNodeValue("");
}
}
}
}
// Track down all styles and remove all inheritance from private styles.
final Map<Long, Object /* NativeTheme */> appliedStylesList =
ReflectionHelpers.getField(mAssetManager, "nativeThemes");
synchronized (appliedStylesList) {
for (Long idx : appliedStylesList.keySet()) {
final ThemeStyleSet appliedStyles = ReflectionHelpers.getField(
appliedStylesList.get(idx), "themeStyleSet");
// The Object's below are actually ShadowAssetManager.OverlayedStyle.
// We can't use
// it here because it's private.
final List<Object /* OverlayedStyle */> overlayedStyles =
ReflectionHelpers.getField(appliedStyles, "styles");
for (Object appliedStyle : overlayedStyles) {
final StyleResolver styleResolver = ReflectionHelpers.getField(appliedStyle,
"style");
final List<StyleData> styleDatas =
ReflectionHelpers.getField(styleResolver, "styles");
for (StyleData styleData : styleDatas) {
if (styleData.getParent() != null &&
styleData.getParent().startsWith("@*android:style")) {
ReflectionHelpers.setField(StyleData.class, styleData, "parent",
null);
}
}
}
}
}
return super.obtainStyledAttributes(set, attrs, defStyleAttr, defStyleRes);
}

View File

@@ -1,36 +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.testutils.shadow;
import android.util.KeyValueListParser;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
/**
* Shadow for {@link KeyValueListParser} so we could implement
* {@link #getBoolean(String, boolean)} that doesn't support in the current
* robolectric
*/
@Implements(KeyValueListParser.class)
public class ShadowKeyValueListParser {
@Implementation
public boolean getBoolean(String key, boolean defaultValue) {
return defaultValue;
}
}

View File

@@ -19,13 +19,10 @@ package com.android.settings.wifi;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.wifi.WifiManager;
import androidx.core.graphics.drawable.IconCompat;
@@ -58,11 +55,6 @@ public class WifiSliceTest {
public void setUp() {
mContext = spy(RuntimeEnvironment.application);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);

View File

@@ -23,7 +23,6 @@ import static android.app.slice.SliceItem.FORMAT_TEXT;
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.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
@@ -33,7 +32,6 @@ import static org.mockito.Mockito.when;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.telephony.CarrierConfigManager;
import androidx.slice.Slice;
@@ -104,11 +102,6 @@ public class WifiCallingSliceHelperTest {
when(mSlicesFeatureProvider.getCustomSliceManager(any(Context.class)))
.thenReturn(manager);
// Prevent crash in SliceMetadata.
Resources resources = spy(mContext.getResources());
doReturn(60).when(resources).getDimensionPixelSize(anyInt());
doReturn(resources).when(mContext).getResources();
mWfcSliceHelper = new FakeWifiCallingSliceHelper(mContext);
// Set-up specs for SliceMetadata.