Merge "Import translations. DO NOT MERGE" into oc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8535b2f..2d8e06a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3077,6 +3077,16 @@
android:permission="android.permission.DUMP"
android:enabled="@bool/config_has_help" />
+ <activity android:name=".applications.defaultapps.AutofillPickerActivity"
+ android:taskAffinity=""
+ android:noHistory="true">
+ <intent-filter android:priority="1">
+ <action android:name="android.settings.REQUEST_SET_AUTOFILL_SERVICE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:scheme="package" />
+ </intent-filter>
+ </activity>
+
<!-- This is the longest AndroidManifest.xml ever. -->
</application>
</manifest>
diff --git a/res/layout/battery_header.xml b/res/layout/battery_header.xml
index 04ef74d..97cc016 100644
--- a/res/layout/battery_header.xml
+++ b/res/layout/battery_header.xml
@@ -46,8 +46,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
- android:textAppearance="@android:style/TextAppearance.Material.Small"
- android:text="@string/estimated_time_left"/>
+ android:textAppearance="@android:style/TextAppearance.Material.Small"/>
</LinearLayout>
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index bdf9644..9a149c3 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -16,6 +16,9 @@
package com.android.settings;
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -33,6 +36,7 @@
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.storage.StorageManager;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.service.trust.TrustAgentService;
@@ -47,7 +51,6 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
-import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -72,17 +75,10 @@
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.drawer.CategoryKey;
-import com.android.settingslib.drawer.DashboardCategory;
-import com.android.settingslib.drawer.Tile;
-import com.android.settingslib.drawer.TileUtils;
import java.util.ArrayList;
-import java.util.concurrent.Executors;
import java.util.List;
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
/**
* Gesture lock pattern settings.
*/
@@ -622,6 +618,18 @@
public boolean onPreferenceTreeClick(Preference preference) {
final String key = preference.getKey();
if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) {
+ // TODO(b/35930129): Remove once existing password can be passed into vold directly.
+ // Currently we need this logic to ensure that the QUIET_MODE is off for any work
+ // profile with unified challenge on FBE-enabled devices. Otherwise, vold would not be
+ // able to complete the operation due to the lack of (old) encryption key.
+ if (mProfileChallengeUserId != UserHandle.USER_NULL
+ && !mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileChallengeUserId)
+ && StorageManager.isFileEncryptedNativeOnly()) {
+ if (Utils.startQuietModeDialogIfNecessary(this.getActivity(), mUm,
+ mProfileChallengeUserId)) {
+ return false;
+ }
+ }
startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment",
R.string.lock_settings_picker_title, SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
} else if (KEY_UNLOCK_SET_OR_CHANGE_PROFILE.equals(key)) {
diff --git a/src/com/android/settings/applications/defaultapps/AutofillPickerActivity.java b/src/com/android/settings/applications/defaultapps/AutofillPickerActivity.java
new file mode 100644
index 0000000..a173909
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/AutofillPickerActivity.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.settings.applications.defaultapps;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+
+/**
+ * Standalone activity used to launch {@link DefaultAppPickerFragment} from a
+ * {@link android.provider.Settings#ACTION_REQUEST_SET_AUTOFILL_SERVICE} intent.
+ */
+public class AutofillPickerActivity extends SettingsActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ final Intent intent = getIntent();
+ final String packageName = intent.getData().getSchemeSpecificPart();
+ intent.putExtra(EXTRA_SHOW_FRAGMENT, DefaultAutofillPicker.class.getName());
+ intent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.autofill_app);
+ intent.putExtra(DefaultAutofillPicker.EXTRA_PACKAGE_NAME, packageName);
+
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ protected boolean isValidFragment(String fragmentName) {
+ return super.isValidFragment(fragmentName)
+ || DefaultAutofillPicker.class.getName().equals(fragmentName);
+ }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
index 8eb1fc6..037cddf 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
@@ -16,6 +16,7 @@
package com.android.settings.applications.defaultapps;
+import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -38,6 +39,8 @@
static final String SETTING = Settings.Secure.AUTOFILL_SERVICE;
static final Intent AUTOFILL_PROBE = new Intent(AutofillService.SERVICE_INTERFACE);
+ static final String EXTRA_PACKAGE_NAME = "package_name";
+
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.DEFAULT_AUTOFILL_PICKER;
@@ -79,11 +82,24 @@
@Override
protected boolean setDefaultKey(String key) {
Settings.Secure.putString(getContext().getContentResolver(), SETTING, key);
+
+ // Check if activity was launched from Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE
+ // intent, and set proper result if so...
+ final Activity activity = getActivity();
+ if (activity != null) {
+ final String packageName = activity.getIntent().getStringExtra(EXTRA_PACKAGE_NAME);
+ if (packageName != null) {
+ final int result = key != null && key.startsWith(packageName) ? Activity.RESULT_OK
+ : Activity.RESULT_CANCELED;
+ activity.setResult(result);
+ activity.finish();
+ }
+ }
return true;
}
/**
- * Provides Intent to setting activity for the specified auto-fill service.
+ * Provides Intent to setting activity for the specified autofill service.
*/
static final class AutofillSettingIntentProvider implements SettingIntentProvider {
diff --git a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
index ca0348c..c6337ce 100644
--- a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
@@ -98,7 +98,9 @@
mVolume = mStorageManager.findVolumeByUuid(fsUuid);
} else {
final String volId = getArguments().getString(VolumeInfo.EXTRA_VOLUME_ID);
- mVolume = mStorageManager.findVolumeById(volId);
+ if (volId != null) {
+ mVolume = mStorageManager.findVolumeById(volId);
+ }
}
if (!isVolumeValid()) {
@@ -129,6 +131,12 @@
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
+
+ // If the volume isn't valid, we are not scaffolded to set up a view.
+ if (!isVolumeValid()) {
+ return;
+ }
+
final Resources resources = getResources();
final int padding = resources.getDimensionPixelSize(
R.dimen.unmount_button_padding);
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 31ca148..377ec1e 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -214,6 +214,15 @@
mAppPreference = (StorageItemPreference) screen.findPreference(OTHER_APPS_KEY);
mSystemPreference = (StorageItemPreference) screen.findPreference(SYSTEM_KEY);
mFilePreference = (StorageItemPreference) screen.findPreference(FILES_KEY);
+
+ final VolumeInfo sharedVolume = mSvp.findEmulatedForPrivate(mVolume);
+ // If we don't have a shared volume for our internal storage (or the shared volume isn't
+ // mounted as readable for whatever reason), we should hide the File preference.
+ final boolean hideFilePreference =
+ (sharedVolume == null) || !sharedVolume.isMountedReadable();
+ if (hideFilePreference) {
+ screen.removePreference(mFilePreference);
+ }
}
public void onLoadFinished(StorageAsyncLoader.AppsStorageResult data) {
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index eede37a..0cbfd54 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -41,6 +41,7 @@
import com.android.settings.applications.AppHeaderController;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.PreferenceController;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settings.overlay.FeatureFactory;
@@ -56,7 +57,7 @@
* 2. Battery related controls for app(i.e uninstall, force stop)
*
*/
-public class AdvancedPowerUsageDetail extends PowerUsageBase implements
+public class AdvancedPowerUsageDetail extends DashboardFragment implements
ButtonActionDialogFragment.AppButtonsDialogListener {
public static final String TAG = "AdvancedPowerUsageDetail";
diff --git a/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java b/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java
new file mode 100644
index 0000000..b99519b
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+import android.content.Context;
+import android.os.BatteryStats;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.internal.os.BatteryStatsHelper;
+import com.android.settings.utils.AsyncLoader;
+
+/**
+ * Loader to get new {@link BatteryStatsHelper} in the background
+ */
+public class BatteryStatsHelperLoader extends AsyncLoader<BatteryStatsHelper> {
+ @VisibleForTesting
+ UserManager mUserManager;
+ private Bundle mBundle;
+
+ public BatteryStatsHelperLoader(Context context, Bundle bundle) {
+ super(context);
+ mBundle = bundle;
+ mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ }
+
+ @Override
+ public BatteryStatsHelper loadInBackground() {
+ final BatteryStatsHelper statsHelper = new BatteryStatsHelper(getContext(), true);
+
+ initBatteryStatsHelper(statsHelper);
+ return statsHelper;
+ }
+
+ @Override
+ protected void onDiscardResult(BatteryStatsHelper result) {
+
+ }
+
+ @VisibleForTesting
+ void initBatteryStatsHelper(BatteryStatsHelper statsHelper) {
+ statsHelper.create(mBundle);
+ statsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, mUserManager.getUserProfiles());
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index e126099..dad7b59 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -128,9 +128,8 @@
final BatterySipper sipper = sippers.get(i);
if (shouldHideSipper(sipper)) {
sippers.remove(i);
- if (sipper.drainType != BatterySipper.DrainType.OVERCOUNTED
- && sipper.drainType != BatterySipper.DrainType.UNACCOUNTED) {
- // Don't add it if it is overcounted or unaccounted
+ if (sipper.drainType != BatterySipper.DrainType.OVERCOUNTED) {
+ // Don't add it if it is overcounted
totalPowerMah += sipper.totalPowerMah;
}
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 28dfe1d..4ebff34 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -69,8 +69,7 @@
UsageType.UNACCOUNTED,
UsageType.OVERCOUNTED};
- @VisibleForTesting
- BatteryUtils mBatteryUtils;
+ private BatteryUtils mBatteryUtils;
private BatteryHistoryPreference mHistPref;
private PreferenceGroup mUsageListGroup;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
@@ -126,7 +125,6 @@
@Override
public void onResume() {
super.onResume();
- refreshStats();
}
@Override
@@ -165,8 +163,11 @@
}
@Override
- protected void refreshStats() {
- super.refreshStats();
+ protected void refreshUi() {
+ final Context context = getContext();
+ if (context == null) {
+ return;
+ }
updatePreference(mHistPref);
@@ -256,8 +257,10 @@
final List<PowerUsageData> batteryDataList = new ArrayList<>(batteryDataMap.values());
final int dischargeAmount = statusHelper.getStats().getDischargeAmount(STATUS_TYPE);
final double totalPower = statusHelper.getTotalPower();
+ final double hiddenPower = calculateHiddenPower(batteryDataList);
for (final PowerUsageData usageData : batteryDataList) {
- usageData.percentage = (usageData.totalPowerMah / totalPower) * dischargeAmount;
+ usageData.percentage = mBatteryUtils.calculateBatteryPercent(usageData.totalPowerMah,
+ totalPower, hiddenPower, dischargeAmount);
updateUsageDataSummary(usageData, totalPower, dischargeAmount);
}
@@ -268,6 +271,17 @@
}
@VisibleForTesting
+ double calculateHiddenPower(List<PowerUsageData> batteryDataList) {
+ for (final PowerUsageData usageData : batteryDataList) {
+ if (usageData.usageType == UsageType.UNACCOUNTED) {
+ return usageData.totalPowerMah;
+ }
+ }
+
+ return 0;
+ }
+
+ @VisibleForTesting
void updateUsageDataSummary(PowerUsageData usageData, double totalPower, int dischargeAmount) {
if (shouldHideSummary(usageData)) {
return;
@@ -320,6 +334,10 @@
void setUserManager(UserManager userManager) {
mUserManager = userManager;
}
+ @VisibleForTesting
+ void setBatteryUtils(BatteryUtils batteryUtils) {
+ mBatteryUtils = batteryUtils;
+ }
/**
* Class that contains data used in {@link PowerGaugePreference}.
diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java
index 1d9a228..aee55d6 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageBase.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java
@@ -16,28 +16,23 @@
package com.android.settings.fuelgauge;
import android.app.Activity;
-import android.content.BroadcastReceiver;
+import android.app.LoaderManager;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.BatteryStats;
+import android.content.Loader;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
import com.android.internal.os.BatteryStatsHelper;
-import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.utils.AsyncLoader;
/**
* Common base class for things that need to show the battery usage graph.
*/
-public abstract class PowerUsageBase extends DashboardFragment {
+public abstract class PowerUsageBase extends DashboardFragment
+ implements LoaderManager.LoaderCallbacks<BatteryStatsHelper> {
// +1 to allow ordering for PowerUsageSummary.
@VisibleForTesting
@@ -62,27 +57,23 @@
mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(getContext());
mBatteryBroadcastReceiver.setBatteryChangedListener(() -> {
- if (!mHandler.hasMessages(MSG_REFRESH_STATS)) {
- mHandler.sendEmptyMessageDelayed(MSG_REFRESH_STATS, 500);
- }
+ getLoaderManager().restartLoader(0, null, this);
});
+
+ getLoaderManager().initLoader(0, icicle, this);
}
@Override
public void onStart() {
super.onStart();
- mStatsHelper.clearStats();
}
@Override
public void onResume() {
super.onResume();
+
BatteryStatsHelper.dropFile(getActivity(), BatteryHistoryDetail.BATTERY_HISTORY_FILE);
mBatteryBroadcastReceiver.register();
- if (mHandler.hasMessages(MSG_REFRESH_STATS)) {
- mHandler.removeMessages(MSG_REFRESH_STATS);
- mStatsHelper.clearStats();
- }
}
@Override
@@ -94,7 +85,6 @@
@Override
public void onStop() {
super.onStop();
- mHandler.removeMessages(MSG_REFRESH_STATS);
}
@Override
@@ -105,26 +95,27 @@
}
}
- protected void refreshStats() {
- mStatsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, mUm.getUserProfiles());
- }
+ protected abstract void refreshUi();
protected void updatePreference(BatteryHistoryPreference historyPref) {
historyPref.setStats(mStatsHelper);
}
- static final int MSG_REFRESH_STATS = 100;
+ @Override
+ public Loader<BatteryStatsHelper> onCreateLoader(int id,
+ Bundle args) {
+ return new BatteryStatsHelperLoader(getContext(), args);
+ }
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_REFRESH_STATS:
- mStatsHelper.clearStats();
- refreshStats();
- break;
- }
- }
- };
+ @Override
+ public void onLoadFinished(Loader<BatteryStatsHelper> loader,
+ BatteryStatsHelper statsHelper) {
+ mStatsHelper = statsHelper;
+ refreshUi();
+ }
+ @Override
+ public void onLoaderReset(Loader<BatteryStatsHelper> loader) {
+
+ }
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 1bc67af..bcf830b 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -18,6 +18,8 @@
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.os.BatteryStats;
import android.os.Build;
@@ -142,7 +144,6 @@
@Override
public void onResume() {
super.onResume();
- refreshStats();
}
@Override
@@ -236,7 +237,7 @@
} else {
mStatsType = BatteryStats.STATS_SINCE_CHARGED;
}
- refreshStats();
+ refreshUi();
return true;
case MENU_HIGH_POWER_APPS:
Bundle args = new Bundle();
@@ -259,7 +260,7 @@
item.setTitle(mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
metricsFeatureProvider.action(context,
MetricsEvent.ACTION_SETTINGS_MENU_BATTERY_APPS_TOGGLE, mShowAllApps);
- refreshStats();
+ refreshUi();
return true;
default:
return super.onOptionsItemSelected(item);
@@ -396,15 +397,11 @@
return results;
}
- protected void refreshStats() {
- super.refreshStats();
-
- BatteryInfo.getBatteryInfo(getContext(), new BatteryInfo.Callback() {
- @Override
- public void onBatteryInfoLoaded(BatteryInfo info) {
- updateHeaderPreference(info);
- }
- });
+ protected void refreshUi() {
+ final Context context = getContext();
+ if (context == null) {
+ return;
+ }
cacheRemoveAllPrefs(mAppListGroup);
mAppListGroup.setOrderingAsAdded(false);
@@ -413,7 +410,13 @@
final PowerProfile powerProfile = mStatsHelper.getPowerProfile();
final BatteryStats stats = mStatsHelper.getStats();
final double averagePower = powerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL);
- final Context context = getContext();
+
+ final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
+ Intent batteryBroadcast = context.registerReceiver(null,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+ BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast,
+ mStatsHelper.getStats(), elapsedRealtimeUs, false);
+ updateHeaderPreference(batteryInfo);
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.colorControlNormal, value, true);
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index bcf9c3f..db5cf2f 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -19,6 +19,7 @@
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE;
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import android.app.Activity;
import android.app.NotificationChannel;
@@ -251,12 +252,14 @@
private void setupImportanceToggle() {
mImportanceToggle.setDisabledByAdmin(mSuspendedAppsAdmin);
- mImportanceToggle.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT);
+ mImportanceToggle.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT
+ || mChannel.getImportance() == IMPORTANCE_UNSPECIFIED);
mImportanceToggle.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- final int importance = ((Boolean) newValue ? IMPORTANCE_DEFAULT : IMPORTANCE_LOW);
+ final int importance =
+ ((Boolean) newValue ? IMPORTANCE_UNSPECIFIED : IMPORTANCE_LOW);
mChannel.setImportance(importance);
mChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE);
mBackend.updateChannel(mPkg, mUid, mChannel);
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index aee9dc2..b591d85 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -17,21 +17,24 @@
package com.android.settings.notification;
import android.content.Context;
+import android.provider.SearchIndexableResource;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.gestures.SwipeToNotificationPreferenceController;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class ConfigureNotificationSettings extends DashboardFragment {
private static final String TAG = "ConfigNotiSettings";
- private LockScreenNotificationPreferenceController mLockScreenNotificationController;
-
@Override
public int getMetricsCategory() {
return MetricsEvent.CONFIGURE_NOTIFICATION;
@@ -49,15 +52,42 @@
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, getLifecycle());
+ }
+
+ private static List<PreferenceController> buildPreferenceControllers(Context context,
+ Lifecycle lifecycle) {
final List<PreferenceController> controllers = new ArrayList<>();
final PulseNotificationPreferenceController pulseController =
new PulseNotificationPreferenceController(context);
- mLockScreenNotificationController = new LockScreenNotificationPreferenceController(context);
- getLifecycle().addObserver(pulseController);
- getLifecycle().addObserver(mLockScreenNotificationController);
- controllers.add(new SwipeToNotificationPreferenceController(context, getLifecycle()));
+ final LockScreenNotificationPreferenceController lockScreenNotificationController =
+ new LockScreenNotificationPreferenceController(context);
+ if (lifecycle != null) {
+ lifecycle.addObserver(pulseController);
+ lifecycle.addObserver(lockScreenNotificationController);
+ }
+ controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle));
controllers.add(pulseController);
- controllers.add(mLockScreenNotificationController);
+ controllers.add(lockScreenNotificationController);
return controllers;
}
+
+ /**
+ * For Search.
+ */
+ public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(
+ Context context, boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.configure_notification_settings;
+ return Arrays.asList(sir);
+ }
+
+ @Override
+ public List<PreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, null);
+ }
+ };
}
diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java
index 54f66ea..bda9319 100644
--- a/src/com/android/settings/search/BaseSearchIndexProvider.java
+++ b/src/com/android/settings/search/BaseSearchIndexProvider.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.res.XmlResourceParser;
import android.provider.SearchIndexableResource;
+import android.support.annotation.CallSuper;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
@@ -57,6 +58,7 @@
}
@Override
+ @CallSuper
public List<String> getNonIndexableKeys(Context context) {
if (!isPageSearchEnabled(context)) {
// Entire page should be suppressed, mark all keys from this page as non-indexable.
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 66e8c54..a87bd19 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -340,15 +340,21 @@
mWifiTracker.startTracking();
if (!isUiRestricted() && mWifiManager.isWifiEnabled()) {
- setProgressBarVisible(true);
- mWifiTracker.forceUpdate();
- if (DEBUG) Log.d(TAG, "WifiSettings onStart APs: " + mWifiTracker.getAccessPoints());
-
- getView().removeCallbacks(mUpdateAccessPointsRunnable);
- updateAccessPointPreferences();
+ forceUpdateAPs();
}
}
+ private void forceUpdateAPs() {
+ setProgressBarVisible(true);
+ mWifiTracker.forceUpdate();
+ if (DEBUG) {
+ Log.d(TAG, "WifiSettings force update APs: " + mWifiTracker.getAccessPoints());
+ }
+
+ getView().removeCallbacks(mUpdateAccessPointsRunnable);
+ updateAccessPointPreferences();
+ }
+
/**
* @return new WifiEnabler or null (as overridden by WifiSettingsForSetupWizard)
*/
@@ -661,7 +667,7 @@
final int wifiState = mWifiManager.getWifiState();
switch (wifiState) {
case WifiManager.WIFI_STATE_ENABLED:
- updateAccessPointsDelayed();
+ forceUpdateAPs();
break;
case WifiManager.WIFI_STATE_ENABLING:
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 240b8eb..f5462b0 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -1,7 +1,5 @@
-com.android.settings.notification.ConfigureNotificationSettings
com.android.settings.language.LanguageAndRegionSettings
com.android.settings.notification.ZenModePrioritySettings
-com.android.settings.inputmethod.InputAndGestureSettings
com.android.settings.accounts.AccountDetailDashboardFragment
com.android.settings.fuelgauge.PowerUsageDetail
com.android.settings.fuelgauge.AdvancedPowerUsageDetail
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
index 47d910d..efe44ef 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -84,7 +84,7 @@
FakeFeatureFactory.setupForTest(mContext);
mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
- mVolume = new VolumeInfo("id", 0, null, "id");
+ mVolume = spy(new VolumeInfo("id", 0, null, "id"));
// Note: null is passed as the Lifecycle because we are handling it outside of the normal
// Settings fragment lifecycle for test purposes.
mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp);
@@ -305,4 +305,90 @@
verify(system, times(2)).setIcon(any(Drawable.class));
verify(files, times(2)).setIcon(any(Drawable.class));
}
+
+ @Test
+ public void displayPreference_dontHideFilePreferenceWhenEmulatedInternalStorageUsed() {
+ StorageItemPreference audio = new StorageItemPreference(mContext);
+ StorageItemPreference image = new StorageItemPreference(mContext);
+ StorageItemPreference games = new StorageItemPreference(mContext);
+ StorageItemPreference apps = new StorageItemPreference(mContext);
+ StorageItemPreference system = new StorageItemPreference(mContext);
+ StorageItemPreference files = new StorageItemPreference(mContext);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+ when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
+ .thenReturn(audio);
+ when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
+ .thenReturn(image);
+ when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games);
+ when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
+ .thenReturn(apps);
+ when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
+ .thenReturn(system);
+ when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
+ .thenReturn(files);
+
+ when(mSvp.findEmulatedForPrivate(any(VolumeInfo.class))).thenReturn(mVolume);
+ when(mVolume.isMountedReadable()).thenReturn(true);
+
+ mController.displayPreference(screen);
+
+ verify(screen, times(0)).removePreference(files);
+ }
+
+ @Test
+ public void displayPreference_hideFilePreferenceWhenEmulatedStorageUnreadable() {
+ StorageItemPreference audio = new StorageItemPreference(mContext);
+ StorageItemPreference image = new StorageItemPreference(mContext);
+ StorageItemPreference games = new StorageItemPreference(mContext);
+ StorageItemPreference apps = new StorageItemPreference(mContext);
+ StorageItemPreference system = new StorageItemPreference(mContext);
+ StorageItemPreference files = new StorageItemPreference(mContext);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+ when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
+ .thenReturn(audio);
+ when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
+ .thenReturn(image);
+ when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games);
+ when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
+ .thenReturn(apps);
+ when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
+ .thenReturn(system);
+ when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
+ .thenReturn(files);
+
+ when(mSvp.findEmulatedForPrivate(any(VolumeInfo.class))).thenReturn(mVolume);
+ when(mVolume.isMountedReadable()).thenReturn(false);
+
+ mController.displayPreference(screen);
+
+ verify(screen).removePreference(files);
+ }
+
+ @Test
+ public void displayPreference_hideFilePreferenceWhenNoEmulatedInternalStorage() {
+ StorageItemPreference audio = new StorageItemPreference(mContext);
+ StorageItemPreference image = new StorageItemPreference(mContext);
+ StorageItemPreference games = new StorageItemPreference(mContext);
+ StorageItemPreference apps = new StorageItemPreference(mContext);
+ StorageItemPreference system = new StorageItemPreference(mContext);
+ StorageItemPreference files = new StorageItemPreference(mContext);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+ when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
+ .thenReturn(audio);
+ when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
+ .thenReturn(image);
+ when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games);
+ when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
+ .thenReturn(apps);
+ when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
+ .thenReturn(system);
+ when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
+ .thenReturn(files);
+
+ when(mSvp.findEmulatedForPrivate(any(VolumeInfo.class))).thenReturn(null);
+
+ mController.displayPreference(screen);
+
+ verify(screen).removePreference(files);
+ }
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryStatsHelperLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryStatsHelperLoaderTest.java
new file mode 100644
index 0000000..d19a4b2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryStatsHelperLoaderTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.fuelgauge;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.os.BatteryStats;
+import android.os.Bundle;
+import android.os.UserManager;
+
+import com.android.internal.os.BatteryStatsHelper;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BatteryStatsHelperLoaderTest {
+ @Mock
+ private BatteryStatsHelper mBatteryStatsHelper;
+ @Mock
+ private Bundle mBundle;
+ @Mock
+ private Context mContext;
+ @Mock
+ private UserManager mUserManager;
+ private BatteryStatsHelperLoader mLoader;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mLoader = new BatteryStatsHelperLoader(mContext, mBundle);
+ mLoader.mUserManager = mUserManager;
+ }
+
+ @Test
+ public void testInitBatteryStatsHelper_init() {
+ mLoader.initBatteryStatsHelper(mBatteryStatsHelper);
+
+ verify(mBatteryStatsHelper).create(mBundle);
+ verify(mBatteryStatsHelper).refreshStats(BatteryStats.STATS_SINCE_CHARGED,
+ mUserManager.getUserProfiles());
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index bfc2861..f9cc771 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -70,6 +70,7 @@
private static final double BATTERY_SCREEN_USAGE = 300;
private static final double BATTERY_SYSTEM_USAGE = 600;
private static final double BATTERY_OVERACCOUNTED_USAGE = 500;
+ private static final double BATTERY_UNACCOUNTED_USAGE = 700;
private static final double TOTAL_BATTERY_USAGE = 1000;
private static final double HIDDEN_USAGE = 200;
private static final int DISCHARGE_AMOUNT = 80;
@@ -85,6 +86,8 @@
@Mock
private BatterySipper mOvercountedBatterySipper;
@Mock
+ private BatterySipper mUnaccountedBatterySipper;
+ @Mock
private BatterySipper mSystemBatterySipper;
@Mock
private BatterySipper mCellBatterySipper;
@@ -126,6 +129,9 @@
mOvercountedBatterySipper.drainType = BatterySipper.DrainType.OVERCOUNTED;
mOvercountedBatterySipper.totalPowerMah = BATTERY_OVERACCOUNTED_USAGE;
+ mUnaccountedBatterySipper.drainType = BatterySipper.DrainType.UNACCOUNTED;
+ mUnaccountedBatterySipper.totalPowerMah = BATTERY_UNACCOUNTED_USAGE;
+
mBatteryUtils = BatteryUtils.getInstance(RuntimeEnvironment.application);
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
@@ -171,12 +177,14 @@
sippers.add(mScreenBatterySipper);
sippers.add(mSystemBatterySipper);
sippers.add(mOvercountedBatterySipper);
+ sippers.add(mUnaccountedBatterySipper);
when(mProvider.isTypeSystem(mSystemBatterySipper))
.thenReturn(true);
final double totalUsage = mBatteryUtils.removeHiddenBatterySippers(sippers);
assertThat(sippers).containsExactly(mNormalBatterySipper);
- assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE);
+ assertThat(totalUsage).isWithin(PRECISION).of(
+ BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE + BATTERY_UNACCOUNTED_USAGE);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
index 7a1284a..d46baa1 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
@@ -111,7 +111,7 @@
mPowerUsageAdvanced.setPackageManager(mPackageManager);
mPowerUsageAdvanced.setPowerUsageFeatureProvider(mPowerUsageFeatureProvider);
mPowerUsageAdvanced.setUserManager(mUserManager);
- mPowerUsageAdvanced.mBatteryUtils = spy(new BatteryUtils(mShadowContext));
+ mPowerUsageAdvanced.setBatteryUtils(BatteryUtils.getInstance(mShadowContext));
mPowerUsageData = new PowerUsageData(UsageType.APP);
mMaxBatterySipper.totalPowerMah = TYPE_BLUETOOTH_USAGE;
@@ -299,4 +299,16 @@
assertThat(mPowerUsageAdvanced.shouldShowBatterySipper(mNormalBatterySipper)).isTrue();
}
+ @Test
+ public void testCalculateHiddenPower_returnCorrectPower() {
+ List<PowerUsageData> powerUsageDataList = new ArrayList<>();
+ final double unaccountedPower = 100;
+ final double normalPower = 150;
+ powerUsageDataList.add(new PowerUsageData(UsageType.UNACCOUNTED, unaccountedPower));
+ powerUsageDataList.add(new PowerUsageData(UsageType.APP, normalPower));
+ powerUsageDataList.add(new PowerUsageData(UsageType.CELL, normalPower));
+
+ assertThat(mPowerUsageAdvanced.calculateHiddenPower(powerUsageDataList)).isWithin(
+ PRECISION).of(unaccountedPower);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 5cb60d2..3556d09 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -486,7 +486,7 @@
}
@Override
- protected void refreshStats() {
+ protected void refreshUi() {
// Leave it empty for toggle apps menu test
}
}
diff --git a/tests/unit/src/com/android/settings/deviceinfo/PublicVolumeSettingsTest.java b/tests/unit/src/com/android/settings/deviceinfo/PublicVolumeSettingsTest.java
new file mode 100644
index 0000000..4903b86
--- /dev/null
+++ b/tests/unit/src/com/android/settings/deviceinfo/PublicVolumeSettingsTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.settings.deviceinfo;
+
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+
+import com.android.settings.Settings;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class PublicVolumeSettingsTest {
+ @Rule
+ public ActivityTestRule<Settings.PublicVolumeSettingsActivity> mActivityRule =
+ new ActivityTestRule<>(Settings.PublicVolumeSettingsActivity.class, true, true);
+
+ @Test
+ public void test_invalidSetupDoesNotCrashSettings() {
+ Intent intent = new Intent();
+ intent.setAction(android.provider.Settings.ACTION_INTERNAL_STORAGE_SETTINGS);
+ intent.setClassName(InstrumentationRegistry.getTargetContext().getPackageName(),
+ Settings.PublicVolumeSettingsActivity.class.getName());
+ mActivityRule.launchActivity(intent);
+
+ // Should exit gracefully without crashing.
+ }
+}
diff --git a/tests/app/src/com/android/settings/wifi/WifiSettingsUiTest.java b/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
similarity index 76%
rename from tests/app/src/com/android/settings/wifi/WifiSettingsUiTest.java
rename to tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
index 11a49fc..19c3321 100644
--- a/tests/app/src/com/android/settings/wifi/WifiSettingsUiTest.java
+++ b/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
@@ -19,18 +19,22 @@
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
-import android.app.Instrumentation;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
import android.content.Intent;
+import android.net.wifi.WifiManager;
import android.support.test.InstrumentationRegistry;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
-import com.android.settings.R;
import com.android.settings.Settings.WifiSettingsActivity;
+import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
+import com.google.common.collect.Lists;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -43,9 +47,13 @@
// TODO(sghuman): Investigate why resource ids are not resolving correctly in the test apk,
// then remove this manual string entry
- private static final String WIFI_PREFERENCES = "Wi\\u2011Fi preferences";
+ private static final String WIFI_PREFERENCES = "Wi\u2011Fi preferences";
+ @Mock private AccessPoint mockAccessPoint;
@Mock private WifiTracker mockWifiTracker;
+ @Mock private WifiManager mockWifiManager;
+
+ private Context mContext;
@Rule
public ActivityTestRule<WifiSettingsActivity> mActivityRule =
@@ -54,7 +62,14 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = InstrumentationRegistry.getTargetContext();
+
WifiTrackerFactory.setTestingWifiTracker(mockWifiTracker);
+ when(mockWifiTracker.getManager()).thenReturn(mockWifiManager);
+ when(mockWifiTracker.getAccessPoints()).thenReturn(
+ Lists.asList(mockAccessPoint, new AccessPoint[]{}));
+
+ when(mockWifiManager.isWifiEnabled()).thenReturn(true);
}
private void launchActivity() {