Merge "Use a configurable default if the setting has never been set."
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 3817730..94e73fa 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -48,7 +48,6 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.accessibility.AccessibilityUtil.AccessibilityServiceFragmentType;
-import com.android.settings.accessibility.AccessibilityUtil.State;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.display.DarkUIPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -75,6 +74,8 @@
     // Index of the first preference in a preference category.
     private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
 
+    private static final String EMPTY_STRING = "";
+
     // Preference categories
     private static final String CATEGORY_SCREEN_READER = "screen_reader_category";
     private static final String CATEGORY_AUDIO_AND_CAPTIONS = "audio_and_captions_category";
@@ -255,22 +256,22 @@
     }
 
     public static CharSequence getServiceSummary(Context context, AccessibilityServiceInfo info,
-            @State int state) {
+            boolean serviceEnabled) {
         final CharSequence serviceSummary = info.loadSummary(context.getPackageManager());
-        if (state == State.UNKNOWN) {
-            return serviceSummary;
+        final int fragmentType = AccessibilityUtil.getAccessibilityServiceFragmentType(info);
+
+        if (fragmentType == AccessibilityServiceFragmentType.INVISIBLE) {
+            return TextUtils.isEmpty(serviceSummary) ? EMPTY_STRING : serviceSummary;
         }
 
-        final String serviceState = (state == State.ON)
+        final String serviceState = serviceEnabled
                 ? context.getString(R.string.accessibility_summary_state_enabled)
                 : context.getString(R.string.accessibility_summary_state_disabled);
         final String stateSummaryCombo = context.getString(
                 R.string.preference_summary_default_combination,
                 serviceState, serviceSummary);
 
-        return (TextUtils.isEmpty(serviceSummary))
-                ? serviceState
-                : stateSummaryCombo;
+        return (TextUtils.isEmpty(serviceSummary)) ? serviceState : stateSummaryCombo;
 
     }
 
@@ -377,18 +378,13 @@
                 description = getString(R.string.accessibility_service_default_description);
             }
 
-            final int fragmentType = AccessibilityUtil.getAccessibilityServiceFragmentType(info);
             if (serviceEnabled && info.crashed) {
                 // Update the summaries for services that have crashed.
                 preference.setSummary(R.string.accessibility_summary_state_stopped);
                 description = getString(R.string.accessibility_description_state_stopped);
             } else {
-                int serviceState = serviceEnabled ? State.ON : State.OFF;
-                if (fragmentType == AccessibilityServiceFragmentType.INVISIBLE) {
-                    serviceState = State.UNKNOWN;
-                }
                 final CharSequence serviceSummary = getServiceSummary(getContext(), info,
-                        serviceState);
+                        serviceEnabled);
                 preference.setSummary(serviceSummary);
             }
 
@@ -408,6 +404,7 @@
                 preference.setEnabled(true);
             }
 
