diff --git a/res/layout/ownerinfo.xml b/res/layout/ownerinfo.xml
index 29e08402158..18ac461ee24 100644
--- a/res/layout/ownerinfo.xml
+++ b/res/layout/ownerinfo.xml
@@ -28,8 +28,9 @@
android:minHeight="@dimen/min_tap_target_size"
android:gravity="top"
android:hint="@string/owner_info_settings_edit_text_hint"
- android:inputType="textMultiLine|textCapSentences"
- />
+ android:inputType="textMultiLine|textCapSentences">
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 22ec007b53a..41b3a806e2c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2112,8 +2112,6 @@
All passwords for this network will be deleted
-
- Saved networks
- 1 network
@@ -5945,8 +5943,8 @@
Data usage
-
- App data usage
+
+ Mobile data & Wi\u2011Fi
Carrier data accounting may differ from your device.
diff --git a/res/values/themes.xml b/res/values/themes.xml
index b3de0ae5a9b..3bf36ba9323 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -17,7 +17,7 @@
-
diff --git a/res/xml/app_info_settings.xml b/res/xml/app_info_settings.xml
index 9d77e865692..684d0325417 100644
--- a/res/xml/app_info_settings.xml
+++ b/res/xml/app_info_settings.xml
@@ -63,7 +63,7 @@
diff --git a/res/xml/auto_brightness_detail.xml b/res/xml/auto_brightness_detail.xml
index 8b683f1bb16..b10f1ad04b0 100644
--- a/res/xml/auto_brightness_detail.xml
+++ b/res/xml/auto_brightness_detail.xml
@@ -23,8 +23,10 @@
+ settings:preview="@drawable/aab_brightness"
+ settings:controller="com.android.settings.widget.VideoPreferenceController"/>
+ settings:preview="@drawable/auto_awesome_battery"
+ settings:controller="com.android.settings.widget.VideoPreferenceController"/>
-
+
+
+
diff --git a/src/com/android/settings/AllowBindAppWidgetActivity.java b/src/com/android/settings/AllowBindAppWidgetActivity.java
index 52e7870e2b0..7557d975b14 100644
--- a/src/com/android/settings/AllowBindAppWidgetActivity.java
+++ b/src/com/android/settings/AllowBindAppWidgetActivity.java
@@ -16,7 +16,6 @@
package com.android.settings;
-import android.app.AlertDialog;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
@@ -33,6 +32,8 @@ import android.widget.CheckBox;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
+import androidx.appcompat.app.AlertDialog;
+
/**
* This activity is displayed when an app launches the BIND_APPWIDGET intent. This allows apps
* that don't have the BIND_APPWIDGET permission to bind specific widgets.
diff --git a/src/com/android/settings/BandMode.java b/src/com/android/settings/BandMode.java
index b1302952429..9728a5f8ebb 100644
--- a/src/com/android/settings/BandMode.java
+++ b/src/com/android/settings/BandMode.java
@@ -1,7 +1,6 @@
package com.android.settings;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncResult;
import android.os.Bundle;
@@ -18,6 +17,7 @@ import android.widget.ListView;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
+import androidx.appcompat.app.AlertDialog;
/**
* Radio Band Mode Selection Class
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index 7b39e4f7bf0..03a9203040f 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -17,7 +17,6 @@
package com.android.settings;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.DialogInterface;
@@ -49,6 +48,7 @@ import com.android.settings.vpn2.VpnUtils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import sun.security.util.ObjectIdentifier;
import sun.security.x509.AlgorithmId;
diff --git a/src/com/android/settings/EncryptionInterstitial.java b/src/com/android/settings/EncryptionInterstitial.java
index 9558d75bc2d..f710852b3dd 100644
--- a/src/com/android/settings/EncryptionInterstitial.java
+++ b/src/com/android/settings/EncryptionInterstitial.java
@@ -18,7 +18,6 @@ package com.android.settings;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -42,6 +41,8 @@ import com.android.setupwizardlib.GlifLayout;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
+
public class EncryptionInterstitial extends SettingsActivity {
private static final String TAG = EncryptionInterstitial.class.getSimpleName();
diff --git a/src/com/android/settings/MonitoringCertInfoActivity.java b/src/com/android/settings/MonitoringCertInfoActivity.java
index aea2a37eb42..d181f7ade9e 100644
--- a/src/com/android/settings/MonitoringCertInfoActivity.java
+++ b/src/com/android/settings/MonitoringCertInfoActivity.java
@@ -17,7 +17,6 @@
package com.android.settings;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
@@ -29,6 +28,8 @@ import android.provider.Settings;
import com.android.settingslib.RestrictedLockUtils;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Activity that shows a dialog explaining that a CA cert is allowing someone to monitor network
* traffic. This activity should be launched for the user into which the CA cert is installed
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
index 1c51a98f6a1..a681b94ae90 100644
--- a/src/com/android/settings/ProxySelector.java
+++ b/src/com/android/settings/ProxySelector.java
@@ -17,7 +17,6 @@
package com.android.settings;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -43,6 +42,8 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
import com.android.settings.core.InstrumentedFragment;
+import androidx.appcompat.app.AlertDialog;
+
public class ProxySelector extends InstrumentedFragment implements DialogCreatable {
private static final String TAG = "ProxySelector";
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index ee20c586e9b..3db99359d61 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -20,7 +20,6 @@ import static android.net.ConnectivityManager.NetworkCallback;
import static android.provider.Settings.Global.PREFERRED_NETWORK_MODE;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.QueuedWork;
import android.content.ComponentName;
import android.content.Context;
@@ -91,6 +90,8 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
+
public class RadioInfo extends Activity {
private static final String TAG = "RadioInfo";
diff --git a/src/com/android/settings/RegulatoryInfoDisplayActivity.java b/src/com/android/settings/RegulatoryInfoDisplayActivity.java
index 2b47c86b73d..6430a135699 100644
--- a/src/com/android/settings/RegulatoryInfoDisplayActivity.java
+++ b/src/com/android/settings/RegulatoryInfoDisplayActivity.java
@@ -17,7 +17,6 @@
package com.android.settings;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Bitmap;
@@ -34,6 +33,7 @@ import android.widget.TextView;
import java.util.Locale;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* {@link Activity} that displays regulatory information for the "Regulatory information"
diff --git a/src/com/android/settings/RemoteBugreportActivity.java b/src/com/android/settings/RemoteBugreportActivity.java
index 7069175bfcc..2c88ec329d4 100644
--- a/src/com/android/settings/RemoteBugreportActivity.java
+++ b/src/com/android/settings/RemoteBugreportActivity.java
@@ -17,7 +17,6 @@ package com.android.settings;
import android.annotation.Nullable;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.DialogInterface;
import android.content.Intent;
@@ -25,6 +24,8 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;
+import androidx.appcompat.app.AlertDialog;
+
/**
* UI for the remote bugreport dialog. Shows one of 3 possible dialogs:
*
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index 53be36a2a13..88a704962a0 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -18,7 +18,6 @@ package com.android.settings;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.ContentResolver;
@@ -50,6 +49,7 @@ import com.android.settings.network.ApnSettings;
import com.android.settingslib.RestrictedLockUtils;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* Confirm and execute a reset of the network settings to a clean "just out of the box"
diff --git a/src/com/android/settings/RestrictedListPreference.java b/src/com/android/settings/RestrictedListPreference.java
index a5d241c9849..e79f03ef454 100644
--- a/src/com/android/settings/RestrictedListPreference.java
+++ b/src/com/android/settings/RestrictedListPreference.java
@@ -18,7 +18,6 @@ package com.android.settings;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.DialogInterface;
@@ -41,6 +40,7 @@ import com.android.settingslib.RestrictedPreferenceHelper;
import java.util.ArrayList;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AlertDialog.Builder;
import androidx.preference.ListPreferenceDialogFragmentCompat;
import androidx.preference.PreferenceViewHolder;
diff --git a/src/com/android/settings/RestrictedSettingsFragment.java b/src/com/android/settings/RestrictedSettingsFragment.java
index 3bf9f85fdcc..28943666fd7 100644
--- a/src/com/android/settings/RestrictedSettingsFragment.java
+++ b/src/com/android/settings/RestrictedSettingsFragment.java
@@ -19,7 +19,6 @@ package com.android.settings;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -37,6 +36,7 @@ import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
import com.android.settingslib.RestrictedLockUtils;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* Base class for settings screens that should be pin protected when in restricted mode or
diff --git a/src/com/android/settings/TrustedCredentialsDialogBuilder.java b/src/com/android/settings/TrustedCredentialsDialogBuilder.java
index 03414bdc2e1..76bf8617439 100644
--- a/src/com/android/settings/TrustedCredentialsDialogBuilder.java
+++ b/src/com/android/settings/TrustedCredentialsDialogBuilder.java
@@ -17,7 +17,6 @@ package com.android.settings;
import android.annotation.NonNull;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.DialogInterface;
import android.content.pm.UserInfo;
@@ -41,6 +40,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.IntConsumer;
+import androidx.appcompat.app.AlertDialog;
+
class TrustedCredentialsDialogBuilder extends AlertDialog.Builder {
public interface DelegateInterface {
List getX509CertsFromCertHolder(CertHolder certHolder);
diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index 20defb3f546..06d0be67cf6 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -18,7 +18,6 @@ package com.android.settings;
import android.annotation.LayoutRes;
import android.annotation.Nullable;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -57,6 +56,7 @@ import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 55ec1596093..9d5f96fef39 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -389,9 +389,7 @@ public final class Utils extends com.android.settingslib.Utils {
*/
public static UserHandle getManagedProfile(UserManager userManager) {
List userProfiles = userManager.getUserProfiles();
- final int count = userProfiles.size();
- for (int i = 0; i < count; i++) {
- final UserHandle profile = userProfiles.get(i);
+ for (UserHandle profile : userProfiles) {
if (profile.getIdentifier() == userManager.getUserHandle()) {
continue;
}
diff --git a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
index 4890011d2ff..95e1643b3a8 100644
--- a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
+++ b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
@@ -20,7 +20,6 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYST
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -41,6 +40,8 @@ import com.android.settings.R;
import java.util.List;
import java.util.Locale;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Utility class for creating the dialog that asks users for explicit permission to grant
* all of the requested capabilities to an accessibility service before the service is enabled
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index b345e05e9cc..6738736afb8 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -18,7 +18,6 @@ package com.android.settings.accessibility;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -46,6 +45,8 @@ import com.android.settingslib.accessibility.AccessibilityUtils;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
+
public class ToggleAccessibilityServicePreferenceFragment
extends ToggleFeaturePreferenceFragment implements DialogInterface.OnClickListener {
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index f90c3c68991..58624cd3d51 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -19,7 +19,6 @@ package com.android.settings.accounts;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.Context;
@@ -53,6 +52,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
public class AccountSyncSettings extends AccountPreferenceBase {
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 8df485c42fe..35201168f85 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -22,7 +22,6 @@ import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -45,6 +44,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
import java.io.IOException;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceScreen;
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index 4ee2fd8e56e..0acb046bcbe 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -19,7 +19,6 @@ package com.android.settings.applications;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
@@ -51,6 +50,7 @@ import com.android.settingslib.applications.ApplicationsState.AppEntry;
import java.util.ArrayList;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
diff --git a/src/com/android/settings/applications/AppLaunchSettings.java b/src/com/android/settings/applications/AppLaunchSettings.java
index 6b527a7886b..82ac1b06ac0 100644
--- a/src/com/android/settings/applications/AppLaunchSettings.java
+++ b/src/com/android/settings/applications/AppLaunchSettings.java
@@ -21,7 +21,6 @@ import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATIO
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
-import android.app.AlertDialog;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
@@ -42,6 +41,7 @@ import com.android.settings.Utils;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 897cbc7a59e..ed5397a0f7e 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -22,7 +22,6 @@ import static android.os.storage.StorageVolume.ScopedAccessProviderContract.AUTH
import static android.os.storage.StorageVolume.ScopedAccessProviderContract.TABLE_PERMISSIONS;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.GrantedUriPermission;
import android.content.ContentResolver;
@@ -64,6 +63,7 @@ import java.util.Objects;
import java.util.TreeMap;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.preference.Preference;
diff --git a/src/com/android/settings/applications/DirectoryAccessDetails.java b/src/com/android/settings/applications/DirectoryAccessDetails.java
index 02c33c060ef..8325f0d63ac 100644
--- a/src/com/android/settings/applications/DirectoryAccessDetails.java
+++ b/src/com/android/settings/applications/DirectoryAccessDetails.java
@@ -34,7 +34,6 @@ import static com.android.settings.applications.AppStateDirectoryAccessBridge.VE
import android.annotation.Nullable;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@@ -60,6 +59,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java
index 3331b1ca828..e57808f865a 100644
--- a/src/com/android/settings/applications/ProcessStatsDetail.java
+++ b/src/com/android/settings/applications/ProcessStatsDetail.java
@@ -21,7 +21,6 @@ import static com.android.settings.widget.EntityHeaderController.ActionType;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
@@ -59,6 +58,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
diff --git a/src/com/android/settings/applications/RunningServiceDetails.java b/src/com/android/settings/applications/RunningServiceDetails.java
index 0461343872c..66fdb088e93 100644
--- a/src/com/android/settings/applications/RunningServiceDetails.java
+++ b/src/com/android/settings/applications/RunningServiceDetails.java
@@ -2,7 +2,6 @@ package com.android.settings.applications;
import android.app.Activity;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.ApplicationErrorReport;
import android.app.Dialog;
import android.app.PendingIntent;
@@ -44,6 +43,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
public class RunningServiceDetails extends InstrumentedFragment
diff --git a/src/com/android/settings/applications/UsageAccessDetails.java b/src/com/android/settings/applications/UsageAccessDetails.java
index 8c76e715adb..c14ddbc047d 100644
--- a/src/com/android/settings/applications/UsageAccessDetails.java
+++ b/src/com/android/settings/applications/UsageAccessDetails.java
@@ -15,7 +15,6 @@
*/
package com.android.settings.applications;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -32,6 +31,7 @@ import com.android.settings.applications.AppStateUsageBridge.UsageState;
import com.android.settings.overlay.FeatureFactory;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.Preference.OnPreferenceClickListener;
diff --git a/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java b/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java
index f6e0472a30e..eeeb205f0fe 100644
--- a/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java
+++ b/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.settings.applications.appinfo;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -30,6 +29,7 @@ import java.lang.annotation.RetentionPolicy;
import androidx.annotation.IntDef;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* Fragment to show the dialog for uninstall or forcestop. This fragment uses function in
diff --git a/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java b/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java
index 94111cfe1a6..8c572af024b 100644
--- a/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java
+++ b/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java
@@ -17,7 +17,6 @@ package com.android.settings.applications.appinfo;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
@@ -38,6 +37,7 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.Preference.OnPreferenceClickListener;
diff --git a/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java b/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java
index dc9ab7e01da..224072c9885 100644
--- a/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java
+++ b/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java
@@ -18,7 +18,6 @@ package com.android.settings.applications.appinfo;
import static android.app.Activity.RESULT_CANCELED;
import static android.app.Activity.RESULT_OK;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
import android.os.Bundle;
@@ -34,6 +33,7 @@ import com.android.settings.applications.AppStateInstallAppsBridge.InstallAppsSt
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
diff --git a/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragment.java b/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragment.java
index 2e668ef4662..683a764f7e0 100644
--- a/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragment.java
+++ b/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.settings.applications.appinfo;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -28,6 +27,8 @@ import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Fragment to show the dialog for clearing the instant app.
*/
diff --git a/src/com/android/settings/applications/appinfo/WriteSettingsDetails.java b/src/com/android/settings/applications/appinfo/WriteSettingsDetails.java
index 7f9f3599fa4..aed263fbb3f 100644
--- a/src/com/android/settings/applications/appinfo/WriteSettingsDetails.java
+++ b/src/com/android/settings/applications/appinfo/WriteSettingsDetails.java
@@ -15,7 +15,6 @@
*/
package com.android.settings.applications.appinfo;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +32,7 @@ import com.android.settings.applications.AppStateWriteSettingsBridge.WriteSettin
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.Preference.OnPreferenceClickListener;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
index 3838d299575..395ea64d13f 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.applications.defaultapps;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -34,6 +33,7 @@ import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.applications.DefaultAppInfo;
import com.android.settingslib.widget.CandidateInfo;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index de4558e2fb7..a64f4611963 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -54,6 +54,7 @@ import android.os.UserManager;
import android.preference.PreferenceFrameLayout;
import android.text.TextUtils;
import android.util.ArraySet;
+import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -862,6 +863,7 @@ public class ManageApplications extends InstrumentedFragment
private final Context mContext;
private final AppStateBaseBridge mExtraInfoBridge;
private final LoadingViewController mLoadingViewController;
+ private final IconDrawableFactory mIconDrawableFactory;
private AppFilterItem mAppFilter;
private ArrayList mEntries;
@@ -894,6 +896,7 @@ public class ManageApplications extends InstrumentedFragment
mManageApplications.mListContainer
);
mContext = manageApplications.getActivity();
+ mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
mAppFilter = appFilter;
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
@@ -1318,8 +1321,7 @@ public class ManageApplications extends InstrumentedFragment
ApplicationsState.AppEntry entry = mEntries.get(position);
synchronized (entry) {
holder.setTitle(entry.label);
- mState.ensureIcon(entry);
- holder.setIcon(entry.icon);
+ holder.setIcon(mIconDrawableFactory.getBadgedIcon(entry.info));
updateSummary(holder, entry);
updateSwitch(holder, entry);
holder.updateDisableView(entry.info);
diff --git a/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
index 686e027928e..4e38f4e57f6 100644
--- a/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
+++ b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
@@ -19,7 +19,6 @@ import static android.net.NetworkPolicyManager.POLICY_NONE;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.INotificationManager;
import android.content.Context;
@@ -39,6 +38,8 @@ import com.android.settings.R;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
+
public class ResetAppsHelper implements DialogInterface.OnClickListener,
DialogInterface.OnDismissListener {
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 04757348e88..c7e93b80b4e 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -18,7 +18,6 @@ package com.android.settings.applications.specialaccess.deviceadmin;
import android.app.Activity;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.Dialog;
import android.app.admin.DeviceAdminInfo;
@@ -74,6 +73,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import androidx.appcompat.app.AlertDialog;
+
public class DeviceAdminAdd extends Activity {
static final String TAG = "DeviceAdminAdd";
diff --git a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java
index 6af4f81b3f6..79606ee81b8 100644
--- a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java
+++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java
@@ -19,7 +19,6 @@ import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
import android.os.Bundle;
@@ -30,6 +29,7 @@ import com.android.settings.applications.AppInfoWithHeader;
import com.android.settings.overlay.FeatureFactory;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.SwitchPreference;
diff --git a/src/com/android/settings/backup/ToggleBackupSettingFragment.java b/src/com/android/settings/backup/ToggleBackupSettingFragment.java
index 0d1c33e493e..fb24542359f 100644
--- a/src/com/android/settings/backup/ToggleBackupSettingFragment.java
+++ b/src/com/android/settings/backup/ToggleBackupSettingFragment.java
@@ -1,6 +1,5 @@
package com.android.settings.backup;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.backup.IBackupManager;
import android.content.Context;
@@ -20,6 +19,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceViewHolder;
diff --git a/src/com/android/settings/biometrics/BiometricErrorDialog.java b/src/com/android/settings/biometrics/BiometricErrorDialog.java
index 4e073f138e0..5c4e891bb13 100644
--- a/src/com/android/settings/biometrics/BiometricErrorDialog.java
+++ b/src/com/android/settings/biometrics/BiometricErrorDialog.java
@@ -20,7 +20,6 @@ import static com.android.settings.biometrics.BiometricSettings.RESULT_FINISHED;
import static com.android.settings.biometrics.BiometricSettings.RESULT_TIMEOUT;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.hardware.biometrics.BiometricConstants;
@@ -28,6 +27,8 @@ import android.os.Bundle;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Abstract dialog, shown when an error occurs during biometric enrollment.
*/
diff --git a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java
index ec7d12084c6..f10103877da 100644
--- a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java
@@ -109,7 +109,8 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase
.findFragmentByTag(TAG_SIDECAR);
if (mSidecar == null) {
mSidecar = getSidecar();
- getSupportFragmentManager().beginTransaction().add(mSidecar, TAG_SIDECAR).commit();
+ getSupportFragmentManager().beginTransaction().add(mSidecar, TAG_SIDECAR)
+ .commitAllowingStateLoss();
}
mSidecar.setListener(this);
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index 56d96ce7edd..38ef2c1b7f4 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -18,7 +18,6 @@ package com.android.settings.biometrics.fingerprint;
import android.animation.Animator;
import android.animation.ObjectAnimator;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -47,6 +46,8 @@ import com.android.settings.biometrics.BiometricErrorDialog;
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Activity which handles the actual enrolling for fingerprint.
*/
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 76ee78bc0ec..d318fefc544 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -18,7 +18,6 @@ package com.android.settings.biometrics.fingerprint;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -57,6 +56,7 @@ import java.util.HashMap;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceGroup;
diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java
index 4529277d5be..febffa69dae 100644
--- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java
@@ -17,7 +17,6 @@
package com.android.settings.biometrics.fingerprint;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -32,6 +31,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.password.ChooseLockSettingsHelper;
import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
public class SetupFingerprintEnrollFindSensor extends FingerprintEnrollFindSensor {
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index 85903926afa..eb1cd52ea38 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -18,7 +18,6 @@ package com.android.settings.bluetooth;
import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH;
-import android.app.AlertDialog;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.DialogInterface;
@@ -39,6 +38,7 @@ import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
diff --git a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
index 0eb97462887..6f737e015b2 100644
--- a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.bluetooth;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -38,6 +37,8 @@ import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Dialog fragment for renaming a Bluetooth device.
*/
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
index 580a26f23c6..e5d2aa7b475 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.settings.bluetooth;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -40,6 +39,7 @@ import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* A dialogFragment used by {@link BluetoothPairingDialog} to create an appropriately styled dialog
diff --git a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
index 32edb238a17..e6606915b30 100644
--- a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
+++ b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
@@ -17,7 +17,6 @@
package com.android.settings.bluetooth;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
@@ -31,6 +30,7 @@ import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/** Implements an AlertDialog for confirming that a user wishes to unpair or "forget" a paired
* device*/
diff --git a/src/com/android/settings/bluetooth/RequestPermissionActivity.java b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
index 76b897dc56f..5f6fc3959ea 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
@@ -18,7 +18,6 @@ package com.android.settings.bluetooth;
import android.annotation.NonNull;
import android.app.Activity;
-import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
@@ -38,6 +37,8 @@ import com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver;
import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import androidx.appcompat.app.AlertDialog;
+
/**
* RequestPermissionActivity asks the user whether to enable discovery. This is
* usually started by an application wanted to start bluetooth and or discovery
diff --git a/src/com/android/settings/bluetooth/Utils.java b/src/com/android/settings/bluetooth/Utils.java
index 96f5da5b298..567aa93d397 100755
--- a/src/com/android/settings/bluetooth/Utils.java
+++ b/src/com/android/settings/bluetooth/Utils.java
@@ -16,7 +16,6 @@
package com.android.settings.bluetooth;
-import android.app.AlertDialog;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -34,6 +33,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* Utils is a helper class that contains constants for various
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index 2cce467291b..967269476ad 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -35,15 +35,14 @@ import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.Toolbar;
+import androidx.fragment.app.FragmentActivity;
+
import com.android.settings.R;
import com.android.settingslib.drawer.CategoryManager;
-import com.android.settingslib.drawer.TileUtils;
import java.util.ArrayList;
import java.util.List;
-import androidx.fragment.app.FragmentActivity;
-
public class SettingsBaseActivity extends FragmentActivity {
protected static final boolean DEBUG_TIMING = false;
@@ -174,7 +173,7 @@ public class SettingsBaseActivity extends FragmentActivity {
}
public String getSettingPkg() {
- return TileUtils.SETTING_PKG;
+ return CategoryManager.SETTING_PKG;
}
public interface CategoryListener {
diff --git a/src/com/android/settings/dashboard/DashboardData.java b/src/com/android/settings/dashboard/DashboardData.java
index 9f66731e245..182d79b6227 100644
--- a/src/com/android/settings/dashboard/DashboardData.java
+++ b/src/com/android/settings/dashboard/DashboardData.java
@@ -20,6 +20,9 @@ import android.graphics.drawable.Drawable;
import android.service.settings.suggestions.Suggestion;
import android.text.TextUtils;
+import androidx.annotation.VisibleForTesting;
+import androidx.recyclerview.widget.DiffUtil;
+
import com.android.settings.R;
import com.android.settings.dashboard.conditional.Condition;
import com.android.settingslib.drawer.DashboardCategory;
@@ -31,9 +34,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import androidx.annotation.VisibleForTesting;
-import androidx.recyclerview.widget.DiffUtil;
-
/**
* Description about data list used in the DashboardAdapter. In the data list each item can be
* Condition, suggestion or category tile.
@@ -411,16 +411,7 @@ public class DashboardData {
&& TextUtils.equals(localTile.summary, targetTile.summary);
case TYPE_SUGGESTION_CONTAINER:
case TYPE_CONDITION_CONTAINER:
- // If entity is suggestion and contains remote view, force refresh
- final List entities = (List) entity;
- if (!entities.isEmpty()) {
- Object firstEntity = entities.get(0);
- if (firstEntity instanceof Tile
- && ((Tile) firstEntity).remoteViews != null) {
- return false;
- }
- }
- // Otherwise Fall through to default
+ // Fall through to default
default:
return entity == null ? targetItem.entity == null
: entity.equals(targetItem.entity);
diff --git a/src/com/android/settings/dashboard/RestrictedDashboardFragment.java b/src/com/android/settings/dashboard/RestrictedDashboardFragment.java
index 8258678791a..927385b4eaa 100644
--- a/src/com/android/settings/dashboard/RestrictedDashboardFragment.java
+++ b/src/com/android/settings/dashboard/RestrictedDashboardFragment.java
@@ -19,7 +19,6 @@ package com.android.settings.dashboard;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -37,6 +36,8 @@ import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
import com.android.settingslib.RestrictedLockUtils;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Base class for settings screens that should be pin protected when in restricted mode or
* that will display an admin support message in case an admin has disabled the options.
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 2e89e59ca24..1d1ec6d4f3d 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -17,7 +17,6 @@ package com.android.settings.datausage;
import static android.net.NetworkPolicy.LIMIT_DISABLED;
import static android.net.NetworkPolicy.WARNING_DISABLED;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -47,6 +46,7 @@ import java.util.ArrayList;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
diff --git a/src/com/android/settings/deletionhelper/ActivationWarningFragment.java b/src/com/android/settings/deletionhelper/ActivationWarningFragment.java
index 1618e2a49be..9bfe0327dc3 100644
--- a/src/com/android/settings/deletionhelper/ActivationWarningFragment.java
+++ b/src/com/android/settings/deletionhelper/ActivationWarningFragment.java
@@ -16,12 +16,12 @@
package com.android.settings.deletionhelper;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import com.android.settings.R;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
/**
diff --git a/src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java b/src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java
index 03e1143545b..ba059107ffe 100644
--- a/src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java
+++ b/src/com/android/settings/development/BluetoothA2dpHwOffloadRebootDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -26,6 +25,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
public class BluetoothA2dpHwOffloadRebootDialog extends InstrumentedDialogFragment
diff --git a/src/com/android/settings/development/ClearAdbKeysWarningDialog.java b/src/com/android/settings/development/ClearAdbKeysWarningDialog.java
index e9307590f98..3d81f1a8191 100644
--- a/src/com/android/settings/development/ClearAdbKeysWarningDialog.java
+++ b/src/com/android/settings/development/ClearAdbKeysWarningDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/development/DisableLogPersistWarningDialog.java b/src/com/android/settings/development/DisableLogPersistWarningDialog.java
index fbe2b0526b3..b25e5ffb8a2 100644
--- a/src/com/android/settings/development/DisableLogPersistWarningDialog.java
+++ b/src/com/android/settings/development/DisableLogPersistWarningDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/development/EnableAdbWarningDialog.java b/src/com/android/settings/development/EnableAdbWarningDialog.java
index e1354ce3056..e191f306aa0 100644
--- a/src/com/android/settings/development/EnableAdbWarningDialog.java
+++ b/src/com/android/settings/development/EnableAdbWarningDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/development/EnableDevelopmentSettingWarningDialog.java b/src/com/android/settings/development/EnableDevelopmentSettingWarningDialog.java
index 51532f3281e..ebc195e3b4d 100644
--- a/src/com/android/settings/development/EnableDevelopmentSettingWarningDialog.java
+++ b/src/com/android/settings/development/EnableDevelopmentSettingWarningDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
public class EnableDevelopmentSettingWarningDialog extends InstrumentedDialogFragment
diff --git a/src/com/android/settings/development/EnableOemUnlockSettingWarningDialog.java b/src/com/android/settings/development/EnableOemUnlockSettingWarningDialog.java
index 09d2ffed97a..cf077ca733b 100644
--- a/src/com/android/settings/development/EnableOemUnlockSettingWarningDialog.java
+++ b/src/com/android/settings/development/EnableOemUnlockSettingWarningDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/development/OemLockInfoDialog.java b/src/com/android/settings/development/OemLockInfoDialog.java
index 74babf26f57..f197c6aab3d 100644
--- a/src/com/android/settings/development/OemLockInfoDialog.java
+++ b/src/com/android/settings/development/OemLockInfoDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.development;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
@@ -24,6 +23,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
index 51964a93737..3057fa0dc4e 100644
--- a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Build;
import android.os.Bundle;
@@ -31,6 +30,7 @@ import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
public class HardwareInfoDialogFragment extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeForget.java b/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
index 8c7fa0959d9..ebd976b0ba3 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -38,6 +37,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.search.actionbar.SearchMenuController;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class PrivateVolumeForget extends InstrumentedFragment {
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 8d6714d7c00..997f0d27361 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -65,6 +64,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Objects;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 90da85c0104..f4ea580de1e 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -18,7 +18,6 @@ package com.android.settings.deviceinfo;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -61,6 +60,7 @@ import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java b/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java
index 85e59293950..e09e89d92ba 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java
@@ -20,7 +20,6 @@ import static android.os.storage.DiskInfo.EXTRA_DISK_ID;
import static com.android.settings.deviceinfo.StorageWizardBase.EXTRA_FORMAT_FORGET_UUID;
import static com.android.settings.deviceinfo.StorageWizardBase.EXTRA_FORMAT_PRIVATE;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +32,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
public class StorageWizardFormatConfirm extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java b/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java
index 45f39d94275..0224040d4fa 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/DeviceNameWarningDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo.aboutphone;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
/**
diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java
index 17a96920883..9c6075e6fc2 100644
--- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo.firmwareversion;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -27,6 +26,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
index 01fb04a049c..808edd4bec8 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo.imei;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.text.TextUtils;
@@ -30,6 +29,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
index ef5118596ce..2dd378579a1 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo.simstatus;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.text.TextUtils;
@@ -28,6 +27,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
index 6de3a92333a..6a4ca92bb30 100644
--- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
+++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
@@ -17,7 +17,6 @@
package com.android.settings.enterprise;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
@@ -43,6 +42,7 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import java.util.Objects;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* Helper class for {@link ActionDisabledByAdminDialog} which sets up the dialog.
diff --git a/src/com/android/settings/fuelgauge/HighPowerDetail.java b/src/com/android/settings/fuelgauge/HighPowerDetail.java
index 84120d7e68b..f5df452c333 100644
--- a/src/com/android/settings/fuelgauge/HighPowerDetail.java
+++ b/src/com/android/settings/fuelgauge/HighPowerDetail.java
@@ -16,7 +16,6 @@
package com.android.settings.fuelgauge;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.Dialog;
import android.content.Context;
@@ -38,6 +37,7 @@ import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class HighPowerDetail extends InstrumentedDialogFragment implements OnClickListener,
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
index 4b086262a6c..66d9f2cf342 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.fuelgauge.batterytip;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -39,6 +38,7 @@ import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
index 22c90e38845..4bd8cd73c9f 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
@@ -40,6 +40,7 @@ public class BatteryTipPolicy {
private static final String KEY_HIGH_USAGE_PERIOD_MS = "high_usage_period_ms";
private static final String KEY_HIGH_USAGE_BATTERY_DRAINING = "high_usage_battery_draining";
private static final String KEY_APP_RESTRICTION_ENABLED = "app_restriction_enabled";
+ private static final String KEY_APP_RESTRICTION_ACTIVE_HOUR = "app_restriction_active_hour";
private static final String KEY_REDUCED_BATTERY_ENABLED = "reduced_battery_enabled";
private static final String KEY_REDUCED_BATTERY_PERCENT = "reduced_battery_percent";
private static final String KEY_LOW_BATTERY_ENABLED = "low_battery_enabled";
@@ -118,6 +119,15 @@ public class BatteryTipPolicy {
*/
public final boolean appRestrictionEnabled;
+ /**
+ * Period(hour) to show anomaly apps. If it is 24 hours, it means only show anomaly apps
+ * happened in last 24 hours.
+ *
+ * @see Settings.Global#BATTERY_TIP_CONSTANTS
+ * @see #KEY_APP_RESTRICTION_ACTIVE_HOUR
+ */
+ public final int appRestrictionActiveHour;
+
/**
* {@code true} if reduced battery tip is enabled
*
@@ -228,6 +238,7 @@ public class BatteryTipPolicy {
Duration.ofHours(2).toMillis());
highUsageBatteryDraining = mParser.getInt(KEY_HIGH_USAGE_BATTERY_DRAINING, 25);
appRestrictionEnabled = mParser.getBoolean(KEY_APP_RESTRICTION_ENABLED, true);
+ appRestrictionActiveHour = mParser.getInt(KEY_APP_RESTRICTION_ACTIVE_HOUR, 24);
reducedBatteryEnabled = mParser.getBoolean(KEY_REDUCED_BATTERY_ENABLED, false);
reducedBatteryPercent = mParser.getInt(KEY_REDUCED_BATTERY_PERCENT, 50);
lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, true);
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
index dfb7f974e5f..8debf6bcd4a 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
@@ -136,8 +136,8 @@ public class BatteryTipUtils {
final List highUsageApps = BatteryDatabaseManager.getInstance(context)
.queryAllAnomalies(timeAfterMs, AnomalyDatabaseHelper.State.NEW);
// Remove it if it doesn't have label or been restricted
- highUsageApps.removeIf(
- new AppLabelPredicate(context).or(new AppRestrictionPredicate(context)));
+ highUsageApps.removeIf(AppLabelPredicate.getInstance(context)
+ .or(AppRestrictionPredicate.getInstance(context)));
return highUsageApps;
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java
index bda0073ab85..e6c08371cd5 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java
@@ -31,6 +31,7 @@ import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import androidx.annotation.VisibleForTesting;
@@ -53,8 +54,8 @@ public class RestrictAppDetector implements BatteryTipDetector {
mContext = context;
mPolicy = policy;
mBatteryDatabaseManager = BatteryDatabaseManager.getInstance(context);
- mAppRestrictionPredicate = new AppRestrictionPredicate(context);
- mAppLabelPredicate = new AppLabelPredicate(context);
+ mAppRestrictionPredicate = AppRestrictionPredicate.getInstance(context);
+ mAppLabelPredicate = AppLabelPredicate.getInstance(context);
}
@Override
@@ -63,8 +64,8 @@ public class RestrictAppDetector implements BatteryTipDetector {
return getFakeData();
}
if (mPolicy.appRestrictionEnabled) {
- // TODO(b/80192137): hook up the query timestamp to server side
- final long oneDayBeforeMs = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS;
+ final long oneDayBeforeMs = System.currentTimeMillis()
+ - TimeUnit.HOURS.toMillis(mPolicy.appRestrictionActiveHour);
final List highUsageApps = BatteryTipUtils.detectAnomalies(mContext,
oneDayBeforeMs);
if (!highUsageApps.isEmpty()) {
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/AppLabelPredicate.java b/src/com/android/settings/fuelgauge/batterytip/tips/AppLabelPredicate.java
index 13a2452bb23..1444b12b4ee 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/AppLabelPredicate.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/AppLabelPredicate.java
@@ -16,7 +16,6 @@
package com.android.settings.fuelgauge.batterytip.tips;
-import android.app.AppOpsManager;
import android.content.Context;
import com.android.settings.Utils;
@@ -28,12 +27,20 @@ import java.util.function.Predicate;
* {@link Predicate} for {@link AppInfo} to check whether it has label
*/
public class AppLabelPredicate implements Predicate {
- private Context mContext;
- private AppOpsManager mAppOpsManager;
- public AppLabelPredicate(Context context) {
+ private static AppLabelPredicate sInstance;
+ private Context mContext;
+
+ public static AppLabelPredicate getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new AppLabelPredicate(context.getApplicationContext());
+ }
+
+ return sInstance;
+ }
+
+ private AppLabelPredicate(Context context) {
mContext = context;
- mAppOpsManager = context.getSystemService(AppOpsManager.class);
}
@Override
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/AppRestrictionPredicate.java b/src/com/android/settings/fuelgauge/batterytip/tips/AppRestrictionPredicate.java
index 3650fe38e2c..43a4d900e28 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/AppRestrictionPredicate.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/AppRestrictionPredicate.java
@@ -27,9 +27,19 @@ import java.util.function.Predicate;
* {@link Predicate} for {@link AppInfo} to check whether it is restricted.
*/
public class AppRestrictionPredicate implements Predicate {
+
+ private static AppRestrictionPredicate sInstance;
private AppOpsManager mAppOpsManager;
- public AppRestrictionPredicate(Context context) {
+ public static AppRestrictionPredicate getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new AppRestrictionPredicate(context.getApplicationContext());
+ }
+
+ return sInstance;
+ }
+
+ private AppRestrictionPredicate(Context context) {
mAppOpsManager = context.getSystemService(AppOpsManager.class);
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
index 61a11577e25..1d5143f624a 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
@@ -16,7 +16,6 @@
package com.android.settings.fuelgauge.batterytip.tips;
-import android.content.ContentResolver;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
index 8a2d86dd31f..0d91c7437d6 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
@@ -112,7 +112,7 @@ public class RestrictAppTip extends BatteryTip {
super.sanityCheck(context);
// Set it invisible if there is no valid app
- mRestrictAppList.removeIf(new AppLabelPredicate(context));
+ mRestrictAppList.removeIf(AppLabelPredicate.getInstance(context));
if (mRestrictAppList.isEmpty()) {
mState = StateType.INVISIBLE;
}
diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
index 1a7fe229cc5..388e16c3817 100644
--- a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
@@ -17,7 +17,6 @@
package com.android.settings.inputmethod;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -43,6 +42,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import java.util.ArrayList;
import java.util.Collections;
+import androidx.appcompat.app.AlertDialog;
import androidx.loader.app.LoaderManager.LoaderCallbacks;
import androidx.loader.content.AsyncTaskLoader;
import androidx.loader.content.Loader;
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index 1a828ce506d..c8eb1099295 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.inputmethod;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ApplicationInfo;
@@ -35,6 +34,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.Preference.OnPreferenceClickListener;
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index cbcb1eb1a07..dada1c88dc8 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -19,7 +19,6 @@ package com.android.settings.localepicker;
import static android.os.UserManager.DISALLOW_CONFIG_LOCALE;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@@ -42,6 +41,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
/**
diff --git a/src/com/android/settings/location/AppSettingsInjector.java b/src/com/android/settings/location/AppSettingsInjector.java
new file mode 100644
index 00000000000..6b79a7e0962
--- /dev/null
+++ b/src/com/android/settings/location/AppSettingsInjector.java
@@ -0,0 +1,46 @@
+/*
+ * 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.location;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import androidx.preference.Preference;
+
+import com.android.settings.widget.AppPreference;
+import com.android.settings.widget.RestrictedAppPreference;
+import com.android.settingslib.location.InjectedSetting;
+import com.android.settingslib.location.SettingsInjector;
+
+import java.util.List;
+
+/**
+ * Adds the preferences specified by the {@link InjectedSetting} objects to a preference group.
+ */
+public class AppSettingsInjector extends SettingsInjector {
+
+ public AppSettingsInjector(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected Preference createPreference(Context prefContext, InjectedSetting setting) {
+ return TextUtils.isEmpty(setting.userRestriction)
+ ? new AppPreference(prefContext)
+ : new RestrictedAppPreference(prefContext, setting.userRestriction);
+ }
+}
diff --git a/src/com/android/settings/location/InjectedSetting.java b/src/com/android/settings/location/InjectedSetting.java
deleted file mode 100644
index 4877cb4d581..00000000000
--- a/src/com/android/settings/location/InjectedSetting.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2013 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.location;
-
-import android.content.Intent;
-import android.os.UserHandle;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.internal.annotations.Immutable;
-
-import java.util.Objects;
-
-/**
- * Specifies a setting that is being injected into Settings > Location > Location services.
- *
- * @see android.location.SettingInjectorService
- */
-@Immutable
-class InjectedSetting {
-
- /**
- * Package for the subclass of {@link android.location.SettingInjectorService} and for the
- * settings activity.
- */
- public final String packageName;
-
- /**
- * Class name for the subclass of {@link android.location.SettingInjectorService} that
- * specifies dynamic values for the location setting.
- */
- public final String className;
-
- /**
- * The {@link androidx.preference.Preference#getTitle()} value.
- */
- public final String title;
-
- /**
- * The {@link androidx.preference.Preference#getIcon()} value.
- */
- public final int iconId;
-
- /**
- * The user/profile associated with this setting (e.g. managed profile)
- */
- public final UserHandle mUserHandle;
-
- /**
- * The activity to launch to allow the user to modify the settings value. Assumed to be in the
- * {@link #packageName} package.
- */
- public final String settingsActivity;
-
- /**
- * The user restriction associated with this setting.
- */
- public final String userRestriction;
-
- private InjectedSetting(Builder builder) {
- this.packageName = builder.mPackageName;
- this.className = builder.mClassName;
- this.title = builder.mTitle;
- this.iconId = builder.mIconId;
- this.mUserHandle = builder.mUserHandle;
- this.settingsActivity = builder.mSettingsActivity;
- this.userRestriction = builder.mUserRestriction;
- }
-
- @Override
- public String toString() {
- return "InjectedSetting{" +
- "mPackageName='" + packageName + '\'' +
- ", mClassName='" + className + '\'' +
- ", label=" + title +
- ", iconId=" + iconId +
- ", userId=" + mUserHandle.getIdentifier() +
- ", settingsActivity='" + settingsActivity + '\'' +
- ", userRestriction='" + userRestriction +
- '}';
- }
-
- /**
- * Returns the intent to start the {@link #className} service.
- */
- public Intent getServiceIntent() {
- Intent intent = new Intent();
- intent.setClassName(packageName, className);
- return intent;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof InjectedSetting)) return false;
-
- InjectedSetting that = (InjectedSetting) o;
-
- return Objects.equals(packageName, that.packageName)
- && Objects.equals(className, that.className)
- && Objects.equals(title, that.title)
- && Objects.equals(iconId, that.iconId)
- && Objects.equals(mUserHandle, that.mUserHandle)
- && Objects.equals(settingsActivity, that.settingsActivity)
- && Objects.equals(userRestriction, that.userRestriction);
- }
-
- @Override
- public int hashCode() {
- int result = packageName.hashCode();
- result = 31 * result + className.hashCode();
- result = 31 * result + title.hashCode();
- result = 31 * result + iconId;
- result = 31 * result + (mUserHandle == null ? 0 : mUserHandle.hashCode());
- result = 31 * result + settingsActivity.hashCode();
- result = 31 * result + (userRestriction == null ? 0 : userRestriction.hashCode());
- return result;
- }
-
- public static class Builder {
- private String mPackageName;
- private String mClassName;
- private String mTitle;
- private int mIconId;
- private UserHandle mUserHandle;
- private String mSettingsActivity;
- private String mUserRestriction;
-
- public Builder setPackageName(String packageName) {
- mPackageName = packageName;
- return this;
- }
-
- public Builder setClassName(String className) {
- mClassName = className;
- return this;
- }
-
- public Builder setTitle(String title) {
- mTitle = title;
- return this;
- }
-
- public Builder setIconId(int iconId) {
- mIconId = iconId;
- return this;
- }
-
- public Builder setUserHandle(UserHandle userHandle) {
- mUserHandle = userHandle;
- return this;
- }
-
- public Builder setSettingsActivity(String settingsActivity) {
- mSettingsActivity = settingsActivity;
- return this;
- }
-
- public Builder setUserRestriction(String userRestriction) {
- mUserRestriction = userRestriction;
- return this;
- }
-
- public InjectedSetting build() {
- if (mPackageName == null || mClassName == null || TextUtils.isEmpty(mTitle)
- || TextUtils.isEmpty(mSettingsActivity)) {
- if (Log.isLoggable(SettingsInjector.TAG, Log.WARN)) {
- Log.w(SettingsInjector.TAG, "Illegal setting specification: package="
- + mPackageName + ", class=" + mClassName
- + ", title=" + mTitle + ", settingsActivity=" + mSettingsActivity);
- }
- return null;
- }
- return new InjectedSetting(this);
- }
- }
-}
diff --git a/src/com/android/settings/location/LocationServicePreferenceController.java b/src/com/android/settings/location/LocationServicePreferenceController.java
index 67ec1526a0d..035faad16c9 100644
--- a/src/com/android/settings/location/LocationServicePreferenceController.java
+++ b/src/com/android/settings/location/LocationServicePreferenceController.java
@@ -47,19 +47,19 @@ public class LocationServicePreferenceController extends LocationBasePreferenceC
private PreferenceCategory mCategoryLocationServices;
private final LocationSettings mFragment;
- private final SettingsInjector mInjector;
+ private final AppSettingsInjector mInjector;
/** Receives UPDATE_INTENT */
@VisibleForTesting
BroadcastReceiver mInjectedSettingsReceiver;
public LocationServicePreferenceController(Context context, LocationSettings fragment,
Lifecycle lifecycle) {
- this(context, fragment, lifecycle, new SettingsInjector(context));
+ this(context, fragment, lifecycle, new AppSettingsInjector(context));
}
@VisibleForTesting
LocationServicePreferenceController(Context context, LocationSettings fragment,
- Lifecycle lifecycle, SettingsInjector injector) {
+ Lifecycle lifecycle, AppSettingsInjector injector) {
super(context, lifecycle);
mFragment = fragment;
mInjector = injector;
diff --git a/src/com/android/settings/location/SettingsInjector.java b/src/com/android/settings/location/SettingsInjector.java
deleted file mode 100644
index 1206e85c9d5..00000000000
--- a/src/com/android/settings/location/SettingsInjector.java
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- * Copyright (C) 2013 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.location;
-
-import android.app.ActivityManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.graphics.drawable.Drawable;
-import android.location.SettingInjectorService;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.IconDrawableFactory;
-import android.util.Log;
-import android.util.Xml;
-
-import com.android.settings.widget.AppPreference;
-import com.android.settings.widget.RestrictedAppPreference;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import androidx.preference.Preference;
-
-/**
- * Adds the preferences specified by the {@link InjectedSetting} objects to a preference group.
- *
- * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}. We do not use that
- * class directly because it is not a good match for our use case: we do not need the caching, and
- * so do not want the additional resource hit at app install/upgrade time; and we would have to
- * suppress the tie-breaking between multiple services reporting settings with the same name.
- * Code-sharing would require extracting {@link
- * android.content.pm.RegisteredServicesCache#parseServiceAttributes(android.content.res.Resources,
- * String, android.util.AttributeSet)} into an interface, which didn't seem worth it.
- */
-class SettingsInjector {
- static final String TAG = "SettingsInjector";
-
- /**
- * If reading the status of a setting takes longer than this, we go ahead and start reading
- * the next setting.
- */
- private static final long INJECTED_STATUS_UPDATE_TIMEOUT_MILLIS = 1000;
-
- /**
- * {@link Message#what} value for starting to load status values
- * in case we aren't already in the process of loading them.
- */
- private static final int WHAT_RELOAD = 1;
-
- /**
- * {@link Message#what} value sent after receiving a status message.
- */
- private static final int WHAT_RECEIVED_STATUS = 2;
-
- /**
- * {@link Message#what} value sent after the timeout waiting for a status message.
- */
- private static final int WHAT_TIMEOUT = 3;
-
- private final Context mContext;
-
- /**
- * The settings that were injected
- */
- private final Set mSettings;
-
- private final Handler mHandler;
-
- public SettingsInjector(Context context) {
- mContext = context;
- mSettings = new HashSet();
- mHandler = new StatusLoadingHandler();
- }
-
- /**
- * Returns a list for a profile with one {@link InjectedSetting} object for each
- * {@link android.app.Service} that responds to
- * {@link SettingInjectorService#ACTION_SERVICE_INTENT} and provides the expected setting
- * metadata.
- *
- * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}.
- *
- * TODO: unit test
- */
- private List getSettings(final UserHandle userHandle) {
- PackageManager pm = mContext.getPackageManager();
- Intent intent = new Intent(SettingInjectorService.ACTION_SERVICE_INTENT);
-
- final int profileId = userHandle.getIdentifier();
- List resolveInfos =
- pm.queryIntentServicesAsUser(intent, PackageManager.GET_META_DATA, profileId);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Found services for profile id " + profileId + ": " + resolveInfos);
- }
- List settings = new ArrayList(resolveInfos.size());
- for (ResolveInfo resolveInfo : resolveInfos) {
- try {
- InjectedSetting setting = parseServiceInfo(resolveInfo, userHandle, pm);
- if (setting == null) {
- Log.w(TAG, "Unable to load service info " + resolveInfo);
- } else {
- settings.add(setting);
- }
- } catch (XmlPullParserException e) {
- Log.w(TAG, "Unable to load service info " + resolveInfo, e);
- } catch (IOException e) {
- Log.w(TAG, "Unable to load service info " + resolveInfo, e);
- }
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Loaded settings for profile id " + profileId + ": " + settings);
- }
-
- return settings;
- }
-
- /**
- * Returns the settings parsed from the attributes of the
- * {@link SettingInjectorService#META_DATA_NAME} tag, or null.
- *
- * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}.
- */
- private static InjectedSetting parseServiceInfo(ResolveInfo service, UserHandle userHandle,
- PackageManager pm) throws XmlPullParserException, IOException {
-
- ServiceInfo si = service.serviceInfo;
- ApplicationInfo ai = si.applicationInfo;
-
- if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
- if (Log.isLoggable(TAG, Log.WARN)) {
- Log.w(TAG, "Ignoring attempt to inject setting from app not in system image: "
- + service);
- return null;
- }
- }
-
- XmlResourceParser parser = null;
- try {
- parser = si.loadXmlMetaData(pm, SettingInjectorService.META_DATA_NAME);
- if (parser == null) {
- throw new XmlPullParserException("No " + SettingInjectorService.META_DATA_NAME
- + " meta-data for " + service + ": " + si);
- }
-
- AttributeSet attrs = Xml.asAttributeSet(parser);
-
- int type;
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && type != XmlPullParser.START_TAG) {
- }
-
- String nodeName = parser.getName();
- if (!SettingInjectorService.ATTRIBUTES_NAME.equals(nodeName)) {
- throw new XmlPullParserException("Meta-data does not start with "
- + SettingInjectorService.ATTRIBUTES_NAME + " tag");
- }
-
- Resources res = pm.getResourcesForApplicationAsUser(si.packageName,
- userHandle.getIdentifier());
- return parseAttributes(si.packageName, si.name, userHandle, res, attrs);
- } catch (PackageManager.NameNotFoundException e) {
- throw new XmlPullParserException(
- "Unable to load resources for package " + si.packageName);
- } finally {
- if (parser != null) {
- parser.close();
- }
- }
- }
-
- /**
- * Returns an immutable representation of the static attributes for the setting, or null.
- */
- private static InjectedSetting parseAttributes(String packageName, String className,
- UserHandle userHandle, Resources res, AttributeSet attrs) {
-
- TypedArray sa = res.obtainAttributes(attrs, android.R.styleable.SettingInjectorService);
- try {
- // Note that to help guard against malicious string injection, we do not allow dynamic
- // specification of the label (setting title)
- final String title = sa.getString(android.R.styleable.SettingInjectorService_title);
- final int iconId =
- sa.getResourceId(android.R.styleable.SettingInjectorService_icon, 0);
- final String settingsActivity =
- sa.getString(android.R.styleable.SettingInjectorService_settingsActivity);
- final String userRestriction = sa.getString(
- android.R.styleable.SettingInjectorService_userRestriction);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "parsed title: " + title + ", iconId: " + iconId
- + ", settingsActivity: " + settingsActivity);
- }
- return new InjectedSetting.Builder()
- .setPackageName(packageName)
- .setClassName(className)
- .setTitle(title)
- .setIconId(iconId)
- .setUserHandle(userHandle)
- .setSettingsActivity(settingsActivity)
- .setUserRestriction(userRestriction)
- .build();
- } finally {
- sa.recycle();
- }
- }
-
- /**
- * Gets a list of preferences that other apps have injected.
- *
- * @param profileId Identifier of the user/profile to obtain the injected settings for or
- * UserHandle.USER_CURRENT for all profiles associated with current user.
- */
- public List getInjectedSettings(Context prefContext, final int profileId) {
- final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
- final List profiles = um.getUserProfiles();
- ArrayList prefs = new ArrayList<>();
- final int profileCount = profiles.size();
- for (int i = 0; i < profileCount; ++i) {
- final UserHandle userHandle = profiles.get(i);
- if (profileId == UserHandle.USER_CURRENT || profileId == userHandle.getIdentifier()) {
- Iterable settings = getSettings(userHandle);
- for (InjectedSetting setting : settings) {
- Preference pref = addServiceSetting(prefContext, prefs, setting);
- mSettings.add(new Setting(setting, pref));
- }
- }
- }
-
- reloadStatusMessages();
-
- return prefs;
- }
-
- /**
- * Checks wheteher there is any preference that other apps have injected.
- *
- * @param profileId Identifier of the user/profile to obtain the injected settings for or
- * UserHandle.USER_CURRENT for all profiles associated with current user.
- */
- public boolean hasInjectedSettings(final int profileId) {
- final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
- final List profiles = um.getUserProfiles();
- final int profileCount = profiles.size();
- for (int i = 0; i < profileCount; ++i) {
- final UserHandle userHandle = profiles.get(i);
- if (profileId == UserHandle.USER_CURRENT || profileId == userHandle.getIdentifier()) {
- Iterable settings = getSettings(userHandle);
- for (InjectedSetting setting : settings) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Reloads the status messages for all the preference items.
- */
- public void reloadStatusMessages() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "reloadingStatusMessages: " + mSettings);
- }
- mHandler.sendMessage(mHandler.obtainMessage(WHAT_RELOAD));
- }
-
- /**
- * Adds an injected setting to the root.
- */
- private Preference addServiceSetting(Context prefContext, List prefs,
- InjectedSetting info) {
- final PackageManager pm = mContext.getPackageManager();
- Drawable appIcon = null;
- try {
- final PackageItemInfo itemInfo = new PackageItemInfo();
- itemInfo.icon = info.iconId;
- itemInfo.packageName = info.packageName;
- final ApplicationInfo appInfo = pm.getApplicationInfo(info.packageName,
- PackageManager.GET_META_DATA);
- appIcon = IconDrawableFactory.newInstance(mContext)
- .getBadgedIcon(itemInfo, appInfo, info.mUserHandle.getIdentifier());
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Can't get ApplicationInfo for " + info.packageName, e);
- }
- Preference pref = TextUtils.isEmpty(info.userRestriction)
- ? new AppPreference(prefContext)
- : new RestrictedAppPreference(prefContext, info.userRestriction);
- pref.setTitle(info.title);
- pref.setSummary(null);
- pref.setIcon(appIcon);
- pref.setOnPreferenceClickListener(new ServiceSettingClickedListener(info));
- prefs.add(pref);
- return pref;
- }
-
- private class ServiceSettingClickedListener
- implements Preference.OnPreferenceClickListener {
- private InjectedSetting mInfo;
-
- public ServiceSettingClickedListener(InjectedSetting info) {
- mInfo = info;
- }
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- // Activity to start if they click on the preference. Must start in new task to ensure
- // that "android.settings.LOCATION_SOURCE_SETTINGS" brings user back to
- // Settings > Location.
- Intent settingIntent = new Intent();
- settingIntent.setClassName(mInfo.packageName, mInfo.settingsActivity);
- // Sometimes the user may navigate back to "Settings" and launch another different
- // injected setting after one injected setting has been launched.
- //
- // FLAG_ACTIVITY_CLEAR_TOP allows multiple Activities to stack on each other. When
- // "back" button is clicked, the user will navigate through all the injected settings
- // launched before. Such behavior could be quite confusing sometimes.
- //
- // In order to avoid such confusion, we use FLAG_ACTIVITY_CLEAR_TASK, which always clear
- // up all existing injected settings and make sure that "back" button always brings the
- // user back to "Settings" directly.
- settingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- mContext.startActivityAsUser(settingIntent, mInfo.mUserHandle);
- return true;
- }
- }
-
- /**
- * Loads the setting status values one at a time. Each load starts a subclass of {@link
- * SettingInjectorService}, so to reduce memory pressure we don't want to load too many at
- * once.
- */
- private final class StatusLoadingHandler extends Handler {
-
- /**
- * Settings whose status values need to be loaded. A set is used to prevent redundant loads.
- */
- private Set mSettingsToLoad = new HashSet();
-
- /**
- * Settings that are being loaded now and haven't timed out. In practice this should have
- * zero or one elements.
- */
- private Set mSettingsBeingLoaded = new HashSet();
-
- /**
- * Settings that are being loaded but have timed out. If only one setting has timed out, we
- * will go ahead and start loading the next setting so that one slow load won't delay the
- * load of the other settings.
- */
- private Set mTimedOutSettings = new HashSet();
-
- private boolean mReloadRequested;
-
- private StatusLoadingHandler() {
- super(Looper.getMainLooper());
- }
- @Override
- public void handleMessage(Message msg) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "handleMessage start: " + msg + ", " + this);
- }
-
- // Update state in response to message
- switch (msg.what) {
- case WHAT_RELOAD:
- mReloadRequested = true;
- break;
- case WHAT_RECEIVED_STATUS:
- final Setting receivedSetting = (Setting) msg.obj;
- receivedSetting.maybeLogElapsedTime();
- mSettingsBeingLoaded.remove(receivedSetting);
- mTimedOutSettings.remove(receivedSetting);
- removeMessages(WHAT_TIMEOUT, receivedSetting);
- break;
- case WHAT_TIMEOUT:
- final Setting timedOutSetting = (Setting) msg.obj;
- mSettingsBeingLoaded.remove(timedOutSetting);
- mTimedOutSettings.add(timedOutSetting);
- if (Log.isLoggable(TAG, Log.WARN)) {
- Log.w(TAG, "Timed out after " + timedOutSetting.getElapsedTime()
- + " millis trying to get status for: " + timedOutSetting);
- }
- break;
- default:
- Log.wtf(TAG, "Unexpected what: " + msg);
- }
-
- // Decide whether to load additional settings based on the new state. Start by seeing
- // if we have headroom to load another setting.
- if (mSettingsBeingLoaded.size() > 0 || mTimedOutSettings.size() > 1) {
- // Don't load any more settings until one of the pending settings has completed.
- // To reduce memory pressure, we want to be loading at most one setting (plus at
- // most one timed-out setting) at a time. This means we'll be responsible for
- // bringing in at most two services.
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "too many services already live for " + msg + ", " + this);
- }
- return;
- }
-
- if (mReloadRequested && mSettingsToLoad.isEmpty() && mSettingsBeingLoaded.isEmpty()
- && mTimedOutSettings.isEmpty()) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "reloading because idle and reload requesteed " + msg + ", " + this);
- }
- // Reload requested, so must reload all settings
- mSettingsToLoad.addAll(mSettings);
- mReloadRequested = false;
- }
-
- // Remove the next setting to load from the queue, if any
- Iterator iter = mSettingsToLoad.iterator();
- if (!iter.hasNext()) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "nothing left to do for " + msg + ", " + this);
- }
- return;
- }
- Setting setting = iter.next();
- iter.remove();
-
- // Request the status value
- setting.startService();
- mSettingsBeingLoaded.add(setting);
-
- // Ensure that if receiving the status value takes too long, we start loading the
- // next value anyway
- Message timeoutMsg = obtainMessage(WHAT_TIMEOUT, setting);
- sendMessageDelayed(timeoutMsg, INJECTED_STATUS_UPDATE_TIMEOUT_MILLIS);
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "handleMessage end " + msg + ", " + this
- + ", started loading " + setting);
- }
- }
-
- @Override
- public String toString() {
- return "StatusLoadingHandler{" +
- "mSettingsToLoad=" + mSettingsToLoad +
- ", mSettingsBeingLoaded=" + mSettingsBeingLoaded +
- ", mTimedOutSettings=" + mTimedOutSettings +
- ", mReloadRequested=" + mReloadRequested +
- '}';
- }
- }
-
- /**
- * Represents an injected setting and the corresponding preference.
- */
- private final class Setting {
-
- public final InjectedSetting setting;
- public final Preference preference;
- public long startMillis;
-
- private Setting(InjectedSetting setting, Preference preference) {
- this.setting = setting;
- this.preference = preference;
- }
-
- @Override
- public String toString() {
- return "Setting{" +
- "setting=" + setting +
- ", preference=" + preference +
- '}';
- }
-
- /**
- * Returns true if they both have the same {@link #setting} value. Ignores mutable
- * {@link #preference} and {@link #startMillis} so that it's safe to use in sets.
- */
- @Override
- public boolean equals(Object o) {
- return this == o || o instanceof Setting && setting.equals(((Setting) o).setting);
- }
-
- @Override
- public int hashCode() {
- return setting.hashCode();
- }
-
- /**
- * Starts the service to fetch for the current status for the setting, and updates the
- * preference when the service replies.
- */
- public void startService() {
- final ActivityManager am = (ActivityManager)
- mContext.getSystemService(Context.ACTIVITY_SERVICE);
- if (!am.isUserRunning(setting.mUserHandle.getIdentifier())) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "Cannot start service as user "
- + setting.mUserHandle.getIdentifier() + " is not running");
- }
- return;
- }
- Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- Bundle bundle = msg.getData();
- boolean enabled = bundle.getBoolean(SettingInjectorService.ENABLED_KEY, true);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, setting + ": received " + msg + ", bundle: " + bundle);
- }
- preference.setSummary(null);
- preference.setEnabled(enabled);
- mHandler.sendMessage(
- mHandler.obtainMessage(WHAT_RECEIVED_STATUS, Setting.this));
- }
- };
- Messenger messenger = new Messenger(handler);
-
- Intent intent = setting.getServiceIntent();
- intent.putExtra(SettingInjectorService.MESSENGER_KEY, messenger);
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, setting + ": sending update intent: " + intent
- + ", handler: " + handler);
- startMillis = SystemClock.elapsedRealtime();
- } else {
- startMillis = 0;
- }
-
- // Start the service, making sure that this is attributed to the user associated with
- // the setting rather than the system user.
- mContext.startServiceAsUser(intent, setting.mUserHandle);
- }
-
- public long getElapsedTime() {
- long end = SystemClock.elapsedRealtime();
- return end - startMillis;
- }
-
- public void maybeLogElapsedTime() {
- if (Log.isLoggable(TAG, Log.DEBUG) && startMillis != 0) {
- long elapsed = getElapsedTime();
- Log.d(TAG, this + " update took " + elapsed + " millis");
- }
- }
- }
-}
diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java
index 3b4189bc56b..91a094f8179 100644
--- a/src/com/android/settings/network/ApnEditor.java
+++ b/src/com/android/settings/network/ApnEditor.java
@@ -18,7 +18,6 @@ package com.android.settings.network;
import static android.content.Context.TELEPHONY_SERVICE;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentValues;
import android.content.Context;
@@ -55,6 +54,7 @@ import java.util.List;
import java.util.Set;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.EditTextPreference;
import androidx.preference.ListPreference;
import androidx.preference.MultiSelectListPreference;
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 31a8435652f..27e1a98aa71 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -19,7 +19,6 @@ import static com.android.settings.network.MobilePlanPreferenceController
.MANAGE_MOBILE_PLAN_DIALOG_ID;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.icu.text.ListFormatter;
@@ -44,6 +43,7 @@ import java.util.Arrays;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@SearchIndexable
diff --git a/src/com/android/settings/notification/NotificationAccessSettings.java b/src/com/android/settings/notification/NotificationAccessSettings.java
index ad721ba750c..9bfbd2c5b9f 100644
--- a/src/com/android/settings/notification/NotificationAccessSettings.java
+++ b/src/com/android/settings/notification/NotificationAccessSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.notification;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.NotificationManager;
import android.content.ComponentName;
@@ -42,6 +41,7 @@ import java.util.ArrayList;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
/**
diff --git a/src/com/android/settings/notification/NotificationLockscreenPreference.java b/src/com/android/settings/notification/NotificationLockscreenPreference.java
index af912af3f60..3370f3ec785 100644
--- a/src/com/android/settings/notification/NotificationLockscreenPreference.java
+++ b/src/com/android/settings/notification/NotificationLockscreenPreference.java
@@ -16,7 +16,6 @@
package com.android.settings.notification;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -36,6 +35,7 @@ import com.android.settings.RestrictedListPreference;
import com.android.settings.Utils;
import com.android.settingslib.RestrictedLockUtils;
+import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AlertDialog.Builder;
public class NotificationLockscreenPreference extends RestrictedListPreference {
diff --git a/src/com/android/settings/notification/WorkSoundPreferenceController.java b/src/com/android/settings/notification/WorkSoundPreferenceController.java
index 44796f8e132..26cd8aa13b8 100644
--- a/src/com/android/settings/notification/WorkSoundPreferenceController.java
+++ b/src/com/android/settings/notification/WorkSoundPreferenceController.java
@@ -17,7 +17,6 @@
package com.android.settings.notification;
import android.annotation.UserIdInt;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -47,6 +46,7 @@ import com.android.settingslib.core.lifecycle.events.OnResume;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java
index 4af81586b56..2e4bb4e6a43 100644
--- a/src/com/android/settings/notification/ZenAccessSettings.java
+++ b/src/com/android/settings/notification/ZenAccessSettings.java
@@ -18,7 +18,6 @@ package com.android.settings.notification;
import android.annotation.Nullable;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.Dialog;
import android.app.NotificationManager;
@@ -58,6 +57,7 @@ import java.util.Collections;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceScreen;
diff --git a/src/com/android/settings/notification/ZenDeleteRuleDialog.java b/src/com/android/settings/notification/ZenDeleteRuleDialog.java
index 2783e3b3ce1..c460d84237d 100644
--- a/src/com/android/settings/notification/ZenDeleteRuleDialog.java
+++ b/src/com/android/settings/notification/ZenDeleteRuleDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.notification;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -26,6 +25,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class ZenDeleteRuleDialog extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
index 56f9081e745..3cfd13d1540 100644
--- a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.notification;
-import android.app.AlertDialog;
import android.app.AutomaticZenRule;
import android.app.Dialog;
import android.app.TimePickerDialog;
@@ -42,6 +41,7 @@ import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceClickListener;
diff --git a/src/com/android/settings/notification/ZenRuleNameDialog.java b/src/com/android/settings/notification/ZenRuleNameDialog.java
index 43144546271..62c83cd563e 100644
--- a/src/com/android/settings/notification/ZenRuleNameDialog.java
+++ b/src/com/android/settings/notification/ZenRuleNameDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.notification;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -32,6 +31,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class ZenRuleNameDialog extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/notification/ZenRuleSelectionDialog.java b/src/com/android/settings/notification/ZenRuleSelectionDialog.java
index 40b79f78a7a..b1a3939b98c 100644
--- a/src/com/android/settings/notification/ZenRuleSelectionDialog.java
+++ b/src/com/android/settings/notification/ZenRuleSelectionDialog.java
@@ -18,7 +18,6 @@ package com.android.settings.notification;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.NotificationManager;
import android.content.Context;
@@ -47,6 +46,7 @@ import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class ZenRuleSelectionDialog extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 3e478d1e3f5..3dc40683dde 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -23,7 +23,6 @@ import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswor
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -63,6 +62,7 @@ import java.util.List;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
index fc1fab0218e..0f6eeb3bb63 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
@@ -20,7 +20,6 @@ package com.android.settings.password;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityOptions;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.IActivityManager;
import android.app.KeyguardManager;
@@ -53,6 +52,7 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.fingerprint.FingerprintUiHelper;
import com.android.settings.core.InstrumentedFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
diff --git a/src/com/android/settings/password/SetupSkipDialog.java b/src/com/android/settings/password/SetupSkipDialog.java
index 98a2482ab12..c93d12d0160 100644
--- a/src/com/android/settings/password/SetupSkipDialog.java
+++ b/src/com/android/settings/password/SetupSkipDialog.java
@@ -17,7 +17,6 @@
package com.android.settings.password;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -27,6 +26,7 @@ import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
public class SetupSkipDialog extends InstrumentedDialogFragment
diff --git a/src/com/android/settings/security/ConfigureKeyGuardDialog.java b/src/com/android/settings/security/ConfigureKeyGuardDialog.java
index 3bcfb89ce5c..f09e077ce96 100644
--- a/src/com/android/settings/security/ConfigureKeyGuardDialog.java
+++ b/src/com/android/settings/security/ConfigureKeyGuardDialog.java
@@ -17,7 +17,6 @@
package com.android.settings.security;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.DialogInterface;
@@ -31,6 +30,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.password.ChooseLockGeneric;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
/**
* Prompt for key guard configuration confirmation.
diff --git a/src/com/android/settings/security/CryptKeeperSettings.java b/src/com/android/settings/security/CryptKeeperSettings.java
index 97669114678..b7c5db79a2a 100644
--- a/src/com/android/settings/security/CryptKeeperSettings.java
+++ b/src/com/android/settings/security/CryptKeeperSettings.java
@@ -17,7 +17,6 @@
package com.android.settings.security;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -42,6 +41,7 @@ import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.ConfirmLockPattern;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
public class CryptKeeperSettings extends InstrumentedPreferenceFragment {
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index e2147209eac..71130ea5350 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -19,6 +19,8 @@ package com.android.settings.security;
import android.content.Context;
import android.provider.SearchIndexableResource;
+import androidx.annotation.VisibleForTesting;
+
import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -29,6 +31,7 @@ import com.android.settings.gestures.DoubleTapScreenPreferenceController;
import com.android.settings.gestures.PickupGesturePreferenceController;
import com.android.settings.notification.LockScreenNotificationPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.security.screenlock.LockScreenPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
@@ -37,8 +40,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import androidx.annotation.VisibleForTesting;
-
/**
* Settings screen for lock screen preference
*/
@@ -157,5 +158,11 @@ public class LockscreenDashboardFragment extends DashboardFragment
niks.add(KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER);
return niks;
}
+
+ @Override
+ protected boolean isPageSearchEnabled(Context context) {
+ return new LockScreenPreferenceController(context, "anykey")
+ .isAvailable();
+ }
};
}
diff --git a/src/com/android/settings/security/UnificationConfirmationDialog.java b/src/com/android/settings/security/UnificationConfirmationDialog.java
index f82ece6def1..e862bd016fd 100644
--- a/src/com/android/settings/security/UnificationConfirmationDialog.java
+++ b/src/com/android/settings/security/UnificationConfirmationDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.security;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -25,6 +24,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
public class UnificationConfirmationDialog extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java
index 853f80dc813..803e1cf36fb 100644
--- a/src/com/android/settings/sim/SimDialogActivity.java
+++ b/src/com/android/settings/sim/SimDialogActivity.java
@@ -17,7 +17,6 @@
package com.android.settings.sim;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -45,6 +44,8 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
+
public class SimDialogActivity extends Activity {
private static String TAG = "SimDialogActivity";
diff --git a/src/com/android/settings/sim/SimPreferenceDialog.java b/src/com/android/settings/sim/SimPreferenceDialog.java
index 2b6ebe3b2e5..a657a6bfca4 100644
--- a/src/com/android/settings/sim/SimPreferenceDialog.java
+++ b/src/com/android/settings/sim/SimPreferenceDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.sim;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
@@ -42,6 +41,8 @@ import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.Utils;
+import androidx.appcompat.app.AlertDialog;
+
public class SimPreferenceDialog extends Activity {
private Context mContext;
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index da705c94dd6..f6c08ce349c 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -32,15 +32,15 @@ import android.util.KeyValueListParser;
import android.util.Log;
import android.util.Pair;
+import com.android.settings.bluetooth.BluetoothSliceBuilder;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.flashlight.FlashlightSliceBuilder;
import com.android.settings.location.LocationSliceBuilder;
import com.android.settings.mobilenetwork.Enhanced4gLteSliceHelper;
import com.android.settings.notification.ZenModeSliceBuilder;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.core.BasePreferenceController;
import com.android.settings.wifi.WifiSliceBuilder;
import com.android.settings.wifi.calling.WifiCallingSliceHelper;
-import com.android.settings.bluetooth.BluetoothSliceBuilder;
import com.android.settingslib.SliceBroadcastRelay;
import com.android.settingslib.utils.ThreadUtils;
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index c13d12c0993..d21d0c8d056 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -20,7 +20,6 @@ import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH;
import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
-import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.Context;
@@ -57,6 +56,7 @@ import java.util.MissingResourceException;
import java.util.Objects;
import java.util.Set;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
diff --git a/src/com/android/settings/tts/TtsEnginePreference.java b/src/com/android/settings/tts/TtsEnginePreference.java
index 84f5b7e337a..41684c58061 100644
--- a/src/com/android/settings/tts/TtsEnginePreference.java
+++ b/src/com/android/settings/tts/TtsEnginePreference.java
@@ -16,7 +16,6 @@
package com.android.settings.tts;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -29,6 +28,7 @@ import android.widget.RadioButton;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
diff --git a/src/com/android/settings/users/AutoSyncDataPreferenceController.java b/src/com/android/settings/users/AutoSyncDataPreferenceController.java
index 7d840caa6d0..5856f71e1ee 100644
--- a/src/com/android/settings/users/AutoSyncDataPreferenceController.java
+++ b/src/com/android/settings/users/AutoSyncDataPreferenceController.java
@@ -16,7 +16,6 @@
package com.android.settings.users;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.Context;
@@ -33,6 +32,7 @@ import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settingslib.core.AbstractPreferenceController;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
diff --git a/src/com/android/settings/users/EditUserInfoController.java b/src/com/android/settings/users/EditUserInfoController.java
index 072c8cddb2c..604551607a5 100644
--- a/src/com/android/settings/users/EditUserInfoController.java
+++ b/src/com/android/settings/users/EditUserInfoController.java
@@ -17,7 +17,6 @@
package com.android.settings.users;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -41,6 +40,7 @@ import com.android.settingslib.drawable.CircleFramedDrawable;
import java.io.File;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
/**
diff --git a/src/com/android/settings/users/OwnerInfoSettings.java b/src/com/android/settings/users/OwnerInfoSettings.java
index 0f99360aa28..7576917fd26 100644
--- a/src/com/android/settings/users/OwnerInfoSettings.java
+++ b/src/com/android/settings/users/OwnerInfoSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.users;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
@@ -33,6 +32,7 @@ import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.security.OwnerInfoPreferenceController.OwnerInfoCallback;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class OwnerInfoSettings extends InstrumentedDialogFragment implements OnClickListener {
diff --git a/src/com/android/settings/users/UserDialogs.java b/src/com/android/settings/users/UserDialogs.java
index 3ed383a6251..137c938cae4 100644
--- a/src/com/android/settings/users/UserDialogs.java
+++ b/src/com/android/settings/users/UserDialogs.java
@@ -16,7 +16,6 @@
package com.android.settings.users;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -34,6 +33,8 @@ import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.Utils;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Helper class for displaying dialogs related to user settings.
*/
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 7d84d9903ba..9aa56c234d3 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -18,7 +18,6 @@ package com.android.settings.users;
import android.app.Activity;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
@@ -79,6 +78,7 @@ import java.util.List;
import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen;
diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java
index 87c6b8e0da9..e222e569583 100644
--- a/src/com/android/settings/utils/ManagedServiceSettings.java
+++ b/src/com/android/settings/utils/ManagedServiceSettings.java
@@ -18,7 +18,6 @@ package com.android.settings.utils;
import android.annotation.Nullable;
import android.app.ActivityManager;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -43,6 +42,7 @@ import com.android.settingslib.applications.ServiceListing;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
diff --git a/src/com/android/settings/utils/PreferenceGroupChildrenCache.java b/src/com/android/settings/utils/PreferenceGroupChildrenCache.java
new file mode 100644
index 00000000000..dcbf4fdfe5c
--- /dev/null
+++ b/src/com/android/settings/utils/PreferenceGroupChildrenCache.java
@@ -0,0 +1,59 @@
+/*
+ * 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.utils;
+
+import android.text.TextUtils;
+import android.util.ArrayMap;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+
+/**
+ * Class that helps track which {@link Preference}s in a {@link PreferenceGroup} are still being
+ * used, and remove unused ones.
+ */
+public class PreferenceGroupChildrenCache {
+
+ private ArrayMap mPreferenceCache;
+
+ public void cacheRemoveAllPrefs(PreferenceGroup group) {
+ mPreferenceCache = new ArrayMap<>();
+ final int N = group.getPreferenceCount();
+ for (int i = 0; i < N; i++) {
+ Preference p = group.getPreference(i);
+ if (TextUtils.isEmpty(p.getKey())) {
+ continue;
+ }
+ mPreferenceCache.put(p.getKey(), p);
+ }
+ }
+
+ public void removeCachedPrefs(PreferenceGroup group) {
+ for (Preference p : mPreferenceCache.values()) {
+ group.removePreference(p);
+ }
+ mPreferenceCache = null;
+ }
+
+ public Preference getCachedPreference(String key) {
+ return mPreferenceCache != null ? mPreferenceCache.remove(key) : null;
+ }
+
+ public int getCachedCount() {
+ return mPreferenceCache != null ? mPreferenceCache.size() : 0;
+ }
+}
diff --git a/src/com/android/settings/vpn2/AppDialog.java b/src/com/android/settings/vpn2/AppDialog.java
index e41ffefea5e..6641bf3c682 100644
--- a/src/com/android/settings/vpn2/AppDialog.java
+++ b/src/com/android/settings/vpn2/AppDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.vpn2;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageInfo;
@@ -24,6 +23,8 @@ import android.os.Bundle;
import com.android.settings.R;
+import androidx.appcompat.app.AlertDialog;
+
/**
* UI for managing the connection controlled by an app.
*
diff --git a/src/com/android/settings/vpn2/AppDialogFragment.java b/src/com/android/settings/vpn2/AppDialogFragment.java
index 2f7a6bb0f7e..759adbf5348 100644
--- a/src/com/android/settings/vpn2/AppDialogFragment.java
+++ b/src/com/android/settings/vpn2/AppDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.vpn2;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -34,6 +33,7 @@ import com.android.internal.net.VpnConfig;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
/**
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index 145e86fb4ba..a141919661f 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -18,7 +18,6 @@ package com.android.settings.vpn2;
import static android.app.AppOpsManager.OP_ACTIVATE_VPN;
import android.annotation.NonNull;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.app.Dialog;
import android.content.Context;
@@ -49,6 +48,7 @@ import com.android.settingslib.RestrictedSwitchPreference;
import java.util.List;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.preference.Preference;
diff --git a/src/com/android/settings/vpn2/ConfigDialog.java b/src/com/android/settings/vpn2/ConfigDialog.java
index 4eecd28d22c..376dba7da86 100644
--- a/src/com/android/settings/vpn2/ConfigDialog.java
+++ b/src/com/android/settings/vpn2/ConfigDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.vpn2;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -39,6 +38,8 @@ import com.android.settings.R;
import java.net.InetAddress;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Dialog showing information about a VPN configuration. The dialog
* can be launched to either edit or prompt for credentials to connect
diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java
index 00b22bb2fb3..1517bf748b8 100644
--- a/src/com/android/settings/vpn2/ConfigDialogFragment.java
+++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.vpn2;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -38,6 +37,8 @@ import com.android.internal.net.VpnProfile;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
+
/**
* Fragment wrapper around a {@link ConfigDialog}.
*/
diff --git a/src/com/android/settings/vpn2/ConfirmLockdownFragment.java b/src/com/android/settings/vpn2/ConfirmLockdownFragment.java
index 5c2c9d7b51e..d73e9286fd2 100644
--- a/src/com/android/settings/vpn2/ConfirmLockdownFragment.java
+++ b/src/com/android/settings/vpn2/ConfirmLockdownFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.settings.vpn2;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -24,6 +23,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
public class ConfirmLockdownFragment extends InstrumentedDialogFragment
diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 3d8dbdea986..dbb4e21aebe 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -16,7 +16,6 @@
package com.android.settings.wfd;
-import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -63,6 +62,7 @@ import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
diff --git a/src/com/android/settings/widget/SingleTargetGearPreference.java b/src/com/android/settings/widget/SingleTargetGearPreference.java
index 8def647ef39..b770b6dd31e 100644
--- a/src/com/android/settings/widget/SingleTargetGearPreference.java
+++ b/src/com/android/settings/widget/SingleTargetGearPreference.java
@@ -17,13 +17,13 @@
package com.android.settings.widget;
import android.content.Context;
-
-import androidx.core.content.res.TypedArrayUtils;
-import androidx.preference.Preference;
import android.util.AttributeSet;
import com.android.settings.R;
+import androidx.core.content.res.TypedArrayUtils;
+import androidx.preference.Preference;
+
/**
* A preference with single target and a gear icon on the side.
*/
diff --git a/src/com/android/settings/widget/VideoPreferenceController.java b/src/com/android/settings/widget/VideoPreferenceController.java
new file mode 100644
index 00000000000..457c6dfba22
--- /dev/null
+++ b/src/com/android/settings/widget/VideoPreferenceController.java
@@ -0,0 +1,64 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnPause;
+import com.android.settingslib.core.lifecycle.events.OnResume;
+
+import androidx.preference.PreferenceScreen;
+
+public class VideoPreferenceController extends BasePreferenceController implements
+ LifecycleObserver, OnResume, OnPause {
+
+ private VideoPreference mVideoPreference;
+ private boolean mVideoPaused;
+
+ public VideoPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE_UNSEARCHABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mVideoPreference = (VideoPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void onPause() {
+ if (mVideoPreference != null) {
+ mVideoPaused = mVideoPreference.isVideoPaused();
+ mVideoPreference.onViewInvisible();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ if (mVideoPreference != null) {
+ mVideoPreference.onViewVisible(mVideoPaused);
+ }
+ }
+
+}
diff --git a/src/com/android/settings/wifi/ChangeWifiStateDetails.java b/src/com/android/settings/wifi/ChangeWifiStateDetails.java
index fbf0d6360c3..899b35db363 100644
--- a/src/com/android/settings/wifi/ChangeWifiStateDetails.java
+++ b/src/com/android/settings/wifi/ChangeWifiStateDetails.java
@@ -16,7 +16,6 @@
package com.android.settings.wifi;
-import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
import android.os.Bundle;
@@ -29,6 +28,7 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.AppStateChangeWifiStateBridge.WifiSettingsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.SwitchPreference;
diff --git a/src/com/android/settings/wifi/WifiAPITest.java b/src/com/android/settings/wifi/WifiAPITest.java
index 9fc5ec4e091..52a54b7ae55 100644
--- a/src/com/android/settings/wifi/WifiAPITest.java
+++ b/src/com/android/settings/wifi/WifiAPITest.java
@@ -18,7 +18,6 @@ package com.android.settings.wifi;
import static android.content.Context.WIFI_SERVICE;
-import android.app.AlertDialog;
import android.content.DialogInterface;
import android.net.wifi.WifiManager;
import android.os.Bundle;
@@ -29,6 +28,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
diff --git a/src/com/android/settings/wifi/WifiDialog.java b/src/com/android/settings/wifi/WifiDialog.java
index 79500e0b7ad..a487017d15e 100644
--- a/src/com/android/settings/wifi/WifiDialog.java
+++ b/src/com/android/settings/wifi/WifiDialog.java
@@ -16,7 +16,6 @@
package com.android.settings.wifi;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -27,11 +26,17 @@ import com.android.settings.R;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.wifi.AccessPoint;
-public class WifiDialog extends AlertDialog implements WifiConfigUiBase, DialogInterface.OnClickListener {
+import androidx.appcompat.app.AlertDialog;
+
+public class WifiDialog extends AlertDialog implements WifiConfigUiBase,
+ DialogInterface.OnClickListener {
public interface WifiDialogListener {
- void onForget(WifiDialog dialog);
- void onSubmit(WifiDialog dialog);
+ default void onForget(WifiDialog dialog) {
+ }
+
+ default void onSubmit(WifiDialog dialog) {
+ }
}
private static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE;
@@ -64,7 +69,7 @@ public class WifiDialog extends AlertDialog implements WifiConfigUiBase, DialogI
}
/* package */ WifiDialog(Context context, WifiDialogListener listener, AccessPoint accessPoint,
- int mode, int style, boolean hideSubmitButton) {
+ int mode, int style, boolean hideSubmitButton) {
super(context, style);
mMode = mode;
mListener = listener;
@@ -81,7 +86,6 @@ public class WifiDialog extends AlertDialog implements WifiConfigUiBase, DialogI
protected void onCreate(Bundle savedInstanceState) {
mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
setView(mView);
- setInverseBackgroundForced(true);
mController = new WifiConfigController(this, mView, mAccessPoint, mMode);
super.onCreate(savedInstanceState);
@@ -99,8 +103,8 @@ public class WifiDialog extends AlertDialog implements WifiConfigUiBase, DialogI
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- mController.updatePassword();
+ super.onRestoreInstanceState(savedInstanceState);
+ mController.updatePassword();
}
@Override
diff --git a/src/com/android/settings/wifi/WifiScanModeActivity.java b/src/com/android/settings/wifi/WifiScanModeActivity.java
index 4742f63f208..cdd4f5fba15 100644
--- a/src/com/android/settings/wifi/WifiScanModeActivity.java
+++ b/src/com/android/settings/wifi/WifiScanModeActivity.java
@@ -16,7 +16,6 @@
package com.android.settings.wifi;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -30,6 +29,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity;
diff --git a/src/com/android/settings/wifi/WifiScanningRequiredFragment.java b/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
index 77636aece91..a2e8b0eaf02 100644
--- a/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
+++ b/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.wifi;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
@@ -35,6 +34,7 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settingslib.HelpUtils;
import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
public class WifiScanningRequiredFragment extends InstrumentedDialogFragment implements
DialogInterface.OnClickListener {
diff --git a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
index 3fe22c215f7..55ad18301ab 100644
--- a/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
+++ b/src/com/android/settings/wifi/WriteWifiConfigToNfcDialog.java
@@ -17,7 +17,6 @@
package com.android.settings.wifi;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.wifi.WifiManager;
@@ -46,6 +45,8 @@ import com.android.settingslib.wifi.AccessPoint;
import java.io.IOException;
+import androidx.appcompat.app.AlertDialog;
+
class WriteWifiConfigToNfcDialog extends AlertDialog
implements TextWatcher, View.OnClickListener, CompoundButton.OnCheckedChangeListener {
@@ -96,7 +97,6 @@ class WriteWifiConfigToNfcDialog extends AlertDialog
mView = getLayoutInflater().inflate(R.layout.write_wifi_config_to_nfc, null);
setView(mView);
- setInverseBackgroundForced(true);
setTitle(R.string.setup_wifi_nfc_tag);
setCancelable(true);
setButton(DialogInterface.BUTTON_NEUTRAL,
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index e0868c7761e..6d340296363 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -17,7 +17,6 @@
package com.android.settings.wifi.calling;
import android.app.Activity;
-import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -47,6 +46,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.widget.SwitchBar;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceClickListener;
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index d291f9cb5a8..bda3b767cf3 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -541,11 +541,6 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
mConnectivityManager.startCaptivePortalApp(mNetwork);
}
- @Override
- public void onForget(WifiDialog dialog) {
- // can't forget network from a 'modify' dialog
- }
-
@Override
public void onSubmit(WifiDialog dialog) {
if (dialog.getController() != null) {
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 7ab43c7a420..3c2fa08d2f3 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -17,7 +17,6 @@
package com.android.settings.wifi.p2p;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -55,6 +54,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java
new file mode 100644
index 00000000000..dea44439b99
--- /dev/null
+++ b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java
@@ -0,0 +1,144 @@
+/*
+ * 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.wifi.savedaccesspoints;
+
+
+import android.content.Context;
+import android.net.wifi.WifiManager;
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.utils.PreferenceGroupChildrenCache;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.utils.ThreadUtils;
+import com.android.settingslib.wifi.AccessPoint;
+import com.android.settingslib.wifi.AccessPointPreference;
+import com.android.settingslib.wifi.AccessPointPreference.UserBadgeCache;
+import com.android.settingslib.wifi.WifiSavedConfigUtils;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Controller that manages a PreferenceGroup, which contains a list of saved access points.
+ */
+public class SavedAccessPointsPreferenceController extends BasePreferenceController implements
+ LifecycleObserver, OnStart, Preference.OnPreferenceClickListener,
+ WifiManager.ActionListener {
+
+ private static final String TAG = "SavedAPPrefCtrl";
+
+ private final WifiManager mWifiManager;
+ private final PreferenceGroupChildrenCache mChildrenCache;
+
+ private final UserBadgeCache mUserBadgeCache;
+ private PreferenceGroup mPreferenceGroup;
+ private SavedAccessPointsWifiSettings mHost;
+
+ public SavedAccessPointsPreferenceController(Context context,
+ String preferenceKey) {
+ super(context, preferenceKey);
+ mUserBadgeCache = new AccessPointPreference.UserBadgeCache(context.getPackageManager());
+ mWifiManager = context.getSystemService(WifiManager.class);
+ mChildrenCache = new PreferenceGroupChildrenCache();
+ }
+
+ public SavedAccessPointsPreferenceController setHost(SavedAccessPointsWifiSettings host) {
+ mHost = host;
+ return this;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreferenceGroup = (PreferenceGroup) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void onStart() {
+ refreshSavedAccessPoints();
+ }
+
+ public void postRefreshSavedAccessPoints() {
+ ThreadUtils.postOnMainThread(() -> refreshSavedAccessPoints());
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (mHost != null) {
+ mHost.showWifiDialog((AccessPointPreference) preference);
+ }
+ return false;
+ }
+
+ @Override
+ public void onSuccess() {
+ postRefreshSavedAccessPoints();
+ }
+
+ @Override
+ public void onFailure(int reason) {
+ postRefreshSavedAccessPoints();
+ }
+
+ @VisibleForTesting
+ void refreshSavedAccessPoints() {
+ if (mPreferenceGroup == null) {
+ Log.w(TAG, "PreferenceGroup is null, skipping.");
+ return;
+ }
+ final Context prefContext = mPreferenceGroup.getContext();
+
+ final List accessPoints =
+ WifiSavedConfigUtils.getAllConfigs(mContext, mWifiManager);
+ Collections.sort(accessPoints, SavedNetworkComparator.INSTANCE);
+ mChildrenCache.cacheRemoveAllPrefs(mPreferenceGroup);
+
+ final int accessPointsSize = accessPoints.size();
+ for (int i = 0; i < accessPointsSize; ++i) {
+ AccessPoint ap = accessPoints.get(i);
+ String key = ap.getKey();
+ AccessPointPreference preference =
+ (AccessPointPreference) mChildrenCache.getCachedPreference(key);
+ if (preference == null) {
+ preference = new AccessPointPreference(ap, prefContext, mUserBadgeCache, true);
+ preference.setKey(key);
+ preference.setIcon(null);
+ preference.setOnPreferenceClickListener(this);
+ mPreferenceGroup.addPreference(preference);
+ }
+ preference.setOrder(i);
+ }
+
+ mChildrenCache.removeCachedPrefs(mPreferenceGroup);
+
+ if (mPreferenceGroup.getPreferenceCount() < 1) {
+ Log.w(TAG, "Saved networks activity loaded, but there are no saved networks!");
+ }
+ }
+}
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
index eeb5ca9d81d..8f14ec21d70 100644
--- a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
@@ -17,102 +17,35 @@
package com.android.settings.wifi.savedaccesspoints;
import android.annotation.Nullable;
-import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
-import android.icu.text.Collator;
+import android.content.DialogInterface;
import android.net.wifi.WifiManager;
import android.os.Bundle;
-import android.os.Handler;
import android.util.Log;
-import android.widget.Toast;
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
+
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.wifi.WifiConfigUiBase;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wifi.WifiSettings;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPointPreference;
-import com.android.settingslib.wifi.WifiSavedConfigUtils;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
/**
* UI to manage saved networks/access points.
- * TODO(b/64806699): convert to {@link DashboardFragment} with {@link PreferenceController}s
*/
-public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
- implements WifiDialog.WifiDialogListener {
+public class SavedAccessPointsWifiSettings extends DashboardFragment
+ implements WifiDialog.WifiDialogListener, DialogInterface.OnCancelListener {
+
private static final String TAG = "SavedAccessPoints";
- @VisibleForTesting
- static final int MSG_UPDATE_PREFERENCES = 1;
- private static final Comparator SAVED_NETWORK_COMPARATOR =
- new Comparator() {
- final Collator mCollator = Collator.getInstance();
- @Override
- public int compare(AccessPoint ap1, AccessPoint ap2) {
- return mCollator.compare(
- nullToEmpty(ap1.getConfigName()), nullToEmpty(ap2.getConfigName()));
- }
- private String nullToEmpty(String string) {
- return (string == null) ? "" : string;
- }
- };
-
- @VisibleForTesting
- final WifiManager.ActionListener mForgetListener = new WifiManager.ActionListener() {
- @Override
- public void onSuccess() {
- postUpdatePreference();
- }
-
- @Override
- public void onFailure(int reason) {
- postUpdatePreference();
- }
- };
-
- @VisibleForTesting
- final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(android.os.Message msg) {
- if (msg.what == MSG_UPDATE_PREFERENCES) {
- initPreferences();
- }
- }
- };
-
- private final WifiManager.ActionListener mSaveListener = new WifiManager.ActionListener() {
- @Override
- public void onSuccess() {
- postUpdatePreference();
- }
- @Override
- public void onFailure(int reason) {
- Activity activity = getActivity();
- if (activity != null) {
- Toast.makeText(activity,
- R.string.wifi_failed_save_message,
- Toast.LENGTH_SHORT).show();
- }
- }
- };
-
- private WifiDialog mDialog;
private WifiManager mWifiManager;
- private AccessPoint mDlgAccessPoint;
private Bundle mAccessPointSavedState;
private AccessPoint mSelectedAccessPoint;
- private AccessPointPreference.UserBadgeCache mUserBadgeCache;
-
// Instance state key
private static final String SAVE_DIALOG_ACCESS_POINT_STATE = "wifi_ap_state";
@@ -122,81 +55,44 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.wifi_display_saved_access_points);
- mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
+ protected int getPreferenceScreenResId() {
+ return R.xml.wifi_display_saved_access_points;
}
@Override
- public void onResume() {
- super.onResume();
- initPreferences();
+ protected String getLogTag() {
+ return TAG;
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public void onAttach(Context context) {
+ super.onAttach(context);
mWifiManager = (WifiManager) getContext()
.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+ use(SavedAccessPointsPreferenceController.class)
+ .setHost(this);
+ }
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(SAVE_DIALOG_ACCESS_POINT_STATE)) {
mAccessPointSavedState =
- savedInstanceState.getBundle(SAVE_DIALOG_ACCESS_POINT_STATE);
+ savedInstanceState.getBundle(SAVE_DIALOG_ACCESS_POINT_STATE);
}
}
}
- private void initPreferences() {
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- final Context context = getPrefContext();
-
- final List accessPoints =
- WifiSavedConfigUtils.getAllConfigs(context, mWifiManager);
- Collections.sort(accessPoints, SAVED_NETWORK_COMPARATOR);
- cacheRemoveAllPrefs(preferenceScreen);
-
- final int accessPointsSize = accessPoints.size();
- for (int i = 0; i < accessPointsSize; ++i) {
- AccessPoint ap = accessPoints.get(i);
- String key = ap.getKey();
- AccessPointPreference preference =
- (AccessPointPreference) getCachedPreference(key);
- if (preference == null) {
- preference = new AccessPointPreference(ap, context, mUserBadgeCache, true);
- preference.setKey(key);
- preference.setIcon(null);
- preferenceScreen.addPreference(preference);
- }
- preference.setOrder(i);
- }
-
- removeCachedPrefs(preferenceScreen);
-
- if(getPreferenceScreen().getPreferenceCount() < 1) {
- Log.w(TAG, "Saved networks activity loaded, but there are no saved networks!");
- }
- }
-
- private void postUpdatePreference() {
- if (!mHandler.hasMessages(MSG_UPDATE_PREFERENCES)) {
- mHandler.sendEmptyMessage(MSG_UPDATE_PREFERENCES);
- }
- }
-
- private void showWifiDialog(@Nullable AccessPointPreference accessPoint) {
- if (mDialog != null) {
- removeDialog(WifiSettings.WIFI_DIALOG_ID);
- mDialog = null;
- }
+ public void showWifiDialog(@Nullable AccessPointPreference accessPoint) {
+ removeDialog(WifiSettings.WIFI_DIALOG_ID);
if (accessPoint != null) {
// Save the access point and edit mode
- mDlgAccessPoint = accessPoint.getAccessPoint();
+ mSelectedAccessPoint = accessPoint.getAccessPoint();
} else {
// No access point is selected. Clear saved state.
- mDlgAccessPoint = null;
+ mSelectedAccessPoint = null;
mAccessPointSavedState = null;
}
@@ -207,24 +103,18 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
public Dialog onCreateDialog(int dialogId) {
switch (dialogId) {
case WifiSettings.WIFI_DIALOG_ID:
- if (mDlgAccessPoint == null && mAccessPointSavedState == null) {
- // Add new network
- mDialog = WifiDialog.createFullscreen(getActivity(), this, null,
- WifiConfigUiBase.MODE_CONNECT);
- } else {
- // Modify network
- if (mDlgAccessPoint == null) {
- // Restore AP from save state
- mDlgAccessPoint = new AccessPoint(getActivity(), mAccessPointSavedState);
- // Reset the saved access point data
- mAccessPointSavedState = null;
- }
- mDialog = WifiDialog.createModal(getActivity(), this, mDlgAccessPoint,
- WifiConfigUiBase.MODE_VIEW);
+ // Modify network
+ if (mSelectedAccessPoint == null) {
+ // Restore AP from save state
+ mSelectedAccessPoint = new AccessPoint(getActivity(), mAccessPointSavedState);
+ // Reset the saved access point data
+ mAccessPointSavedState = null;
}
- mSelectedAccessPoint = mDlgAccessPoint;
+ final WifiDialog dialog = WifiDialog.createModal(
+ getActivity(), this, mSelectedAccessPoint, WifiConfigUiBase.MODE_VIEW);
+ dialog.setOnCancelListener(this);
- return mDialog;
+ return dialog;
}
return super.onCreateDialog(dialogId);
}
@@ -242,14 +132,12 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
-
- // If the dialog is showing, save its state.
- if (mDialog != null && mDialog.isShowing()) {
- if (mDlgAccessPoint != null) {
- mAccessPointSavedState = new Bundle();
- mDlgAccessPoint.saveWifiState(mAccessPointSavedState);
- outState.putBundle(SAVE_DIALOG_ACCESS_POINT_STATE, mAccessPointSavedState);
- }
+ // If the dialog is showing (indicated by the existence of mSelectedAccessPoint), then we
+ // save its state.
+ if (mSelectedAccessPoint != null) {
+ mAccessPointSavedState = new Bundle();
+ mSelectedAccessPoint.saveWifiState(mAccessPointSavedState);
+ outState.putBundle(SAVE_DIALOG_ACCESS_POINT_STATE, mAccessPointSavedState);
}
}
@@ -264,27 +152,19 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
Log.e(TAG, "Failed to remove Passpoint configuration for "
+ mSelectedAccessPoint.getConfigName());
}
- postUpdatePreference();
+ use(SavedAccessPointsPreferenceController.class)
+ .postRefreshSavedAccessPoints();
} else {
// mForgetListener will call initPreferences upon completion
- mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, mForgetListener);
+ mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId,
+ use(SavedAccessPointsPreferenceController.class));
}
mSelectedAccessPoint = null;
}
}
@Override
- public void onSubmit(WifiDialog dialog) {
- mWifiManager.save(dialog.getController().getConfig(), mSaveListener);
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (preference instanceof AccessPointPreference) {
- showWifiDialog((AccessPointPreference) preference);
- return true;
- } else {
- return super.onPreferenceTreeClick(preference);
- }
+ public void onCancel(DialogInterface dialog) {
+ mSelectedAccessPoint = null;
}
}
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedNetworkComparator.java b/src/com/android/settings/wifi/savedaccesspoints/SavedNetworkComparator.java
new file mode 100644
index 00000000000..cff438787f6
--- /dev/null
+++ b/src/com/android/settings/wifi/savedaccesspoints/SavedNetworkComparator.java
@@ -0,0 +1,40 @@
+/*
+ * 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.wifi.savedaccesspoints;
+
+import android.icu.text.Collator;
+
+import com.android.settingslib.wifi.AccessPoint;
+
+import java.util.Comparator;
+
+public final class SavedNetworkComparator {
+ public static final Comparator INSTANCE =
+ new Comparator() {
+ final Collator mCollator = Collator.getInstance();
+
+ @Override
+ public int compare(AccessPoint ap1, AccessPoint ap2) {
+ return mCollator.compare(
+ nullToEmpty(ap1.getConfigName()), nullToEmpty(ap2.getConfigName()));
+ }
+
+ private String nullToEmpty(String string) {
+ return (string == null) ? "" : string;
+ }
+ };
+}
diff --git a/tests/robotests/src/com/android/settings/RestrictedSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/RestrictedSettingsFragmentTest.java
index 35f9e2876ab..73be1078b14 100644
--- a/tests/robotests/src/com/android/settings/RestrictedSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/RestrictedSettingsFragmentTest.java
@@ -21,7 +21,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.app.Activity;
-import android.app.AlertDialog;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -31,6 +30,8 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import androidx.appcompat.app.AlertDialog;
+
@RunWith(SettingsRobolectricTestRunner.class)
public class RestrictedSettingsFragmentTest {
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
index afbf5321451..40dcf7ad693 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
@@ -31,6 +31,7 @@ import android.text.TextUtils;
import com.android.settings.R;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.testutils.Robolectric;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.accounts.AuthenticatorHelper;
import com.android.settingslib.drawer.CategoryKey;
@@ -38,7 +39,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
@@ -49,7 +49,7 @@ import java.util.List;
import androidx.fragment.app.FragmentActivity;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class AccountDashboardFragmentTest {
private AccountDashboardFragment mFragment;
diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
index 035d74e72cd..0d905aa5bb6 100644
--- a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -52,6 +51,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
index de2479adf9f..dac9409cf7d 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.applications.appinfo;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
@@ -44,6 +45,7 @@ import android.os.UserManager;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.widget.ActionButtonPreferenceTest;
import com.android.settingslib.applications.AppUtils;
@@ -59,12 +61,11 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.util.ReflectionHelpers;
import androidx.fragment.app.Fragment;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class AppButtonsPreferenceControllerTest {
private static final String PACKAGE_NAME = "com.android.settings";
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java
index 98bfcd54fe8..80a696abb33 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java
@@ -21,12 +21,13 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.testutils.FragmentTestUtils;
import org.junit.Before;
@@ -35,13 +36,13 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
-import org.robolectric.shadows.ShadowAlertDialog;
-import org.robolectric.shadows.ShadowDialog;
+import org.robolectric.annotation.Config;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class, SettingsShadowResourcesImpl.class})
public class ButtonActionDialogFragmentTest {
private static final int FORCE_STOP_ID = ButtonActionDialogFragment.DialogType.FORCE_STOP;
@@ -73,12 +74,12 @@ public class ButtonActionDialogFragmentTest {
@Test
public void testOnCreateDialog_forceStopDialog() {
ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(FORCE_STOP_ID);
-
FragmentTestUtils.startFragment(fragment);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
assertThat(dialog).isNotNull();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
mShadowContext.getString(R.string.force_stop_dlg_text));
@@ -93,12 +94,12 @@ public class ButtonActionDialogFragmentTest {
@Test
public void testOnCreateDialog_disableDialog() {
ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(DISABLE_ID);
-
FragmentTestUtils.startFragment(fragment);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
assertThat(dialog).isNotNull();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
mShadowContext.getString(R.string.app_disable_dlg_text));
@@ -111,13 +112,13 @@ public class ButtonActionDialogFragmentTest {
@Test
public void testOnCreateDialog_specialDisableDialog() {
ButtonActionDialogFragment fragment =
- ButtonActionDialogFragment.newInstance(SPECIAL_DISABLE_ID);
-
+ ButtonActionDialogFragment.newInstance(SPECIAL_DISABLE_ID);
FragmentTestUtils.startFragment(fragment);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
assertThat(dialog).isNotNull();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
mShadowContext.getString(R.string.app_disable_dlg_text));
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java
index 1281b74bca7..6b4a6417bbe 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonDialogFragmentTest.java
@@ -25,24 +25,27 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.testutils.FragmentTestUtils;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
-import org.robolectric.shadows.ShadowAlertDialog;
-import org.robolectric.shadows.ShadowDialog;
+import org.robolectric.annotation.Config;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class, SettingsShadowResourcesImpl.class})
public class InstantAppButtonDialogFragmentTest {
private static final String TEST_PACKAGE = "testPackage";
@@ -52,8 +55,10 @@ public class InstantAppButtonDialogFragmentTest {
@Before
public void setUp() {
+ final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class);
mContext = spy(RuntimeEnvironment.application);
mFragment = spy(InstantAppButtonDialogFragment.newInstance(TEST_PACKAGE));
+ mFragment.show(activity.getSupportFragmentManager(), "InstantAppButtonDialogFragment");
doReturn(mContext).when(mFragment).getContext();
}
@@ -61,7 +66,6 @@ public class InstantAppButtonDialogFragmentTest {
public void onClick_shouldDeleteApp() {
final PackageManager packageManager = mock(PackageManager.class);
when(mContext.getPackageManager()).thenReturn(packageManager);
- FragmentTestUtils.startFragment(mFragment);
mFragment.onClick(null /* dialog */, 0 /* which */);
@@ -71,11 +75,11 @@ public class InstantAppButtonDialogFragmentTest {
@Test
public void onCreateDialog_clearAppDialog_shouldShowClearAppDataConfirmation() {
- FragmentTestUtils.startFragment(mFragment);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
assertThat(dialog).isNotNull();
- final ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+
+ final ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
mContext.getString(R.string.clear_instant_app_confirmation));
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
index d31e3e0e11f..cc0308c0a02 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
@@ -37,6 +37,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
import android.os.Bundle;
import android.os.Looper;
import android.os.UserManager;
@@ -74,6 +77,14 @@ public class ManageApplicationsTest {
private ApplicationsState.Session mSession;
@Mock
private Menu mMenu;
+ @Mock
+ private FragmentActivity mActivity;
+ @Mock
+ private Resources mResources;
+ @Mock
+ private UserManager mUserManager;
+ @Mock
+ private PackageManager mPackageManager;
private MenuItem mAppReset;
private MenuItem mSortRecent;
private MenuItem mSortFrequent;
@@ -89,7 +100,11 @@ public class ManageApplicationsTest {
when(mState.newSession(any())).thenReturn(mSession);
when(mState.getBackgroundLooper()).thenReturn(Looper.myLooper());
- mFragment = new ManageApplications();
+ mFragment = spy(new ManageApplications());
+ when(mFragment.getActivity()).thenReturn(mActivity);
+ when(mActivity.getResources()).thenReturn(mResources);
+ when(mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mActivity.getPackageManager()).thenReturn(mPackageManager);
}
@Test
@@ -126,10 +141,8 @@ public class ManageApplicationsTest {
@Test
public void onCreateView_shouldNotShowLoadingContainer() {
- final ManageApplications fragment = spy(new ManageApplications());
- ReflectionHelpers.setField(fragment, "mResetAppsHelper",
- mock(ResetAppsHelper.class));
- doNothing().when(fragment).createHeader();
+ ReflectionHelpers.setField(mFragment, "mResetAppsHelper", mock(ResetAppsHelper.class));
+ doNothing().when(mFragment).createHeader();
final LayoutInflater layoutInflater = mock(LayoutInflater.class);
final View view = mock(View.class);
@@ -137,19 +150,17 @@ public class ManageApplicationsTest {
when(layoutInflater.inflate(anyInt(), eq(null))).thenReturn(view);
when(view.findViewById(R.id.loading_container)).thenReturn(loadingContainer);
- fragment.onCreateView(layoutInflater, mock(ViewGroup.class), null);
+ mFragment.onCreateView(layoutInflater, mock(ViewGroup.class), null);
verify(loadingContainer, never()).setVisibility(View.VISIBLE);
}
@Test
public void updateLoading_appLoaded_shouldNotDelayCallToHandleLoadingContainer() {
- final ManageApplications fragment = mock(ManageApplications.class);
- ReflectionHelpers.setField(fragment, "mLoadingContainer", mock(View.class));
- ReflectionHelpers.setField(fragment, "mListContainer", mock(View.class));
- when(fragment.getActivity()).thenReturn(mock(FragmentActivity.class));
+ ReflectionHelpers.setField(mFragment, "mLoadingContainer", mock(View.class));
+ ReflectionHelpers.setField(mFragment, "mListContainer", mock(View.class));
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState, fragment,
+ spy(new ManageApplications.ApplicationsAdapter(mState, mFragment,
AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
final LoadingViewController loadingViewController =
mock(LoadingViewController.class);
@@ -168,12 +179,10 @@ public class ManageApplicationsTest {
@Test
public void updateLoading_appNotLoaded_shouldDelayCallToHandleLoadingContainer() {
- final ManageApplications fragment = mock(ManageApplications.class);
- ReflectionHelpers.setField(fragment, "mLoadingContainer", mock(View.class));
- ReflectionHelpers.setField(fragment, "mListContainer", mock(View.class));
- when(fragment.getActivity()).thenReturn(mock(FragmentActivity.class));
+ ReflectionHelpers.setField(mFragment, "mLoadingContainer", mock(View.class));
+ ReflectionHelpers.setField(mFragment, "mListContainer", mock(View.class));
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState, fragment,
+ spy(new ManageApplications.ApplicationsAdapter(mState, mFragment,
AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
final LoadingViewController loadingViewController =
mock(LoadingViewController.class);
@@ -200,21 +209,19 @@ public class ManageApplicationsTest {
@Test
public void onRebuildComplete_shouldHideLoadingView() {
final Context context = RuntimeEnvironment.application;
- final ManageApplications fragment = mock(ManageApplications.class);
final RecyclerView recyclerView = mock(RecyclerView.class);
final View emptyView = mock(View.class);
- ReflectionHelpers.setField(fragment, "mRecyclerView", recyclerView);
- ReflectionHelpers.setField(fragment, "mEmptyView", emptyView);
+ ReflectionHelpers.setField(mFragment, "mRecyclerView", recyclerView);
+ ReflectionHelpers.setField(mFragment, "mEmptyView", emptyView);
final View loadingContainer = mock(View.class);
when(loadingContainer.getContext()).thenReturn(context);
final View listContainer = mock(View.class);
when(listContainer.getVisibility()).thenReturn(View.INVISIBLE);
when(listContainer.getContext()).thenReturn(context);
- ReflectionHelpers.setField(fragment, "mLoadingContainer", loadingContainer);
- ReflectionHelpers.setField(fragment, "mListContainer", listContainer);
- when(fragment.getActivity()).thenReturn(mock(FragmentActivity.class));
+ ReflectionHelpers.setField(mFragment, "mLoadingContainer", loadingContainer);
+ ReflectionHelpers.setField(mFragment, "mListContainer", listContainer);
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState, fragment,
+ spy(new ManageApplications.ApplicationsAdapter(mState, mFragment,
AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
final LoadingViewController loadingViewController =
mock(LoadingViewController.class);
@@ -231,6 +238,8 @@ public class ManageApplicationsTest {
final ArrayList appList = new ArrayList<>();
appList.add(mock(ApplicationsState.AppEntry.class));
when(mSession.getAllApps()).thenReturn(appList);
+ ReflectionHelpers.setField(
+ mFragment, "mFilterAdapter", mock(ManageApplications.FilterSpinnerAdapter.class));
adapter.onRebuildComplete(null);
@@ -241,8 +250,7 @@ public class ManageApplicationsTest {
public void notifyItemChange_recyclerViewIdle_shouldNotify() {
final RecyclerView recyclerView = mock(RecyclerView.class);
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState,
- mock(ManageApplications.class),
+ spy(new ManageApplications.ApplicationsAdapter(mState, mFragment,
AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
adapter.onAttachedToRecyclerView(recyclerView);
@@ -256,8 +264,7 @@ public class ManageApplicationsTest {
public void notifyItemChange_recyclerViewScrolling_shouldNotifyWhenIdle() {
final RecyclerView recyclerView = mock(RecyclerView.class);
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState,
- mock(ManageApplications.class),
+ spy(new ManageApplications.ApplicationsAdapter(mState, mFragment,
AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
adapter.onAttachedToRecyclerView(recyclerView);
@@ -273,20 +280,19 @@ public class ManageApplicationsTest {
@Test
public void applicationsAdapter_onBindViewHolder_updateSwitch_notifications() {
- ManageApplications manageApplications = mock(ManageApplications.class);
- when(manageApplications.getActivity()).thenReturn(mock(FragmentActivity.class));
- UserManager um = mock(UserManager.class);
- when(um.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
- ReflectionHelpers.setField(manageApplications, "mUserManager", um);
- manageApplications.mListType = LIST_TYPE_NOTIFICATION;
+ when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
+ ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+ mFragment.mListType = LIST_TYPE_NOTIFICATION;
ApplicationViewHolder holder = mock(ApplicationViewHolder.class);
ReflectionHelpers.setField(holder, "itemView", mock(View.class));
ManageApplications.ApplicationsAdapter adapter =
new ManageApplications.ApplicationsAdapter(mState,
- manageApplications, mock(AppFilterItem.class),
+ mFragment, mock(AppFilterItem.class),
mock(Bundle.class));
final ArrayList appList = new ArrayList<>();
- appList.add(mock(ApplicationsState.AppEntry.class));
+ final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class);
+ appEntry.info = mock(ApplicationInfo.class);
+ appList.add(appEntry);
ReflectionHelpers.setField(adapter, "mEntries", appList);
adapter.onBindViewHolder(holder, 0);
@@ -295,19 +301,17 @@ public class ManageApplicationsTest {
@Test
public void applicationsAdapter_onBindViewHolder_updateSwitch_notNotifications() {
- ManageApplications manageApplications = mock(ManageApplications.class);
- manageApplications.mListType = LIST_TYPE_MAIN;
+ mFragment.mListType = LIST_TYPE_MAIN;
ApplicationViewHolder holder = mock(ApplicationViewHolder.class);
ReflectionHelpers.setField(holder, "itemView", mock(View.class));
- UserManager um = mock(UserManager.class);
- when(um.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
- ReflectionHelpers.setField(manageApplications, "mUserManager", um);
- ManageApplications.ApplicationsAdapter adapter =
- new ManageApplications.ApplicationsAdapter(mState,
- manageApplications, mock(AppFilterItem.class),
- mock(Bundle.class));
+ when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
+ ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+ ManageApplications.ApplicationsAdapter adapter = new ManageApplications.ApplicationsAdapter(
+ mState, mFragment, mock(AppFilterItem.class), mock(Bundle.class));
final ArrayList appList = new ArrayList<>();
- appList.add(mock(ApplicationsState.AppEntry.class));
+ final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class);
+ appEntry.info = mock(ApplicationInfo.class);
+ appList.add(appEntry);
ReflectionHelpers.setField(adapter, "mEntries", appList);
adapter.onBindViewHolder(holder, 0);
@@ -316,23 +320,18 @@ public class ManageApplicationsTest {
@Test
public void sortOrderSavedOnRebuild() {
- ManageApplications manageApplications = mock(ManageApplications.class);
- when(manageApplications.getActivity()).thenReturn(mock(FragmentActivity.class));
- UserManager um = mock(UserManager.class);
- when(um.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
- ReflectionHelpers.setField(manageApplications, "mUserManager", um);
- manageApplications.mListType = LIST_TYPE_NOTIFICATION;
- manageApplications.mSortOrder = -1;
- ManageApplications.ApplicationsAdapter adapter =
- new ManageApplications.ApplicationsAdapter(mState,
- manageApplications, mock(AppFilterItem.class),
- mock(Bundle.class));
+ when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
+ ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+ mFragment.mListType = LIST_TYPE_NOTIFICATION;
+ mFragment.mSortOrder = -1;
+ ManageApplications.ApplicationsAdapter adapter = new ManageApplications.ApplicationsAdapter(
+ mState, mFragment, mock(AppFilterItem.class), mock(Bundle.class));
adapter.rebuild(mSortRecent.getItemId());
- assertThat(manageApplications.mSortOrder).isEqualTo(mSortRecent.getItemId());
+ assertThat(mFragment.mSortOrder).isEqualTo(mSortRecent.getItemId());
adapter.rebuild(mSortFrequent.getItemId());
- assertThat(manageApplications.mSortOrder).isEqualTo(mSortFrequent.getItemId());
+ assertThat(mFragment.mSortOrder).isEqualTo(mSortFrequent.getItemId());
}
private void setUpOptionMenus() {
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/DeleteFingerprintDialogTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/DeleteFingerprintDialogTest.java
index cf416d83fea..9479771a48c 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/DeleteFingerprintDialogTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/DeleteFingerprintDialogTest.java
@@ -26,6 +26,7 @@ import android.hardware.fingerprint.Fingerprint;
import com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.DeleteFingerprintDialog;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settingslib.testutils.FragmentTestUtils;
@@ -37,7 +38,7 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = ShadowFragment.class)
+@Config(shadows = {ShadowFragment.class, SettingsShadowResourcesImpl.class})
public class DeleteFingerprintDialogTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java
index 38127ef22e2..797a202995a 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java
@@ -16,11 +16,9 @@
package com.android.settings.biometrics.fingerprint;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.RuntimeEnvironment.application;
-import android.app.AlertDialog;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.widget.Button;
@@ -30,6 +28,8 @@ import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.After;
@@ -39,12 +39,17 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
-import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowAlertDialog;
+
+import androidx.appcompat.app.AlertDialog;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, ShadowUtils.class})
+@Config(shadows = {
+ SettingsShadowResources.SettingsShadowTheme.class,
+ ShadowUtils.class,
+ ShadowAlertDialogCompat.class,
+ SettingsShadowResourcesImpl.class
+})
public class SetupFingerprintEnrollFindSensorTest {
@Mock
@@ -75,11 +80,12 @@ public class SetupFingerprintEnrollFindSensorTest {
final Button skipButton = activity.findViewById(R.id.skip_button);
skipButton.performClick();
- final AlertDialog alertDialog = ShadowAlertDialog.getLatestAlertDialog();
- assertNotNull(alertDialog);
+ final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ assertThat(alertDialog).isNotNull();
- final ShadowAlertDialog shadowAlertDialog = Shadows.shadowOf(alertDialog);
+ final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(
+ alertDialog);
final int titleRes = R.string.setup_fingerprint_enroll_skip_title;
- assertEquals(application.getString(titleRes), shadowAlertDialog.getTitle());
+ assertThat(application.getString(titleRes)).isEqualTo(shadowAlertDialog.getTitle());
}
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
index 1162f8e6ad9..6256a3db1b3 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
@@ -27,11 +27,14 @@ import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.os.UserManager;
+import android.view.ContextThemeWrapper;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -41,9 +44,11 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {SettingsShadowResourcesImpl.class, ShadowAlertDialogCompat.class})
public class BluetoothDevicePreferenceTest {
private static final boolean SHOW_DEVICES_WITHOUT_NAMES = true;
@@ -58,7 +63,8 @@ public class BluetoothDevicePreferenceTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+ Context context = spy(RuntimeEnvironment.application.getApplicationContext());
+ mContext = new ContextThemeWrapper(context, R.style.Theme_Settings);
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
index ede0b044e31..6cd924a4cc5 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.text.SpannableStringBuilder;
@@ -38,6 +37,8 @@ import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.testutils.FragmentTestUtils;
import org.junit.Before;
@@ -46,9 +47,12 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadows.ShadowAlertDialog;
+import org.robolectric.annotation.Config;
+
+import androidx.appcompat.app.AlertDialog;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class, SettingsShadowResourcesImpl.class})
public class BluetoothPairingDialogTest {
private static final String FILLER = "text that goes in a view";
@@ -434,7 +438,7 @@ public class BluetoothPairingDialogTest {
BluetoothPairingDialogFragment fragment = spy(new BluetoothPairingDialogFragment());
when(fragment.getPairingViewText()).thenReturn(existingText);
setupFragment(fragment);
- AlertDialog dialog = ShadowAlertDialog.getLatestAlertDialog();
+ AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(dialog).isNotNull();
boolean expected = !TextUtils.isEmpty(existingText);
assertThat(dialog.getButton(Dialog.BUTTON_POSITIVE).isEnabled()).isEqualTo(expected);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
index 37abdcc8908..8532cc11517 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
@@ -24,10 +24,9 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.AlertDialog;
-
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import org.junit.Before;
@@ -37,11 +36,14 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowDialog;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = SettingsShadowResourcesImpl.class)
public class ForgetDeviceDialogFragmentTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java
index d41475f0305..25333414982 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java
@@ -22,13 +22,14 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.AlertDialog;
import android.content.Context;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.testutils.FragmentTestUtils;
@@ -40,11 +41,15 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadows.ShadowAlertDialog;
+import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
+import androidx.appcompat.app.AlertDialog;
+
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class, SettingsShadowResourcesImpl.class})
public class LocalDeviceNameDialogFragmentTest {
+
@Mock
private LocalBluetoothManager mManager;
@Mock
@@ -75,7 +80,7 @@ public class LocalDeviceNameDialogFragmentTest {
@Test
public void diaglogTriggersShowSoftInput() {
FragmentTestUtils.startFragment(mFragment);
- AlertDialog dialog = ShadowAlertDialog.getLatestAlertDialog();
+ AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(dialog).isNotNull();
View view = dialog.findViewById(R.id.edittext);
verify(mInputMethodManager).showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java
index e257a88645d..0ecd2952ddc 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java
@@ -25,7 +25,6 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.AlertDialog;
import android.content.DialogInterface;
import android.widget.Button;
import android.widget.EditText;
@@ -33,6 +32,7 @@ import android.widget.EditText;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.testutils.FragmentTestUtils;
@@ -42,9 +42,13 @@ import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowDialog;
+import androidx.appcompat.app.AlertDialog;
+
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = SettingsShadowResourcesImpl.class)
public class RemoteDeviceNameDialogFragmentTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
index a4cbc9d86db..3d7eb13bdcd 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
@@ -20,7 +20,9 @@ import static com.android.settings.dashboard.DashboardData.STABLE_ID_CONDITION_C
import static com.android.settings.dashboard.DashboardData.STABLE_ID_CONDITION_FOOTER;
import static com.android.settings.dashboard.DashboardData.STABLE_ID_SUGGESTION_CONDITION_DIVIDER;
import static com.android.settings.dashboard.DashboardData.STABLE_ID_SUGGESTION_CONTAINER;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -29,6 +31,7 @@ import android.service.settings.suggestions.Suggestion;
import com.android.settings.dashboard.conditional.AirplaneModeCondition;
import com.android.settings.dashboard.conditional.Condition;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
@@ -37,7 +40,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import java.util.ArrayList;
import java.util.Collections;
@@ -48,7 +50,7 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class DashboardDataTest {
private static final String TEST_SUGGESTION_TITLE = "Use fingerprint";
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
index e17f6bee9ab..23ca244d6f9 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
@@ -29,14 +29,17 @@ import android.view.View;
import com.android.settings.R;
import com.android.settings.testutils.Robolectric;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
import androidx.fragment.app.FragmentActivity;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = SettingsShadowResourcesImpl.class)
public class HardwareInfoDialogFragmentTest {
private FragmentActivity mActivity;
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeForgetTest.java b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeForgetTest.java
index d1215eca0b0..49025a8e20f 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeForgetTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeForgetTest.java
@@ -18,7 +18,6 @@ package com.android.settings.deviceinfo;
import static com.google.common.truth.Truth.assertThat;
-import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.storage.VolumeRecord;
@@ -28,6 +27,7 @@ import com.android.settings.R;
import com.android.settings.deviceinfo.PrivateVolumeForget.ForgetConfirmFragment;
import com.android.settings.testutils.Robolectric;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settings.testutils.shadow.ShadowStorageManager;
import org.junit.After;
@@ -36,10 +36,11 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = ShadowStorageManager.class)
+@Config(shadows = {ShadowStorageManager.class, SettingsShadowResourcesImpl.class})
public class PrivateVolumeForgetTest {
private PrivateVolumeForget mFragment;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceControllerTest.java
index a6790fd6cd1..406ed772815 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AutoRestrictionPreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import android.content.Context;
@@ -24,17 +25,17 @@ import android.provider.Settings;
import com.android.settings.core.BasePreferenceController;
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.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.SwitchPreference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class AutoRestrictionPreferenceControllerTest {
private static final int ON = 1;
private static final int OFF = 0;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java
index 3dee0a6a695..1a3155d2760 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BackgroundActivityPreferenceControllerTest.java
@@ -35,6 +35,7 @@ import android.os.UserManager;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
@@ -45,13 +46,12 @@ import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import androidx.preference.Preference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, ShadowFragment.class})
public class BackgroundActivityPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
index 1bcacbf282e..c29a012a292 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
@@ -32,18 +32,18 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
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.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.PreferenceGroup;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class BatteryAppListPreferenceControllerTest {
private static final String[] PACKAGE_NAMES = {"com.app1", "com.app2"};
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java
index 30999cbcd00..58bfe0eabfa 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.spy;
import android.content.Context;
@@ -26,19 +27,19 @@ import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
import com.android.settings.testutils.DatabaseTestUtils;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.List;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class BatteryDatabaseManagerTest {
private static String PACKAGE_NAME_NEW = "com.android.app1";
private static int UID_NEW = 345;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
index b89a3f0fd0e..7bb08485b5f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -30,6 +31,7 @@ import android.os.UserManager;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatterySipper.DrainType;
import com.android.settings.R;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Rule;
@@ -38,12 +40,11 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.Locale;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class BatteryEntryTest {
private static final int APP_UID = 123;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
index abf05af668d..d8ee8f61f95 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -29,6 +30,7 @@ import android.content.Intent;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
import org.junit.Before;
@@ -36,13 +38,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class BatteryOptimizationPreferenceControllerTest {
private static final String PKG_IN_WHITELIST = "com.pkg.in.whitelist";
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
index 81cf6526347..267f2635489 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
@@ -18,7 +18,9 @@ package com.android.settings.fuelgauge;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
@@ -33,6 +35,7 @@ import android.os.UserManager;
import com.android.settings.R;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.AppInfo;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -40,7 +43,6 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
@@ -48,7 +50,7 @@ import java.util.List;
import androidx.preference.Preference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class RestrictAppPreferenceControllerTest {
private static final int ALLOWED_UID = 111;
private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package";
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
index 1cc027f445b..b9ed5098116 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
@@ -21,7 +21,6 @@ import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
-import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -38,6 +37,8 @@ import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.testutils.FragmentTestUtils;
import org.junit.Before;
@@ -47,18 +48,18 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
-import org.robolectric.shadows.ShadowAlertDialog;
-import org.robolectric.shadows.ShadowDialog;
+import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
import androidx.preference.CheckBoxPreference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class, SettingsShadowResourcesImpl.class})
public class RestrictedAppDetailsTest {
private static final String PACKAGE_NAME = "com.android.app";
@@ -154,8 +155,8 @@ public class RestrictedAppDetailsTest {
FragmentTestUtils.startFragment(dialogFragment);
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo("Restrict app?");
}
@@ -166,8 +167,8 @@ public class RestrictedAppDetailsTest {
FragmentTestUtils.startFragment(dialogFragment);
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo("Remove restriction?");
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java
index d7db33141aa..971de7a593b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import android.content.ContentResolver;
@@ -25,17 +26,17 @@ import android.provider.Settings;
import com.android.settings.core.BasePreferenceController;
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.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.SwitchPreference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class SmartBatteryPreferenceControllerTest {
private static final int ON = 1;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
index e9c9978bc44..88821016244 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
@@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
-import android.app.AlertDialog;
import android.content.Context;
import android.text.format.DateUtils;
@@ -33,6 +32,8 @@ import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.testutils.FragmentTestUtils;
@@ -42,16 +43,16 @@ import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowAlertDialog;
-import org.robolectric.shadows.ShadowDialog;
import java.util.ArrayList;
import java.util.List;
+import androidx.appcompat.app.AlertDialog;
+
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = ShadowUtils.class)
+@Config(shadows = {ShadowUtils.class, ShadowAlertDialogCompat.class,
+ SettingsShadowResourcesImpl.class})
public class BatteryTipDialogFragmentTest {
private static final String PACKAGE_NAME = "com.android.app";
@@ -108,8 +109,8 @@ public class BatteryTipDialogFragmentTest {
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
mContext.getString(R.string.battery_tip_dialog_message, 1));
@@ -121,8 +122,8 @@ public class BatteryTipDialogFragmentTest {
FragmentTestUtils.startFragment(mDialogFragment);
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo("Restrict app?");
assertThat(shadowDialog.getMessage())
@@ -142,8 +143,8 @@ public class BatteryTipDialogFragmentTest {
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo("Restrict 2 apps?");
assertThat(shadowDialog.getMessage())
@@ -171,8 +172,8 @@ public class BatteryTipDialogFragmentTest {
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo("Restrict 6 apps?");
assertThat(shadowDialog.getMessage())
@@ -189,8 +190,8 @@ public class BatteryTipDialogFragmentTest {
FragmentTestUtils.startFragment(mDialogFragment);
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getTitle()).isEqualTo("Remove restriction?");
assertThat(shadowDialog.getMessage())
@@ -204,8 +205,8 @@ public class BatteryTipDialogFragmentTest {
FragmentTestUtils.startFragment(mDialogFragment);
- final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
- ShadowAlertDialog shadowDialog = Shadows.shadowOf(dialog);
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo(
"Your apps are using a normal amount of battery. If apps use too much battery, "
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java
index b0d6a7dce49..3ada030de41 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java
@@ -28,9 +28,13 @@ import android.os.PowerManager;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.fuelgauge.BatteryInfo;
import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
+import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
+import com.android.settings.testutils.BatteryTestUtils;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -77,6 +81,12 @@ public class BatteryTipLoaderTest {
mBatteryTipLoader.mBatteryUtils = mBatteryUtils;
}
+ @After
+ public void tearDown() {
+ BatteryTestUtils.clearStaticInstance(AppLabelPredicate.class, "sInstance");
+ BatteryTestUtils.clearStaticInstance(AppRestrictionPredicate.class, "sInstance");
+ }
+
@Test
public void testLoadBackground_containsAllTipsWithOrder() {
final List batteryTips = mBatteryTipLoader.loadInBackground();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
index 547e0eb455f..053a7164345 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
@@ -49,7 +49,8 @@ public class BatteryTipPolicyTest {
+ ",test_battery_saver_tip=true"
+ ",test_high_usage_tip=false"
+ ",test_smart_battery_tip=true"
- + ",test_low_battery_tip=true";
+ + ",test_low_battery_tip=true"
+ + ",app_restriction_active_hour=6";
private Context mContext;
@Before
@@ -72,6 +73,7 @@ public class BatteryTipPolicyTest {
assertThat(batteryTipPolicy.highUsagePeriodMs).isEqualTo(2000);
assertThat(batteryTipPolicy.highUsageBatteryDraining).isEqualTo(30);
assertThat(batteryTipPolicy.appRestrictionEnabled).isTrue();
+ assertThat(batteryTipPolicy.appRestrictionActiveHour).isEqualTo(6);
assertThat(batteryTipPolicy.reducedBatteryEnabled).isTrue();
assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(30);
assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse();
@@ -99,6 +101,7 @@ public class BatteryTipPolicyTest {
assertThat(batteryTipPolicy.highUsagePeriodMs).isEqualTo(2 * DateUtils.HOUR_IN_MILLIS);
assertThat(batteryTipPolicy.highUsageBatteryDraining).isEqualTo(25);
assertThat(batteryTipPolicy.appRestrictionEnabled).isTrue();
+ assertThat(batteryTipPolicy.appRestrictionActiveHour).isEqualTo(24);
assertThat(batteryTipPolicy.reducedBatteryEnabled).isFalse();
assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(50);
assertThat(batteryTipPolicy.lowBatteryEnabled).isTrue();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
index 459c4e2a03f..3882e8c0e85 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge.batterytip;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java
index 9b0007b55ca..179f2a1586c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java
@@ -34,8 +34,11 @@ import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
+import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
+import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
+import com.android.settings.testutils.BatteryTestUtils;
import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -86,6 +89,7 @@ public class RestrictAppDetectorTest {
mContext = spy(RuntimeEnvironment.application);
mPolicy = spy(new BatteryTipPolicy(mContext));
+ doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mAppOpsManager).when(mContext).getSystemService(AppOpsManager.class);
doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, RESTRICTED_UID, RESTRICTED_PACKAGE_NAME);
@@ -103,7 +107,12 @@ public class RestrictAppDetectorTest {
mRestrictAppDetector = new RestrictAppDetector(mContext, mPolicy);
mRestrictAppDetector.mBatteryDatabaseManager = mBatteryDatabaseManager;
+ }
+ @After
+ public void tearDown() {
+ BatteryTestUtils.clearStaticInstance(AppLabelPredicate.class, "sInstance");
+ BatteryTestUtils.clearStaticInstance(AppRestrictionPredicate.class, "sInstance");
}
@After
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
index 5c8b7d9acb7..dd3e281d09c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
@@ -34,9 +34,11 @@ import android.util.Pair;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.fuelgauge.batterytip.AppInfo;
+import com.android.settings.testutils.BatteryTestUtils;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -74,6 +76,7 @@ public class RestrictAppTipTest {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
+ doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME,
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
@@ -98,6 +101,12 @@ public class RestrictAppTipTest {
mInvisibleBatteryTip = new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
}
+ @After
+ public void tearDown() {
+ BatteryTestUtils.clearStaticInstance(AppLabelPredicate.class, "sInstance");
+ BatteryTestUtils.clearStaticInstance(AppRestrictionPredicate.class, "sInstance");
+ }
+
@Test
public void parcelable() {
Parcel parcel = Parcel.obtain();
diff --git a/tests/robotests/src/com/android/settings/location/InjectedSettingTest.java b/tests/robotests/src/com/android/settings/location/InjectedSettingTest.java
deleted file mode 100644
index 504583773a2..00000000000
--- a/tests/robotests/src/com/android/settings/location/InjectedSettingTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.location;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-public final class InjectedSettingTest {
-
- private static final String TEST_STRING = "test";
-
- @Test
- public void buildWithoutPackageName_ShouldReturnNull() {
- assertThat(((new InjectedSetting.Builder())
- .setClassName(TEST_STRING)
- .setTitle(TEST_STRING)
- .setSettingsActivity(TEST_STRING).build())).isNull();
- }
-
- private InjectedSetting getTestSetting() {
- return new InjectedSetting.Builder()
- .setPackageName(TEST_STRING)
- .setClassName(TEST_STRING)
- .setTitle(TEST_STRING)
- .setSettingsActivity(TEST_STRING).build();
- }
-
- @Test
- public void testEquals() {
- InjectedSetting setting1 = getTestSetting();
- InjectedSetting setting2 = getTestSetting();
- assertThat(setting1).isEqualTo(setting2);
- }
-
- @Test
- public void testHashCode() {
- InjectedSetting setting = getTestSetting();
- assertThat(setting.hashCode()).isEqualTo(1225314048);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/location/LocationServicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationServicePreferenceControllerTest.java
index ba5decceb70..f0904d03316 100644
--- a/tests/robotests/src/com/android/settings/location/LocationServicePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationServicePreferenceControllerTest.java
@@ -67,7 +67,7 @@ public class LocationServicePreferenceControllerTest {
@Mock
private PreferenceScreen mScreen;
@Mock
- private SettingsInjector mSettingsInjector;
+ private AppSettingsInjector mSettingsInjector;
@Mock
private DevicePolicyManager mDevicePolicyManager;
diff --git a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
index 3d33ec2d544..150a89f5cfe 100644
--- a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
@@ -17,9 +17,12 @@
package com.android.settings.notification;
import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
+
import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF;
import static com.android.settings.notification.BadgingNotificationPreferenceController.ON;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -27,20 +30,21 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.provider.Settings;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.TwoStatePreference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class BadgingNotificationPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/notification/DeletedChannelsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/DeletedChannelsPreferenceControllerTest.java
index 5aecadc4ae0..c1428a4bfc9 100644
--- a/tests/robotests/src/com/android/settings/notification/DeletedChannelsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/DeletedChannelsPreferenceControllerTest.java
@@ -18,6 +18,7 @@ package com.android.settings.notification;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
+
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
@@ -31,18 +32,19 @@ import android.app.NotificationManager;
import android.content.Context;
import android.os.UserManager;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowApplication;
import androidx.preference.Preference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class DeletedChannelsPreferenceControllerTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/notification/PulseNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/PulseNotificationPreferenceControllerTest.java
index 71ca554931e..b4f86a7c3fc 100644
--- a/tests/robotests/src/com/android/settings/notification/PulseNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/PulseNotificationPreferenceControllerTest.java
@@ -17,7 +17,9 @@
package com.android.settings.notification;
import static android.provider.Settings.System.NOTIFICATION_LIGHT_PULSE;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -28,6 +30,7 @@ import android.content.res.Resources;
import android.provider.Settings;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -35,14 +38,13 @@ import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.TwoStatePreference;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class PulseNotificationPreferenceControllerTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
index 636248a07af..1d0b71f834f 100644
--- a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
+++ b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java
@@ -20,9 +20,8 @@ import static com.google.common.truth.Truth.assertThat;
import com.android.settings.password.ConfirmDeviceCredentialBaseFragment.LastTryDialog;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
@@ -32,13 +31,12 @@ import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = SettingsShadowResources.SettingsShadowTheme.class)
+@Config(shadows = SettingsShadowResourcesImpl.class)
public class ConfirmCredentialTest {
@Test
- @Ignore("b/111193572")
public void testLastTryDialogShownExactlyOnce() {
FragmentManager fm = Robolectric.buildActivity(FragmentActivity.class).
- get().getSupportFragmentManager();
+ setup().get().getSupportFragmentManager();
// Launch only one instance at a time.
assertThat(LastTryDialog.show(
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 627a4a0c56b..d2ec78587ba 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -19,7 +19,6 @@ package com.android.settings.password;
import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.RuntimeEnvironment.application;
-import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.os.UserHandle;
@@ -37,28 +36,29 @@ import com.android.settings.testutils.Robolectric;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowAlertDialog;
import org.robolectric.shadows.ShadowPackageManager;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.ReflectionHelpers.ClassParameter;
import java.util.Arrays;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {
- SettingsShadowResourcesImpl.class,
- SettingsShadowResources.SettingsShadowTheme.class,
- ShadowUtils.class
+ SettingsShadowResourcesImpl.class,
+ SettingsShadowResources.SettingsShadowTheme.class,
+ ShadowUtils.class,
+ ShadowAlertDialogCompat.class
})
public class SetupChooseLockPatternTest {
@@ -88,7 +88,7 @@ public class SetupChooseLockPatternTest {
ShadowPackageManager spm = Shadows.shadowOf(application.getPackageManager());
ComponentName cname = new ComponentName(application, SetupRedactionInterstitial.class);
final int componentEnabled = spm.getComponentEnabledSettingFlags(cname)
- & PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ & PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
assertThat(componentEnabled).isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
}
@@ -111,22 +111,20 @@ public class SetupChooseLockPatternTest {
assertThat(button.getVisibility()).isEqualTo(View.VISIBLE);
button.performClick();
- AlertDialog chooserDialog = ShadowAlertDialog.getLatestAlertDialog();
+ AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(chooserDialog).isNotNull();
- int count = Shadows.shadowOf(chooserDialog).getAdapter().getCount();
+ int count = chooserDialog.getListView().getCount();
assertThat(count).named("List items shown").isEqualTo(3);
}
@Config(qualifiers = "sw400dp")
@Test
- @Ignore("b/111194289")
public void sw400dp_shouldShowScreenLockOptions() {
verifyScreenLockOptionsShown();
}
@Config(qualifiers = "sw400dp-land")
@Test
- @Ignore("b/111194289")
public void sw400dpLandscape_shouldShowScreenLockOptions() {
verifyScreenLockOptionsShown();
}
@@ -156,7 +154,7 @@ public class SetupChooseLockPatternTest {
assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
skipButton.performClick();
- AlertDialog chooserDialog = ShadowAlertDialog.getLatestAlertDialog();
+ AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(chooserDialog).isNotNull();
}
diff --git a/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java b/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java
index 57cf7cdd897..aa36b3367ef 100644
--- a/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java
@@ -16,30 +16,30 @@
package com.android.settings.password;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import android.app.AlertDialog;
+import static com.google.common.truth.Truth.assertThat;
import com.android.settings.R;
import com.android.settings.testutils.Robolectric;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowAlertDialog;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {
- SettingsShadowResources.SettingsShadowTheme.class,
- ShadowUtils.class
+ SettingsShadowResources.SettingsShadowTheme.class,
+ ShadowUtils.class,
+ ShadowAlertDialogCompat.class,
+ SettingsShadowResourcesImpl.class
})
public class SetupSkipDialogTest {
@@ -55,12 +55,12 @@ public class SetupSkipDialogTest {
SetupSkipDialog setupSkipDialog = SetupSkipDialog.newInstance(false);
setupSkipDialog.show(mActivity.getSupportFragmentManager());
- AlertDialog alertDialog = ShadowAlertDialog.getLatestAlertDialog();
- assertNotNull(alertDialog);
- ShadowAlertDialog shadowAlertDialog = Shadows.shadowOf(alertDialog);
- assertEquals(mActivity.getString(R.string.lock_screen_intro_skip_title),
+ AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ assertThat(alertDialog).isNotNull();
+ ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
+ assertThat(mActivity.getString(R.string.lock_screen_intro_skip_title)).isEqualTo(
shadowAlertDialog.getTitle());
- assertEquals(mActivity.getString(R.string.lock_screen_intro_skip_dialog_text),
+ assertThat(mActivity.getString(R.string.lock_screen_intro_skip_dialog_text)).isEqualTo(
shadowAlertDialog.getMessage());
}
@@ -69,12 +69,12 @@ public class SetupSkipDialogTest {
SetupSkipDialog setupSkipDialog = SetupSkipDialog.newInstance(true);
setupSkipDialog.show(mActivity.getSupportFragmentManager());
- AlertDialog alertDialog = ShadowAlertDialog.getLatestAlertDialog();
- assertNotNull(alertDialog);
- ShadowAlertDialog shadowAlertDialog = Shadows.shadowOf(alertDialog);
- assertEquals(mActivity.getString(R.string.lock_screen_intro_skip_title),
+ AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ assertThat(alertDialog).isNotNull();
+ ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
+ assertThat(mActivity.getString(R.string.lock_screen_intro_skip_title)).isEqualTo(
shadowAlertDialog.getTitle());
- assertEquals(mActivity.getString(R.string.lock_screen_intro_skip_dialog_text_frp),
+ assertThat(mActivity.getString(R.string.lock_screen_intro_skip_dialog_text_frp)).isEqualTo(
shadowAlertDialog.getMessage());
}
}
diff --git a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java
index 173f56b01d8..7e8c0d52202 100644
--- a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java
@@ -17,17 +17,22 @@
package com.android.settings.security;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import com.android.internal.widget.LockPatternUtils;
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController;
import com.android.settings.display.AmbientDisplayNotificationsPreferenceController;
import com.android.settings.gestures.DoubleTapScreenPreferenceController;
import com.android.settings.gestures.PickupGesturePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.XmlTestUtils;
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
@@ -37,6 +42,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -49,12 +55,18 @@ import java.util.List;
})
public class LockscreenDashboardFragmentTest {
+ @Mock
+ private LockPatternUtils mLockPatternUtils;
+ private FakeFeatureFactory mFeatureFactory;
private TestFragment mTestFragment;
private Context mContext;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(any(Context.class)))
+ .thenReturn(mLockPatternUtils);
mContext = RuntimeEnvironment.application;
mTestFragment = spy(new TestFragment());
}
@@ -112,6 +124,16 @@ public class LockscreenDashboardFragmentTest {
verify(controller).setConfig(any());
}
+ @Test
+ public void isPageSearchable_notLocked_shouldNotBeSearchable() {
+ when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+ when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true);
+
+ assertThat(LockscreenDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext))
+ .contains("security_lockscreen_settings_screen");
+ }
+
public static class TestFragment extends LockscreenDashboardFragment {
@Override
protected T use(Class clazz) {
diff --git a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java
index 2bdab279f6a..eed20099d40 100644
--- a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java
@@ -19,6 +19,8 @@ package com.android.settings.testutils;
import android.content.Intent;
import android.os.BatteryManager;
+import java.lang.reflect.Field;
+
public class BatteryTestUtils {
public static Intent getChargingIntent() {
@@ -47,4 +49,15 @@ public class BatteryTestUtils {
return intent;
}
+ public static void clearStaticInstance(Class clazz, String fieldName) {
+ Field instance;
+ try {
+ instance = clazz.getDeclaredField(fieldName);
+ instance.setAccessible(true);
+ instance.set(null, null);
+ } catch (Exception e) {
+ throw new RuntimeException();
+ }
+ }
+
}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowTypedArray.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowTypedArray.java
new file mode 100644
index 00000000000..fc3ff0c1646
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowTypedArray.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.testutils.shadow;
+
+import static org.robolectric.shadow.api.Shadow.directlyOn;
+
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.StyleableRes;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.RealObject;
+import org.robolectric.shadows.ShadowTypedArray;
+
+@Implements(value = TypedArray.class, inheritImplementationMethods = true)
+public class SettingsShadowTypedArray extends ShadowTypedArray {
+
+ @RealObject
+ TypedArray realTypedArray;
+
+ @Implementation
+ @Nullable
+ public ColorStateList getColorStateList(@StyleableRes int index) {
+ if (index == com.android.internal.R.styleable.TextView_textColorLink) {
+ return ColorStateList.valueOf(Color.WHITE);
+ }
+ return directlyOn(realTypedArray, TypedArray.class).getColorStateList(index);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessPoint.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessPoint.java
new file mode 100644
index 00000000000..2cb6964b779
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessPoint.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.testutils.shadow;
+
+import com.android.settingslib.wifi.AccessPoint;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(AccessPoint.class)
+public class ShadowAccessPoint {
+
+ @Implementation
+ public String getSavedNetworkSummary() {
+ return "saved";
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowWifiManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowWifiManager.java
index e5304daf1bf..65f92a32727 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowWifiManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowWifiManager.java
@@ -20,13 +20,17 @@ import static org.robolectric.RuntimeEnvironment.application;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
+import android.net.wifi.hotspot2.PasspointConfiguration;
import org.robolectric.annotation.HiddenApi;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.shadow.api.Shadow;
-@Implements(WifiManager.class)
+import java.util.Collections;
+import java.util.List;
+
+@Implements(value = WifiManager.class, inheritImplementationMethods = true)
public class ShadowWifiManager extends org.robolectric.shadows.ShadowWifiManager {
public WifiConfiguration savedWifiConfig;
@@ -43,6 +47,11 @@ public class ShadowWifiManager extends org.robolectric.shadows.ShadowWifiManager
savedWifiConfig = config;
}
+ @Implementation
+ public List getPasspointConfigurations() {
+ return Collections.emptyList();
+ }
+
public static ShadowWifiManager get() {
return Shadow.extract(application.getSystemService(WifiManager.class));
}
diff --git a/tests/robotests/src/com/android/settings/widget/BottomLabelLayoutTest.java b/tests/robotests/src/com/android/settings/widget/BottomLabelLayoutTest.java
index ea0d89ad81f..7b7bcfaa401 100644
--- a/tests/robotests/src/com/android/settings/widget/BottomLabelLayoutTest.java
+++ b/tests/robotests/src/com/android/settings/widget/BottomLabelLayoutTest.java
@@ -23,14 +23,14 @@ import android.widget.LinearLayout;
import android.widget.Space;
import com.android.settings.R;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class BottomLabelLayoutTest {
private BottomLabelLayout mBottomLabelLayout;
diff --git a/tests/robotests/src/com/android/settings/widget/UsageGraphTest.java b/tests/robotests/src/com/android/settings/widget/UsageGraphTest.java
index 15658d5aca4..4b23e7f8627 100644
--- a/tests/robotests/src/com/android/settings/widget/UsageGraphTest.java
+++ b/tests/robotests/src/com/android/settings/widget/UsageGraphTest.java
@@ -17,6 +17,7 @@
package com.android.settings.widget;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -25,15 +26,15 @@ import android.content.Context;
import android.content.res.Resources;
import android.util.SparseIntArray;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(SettingsRobolectricTestRunner.class)
public class UsageGraphTest {
private UsageGraph mGraph;
diff --git a/tests/robotests/src/com/android/settings/widget/VideoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/widget/VideoPreferenceControllerTest.java
new file mode 100644
index 00000000000..ad56fe6692b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/VideoPreferenceControllerTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.widget;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import androidx.preference.PreferenceScreen;
+
+@RunWith(RobolectricTestRunner.class)
+public class VideoPreferenceControllerTest {
+
+ @Mock
+ private VideoPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ private VideoPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mController = new VideoPreferenceController(RuntimeEnvironment.application, "test_pref");
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ }
+
+ @Test
+ public void getAvailabilityStatus_isAlwaysAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE);
+ }
+
+ @Test
+ public void onPause_shouldCallOnViewInvisibleOnPrefernece() {
+ mController.displayPreference(mScreen);
+
+ mController.onPause();
+
+ verify(mPreference).onViewInvisible();
+ }
+
+ @Test
+ public void onResume_shouldCallOnViewVisibleOnPrefernece() {
+ mController.displayPreference(mScreen);
+
+ mController.onResume();
+
+ verify(mPreference).onViewVisible(anyBoolean());
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
index 8cdecff0258..e80edba72a1 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
@@ -24,6 +24,9 @@ import android.net.wifi.WifiConfiguration;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
+import com.android.settings.testutils.shadow.SettingsShadowTypedArray;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
import com.android.settings.testutils.shadow.ShadowWifiManager;
@@ -34,16 +37,17 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowAlertDialog;
import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {
- SettingsShadowResources.SettingsShadowTheme.class,
- ShadowConnectivityManager.class,
- ShadowWifiManager.class
-}
-)
+ SettingsShadowResources.SettingsShadowTheme.class,
+ ShadowConnectivityManager.class,
+ SettingsShadowTypedArray.class,
+ ShadowWifiManager.class,
+ ShadowAlertDialogCompat.class,
+ SettingsShadowResourcesImpl.class
+})
public class WifiDialogActivityTest {
private static final String AP1_SSID = "\"ap1\"";
@@ -62,7 +66,7 @@ public class WifiDialogActivityTest {
@Test
public void onSubmit_shouldConnectToNetwork() {
WifiDialogActivity activity = Robolectric.setupActivity(WifiDialogActivity.class);
- WifiDialog dialog = (WifiDialog) ShadowAlertDialog.getLatestAlertDialog();
+ WifiDialog dialog = (WifiDialog) ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(dialog).isNotNull();
ReflectionHelpers.setField(dialog, "mController", mController);
@@ -78,8 +82,9 @@ public class WifiDialogActivityTest {
Robolectric.buildActivity(
WifiDialogActivity.class,
new Intent().putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false))
- .setup().get();
- WifiDialog dialog = (WifiDialog) ShadowAlertDialog.getLatestAlertDialog();
+ .setup().get();
+ WifiDialog dialog = (WifiDialog) ShadowAlertDialogCompat.getLatestAlertDialog();
+
assertThat(dialog).isNotNull();
ReflectionHelpers.setField(dialog, "mController", mController);
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiDialogTest.java b/tests/robotests/src/com/android/settings/wifi/WifiDialogTest.java
index 7025100a99e..7a88131df89 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiDialogTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiDialogTest.java
@@ -25,15 +25,7 @@ public class WifiDialogTest {
private Context mContext = RuntimeEnvironment.application;
- private WifiDialogListener mListener = new WifiDialogListener() {
- @Override
- public void onForget(WifiDialog dialog) {
- }
-
- @Override
- public void onSubmit(WifiDialog dialog) {
- }
- };
+ private WifiDialogListener mListener = new WifiDialogListener() {};
@Before
public void setUp() {
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
index 995ad176d69..d37b66768f8 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
@@ -45,6 +44,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@RunWith(SettingsRobolectricTestRunner.class)
diff --git a/tests/robotests/src/com/android/settings/wifi/WriteWifiConfigToNfcDialogTest.java b/tests/robotests/src/com/android/settings/wifi/WriteWifiConfigToNfcDialogTest.java
index 252e7eddaa4..7e3ce6fac86 100644
--- a/tests/robotests/src/com/android/settings/wifi/WriteWifiConfigToNfcDialogTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WriteWifiConfigToNfcDialogTest.java
@@ -20,11 +20,10 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.app.Activity;
-import android.content.Context;
import android.net.wifi.WifiManager;
-import android.view.inputmethod.InputMethodManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settings.testutils.shadow.ShadowNfcAdapter;
import org.junit.After;
@@ -33,16 +32,14 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Robolectric;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(shadows = ShadowNfcAdapter.class)
+@Config(shadows = {ShadowNfcAdapter.class, SettingsShadowResourcesImpl.class})
public class WriteWifiConfigToNfcDialogTest {
- @Mock
- private Activity mActivity;
@Mock
private WifiManager mWifiManager;
@@ -51,13 +48,10 @@ public class WriteWifiConfigToNfcDialogTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- when(mActivity.getApplicationContext()).thenReturn(mActivity);
- when(mActivity.getSystemService(Context.INPUT_METHOD_SERVICE))
- .thenReturn(ReflectionHelpers.newInstance(InputMethodManager.class));
- mWriteWifiConfigToNfcDialog = new WriteWifiConfigToNfcDialog(RuntimeEnvironment.application,
- 0 /* security */);
+ final Activity activity = Robolectric.setupActivity(Activity.class);
+ mWriteWifiConfigToNfcDialog = new WriteWifiConfigToNfcDialog(activity, 0 /* security */);
ReflectionHelpers.setField(mWriteWifiConfigToNfcDialog, "mWifiManager", mWifiManager);
- mWriteWifiConfigToNfcDialog.setOwnerActivity(mActivity);
+ mWriteWifiConfigToNfcDialog.setOwnerActivity(activity);
mWriteWifiConfigToNfcDialog.onCreate(null /* savedInstanceState */);
}
diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceControllerTest.java
new file mode 100644
index 00000000000..790739aec8b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceControllerTest.java
@@ -0,0 +1,135 @@
+/*
+ * 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.wifi.savedaccesspoints;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowAccessPoint;
+import com.android.settings.testutils.shadow.ShadowThreadUtils;
+import com.android.settings.testutils.shadow.ShadowWifiManager;
+import com.android.settingslib.wifi.AccessPointPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowThreadUtils.class, ShadowWifiManager.class})
+public class SavedAccessPointsPreferenceControllerTest {
+
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+ @Mock
+ private PreferenceCategory mPreferenceCategory;
+
+ private Context mContext;
+ private ShadowWifiManager mWifiManager;
+ private SavedAccessPointsPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mWifiManager = ShadowWifiManager.get();
+ mController = spy(new SavedAccessPointsPreferenceController(mContext, "test_key"));
+
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+ .thenReturn(mPreferenceCategory);
+ when(mPreferenceCategory.getContext()).thenReturn(mContext);
+ }
+
+ @Test
+ public void getAvailability_alwaysAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void onStart_shouldRefreshApList() {
+ doNothing().when(mController).refreshSavedAccessPoints();
+
+ mController.onStart();
+
+ verify(mController).refreshSavedAccessPoints();
+ }
+
+
+ @Test
+ public void postRefresh_shouldRefreshApList() {
+ doNothing().when(mController).refreshSavedAccessPoints();
+
+ mController.postRefreshSavedAccessPoints();
+
+ verify(mController).refreshSavedAccessPoints();
+ }
+
+ @Test
+ public void forget_onSuccess_shouldRefreshApList() {
+ doNothing().when(mController).refreshSavedAccessPoints();
+
+ mController.onSuccess();
+
+ verify(mController).refreshSavedAccessPoints();
+ }
+
+ @Test
+ public void forget_onFailure_shouldRefreshApList() {
+ doNothing().when(mController).refreshSavedAccessPoints();
+
+ mController.onFailure(0 /* reason */);
+
+ verify(mController).refreshSavedAccessPoints();
+ }
+
+ @Test
+ @Config(shadows = ShadowAccessPoint.class)
+ public void refreshSavedAccessPoints_shouldListAllAPs() {
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "SSID";
+ config.BSSID = "BSSID";
+ config.networkId = 2;
+ mWifiManager.addNetwork(config);
+
+ final ArgumentCaptor captor =
+ ArgumentCaptor.forClass(AccessPointPreference.class);
+ mController.displayPreference(mPreferenceScreen);
+ mController.refreshSavedAccessPoints();
+
+ verify(mPreferenceCategory).addPreference(captor.capture());
+
+ final AccessPointPreference pref = captor.getValue();
+ assertThat(pref.getTitle()).isEqualTo(config.SSID);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettingsTest.java
index 8ce2a3332f7..97ad7d9b2f3 100644
--- a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettingsTest.java
@@ -16,20 +16,22 @@
package com.android.settings.wifi.savedaccesspoints;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
-import android.net.wifi.WifiManager.ActionListener;
-import android.os.Handler;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.wifi.WifiConfigController;
import com.android.settings.wifi.WifiDialog;
+import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wifi.AccessPoint;
import org.junit.Before;
@@ -43,68 +45,66 @@ import org.robolectric.util.ReflectionHelpers;
public class SavedAccessPointsWifiSettingsTest {
@Mock
- private WifiManager mockWifiManager;
+ private WifiManager mWifiManager;
@Mock
- private WifiDialog mockWifiDialog;
+ private WifiDialog mWifiDialog;
@Mock
- private WifiConfigController mockConfigController;
+ private WifiConfigController mConfigController;
@Mock
- private WifiConfiguration mockWifiConfiguration;
+ private WifiConfiguration mWifiConfiguration;
@Mock
- private AccessPoint mockAccessPoint;
+ private AccessPoint mAccessPoint;
@Mock
- private Handler mHandler;
+ private SavedAccessPointsPreferenceController mSavedApController;
- private SavedAccessPointsWifiSettings mSettings;
+ private TestFragment mSettings;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mSettings = new SavedAccessPointsWifiSettings();
- ReflectionHelpers.setField(mSettings, "mHandler", mHandler);
- ReflectionHelpers.setField(mSettings, "mWifiManager", mockWifiManager);
+ mSettings = spy(new TestFragment());
- when(mockWifiDialog.getController()).thenReturn(mockConfigController);
- when(mockConfigController.getConfig()).thenReturn(mockWifiConfiguration);
+ doReturn(mSavedApController).when(mSettings)
+ .use(SavedAccessPointsPreferenceController.class);
+
+ ReflectionHelpers.setField(mSettings, "mWifiManager", mWifiManager);
+
+ when(mWifiDialog.getController()).thenReturn(mConfigController);
+ when(mConfigController.getConfig()).thenReturn(mWifiConfiguration);
}
@Test
- public void onForget_isPasspointConfig_shouldSendMessageToHandler() {
- final AccessPoint accessPoint = mock(AccessPoint.class);
- when(accessPoint.isPasspointConfig()).thenReturn(true);
- ReflectionHelpers.setField(mSettings, "mSelectedAccessPoint", accessPoint);
+ public void onForget_isPasspointConfig_shouldRefreshAPList() {
+ when(mAccessPoint.isPasspointConfig()).thenReturn(true);
+ ReflectionHelpers.setField(mSettings, "mSelectedAccessPoint", mAccessPoint);
mSettings.onForget(null);
- verify(mHandler).sendEmptyMessage(SavedAccessPointsWifiSettings.MSG_UPDATE_PREFERENCES);
- }
-
- @Test
- public void onForget_onSuccess_shouldSendMessageToHandler() {
- mSettings.mForgetListener.onSuccess();
-
- verify(mHandler).sendEmptyMessage(SavedAccessPointsWifiSettings.MSG_UPDATE_PREFERENCES);
- }
-
- @Test
- public void onForget_onFailure_shouldSendMessageToHandler() {
- mSettings.mForgetListener.onFailure(0);
-
- verify(mHandler).sendEmptyMessage(SavedAccessPointsWifiSettings.MSG_UPDATE_PREFERENCES);
- }
-
- @Test
- public void onSubmit_shouldInvokeSaveApi() {
- mSettings.onSubmit(mockWifiDialog);
- verify(mockWifiManager).save(eq(mockWifiConfiguration), any(ActionListener.class));
+ verify(mSavedApController).postRefreshSavedAccessPoints();
}
@Test
public void onForget_shouldInvokeForgetApi() {
- ReflectionHelpers.setField(mSettings, "mSelectedAccessPoint", mockAccessPoint);
- when(mockAccessPoint.getConfig()).thenReturn(mockWifiConfiguration);
- mSettings.onForget(mockWifiDialog);
- verify(mockWifiManager)
- .forget(eq(mockWifiConfiguration.networkId), any(ActionListener.class));
+ ReflectionHelpers.setField(mSettings, "mSelectedAccessPoint", mAccessPoint);
+ when(mAccessPoint.getConfig()).thenReturn(mWifiConfiguration);
+
+ mSettings.onForget(mWifiDialog);
+
+ verify(mWifiManager)
+ .forget(mWifiConfiguration.networkId, mSavedApController);
+ }
+
+ @Test
+ public void verifyConstants() {
+ assertThat(mSettings.getMetricsCategory()).isEqualTo(MetricsEvent.WIFI_SAVED_ACCESS_POINTS);
+ assertThat(mSettings.getPreferenceScreenResId())
+ .isEqualTo(R.xml.wifi_display_saved_access_points);
+ }
+
+ public static class TestFragment extends SavedAccessPointsWifiSettings {
+
+ public T use(Class clazz) {
+ return super.use(clazz);
+ }
}
}