Merge "Revert the mandatory backups feature."
diff --git a/res/layout/master_clear.xml b/res/layout/master_clear.xml
index 9f89961..921347e 100644
--- a/res/layout/master_clear.xml
+++ b/res/layout/master_clear.xml
@@ -23,8 +23,8 @@
android:id="@+id/master_clear_scrollview"
android:layout_width="match_parent"
android:layout_height="0dip"
- android:layout_marginStart="@dimen/preference_no_icon_padding_start"
- android:layout_marginEnd="12dp"
+ android:layout_marginStart="@dimen/reset_master_clear_margin_start"
+ android:layout_marginEnd="@dimen/reset_master_clear_margin_end"
android:layout_marginTop="12dp"
android:layout_weight="1">
<LinearLayout
diff --git a/res/layout/reset_network.xml b/res/layout/reset_network.xml
index 1850bb2..7eb5d2a 100644
--- a/res/layout/reset_network.xml
+++ b/res/layout/reset_network.xml
@@ -23,8 +23,8 @@
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dip"
- android:layout_marginStart="@dimen/preference_no_icon_padding_start"
- android:layout_marginEnd="12dp"
+ android:layout_marginStart="@dimen/reset_network_margin_start"
+ android:layout_marginEnd="@dimen/reset_network_margin_end"
android:layout_marginTop="12dp"
android:layout_weight="1">
diff --git a/res/layout/screen_pinning_instructions.xml b/res/layout/screen_pinning_instructions.xml
index 80fec3c..fea5ed8 100644
--- a/res/layout/screen_pinning_instructions.xml
+++ b/res/layout/screen_pinning_instructions.xml
@@ -31,8 +31,8 @@
android:paddingTop="@dimen/screen_pinning_textview_padding"
android:text="@string/screen_pinning_description"
android:textAppearance="@style/TextAppearance.Medium"
- android:paddingStart="@dimen/screen_margin_sides"
- android:paddingEnd="@dimen/screen_margin_sides"
+ android:paddingStart="@dimen/screen_pinning_padding_start"
+ android:paddingEnd="@dimen/screen_pinning_padding_end"
/>
</ScrollView>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index d5ea762..afdcd0e 100755
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -29,4 +29,8 @@
<dimen name="confirm_credentials_top_padding">20dp</dimen>
<dimen name="confirm_credentials_top_margin">24dp</dimen>
+
+ <!-- Padding for screen pinning -->
+ <dimen name="screen_pinning_padding_start">128dp</dimen>
+ <dimen name="screen_pinning_padding_end">128dp</dimen>
</resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 273225e..241471c 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -62,4 +62,8 @@
<dimen name="confirm_credentials_top_padding">48dp</dimen>
<dimen name="confirm_credentials_side_margin">0dp</dimen>
<dimen name="confirm_credentials_top_margin">64dp</dimen>
+
+ <!-- Padding for screen pinning -->
+ <dimen name="screen_pinning_padding_start">40dp</dimen>
+ <dimen name="screen_pinning_padding_end">40dp</dimen>
</resources>
diff --git a/res/values-xlarge/dimens.xml b/res/values-xlarge/dimens.xml
index b6b4591..df9d56f 100755
--- a/res/values-xlarge/dimens.xml
+++ b/res/values-xlarge/dimens.xml
@@ -18,4 +18,8 @@
<dimen name="screen_margin_sides">128dip</dimen>
<dimen name="datetime_margin_top">154dip</dimen>
<dimen name="datetime_margin_bottom">96dip</dimen>
+
+ <!-- Padding for screen pinning -->
+ <dimen name="screen_pinning_padding_start">128dp</dimen>
+ <dimen name="screen_pinning_padding_end">128dp</dimen>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index be57bf7..16d9f96 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -297,6 +297,16 @@
<dimen name="battery_meter_width">66dp</dimen>
<dimen name="battery_meter_height">100dp</dimen>
+ <!-- Margin for the reset screens -->
+ <dimen name="reset_network_margin_start">72dp</dimen>
+ <dimen name="reset_network_margin_end">12dp</dimen>
+ <dimen name="reset_master_clear_margin_start">72dp</dimen>
+ <dimen name="reset_master_clear_margin_end">12dp</dimen>
+
+ <!-- Padding for screen pinning -->
+ <dimen name="screen_pinning_padding_start">64dp</dimen>
+ <dimen name="screen_pinning_padding_end">64dp</dimen>
+
<!-- Suggestion/condition header padding -->
<dimen name="suggestion_condition_header_padding_collapsed">10dp</dimen>
<dimen name="suggestion_condition_header_padding_expanded">5dp</dimen>
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 4197e2f..87a3511 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -541,10 +541,6 @@
private DialogInterface.OnCancelListener mOnCancelListener;
private DialogInterface.OnDismissListener mOnDismissListener;
- public SettingsDialogFragment() {
- /* do nothing */
- }
-
public SettingsDialogFragment(DialogCreatable fragment, int dialogId) {
super(fragment, dialogId);
if (!(fragment instanceof Fragment)) {
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
index ec6ea8c..9e76ff5 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -111,7 +111,7 @@
final List<ResolveInfo> candidates = new ArrayList<>();
// Resolve that intent and check that the handleAllWebDataURI boolean is set
final List<ResolveInfo> list = packageManager.queryIntentActivitiesAsUser(
- BROWSE_PROBE, PackageManager.MATCH_ALL, userId);
+ BROWSE_PROBE, 0 /* flags */, userId);
if (list != null) {
final Set<String> addedPackages = new ArraySet<>();
for (ResolveInfo info : list) {
@@ -181,13 +181,12 @@
* Whether or not the pkg is the default browser
*/
public boolean isBrowserDefault(String pkg, int userId) {
- String defaultPackage = mPackageManager.getDefaultBrowserPackageNameAsUser(userId);
+ final String defaultPackage = mPackageManager.getDefaultBrowserPackageNameAsUser(userId);
if (defaultPackage != null) {
return defaultPackage.equals(pkg);
}
- final List<ResolveInfo> list = mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE,
- PackageManager.MATCH_ALL, userId);
+ final List<ResolveInfo> list = getCandidates(mPackageManager, userId);
// There is only 1 app, it must be the default browser.
return list != null && list.size() == 1;
}
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
index 4b717e0..936a4c0 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
@@ -17,7 +17,6 @@
package com.android.settings.connecteddevice.usb;
import android.content.Context;
-import android.os.Bundle;
import android.provider.SearchIndexableResource;
import androidx.annotation.VisibleForTesting;
@@ -71,15 +70,6 @@
}
@Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- super.onCreatePreferences(savedInstanceState, rootKey);
- }
-
- public boolean isConnected() {
- return mUsbReceiver.isConnected();
- }
-
- @Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
mUsbBackend = new UsbBackend(context);
mControllers = createControllerList(context, mUsbBackend, this);
diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java
index 08b4e82..1062811 100644
--- a/src/com/android/settings/core/FeatureFlags.java
+++ b/src/com/android/settings/core/FeatureFlags.java
@@ -20,7 +20,6 @@
* This class keeps track of all feature flags in Settings.
*/
public class FeatureFlags {
- public static final String BATTERY_DISPLAY_APP_LIST = "settings_battery_display_app_list";
public static final String BLUETOOTH_WHILE_DRIVING = "settings_bluetooth_while_driving";
public static final String AUDIO_SWITCHER_SETTINGS = "settings_audio_switcher";
public static final String DYNAMIC_HOMEPAGE = "settings_dynamic_homepage";
diff --git a/src/com/android/settings/homepage/CardContentLoader.java b/src/com/android/settings/homepage/CardContentLoader.java
index 47ba59a..9805ae3 100644
--- a/src/com/android/settings/homepage/CardContentLoader.java
+++ b/src/com/android/settings/homepage/CardContentLoader.java
@@ -17,46 +17,52 @@
package com.android.settings.homepage;
import android.content.Context;
+import android.database.Cursor;
-import androidx.annotation.Nullable;
+import androidx.annotation.NonNull;
import com.android.settingslib.utils.AsyncLoaderCompat;
+import java.util.ArrayList;
import java.util.List;
-//TODO(b/112521307): Implement this to make it work with the card database.
-public class CardContentLoader {
+public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
+ static final int CARD_CONTENT_LOADER_ID = 1;
- private static final String TAG = "CardContentLoader";
-
- private CardContentLoaderListener mListener;
+ private Context mContext;
public interface CardContentLoaderListener {
void onFinishCardLoading(List<ContextualCard> contextualCards);
}
- public CardContentLoader() {
+ CardContentLoader(Context context) {
+ super(context);
+ mContext = context.getApplicationContext();
}
- void setListener(CardContentLoaderListener listener) {
- mListener = listener;
+ @Override
+ protected void onDiscardResult(List<ContextualCard> result) {
+
}
- private static class CardLoader extends AsyncLoaderCompat<List<ContextualCard>> {
-
- public CardLoader(Context context) {
- super(context);
+ @NonNull
+ @Override
+ public List<ContextualCard> loadInBackground() {
+ final List<ContextualCard> result = new ArrayList<>();
+ try (Cursor cursor = CardDatabaseHelper.getInstance(mContext).getContextualCards()) {
+ if (cursor.getCount() == 0) {
+ //TODO(b/113372471): Load Default static cards and return 3 static cards
+ return result;
+ }
+ for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
+ final ContextualCard card = new ContextualCard(cursor);
+ if (card.isCustomCard()) {
+ //TODO(b/114688391): Load and generate custom card,then add into list
+ } else {
+ result.add(card);
+ }
+ }
}
-
- @Override
- protected void onDiscardResult(List<ContextualCard> result) {
-
- }
-
- @Nullable
- @Override
- public List<ContextualCard> loadInBackground() {
- return null;
- }
+ return result;
}
}
diff --git a/src/com/android/settings/homepage/CardDatabaseHelper.java b/src/com/android/settings/homepage/CardDatabaseHelper.java
index 382b71f..b53479e 100644
--- a/src/com/android/settings/homepage/CardDatabaseHelper.java
+++ b/src/com/android/settings/homepage/CardDatabaseHelper.java
@@ -17,6 +17,7 @@
package com.android.settings.homepage;
import android.content.Context;
+import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
@@ -190,4 +191,12 @@
}
return sCardDatabaseHelper;
}
+
+ Cursor getContextualCards() {
+ final SQLiteDatabase db = this.getReadableDatabase();
+ Cursor cursor = db.query(CARD_TABLE, null /* columns */, null /* selection */,
+ null /* selectionArgs */, null /* groupBy */, null /* having */,
+ null /* orderBy */);
+ return cursor;
+ }
}
diff --git a/src/com/android/settings/homepage/ContextualCard.java b/src/com/android/settings/homepage/ContextualCard.java
index f5083d8..174a437 100644
--- a/src/com/android/settings/homepage/ContextualCard.java
+++ b/src/com/android/settings/homepage/ContextualCard.java
@@ -17,6 +17,7 @@
package com.android.settings.homepage;
import android.annotation.IntDef;
+import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.TextUtils;
@@ -58,8 +59,8 @@
private final int mIconResId;
private final int mCardAction;
private final long mExpireTimeMS;
- private final Drawable mIconDrawable;
private final boolean mIsHalfWidth;
+ private final Drawable mIconDrawable;
String getName() {
return mName;
@@ -137,6 +138,10 @@
return mIsHalfWidth;
}
+ boolean isCustomCard() {
+ return TextUtils.isEmpty(mSliceUri);
+ }
+
public ContextualCard(Builder builder) {
mName = builder.mName;
mCardType = builder.mCardType;
@@ -158,6 +163,31 @@
mIsHalfWidth = builder.mIsHalfWidth;
}
+ ContextualCard(Cursor c) {
+ mName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.NAME));
+ mCardType = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.TYPE));
+ mRankingScore = c.getDouble(c.getColumnIndex(CardDatabaseHelper.CardColumns.SCORE));
+ mSliceUri = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SLICE_URI));
+ mCategory = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CATEGORY));
+ mLocalizedToLocale = c.getString(
+ c.getColumnIndex(CardDatabaseHelper.CardColumns.LOCALIZED_TO_LOCALE));
+ mPackageName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.PACKAGE_NAME));
+ mAppVersion = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.APP_VERSION));
+ mTitleResName = c.getString(
+ c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_RES_NAME));
+ mTitleText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_TEXT));
+ mSummaryResName = c.getString(
+ c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_RES_NAME));
+ mSummaryText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_TEXT));
+ mIconResName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_NAME));
+ mIconResId = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_ID));
+ mCardAction = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CARD_ACTION));
+ mExpireTimeMS = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.EXPIRE_TIME_MS));
+ mIsHalfWidth = (c.getInt(
+ c.getColumnIndex(CardDatabaseHelper.CardColumns.SUPPORT_HALF_WIDTH)) == 1);
+ mIconDrawable = null;
+ }
+
@Override
public int hashCode() {
return mName.hashCode();
diff --git a/src/com/android/settings/homepage/ContextualCardController.java b/src/com/android/settings/homepage/ContextualCardController.java
index 921d72b..4a7a149 100644
--- a/src/com/android/settings/homepage/ContextualCardController.java
+++ b/src/com/android/settings/homepage/ContextualCardController.java
@@ -27,8 +27,8 @@
int getCardType();
/**
- * When data is updated or changed, the new data should be passed to ContextualCardManager for list
- * updating.
+ * When data is updated or changed, the new data should be passed to ContextualCardManager for
+ * list updating.
*/
void onDataUpdated(List<ContextualCard> cardList);
diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java
index aa2f576..1eec6a7 100644
--- a/src/com/android/settings/homepage/ContextualCardManager.java
+++ b/src/com/android/settings/homepage/ContextualCardManager.java
@@ -16,9 +16,17 @@
package com.android.settings.homepage;
+import static com.android.settings.homepage.CardContentLoader.CARD_CONTENT_LOADER_ID;
+
import android.content.Context;
+import android.os.Bundle;
import android.widget.BaseAdapter;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.content.Loader;
+
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -60,9 +68,12 @@
mControllerRendererPool = new ControllerRendererPool();
}
- void startCardContentLoading() {
- final CardContentLoader cardContentLoader = new CardContentLoader();
- cardContentLoader.setListener(this);
+ void loadContextualCards(PersonalSettingsFragment fragment) {
+ final CardContentLoaderCallbacks cardContentLoaderCallbacks =
+ new CardContentLoaderCallbacks(mContext);
+ cardContentLoaderCallbacks.setListener(this);
+ LoaderManager.getInstance(fragment).initLoader(CARD_CONTENT_LOADER_ID, null /* bundle */,
+ cardContentLoaderCallbacks);
}
private void loadCardControllers() {
@@ -140,4 +151,42 @@
public ControllerRendererPool getControllerRendererPool() {
return mControllerRendererPool;
}
+
+ static class CardContentLoaderCallbacks implements
+ LoaderManager.LoaderCallbacks<List<ContextualCard>> {
+
+ private Context mContext;
+ private CardContentLoader.CardContentLoaderListener mListener;
+
+ CardContentLoaderCallbacks(Context context) {
+ mContext = context.getApplicationContext();
+ }
+
+ protected void setListener(CardContentLoader.CardContentLoaderListener listener) {
+ mListener = listener;
+ }
+
+ @NonNull
+ @Override
+ public Loader<List<ContextualCard>> onCreateLoader(int id, @Nullable Bundle bundle) {
+ if (id == CARD_CONTENT_LOADER_ID) {
+ return new CardContentLoader(mContext);
+ } else {
+ throw new IllegalArgumentException("Unknown loader id: " + id);
+ }
+ }
+
+ @Override
+ public void onLoadFinished(@NonNull Loader<List<ContextualCard>> loader,
+ List<ContextualCard> contextualCards) {
+ if (mListener != null) {
+ mListener.onFinishCardLoading(contextualCards);
+ }
+ }
+
+ @Override
+ public void onLoaderReset(@NonNull Loader<List<ContextualCard>> loader) {
+
+ }
+ }
}
diff --git a/src/com/android/settings/homepage/ContextualCardRenderer.java b/src/com/android/settings/homepage/ContextualCardRenderer.java
index 94fdb43..315c09d 100644
--- a/src/com/android/settings/homepage/ContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/ContextualCardRenderer.java
@@ -31,15 +31,15 @@
int getViewType();
/**
- * When {@link ContextualCardsAdapter} calls {@link ContextualCardsAdapter#onCreateViewHolder(ViewGroup,
- * int)}, this method will be called to retrieve the corresponding
+ * When {@link ContextualCardsAdapter} calls {@link ContextualCardsAdapter#onCreateViewHolder},
+ * this method will be called to retrieve the corresponding
* {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}.
*/
RecyclerView.ViewHolder createViewHolder(View view);
/**
- * When {@link ContextualCardsAdapter} calls {@link ContextualCardsAdapter#onBindViewHolder(RecyclerView
- * .ViewHolder, int)}, this method will be called to bind data to the
+ * When {@link ContextualCardsAdapter} calls {@link ContextualCardsAdapter#onBindViewHolder},
+ * this method will be called to bind data to the
* {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}.
*/
void bindView(RecyclerView.ViewHolder holder, ContextualCard card);
diff --git a/src/com/android/settings/homepage/ContextualCardsAdapter.java b/src/com/android/settings/homepage/ContextualCardsAdapter.java
index e985343..53a47e0 100644
--- a/src/com/android/settings/homepage/ContextualCardsAdapter.java
+++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java
@@ -27,8 +27,8 @@
import java.util.ArrayList;
import java.util.List;
-public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
- ContextualCardUpdateListener {
+public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
+ implements ContextualCardUpdateListener {
static final int SPAN_COUNT = 2;
private static final String TAG = "ContextualCardsAdapter";
diff --git a/src/com/android/settings/homepage/PersonalSettingsFragment.java b/src/com/android/settings/homepage/PersonalSettingsFragment.java
index 2eb9663..4a0041e 100644
--- a/src/com/android/settings/homepage/PersonalSettingsFragment.java
+++ b/src/com/android/settings/homepage/PersonalSettingsFragment.java
@@ -43,7 +43,7 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContextualCardManager = new ContextualCardManager(getContext(), getSettingsLifecycle());
- mContextualCardManager.startCardContentLoading();
+ mContextualCardManager.loadContextualCards(this);
}
@Override
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index a2a2450..0279cfa 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -15,12 +15,15 @@
*/
package com.android.settings.network;
+import static android.provider.Settings.ACTION_DATA_USAGE_SETTINGS;
import static com.android.settings.network.MobilePlanPreferenceController
.MANAGE_MOBILE_PLAN_DIALOG_ID;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.text.BidiFormatter;
@@ -45,6 +48,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.function.BooleanSupplier;
import java.util.List;
@SearchIndexable
@@ -158,24 +162,32 @@
private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
private final TetherPreferenceController mTetherPreferenceController;
+ private final BooleanSupplier mHasDataUsageActivity;
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
this(context, summaryLoader,
new WifiMasterSwitchPreferenceController(context, null),
new MobileNetworkPreferenceController(context),
- new TetherPreferenceController(context, null /* lifecycle */));
+ new TetherPreferenceController(context, null /* lifecycle */),
+ () -> {
+ final Intent intent = new Intent(ACTION_DATA_USAGE_SETTINGS);
+ final PackageManager pm = context.getPackageManager();
+ return intent.resolveActivity(pm) != null;
+ });
}
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
SummaryProvider(Context context, SummaryLoader summaryLoader,
WifiMasterSwitchPreferenceController wifiPreferenceController,
MobileNetworkPreferenceController mobileNetworkPreferenceController,
- TetherPreferenceController tetherPreferenceController) {
+ TetherPreferenceController tetherPreferenceController,
+ BooleanSupplier hasDataUsageActivity) {
mContext = context;
mSummaryLoader = summaryLoader;
mWifiPreferenceController = wifiPreferenceController;
mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
mTetherPreferenceController = tetherPreferenceController;
+ mHasDataUsageActivity = hasDataUsageActivity;
}
@@ -198,7 +210,7 @@
if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) {
summaries.add(mobileSummary);
}
- if (!TextUtils.isEmpty(dataUsageSummary)) {
+ if (!TextUtils.isEmpty(dataUsageSummary) && mHasDataUsageActivity.getAsBoolean()) {
summaries.add(dataUsageSummary);
}
if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) {
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 5e961a6..6e3174d 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -964,9 +964,10 @@
mAddUserWhenLockedPreferenceController.getPreferenceKey());
mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
mMultiUserFooterPreferenceController.updateState(null /* preference */);
+ mAddUser.setVisible(mUserCaps.mCanAddUser && Utils.isDeviceProvisioned(context)
+ && mUserCaps.mUserSwitcherEnabled);
mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
if (!mUserCaps.mUserSwitcherEnabled) {
- mAddUser.setVisible(false);
return;
}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
index 0ef1cf3..4a482d0 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
@@ -18,9 +18,9 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -133,8 +133,11 @@
@Test
public void isBrowserDefault_onlyApp_shouldReturnTrue() {
when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(null);
+ final List<ResolveInfo> resolveInfos = new ArrayList<>();
+ final String PACKAGE_ONE = "pkg";
+ resolveInfos.add(createResolveInfo(PACKAGE_ONE));
when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
- .thenReturn(Collections.singletonList(new ResolveInfo()));
+ .thenReturn(resolveInfos);
assertThat(mController.isBrowserDefault("pkg", 0)).isTrue();
}
@@ -161,6 +164,15 @@
assertThat(defaultBrowserInfo.size()).isEqualTo(2);
}
+ @Test
+ public void getCandidates_shouldQueryActivityWithFlagsEquals0() {
+
+ mController.getCandidates(mPackageManager, 0 /* userId */);
+
+ verify(mPackageManager).queryIntentActivitiesAsUser(
+ any(Intent.class), eq(0) /* flags */, eq(0) /* userId */);
+ }
+
private ResolveInfo createResolveInfo(String packageName) {
final ResolveInfo info = new ResolveInfo();
info.handleAllWebDataURI = true;
diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
index d6f86f9..469a537 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
@@ -79,7 +79,7 @@
final SummaryLoader.SummaryProvider provider =
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
wifiPreferenceController, mobileNetworkPreferenceController,
- tetherPreferenceController);
+ tetherPreferenceController, () -> true);
provider.setListening(false);
@@ -107,7 +107,7 @@
final SummaryLoader.SummaryProvider provider =
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
wifiPreferenceController, mobileNetworkPreferenceController,
- tetherPreferenceController);
+ tetherPreferenceController, () -> true);
provider.setListening(false);
@@ -121,4 +121,34 @@
verify(summaryLoader).setSummary(provider, "Wi\u2011Fi and data usage");
}
+
+ @Test
+ public void summaryProviderSetListening_noDataUsageActivity_shouldReturnNoDataUsageSummary() {
+ final WifiMasterSwitchPreferenceController wifiPreferenceController =
+ mock(WifiMasterSwitchPreferenceController.class);
+ final MobileNetworkPreferenceController mobileNetworkPreferenceController =
+ mock(MobileNetworkPreferenceController.class);
+ final TetherPreferenceController tetherPreferenceController =
+ mock(TetherPreferenceController.class);
+
+ final SummaryLoader summaryLoader = mock(SummaryLoader.class);
+ final SummaryLoader.SummaryProvider provider =
+ new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
+ wifiPreferenceController, mobileNetworkPreferenceController,
+ tetherPreferenceController, () -> false);
+
+ provider.setListening(false);
+
+ verifyZeroInteractions(summaryLoader);
+
+ when(wifiPreferenceController.isAvailable()).thenReturn(true);
+ when(mobileNetworkPreferenceController.isAvailable()).thenReturn(true);
+ when(tetherPreferenceController.isAvailable()).thenReturn(true);
+
+ provider.setListening(true);
+
+ verify(summaryLoader).setSummary(provider, "Wi\u2011Fi, mobile, and hotspot");
+ }
+
+
}
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index 413d771..02c279e 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -212,4 +212,31 @@
}
+ @Test
+ public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.DEVICE_PROVISIONED, 1);
+ final RestrictedPreference addUser = mock(RestrictedPreference.class);
+
+ mUserCapabilities.mCanAddUser = true;
+ mUserCapabilities.mDisallowAddUser = false;
+ mUserCapabilities.mUserSwitcherEnabled = true;
+
+ ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+ ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
+ ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
+ ReflectionHelpers.setField(mFragment, "mAddingUser", false);
+ mFragment.mMePreference = mMePreference;
+ mFragment.mUserListCategory = mock(PreferenceCategory.class);
+ mFragment.mAddUser = addUser;
+
+ doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
+ doReturn("Test summary").when(mFragment).getString(anyInt(), anyInt());
+
+ mFragment.updateUserList();
+
+ verify(addUser).setVisible(true);
+
+ }
+
}