Merge "Clean up logic for dismissing suggestion" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fef5f6aa4a
@@ -25,7 +25,6 @@ import android.content.pm.PackageManager;
|
|||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.text.format.DateUtils;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
@@ -55,12 +54,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
|
|||||||
|
|
||||||
private static final String SHARED_PREF_FILENAME = "suggestions";
|
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 SuggestionRanker mSuggestionRanker;
|
||||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
|
||||||
@@ -141,12 +134,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
|
|||||||
context, MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION,
|
context, MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION,
|
||||||
getSuggestionIdentifier(context, suggestion));
|
getSuggestionIdentifier(context, suggestion));
|
||||||
|
|
||||||
boolean isSmartSuggestionEnabled = isSmartSuggestionEnabled(context);
|
if (!parser.dismissSuggestion(suggestion)) {
|
||||||
if (isSmartSuggestionEnabled) {
|
|
||||||
// Disable smart suggestion if we are still showing first impression suggestions.
|
|
||||||
isSmartSuggestionEnabled = !isShowingFirstImpressionSuggestion(context);
|
|
||||||
}
|
|
||||||
if (!parser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
context.getPackageManager().setComponentEnabledSetting(
|
context.getPackageManager().setComponentEnabledSetting(
|
||||||
@@ -155,19 +143,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
|
|||||||
PackageManager.DONT_KILL_APP);
|
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
|
@Override
|
||||||
public String getSuggestionIdentifier(Context context, Tile suggestion) {
|
public String getSuggestionIdentifier(Context context, Tile suggestion) {
|
||||||
if (suggestion.intent == null || suggestion.intent.getComponent() == null
|
if (suggestion.intent == null || suggestion.intent.getComponent() == null
|
||||||
|
@@ -17,8 +17,17 @@
|
|||||||
package com.android.settings.dashboard.suggestions;
|
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.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -59,18 +68,6 @@ import org.robolectric.annotation.Config;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH,
|
@Config(manifest = TestConfig.MANIFEST_PATH,
|
||||||
sdk = TestConfig.SDK_VERSION,
|
sdk = TestConfig.SDK_VERSION,
|
||||||
@@ -337,7 +334,7 @@ public class SuggestionFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void dismissSuggestion_hasMoreDismissCount_shouldNotDisableComponent() {
|
public void dismissSuggestion_hasMoreDismissCount_shouldNotDisableComponent() {
|
||||||
when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean()))
|
when(mSuggestionParser.dismissSuggestion(any(Tile.class)))
|
||||||
.thenReturn(false);
|
.thenReturn(false);
|
||||||
mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion);
|
mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion);
|
||||||
|
|
||||||
@@ -348,25 +345,6 @@ public class SuggestionFeatureProviderImplTest {
|
|||||||
verify(mContext, never()).getPackageManager();
|
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
|
@Test
|
||||||
public void dismissSuggestion_noContext_shouldDoNothing() {
|
public void dismissSuggestion_noContext_shouldDoNothing() {
|
||||||
mProvider.dismissSuggestion(null, mSuggestionParser, mSuggestion);
|
mProvider.dismissSuggestion(null, mSuggestionParser, mSuggestion);
|
||||||
@@ -376,7 +354,7 @@ public class SuggestionFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void dismissSuggestion_hasNoMoreDismissCount_shouldDisableComponent() {
|
public void dismissSuggestion_hasNoMoreDismissCount_shouldDisableComponent() {
|
||||||
when(mSuggestionParser.dismissSuggestion(any(Tile.class), anyBoolean()))
|
when(mSuggestionParser.dismissSuggestion(any(Tile.class)))
|
||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
|
|
||||||
mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion);
|
mProvider.dismissSuggestion(mContext, mSuggestionParser, mSuggestion);
|
||||||
|
Reference in New Issue
Block a user