Snap for 4698807 from 54ee35c35c
to pi-release
Change-Id: I5675b94a50cd3edc4fc294d67e99f52d892f66e4
This commit is contained in:
@@ -388,7 +388,7 @@
|
|||||||
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||||
android:value="true" />
|
android:value="true" />
|
||||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
android:value="com.android.settings.ApnSettings" />
|
android:value="com.android.settings.network.ApnSettings" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<!-- Keep compatibility with old shortcuts. -->
|
<!-- Keep compatibility with old shortcuts. -->
|
||||||
@@ -1903,7 +1903,7 @@
|
|||||||
<data android:mimeType="vnd.android.cursor.dir/telephony-carrier" />
|
<data android:mimeType="vnd.android.cursor.dir/telephony-carrier" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
android:value="com.android.settings.ApnEditor" />
|
android:value="com.android.settings.network.ApnEditor" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
|
@@ -83,6 +83,9 @@
|
|||||||
<Preference android:key="ca_certs_managed_profile"
|
<Preference android:key="ca_certs_managed_profile"
|
||||||
android:title="@string/enterprise_privacy_ca_certs_work"
|
android:title="@string/enterprise_privacy_ca_certs_work"
|
||||||
android:selectable="false"/>
|
android:selectable="false"/>
|
||||||
|
<Preference android:key="backups_enabled"
|
||||||
|
android:title="@string/enterprise_privacy_backups_enabled"
|
||||||
|
android:selectable="false"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:key="device_access_category"
|
<PreferenceCategory android:key="device_access_category"
|
||||||
|
@@ -46,6 +46,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
|||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
import com.android.settings.core.InstrumentedFragment;
|
import com.android.settings.core.InstrumentedFragment;
|
||||||
import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
|
import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
|
||||||
|
import com.android.settings.network.ApnSettings;
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -19,6 +19,7 @@ import android.app.AppGlobals;
|
|||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.AppOpsManager.PackageOps;
|
import android.app.AppOpsManager.PackageOps;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
@@ -31,7 +32,6 @@ import android.util.SparseArray;
|
|||||||
|
|
||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -47,7 +47,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
|
|
||||||
private static final String TAG = "AppStateAppOpsBridge";
|
private static final String TAG = "AppStateAppOpsBridge";
|
||||||
|
|
||||||
private final IPackageManagerWrapper mIPackageManager;
|
private final IPackageManager mIPackageManager;
|
||||||
private final UserManager mUserManager;
|
private final UserManager mUserManager;
|
||||||
private final List<UserHandle> mProfiles;
|
private final List<UserHandle> mProfiles;
|
||||||
private final AppOpsManager mAppOpsManager;
|
private final AppOpsManager mAppOpsManager;
|
||||||
@@ -58,12 +58,12 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
|
public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
|
||||||
int appOpsOpCode, String[] permissions) {
|
int appOpsOpCode, String[] permissions) {
|
||||||
this(context, appState, callback, appOpsOpCode, permissions,
|
this(context, appState, callback, appOpsOpCode, permissions,
|
||||||
new IPackageManagerWrapper(AppGlobals.getPackageManager()));
|
AppGlobals.getPackageManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
|
AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback,
|
||||||
int appOpsOpCode, String[] permissions, IPackageManagerWrapper packageManager) {
|
int appOpsOpCode, String[] permissions, IPackageManager packageManager) {
|
||||||
super(appState, callback);
|
super(appState, callback);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mIPackageManager = packageManager;
|
mIPackageManager = packageManager;
|
||||||
@@ -210,9 +210,10 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
if (entriesForProfile == null) {
|
if (entriesForProfile == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked") final List<PackageInfo> packageInfos =
|
||||||
final List<PackageInfo> packageInfos = mIPackageManager
|
mIPackageManager
|
||||||
.getPackagesHoldingPermissions(mPermissions, 0, profileId).getList();
|
.getPackagesHoldingPermissions(mPermissions, 0,
|
||||||
|
profileId).getList();
|
||||||
final int packageInfoCount = packageInfos != null ? packageInfos.size() : 0;
|
final int packageInfoCount = packageInfos != null ? packageInfos.size() : 0;
|
||||||
for (int i = 0; i < packageInfoCount; i++) {
|
for (int i = 0; i < packageInfoCount; i++) {
|
||||||
final PackageInfo packageInfo = packageInfos.get(i);
|
final PackageInfo packageInfo = packageInfos.get(i);
|
||||||
|
@@ -17,12 +17,12 @@ package com.android.settings.applications;
|
|||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,11 +32,11 @@ import com.android.settingslib.wrapper.PackageManagerWrapper;
|
|||||||
public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter {
|
public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter {
|
||||||
|
|
||||||
private final String[] mPermissions;
|
private final String[] mPermissions;
|
||||||
private final IPackageManagerWrapper mPackageManagerService;
|
private final IPackageManager mPackageManagerService;
|
||||||
private final DevicePolicyManager mDevicePolicyManager;
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public AppWithAdminGrantedPermissionsCounter(Context context, String[] permissions,
|
public AppWithAdminGrantedPermissionsCounter(Context context, String[] permissions,
|
||||||
PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
|
PackageManagerWrapper packageManager, IPackageManager packageManagerService,
|
||||||
DevicePolicyManager devicePolicyManager) {
|
DevicePolicyManager devicePolicyManager) {
|
||||||
super(context, packageManager);
|
super(context, packageManager);
|
||||||
mPermissions = permissions;
|
mPermissions = permissions;
|
||||||
@@ -52,7 +52,7 @@ public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter {
|
|||||||
|
|
||||||
public static boolean includeInCount(String[] permissions,
|
public static boolean includeInCount(String[] permissions,
|
||||||
DevicePolicyManager devicePolicyManager, PackageManagerWrapper packageManager,
|
DevicePolicyManager devicePolicyManager, PackageManagerWrapper packageManager,
|
||||||
IPackageManagerWrapper packageManagerService, ApplicationInfo info) {
|
IPackageManager packageManagerService, ApplicationInfo info) {
|
||||||
if (info.targetSdkVersion >= Build.VERSION_CODES.M) {
|
if (info.targetSdkVersion >= Build.VERSION_CODES.M) {
|
||||||
// The app uses run-time permissions. Check whether one or more of the permissions were
|
// The app uses run-time permissions. Check whether one or more of the permissions were
|
||||||
// granted by enterprise policy.
|
// granted by enterprise policy.
|
||||||
|
@@ -18,9 +18,9 @@ package com.android.settings.applications;
|
|||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,11 +29,11 @@ import com.android.settingslib.wrapper.PackageManagerWrapper;
|
|||||||
*/
|
*/
|
||||||
public abstract class AppWithAdminGrantedPermissionsLister extends AppLister {
|
public abstract class AppWithAdminGrantedPermissionsLister extends AppLister {
|
||||||
private final String[] mPermissions;
|
private final String[] mPermissions;
|
||||||
private final IPackageManagerWrapper mPackageManagerService;
|
private final IPackageManager mPackageManagerService;
|
||||||
private final DevicePolicyManager mDevicePolicyManager;
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public AppWithAdminGrantedPermissionsLister(String[] permissions,
|
public AppWithAdminGrantedPermissionsLister(String[] permissions,
|
||||||
PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
|
PackageManagerWrapper packageManager, IPackageManager packageManagerService,
|
||||||
DevicePolicyManager devicePolicyManager, UserManager userManager) {
|
DevicePolicyManager devicePolicyManager, UserManager userManager) {
|
||||||
super(packageManager, userManager);
|
super(packageManager, userManager);
|
||||||
mPermissions = permissions;
|
mPermissions = permissions;
|
||||||
|
@@ -20,6 +20,7 @@ import android.app.admin.DevicePolicyManager;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ComponentInfo;
|
import android.content.pm.ComponentInfo;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
@@ -27,7 +28,6 @@ import android.os.RemoteException;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
|
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -38,12 +38,12 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
|
|||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final PackageManagerWrapper mPm;
|
private final PackageManagerWrapper mPm;
|
||||||
private final IPackageManagerWrapper mPms;
|
private final IPackageManager mPms;
|
||||||
private final DevicePolicyManager mDpm;
|
private final DevicePolicyManager mDpm;
|
||||||
private final UserManager mUm;
|
private final UserManager mUm;
|
||||||
|
|
||||||
public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm,
|
public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm,
|
||||||
IPackageManagerWrapper pms, DevicePolicyManager dpm) {
|
IPackageManager pms, DevicePolicyManager dpm) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mPm = pm;
|
mPm = pm;
|
||||||
mPms = pms;
|
mPms = pms;
|
||||||
@@ -149,7 +149,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
|
|||||||
|
|
||||||
CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(Context context,
|
CurrentUserAndManagedProfileAppWithAdminGrantedPermissionsCounter(Context context,
|
||||||
String[] permissions, PackageManagerWrapper packageManager,
|
String[] permissions, PackageManagerWrapper packageManager,
|
||||||
IPackageManagerWrapper packageManagerService,
|
IPackageManager packageManagerService,
|
||||||
DevicePolicyManager devicePolicyManager, NumberOfAppsCallback callback) {
|
DevicePolicyManager devicePolicyManager, NumberOfAppsCallback callback) {
|
||||||
super(context, permissions, packageManager, packageManagerService, devicePolicyManager);
|
super(context, permissions, packageManager, packageManagerService, devicePolicyManager);
|
||||||
mCallback = callback;
|
mCallback = callback;
|
||||||
@@ -181,7 +181,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
|
|||||||
private ListOfAppsCallback mCallback;
|
private ListOfAppsCallback mCallback;
|
||||||
|
|
||||||
CurrentUserAppWithAdminGrantedPermissionsLister(String[] permissions,
|
CurrentUserAppWithAdminGrantedPermissionsLister(String[] permissions,
|
||||||
PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
|
PackageManagerWrapper packageManager, IPackageManager packageManagerService,
|
||||||
DevicePolicyManager devicePolicyManager, UserManager userManager,
|
DevicePolicyManager devicePolicyManager, UserManager userManager,
|
||||||
ListOfAppsCallback callback) {
|
ListOfAppsCallback callback) {
|
||||||
super(permissions, packageManager, packageManagerService, devicePolicyManager,
|
super(permissions, packageManager, packageManagerService, devicePolicyManager,
|
||||||
|
@@ -22,6 +22,7 @@ import android.content.Context;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.notification.AppNotificationSettings;
|
import com.android.settings.notification.AppNotificationSettings;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
@@ -77,7 +78,18 @@ public class AppNotificationPreferenceController extends AppInfoPreferenceContro
|
|||||||
|
|
||||||
public static CharSequence getNotificationSummary(NotificationBackend.AppRow appRow,
|
public static CharSequence getNotificationSummary(NotificationBackend.AppRow appRow,
|
||||||
Context context) {
|
Context context) {
|
||||||
// TODO: implement summary when it is known what it should say
|
if (appRow == null) {
|
||||||
return "";
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.core.gateway;
|
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.DateTimeSettings;
|
||||||
import com.android.settings.DeviceAdminSettings;
|
import com.android.settings.DeviceAdminSettings;
|
||||||
import com.android.settings.DisplaySettings;
|
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.language.LanguageAndInputSettings;
|
||||||
import com.android.settings.localepicker.LocaleListEditor;
|
import com.android.settings.localepicker.LocaleListEditor;
|
||||||
import com.android.settings.location.LocationSettings;
|
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.network.NetworkDashboardFragment;
|
||||||
import com.android.settings.nfc.AndroidBeam;
|
import com.android.settings.nfc.AndroidBeam;
|
||||||
import com.android.settings.nfc.PaymentSettings;
|
import com.android.settings.nfc.PaymentSettings;
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@@ -124,4 +124,9 @@ public interface EnterprisePrivacyFeatureProvider {
|
|||||||
* profile (if any).
|
* profile (if any).
|
||||||
*/
|
*/
|
||||||
int getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
|
int getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns whether backups are mandatory.
|
||||||
|
*/
|
||||||
|
boolean areBackupsMandatory();
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ import android.content.Intent;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -32,7 +33,6 @@ import android.view.View;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.vpn2.VpnUtils;
|
import com.android.settings.vpn2.VpnUtils;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -44,13 +44,13 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
|
|||||||
private final DevicePolicyManager mDpm;
|
private final DevicePolicyManager mDpm;
|
||||||
private final PackageManagerWrapper mPm;
|
private final PackageManagerWrapper mPm;
|
||||||
private final UserManager mUm;
|
private final UserManager mUm;
|
||||||
private final ConnectivityManagerWrapper mCm;
|
private final ConnectivityManager mCm;
|
||||||
private final Resources mResources;
|
private final Resources mResources;
|
||||||
|
|
||||||
private static final int MY_USER_ID = UserHandle.myUserId();
|
private static final int MY_USER_ID = UserHandle.myUserId();
|
||||||
|
|
||||||
public EnterprisePrivacyFeatureProviderImpl(Context context, DevicePolicyManager dpm,
|
public EnterprisePrivacyFeatureProviderImpl(Context context, DevicePolicyManager dpm,
|
||||||
PackageManagerWrapper pm, UserManager um, ConnectivityManagerWrapper cm,
|
PackageManagerWrapper pm, UserManager um, ConnectivityManager cm,
|
||||||
Resources resources) {
|
Resources resources) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mDpm = dpm;
|
mDpm = dpm;
|
||||||
@@ -235,6 +235,11 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
|
|||||||
return activeAdmins;
|
return activeAdmins;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean areBackupsMandatory() {
|
||||||
|
return null != mDpm.getMandatoryBackupTransport();
|
||||||
|
}
|
||||||
|
|
||||||
protected static class EnterprisePrivacySpan extends ClickableSpan {
|
protected static class EnterprisePrivacySpan extends ClickableSpan {
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
|
||||||
|
@@ -82,6 +82,7 @@ public class EnterprisePrivacySettings extends DashboardFragment {
|
|||||||
exposureChangesCategoryControllers.add(new CaCertsCurrentUserPreferenceController(context));
|
exposureChangesCategoryControllers.add(new CaCertsCurrentUserPreferenceController(context));
|
||||||
exposureChangesCategoryControllers.add(new CaCertsManagedProfilePreferenceController(
|
exposureChangesCategoryControllers.add(new CaCertsManagedProfilePreferenceController(
|
||||||
context));
|
context));
|
||||||
|
exposureChangesCategoryControllers.add(new BackupsEnabledPreferenceController(context));
|
||||||
controllers.addAll(exposureChangesCategoryControllers);
|
controllers.addAll(exposureChangesCategoryControllers);
|
||||||
controllers.add(new PreferenceCategoryController(context, "exposure_changes_category")
|
controllers.add(new PreferenceCategoryController(context, "exposure_changes_category")
|
||||||
.setChildren(exposureChangesCategoryControllers));
|
.setChildren(exposureChangesCategoryControllers));
|
||||||
|
@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batterytip.detectors;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.BatteryStats;
|
import android.os.BatteryStats;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
import com.android.internal.os.BatterySipper;
|
import com.android.internal.os.BatterySipper;
|
||||||
import com.android.internal.os.BatteryStatsHelper;
|
import com.android.internal.os.BatteryStatsHelper;
|
||||||
@@ -72,18 +73,20 @@ public class HighUsageDetector implements BatteryTipDetector {
|
|||||||
final long foregroundTimeMs = mBatteryUtils.getProcessTimeMs(
|
final long foregroundTimeMs = mBatteryUtils.getProcessTimeMs(
|
||||||
BatteryUtils.StatusType.FOREGROUND, batterySipper.uidObj,
|
BatteryUtils.StatusType.FOREGROUND, batterySipper.uidObj,
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
BatteryStats.STATS_SINCE_CHARGED);
|
||||||
mHighUsageAppList.add(new AppInfo.Builder()
|
if (foregroundTimeMs >= DateUtils.MINUTE_IN_MILLIS) {
|
||||||
.setUid(batterySipper.getUid())
|
mHighUsageAppList.add(new AppInfo.Builder()
|
||||||
.setPackageName(
|
.setUid(batterySipper.getUid())
|
||||||
mBatteryUtils.getPackageName(batterySipper.getUid()))
|
.setPackageName(
|
||||||
.setScreenOnTimeMs(foregroundTimeMs)
|
mBatteryUtils.getPackageName(batterySipper.getUid()))
|
||||||
.build());
|
.setScreenOnTimeMs(foregroundTimeMs)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.sort(mHighUsageAppList, Collections.reverseOrder());
|
||||||
mHighUsageAppList = mHighUsageAppList.subList(0,
|
mHighUsageAppList = mHighUsageAppList.subList(0,
|
||||||
Math.min(mPolicy.highUsageAppCount, mHighUsageAppList.size()));
|
Math.min(mPolicy.highUsageAppCount, mHighUsageAppList.size()));
|
||||||
Collections.sort(mHighUsageAppList, Collections.reverseOrder());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,7 +14,9 @@
|
|||||||
* limitations under the License.
|
* 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.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
@@ -47,9 +49,11 @@ import android.view.View.OnKeyListener;
|
|||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
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.telephony.PhoneConstants;
|
||||||
import com.android.internal.util.ArrayUtils;
|
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 com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -57,11 +61,6 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
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
|
public class ApnEditor extends SettingsPreferenceFragment
|
||||||
implements OnPreferenceChangeListener, OnKeyListener {
|
implements OnPreferenceChangeListener, OnKeyListener {
|
||||||
|
|
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings.network;
|
||||||
|
|
||||||
import android.content.ContentUris;
|
import android.content.ContentUris;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -32,6 +32,8 @@ import android.widget.CompoundButton;
|
|||||||
import android.widget.RadioButton;
|
import android.widget.RadioButton;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
|
||||||
public class ApnPreference extends Preference implements
|
public class ApnPreference extends Preference implements
|
||||||
CompoundButton.OnCheckedChangeListener, OnClickListener {
|
CompoundButton.OnCheckedChangeListener, OnClickListener {
|
||||||
final static String TAG = "ApnPreference";
|
final static String TAG = "ApnPreference";
|
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings.network;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
@@ -39,7 +39,6 @@ import android.os.UserManager;
|
|||||||
import android.provider.Telephony;
|
import android.provider.Telephony;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.support.v7.preference.PreferenceGroup;
|
import android.support.v7.preference.PreferenceGroup;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
@@ -50,7 +49,6 @@ import android.view.Menu;
|
|||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
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.dataconnection.ApnSetting;
|
||||||
import com.android.internal.telephony.uicc.IccRecords;
|
import com.android.internal.telephony.uicc.IccRecords;
|
||||||
import com.android.internal.telephony.uicc.UiccController;
|
import com.android.internal.telephony.uicc.UiccController;
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.RestrictedSettingsFragment;
|
||||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
@@ -60,6 +60,8 @@ public class NotificationBackend {
|
|||||||
row.banned = getNotificationsBanned(row.pkg, row.uid);
|
row.banned = getNotificationsBanned(row.pkg, row.uid);
|
||||||
row.showBadge = canShowBadge(row.pkg, row.uid);
|
row.showBadge = canShowBadge(row.pkg, row.uid);
|
||||||
row.userId = UserHandle.getUserId(row.uid);
|
row.userId = UserHandle.getUserId(row.uid);
|
||||||
|
row.blockedChannelCount = getBlockedChannelCount(row.pkg, row.uid);
|
||||||
|
row.channelCount = getChannelCount(row.pkg, row.uid);
|
||||||
return row;
|
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<NotificationChannelGroup> getGroups(String pkg, int uid) {
|
public ParceledListSlice<NotificationChannelGroup> getGroups(String pkg, int uid) {
|
||||||
try {
|
try {
|
||||||
return sINM.getNotificationChannelGroupsForPackage(pkg, uid, false);
|
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) {
|
public boolean onlyHasDefaultChannel(String pkg, int uid) {
|
||||||
try {
|
try {
|
||||||
return sINM.onlyHasDefaultChannel(pkg, uid);
|
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<NotifyingApp> getRecentApps() {
|
public List<NotifyingApp> getRecentApps() {
|
||||||
try {
|
try {
|
||||||
return sINM.getRecentNotifyingAppsForUser(UserHandle.myUserId()).getList();
|
return sINM.getRecentNotifyingAppsForUser(UserHandle.myUserId()).getList();
|
||||||
@@ -259,5 +267,7 @@ public class NotificationBackend {
|
|||||||
public String lockedChannelId;
|
public String lockedChannelId;
|
||||||
public boolean showBadge;
|
public boolean showBadge;
|
||||||
public int userId;
|
public int userId;
|
||||||
|
public int blockedChannelCount;
|
||||||
|
public int channelCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -83,6 +83,7 @@ public class VolumeSeekBarPreference extends SeekBarPreference {
|
|||||||
public void setStream(int stream) {
|
public void setStream(int stream) {
|
||||||
mStream = stream;
|
mStream = stream;
|
||||||
setMax(mAudioManager.getStreamMaxVolume(mStream));
|
setMax(mAudioManager.getStreamMaxVolume(mStream));
|
||||||
|
setMin(mAudioManager.getStreamMinVolume(mStream));
|
||||||
setProgress(mAudioManager.getStreamVolume(mStream));
|
setProgress(mAudioManager.getStreamVolume(mStream));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -51,8 +51,6 @@ import com.android.settings.slices.SlicesFeatureProvider;
|
|||||||
import com.android.settings.slices.SlicesFeatureProviderImpl;
|
import com.android.settings.slices.SlicesFeatureProviderImpl;
|
||||||
import com.android.settings.users.UserFeatureProvider;
|
import com.android.settings.users.UserFeatureProvider;
|
||||||
import com.android.settings.users.UserFeatureProviderImpl;
|
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.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
@@ -112,7 +110,7 @@ public class FeatureFactoryImpl extends FeatureFactory {
|
|||||||
if (mApplicationFeatureProvider == null) {
|
if (mApplicationFeatureProvider == null) {
|
||||||
mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context,
|
mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context,
|
||||||
new PackageManagerWrapper(context.getPackageManager()),
|
new PackageManagerWrapper(context.getPackageManager()),
|
||||||
new IPackageManagerWrapper(AppGlobals.getPackageManager()),
|
AppGlobals.getPackageManager(),
|
||||||
(DevicePolicyManager) context
|
(DevicePolicyManager) context
|
||||||
.getSystemService(Context.DEVICE_POLICY_SERVICE));
|
.getSystemService(Context.DEVICE_POLICY_SERVICE));
|
||||||
}
|
}
|
||||||
@@ -134,8 +132,7 @@ public class FeatureFactoryImpl extends FeatureFactory {
|
|||||||
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE),
|
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE),
|
||||||
new PackageManagerWrapper(context.getPackageManager()),
|
new PackageManagerWrapper(context.getPackageManager()),
|
||||||
UserManager.get(context),
|
UserManager.get(context),
|
||||||
new ConnectivityManagerWrapper((ConnectivityManager) context
|
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE),
|
||||||
.getSystemService(Context.CONNECTIVITY_SERVICE)),
|
|
||||||
context.getResources());
|
context.getResources());
|
||||||
}
|
}
|
||||||
return mEnterprisePrivacyFeatureProvider;
|
return mEnterprisePrivacyFeatureProvider;
|
||||||
|
@@ -27,7 +27,6 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.internal.net.LegacyVpnInfo;
|
import com.android.internal.net.LegacyVpnInfo;
|
||||||
import com.android.internal.net.VpnConfig;
|
import com.android.internal.net.VpnConfig;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility functions for vpn.
|
* Utility functions for vpn.
|
||||||
@@ -89,7 +88,7 @@ public class VpnUtils {
|
|||||||
ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
|
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;
|
return cm.getAlwaysOnVpnPackageForUser(userId) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,11 +34,10 @@ import android.widget.Toast;
|
|||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.widget.SwitchWidgetController;
|
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;
|
||||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
import com.android.settingslib.WirelessUtils;
|
import com.android.settingslib.WirelessUtils;
|
||||||
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@@ -46,7 +45,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
|
|||||||
|
|
||||||
private final SwitchWidgetController mSwitchWidget;
|
private final SwitchWidgetController mSwitchWidget;
|
||||||
private final WifiManager mWifiManager;
|
private final WifiManager mWifiManager;
|
||||||
private final ConnectivityManagerWrapper mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -81,20 +80,20 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
|
|||||||
|
|
||||||
public WifiEnabler(Context context, SwitchWidgetController switchWidget,
|
public WifiEnabler(Context context, SwitchWidgetController switchWidget,
|
||||||
MetricsFeatureProvider metricsFeatureProvider) {
|
MetricsFeatureProvider metricsFeatureProvider) {
|
||||||
this(context, switchWidget, metricsFeatureProvider, new ConnectivityManagerWrapper(
|
this(context, switchWidget, metricsFeatureProvider,
|
||||||
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)));
|
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
WifiEnabler(Context context, SwitchWidgetController switchWidget,
|
WifiEnabler(Context context, SwitchWidgetController switchWidget,
|
||||||
MetricsFeatureProvider metricsFeatureProvider,
|
MetricsFeatureProvider metricsFeatureProvider,
|
||||||
ConnectivityManagerWrapper connectivityManagerWrapper) {
|
ConnectivityManager connectivityManager) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSwitchWidget = switchWidget;
|
mSwitchWidget = switchWidget;
|
||||||
mSwitchWidget.setListener(this);
|
mSwitchWidget.setListener(this);
|
||||||
mMetricsFeatureProvider = metricsFeatureProvider;
|
mMetricsFeatureProvider = metricsFeatureProvider;
|
||||||
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||||
mConnectivityManager = connectivityManagerWrapper;
|
mConnectivityManager = connectivityManager;
|
||||||
|
|
||||||
mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
||||||
// The order matters! We really should not depend on this. :(
|
// The order matters! We really should not depend on this. :(
|
||||||
|
@@ -64,7 +64,6 @@ import com.android.settings.search.SearchIndexableRaw;
|
|||||||
import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
|
import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
|
||||||
import com.android.settings.widget.SwitchBarController;
|
import com.android.settings.widget.SwitchBarController;
|
||||||
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
|
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.wifi.AccessPoint;
|
import com.android.settingslib.wifi.AccessPoint;
|
||||||
import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
|
import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
|
||||||
@@ -852,9 +851,7 @@ public class WifiSettings extends RestrictedSettingsFragment
|
|||||||
pref.getAccessPoint().saveWifiState(pref.getExtras());
|
pref.getAccessPoint().saveWifiState(pref.getExtras());
|
||||||
if (mCaptivePortalNetworkCallback != null
|
if (mCaptivePortalNetworkCallback != null
|
||||||
&& mCaptivePortalNetworkCallback.isCaptivePortal()) {
|
&& mCaptivePortalNetworkCallback.isCaptivePortal()) {
|
||||||
ConnectivityManagerWrapper connectivityManagerWrapper =
|
mConnectivityManager.startCaptivePortalApp(
|
||||||
new ConnectivityManagerWrapper(mConnectivityManager);
|
|
||||||
connectivityManagerWrapper.startCaptivePortalApp(
|
|
||||||
mCaptivePortalNetworkCallback.getNetwork());
|
mCaptivePortalNetworkCallback.getNetwork());
|
||||||
} else {
|
} else {
|
||||||
launchNetworkDetailsFragment(pref);
|
launchNetworkDetailsFragment(pref);
|
||||||
|
@@ -48,6 +48,7 @@ import android.text.TextUtils;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.R;
|
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;
|
||||||
import com.android.settings.wifi.WifiDialog.WifiDialogListener;
|
import com.android.settings.wifi.WifiDialog.WifiDialogListener;
|
||||||
import com.android.settings.wifi.WifiUtils;
|
import com.android.settings.wifi.WifiUtils;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
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.OnPause;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnResume;
|
import com.android.settingslib.core.lifecycle.events.OnResume;
|
||||||
import com.android.settingslib.wifi.AccessPoint;
|
import com.android.settingslib.wifi.AccessPoint;
|
||||||
|
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
@@ -114,7 +115,6 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
static final String KEY_IPV6_ADDRESSES_PREF = "ipv6_addresses";
|
static final String KEY_IPV6_ADDRESSES_PREF = "ipv6_addresses";
|
||||||
|
|
||||||
private AccessPoint mAccessPoint;
|
private AccessPoint mAccessPoint;
|
||||||
private final ConnectivityManagerWrapper mConnectivityManagerWrapper;
|
|
||||||
private final ConnectivityManager mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
private final Fragment mFragment;
|
private final Fragment mFragment;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
@@ -152,10 +152,10 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
switch (intent.getAction()) {
|
switch (intent.getAction()) {
|
||||||
case WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION:
|
case WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION:
|
||||||
if (!intent.getBooleanExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED,
|
if (!intent.getBooleanExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED,
|
||||||
false /* defaultValue */)) {
|
false /* defaultValue */)) {
|
||||||
// only one network changed
|
// only one network changed
|
||||||
WifiConfiguration wifiConfiguration = intent
|
WifiConfiguration wifiConfiguration = intent
|
||||||
.getParcelableExtra(WifiManager.EXTRA_WIFI_CONFIGURATION);
|
.getParcelableExtra(WifiManager.EXTRA_WIFI_CONFIGURATION);
|
||||||
if (mAccessPoint.matches(wifiConfiguration)) {
|
if (mAccessPoint.matches(wifiConfiguration)) {
|
||||||
mWifiConfig = wifiConfiguration;
|
mWifiConfig = wifiConfiguration;
|
||||||
}
|
}
|
||||||
@@ -215,7 +215,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
|
|
||||||
public static WifiDetailPreferenceController newInstance(
|
public static WifiDetailPreferenceController newInstance(
|
||||||
AccessPoint accessPoint,
|
AccessPoint accessPoint,
|
||||||
ConnectivityManagerWrapper connectivityManagerWrapper,
|
ConnectivityManager connectivityManager,
|
||||||
Context context,
|
Context context,
|
||||||
Fragment fragment,
|
Fragment fragment,
|
||||||
Handler handler,
|
Handler handler,
|
||||||
@@ -223,14 +223,14 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
WifiManager wifiManager,
|
WifiManager wifiManager,
|
||||||
MetricsFeatureProvider metricsFeatureProvider) {
|
MetricsFeatureProvider metricsFeatureProvider) {
|
||||||
return new WifiDetailPreferenceController(
|
return new WifiDetailPreferenceController(
|
||||||
accessPoint, connectivityManagerWrapper, context, fragment, handler, lifecycle,
|
accessPoint, connectivityManager, context, fragment, handler, lifecycle,
|
||||||
wifiManager, metricsFeatureProvider, new IconInjector(context));
|
wifiManager, metricsFeatureProvider, new IconInjector(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
/* package */ WifiDetailPreferenceController(
|
/* package */ WifiDetailPreferenceController(
|
||||||
AccessPoint accessPoint,
|
AccessPoint accessPoint,
|
||||||
ConnectivityManagerWrapper connectivityManagerWrapper,
|
ConnectivityManager connectivityManager,
|
||||||
Context context,
|
Context context,
|
||||||
Fragment fragment,
|
Fragment fragment,
|
||||||
Handler handler,
|
Handler handler,
|
||||||
@@ -241,8 +241,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
super(context);
|
super(context);
|
||||||
|
|
||||||
mAccessPoint = accessPoint;
|
mAccessPoint = accessPoint;
|
||||||
mConnectivityManager = connectivityManagerWrapper.getConnectivityManager();
|
mConnectivityManager = connectivityManager;
|
||||||
mConnectivityManagerWrapper = connectivityManagerWrapper;
|
|
||||||
mFragment = fragment;
|
mFragment = fragment;
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
mSignalStr = context.getResources().getStringArray(R.array.wifi_signal);
|
mSignalStr = context.getResources().getStringArray(R.array.wifi_signal);
|
||||||
@@ -326,7 +325,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork);
|
mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork);
|
||||||
updateInfo();
|
updateInfo();
|
||||||
mContext.registerReceiver(mReceiver, mFilter);
|
mContext.registerReceiver(mReceiver, mFilter);
|
||||||
mConnectivityManagerWrapper.registerNetworkCallback(mNetworkRequest, mNetworkCallback,
|
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback,
|
||||||
mHandler);
|
mHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,7 +485,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
private static String ipv4PrefixLengthToSubnetMask(int prefixLength) {
|
private static String ipv4PrefixLengthToSubnetMask(int prefixLength) {
|
||||||
try {
|
try {
|
||||||
InetAddress all = InetAddress.getByAddress(
|
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();
|
return NetworkUtils.getNetworkPart(all, prefixLength).getHostAddress();
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
return null;
|
return null;
|
||||||
@@ -538,7 +537,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
private void signIntoNetwork() {
|
private void signIntoNetwork() {
|
||||||
mMetricsFeatureProvider.action(
|
mMetricsFeatureProvider.action(
|
||||||
mFragment.getActivity(), MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN);
|
mFragment.getActivity(), MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN);
|
||||||
mConnectivityManagerWrapper.startCaptivePortalApp(mNetwork);
|
mConnectivityManager.startCaptivePortalApp(mNetwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -20,13 +20,10 @@ import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID;
|
|||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkPolicyManager;
|
|
||||||
import android.net.wifi.WifiConfiguration;
|
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.support.v7.preference.DropDownPreference;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@@ -37,13 +34,11 @@ import com.android.settings.R;
|
|||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settings.wifi.WifiConfigUiBase;
|
import com.android.settings.wifi.WifiConfigUiBase;
|
||||||
import com.android.settings.wifi.WifiDialog;
|
import com.android.settings.wifi.WifiDialog;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.wifi.AccessPoint;
|
import com.android.settingslib.wifi.AccessPoint;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -126,10 +121,10 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
|
final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
|
||||||
mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
|
mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
|
||||||
mAccessPoint,
|
mAccessPoint,
|
||||||
new ConnectivityManagerWrapper(cm),
|
cm,
|
||||||
context,
|
context,
|
||||||
this,
|
this,
|
||||||
new Handler(Looper.getMainLooper()), // UI thread.
|
new Handler(Looper.getMainLooper()), // UI thread.
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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<PackageInfo> getPackagesHoldingPermissions(
|
|
||||||
String[] permissions, int flags, int userId) throws RemoteException {
|
|
||||||
return mPms.getPackagesHoldingPermissions(permissions, flags, userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -23,11 +23,11 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -41,7 +41,7 @@ public final class AppStateAppOpsBridgeTest {
|
|||||||
|
|
||||||
@Mock private Context mContext;
|
@Mock private Context mContext;
|
||||||
@Mock private UserManager mUserManager;
|
@Mock private UserManager mUserManager;
|
||||||
@Mock private IPackageManagerWrapper mPackageManagerService;
|
@Mock private IPackageManager mPackageManagerService;
|
||||||
@Mock private AppOpsManager mAppOpsManager;
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@@ -37,7 +38,6 @@ import android.os.UserHandle;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -81,7 +81,7 @@ public final class AppWithAdminGrantedPermissionsCounterTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PackageManagerWrapper mPackageManager;
|
private PackageManagerWrapper mPackageManager;
|
||||||
@Mock
|
@Mock
|
||||||
private IPackageManagerWrapper mPackageManagerService;
|
private IPackageManager mPackageManagerService;
|
||||||
@Mock
|
@Mock
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@@ -34,7 +35,6 @@ import android.os.UserHandle;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -78,7 +78,7 @@ public final class AppWithAdminGrantedPermissionsListerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PackageManagerWrapper mPackageManager;
|
private PackageManagerWrapper mPackageManager;
|
||||||
@Mock
|
@Mock
|
||||||
private IPackageManagerWrapper mPackageManagerService;
|
private IPackageManager mPackageManagerService;
|
||||||
@Mock
|
@Mock
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
@@ -33,7 +34,6 @@ import android.os.UserManager;
|
|||||||
|
|
||||||
import com.android.settings.testutils.ApplicationTestUtils;
|
import com.android.settings.testutils.ApplicationTestUtils;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.wrapper.IPackageManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -72,7 +72,7 @@ public final class ApplicationFeatureProviderImplTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PackageManagerWrapper mPackageManager;
|
private PackageManagerWrapper mPackageManager;
|
||||||
@Mock
|
@Mock
|
||||||
private IPackageManagerWrapper mPackageManagerService;
|
private IPackageManager mPackageManagerService;
|
||||||
@Mock
|
@Mock
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
|
@@ -105,4 +105,49 @@ public class AppNotificationPreferenceControllerTest {
|
|||||||
assertThat(controller.getArguments().containsKey(EXTRA_FRAGMENT_ARG_KEY)).isTrue();
|
assertThat(controller.getArguments().containsKey(EXTRA_FRAGMENT_ARG_KEY)).isTrue();
|
||||||
assertThat(controller.getArguments().getString(EXTRA_FRAGMENT_ARG_KEY)).isEqualTo("test");
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
@@ -28,6 +28,7 @@ import android.content.pm.ApplicationInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
import android.net.ProxyInfo;
|
import android.net.ProxyInfo;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
@@ -36,7 +37,6 @@ import android.text.SpannableStringBuilder;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
import com.android.settingslib.wrapper.PackageManagerWrapper;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -72,7 +72,7 @@ public class EnterprisePrivacyFeatureProviderImplTest {
|
|||||||
private @Mock PackageManagerWrapper mPackageManagerWrapper;
|
private @Mock PackageManagerWrapper mPackageManagerWrapper;
|
||||||
private @Mock PackageManager mPackageManager;
|
private @Mock PackageManager mPackageManager;
|
||||||
private @Mock UserManager mUserManager;
|
private @Mock UserManager mUserManager;
|
||||||
private @Mock ConnectivityManagerWrapper mConnectivityManger;
|
private @Mock ConnectivityManager mConnectivityManger;
|
||||||
private Resources mResources;
|
private Resources mResources;
|
||||||
|
|
||||||
private EnterprisePrivacyFeatureProvider mProvider;
|
private EnterprisePrivacyFeatureProvider mProvider;
|
||||||
@@ -347,6 +347,15 @@ public class EnterprisePrivacyFeatureProviderImplTest {
|
|||||||
.isEqualTo(3);
|
.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() {
|
private void resetAndInitializePackageManagerWrapper() {
|
||||||
reset(mPackageManagerWrapper);
|
reset(mPackageManagerWrapper);
|
||||||
when(mPackageManagerWrapper.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN))
|
when(mPackageManagerWrapper.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN))
|
||||||
|
@@ -98,7 +98,7 @@ public class EnterprisePrivacySettingsTest {
|
|||||||
|
|
||||||
private void verifyPreferenceControllers(List<AbstractPreferenceController> controllers) {
|
private void verifyPreferenceControllers(List<AbstractPreferenceController> controllers) {
|
||||||
assertThat(controllers).isNotNull();
|
assertThat(controllers).isNotNull();
|
||||||
assertThat(controllers.size()).isEqualTo(17);
|
assertThat(controllers.size()).isEqualTo(18);
|
||||||
int position = 0;
|
int position = 0;
|
||||||
assertThat(controllers.get(position++)).isInstanceOf(NetworkLogsPreferenceController.class);
|
assertThat(controllers.get(position++)).isInstanceOf(NetworkLogsPreferenceController.class);
|
||||||
assertThat(controllers.get(position++)).isInstanceOf(BugReportsPreferenceController.class);
|
assertThat(controllers.get(position++)).isInstanceOf(BugReportsPreferenceController.class);
|
||||||
@@ -125,6 +125,8 @@ public class EnterprisePrivacySettingsTest {
|
|||||||
CaCertsCurrentUserPreferenceController.class);
|
CaCertsCurrentUserPreferenceController.class);
|
||||||
assertThat(controllers.get(position++)).isInstanceOf(
|
assertThat(controllers.get(position++)).isInstanceOf(
|
||||||
CaCertsManagedProfilePreferenceController.class);
|
CaCertsManagedProfilePreferenceController.class);
|
||||||
|
assertThat(controllers.get(position++)).isInstanceOf(
|
||||||
|
BackupsEnabledPreferenceController.class);
|
||||||
assertThat(controllers.get(position++)).isInstanceOf(
|
assertThat(controllers.get(position++)).isInstanceOf(
|
||||||
PreferenceCategoryController.class);
|
PreferenceCategoryController.class);
|
||||||
assertThat(controllers.get(position++)).isInstanceOf(
|
assertThat(controllers.get(position++)).isInstanceOf(
|
||||||
|
@@ -17,8 +17,10 @@
|
|||||||
package com.android.settings.fuelgauge.batterytip.detectors;
|
package com.android.settings.fuelgauge.batterytip.detectors;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -48,7 +50,8 @@ import java.util.List;
|
|||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
public class HighUsageDetectorTest {
|
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 static final long SCREEN_ON_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -56,7 +59,9 @@ public class HighUsageDetectorTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private BatteryUtils mBatteryUtils;
|
private BatteryUtils mBatteryUtils;
|
||||||
@Mock
|
@Mock
|
||||||
private BatterySipper mBatterySipper;
|
private BatterySipper mHighBatterySipper;
|
||||||
|
@Mock
|
||||||
|
private BatterySipper mZeroBatterySipper;
|
||||||
@Mock
|
@Mock
|
||||||
private HighUsageDataParser mDataParser;
|
private HighUsageDataParser mDataParser;
|
||||||
|
|
||||||
@@ -75,14 +80,25 @@ public class HighUsageDetectorTest {
|
|||||||
mHighUsageDetector.mBatteryUtils = mBatteryUtils;
|
mHighUsageDetector.mBatteryUtils = mBatteryUtils;
|
||||||
mHighUsageDetector.mDataParser = mDataParser;
|
mHighUsageDetector.mDataParser = mDataParser;
|
||||||
doNothing().when(mHighUsageDetector).parseBatteryData();
|
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()
|
mAppInfo = new AppInfo.Builder()
|
||||||
.setUid(UID)
|
.setUid(UID_HIGH)
|
||||||
.setScreenOnTimeMs(SCREEN_ON_TIME_MS)
|
.setScreenOnTimeMs(SCREEN_ON_TIME_MS)
|
||||||
.build();
|
.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 = new ArrayList<>();
|
||||||
mUsageList.add(mBatterySipper);
|
mUsageList.add(mHighBatterySipper);
|
||||||
|
when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -95,10 +111,16 @@ public class HighUsageDetectorTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testDetect_containsHighUsageApp_tipVisible() {
|
public void testDetect_containsHighUsageApp_tipVisible() {
|
||||||
doReturn(true).when(mDataParser).isDeviceHeavilyUsed();
|
doReturn(true).when(mDataParser).isDeviceHeavilyUsed();
|
||||||
when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList);
|
|
||||||
doReturn(SCREEN_ON_TIME_MS).when(mBatteryUtils).getProcessTimeMs(
|
final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect();
|
||||||
BatteryUtils.StatusType.FOREGROUND, mBatterySipper.uidObj,
|
assertThat(highUsageTip.isVisible()).isTrue();
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
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();
|
final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect();
|
||||||
assertThat(highUsageTip.isVisible()).isTrue();
|
assertThat(highUsageTip.isVisible()).isTrue();
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings.network;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@@ -40,7 +40,8 @@ import android.view.Menu;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
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 com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -52,7 +53,6 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.Robolectric;
|
import org.robolectric.Robolectric;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
public class ApnEditorTest {
|
public class ApnEditorTest {
|
@@ -20,8 +20,9 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -30,7 +31,7 @@ import org.junit.runner.RunWith;
|
|||||||
public final class VpnUtilsTest {
|
public final class VpnUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
public void testIsAlwaysOnVpnSet() {
|
public void testIsAlwaysOnVpnSet() {
|
||||||
final ConnectivityManagerWrapper cm = mock(ConnectivityManagerWrapper.class);
|
final ConnectivityManager cm = mock(ConnectivityManager.class);
|
||||||
when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn");
|
when(cm.getAlwaysOnVpnPackageForUser(0)).thenReturn("com.example.vpn");
|
||||||
assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isTrue();
|
assertThat(VpnUtils.isAlwaysOnVpnSet(cm, 0)).isTrue();
|
||||||
|
|
||||||
|
@@ -26,7 +26,6 @@ import android.net.wifi.WifiManager;
|
|||||||
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.widget.SwitchWidgetController;
|
import com.android.settings.widget.SwitchWidgetController;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -43,7 +42,7 @@ public class WifiEnablerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private WifiManager mWifiManager;
|
private WifiManager mWifiManager;
|
||||||
@Mock
|
@Mock
|
||||||
private ConnectivityManagerWrapper mConnectivityManager;
|
private ConnectivityManager mConnectivityManager;
|
||||||
|
|
||||||
private WifiEnabler mEnabler;
|
private WifiEnabler mEnabler;
|
||||||
|
|
||||||
@@ -52,7 +51,7 @@ public class WifiEnablerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
|
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
|
||||||
mEnabler = new WifiEnabler(mContext, mock(SwitchWidgetController.class),
|
mEnabler = new WifiEnabler(mContext, mock(SwitchWidgetController.class),
|
||||||
mock(MetricsFeatureProvider.class), mConnectivityManager);
|
mock(MetricsFeatureProvider.class), mConnectivityManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -51,7 +51,6 @@ import android.net.wifi.WifiInfo;
|
|||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.v7.preference.Preference;
|
|
||||||
import android.support.v7.preference.PreferenceCategory;
|
import android.support.v7.preference.PreferenceCategory;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
import android.view.View;
|
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.ActionButtonPreferenceTest;
|
||||||
import com.android.settings.widget.EntityHeaderController;
|
import com.android.settings.widget.EntityHeaderController;
|
||||||
import com.android.settings.wifi.WifiDetailPreference;
|
import com.android.settings.wifi.WifiDetailPreference;
|
||||||
import com.android.settings.wrapper.ConnectivityManagerWrapper;
|
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
import com.android.settingslib.wifi.AccessPoint;
|
import com.android.settingslib.wifi.AccessPoint;
|
||||||
@@ -91,7 +89,6 @@ import java.net.Inet4Address;
|
|||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@@ -119,8 +116,6 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private ConnectivityManager mockConnectivityManager;
|
private ConnectivityManager mockConnectivityManager;
|
||||||
@Mock
|
@Mock
|
||||||
private ConnectivityManagerWrapper mockConnectivityManagerWrapper;
|
|
||||||
@Mock
|
|
||||||
private Network mockNetwork;
|
private Network mockNetwork;
|
||||||
@Mock
|
@Mock
|
||||||
private NetworkInfo mockNetworkInfo;
|
private NetworkInfo mockNetworkInfo;
|
||||||
@@ -173,8 +168,6 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
private ArgumentCaptor<NetworkCallback> mCallbackCaptor;
|
private ArgumentCaptor<NetworkCallback> mCallbackCaptor;
|
||||||
@Captor
|
@Captor
|
||||||
private ArgumentCaptor<View.OnClickListener> mForgetClickListener;
|
private ArgumentCaptor<View.OnClickListener> mForgetClickListener;
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<Preference> mIpv6AddressCaptor;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private Lifecycle mLifecycle;
|
private Lifecycle mLifecycle;
|
||||||
@@ -245,12 +238,9 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfig);
|
when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfig);
|
||||||
when(mockAccessPoint.getLevel()).thenReturn(LEVEL);
|
when(mockAccessPoint.getLevel()).thenReturn(LEVEL);
|
||||||
when(mockAccessPoint.getSecurityString(false)).thenReturn(SECURITY);
|
when(mockAccessPoint.getSecurityString(false)).thenReturn(SECURITY);
|
||||||
|
|
||||||
when(mockConnectivityManagerWrapper.getConnectivityManager())
|
|
||||||
.thenReturn(mockConnectivityManager);
|
|
||||||
when(mockConnectivityManager.getNetworkInfo(any(Network.class)))
|
when(mockConnectivityManager.getNetworkInfo(any(Network.class)))
|
||||||
.thenReturn(mockNetworkInfo);
|
.thenReturn(mockNetworkInfo);
|
||||||
doNothing().when(mockConnectivityManagerWrapper).registerNetworkCallback(
|
doNothing().when(mockConnectivityManager).registerNetworkCallback(
|
||||||
nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
|
nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
|
||||||
mockButtonsPref = ActionButtonPreferenceTest.createMock();
|
mockButtonsPref = ActionButtonPreferenceTest.createMock();
|
||||||
when(mockButtonsPref.setButton1OnClickListener(mForgetClickListener.capture()))
|
when(mockButtonsPref.setButton1OnClickListener(mForgetClickListener.capture()))
|
||||||
@@ -281,7 +271,7 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
private WifiDetailPreferenceController newWifiDetailPreferenceController() {
|
private WifiDetailPreferenceController newWifiDetailPreferenceController() {
|
||||||
return new WifiDetailPreferenceController(
|
return new WifiDetailPreferenceController(
|
||||||
mockAccessPoint,
|
mockAccessPoint,
|
||||||
mockConnectivityManagerWrapper,
|
mockConnectivityManager,
|
||||||
mContext,
|
mContext,
|
||||||
mockFragment,
|
mockFragment,
|
||||||
null, // Handler
|
null, // Handler
|
||||||
@@ -362,7 +352,7 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
public void networkCallback_shouldBeRegisteredOnResume() {
|
public void networkCallback_shouldBeRegisteredOnResume() {
|
||||||
displayAndResume();
|
displayAndResume();
|
||||||
|
|
||||||
verify(mockConnectivityManagerWrapper, times(1)).registerNetworkCallback(
|
verify(mockConnectivityManager, times(1)).registerNetworkCallback(
|
||||||
nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
|
nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -779,8 +769,6 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
|
|
||||||
displayAndResume();
|
displayAndResume();
|
||||||
|
|
||||||
List<Preference> addrs = mIpv6AddressCaptor.getAllValues();
|
|
||||||
|
|
||||||
String expectedAddresses = String.join("\n",
|
String expectedAddresses = String.join("\n",
|
||||||
asString(Constants.IPV6_LINKLOCAL),
|
asString(Constants.IPV6_LINKLOCAL),
|
||||||
asString(Constants.IPV6_GLOBAL1),
|
asString(Constants.IPV6_GLOBAL1),
|
||||||
@@ -826,7 +814,7 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
ArgumentCaptor<OnClickListener> captor = ArgumentCaptor.forClass(OnClickListener.class);
|
ArgumentCaptor<OnClickListener> captor = ArgumentCaptor.forClass(OnClickListener.class);
|
||||||
verify(mockButtonsPref).setButton2OnClickListener(captor.capture());
|
verify(mockButtonsPref).setButton2OnClickListener(captor.capture());
|
||||||
captor.getValue().onClick(null);
|
captor.getValue().onClick(null);
|
||||||
verify(mockConnectivityManagerWrapper).startCaptivePortalApp(mockNetwork);
|
verify(mockConnectivityManager).startCaptivePortalApp(mockNetwork);
|
||||||
verify(mockMetricsFeatureProvider)
|
verify(mockMetricsFeatureProvider)
|
||||||
.action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN);
|
.action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user