diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 17bb5ff4ab3..644356924b9 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -388,7 +388,7 @@ + android:value="com.android.settings.network.ApnSettings" /> @@ -1903,7 +1903,7 @@ + android:value="com.android.settings.network.ApnEditor" /> + mProfiles; private final AppOpsManager mAppOpsManager; @@ -58,12 +58,12 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String[] permissions) { this(context, appState, callback, appOpsOpCode, permissions, - new IPackageManagerWrapper(AppGlobals.getPackageManager())); + AppGlobals.getPackageManager()); } @VisibleForTesting AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, - int appOpsOpCode, String[] permissions, IPackageManagerWrapper packageManager) { + int appOpsOpCode, String[] permissions, IPackageManager packageManager) { super(appState, callback); mContext = context; mIPackageManager = packageManager; @@ -210,9 +210,10 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { if (entriesForProfile == null) { continue; } - @SuppressWarnings("unchecked") - final List packageInfos = mIPackageManager - .getPackagesHoldingPermissions(mPermissions, 0, profileId).getList(); + @SuppressWarnings("unchecked") final List packageInfos = + mIPackageManager + .getPackagesHoldingPermissions(mPermissions, 0, + profileId).getList(); final int packageInfoCount = packageInfos != null ? packageInfos.size() : 0; for (int i = 0; i < packageInfoCount; i++) { final PackageInfo packageInfo = packageInfos.get(i); diff --git a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java index 77cecd28059..9bb7a4bf65e 100644 --- a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java +++ b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java @@ -17,12 +17,12 @@ package com.android.settings.applications; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.os.Build; import android.os.RemoteException; import android.os.UserHandle; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; /** @@ -32,11 +32,11 @@ import com.android.settingslib.wrapper.PackageManagerWrapper; public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter { private final String[] mPermissions; - private final IPackageManagerWrapper mPackageManagerService; + private final IPackageManager mPackageManagerService; private final DevicePolicyManager mDevicePolicyManager; public AppWithAdminGrantedPermissionsCounter(Context context, String[] permissions, - PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService, + PackageManagerWrapper packageManager, IPackageManager packageManagerService, DevicePolicyManager devicePolicyManager) { super(context, packageManager); mPermissions = permissions; @@ -52,7 +52,7 @@ public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter { public static boolean includeInCount(String[] permissions, DevicePolicyManager devicePolicyManager, PackageManagerWrapper packageManager, - IPackageManagerWrapper packageManagerService, ApplicationInfo info) { + IPackageManager packageManagerService, ApplicationInfo info) { if (info.targetSdkVersion >= Build.VERSION_CODES.M) { // The app uses run-time permissions. Check whether one or more of the permissions were // granted by enterprise policy. diff --git a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java index 655758aa12c..13086208481 100644 --- a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java +++ b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsLister.java @@ -18,9 +18,9 @@ package com.android.settings.applications; import android.app.admin.DevicePolicyManager; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.os.UserManager; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; /** @@ -29,11 +29,11 @@ import com.android.settingslib.wrapper.PackageManagerWrapper; */ public abstract class AppWithAdminGrantedPermissionsLister extends AppLister { private final String[] mPermissions; - private final IPackageManagerWrapper mPackageManagerService; + private final IPackageManager mPackageManagerService; private final DevicePolicyManager mDevicePolicyManager; public AppWithAdminGrantedPermissionsLister(String[] permissions, - PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService, + PackageManagerWrapper packageManager, IPackageManager packageManagerService, DevicePolicyManager devicePolicyManager, UserManager userManager) { super(packageManager, userManager); mPermissions = permissions; diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java index cd54f797bdb..f59286576e3 100644 --- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java +++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java @@ -20,6 +20,7 @@ import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; import android.content.pm.ComponentInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; @@ -27,7 +28,6 @@ import android.os.RemoteException; import android.os.UserManager; import android.util.ArraySet; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import java.util.ArrayList; @@ -38,12 +38,12 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide private final Context mContext; private final PackageManagerWrapper mPm; - private final IPackageManagerWrapper mPms; + private final IPackageManager mPms; private final DevicePolicyManager mDpm; private final UserManager mUm; public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm, - IPackageManagerWrapper pms, DevicePolicyManager dpm) { + IPackageManager pms, DevicePolicyManager dpm) { mContext = context.getApplicationContext(); mPm = pm; mPms = pms; @@ -149,7 +149,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(Context context, String[] permissions, PackageManagerWrapper packageManager, - IPackageManagerWrapper packageManagerService, + IPackageManager packageManagerService, DevicePolicyManager devicePolicyManager, NumberOfAppsCallback callback) { super(context, permissions, packageManager, packageManagerService, devicePolicyManager); mCallback = callback; @@ -181,7 +181,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide private ListOfAppsCallback mCallback; CurrentUserAppWithAdminGrantedPermissionsLister(String[] permissions, - PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService, + PackageManagerWrapper packageManager, IPackageManager packageManagerService, DevicePolicyManager devicePolicyManager, UserManager userManager, ListOfAppsCallback callback) { super(permissions, packageManager, packageManagerService, devicePolicyManager, diff --git a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java index 87fa9cab79f..4c1f0092974 100644 --- a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java @@ -22,6 +22,7 @@ import android.content.Context; import android.os.Bundle; import android.support.v7.preference.Preference; +import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.notification.AppNotificationSettings; import com.android.settings.notification.NotificationBackend; @@ -77,7 +78,18 @@ public class AppNotificationPreferenceController extends AppInfoPreferenceContro public static CharSequence getNotificationSummary(NotificationBackend.AppRow appRow, Context context) { - // TODO: implement summary when it is known what it should say - return ""; + if (appRow == null) { + return ""; + } + if (appRow.banned || appRow.channelCount == appRow.blockedChannelCount) { + return context.getString(R.string.notifications_disabled); + } else { + if (appRow.blockedChannelCount == 0) { + return context.getString(R.string.notifications_enabled); + } + return context.getString(R.string.notifications_enabled_with_info, + context.getResources().getQuantityString(R.plurals.notifications_categories_off, + appRow.blockedChannelCount, appRow.blockedChannelCount)); + } } } diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index c3317fe2379..7842dbf3c95 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -16,8 +16,6 @@ package com.android.settings.core.gateway; -import com.android.settings.ApnEditor; -import com.android.settings.ApnSettings; import com.android.settings.DateTimeSettings; import com.android.settings.DeviceAdminSettings; import com.android.settings.DisplaySettings; @@ -91,6 +89,8 @@ import com.android.settings.inputmethod.UserDictionarySettings; import com.android.settings.language.LanguageAndInputSettings; import com.android.settings.localepicker.LocaleListEditor; import com.android.settings.location.LocationSettings; +import com.android.settings.network.ApnEditor; +import com.android.settings.network.ApnSettings; import com.android.settings.network.NetworkDashboardFragment; import com.android.settings.nfc.AndroidBeam; import com.android.settings.nfc.PaymentSettings; diff --git a/src/com/android/settings/enterprise/BackupsEnabledPreferenceController.java b/src/com/android/settings/enterprise/BackupsEnabledPreferenceController.java new file mode 100644 index 00000000000..b24f8dcc89a --- /dev/null +++ b/src/com/android/settings/enterprise/BackupsEnabledPreferenceController.java @@ -0,0 +1,37 @@ +/* + * 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.enterprise; + +import android.content.Context; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.overlay.FeatureFactory; + +public class BackupsEnabledPreferenceController extends BasePreferenceController { + + private static final String KEY_BACKUPS_ENABLED = "backups_enabled"; + private final EnterprisePrivacyFeatureProvider mFeatureProvider; + + public BackupsEnabledPreferenceController(Context context) { + super(context, KEY_BACKUPS_ENABLED); + mFeatureProvider = FeatureFactory.getFactory(context) + .getEnterprisePrivacyFeatureProvider(context); + } + + @Override + public int getAvailabilityStatus() { + return mFeatureProvider.areBackupsMandatory() ? AVAILABLE : DISABLED_FOR_USER; + } +} + diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java index 048782ea35c..51d125d5c2f 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java @@ -124,4 +124,9 @@ public interface EnterprisePrivacyFeatureProvider { * profile (if any). */ int getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile(); + + /* + * Returns whether backups are mandatory. + */ + boolean areBackupsMandatory(); } diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 17d7f0dcb0c..eead69f8787 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; +import android.net.ConnectivityManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -32,7 +33,6 @@ import android.view.View; import com.android.settings.R; import com.android.settings.vpn2.VpnUtils; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import java.util.Date; @@ -44,13 +44,13 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe private final DevicePolicyManager mDpm; private final PackageManagerWrapper mPm; private final UserManager mUm; - private final ConnectivityManagerWrapper mCm; + private final ConnectivityManager mCm; private final Resources mResources; private static final int MY_USER_ID = UserHandle.myUserId(); public EnterprisePrivacyFeatureProviderImpl(Context context, DevicePolicyManager dpm, - PackageManagerWrapper pm, UserManager um, ConnectivityManagerWrapper cm, + PackageManagerWrapper pm, UserManager um, ConnectivityManager cm, Resources resources) { mContext = context.getApplicationContext(); mDpm = dpm; @@ -235,6 +235,11 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe return activeAdmins; } + @Override + public boolean areBackupsMandatory() { + return null != mDpm.getMandatoryBackupTransport(); + } + protected static class EnterprisePrivacySpan extends ClickableSpan { private final Context mContext; diff --git a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java index b426d287f9c..92ae38df94e 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java @@ -82,6 +82,7 @@ public class EnterprisePrivacySettings extends DashboardFragment { exposureChangesCategoryControllers.add(new CaCertsCurrentUserPreferenceController(context)); exposureChangesCategoryControllers.add(new CaCertsManagedProfilePreferenceController( context)); + exposureChangesCategoryControllers.add(new BackupsEnabledPreferenceController(context)); controllers.addAll(exposureChangesCategoryControllers); controllers.add(new PreferenceCategoryController(context, "exposure_changes_category") .setChildren(exposureChangesCategoryControllers)); diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java index fd150e4c93e..1b6e2f03ae3 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java @@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batterytip.detectors; import android.content.Context; import android.os.BatteryStats; import android.support.annotation.VisibleForTesting; +import android.text.format.DateUtils; import com.android.internal.os.BatterySipper; import com.android.internal.os.BatteryStatsHelper; @@ -72,18 +73,20 @@ public class HighUsageDetector implements BatteryTipDetector { final long foregroundTimeMs = mBatteryUtils.getProcessTimeMs( BatteryUtils.StatusType.FOREGROUND, batterySipper.uidObj, BatteryStats.STATS_SINCE_CHARGED); - mHighUsageAppList.add(new AppInfo.Builder() - .setUid(batterySipper.getUid()) - .setPackageName( - mBatteryUtils.getPackageName(batterySipper.getUid())) - .setScreenOnTimeMs(foregroundTimeMs) - .build()); + if (foregroundTimeMs >= DateUtils.MINUTE_IN_MILLIS) { + mHighUsageAppList.add(new AppInfo.Builder() + .setUid(batterySipper.getUid()) + .setPackageName( + mBatteryUtils.getPackageName(batterySipper.getUid())) + .setScreenOnTimeMs(foregroundTimeMs) + .build()); + } } } + Collections.sort(mHighUsageAppList, Collections.reverseOrder()); mHighUsageAppList = mHighUsageAppList.subList(0, Math.min(mPolicy.highUsageAppCount, mHighUsageAppList.size())); - Collections.sort(mHighUsageAppList, Collections.reverseOrder()); } } diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java similarity index 99% rename from src/com/android/settings/ApnEditor.java rename to src/com/android/settings/network/ApnEditor.java index 15edbf4ccf8..61f12438262 100644 --- a/src/com/android/settings/ApnEditor.java +++ b/src/com/android/settings/network/ApnEditor.java @@ -14,7 +14,9 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.network; + +import static android.content.Context.TELEPHONY_SERVICE; import android.app.AlertDialog; import android.app.Dialog; @@ -47,9 +49,11 @@ import android.view.View.OnKeyListener; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.internal.telephony.PhoneConstants; import com.android.internal.util.ArrayUtils; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settingslib.utils.ThreadUtils; import java.util.Arrays; @@ -57,11 +61,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import static android.content.Context.TELEPHONY_SERVICE; - -/** - * TODO(b/77339683): After loading all changes, please move this to network package. - */ public class ApnEditor extends SettingsPreferenceFragment implements OnPreferenceChangeListener, OnKeyListener { diff --git a/src/com/android/settings/ApnPreference.java b/src/com/android/settings/network/ApnPreference.java similarity index 98% rename from src/com/android/settings/ApnPreference.java rename to src/com/android/settings/network/ApnPreference.java index 0111b26194c..412c2881aa5 100755 --- a/src/com/android/settings/ApnPreference.java +++ b/src/com/android/settings/network/ApnPreference.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.network; import android.content.ContentUris; import android.content.Context; @@ -32,6 +32,8 @@ import android.widget.CompoundButton; import android.widget.RadioButton; import android.widget.RelativeLayout; +import com.android.settings.R; + public class ApnPreference extends Preference implements CompoundButton.OnCheckedChangeListener, OnClickListener { final static String TAG = "ApnPreference"; diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/network/ApnSettings.java similarity index 99% rename from src/com/android/settings/ApnSettings.java rename to src/com/android/settings/network/ApnSettings.java index d554301063c..bbbcdbcbb63 100755 --- a/src/com/android/settings/ApnSettings.java +++ b/src/com/android/settings/network/ApnSettings.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.network; import android.app.Activity; import android.app.Dialog; @@ -39,7 +39,6 @@ import android.os.UserManager; import android.provider.Telephony; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; -import android.support.v7.preference.PreferenceScreen; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; @@ -50,7 +49,6 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; -import android.widget.TextView; import android.widget.Toast; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -59,6 +57,8 @@ import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.dataconnection.ApnSetting; import com.android.internal.telephony.uicc.IccRecords; import com.android.internal.telephony.uicc.UiccController; +import com.android.settings.R; +import com.android.settings.RestrictedSettingsFragment; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import java.util.ArrayList; diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 34b6ce534cb..62c83886b05 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -60,6 +60,8 @@ public class NotificationBackend { row.banned = getNotificationsBanned(row.pkg, row.uid); row.showBadge = canShowBadge(row.pkg, row.uid); row.userId = UserHandle.getUserId(row.uid); + row.blockedChannelCount = getBlockedChannelCount(row.pkg, row.uid); + row.channelCount = getChannelCount(row.pkg, row.uid); return row; } @@ -178,18 +180,6 @@ public class NotificationBackend { } } - public NotificationChannelGroup getGroupWithChannels(String pkg, int uid, String groupId) { - if (groupId == null) { - return null; - } - try { - return sINM.getPopulatedNotificationChannelGroupForPackage(pkg, uid, groupId, true); - } catch (Exception e) { - Log.w(TAG, "Error calling NoMan", e); - return null; - } - } - public ParceledListSlice getGroups(String pkg, int uid) { try { return sINM.getNotificationChannelGroupsForPackage(pkg, uid, false); @@ -224,6 +214,15 @@ public class NotificationBackend { } } + public int getBlockedChannelCount(String pkg, int uid) { + try { + return sINM.getBlockedChannelCount(pkg, uid); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return 0; + } + } + public boolean onlyHasDefaultChannel(String pkg, int uid) { try { return sINM.onlyHasDefaultChannel(pkg, uid); @@ -233,6 +232,15 @@ public class NotificationBackend { } } + public int getChannelCount(String pkg, int uid) { + try { + return sINM.getNumNotificationChannelsForPackage(pkg, uid, false); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return 0; + } + } + public List getRecentApps() { try { return sINM.getRecentNotifyingAppsForUser(UserHandle.myUserId()).getList(); @@ -259,5 +267,7 @@ public class NotificationBackend { public String lockedChannelId; public boolean showBadge; public int userId; + public int blockedChannelCount; + public int channelCount; } } diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java index 89f1e2747b7..478a7d6b3a0 100644 --- a/src/com/android/settings/notification/VolumeSeekBarPreference.java +++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java @@ -83,6 +83,7 @@ public class VolumeSeekBarPreference extends SeekBarPreference { public void setStream(int stream) { mStream = stream; setMax(mAudioManager.getStreamMaxVolume(mStream)); + setMin(mAudioManager.getStreamMinVolume(mStream)); setProgress(mAudioManager.getStreamVolume(mStream)); } diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java index f0bbe2e646d..b652c669f2b 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.java +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java @@ -51,8 +51,6 @@ import com.android.settings.slices.SlicesFeatureProvider; import com.android.settings.slices.SlicesFeatureProviderImpl; import com.android.settings.users.UserFeatureProvider; import com.android.settings.users.UserFeatureProviderImpl; -import com.android.settings.wrapper.ConnectivityManagerWrapper; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -112,7 +110,7 @@ public class FeatureFactoryImpl extends FeatureFactory { if (mApplicationFeatureProvider == null) { mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context, new PackageManagerWrapper(context.getPackageManager()), - new IPackageManagerWrapper(AppGlobals.getPackageManager()), + AppGlobals.getPackageManager(), (DevicePolicyManager) context .getSystemService(Context.DEVICE_POLICY_SERVICE)); } @@ -134,8 +132,7 @@ public class FeatureFactoryImpl extends FeatureFactory { (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE), new PackageManagerWrapper(context.getPackageManager()), UserManager.get(context), - new ConnectivityManagerWrapper((ConnectivityManager) context - .getSystemService(Context.CONNECTIVITY_SERVICE)), + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE), context.getResources()); } return mEnterprisePrivacyFeatureProvider; diff --git a/src/com/android/settings/vpn2/VpnUtils.java b/src/com/android/settings/vpn2/VpnUtils.java index 1aa4adaea41..4528180b0ee 100644 --- a/src/com/android/settings/vpn2/VpnUtils.java +++ b/src/com/android/settings/vpn2/VpnUtils.java @@ -27,7 +27,6 @@ import android.util.Log; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; -import com.android.settings.wrapper.ConnectivityManagerWrapper; /** * Utility functions for vpn. @@ -89,7 +88,7 @@ public class VpnUtils { ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); } - public static boolean isAlwaysOnVpnSet(ConnectivityManagerWrapper cm, final int userId) { + public static boolean isAlwaysOnVpnSet(ConnectivityManager cm, final int userId) { return cm.getAlwaysOnVpnPackageForUser(userId) != null; } diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java index c5e79b2db49..cdb9292815f 100644 --- a/src/com/android/settings/wifi/WifiEnabler.java +++ b/src/com/android/settings/wifi/WifiEnabler.java @@ -34,11 +34,10 @@ import android.widget.Toast; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.widget.SwitchWidgetController; -import com.android.settings.wrapper.ConnectivityManagerWrapper; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.WirelessUtils; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.concurrent.atomic.AtomicBoolean; @@ -46,7 +45,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene private final SwitchWidgetController mSwitchWidget; private final WifiManager mWifiManager; - private final ConnectivityManagerWrapper mConnectivityManager; + private final ConnectivityManager mConnectivityManager; private final MetricsFeatureProvider mMetricsFeatureProvider; private Context mContext; @@ -81,20 +80,20 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene public WifiEnabler(Context context, SwitchWidgetController switchWidget, MetricsFeatureProvider metricsFeatureProvider) { - this(context, switchWidget, metricsFeatureProvider, new ConnectivityManagerWrapper( - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))); + this(context, switchWidget, metricsFeatureProvider, + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)); } @VisibleForTesting WifiEnabler(Context context, SwitchWidgetController switchWidget, MetricsFeatureProvider metricsFeatureProvider, - ConnectivityManagerWrapper connectivityManagerWrapper) { + ConnectivityManager connectivityManager) { mContext = context; mSwitchWidget = switchWidget; mSwitchWidget.setListener(this); mMetricsFeatureProvider = metricsFeatureProvider; mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - mConnectivityManager = connectivityManagerWrapper; + mConnectivityManager = connectivityManager; mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); // The order matters! We really should not depend on this. :( diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 5f299221642..4f1c832e15b 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -64,7 +64,6 @@ import com.android.settings.search.SearchIndexableRaw; import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener; import com.android.settings.widget.SwitchBarController; import com.android.settings.wifi.details.WifiNetworkDetailsFragment; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint.AccessPointListener; @@ -852,9 +851,7 @@ public class WifiSettings extends RestrictedSettingsFragment pref.getAccessPoint().saveWifiState(pref.getExtras()); if (mCaptivePortalNetworkCallback != null && mCaptivePortalNetworkCallback.isCaptivePortal()) { - ConnectivityManagerWrapper connectivityManagerWrapper = - new ConnectivityManagerWrapper(mConnectivityManager); - connectivityManagerWrapper.startCaptivePortalApp( + mConnectivityManager.startCaptivePortalApp( mCaptivePortalNetworkCallback.getNetwork()); } else { launchNetworkDetailsFragment(pref); diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index e7f0fdd7c1f..2339e38effa 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -48,6 +48,7 @@ import android.text.TextUtils; import android.util.Log; import android.widget.ImageView; import android.widget.Toast; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; @@ -60,7 +61,6 @@ import com.android.settings.wifi.WifiDetailPreference; import com.android.settings.wifi.WifiDialog; import com.android.settings.wifi.WifiDialog.WifiDialogListener; import com.android.settings.wifi.WifiUtils; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -68,6 +68,7 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.wifi.AccessPoint; + import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; @@ -114,7 +115,6 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController static final String KEY_IPV6_ADDRESSES_PREF = "ipv6_addresses"; private AccessPoint mAccessPoint; - private final ConnectivityManagerWrapper mConnectivityManagerWrapper; private final ConnectivityManager mConnectivityManager; private final Fragment mFragment; private final Handler mHandler; @@ -152,10 +152,10 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController switch (intent.getAction()) { case WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION: if (!intent.getBooleanExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED, - false /* defaultValue */)) { + false /* defaultValue */)) { // only one network changed WifiConfiguration wifiConfiguration = intent - .getParcelableExtra(WifiManager.EXTRA_WIFI_CONFIGURATION); + .getParcelableExtra(WifiManager.EXTRA_WIFI_CONFIGURATION); if (mAccessPoint.matches(wifiConfiguration)) { mWifiConfig = wifiConfiguration; } @@ -215,7 +215,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController public static WifiDetailPreferenceController newInstance( AccessPoint accessPoint, - ConnectivityManagerWrapper connectivityManagerWrapper, + ConnectivityManager connectivityManager, Context context, Fragment fragment, Handler handler, @@ -223,14 +223,14 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController WifiManager wifiManager, MetricsFeatureProvider metricsFeatureProvider) { return new WifiDetailPreferenceController( - accessPoint, connectivityManagerWrapper, context, fragment, handler, lifecycle, + accessPoint, connectivityManager, context, fragment, handler, lifecycle, wifiManager, metricsFeatureProvider, new IconInjector(context)); } @VisibleForTesting - /* package */ WifiDetailPreferenceController( + /* package */ WifiDetailPreferenceController( AccessPoint accessPoint, - ConnectivityManagerWrapper connectivityManagerWrapper, + ConnectivityManager connectivityManager, Context context, Fragment fragment, Handler handler, @@ -241,8 +241,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController super(context); mAccessPoint = accessPoint; - mConnectivityManager = connectivityManagerWrapper.getConnectivityManager(); - mConnectivityManagerWrapper = connectivityManagerWrapper; + mConnectivityManager = connectivityManager; mFragment = fragment; mHandler = handler; mSignalStr = context.getResources().getStringArray(R.array.wifi_signal); @@ -326,7 +325,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork); updateInfo(); mContext.registerReceiver(mReceiver, mFilter); - mConnectivityManagerWrapper.registerNetworkCallback(mNetworkRequest, mNetworkCallback, + mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback, mHandler); } @@ -486,7 +485,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController private static String ipv4PrefixLengthToSubnetMask(int prefixLength) { try { InetAddress all = InetAddress.getByAddress( - new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255}); + new byte[] {(byte) 255, (byte) 255, (byte) 255, (byte) 255}); return NetworkUtils.getNetworkPart(all, prefixLength).getHostAddress(); } catch (UnknownHostException e) { return null; @@ -538,7 +537,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController private void signIntoNetwork() { mMetricsFeatureProvider.action( mFragment.getActivity(), MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN); - mConnectivityManagerWrapper.startCaptivePortalApp(mNetwork); + mConnectivityManager.startCaptivePortalApp(mNetwork); } @Override diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java index b2e56b9664e..34380359e63 100644 --- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java @@ -20,13 +20,10 @@ import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID; import android.app.Dialog; import android.content.Context; import android.net.ConnectivityManager; -import android.net.NetworkPolicyManager; -import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.support.v7.preference.DropDownPreference; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -37,13 +34,11 @@ import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.wifi.WifiConfigUiBase; import com.android.settings.wifi.WifiDialog; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.wifi.AccessPoint; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -126,10 +121,10 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { @Override protected List createPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); - ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); + final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class); mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance( mAccessPoint, - new ConnectivityManagerWrapper(cm), + cm, context, this, new Handler(Looper.getMainLooper()), // UI thread. diff --git a/src/com/android/settings/wrapper/ConnectivityManagerWrapper.java b/src/com/android/settings/wrapper/ConnectivityManagerWrapper.java deleted file mode 100644 index c80a97b3afa..00000000000 --- a/src/com/android/settings/wrapper/ConnectivityManagerWrapper.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2017 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.wrapper; - -import android.net.ConnectivityManager; -import android.net.ConnectivityManager.NetworkCallback; -import android.net.Network; -import android.net.NetworkRequest; -import android.os.Handler; -import android.net.ProxyInfo; - -/** - * This class replicates a subset of the android.net.ConnectivityManager (CM). The class - * exists so that we can use a thin wrapper around the CM in production code and a mock in tests. - * We cannot directly mock or shadow the CM, because some of the methods we rely on are marked as - * hidden and are thus invisible to Robolectric. - */ -public class ConnectivityManagerWrapper { - - private final ConnectivityManager mCm; - - public ConnectivityManagerWrapper(ConnectivityManager cm) { - mCm = cm; - } - - /** - * Returns the real ConnectivityManager object wrapped by this wrapper. - */ - public ConnectivityManager getConnectivityManager() { - return mCm; - } - - /** - * Calls {@code ConnectivityManager.getAlwaysOnVpnPackageForUser()}. - * - * @see android.net.ConnectivityManager#getAlwaysOnVpnPackageForUser - */ - public String getAlwaysOnVpnPackageForUser(int userId) { - return mCm.getAlwaysOnVpnPackageForUser(userId); - } - - /** - * Calls {@code ConnectivityManager.getGlobalProxy()}. - * - * @see android.net.ConnectivityManager#getGlobalProxy - */ - public ProxyInfo getGlobalProxy() { - return mCm.getGlobalProxy(); - } - - /** - * Calls {@code ConnectivityManager.registerNetworkCallback()}. - * - * This is part of the ConnectivityManager public API in SDK 26 or above, but is not yet visible - * to the robolectric tests, which currently build with SDK 23. - * TODO: delete this once the robolectric tests build with SDK 26 or above. - * - * @see android.net.ConnectivityManager#registerNetworkCallback(NetworkRequest,NetworkCallback,Handler) - */ - public void registerNetworkCallback(NetworkRequest request, NetworkCallback callback, - Handler handler) { - mCm.registerNetworkCallback(request, callback, handler); - } - - /** - * Calls {@code ConnectivityManager.startCaptivePortalApp()}. - * - * This is part of the ConnectivityManager public API in SDK 26 or above, but is not yet visible - * to the robolectric tests, which currently build with SDK 23. - * TODO: delete this once the robolectric tests build with SDK 26 or above. - * - * @see android.net.ConnectivityManager#startCaptivePortalApp(Network) - */ - public void startCaptivePortalApp(Network network) { - mCm.startCaptivePortalApp(network); - } - - /** - * {@link ConnectivityManager#stopTethering} - */ - public void stopTethering(int type) { - mCm.stopTethering(type); - } -} diff --git a/src/com/android/settings/wrapper/IPackageManagerWrapper.java b/src/com/android/settings/wrapper/IPackageManagerWrapper.java deleted file mode 100644 index 9bb2df72d02..00000000000 --- a/src/com/android/settings/wrapper/IPackageManagerWrapper.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2017 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.wrapper; - -import android.content.Intent; -import android.content.pm.IPackageManager; -import android.content.pm.PackageInfo; -import android.content.pm.ParceledListSlice; -import android.content.pm.ResolveInfo; -import android.os.RemoteException; - -/** - * This class replicates a subset of the android.content.pm.IPackageManager (PMS). The class - * exists so that we can use a thin wrapper around the PMS in production code and a mock in tests. - * We cannot directly mock or shadow the PMS, because some of the methods we rely on are newer than - * the API version supported by Robolectric. - */ -public class IPackageManagerWrapper { - - private final IPackageManager mPms; - - public IPackageManagerWrapper(IPackageManager pms) { - mPms = pms; - } - - /** - * Calls {@code IPackageManager.checkUidPermission()}. - * - * @see android.content.pm.IPackageManager#checkUidPermission - */ - public int checkUidPermission(String permName, int uid) throws RemoteException { - return mPms.checkUidPermission(permName, uid); - } - - /** - * Calls {@code IPackageManager.findPersistentPreferredActivity()}. - * - * @see android.content.pm.IPackageManager#findPersistentPreferredActivity - */ - public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) - throws RemoteException { - return mPms.findPersistentPreferredActivity(intent, userId); - } - - /** - * Calls {@code IPackageManager.getPackageInfo()}. - * - * @see android.content.pm.IPackageManager#getPackageInfo - */ - public PackageInfo getPackageInfo(String packageName, int flags, int userId) - throws RemoteException { - return mPms.getPackageInfo(packageName, flags, userId); - } - - /** - * Calls {@code IPackageManager.getAppOpPermissionPackages()}. - * - * @see android.content.pm.IPackageManager#getAppOpPermissionPackages - */ - public String[] getAppOpPermissionPackages(String permissionName) throws RemoteException { - return mPms.getAppOpPermissionPackages(permissionName); - } - - /** - * Calls {@code IPackageManager.isPackageAvailable()}. - * - * @see android.content.pm.IPackageManager#isPackageAvailable - */ - public boolean isPackageAvailable(String packageName, int userId) throws RemoteException { - return mPms.isPackageAvailable(packageName, userId); - } - - /** - * Calls {@code IPackageManager.getPackagesHoldingPermissions()}. - * - * @see android.content.pm.IPackageManager#getPackagesHoldingPermissions - */ - public ParceledListSlice getPackagesHoldingPermissions( - String[] permissions, int flags, int userId) throws RemoteException { - return mPms.getPackagesHoldingPermissions(permissions, flags, userId); - } - -} diff --git a/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java index 2df0117dad6..a4eeacd26bc 100644 --- a/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java @@ -23,11 +23,11 @@ import static org.mockito.Mockito.when; import android.Manifest; import android.app.AppOpsManager; import android.content.Context; +import android.content.pm.IPackageManager; import android.os.RemoteException; import android.os.UserManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.applications.ApplicationsState.AppEntry; import org.junit.Before; @@ -41,7 +41,7 @@ public final class AppStateAppOpsBridgeTest { @Mock private Context mContext; @Mock private UserManager mUserManager; - @Mock private IPackageManagerWrapper mPackageManagerService; + @Mock private IPackageManager mPackageManagerService; @Mock private AppOpsManager mAppOpsManager; @Before diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java index a0bae85330d..dcc6a1e912e 100644 --- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.Build; @@ -37,7 +38,6 @@ import android.os.UserHandle; import android.os.UserManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import org.junit.Before; @@ -81,7 +81,7 @@ public final class AppWithAdminGrantedPermissionsCounterTest { @Mock private PackageManagerWrapper mPackageManager; @Mock - private IPackageManagerWrapper mPackageManagerService; + private IPackageManager mPackageManagerService; @Mock private DevicePolicyManager mDevicePolicyManager; diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java index 940fd4b8353..8365db2ec45 100644 --- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.Build; @@ -34,7 +35,6 @@ import android.os.UserHandle; import android.os.UserManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import org.junit.Before; @@ -78,7 +78,7 @@ public final class AppWithAdminGrantedPermissionsListerTest { @Mock private PackageManagerWrapper mPackageManager; @Mock - private IPackageManagerWrapper mPackageManagerService; + private IPackageManager mPackageManagerService; @Mock private DevicePolicyManager mDevicePolicyManager; diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java index 8afb7986183..a457ba24dab 100644 --- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; @@ -33,7 +34,6 @@ import android.os.UserManager; import com.android.settings.testutils.ApplicationTestUtils; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.IPackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import org.junit.Before; @@ -72,7 +72,7 @@ public final class ApplicationFeatureProviderImplTest { @Mock private PackageManagerWrapper mPackageManager; @Mock - private IPackageManagerWrapper mPackageManagerService; + private IPackageManager mPackageManagerService; @Mock private DevicePolicyManager mDevicePolicyManager; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java index 5d24180be36..a453f7840b5 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java @@ -105,4 +105,49 @@ public class AppNotificationPreferenceControllerTest { assertThat(controller.getArguments().containsKey(EXTRA_FRAGMENT_ARG_KEY)).isTrue(); assertThat(controller.getArguments().getString(EXTRA_FRAGMENT_ARG_KEY)).isEqualTo("test"); } + + @Test + public void getNotificationSummary_noCrashOnNull() { + mController.getNotificationSummary(null, mContext); + } + + @Test + public void getNotificationSummary_appBlocked() { + NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); + appRow.banned = true; + appRow.blockedChannelCount = 30; + assertThat(mController.getNotificationSummary(appRow, mContext).toString()) + .isEqualTo("Off"); + } + + @Test + public void getNotificationSummary_appNotBlockedAllChannelsBlocked() { + NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); + appRow.banned = false; + appRow.blockedChannelCount = 30; + appRow.channelCount = 30; + assertThat(mController.getNotificationSummary(appRow, mContext).toString()) + .isEqualTo("Off"); + } + + @Test + public void getNotificationSummary_appNotBlocked() { + NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); + appRow.banned = false; + appRow.blockedChannelCount = 30; + appRow.channelCount = 60; + assertThat(mController.getNotificationSummary( + appRow, mContext).toString().contains("30")).isTrue(); + assertThat(mController.getNotificationSummary( + appRow, mContext).toString().contains("On")).isTrue(); + } + + @Test + public void getNotificationSummary_channelsNotBlocked() { + NotificationBackend.AppRow appRow = new NotificationBackend.AppRow(); + appRow.banned = false; + appRow.blockedChannelCount = 0; + appRow.channelCount = 10; + assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo("On"); + } } diff --git a/tests/robotests/src/com/android/settings/enterprise/BackupsEnabledPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/BackupsEnabledPreferenceControllerTest.java new file mode 100644 index 00000000000..a836fa2c06b --- /dev/null +++ b/tests/robotests/src/com/android/settings/enterprise/BackupsEnabledPreferenceControllerTest.java @@ -0,0 +1,71 @@ +/* + * 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.enterprise; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.support.v7.preference.Preference; + +import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; + +@RunWith(SettingsRobolectricTestRunner.class) +public class BackupsEnabledPreferenceControllerTest { + + private static final String KEY_BACKUPS_ENABLED = "backups_enabled"; + + private Context mContext; + private FakeFeatureFactory mFeatureFactory; + + private BackupsEnabledPreferenceController mController; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mFeatureFactory = FakeFeatureFactory.setupForTest(); + mController = new BackupsEnabledPreferenceController(mContext); + } + + @Test + public void testIsAvailable() { + when(mFeatureFactory.enterprisePrivacyFeatureProvider.areBackupsMandatory()) + .thenReturn(false); + assertThat(mController.isAvailable()).isFalse(); + + when(mFeatureFactory.enterprisePrivacyFeatureProvider.areBackupsMandatory()) + .thenReturn(true); + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void testHandlePreferenceTreeClick() { + assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0))) + .isFalse(); + } + + @Test + public void testGetPreferenceKey() { + assertThat(mController.getPreferenceKey()).isEqualTo(KEY_BACKUPS_ENABLED); + } +} diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index b71a35eb277..40371d75a07 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -28,6 +28,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; +import android.net.ConnectivityManager; import android.net.ProxyInfo; import android.os.UserHandle; import android.os.UserManager; @@ -36,7 +37,6 @@ import android.text.SpannableStringBuilder; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import org.junit.Before; @@ -72,7 +72,7 @@ public class EnterprisePrivacyFeatureProviderImplTest { private @Mock PackageManagerWrapper mPackageManagerWrapper; private @Mock PackageManager mPackageManager; private @Mock UserManager mUserManager; - private @Mock ConnectivityManagerWrapper mConnectivityManger; + private @Mock ConnectivityManager mConnectivityManger; private Resources mResources; private EnterprisePrivacyFeatureProvider mProvider; @@ -347,6 +347,15 @@ public class EnterprisePrivacyFeatureProviderImplTest { .isEqualTo(3); } + @Test + public void testAreBackupsMandatory() { + assertThat(mProvider.areBackupsMandatory()).isFalse(); + ComponentName transportComponent = new ComponentName("test", "test"); + when(mDevicePolicyManager.getMandatoryBackupTransport()) + .thenReturn(transportComponent); + assertThat(mProvider.areBackupsMandatory()).isTrue(); + } + private void resetAndInitializePackageManagerWrapper() { reset(mPackageManagerWrapper); when(mPackageManagerWrapper.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN)) diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java index 5266fdec9b9..7bbe9bc1c12 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java @@ -98,7 +98,7 @@ public class EnterprisePrivacySettingsTest { private void verifyPreferenceControllers(List controllers) { assertThat(controllers).isNotNull(); - assertThat(controllers.size()).isEqualTo(17); + assertThat(controllers.size()).isEqualTo(18); int position = 0; assertThat(controllers.get(position++)).isInstanceOf(NetworkLogsPreferenceController.class); assertThat(controllers.get(position++)).isInstanceOf(BugReportsPreferenceController.class); @@ -125,6 +125,8 @@ public class EnterprisePrivacySettingsTest { CaCertsCurrentUserPreferenceController.class); assertThat(controllers.get(position++)).isInstanceOf( CaCertsManagedProfilePreferenceController.class); + assertThat(controllers.get(position++)).isInstanceOf( + BackupsEnabledPreferenceController.class); assertThat(controllers.get(position++)).isInstanceOf( PreferenceCategoryController.class); assertThat(controllers.get(position++)).isInstanceOf( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java index 14627c5b63e..d983dfc7eed 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java @@ -17,8 +17,10 @@ package com.android.settings.fuelgauge.batterytip.detectors; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -48,7 +50,8 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) public class HighUsageDetectorTest { - private static final int UID = 123; + private static final int UID_HIGH = 123; + private static final int UID_ZERO = 345; private static final long SCREEN_ON_TIME_MS = DateUtils.HOUR_IN_MILLIS; private Context mContext; @Mock @@ -56,7 +59,9 @@ public class HighUsageDetectorTest { @Mock private BatteryUtils mBatteryUtils; @Mock - private BatterySipper mBatterySipper; + private BatterySipper mHighBatterySipper; + @Mock + private BatterySipper mZeroBatterySipper; @Mock private HighUsageDataParser mDataParser; @@ -75,14 +80,25 @@ public class HighUsageDetectorTest { mHighUsageDetector.mBatteryUtils = mBatteryUtils; mHighUsageDetector.mDataParser = mDataParser; doNothing().when(mHighUsageDetector).parseBatteryData(); - doReturn(UID).when(mBatterySipper).getUid(); + doReturn(UID_HIGH).when(mHighBatterySipper).getUid(); + mHighBatterySipper.uidObj = mock(BatteryStats.Uid.class); + mZeroBatterySipper.uidObj = mock(BatteryStats.Uid.class); + doReturn(UID_ZERO).when(mZeroBatterySipper).getUid(); mAppInfo = new AppInfo.Builder() - .setUid(UID) + .setUid(UID_HIGH) .setScreenOnTimeMs(SCREEN_ON_TIME_MS) .build(); + doReturn(SCREEN_ON_TIME_MS).when(mBatteryUtils).getProcessTimeMs( + BatteryUtils.StatusType.FOREGROUND, mHighBatterySipper.uidObj, + BatteryStats.STATS_SINCE_CHARGED); + doReturn(0L).when(mBatteryUtils).getProcessTimeMs( + BatteryUtils.StatusType.FOREGROUND, mZeroBatterySipper.uidObj, + BatteryStats.STATS_SINCE_CHARGED); + mUsageList = new ArrayList<>(); - mUsageList.add(mBatterySipper); + mUsageList.add(mHighBatterySipper); + when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList); } @Test @@ -95,10 +111,16 @@ public class HighUsageDetectorTest { @Test public void testDetect_containsHighUsageApp_tipVisible() { doReturn(true).when(mDataParser).isDeviceHeavilyUsed(); - when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList); - doReturn(SCREEN_ON_TIME_MS).when(mBatteryUtils).getProcessTimeMs( - BatteryUtils.StatusType.FOREGROUND, mBatterySipper.uidObj, - BatteryStats.STATS_SINCE_CHARGED); + + final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect(); + assertThat(highUsageTip.isVisible()).isTrue(); + assertThat(highUsageTip.getHighUsageAppList()).containsExactly(mAppInfo); + } + + @Test + public void testDetect_containsHighUsageApp_removeZeroOne() { + doReturn(true).when(mDataParser).isDeviceHeavilyUsed(); + mUsageList.add(mZeroBatterySipper); final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect(); assertThat(highUsageTip.isVisible()).isTrue(); diff --git a/tests/robotests/src/com/android/settings/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java similarity index 99% rename from tests/robotests/src/com/android/settings/ApnEditorTest.java rename to tests/robotests/src/com/android/settings/network/ApnEditorTest.java index aca460f89ae..f3315e5153a 100644 --- a/tests/robotests/src/com/android/settings/ApnEditorTest.java +++ b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.network; import static com.google.common.truth.Truth.assertThat; @@ -40,7 +40,8 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -import com.android.settings.ApnEditor.ApnData; +import com.android.settings.R; +import com.android.settings.network.ApnEditor.ApnData; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; @@ -52,7 +53,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; -import org.robolectric.RuntimeEnvironment; @RunWith(SettingsRobolectricTestRunner.class) public class ApnEditorTest { diff --git a/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java b/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java index f354c43d23f..fd41c3682ee 100644 --- a/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java +++ b/tests/robotests/src/com/android/settings/vpn2/VpnUtilsTest.java @@ -20,8 +20,9 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import android.net.ConnectivityManager; + import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,7 +31,7 @@ import org.junit.runner.RunWith; public final class VpnUtilsTest { @Test public void testIsAlwaysOnVpnSet() { - final ConnectivityManagerWrapper cm = mock(ConnectivityManagerWrapper.class); + final ConnectivityManager cm = mock(ConnectivityManager.class); when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn"); assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isTrue(); diff --git a/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java index b7bc33e9a46..66cbd3011e0 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java @@ -26,7 +26,6 @@ import android.net.wifi.WifiManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.widget.SwitchWidgetController; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; @@ -43,7 +42,7 @@ public class WifiEnablerTest { @Mock private WifiManager mWifiManager; @Mock - private ConnectivityManagerWrapper mConnectivityManager; + private ConnectivityManager mConnectivityManager; private WifiEnabler mEnabler; @@ -52,7 +51,7 @@ public class WifiEnablerTest { MockitoAnnotations.initMocks(this); when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager); mEnabler = new WifiEnabler(mContext, mock(SwitchWidgetController.class), - mock(MetricsFeatureProvider.class), mConnectivityManager); + mock(MetricsFeatureProvider.class), mConnectivityManager); } @Test diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index 9c20d18aeba..d08f922a450 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -51,7 +51,6 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.provider.Settings; -import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceScreen; import android.view.View; @@ -70,7 +69,6 @@ import com.android.settings.widget.ActionButtonPreference; import com.android.settings.widget.ActionButtonPreferenceTest; import com.android.settings.widget.EntityHeaderController; import com.android.settings.wifi.WifiDetailPreference; -import com.android.settings.wrapper.ConnectivityManagerWrapper; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.wifi.AccessPoint; @@ -91,7 +89,6 @@ import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; -import java.util.List; import java.util.stream.Collectors; @RunWith(SettingsRobolectricTestRunner.class) @@ -119,8 +116,6 @@ public class WifiDetailPreferenceControllerTest { @Mock private ConnectivityManager mockConnectivityManager; @Mock - private ConnectivityManagerWrapper mockConnectivityManagerWrapper; - @Mock private Network mockNetwork; @Mock private NetworkInfo mockNetworkInfo; @@ -173,8 +168,6 @@ public class WifiDetailPreferenceControllerTest { private ArgumentCaptor mCallbackCaptor; @Captor private ArgumentCaptor mForgetClickListener; - @Captor - private ArgumentCaptor mIpv6AddressCaptor; private Context mContext; private Lifecycle mLifecycle; @@ -245,12 +238,9 @@ public class WifiDetailPreferenceControllerTest { when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfig); when(mockAccessPoint.getLevel()).thenReturn(LEVEL); when(mockAccessPoint.getSecurityString(false)).thenReturn(SECURITY); - - when(mockConnectivityManagerWrapper.getConnectivityManager()) - .thenReturn(mockConnectivityManager); when(mockConnectivityManager.getNetworkInfo(any(Network.class))) .thenReturn(mockNetworkInfo); - doNothing().when(mockConnectivityManagerWrapper).registerNetworkCallback( + doNothing().when(mockConnectivityManager).registerNetworkCallback( nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class)); mockButtonsPref = ActionButtonPreferenceTest.createMock(); when(mockButtonsPref.setButton1OnClickListener(mForgetClickListener.capture())) @@ -281,7 +271,7 @@ public class WifiDetailPreferenceControllerTest { private WifiDetailPreferenceController newWifiDetailPreferenceController() { return new WifiDetailPreferenceController( mockAccessPoint, - mockConnectivityManagerWrapper, + mockConnectivityManager, mContext, mockFragment, null, // Handler @@ -362,7 +352,7 @@ public class WifiDetailPreferenceControllerTest { public void networkCallback_shouldBeRegisteredOnResume() { displayAndResume(); - verify(mockConnectivityManagerWrapper, times(1)).registerNetworkCallback( + verify(mockConnectivityManager, times(1)).registerNetworkCallback( nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class)); } @@ -779,8 +769,6 @@ public class WifiDetailPreferenceControllerTest { displayAndResume(); - List addrs = mIpv6AddressCaptor.getAllValues(); - String expectedAddresses = String.join("\n", asString(Constants.IPV6_LINKLOCAL), asString(Constants.IPV6_GLOBAL1), @@ -826,7 +814,7 @@ public class WifiDetailPreferenceControllerTest { ArgumentCaptor captor = ArgumentCaptor.forClass(OnClickListener.class); verify(mockButtonsPref).setButton2OnClickListener(captor.capture()); captor.getValue().onClick(null); - verify(mockConnectivityManagerWrapper).startCaptivePortalApp(mockNetwork); + verify(mockConnectivityManager).startCaptivePortalApp(mockNetwork); verify(mockMetricsFeatureProvider) .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN); }