+            final int fragmentType = AccessibilityUtil.getAccessibilityServiceFragmentType(info);
             switch (fragmentType) {
                 case AccessibilityServiceFragmentType.LEGACY:
                     preference.setFragment(
diff --git a/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java b/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java
index 17c6016..ca3befa 100644
--- a/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java
@@ -18,7 +18,6 @@
 
 import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
 import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
-import static com.android.settings.accessibility.AccessibilityUtil.State.UNKNOWN;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.content.ComponentName;
@@ -27,7 +26,6 @@
 import android.provider.Settings;
 import android.view.accessibility.AccessibilityManager;
 
-import com.android.settings.accessibility.AccessibilityUtil.AccessibilityServiceFragmentType;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.accessibility.AccessibilityUtils;
 
@@ -59,13 +57,9 @@
     @Override
     public CharSequence getSummary() {
         final AccessibilityServiceInfo serviceInfo = getAccessibilityServiceInfo();
-        int serviceState = isChecked() ? ON : OFF;
-        if (AccessibilityUtil.getAccessibilityServiceFragmentType(serviceInfo)
-                == AccessibilityServiceFragmentType.INVISIBLE) {
-            serviceState = UNKNOWN;
-        }
+
         return serviceInfo == null ? EMPTY_STRING : AccessibilitySettings.getServiceSummary(
-                mContext, serviceInfo, serviceState);
+                mContext, serviceInfo, isChecked());
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java
index 6159f92..8da6fbb 100644
--- a/src/com/android/settings/accessibility/AccessibilityUtil.java
+++ b/src/com/android/settings/accessibility/AccessibilityUtil.java
@@ -98,7 +98,6 @@
     /** Denotes the accessibility enabled status */
     @Retention(RetentionPolicy.SOURCE)
     public @interface State {
-        int UNKNOWN = -1;
         int OFF = 0;
         int ON = 1;
     }
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index e58846c..19a0f2b 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -142,6 +142,9 @@
         final SwitchBar switchBar = activity.getSwitchBar();
         switchBar.hide();
 
+        // Need to be called as early as possible. Protected variables will be assigned here.
+        onProcessArguments(getArguments());
+
         PreferenceScreen preferenceScreen = getPreferenceScreen();
         if (mImageUri != null) {
             final AnimatedImagePreference animatedImagePreference = new AnimatedImagePreference(
@@ -153,9 +156,13 @@
 
         mToggleServiceDividerSwitchPreference = new DividerSwitchPreference(getPrefContext());
         mToggleServiceDividerSwitchPreference.setKey(KEY_USE_SERVICE_PREFERENCE);
+        if (getArguments().containsKey(AccessibilitySettings.EXTRA_CHECKED)) {
+            final boolean enabled = getArguments().getBoolean(AccessibilitySettings.EXTRA_CHECKED);
+            mToggleServiceDividerSwitchPreference.setChecked(enabled);
+        }
+
         preferenceScreen.addPreference(mToggleServiceDividerSwitchPreference);
 
-        onProcessArguments(getArguments());
         updateToggleServiceTitle(mToggleServiceDividerSwitchPreference);
 
         final PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
@@ -343,12 +350,6 @@
         // Key.
         mPreferenceKey = arguments.getString(AccessibilitySettings.EXTRA_PREFERENCE_KEY);
 
-        // Enabled.
-        if (arguments.containsKey(AccessibilitySettings.EXTRA_CHECKED)) {
-            final boolean enabled = arguments.getBoolean(AccessibilitySettings.EXTRA_CHECKED);
-            mToggleServiceDividerSwitchPreference.setChecked(enabled);
-        }
-
         // Title.
         if (arguments.containsKey(AccessibilitySettings.EXTRA_RESOLVE_INFO)) {
             ResolveInfo info = arguments.getParcelable(AccessibilitySettings.EXTRA_RESOLVE_INFO);
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCard.java b/src/com/android/settings/homepage/contextualcards/ContextualCard.java
index 0269c0e..262cd2f 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCard.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCard.java
@@ -115,10 +115,6 @@
         return mIsLargeCard;
     }
 
-    boolean isCustomCard() {
-        return TextUtils.isEmpty(mSliceUri);
-    }
-
     public int getViewType() {
         return mViewType;
     }
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index 17a226d..40df224 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -112,9 +112,7 @@
             if (cursor.getCount() > 0) {
                 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 if (isLargeCard(card)) {
+                    if (isLargeCard(card)) {
                         result.add(card.mutate().setIsLargeCard(true).build());
                     } else {
                         result.add(card);
diff --git a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
index 8558ee7..0fcde26 100644
--- a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
+++ b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
@@ -88,9 +88,6 @@
         if (card.getRankingScore() < 0) {
             return false;
         }
-        if (card.isCustomCard()) {
-            return true;
-        }
 
         final Uri uri = card.getSliceUri();
         if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
diff --git a/src/com/android/settings/notification/history/NotificationHistoryAdapter.java b/src/com/android/settings/notification/history/NotificationHistoryAdapter.java
index 87804d5..4448dee 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryAdapter.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryAdapter.java
@@ -63,7 +63,8 @@
         holder.setTitle(hn.getTitle());
         holder.setSummary(hn.getText());
         holder.setPostedTime(hn.getPostedTimeMs());
-        holder.addOnClick(hn.getPackage(), hn.getUserId(), hn.getChannelId());
+        holder.addOnClick(hn.getPackage(), hn.getUserId(), hn.getChannelId(),
+                hn.getConversationId());
     }
 
     @Override
diff --git a/src/com/android/settings/notification/history/NotificationHistoryViewHolder.java b/src/com/android/settings/notification/history/NotificationHistoryViewHolder.java
index e7caa6a..d1f47af 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryViewHolder.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryViewHolder.java
@@ -18,6 +18,7 @@
 
 import static android.provider.Settings.EXTRA_APP_PACKAGE;
 import static android.provider.Settings.EXTRA_CHANNEL_ID;
+import static android.provider.Settings.EXTRA_CONVERSATION_ID;
 
 import android.content.Intent;
 import android.os.UserHandle;
@@ -61,11 +62,12 @@
         mTime.setTime(postedTime);
     }
 
-    void addOnClick(String pkg, int userId, String channelId) {
+    void addOnClick(String pkg, int userId, String channelId, String conversationId) {
         itemView.setOnClickListener(v -> {
             Intent intent =  new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
                     .putExtra(EXTRA_APP_PACKAGE, pkg)
-                    .putExtra(EXTRA_CHANNEL_ID, channelId);
+                    .putExtra(EXTRA_CHANNEL_ID, channelId)
+                    .putExtra(EXTRA_CONVERSATION_ID, conversationId);
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             itemView.getContext().startActivityAsUser(intent, UserHandle.of(userId));
         });
diff --git a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
index ce036d2..852f286 100644
--- a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
+++ b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
@@ -20,6 +20,7 @@
 import android.os.Bundle;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.EventLog;
 import android.util.Log;
 
 import com.android.settings.bluetooth.BluetoothSliceBuilder;
@@ -73,6 +74,11 @@
 
     private static Uri parse(Uri uri) {
         final String sliceParameter = uri.getQueryParameter(EXTRA_SLICE);
-        return TextUtils.isEmpty(sliceParameter) ? null : Uri.parse(sliceParameter);
+        if (TextUtils.isEmpty(sliceParameter)) {
+            EventLog.writeEvent(0x534e4554, "122836081", -1, "");
+            return null;
+        } else {
+            return Uri.parse(sliceParameter);
+        }
     }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceControllerTest.java
index 6d0d964..53f6cc0 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceControllerTest.java
@@ -18,7 +18,6 @@
 
 import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
 import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
-import static com.android.settings.accessibility.AccessibilityUtil.State.UNKNOWN;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -77,7 +76,7 @@
         mController.setChecked(true);
 
         assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(),
-                Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, UNKNOWN,
+                Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, OFF,
                 UserHandle.USER_CURRENT)).isEqualTo(ON);
     }
 
@@ -86,7 +85,7 @@
         mController.setChecked(false);
 
         assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(),
-                Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, UNKNOWN,
+                Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, ON,
                 UserHandle.USER_CURRENT)).isEqualTo(OFF);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
index 3777920..23ae2f3 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
@@ -76,18 +76,6 @@
     }
 
     @Test
-    public void isCardEligibleToDisplay_customCard_returnTrue() {
-        final ContextualCard customCard = new ContextualCard.Builder()
-                .setName("custom_card")
-                .setCardType(ContextualCard.CardType.DEFAULT)
-                .setTitleText("custom_title")
-                .setSummaryText("custom_summary")
-                .build();
-
-        assertThat(mEligibleCardChecker.isCardEligibleToDisplay(customCard)).isTrue();
-    }
-
-    @Test
     public void isCardEligibleToDisplay_invalidScheme_returnFalse() {
         final Uri sliceUri = Uri.parse("contet://com.android.settings.slices/action/flashlight");