From 2f4558d3fcf03075d687f61f8bf82260a6b3f0a4 Mon Sep 17 00:00:00 2001 From: Lenka Trochtova Date: Thu, 9 Aug 2018 15:15:18 +0200 Subject: [PATCH 1/9] Revert the mandatory backups feature. Bug: 79736299 Test: make RunSettingsGoogleRoboTests Test: make RunSettingsRoboTests Change-Id: Ie9702664c0fb4daccdee74eac6080c959fe1b608 --- res/values/strings.xml | 4 - res/xml/enterprise_privacy_settings.xml | 3 - .../ActionDisabledByAdminDialogHelper.java | 3 - .../BackupsEnabledPreferenceController.java | 37 ---------- .../EnterprisePrivacyFeatureProvider.java | 5 -- .../EnterprisePrivacyFeatureProviderImpl.java | 5 -- .../enterprise/EnterprisePrivacySettings.java | 1 - ...ActionDisabledByAdminDialogHelperTest.java | 4 - ...ackupsEnabledPreferenceControllerTest.java | 73 ------------------- ...erprisePrivacyFeatureProviderImplTest.java | 9 --- .../EnterprisePrivacySettingsTest.java | 4 +- 11 files changed, 1 insertion(+), 147 deletions(-) delete mode 100644 src/com/android/settings/enterprise/BackupsEnabledPreferenceController.java delete mode 100644 tests/robotests/src/com/android/settings/enterprise/BackupsEnabledPreferenceControllerTest.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 2b37268a1a7..c99d7adb683 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8948,8 +8948,6 @@ Camera not allowed Screenshot not allowed - - Can’t turn off backups Can’t open this app @@ -9749,8 +9747,6 @@ %d attempt %d attempts - - This device\'s data is being backed up This device is managed by your organization. diff --git a/res/xml/enterprise_privacy_settings.xml b/res/xml/enterprise_privacy_settings.xml index 0aa1415bc35..4fa50e7aae5 100644 --- a/res/xml/enterprise_privacy_settings.xml +++ b/res/xml/enterprise_privacy_settings.xml @@ -83,9 +83,6 @@ - controllers) { assertThat(controllers).isNotNull(); - assertThat(controllers.size()).isEqualTo(18); + assertThat(controllers.size()).isEqualTo(17); int position = 0; assertThat(controllers.get(position++)).isInstanceOf(NetworkLogsPreferenceController.class); assertThat(controllers.get(position++)).isInstanceOf(BugReportsPreferenceController.class); @@ -126,8 +126,6 @@ public class EnterprisePrivacySettingsTest { CaCertsCurrentUserPreferenceController.class); assertThat(controllers.get(position++)).isInstanceOf( CaCertsManagedProfilePreferenceController.class); - assertThat(controllers.get(position++)).isInstanceOf( - BackupsEnabledPreferenceController.class); assertThat(controllers.get(position++)).isInstanceOf( PreferenceCategoryController.class); assertThat(controllers.get(position++)).isInstanceOf( From 089ed2152607b3944401ad4e374ed2dd67c62ab7 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 12 Sep 2018 14:07:12 -0700 Subject: [PATCH 2/9] Fix nits in contextual card package. We missed to catch a few nits in previous CLs. This change cleans up some of it. Test: manual Change-Id: Ibd3466f781952f998e1183a49f56e812cbce99a1 --- .../settings/homepage/CardContentLoader.java | 30 ++++++++----------- .../settings/homepage/CardDatabaseHelper.java | 2 +- .../homepage/ContextualCardController.java | 4 +-- .../homepage/ContextualCardManager.java | 3 +- .../homepage/ContextualCardRenderer.java | 8 ++--- .../homepage/ContextualCardsAdapter.java | 4 +-- .../homepage/PersonalSettingsFragment.java | 2 +- 7 files changed, 23 insertions(+), 30 deletions(-) diff --git a/src/com/android/settings/homepage/CardContentLoader.java b/src/com/android/settings/homepage/CardContentLoader.java index 2a2ebad6f58..9805ae3e409 100644 --- a/src/com/android/settings/homepage/CardContentLoader.java +++ b/src/com/android/settings/homepage/CardContentLoader.java @@ -19,7 +19,7 @@ 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; @@ -45,28 +45,22 @@ public class CardContentLoader extends AsyncLoaderCompat> { } - @Nullable + @NonNull @Override public List loadInBackground() { - List result; - try (Cursor cursor = CardDatabaseHelper.getInstance(mContext).getAllContextualCards()) { + final List 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 new ArrayList<>(); + return result; } - result = buildContextualCardList(cursor); - } - return result; - } - - private List buildContextualCardList(Cursor cursor) { - final List result = new ArrayList<>(); - 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); + 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); + } } } return result; diff --git a/src/com/android/settings/homepage/CardDatabaseHelper.java b/src/com/android/settings/homepage/CardDatabaseHelper.java index f0a347187ae..b53479ec5f2 100644 --- a/src/com/android/settings/homepage/CardDatabaseHelper.java +++ b/src/com/android/settings/homepage/CardDatabaseHelper.java @@ -192,7 +192,7 @@ public class CardDatabaseHelper extends SQLiteOpenHelper { return sCardDatabaseHelper; } - Cursor getAllContextualCards() { + Cursor getContextualCards() { final SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(CARD_TABLE, null /* columns */, null /* selection */, null /* selectionArgs */, null /* groupBy */, null /* having */, diff --git a/src/com/android/settings/homepage/ContextualCardController.java b/src/com/android/settings/homepage/ContextualCardController.java index 921d72bda8a..4a7a1498bf5 100644 --- a/src/com/android/settings/homepage/ContextualCardController.java +++ b/src/com/android/settings/homepage/ContextualCardController.java @@ -27,8 +27,8 @@ public interface ContextualCardController { 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 cardList); diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java index df20a6c2a4a..1eec6a7af98 100644 --- a/src/com/android/settings/homepage/ContextualCardManager.java +++ b/src/com/android/settings/homepage/ContextualCardManager.java @@ -68,7 +68,7 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade mControllerRendererPool = new ControllerRendererPool(); } - void startCardContentLoading(PersonalSettingsFragment fragment) { + void loadContextualCards(PersonalSettingsFragment fragment) { final CardContentLoaderCallbacks cardContentLoaderCallbacks = new CardContentLoaderCallbacks(mContext); cardContentLoaderCallbacks.setListener(this); @@ -152,7 +152,6 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade return mControllerRendererPool; } - static class CardContentLoaderCallbacks implements LoaderManager.LoaderCallbacks> { diff --git a/src/com/android/settings/homepage/ContextualCardRenderer.java b/src/com/android/settings/homepage/ContextualCardRenderer.java index 94fdb438f9e..315c09d93ca 100644 --- a/src/com/android/settings/homepage/ContextualCardRenderer.java +++ b/src/com/android/settings/homepage/ContextualCardRenderer.java @@ -31,15 +31,15 @@ public interface ContextualCardRenderer { 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 e985343cd59..53a47e0fb0d 100644 --- a/src/com/android/settings/homepage/ContextualCardsAdapter.java +++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java @@ -27,8 +27,8 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; -public class ContextualCardsAdapter extends RecyclerView.Adapter implements - ContextualCardUpdateListener { +public class ContextualCardsAdapter extends RecyclerView.Adapter + 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 da41cd72f68..4a0041ea19d 100644 --- a/src/com/android/settings/homepage/PersonalSettingsFragment.java +++ b/src/com/android/settings/homepage/PersonalSettingsFragment.java @@ -43,7 +43,7 @@ public class PersonalSettingsFragment extends InstrumentedFragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContextualCardManager = new ContextualCardManager(getContext(), getSettingsLifecycle()); - mContextualCardManager.startCardContentLoading(this); + mContextualCardManager.loadContextualCards(this); } @Override From dfe663879dd198d6a5063963a5a13e70fc08d50a Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 10 Sep 2018 15:49:40 -0700 Subject: [PATCH 3/9] Do not include disabled activity in Default Browser. - query the intent activites with flags 0, so that only enabled activities will be returned. Change-Id: I6ec4e3f3fdff850228a723bcb2d2bdc5721b41eb Fixes: 111796304 Test: make RunSettingsRoboTests --- .../DefaultBrowserPreferenceController.java | 7 +++---- .../DefaultBrowserPreferenceControllerTest.java | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java index ec6ea8cba9e..9e76ff55a10 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java @@ -111,7 +111,7 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont final List candidates = new ArrayList<>(); // Resolve that intent and check that the handleAllWebDataURI boolean is set final List list = packageManager.queryIntentActivitiesAsUser( - BROWSE_PROBE, PackageManager.MATCH_ALL, userId); + BROWSE_PROBE, 0 /* flags */, userId); if (list != null) { final Set addedPackages = new ArraySet<>(); for (ResolveInfo info : list) { @@ -181,13 +181,12 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont * 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 list = mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, - PackageManager.MATCH_ALL, userId); + final List list = getCandidates(mPackageManager, userId); // There is only 1 app, it must be the default browser. return list != null && list.size() == 1; } 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 0ef1cf35cf8..4a482d08d25 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 @@ package com.android.settings.applications.defaultapps; 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 @@ public class DefaultBrowserPreferenceControllerTest { @Test public void isBrowserDefault_onlyApp_shouldReturnTrue() { when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(null); + final List 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 @@ public class DefaultBrowserPreferenceControllerTest { 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; From a93743f9c4688200796c5aeb87949ec661be5acf Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 12 Sep 2018 15:27:03 -0700 Subject: [PATCH 4/9] Create custom card controller/render as soon as possible. Custom cards might need to monitor lifecycle events, waiting for onFinishLoading is too late. Also make sure custom cards cannot change card type. Test: manual Change-Id: Ib8f8e6e48926a63c9d241ed9e9843c025e3f634a --- .../homepage/ContextualCardManager.java | 25 +++++------ .../ConditionContextualCardController.java | 1 - .../ConditionalContextualCard.java | 15 ++++++- .../ConditionalContextualCardTest.java | 42 +++++++++++++++++++ .../ConditionContextualCardRendererTest.java | 1 - 5 files changed, 69 insertions(+), 15 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/homepage/ConditionalContextualCardTest.java diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java index 1eec6a7af98..8bb035550b8 100644 --- a/src/com/android/settings/homepage/ContextualCardManager.java +++ b/src/com/android/settings/homepage/ContextualCardManager.java @@ -20,6 +20,7 @@ import static com.android.settings.homepage.CardContentLoader.CARD_CONTENT_LOADE import android.content.Context; import android.os.Bundle; +import android.util.Log; import android.widget.BaseAdapter; import androidx.annotation.NonNull; @@ -60,12 +61,15 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade private ContextualCardUpdateListener mListener; - public ContextualCardManager(Context context, Lifecycle lifecycle) { mContext = context; mLifecycle = lifecycle; mContextualCards = new ArrayList<>(); mControllerRendererPool = new ControllerRendererPool(); + //for data provided by Settings + for (int cardType : SETTINGS_CARDS) { + setupController(cardType); + } } void loadContextualCards(PersonalSettingsFragment fragment) { @@ -82,22 +86,19 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade setupController(card.getCardType()); } } - - //for data provided by Settings - for (int cardType : SETTINGS_CARDS) { - setupController(cardType); - } } private void setupController(int cardType) { final ContextualCardController controller = mControllerRendererPool.getController(mContext, cardType); - if (controller != null) { - controller.setCardUpdateListener(this); - if (controller instanceof LifecycleObserver) { - if (mLifecycle != null) { - mLifecycle.addObserver((LifecycleObserver) controller); - } + if (controller == null) { + Log.w(TAG, "Cannot find ContextualCardController for type " + cardType); + return; + } + controller.setCardUpdateListener(this); + if (controller instanceof LifecycleObserver) { + if (mLifecycle != null) { + mLifecycle.addObserver((LifecycleObserver) controller); } } } diff --git a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java index 6701cfd0196..1db3dd3f9cc 100644 --- a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java +++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java @@ -96,7 +96,6 @@ public class ConditionContextualCardController implements ContextualCardControll .setActionText(condition.getActionText()) .setName(mContext.getPackageName() + "/" + condition.getTitle().toString()) - .setCardType(ContextualCard.CardType.CONDITIONAL) .setTitleText(condition.getTitle().toString()) .setSummaryText(condition.getSummary().toString()) .setIconDrawable(condition.getIcon()) diff --git a/src/com/android/settings/homepage/conditional/ConditionalContextualCard.java b/src/com/android/settings/homepage/conditional/ConditionalContextualCard.java index 62a4956efcd..828f90b76de 100644 --- a/src/com/android/settings/homepage/conditional/ConditionalContextualCard.java +++ b/src/com/android/settings/homepage/conditional/ConditionalContextualCard.java @@ -16,6 +16,8 @@ package com.android.settings.homepage.conditional; +import androidx.annotation.VisibleForTesting; + import com.android.settings.homepage.ContextualCard; /** @@ -38,6 +40,11 @@ public class ConditionalContextualCard extends ContextualCard { mActionText = builder.mActionText; } + @Override + public int getCardType() { + return CardType.CONDITIONAL; + } + public long getConditionId() { return mConditionId; } @@ -50,7 +57,7 @@ public class ConditionalContextualCard extends ContextualCard { return mActionText; } - static class Builder extends ContextualCard.Builder { + public static class Builder extends ContextualCard.Builder { private long mConditionId; private int mMetricsConstant; @@ -71,6 +78,12 @@ public class ConditionalContextualCard extends ContextualCard { return this; } + @Override + public Builder setCardType(int cardType) { + throw new IllegalArgumentException( + "Cannot change card type for " + getClass().getName()); + } + public ConditionalContextualCard build() { return new ConditionalContextualCard(this); } diff --git a/tests/robotests/src/com/android/settings/homepage/ConditionalContextualCardTest.java b/tests/robotests/src/com/android/settings/homepage/ConditionalContextualCardTest.java new file mode 100644 index 00000000000..ced8b0691a8 --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/ConditionalContextualCardTest.java @@ -0,0 +1,42 @@ +/* + * 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.homepage; + +import static com.google.common.truth.Truth.assertThat; + +import com.android.settings.homepage.conditional.ConditionalContextualCard; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ConditionalContextualCardTest { + + @Test(expected = IllegalArgumentException.class) + public void newInstance_changeCardType_shouldCrash() { + new ConditionalContextualCard.Builder() + .setCardType(ContextualCard.CardType.SUGGESTION) + .build(); + } + + @Test + public void getCardType_shouldAlwaysBeConditional() { + assertThat(new ConditionalContextualCard.Builder().build().getCardType()) + .isEqualTo(ContextualCard.CardType.CONDITIONAL); + } +} diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java index 1ee052d20d2..dc56a7f16c0 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java @@ -101,7 +101,6 @@ public class ConditionContextualCardRendererTest { .setMetricsConstant(1) .setActionText("test_action") .setName("test_name") - .setCardType(ContextualCard.CardType.CONDITIONAL) .setTitleText("test_title") .setSummaryText("test_summary") .setIconDrawable(mContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp)) From 7217c4421f27ac7cf1339947d9a0d7c039c03c38 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 7 Sep 2018 15:00:49 -0400 Subject: [PATCH 5/9] Prevent non-blockable app from being blocked In the recent notifications display. Test: manual Change-Id: I0b14dfbcb8c4a971bb028def7751d083d37958de Fixes: 111863327 --- .../notification/NotificationBackend.java | 6 ++++ ...centNotifyingAppsPreferenceController.java | 16 +-------- ...NotifyingAppsPreferenceControllerTest.java | 34 ++----------------- 3 files changed, 9 insertions(+), 47 deletions(-) diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 01f12283773..03b4ec30264 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -78,6 +78,12 @@ public class NotificationBackend { return row; } + public boolean isBlockable(Context context, ApplicationInfo info) { + final boolean blocked = getNotificationsBanned(info.packageName, info.uid); + final boolean systemApp = isSystemApp(context, info); + return !systemApp || (systemApp && blocked); + } + public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) { final AppRow row = loadAppRow(context, pm, app.applicationInfo); recordCanBeBlocked(context, pm, app, row); diff --git a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java index a027aec7e1c..bbc01f50104 100644 --- a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java +++ b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java @@ -82,17 +82,6 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC private Preference mSeeAllPref; private Preference mDivider; - static { - SKIP_SYSTEM_PACKAGES.addAll(Arrays.asList( - "android", - "com.android.phone", - "com.android.settings", - "com.android.systemui", - "com.android.providers.calendar", - "com.android.providers.media" - )); - } - public RecentNotifyingAppsPreferenceController(Context context, NotificationBackend backend, Application app, Fragment host) { this(context, backend, app == null ? null : ApplicationsState.getInstance(app), host); @@ -226,6 +215,7 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC .setSourceMetricsCategory( MetricsProto.MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS) .toIntent()); + pref.setEnabled(mNotificationBackend.isBlockable(mContext, appEntry.info)); pref.setOnPreferenceChangeListener((preference, newValue) -> { boolean blocked = !(Boolean) newValue; mNotificationBackend.setNotificationsEnabledForPackage( @@ -272,10 +262,6 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC * Whether or not the app should be included in recent list. */ private boolean shouldIncludePkgInRecents(String pkgName) { - if (SKIP_SYSTEM_PACKAGES.contains(pkgName)) { - Log.d(TAG, "System package, skipping " + pkgName); - return false; - } final Intent launchIntent = new Intent().addCategory(Intent.CATEGORY_LAUNCHER) .setPackage(pkgName); diff --git a/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java index cbc51a99769..e222b20551c 100644 --- a/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java @@ -189,9 +189,8 @@ public class RecentNotifyingAppsPreferenceControllerTest { mController.displayPreference(mScreen); verify(mCategory).setTitle(R.string.recent_notifications); - // Only add app1. app2 is skipped because of the package name, app3 skipped because - // it's invalid app. - verify(mCategory, times(1)).addPreference(any(Preference.class)); + // Only add app1 & app2. app3 skipped because it's invalid app. + verify(mCategory, times(2)).addPreference(any(Preference.class)); verify(mSeeAllPref).setSummary(null); verify(mSeeAllPref).setIcon(R.drawable.ic_chevron_right_24dp); @@ -246,35 +245,6 @@ public class RecentNotifyingAppsPreferenceControllerTest { assertThat(prefs.get(0).getKey()).isEqualTo(app2.getPackage()); } - @Test - public void display_hasRecentButNoneDisplayable_showAppInfo() { - final List apps = new ArrayList<>(); - final NotifyingApp app1 = new NotifyingApp() - .setPackage("com.android.phone") - .setLastNotified(System.currentTimeMillis()); - final NotifyingApp app2 = new NotifyingApp() - .setPackage("com.android.settings") - .setLastNotified(System.currentTimeMillis()); - apps.add(app1); - apps.add(app2); - - // app1, app2 are not displayable - when(mAppState.getEntry(app1.getPackage(), UserHandle.myUserId())) - .thenReturn(mock(ApplicationsState.AppEntry.class)); - when(mAppState.getEntry(app2.getPackage(), UserHandle.myUserId())) - .thenReturn(mock(ApplicationsState.AppEntry.class)); - when(mPackageManager.resolveActivity(any(Intent.class), anyInt())).thenReturn( - new ResolveInfo()); - when(mBackend.getRecentApps()).thenReturn(apps); - - mController.displayPreference(mScreen); - - verify(mCategory, never()).addPreference(any(Preference.class)); - verify(mCategory).setTitle(null); - verify(mSeeAllPref).setTitle(R.string.notifications_title); - verify(mSeeAllPref).setIcon(null); - } - @Test public void display_showRecents_formatSummary() { final List apps = new ArrayList<>(); From 29aaf62410e63d1de4c5d8558e8c661a7a15a273 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 13 Sep 2018 12:55:07 -0700 Subject: [PATCH 6/9] Only replace updated cards after loading from db. There are currently 2 ways a list of contextual cards can be updated: 1. through loader onFinishLoading 2. onContextualCardUpdated We need to make the data handling logic consistent between the 2 paths. Also changed some loops to stream for simplicity. Change-Id: I242732e180a14092f5745271e5f63c18a6e482e0 Fixes: 115572494 Test: robotests --- .../settings/homepage/ContextualCard.java | 4 +- .../homepage/ContextualCardManager.java | 63 ++++++++++--------- .../ContextualCardUpdateListener.java | 2 +- .../homepage/ContextualCardsAdapter.java | 2 +- .../ConditionContextualCardController.java | 2 +- 5 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/com/android/settings/homepage/ContextualCard.java b/src/com/android/settings/homepage/ContextualCard.java index 174a4372078..5bd265b398d 100644 --- a/src/com/android/settings/homepage/ContextualCard.java +++ b/src/com/android/settings/homepage/ContextualCard.java @@ -33,10 +33,10 @@ public class ContextualCard { /** * Flags indicating the type of the ContextualCard. */ - @IntDef({CardType.INVALID, CardType.SLICE, CardType.SUGGESTION, CardType.CONDITIONAL}) + @IntDef({CardType.DEFAULT, CardType.SLICE, CardType.SUGGESTION, CardType.CONDITIONAL}) @Retention(RetentionPolicy.SOURCE) public @interface CardType { - int INVALID = -1; + int DEFAULT = 0; int SLICE = 1; int SUGGESTION = 2; int CONDITIONAL = 3; diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java index 8bb035550b8..b9aa7920e6f 100644 --- a/src/com/android/settings/homepage/ContextualCardManager.java +++ b/src/com/android/settings/homepage/ContextualCardManager.java @@ -33,6 +33,8 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * This is a centralized manager of multiple {@link ContextualCardController}. @@ -58,13 +60,15 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade private final ControllerRendererPool mControllerRendererPool; private final Lifecycle mLifecycle; private final List mContextualCards; + private final List mLifecycleObservers; private ContextualCardUpdateListener mListener; - public ContextualCardManager(Context context, Lifecycle lifecycle) { + public ContextualCardManager(Context context, @NonNull Lifecycle lifecycle) { mContext = context; mLifecycle = lifecycle; mContextualCards = new ArrayList<>(); + mLifecycleObservers = new ArrayList<>(); mControllerRendererPool = new ControllerRendererPool(); //for data provided by Settings for (int cardType : SETTINGS_CARDS) { @@ -81,10 +85,8 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade } private void loadCardControllers() { - if (mContextualCards != null) { - for (ContextualCard card : mContextualCards) { - setupController(card.getCardType()); - } + for (ContextualCard card : mContextualCards) { + setupController(card.getCardType()); } } @@ -96,53 +98,52 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade return; } controller.setCardUpdateListener(this); - if (controller instanceof LifecycleObserver) { - if (mLifecycle != null) { - mLifecycle.addObserver((LifecycleObserver) controller); - } + if (controller instanceof LifecycleObserver && !mLifecycleObservers.contains(controller)) { + mLifecycleObservers.add((LifecycleObserver) controller); + mLifecycle.addObserver((LifecycleObserver) controller); } } //TODO(b/111822376): implement sorting mechanism. - private void sortCards() { + private void sortCards(List cards) { //take mContextualCards as the source and do the ranking based on the rule. } @Override - public void onContextualCardUpdated(int cardType, List updateList) { + public void onContextualCardUpdated(List updateList) { //TODO(b/112245748): Should implement a DiffCallback. //Keep the old list for comparison. final List prevCards = mContextualCards; - //Remove the existing data that matches the certain cardType so as to insert the new data. - for (int i = mContextualCards.size() - 1; i >= 0; i--) { - if (mContextualCards.get(i).getCardType() == cardType) { - mContextualCards.remove(i); - } - } + final Set cardTypes = updateList + .stream() + .map(card -> card.getCardType()) + .collect(Collectors.toSet()); + //Remove the existing data that matches the certain cardType before inserting new data. + final List cardsToKeep = mContextualCards + .stream() + .filter(card -> !cardTypes.contains(card.getCardType())) + .collect(Collectors.toList()); + final List allCards = new ArrayList<>(); + allCards.addAll(cardsToKeep); + allCards.addAll(updateList); - //Append the new data - mContextualCards.addAll(updateList); + sortCards(allCards); - sortCards(); + //replace with the new data + mContextualCards.clear(); + mContextualCards.addAll(allCards); + + loadCardControllers(); if (mListener != null) { - mListener.onContextualCardUpdated(ContextualCard.CardType.INVALID, mContextualCards); + mListener.onContextualCardUpdated(mContextualCards); } } @Override public void onFinishCardLoading(List contextualCards) { - mContextualCards.clear(); - if (contextualCards != null) { - mContextualCards.addAll(contextualCards); - } - - //Force card sorting here in case CardControllers of custom view have nothing to update - // for the first launch. - sortCards(); - - loadCardControllers(); + onContextualCardUpdated(contextualCards); } void setListener(ContextualCardUpdateListener listener) { diff --git a/src/com/android/settings/homepage/ContextualCardUpdateListener.java b/src/com/android/settings/homepage/ContextualCardUpdateListener.java index d307a8f563b..812c4cea4f3 100644 --- a/src/com/android/settings/homepage/ContextualCardUpdateListener.java +++ b/src/com/android/settings/homepage/ContextualCardUpdateListener.java @@ -27,5 +27,5 @@ import java.util.List; * ContextualCardsAdapter} in this case. */ public interface ContextualCardUpdateListener { - void onContextualCardUpdated(int cardType, List updateList); + void onContextualCardUpdated(List updateList); } \ No newline at end of file diff --git a/src/com/android/settings/homepage/ContextualCardsAdapter.java b/src/com/android/settings/homepage/ContextualCardsAdapter.java index 53a47e0fb0d..402212f020e 100644 --- a/src/com/android/settings/homepage/ContextualCardsAdapter.java +++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java @@ -101,7 +101,7 @@ public class ContextualCardsAdapter extends RecyclerView.Adapter contextualCards) { + public void onContextualCardUpdated(List contextualCards) { //TODO(b/112245748): Should implement a DiffCallback so we can use notifyItemChanged() // instead. if (contextualCards == null) { diff --git a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java index 1db3dd3f9cc..adac8ebcfc4 100644 --- a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java +++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java @@ -58,7 +58,7 @@ public class ConditionContextualCardController implements ContextualCardControll @Override public void onDataUpdated(List cardList) { - mListener.onContextualCardUpdated(getCardType(), cardList); + mListener.onContextualCardUpdated(cardList); } @Override From 0c6f8065c2846dd7d0a3bfcc1ea1e8549896a521 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Thu, 13 Sep 2018 13:46:16 -0700 Subject: [PATCH 7/9] Fix bug in Add network fragment After we switch secutiry from EAP to WPA, add button will become disabled forever. Main reason is that we use view visibility to decide which security type it is. In this case target view is visible while its parent view is gone. So even though UI shows correctly however we still think it is in EAP mode. This CL check the mAccessPointSecurity directly instead of depending on fragile view. Fixes: 114689178 Test: RunSettingsRoboTests Change-Id: I4284d25e6bf86ee7c5e7c0e17f0834c719d8d587 --- .../settings/wifi/WifiConfigController.java | 9 +++------ .../settings/wifi/WifiConfigControllerTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index de67c10baac..2e6611fc185 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -465,8 +465,7 @@ public class WifiConfigController implements TextWatcher, } else { enabled = ipAndProxyFieldsAreValid(); } - if (mEapCaCertSpinner != null - && mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) { + if (mAccessPointSecurity == AccessPoint.SECURITY_EAP) { String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem(); if (caCertSelection.equals(mUnspecifiedCertString)) { // Disallow submit if the user has not selected a CA certificate for an EAP network @@ -482,10 +481,8 @@ public class WifiConfigController implements TextWatcher, enabled = false; } } - if (mEapUserCertSpinner != null - && mView.findViewById(R.id.l_user_cert).getVisibility() != View.GONE - && ((String) mEapUserCertSpinner.getSelectedItem()) - .equals(mUnspecifiedCertString)) { + if (mAccessPointSecurity == AccessPoint.SECURITY_EAP + && mEapUserCertSpinner.getSelectedItem().equals(mUnspecifiedCertString)) { // Disallow submit if the user has not selected a user certificate for an EAP network // configuration. enabled = false; diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java index 5e8dd28ba1f..54be773d75e 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java @@ -183,6 +183,22 @@ public class WifiConfigControllerTest { mController.isSubmittable(); } + @Test + public void isSubmittable_EapToPskWithValidPassword_shouldReturnTrue() { + final TextView password = mView.findViewById(R.id.password); + final Spinner securitySpinner = mView.findViewById(R.id.security); + assertThat(password).isNotNull(); + assertThat(securitySpinner).isNotNull(); + when(mAccessPoint.isSaved()).thenReturn(true); + + // Change it from EAP to PSK + mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_EAP, 0); + mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_PSK, 0); + password.setText(GOOD_PSK); + + assertThat(mController.isSubmittable()).isTrue(); + } + @Test public void getSignalString_notReachable_shouldHaveNoSignalString() { when(mAccessPoint.isReachable()).thenReturn(false); From 45fc707474d8bebde19393380c2d355a3682c7c0 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 14 Sep 2018 10:42:14 -0700 Subject: [PATCH 8/9] Fix a bug where custom cards are not refresh when removed When the last custom card for a specific type is removed, onContextualCardUpdated should receive the cardtype info so we can remove it from main data set. - Reverted onContextualCardUpdated method signature back to before - Force ConditionContextualCardController to send an empty list if everything is removed. * Note: the update logic is pretty complicated to handle add/update/remove all together. In the future we should consider spliting the removal logic to simplify this area. Change-Id: Ied688deb693ec33e0017be02cf5c743a754a6e61 Fixes: 115572494 Test: visual --- .../homepage/ContextualCardController.java | 8 ------- .../homepage/ContextualCardManager.java | 23 +++++++++++-------- .../ContextualCardUpdateListener.java | 16 ++++++++----- .../homepage/ContextualCardsAdapter.java | 4 +++- .../ConditionContextualCardController.java | 11 ++++----- ...ConditionContextualCardControllerTest.java | 4 ++-- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/com/android/settings/homepage/ContextualCardController.java b/src/com/android/settings/homepage/ContextualCardController.java index 4a7a1498bf5..e47f70ce397 100644 --- a/src/com/android/settings/homepage/ContextualCardController.java +++ b/src/com/android/settings/homepage/ContextualCardController.java @@ -16,8 +16,6 @@ package com.android.settings.homepage; -import java.util.List; - /** * Data controller for {@link ContextualCard}. */ @@ -26,12 +24,6 @@ public interface ContextualCardController { @ContextualCard.CardType int getCardType(); - /** - * When data is updated or changed, the new data should be passed to ContextualCardManager for - * list updating. - */ - void onDataUpdated(List cardList); - void onPrimaryClick(ContextualCard card); void onActionClick(ContextualCard card); diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java index b9aa7920e6f..87b048ea959 100644 --- a/src/com/android/settings/homepage/ContextualCardManager.java +++ b/src/com/android/settings/homepage/ContextualCardManager.java @@ -18,8 +18,11 @@ package com.android.settings.homepage; import static com.android.settings.homepage.CardContentLoader.CARD_CONTENT_LOADER_ID; +import static java.util.stream.Collectors.groupingBy; + import android.content.Context; import android.os.Bundle; +import android.util.ArrayMap; import android.util.Log; import android.widget.BaseAdapter; @@ -33,6 +36,7 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -110,15 +114,12 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade } @Override - public void onContextualCardUpdated(List updateList) { + public void onContextualCardUpdated(Map> updateList) { //TODO(b/112245748): Should implement a DiffCallback. //Keep the old list for comparison. final List prevCards = mContextualCards; - final Set cardTypes = updateList - .stream() - .map(card -> card.getCardType()) - .collect(Collectors.toSet()); + final Set cardTypes = updateList.keySet(); //Remove the existing data that matches the certain cardType before inserting new data. final List cardsToKeep = mContextualCards .stream() @@ -126,10 +127,10 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade .collect(Collectors.toList()); final List allCards = new ArrayList<>(); allCards.addAll(cardsToKeep); - allCards.addAll(updateList); + allCards.addAll( + updateList.values().stream().flatMap(List::stream).collect(Collectors.toList())); sortCards(allCards); - //replace with the new data mContextualCards.clear(); mContextualCards.addAll(allCards); @@ -137,13 +138,15 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade loadCardControllers(); if (mListener != null) { - mListener.onContextualCardUpdated(mContextualCards); + final Map> cardsToUpdate = new ArrayMap<>(); + cardsToUpdate.put(ContextualCard.CardType.DEFAULT, mContextualCards); + mListener.onContextualCardUpdated(cardsToUpdate); } } @Override - public void onFinishCardLoading(List contextualCards) { - onContextualCardUpdated(contextualCards); + public void onFinishCardLoading(List cards) { + onContextualCardUpdated(cards.stream().collect(groupingBy(ContextualCard::getCardType))); } void setListener(ContextualCardUpdateListener listener) { diff --git a/src/com/android/settings/homepage/ContextualCardUpdateListener.java b/src/com/android/settings/homepage/ContextualCardUpdateListener.java index 812c4cea4f3..60dd3a7147a 100644 --- a/src/com/android/settings/homepage/ContextualCardUpdateListener.java +++ b/src/com/android/settings/homepage/ContextualCardUpdateListener.java @@ -17,15 +17,19 @@ package com.android.settings.homepage; import java.util.List; +import java.util.Map; /** * When {@link ContextualCardController} detects changes, it will notify the listeners registered. - * In our case, {@link ContextualCardManager} gets noticed. - * - * After the list of {@link ContextualCard} gets updated in{@link ContextualCardManager}, - * {@link ContextualCardManager} will notify the listeners registered, {@link - * ContextualCardsAdapter} in this case. */ public interface ContextualCardUpdateListener { - void onContextualCardUpdated(List updateList); + + /** + * Called when a set of cards are updated. + * + * @param cards A map of updates grouped by {@link ContextualCard.CardType}. Values can be + * null, which means all cards from corresponding {@link + * ContextualCard.CardType} are removed. + */ + void onContextualCardUpdated(Map> cards); } \ No newline at end of file diff --git a/src/com/android/settings/homepage/ContextualCardsAdapter.java b/src/com/android/settings/homepage/ContextualCardsAdapter.java index 402212f020e..9ab88936790 100644 --- a/src/com/android/settings/homepage/ContextualCardsAdapter.java +++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java @@ -26,6 +26,7 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; +import java.util.Map; public class ContextualCardsAdapter extends RecyclerView.Adapter implements ContextualCardUpdateListener { @@ -101,7 +102,8 @@ public class ContextualCardsAdapter extends RecyclerView.Adapter contextualCards) { + public void onContextualCardUpdated(Map> cards) { + final List contextualCards = cards.get(ContextualCard.CardType.DEFAULT); //TODO(b/112245748): Should implement a DiffCallback so we can use notifyItemChanged() // instead. if (contextualCards == null) { diff --git a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java index adac8ebcfc4..fbbab14ca3e 100644 --- a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java +++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java @@ -17,6 +17,7 @@ package com.android.settings.homepage.conditional; import android.content.Context; +import android.util.ArrayMap; import com.android.settings.homepage.ContextualCard; import com.android.settings.homepage.ContextualCardController; @@ -27,6 +28,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * This controller triggers the loading of conditional cards and monitors state changes to @@ -56,11 +58,6 @@ public class ConditionContextualCardController implements ContextualCardControll return ContextualCard.CardType.CONDITIONAL; } - @Override - public void onDataUpdated(List cardList) { - mListener.onContextualCardUpdated(cardList); - } - @Override public void onStart() { mConditionManager.startMonitoringStateChange(); @@ -105,7 +102,9 @@ public class ConditionContextualCardController implements ContextualCardControll } if (mListener != null) { - onDataUpdated(conditionCards); + final Map> conditionalCards = new ArrayMap<>(); + conditionalCards.put(ContextualCard.CardType.CONDITIONAL, conditionCards); + mListener.onContextualCardUpdated(conditionalCards); } } } diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java index ed45ce7480d..a59a3bc2462 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java @@ -82,7 +82,7 @@ public class ConditionContextualCardControllerTest { mController.onConditionsChanged(); - verify(mController).onDataUpdated(any()); + verify(mListener).onContextualCardUpdated(any()); } @Test @@ -94,7 +94,7 @@ public class ConditionContextualCardControllerTest { mController.onConditionsChanged(); - verify(mController, never()).onDataUpdated(any()); + verify(mListener, never()).onContextualCardUpdated(any()); } private class FakeConditionalCard implements ConditionalCard { From 30ed7c7c72d13ab7a93ed7cd0a065b83f8475127 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Thu, 13 Sep 2018 15:22:03 -0700 Subject: [PATCH 9/9] Follow up comments to 0cdc103e8287d3bd01944cdd2afb5c11897998fe. Bug: 74763823 Test: Manually check; sending an Intent with package:// scheme works, if originated from app of same cert. Change-Id: I8206197c2147cc91ef72ad89f330320781428bb9 --- AndroidManifest.xml | 6 +++--- ...aultPage.java => InstalledAppOpenByDefaultActivity.java} | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/com/android/settings/applications/{InstalledAppOpenByDefaultPage.java => InstalledAppOpenByDefaultActivity.java} (93%) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c8d9afff9ef..71840b1ff09 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1128,12 +1128,12 @@ - - + diff --git a/src/com/android/settings/applications/InstalledAppOpenByDefaultPage.java b/src/com/android/settings/applications/InstalledAppOpenByDefaultActivity.java similarity index 93% rename from src/com/android/settings/applications/InstalledAppOpenByDefaultPage.java rename to src/com/android/settings/applications/InstalledAppOpenByDefaultActivity.java index 40eef25840c..cd30d792efd 100644 --- a/src/com/android/settings/applications/InstalledAppOpenByDefaultPage.java +++ b/src/com/android/settings/applications/InstalledAppOpenByDefaultActivity.java @@ -20,7 +20,7 @@ import android.content.Intent; import com.android.settings.SettingsActivity; -public class InstalledAppOpenByDefaultPage extends SettingsActivity { +public class InstalledAppOpenByDefaultActivity extends SettingsActivity { @Override public Intent getIntent() {