diff --git a/res/values/strings.xml b/res/values/strings.xml
index f193a3180f9..a33a6bca061 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6143,7 +6143,7 @@
History details
- Battery Usage
+ Battery usage
View usage for past 24 hours
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 3319e1b1492..be1ea31169f 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -20,6 +20,7 @@ import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
+import android.app.backup.BackupManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -113,7 +114,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@VisibleForTesting
RadioButtonPreference mUnrestrictedPreference;
@VisibleForTesting
- boolean enableTriState = true;
+ boolean mEnableTriState = true;
+ @VisibleForTesting
+ @BatteryOptimizeUtils.OptimizationMode
+ int mOptimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN;
+ @VisibleForTesting
+ BackupManager mBackupManager;
private AppButtonsPreferenceController mAppButtonsPreferenceController;
private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
@@ -245,7 +251,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
super.onCreate(icicle);
final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
- if (enableTriState) {
+ if (mEnableTriState) {
onCreateForTriState(packageName);
} else {
mForegroundPreference = findPreference(KEY_PREF_FOREGROUND);
@@ -263,7 +269,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
super.onResume();
initHeader();
- if (enableTriState) {
+ if (mEnableTriState) {
initPreferenceForTriState(getContext());
final String packageName = mBatteryOptimizeUtils.getPackageName();
FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
@@ -276,6 +282,22 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
}
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ notifyBackupManager();
+ }
+
+ @VisibleForTesting
+ void notifyBackupManager() {
+ if (mEnableTriState
+ && mOptimizationMode != mBatteryOptimizeUtils.getAppOptimizationMode()) {
+ final BackupManager backupManager = mBackupManager != null
+ ? mBackupManager : new BackupManager(getContext());
+ backupManager.dataChanged();
+ }
+ }
+
@VisibleForTesting
void initHeader() {
final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
@@ -303,7 +325,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info));
}
- if (enableTriState) {
+ if (mEnableTriState) {
final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
@@ -374,7 +396,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
@Override
protected int getPreferenceScreenResId() {
- return enableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy;
+ return mEnableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy;
}
@Override
@@ -388,7 +410,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
(SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName,
mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
controllers.add(mAppButtonsPreferenceController);
- if (enableTriState) {
+ if (mEnableTriState) {
controllers.add(new UnrestrictedPreferenceController(context, uid, packageName));
controllers.add(new OptimizedPreferenceController(context, uid, packageName));
controllers.add(new RestrictedPreferenceController(context, uid, packageName));
@@ -467,6 +489,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
mBatteryOptimizeUtils = new BatteryOptimizeUtils(
getContext(), getArguments().getInt(EXTRA_UID), packageName);
+ mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
}
private CharSequence getAppActiveTime(
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index 44990ffa3ef..eebfaf7d360 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -37,8 +37,6 @@ import android.util.Log;
import androidx.annotation.VisibleForTesting;
-import com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -135,13 +133,16 @@ public final class BatteryBackupHelper implements BackupHelper {
for (ApplicationInfo info : applications) {
final int mode = appOps.checkOpNoThrow(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, info.uid, info.packageName);
- final AppUsageState state = BatteryOptimizeUtils.getAppUsageState(
+ @BatteryOptimizeUtils.OptimizationMode
+ final int optimizationMode = BatteryOptimizeUtils.getAppOptimizationMode(
mode, allowlistedApps.contains(info.packageName));
// Ignores default optimized or unknown state.
- if (state == AppUsageState.OPTIMIZED || state == AppUsageState.UNKNOWN) {
+ if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
+ || optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN) {
continue;
}
- final String packageOptimizeMode = info.packageName + DELIMITER_MODE + state;
+ final String packageOptimizeMode =
+ info.packageName + DELIMITER_MODE + optimizationMode;
builder.append(packageOptimizeMode + DELIMITER);
debugLog(packageOptimizeMode);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 0be90600ba7..76c1ca79ac8 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge;
+import android.annotation.IntDef;
import android.app.AppOpsManager;
import android.content.Context;
import android.util.Log;
@@ -24,6 +25,9 @@ import androidx.annotation.VisibleForTesting;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/** A utility class for application usage operation. */
public class BatteryOptimizeUtils {
private static final String TAG = "BatteryOptimizeUtils";
@@ -32,21 +36,27 @@ public class BatteryOptimizeUtils {
@VisibleForTesting AppOpsManager mAppOpsManager;
@VisibleForTesting BatteryUtils mBatteryUtils;
@VisibleForTesting PowerAllowlistBackend mPowerAllowListBackend;
+
private final String mPackageName;
private final int mUid;
private int mMode;
private boolean mAllowListed;
- /**
- * Usage type of application.
- */
- public enum AppUsageState {
- UNKNOWN,
- RESTRICTED,
- UNRESTRICTED,
- OPTIMIZED,
- }
+ // Optimization modes.
+ static final int MODE_UNKNOWN = 0;
+ static final int MODE_RESTRICTED = 1;
+ static final int MODE_UNRESTRICTED = 2;
+ static final int MODE_OPTIMIZED = 3;
+
+ @IntDef(prefix = {"MODE_"}, value = {
+ MODE_UNKNOWN,
+ MODE_RESTRICTED,
+ MODE_UNRESTRICTED,
+ MODE_OPTIMIZED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ static @interface OptimizationMode {}
public BatteryOptimizeUtils(Context context, int uid, String packageName) {
mUid = uid;
@@ -59,41 +69,44 @@ public class BatteryOptimizeUtils {
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);
}
- /** Gets the {@link AppUsageState} based on mode and allowed list. */
- public static AppUsageState getAppUsageState(int mode, boolean isAllowListed) {
+ /** Gets the {@link OptimizationMode} based on mode and allowed list. */
+ @OptimizationMode
+ public static int getAppOptimizationMode(int mode, boolean isAllowListed) {
if (!isAllowListed && mode == AppOpsManager.MODE_IGNORED) {
- return AppUsageState.RESTRICTED;
+ return MODE_RESTRICTED;
} else if (isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
- return AppUsageState.UNRESTRICTED;
+ return MODE_UNRESTRICTED;
} else if (!isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
- return AppUsageState.OPTIMIZED;
+ return MODE_OPTIMIZED;
} else {
- return AppUsageState.UNKNOWN;
+ return MODE_UNKNOWN;
}
}
- /** Gets the current {@link AppUsageState}. */
- public AppUsageState getAppUsageState() {
+ /** Gets the {@link OptimizationMode} for associated app. */
+ @OptimizationMode
+ public int getAppOptimizationMode() {
refreshState();
- return getAppUsageState(mMode, mAllowListed);
+ return getAppOptimizationMode(mMode, mAllowListed);
}
- public void setAppUsageState(AppUsageState state) {
- switch (state) {
- case RESTRICTED:
+ /** Sets the {@link OptimizationMode} for associated app. */
+ public void setAppOptimizationMode(@OptimizationMode int mode) {
+ switch (mode) {
+ case MODE_RESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
mPowerAllowListBackend.removeApp(mPackageName);
break;
- case UNRESTRICTED:
+ case MODE_UNRESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
mPowerAllowListBackend.addApp(mPackageName);
break;
- case OPTIMIZED:
+ case MODE_OPTIMIZED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
mPowerAllowListBackend.removeApp(mPackageName);
break;
default:
- Log.d(TAG, "set unknown app usage state.");
+ Log.d(TAG, "set unknown app optimization mode.");
}
}
diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
index b2da35632ea..ffec50d4f53 100644
--- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
@@ -16,8 +16,6 @@
package com.android.settings.fuelgauge;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED;
-
import android.content.Context;
import android.util.Log;
@@ -59,7 +57,8 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
Log.d(TAG, "is system or default app, disable pref");
((RadioButtonPreference) preference).setChecked(false);
preference.setEnabled(false);
- } else if (mBatteryOptimizeUtils.getAppUsageState() == OPTIMIZED) {
+ } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+ == BatteryOptimizeUtils.MODE_OPTIMIZED) {
Log.d(TAG, "is optimized states");
((RadioButtonPreference) preference).setChecked(true);
} else {
@@ -78,7 +77,7 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
return false;
}
- mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
+ mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_OPTIMIZED);
Log.d(TAG, "Set optimized");
return true;
}
diff --git a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
index b52af578e13..d50926e6177 100644
--- a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
@@ -17,8 +17,6 @@
package com.android.settings.fuelgauge;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED;
-
import android.content.Context;
import android.util.Log;
@@ -57,7 +55,8 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
Log.d(TAG, "is system or default app, disable pref");
((RadioButtonPreference) preference).setChecked(false);
preference.setEnabled(false);
- } else if (mBatteryOptimizeUtils.getAppUsageState() == RESTRICTED) {
+ } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+ == BatteryOptimizeUtils.MODE_RESTRICTED) {
Log.d(TAG, "is restricted states");
((RadioButtonPreference) preference).setChecked(true);
} else {
@@ -81,7 +80,7 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
return false;
}
- mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
+ mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_RESTRICTED);
Log.d(TAG, "Set restricted");
return true;
}
diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
index 36141c52abd..1d66c6c6cdd 100644
--- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
@@ -16,8 +16,6 @@
package com.android.settings.fuelgauge;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED;
-
import android.content.Context;
import android.util.Log;
@@ -55,7 +53,8 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
Log.d(TAG, "is system or default app, unrestricted states only");
((RadioButtonPreference) preference).setChecked(true);
- } else if (mBatteryOptimizeUtils.getAppUsageState() == UNRESTRICTED) {
+ } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+ == BatteryOptimizeUtils.MODE_UNRESTRICTED) {
Log.d(TAG, "is unrestricted states");
((RadioButtonPreference) preference).setChecked(true);
} else {
@@ -79,7 +78,7 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
return false;
}
- mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
+ mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_UNRESTRICTED);
Log.d(TAG, "Set unrestricted");
return true;
}
diff --git a/src/com/android/settings/panel/InternetConnectivityPanel.java b/src/com/android/settings/panel/InternetConnectivityPanel.java
deleted file mode 100644
index ae6f2e0f59e..00000000000
--- a/src/com/android/settings/panel/InternetConnectivityPanel.java
+++ /dev/null
@@ -1,425 +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.panel;
-
-import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
-import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
-
-import android.app.settings.SettingsEnums;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.Uri;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiManager;
-import android.os.Handler;
-import android.os.HandlerExecutor;
-import android.os.Looper;
-import android.provider.Settings;
-import android.telephony.ServiceState;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyCallback;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.OnLifecycleEvent;
-
-import com.android.settings.R;
-import com.android.settings.Utils;
-import com.android.settings.network.AirplaneModePreferenceController;
-import com.android.settings.network.InternetUpdater;
-import com.android.settings.network.ProviderModelSliceHelper;
-import com.android.settings.network.SubscriptionsChangeListener;
-import com.android.settings.network.telephony.DataConnectivityListener;
-import com.android.settings.slices.CustomSliceRegistry;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents the Internet Connectivity Panel.
- */
-public class InternetConnectivityPanel implements PanelContent, LifecycleObserver,
- InternetUpdater.InternetChangeListener, DataConnectivityListener.Client,
- SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
- private static final String TAG = "InternetConnectivityPanel";
- private static final int SUBTITLE_TEXT_NONE = -1;
- private static final int SUBTITLE_TEXT_WIFI_IS_OFF = R.string.wifi_is_off;
- private static final int SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT =
- R.string.tap_a_network_to_connect;
- private static final int SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS =
- R.string.wifi_empty_list_wifi_on;
- private static final int SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE =
- R.string.non_carrier_network_unavailable;
- private static final int SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE =
- R.string.all_network_unavailable;
-
- private final Context mContext;
- private final WifiManager mWifiManager;
- private final IntentFilter mWifiStateFilter;
- private final NetworkProviderTelephonyCallback mTelephonyCallback;
- private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent == null) {
- return;
- }
-
- if (TextUtils.equals(intent.getAction(), WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
- updateProgressBar();
- updatePanelTitle();
- return;
- }
-
- if (TextUtils.equals(intent.getAction(), WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
- updateProgressBar();
- updatePanelTitle();
- }
- }
- };
-
- @VisibleForTesting
- boolean mIsProviderModelEnabled;
- @VisibleForTesting
- InternetUpdater mInternetUpdater;
- @VisibleForTesting
- ProviderModelSliceHelper mProviderModelSliceHelper;
-
- private int mSubtitle = SUBTITLE_TEXT_NONE;
- private PanelContentCallback mCallback;
- private TelephonyManager mTelephonyManager;
- private SubscriptionsChangeListener mSubscriptionsListener;
- private DataConnectivityListener mConnectivityListener;
- private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-
- // Wi-Fi scanning progress bar
- protected HandlerInjector mHandlerInjector;
- protected boolean mIsProgressBarVisible;
- protected boolean mIsScanningSubTitleShownOnce;
- protected Runnable mHideProgressBarRunnable = () -> {
- setProgressBarVisible(false);
- };
- protected Runnable mHideScanningSubTitleRunnable = () -> {
- mIsScanningSubTitleShownOnce = true;
- updatePanelTitle();
- };
-
- /**
- * Wrapper for testing compatibility.
- */
- @VisibleForTesting
- static class HandlerInjector {
- protected final Handler mHandler;
-
- HandlerInjector(Context context) {
- mHandler = context.getMainThreadHandler();
- }
-
- public void postDelay(Runnable runnable) {
- mHandler.postDelayed(runnable, 2000 /* delay millis */);
- }
-
- public void removeCallbacks(Runnable runnable) {
- mHandler.removeCallbacks(runnable);
- }
- }
-
- private InternetConnectivityPanel(Context context) {
- mContext = context.getApplicationContext();
- mHandlerInjector = new HandlerInjector(context);
- mIsProviderModelEnabled = Utils.isProviderModelEnabled(mContext);
- mInternetUpdater = new InternetUpdater(context, null /* Lifecycle */, this);
-
- mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
- mConnectivityListener = new DataConnectivityListener(context, this);
- mTelephonyCallback = new NetworkProviderTelephonyCallback();
- mDefaultDataSubid = getDefaultDataSubscriptionId();
- mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
-
- mWifiManager = mContext.getSystemService(WifiManager.class);
- mWifiStateFilter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
- mWifiStateFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
-
- mProviderModelSliceHelper = new ProviderModelSliceHelper(mContext, null);
- }
-
- /** create the panel */
- public static InternetConnectivityPanel create(Context context) {
- return new InternetConnectivityPanel(context);
- }
-
- /** @OnLifecycleEvent(ON_RESUME) */
- @OnLifecycleEvent(ON_RESUME)
- public void onResume() {
- if (!mIsProviderModelEnabled) {
- return;
- }
- mInternetUpdater.onResume();
- mSubscriptionsListener.start();
- mConnectivityListener.start();
- mTelephonyManager.registerTelephonyCallback(
- new HandlerExecutor(new Handler(Looper.getMainLooper())), mTelephonyCallback);
- mContext.registerReceiver(mWifiStateReceiver, mWifiStateFilter);
- updateProgressBar();
- updatePanelTitle();
- }
-
- /** @OnLifecycleEvent(ON_PAUSE) */
- @OnLifecycleEvent(ON_PAUSE)
- public void onPause() {
- if (!mIsProviderModelEnabled) {
- return;
- }
- mInternetUpdater.onPause();
- mSubscriptionsListener.stop();
- mConnectivityListener.stop();
- mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
- mContext.unregisterReceiver(mWifiStateReceiver);
- mHandlerInjector.removeCallbacks(mHideProgressBarRunnable);
- mHandlerInjector.removeCallbacks(mHideScanningSubTitleRunnable);
- }
-
- /**
- * @return a string for the title of the Panel.
- */
- @Override
- public CharSequence getTitle() {
- if (mIsProviderModelEnabled) {
- return mContext.getText(mInternetUpdater.isAirplaneModeOn()
- ? R.string.airplane_mode : R.string.provider_internet_settings);
- }
- return mContext.getText(R.string.internet_connectivity_panel_title);
- }
-
- /**
- * @return a string for the subtitle of the Panel.
- */
- @Override
- public CharSequence getSubTitle() {
- if (mIsProviderModelEnabled && mSubtitle != SUBTITLE_TEXT_NONE) {
- return mContext.getText(mSubtitle);
- }
- return null;
- }
-
- @Override
- public List getSlices() {
- final List uris = new ArrayList<>();
- if (mIsProviderModelEnabled) {
- uris.add(CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI);
- } else {
- uris.add(CustomSliceRegistry.WIFI_SLICE_URI);
- uris.add(CustomSliceRegistry.MOBILE_DATA_SLICE_URI);
- uris.add(AirplaneModePreferenceController.SLICE_URI);
- }
- return uris;
- }
-
- @Override
- public Intent getSeeMoreIntent() {
- // Disable the see more button for provider model design.
- if (mIsProviderModelEnabled) {
- return null;
- }
-
- // Don't remove the see more intent for non-provider model design. This intent will be
- // used when isCustomizedButtonUsed() returns false.
- return new Intent(Settings.ACTION_WIRELESS_SETTINGS)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- }
-
- @Override
- public boolean isProgressBarVisible() {
- return mIsProgressBarVisible;
- }
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.PANEL_INTERNET_CONNECTIVITY;
- }
-
- @Override
- public void registerCallback(PanelContentCallback callback) {
- mCallback = callback;
- }
-
- /**
- * Called when airplane mode state is changed.
- */
- @Override
- public void onAirplaneModeChanged(boolean isAirplaneModeOn) {
- log("onAirplaneModeChanged: isAirplaneModeOn:" + isAirplaneModeOn);
- updatePanelTitle();
- }
-
- /**
- * Called when Wi-Fi enabled is changed.
- */
- @Override
- public void onWifiEnabledChanged(boolean enabled) {
- log("onWifiEnabledChanged: enabled:" + enabled);
- updatePanelTitle();
- }
-
- @Override
- public void onSubscriptionsChanged() {
- final int defaultDataSubId = getDefaultDataSubscriptionId();
- log("onSubscriptionsChanged: defaultDataSubId:" + defaultDataSubId);
- if (mDefaultDataSubid == defaultDataSubId) {
- return;
- }
- if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
- mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
- mTelephonyManager.registerTelephonyCallback(
- new HandlerExecutor(new Handler(Looper.getMainLooper())), mTelephonyCallback);
- }
- updatePanelTitle();
- }
-
- @Override
- public void onDataConnectivityChange() {
- log("onDataConnectivityChange");
- updatePanelTitle();
- }
-
- @VisibleForTesting
- void updatePanelTitle() {
- if (mCallback == null) {
- return;
- }
- updateSubtitleText();
- mCallback.onHeaderChanged();
- }
-
- @VisibleForTesting
- int getDefaultDataSubscriptionId() {
- return SubscriptionManager.getDefaultDataSubscriptionId();
- }
-
- private void updateSubtitleText() {
- mSubtitle = SUBTITLE_TEXT_NONE;
- if (!mInternetUpdater.isWifiEnabled()) {
- if (!mInternetUpdater.isAirplaneModeOn()) {
- // When the airplane mode is off and Wi-Fi is disabled.
- // Sub-Title: Wi-Fi is off
- log("Airplane mode off + Wi-Fi off.");
- mSubtitle = SUBTITLE_TEXT_WIFI_IS_OFF;
- }
- return;
- }
-
- if (mInternetUpdater.isAirplaneModeOn()) {
- return;
- }
-
- final List wifiList = mWifiManager.getScanResults();
- if (wifiList != null && wifiList.size() != 0) {
- // When the Wi-Fi scan result is not empty
- // Sub-Title: Tap a network to connect
- mSubtitle = SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT;
- return;
- }
-
- if (!mIsScanningSubTitleShownOnce && mIsProgressBarVisible) {
- // When the Wi-Fi scan result callback is received
- // Sub-Title: Searching for networks...
- mSubtitle = SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS;
- return;
- }
-
- // Sub-Title:
- // show non_carrier_network_unavailable
- // - while Wi-Fi on + no Wi-Fi item
- // - while Wi-Fi on + no Wi-Fi item + mobile data off
- // show all_network_unavailable:
- // - while Wi-Fi on + no Wi-Fi item + no carrier item
- // - while Wi-Fi on + no Wi-Fi item + service is out of service
- // - while Wi-Fi on + no Wi-Fi item + mobile data on + no carrier data.
- log("No Wi-Fi item.");
- if (!mProviderModelSliceHelper.hasCarrier()
- || (!mProviderModelSliceHelper.isVoiceStateInService()
- && !mProviderModelSliceHelper.isDataStateInService())) {
- log("no carrier or service is out of service.");
- mSubtitle = SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE;
- return;
- }
- if (!mProviderModelSliceHelper.isMobileDataEnabled()) {
- log("mobile data off");
- mSubtitle = SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE;
- return;
- }
- if (!mProviderModelSliceHelper.isDataSimActive()) {
- log("no carrier data.");
- mSubtitle = SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE;
- return;
- }
- mSubtitle = SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE;
- }
-
- protected void updateProgressBar() {
- if (mWifiManager == null || !mInternetUpdater.isWifiEnabled()) {
- setProgressBarVisible(false);
- return;
- }
-
- setProgressBarVisible(true);
- List wifiScanResults = mWifiManager.getScanResults();
- if (wifiScanResults != null && wifiScanResults.size() > 0) {
- mHandlerInjector.postDelay(mHideProgressBarRunnable);
- } else if (!mIsScanningSubTitleShownOnce) {
- mHandlerInjector.postDelay(mHideScanningSubTitleRunnable);
- }
- }
-
- protected void setProgressBarVisible(boolean visible) {
- if (mIsProgressBarVisible == visible) {
- return;
- }
- mIsProgressBarVisible = visible;
-
- if (mCallback == null) {
- return;
- }
- mCallback.onProgressBarVisibleChanged();
- updatePanelTitle();
- }
-
- private class NetworkProviderTelephonyCallback extends TelephonyCallback implements
- TelephonyCallback.DataConnectionStateListener,
- TelephonyCallback.ServiceStateListener {
- @Override
- public void onServiceStateChanged(ServiceState state) {
- log("onServiceStateChanged voiceState=" + state.getState()
- + " dataState=" + state.getDataRegistrationState());
- updatePanelTitle();
- }
-
- @Override
- public void onDataConnectionStateChanged(int state, int networkType) {
- log("onDataConnectionStateChanged: networkType=" + networkType + " state=" + state);
- updatePanelTitle();
- }
- }
-
- private static void log(String s) {
- Log.d(TAG, s);
- }
-}
diff --git a/src/com/android/settings/panel/PanelFeatureProviderImpl.java b/src/com/android/settings/panel/PanelFeatureProviderImpl.java
index ca30952a72d..a73881b4cc1 100644
--- a/src/com/android/settings/panel/PanelFeatureProviderImpl.java
+++ b/src/com/android/settings/panel/PanelFeatureProviderImpl.java
@@ -17,11 +17,14 @@
package com.android.settings.panel;
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
public class PanelFeatureProviderImpl implements PanelFeatureProvider {
+ private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
+
@Override
public PanelContent getPanel(Context context, Bundle bundle) {
if (context == null) {
@@ -35,7 +38,12 @@ public class PanelFeatureProviderImpl implements PanelFeatureProvider {
switch (panelType) {
case Settings.Panel.ACTION_INTERNET_CONNECTIVITY:
- return InternetConnectivityPanel.create(context);
+ // Redirect to the internet dialog in SystemUI.
+ Intent intent = new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
+ .setPackage(SYSTEMUI_PACKAGE_NAME);
+ context.sendBroadcast(intent);
+ return null;
case Settings.Panel.ACTION_NFC:
return NfcPanel.create(context);
case Settings.Panel.ACTION_WIFI:
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index b50e0832ec0..a2e78c3a2b5 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -30,9 +30,11 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
+import android.app.backup.BackupManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
@@ -123,6 +125,9 @@ public class AdvancedPowerUsageDetailTest {
private BatteryUtils mBatteryUtils;
@Mock
private BatteryOptimizeUtils mBatteryOptimizeUtils;
+ @Mock
+ private BackupManager mBackupManager;
+
private Context mContext;
private Preference mForegroundPreference;
private Preference mBackgroundPreference;
@@ -180,9 +185,10 @@ public class AdvancedPowerUsageDetailTest {
mFragment.mHeaderPreference = mHeaderPreference;
mFragment.mState = mState;
- mFragment.enableTriState = true;
+ mFragment.mEnableTriState = true;
mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
+ mFragment.mBackupManager = mBackupManager;
mAppEntry.info = mock(ApplicationInfo.class);
mTestActivity = spy(new SettingsActivity());
@@ -231,7 +237,7 @@ public class AdvancedPowerUsageDetailTest {
@Test
public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() {
- mFragment.enableTriState = false;
+ mFragment.mEnableTriState = false;
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail_legacy);
}
@@ -780,4 +786,38 @@ public class AdvancedPowerUsageDetailTest {
new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label")
});
}
+
+ @Test
+ public void notifyBackupManager_optimizationModeIsNotChanged_notInvokeDataChanged() {
+ final int mode = BatteryOptimizeUtils.MODE_RESTRICTED;
+ mFragment.mOptimizationMode = mode;
+ when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
+
+ mFragment.notifyBackupManager();
+
+ verifyZeroInteractions(mBackupManager);
+ }
+
+ @Test
+ public void notifyBackupManager_optimizationModeIsChanged_invokeDataChanged() {
+ mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+ when(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
+
+ mFragment.notifyBackupManager();
+
+ verify(mBackupManager).dataChanged();
+ }
+
+ @Test
+ public void notifyBackupManager_triStateIsNotEnabled_notInvokeDataChanged() {
+ mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+ when(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
+ mFragment.mEnableTriState = false;
+
+ mFragment.notifyBackupManager();
+
+ verifyZeroInteractions(mBackupManager);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
index 47fa59e6271..90e9405ba03 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
@@ -180,8 +180,8 @@ public final class BatteryBackupHelperTest {
mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
- final String expectedResult =
- packageName1 + "|UNRESTRICTED," + packageName2 + "|RESTRICTED,";
+ // 2 for UNRESTRICTED mode and 1 for RESTRICTED mode.
+ final String expectedResult = packageName1 + "|2," + packageName2 + "|1,";
final byte[] expectedBytes = expectedResult.getBytes();
verify(mBackupDataOutput).writeEntityHeader(
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
index 89d66be187b..c1603b803fd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
@@ -16,9 +16,9 @@
package com.android.settings.fuelgauge;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_OPTIMIZED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_RESTRICTED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED;
import static com.google.common.truth.Truth.assertThat;
@@ -65,30 +65,33 @@ public class BatteryOptimizeUtilsTest {
}
@Test
- public void testGetAppUsageState_returnRestricted() {
+ public void testGetAppOptimizationMode_returnRestricted() {
when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_IGNORED);
- assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(RESTRICTED);
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .isEqualTo(MODE_RESTRICTED);
}
@Test
- public void testGetAppUsageState_returnUnrestricted() {
+ public void testGetAppOptimizationMode_returnUnrestricted() {
when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_ALLOWED);
- assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(UNRESTRICTED);
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .isEqualTo(MODE_UNRESTRICTED);
}
@Test
- public void testGetAppUsageState_returnOptimized() {
+ public void testGetAppOptimizationMode_returnOptimized() {
when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_ALLOWED);
- assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(OPTIMIZED);
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .isEqualTo(MODE_OPTIMIZED);
}
@Test
@@ -118,8 +121,8 @@ public class BatteryOptimizeUtilsTest {
}
@Test
- public void testSetAppUsageState_Restricted_verifyAction() {
- mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
+ public void testSetAppOptimizationMode_Restricted_verifyAction() {
+ mBatteryOptimizeUtils.setAppOptimizationMode(MODE_RESTRICTED);
verify(mockBatteryUtils).setForceAppStandby(UID,
PACKAGE_NAME, AppOpsManager.MODE_IGNORED);
@@ -127,8 +130,8 @@ public class BatteryOptimizeUtilsTest {
}
@Test
- public void testSetAppUsageState_Unrestricted_verifyAction() {
- mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
+ public void testSetAppOptimizationMode_Unrestricted_verifyAction() {
+ mBatteryOptimizeUtils.setAppOptimizationMode(MODE_UNRESTRICTED);
verify(mockBatteryUtils).setForceAppStandby(UID,
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
@@ -136,8 +139,8 @@ public class BatteryOptimizeUtilsTest {
}
@Test
- public void testSetAppUsageState_Optimized_verifyAction() {
- mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
+ public void testSetAppOptimizationMode_Optimized_verifyAction() {
+ mBatteryOptimizeUtils.setAppOptimizationMode(MODE_OPTIMIZED);
verify(mockBatteryUtils).setForceAppStandby(UID,
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
index 874618db00b..9df3ac90cb4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
@@ -76,8 +76,8 @@ public class OptimizedPreferenceControllerTest {
@Test
public void testUpdateState_isOptimizedStates_prefChecked() {
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
- when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
- BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
+ when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+ BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mPreference);
@@ -98,8 +98,8 @@ public class OptimizedPreferenceControllerTest {
mPreference.setKey(mController.KEY_OPTIMIZED_PREF);
mController.handlePreferenceTreeClick(mPreference);
- verify(mockBatteryOptimizeUtils).setAppUsageState(
- BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
+ verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+ BatteryOptimizeUtils.MODE_OPTIMIZED);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
index 2e17404f675..09861536edd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
@@ -84,8 +84,8 @@ public class RestrictedPreferenceControllerTest {
@Test
public void testUpdateState_isRestrictedStates_prefChecked() {
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
- when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
- BatteryOptimizeUtils.AppUsageState.RESTRICTED);
+ when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+ BatteryOptimizeUtils.MODE_RESTRICTED);
mController.updateState(mPreference);
@@ -106,8 +106,8 @@ public class RestrictedPreferenceControllerTest {
mPreference.setKey(mController.KEY_RESTRICTED_PREF);
mController.handlePreferenceTreeClick(mPreference);
- verify(mockBatteryOptimizeUtils).setAppUsageState(
- BatteryOptimizeUtils.AppUsageState.RESTRICTED);
+ verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+ BatteryOptimizeUtils.MODE_RESTRICTED);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
index 63cf760a2f6..004e97ce6fe 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
@@ -84,8 +84,8 @@ public class UnrestrictedPreferenceControllerTest {
@Test
public void testUpdateState_isUnrestrictedStates_prefChecked() {
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
- when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
- BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
+ when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+ BatteryOptimizeUtils.MODE_UNRESTRICTED);
mController.updateState(mPreference);
@@ -106,8 +106,8 @@ public class UnrestrictedPreferenceControllerTest {
mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
mController.handlePreferenceTreeClick(mPreference);
- verify(mockBatteryOptimizeUtils).setAppUsageState(
- BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
+ verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+ BatteryOptimizeUtils.MODE_UNRESTRICTED);
}
@Test
diff --git a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
deleted file mode 100644
index 30a272950f5..00000000000
--- a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (C) 2021 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.panel;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-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.Uri;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiManager;
-import android.os.Handler;
-
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settings.network.AirplaneModePreferenceController;
-import com.android.settings.network.InternetUpdater;
-import com.android.settings.network.ProviderModelSliceHelper;
-import com.android.settings.slices.CustomSliceRegistry;
-import com.android.settings.testutils.ResourcesUtils;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-public class InternetConnectivityPanelTest {
-
- public static final String TITLE_INTERNET = ResourcesUtils.getResourcesString(
- ApplicationProvider.getApplicationContext(), "provider_internet_settings");
- public static final String TITLE_APM = ResourcesUtils.getResourcesString(
- ApplicationProvider.getApplicationContext(), "airplane_mode");
- public static final String SUBTITLE_TEXT_WIFI_IS_OFF =
- ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
- "wifi_is_off");
- public static final String SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT =
- ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
- "tap_a_network_to_connect");
- public static final String SUBTITLE_NON_CARRIER_NETWORK_UNAVAILABLE =
- ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
- "non_carrier_network_unavailable");
- public static final String SUBTITLE_ALL_NETWORK_UNAVAILABLE =
- ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
- "all_network_unavailable");
- public static final String BUTTON_TURN_ON_WIFI = ResourcesUtils.getResourcesString(
- ApplicationProvider.getApplicationContext(), "turn_on_wifi");
- public static final String BUTTON_TURN_OFF_WIFI = ResourcesUtils.getResourcesString(
- ApplicationProvider.getApplicationContext(), "turn_off_wifi");
-
- @Rule
- public final MockitoRule mMocks = MockitoJUnit.rule();
- @Mock
- Handler mMainThreadHandler;
- @Mock
- PanelContentCallback mPanelContentCallback;
- @Mock
- InternetUpdater mInternetUpdater;
- @Mock
- private WifiManager mWifiManager;
- @Mock
- private ProviderModelSliceHelper mProviderModelSliceHelper;
-
- private Context mContext;
- private FakeHandlerInjector mFakeHandlerInjector;
- private InternetConnectivityPanel mPanel;
-
- private class FakeHandlerInjector extends InternetConnectivityPanel.HandlerInjector {
-
- private Runnable mRunnable;
-
- FakeHandlerInjector(Context context) {
- super(context);
- }
-
- @Override
- public void postDelay(Runnable runnable) {
- mRunnable = runnable;
- }
-
- public Runnable getRunnable() {
- return mRunnable;
- }
- }
-
- @Before
- public void setUp() {
- mContext = spy(ApplicationProvider.getApplicationContext());
- mFakeHandlerInjector = new FakeHandlerInjector(mContext);
- when(mContext.getApplicationContext()).thenReturn(mContext);
- when(mContext.getMainThreadHandler()).thenReturn(mMainThreadHandler);
- when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
-
- mPanel = InternetConnectivityPanel.create(mContext);
- mPanel.registerCallback(mPanelContentCallback);
- mPanel.mIsProviderModelEnabled = true;
- mPanel.mInternetUpdater = mInternetUpdater;
- mPanel.mProviderModelSliceHelper = mProviderModelSliceHelper;
- mPanel.mHandlerInjector = mFakeHandlerInjector;
- }
-
- @Test
- public void getTitle_apmOff_shouldBeInternet() {
- doReturn(false).when(mInternetUpdater).isAirplaneModeOn();
-
- assertThat(mPanel.getTitle()).isEqualTo(TITLE_INTERNET);
- }
-
- @Test
- public void getTitle_apmOn_shouldBeApm() {
- doReturn(true).when(mInternetUpdater).isAirplaneModeOn();
-
- assertThat(mPanel.getTitle()).isEqualTo(TITLE_APM);
- }
-
- @Test
- public void getSubTitle_apmOnWifiOff_shouldBeNull() {
- doReturn(true).when(mInternetUpdater).isAirplaneModeOn();
- doReturn(false).when(mInternetUpdater).isWifiEnabled();
-
- assertThat(mPanel.getSubTitle()).isNull();
- }
-
- @Test
- public void getSubTitle_apmOnWifiOn_shouldBeNull() {
- doReturn(true).when(mInternetUpdater).isAirplaneModeOn();
- doReturn(true).when(mInternetUpdater).isWifiEnabled();
-
- assertThat(mPanel.getSubTitle()).isNull();
- }
-
- @Test
- public void getSubTitle_apmOffWifiOff_wifiIsOn() {
- doReturn(false).when(mInternetUpdater).isAirplaneModeOn();
- doReturn(false).when(mInternetUpdater).isWifiEnabled();
-
- mPanel.updatePanelTitle();
-
- assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_TEXT_WIFI_IS_OFF);
- }
-
- @Test
- public void getSubTitle_apmOffWifiOnNoWifiListHasCarrierData_NonCarrierNetworkUnavailable() {
- List wifiList = new ArrayList();
- mockCondition(false, true, true, true, true, true, wifiList);
-
- mPanel.updatePanelTitle();
-
- assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_NON_CARRIER_NETWORK_UNAVAILABLE);
- }
-
- @Test
- public void getSubTitle_apmOffWifiOnNoWifiListNoCarrierItem_AllNetworkUnavailable() {
- List wifiList = new ArrayList();
- mockCondition(false, false, false, false, false, true, wifiList);
-
- mPanel.updatePanelTitle();
-
- assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_ALL_NETWORK_UNAVAILABLE);
- }
-
- @Test
- public void getSubTitle_apmOffWifiOnNoWifiListNoDataSimActive_AllNetworkUnavailable() {
- List wifiList = new ArrayList();
- mockCondition(false, true, false, true, true, true, wifiList);
-
- mPanel.updatePanelTitle();
-
- assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_ALL_NETWORK_UNAVAILABLE);
- }
-
- @Test
- public void getSubTitle_apmOffWifiOnNoWifiListNoService_AllNetworkUnavailable() {
- List wifiList = new ArrayList();
- mockCondition(false, true, false, true, false, true, wifiList);
-
- mPanel.updatePanelTitle();
-
- assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_ALL_NETWORK_UNAVAILABLE);
- }
-
- @Test
- public void getSubTitle_apmOffWifiOnTwoWifiItemsNoCarrierData_tapANetworkToConnect() {
- List wifiList = new ArrayList();
- wifiList.add(new ScanResult());
- wifiList.add(new ScanResult());
- mockCondition(false, true, false, true, true, true, wifiList);
-
- mPanel.updatePanelTitle();
-
- assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT);
- }
-
- @Test
- public void getSlices_providerModelDisabled_containsNecessarySlices() {
- mPanel.mIsProviderModelEnabled = false;
- List uris = mPanel.getSlices();
-
- assertThat(uris).containsExactly(
- AirplaneModePreferenceController.SLICE_URI,
- CustomSliceRegistry.MOBILE_DATA_SLICE_URI,
- CustomSliceRegistry.WIFI_SLICE_URI);
- }
-
- @Test
- public void getSlices_providerModelEnabled_containsNecessarySlices() {
- List uris = mPanel.getSlices();
-
- assertThat(uris).containsExactly(CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI);
- }
-
- @Test
- public void getSeeMoreIntent_providerModelDisabled_shouldNotNull() {
- mPanel.mIsProviderModelEnabled = false;
-
- assertThat(mPanel.getSeeMoreIntent()).isNotNull();
- }
-
- @Test
- public void getSeeMoreIntent_providerModelEnabled_shouldBeNull() {
- mPanel.mIsProviderModelEnabled = true;
-
- assertThat(mPanel.getSeeMoreIntent()).isNull();
- }
-
- @Test
- public void updatePanelTitle_onHeaderChanged() {
- clearInvocations(mPanelContentCallback);
-
- mPanel.updatePanelTitle();
-
- verify(mPanelContentCallback).onHeaderChanged();
- }
-
- @Test
- public void updateProgressBar_wifiDisabled_hideProgress() {
- mPanel.mIsProgressBarVisible = true;
- doReturn(false).when(mInternetUpdater).isWifiEnabled();
- clearInvocations(mPanelContentCallback);
-
- mPanel.updateProgressBar();
-
- assertThat(mPanel.isProgressBarVisible()).isFalse();
- verify(mPanelContentCallback).onProgressBarVisibleChanged();
- }
-
- @Test
- public void updateProgressBar_noWifiScanResults_showProgressForever() {
- mPanel.mIsScanningSubTitleShownOnce = false;
- mPanel.mIsProgressBarVisible = false;
- doReturn(true).when(mInternetUpdater).isWifiEnabled();
- List noWifiScanResults = new ArrayList<>();
- doReturn(noWifiScanResults).when(mWifiManager).getScanResults();
- clearInvocations(mPanelContentCallback);
-
- mPanel.updateProgressBar();
-
- assertThat(mPanel.mIsProgressBarVisible).isTrue();
- verify(mPanelContentCallback).onProgressBarVisibleChanged();
- verify(mPanelContentCallback).onHeaderChanged();
-
- assertThat(mFakeHandlerInjector.getRunnable())
- .isEqualTo(mPanel.mHideScanningSubTitleRunnable);
- mFakeHandlerInjector.getRunnable().run();
- assertThat(mPanel.mIsScanningSubTitleShownOnce).isTrue();
- assertThat(mPanel.mIsProgressBarVisible).isTrue();
- }
-
- @Test
- public void updateProgressBar_hasWifiScanResults_showProgressDelayedHide() {
- mPanel.mIsProgressBarVisible = false;
- doReturn(true).when(mInternetUpdater).isWifiEnabled();
- List hasWifiScanResults = mock(ArrayList.class);
- doReturn(1).when(hasWifiScanResults).size();
- doReturn(hasWifiScanResults).when(mWifiManager).getScanResults();
- clearInvocations(mPanelContentCallback);
-
- mPanel.updateProgressBar();
-
- assertThat(mPanel.isProgressBarVisible()).isTrue();
- verify(mPanelContentCallback).onProgressBarVisibleChanged();
-
- assertThat(mFakeHandlerInjector.getRunnable())
- .isEqualTo(mPanel.mHideProgressBarRunnable);
- mFakeHandlerInjector.getRunnable().run();
- assertThat(mPanel.mIsProgressBarVisible).isFalse();
- }
-
- @Test
- public void setProgressBarVisible_onProgressBarVisibleChanged() {
- mPanel.mIsProgressBarVisible = false;
- doReturn(true).when(mInternetUpdater).isWifiEnabled();
- clearInvocations(mPanelContentCallback);
-
- mPanel.setProgressBarVisible(true);
-
- assertThat(mPanel.mIsProgressBarVisible).isTrue();
- verify(mPanelContentCallback).onProgressBarVisibleChanged();
- verify(mPanelContentCallback).onHeaderChanged();
- }
-
- private void mockCondition(boolean airplaneMode, boolean hasCarrier,
- boolean isDataSimActive, boolean isMobileDataEnabled, boolean isServiceInService,
- boolean isWifiEnabled, List wifiItems) {
- doReturn(airplaneMode).when(mInternetUpdater).isAirplaneModeOn();
- when(mProviderModelSliceHelper.hasCarrier()).thenReturn(hasCarrier);
- when(mProviderModelSliceHelper.isDataSimActive()).thenReturn(isDataSimActive);
- when(mProviderModelSliceHelper.isMobileDataEnabled()).thenReturn(isMobileDataEnabled);
- when(mProviderModelSliceHelper.isDataStateInService()).thenReturn(isServiceInService);
- when(mProviderModelSliceHelper.isVoiceStateInService()).thenReturn(isServiceInService);
- doReturn(isWifiEnabled).when(mInternetUpdater).isWifiEnabled();
- doReturn(wifiItems).when(mWifiManager).getScanResults();
- }
-}
diff --git a/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java b/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java
index 3b61a734af1..a02c054237f 100644
--- a/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java
+++ b/tests/unit/src/com/android/settings/panel/PanelFeatureProviderImplTest.java
@@ -20,7 +20,12 @@ import static com.android.settings.panel.SettingsPanelActivity.KEY_PANEL_TYPE_AR
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
@@ -36,25 +41,28 @@ public class PanelFeatureProviderImplTest {
private static final String TEST_PACKAGENAME = "com.test.packagename";
+ private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
private Context mContext;
private PanelFeatureProviderImpl mProvider;
private Bundle mBundle;
@Before
public void setUp() {
- mContext = ApplicationProvider.getApplicationContext();
+ mContext = spy(ApplicationProvider.getApplicationContext());
mProvider = new PanelFeatureProviderImpl();
mBundle = new Bundle();
mBundle.putString(KEY_MEDIA_PACKAGE_NAME, TEST_PACKAGENAME);
}
@Test
- public void getPanel_internetConnectivityKey_returnsCorrectPanel() {
+ public void getPanel_internetConnectivityKey_sendsCorrectBroadcast() {
mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
+ mProvider.getPanel(mContext, mBundle);
+ Intent intent = new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
+ .setPackage(SYSTEMUI_PACKAGE_NAME);
- final PanelContent panel = mProvider.getPanel(mContext, mBundle);
-
- assertThat(panel).isInstanceOf(InternetConnectivityPanel.class);
+ verify(mContext, never()).sendBroadcast(intent);
}
@Test