diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
index 1564b9f..92744ae 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
@@ -20,15 +20,14 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.service.settings.suggestions.Suggestion;
-import android.util.Pair;
+
+import androidx.annotation.NonNull;
 
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.suggestions.SuggestionControllerMixinCompat;
 
 import java.util.List;
 
-import androidx.annotation.NonNull;
-
 /** Interface should be implemented if you have added new suggestions */
 public interface SuggestionFeatureProvider {
 
@@ -42,11 +41,6 @@
      */
     ComponentName getSuggestionServiceComponent();
 
-    /**
-     * Returns true if smart suggestion should be used instead of xml based SuggestionParser.
-     */
-    boolean isSmartSuggestionEnabled(Context context);
-
     /** Return true if the suggestion has already been completed and does not need to be shown */
     boolean isSuggestionComplete(Context context, @NonNull ComponentName suggestion);
 
@@ -65,9 +59,4 @@
      */
     void dismissSuggestion(Context context, SuggestionControllerMixinCompat suggestionMixin,
             Suggestion suggestion);
-
-    /**
-     * Returns common tagged data for suggestion logging.
-     */
-    Pair<Integer, Object>[] getLoggingTaggedData(Context context);
 }
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index e1cf1a3..4dd0a5c 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -22,10 +22,10 @@
 import android.content.SharedPreferences;
 import android.service.settings.suggestions.Suggestion;
 import android.util.Log;
-import android.util.Pair;
+
+import androidx.annotation.NonNull;
 
 import com.android.internal.logging.nano.MetricsProto;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.Settings.NightDisplaySuggestionActivity;
 import com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity;
 import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
@@ -42,8 +42,6 @@
 
 import java.util.List;
 
-import androidx.annotation.NonNull;
-
 public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider {
 
     private static final String TAG = "SuggestionFeature";
@@ -68,11 +66,6 @@
     }
 
     @Override
-    public boolean isSmartSuggestionEnabled(Context context) {
-        return false;
-    }
-
-    @Override
     public boolean isSuggestionComplete(Context context, @NonNull ComponentName component) {
         final String className = component.getClassName();
         if (className.equals(WallpaperSuggestionActivity.class.getName())) {
@@ -126,12 +119,4 @@
                 suggestion.getId());
         mixin.dismissSuggestion(suggestion);
     }
-
-    @Override
-    public Pair<Integer, Object>[] getLoggingTaggedData(Context context) {
-        final boolean isSmartSuggestionEnabled = isSmartSuggestionEnabled(context);
-        return new Pair[] {Pair.create(
-                MetricsEvent.FIELD_SETTINGS_SMART_SUGGESTIONS_ENABLED,
-                isSmartSuggestionEnabled ? 1 : 0)};
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
index 70fc9d4..ffd25c3 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
@@ -18,10 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
@@ -32,10 +30,8 @@
 import android.content.pm.PackageManager;
 import android.hardware.fingerprint.FingerprintManager;
 import android.service.settings.suggestions.Suggestion;
-import android.util.Pair;
 
 import com.android.internal.logging.nano.MetricsProto;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
@@ -160,19 +156,4 @@
 
         assertThat(suggestions).hasSize(3);
     }
-
-    @Test
-    public void testGetSmartSuggestionEnabledTaggedData_disabled() {
-        assertThat(mProvider.getLoggingTaggedData(mContext)).asList().containsExactly(
-                Pair.create(MetricsEvent.FIELD_SETTINGS_SMART_SUGGESTIONS_ENABLED, 0));
-    }
-
-    @Test
-    public void testGetSmartSuggestionEnabledTaggedData_enabled() {
-        final SuggestionFeatureProvider provider = spy(mProvider);
-        when(provider.isSmartSuggestionEnabled(any(Context.class))).thenReturn(true);
-
-        assertThat(provider.getLoggingTaggedData(mContext)).asList().containsExactly(
-                Pair.create(MetricsEvent.FIELD_SETTINGS_SMART_SUGGESTIONS_ENABLED, 1));
-    }
 }
