Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5989fc3 authored by Fan Zhang's avatar Fan Zhang Committed by android-build-merger
Browse files

Merge "Clean up logic for dismissing suggestion" into oc-mr1-dev

am: fef5f6aa

Change-Id: I8c5ee9684f4a1fb8356aa35ab6ca26b80ada7436
parents d76eddac fef5f6aa
Loading
Loading
Loading
Loading
+1 −26
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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(
@@ -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
+12 −34
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -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);

@@ -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);
@@ -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);