Loading src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +1 −26 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.content.pm.PackageManager; import android.provider.Settings.Secure; import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.text.format.DateUtils; import android.util.Log; import com.android.internal.logging.nano.MetricsProto; Loading Loading @@ -55,12 +54,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider private static final String SHARED_PREF_FILENAME = "suggestions"; // Suggestion category name and expiration threshold for first impression type. Needs to keep // in sync with suggestion_ordering.xml private static final String CATEGORY_FIRST_IMPRESSION = "com.android.settings.suggested.category.FIRST_IMPRESSION"; private static final long FIRST_IMPRESSION_EXPIRE_DAY_IN_MILLIS = 14 * DateUtils.DAY_IN_MILLIS; private final SuggestionRanker mSuggestionRanker; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading Loading @@ -141,12 +134,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider context, MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION, getSuggestionIdentifier(context, suggestion)); boolean isSmartSuggestionEnabled = isSmartSuggestionEnabled(context); if (isSmartSuggestionEnabled) { // Disable smart suggestion if we are still showing first impression suggestions. isSmartSuggestionEnabled = !isShowingFirstImpressionSuggestion(context); } if (!parser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) { if (!parser.dismissSuggestion(suggestion)) { return; } context.getPackageManager().setComponentEnabledSetting( Loading @@ -155,19 +143,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider PackageManager.DONT_KILL_APP); } private boolean isShowingFirstImpressionSuggestion(Context context) { final String keySetupTime = CATEGORY_FIRST_IMPRESSION + SuggestionParser.SETUP_TIME; final long currentTime = System.currentTimeMillis(); final SharedPreferences sharedPrefs = getSharedPrefs(context); if (!sharedPrefs.contains(keySetupTime)) { return true; } final long setupTime = sharedPrefs.getLong(keySetupTime, 0); final long elapsedTime = currentTime - setupTime; Log.d(TAG, "Day " + elapsedTime / DateUtils.DAY_IN_MILLIS + " for first impression"); return elapsedTime <= FIRST_IMPRESSION_EXPIRE_DAY_IN_MILLIS; } @Override public String getSuggestionIdentifier(Context context, Tile suggestion) { if (suggestion.intent == null || suggestion.intent.getComponent() == null Loading tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +12 −34 Original line number Diff line number Diff line Loading @@ -17,8 +17,17 @@ package com.android.settings.dashboard.suggestions; import android.app.ActivityManager; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; Loading Loading @@ -59,18 +68,6 @@ import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, Loading Loading @@ -337,7 +334,7 @@ public class SuggestionFeatureProviderImplTest { @Test public void dismissSuggestion_hasMoreDismissCount_shouldNotDisableComponent() { when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean())) when(mSuggestionParser.dismissSuggestion(any(Tile.class))) .thenReturn(false); mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion); Loading @@ -348,25 +345,6 @@ public class SuggestionFeatureProviderImplTest { verify(mContext, never()).getPackageManager(); } @Test public void dismissSuggestion_isShowingFirstImpressionType_dismissWithoutSmartSuggestionRule() { mProvider = spy(mProvider); when(mProvider.isSmartSuggestionEnabled(any(Context.class))).thenReturn(true); final SharedPreferences pref = RuntimeEnvironment.application.getSharedPreferences( "test_pref", Context.MODE_PRIVATE); when(mProvider.getSharedPrefs(mContext)).thenReturn(pref); when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean())) .thenReturn(false); mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion); verify(mFactory.metricsFeatureProvider).action( eq(mContext), eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION), anyString()); verify(mSuggestionParser).dismissSuggestion(any(Tile.class), eq(false)); } @Test public void dismissSuggestion_noContext_shouldDoNothing() { mProvider.dismissSuggestion(null, mSuggestionParser, mSuggestion); Loading @@ -376,7 +354,7 @@ public class SuggestionFeatureProviderImplTest { @Test public void dismissSuggestion_hasNoMoreDismissCount_shouldDisableComponent() { when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean())) when(mSuggestionParser.dismissSuggestion(any(Tile.class))) .thenReturn(true); mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion); Loading Loading
src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +1 −26 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.content.pm.PackageManager; import android.provider.Settings.Secure; import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; import android.text.format.DateUtils; import android.util.Log; import com.android.internal.logging.nano.MetricsProto; Loading Loading @@ -55,12 +54,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider private static final String SHARED_PREF_FILENAME = "suggestions"; // Suggestion category name and expiration threshold for first impression type. Needs to keep // in sync with suggestion_ordering.xml private static final String CATEGORY_FIRST_IMPRESSION = "com.android.settings.suggested.category.FIRST_IMPRESSION"; private static final long FIRST_IMPRESSION_EXPIRE_DAY_IN_MILLIS = 14 * DateUtils.DAY_IN_MILLIS; private final SuggestionRanker mSuggestionRanker; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading Loading @@ -141,12 +134,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider context, MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION, getSuggestionIdentifier(context, suggestion)); boolean isSmartSuggestionEnabled = isSmartSuggestionEnabled(context); if (isSmartSuggestionEnabled) { // Disable smart suggestion if we are still showing first impression suggestions. isSmartSuggestionEnabled = !isShowingFirstImpressionSuggestion(context); } if (!parser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) { if (!parser.dismissSuggestion(suggestion)) { return; } context.getPackageManager().setComponentEnabledSetting( Loading @@ -155,19 +143,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider PackageManager.DONT_KILL_APP); } private boolean isShowingFirstImpressionSuggestion(Context context) { final String keySetupTime = CATEGORY_FIRST_IMPRESSION + SuggestionParser.SETUP_TIME; final long currentTime = System.currentTimeMillis(); final SharedPreferences sharedPrefs = getSharedPrefs(context); if (!sharedPrefs.contains(keySetupTime)) { return true; } final long setupTime = sharedPrefs.getLong(keySetupTime, 0); final long elapsedTime = currentTime - setupTime; Log.d(TAG, "Day " + elapsedTime / DateUtils.DAY_IN_MILLIS + " for first impression"); return elapsedTime <= FIRST_IMPRESSION_EXPIRE_DAY_IN_MILLIS; } @Override public String getSuggestionIdentifier(Context context, Tile suggestion) { if (suggestion.intent == null || suggestion.intent.getComponent() == null Loading
tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +12 −34 Original line number Diff line number Diff line Loading @@ -17,8 +17,17 @@ package com.android.settings.dashboard.suggestions; import android.app.ActivityManager; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; Loading Loading @@ -59,18 +68,6 @@ import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, Loading Loading @@ -337,7 +334,7 @@ public class SuggestionFeatureProviderImplTest { @Test public void dismissSuggestion_hasMoreDismissCount_shouldNotDisableComponent() { when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean())) when(mSuggestionParser.dismissSuggestion(any(Tile.class))) .thenReturn(false); mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion); Loading @@ -348,25 +345,6 @@ public class SuggestionFeatureProviderImplTest { verify(mContext, never()).getPackageManager(); } @Test public void dismissSuggestion_isShowingFirstImpressionType_dismissWithoutSmartSuggestionRule() { mProvider = spy(mProvider); when(mProvider.isSmartSuggestionEnabled(any(Context.class))).thenReturn(true); final SharedPreferences pref = RuntimeEnvironment.application.getSharedPreferences( "test_pref", Context.MODE_PRIVATE); when(mProvider.getSharedPrefs(mContext)).thenReturn(pref); when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean())) .thenReturn(false); mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion); verify(mFactory.metricsFeatureProvider).action( eq(mContext), eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION), anyString()); verify(mSuggestionParser).dismissSuggestion(any(Tile.class), eq(false)); } @Test public void dismissSuggestion_noContext_shouldDoNothing() { mProvider.dismissSuggestion(null, mSuggestionParser, mSuggestion); Loading @@ -376,7 +354,7 @@ public class SuggestionFeatureProviderImplTest { @Test public void dismissSuggestion_hasNoMoreDismissCount_shouldDisableComponent() { when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean())) when(mSuggestionParser.dismissSuggestion(any(Tile.class))) .thenReturn(true); mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion); Loading