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

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

Merge "Remove logic for parsing dismiss rule" into oc-mr1-dev am: 6a820f22

am: 774eace1

Change-Id: Ib86300ac020de47871bb4c2c0557628ee9d8eeb8
parents 0c2806f2 774eace1
Loading
Loading
Loading
Loading
+29 −44
Original line number Original line Diff line number Diff line
@@ -91,28 +91,25 @@ public class SuggestionParser {


    // Shared prefs keys for storing dismissed state.
    // Shared prefs keys for storing dismissed state.
    // Index into current dismissed state.
    // Index into current dismissed state.
    @VisibleForTesting
    static final String DISMISS_INDEX = "_dismiss_index";
    public static final String SETUP_TIME = "_setup_time";
    public static final String SETUP_TIME = "_setup_time";
    private static final String IS_DISMISSED = "_is_dismissed";
    private static final String IS_DISMISSED = "_is_dismissed";


    // Default dismiss control for smart suggestions.
    // Default dismiss control for smart suggestions.
    private static final String DEFAULT_SMART_DISMISS_CONTROL = "0,10";
    private static final String DEFAULT_SMART_DISMISS_CONTROL = "0";


    private final Context mContext;
    private final Context mContext;
    private final List<SuggestionCategory> mSuggestionList;
    private final List<SuggestionCategory> mSuggestionList;
    private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>();
    private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>();
    private final SharedPreferences mSharedPrefs;
    private final SharedPreferences mSharedPrefs;
    private final String mSmartDismissControl;
    private final String mDefaultDismissControl;



    public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml,
    public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml,
            String smartDismissControl) {
            String defaultDismissControl) {
        this(
        this(
                context,
                context,
                sharedPrefs,
                sharedPrefs,
                (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml),
                (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml),
                smartDismissControl);
                defaultDismissControl);
    }
    }


    public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) {
    public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) {
@@ -124,11 +121,11 @@ public class SuggestionParser {
            Context context,
            Context context,
            SharedPreferences sharedPrefs,
            SharedPreferences sharedPrefs,
            List<SuggestionCategory> suggestionList,
            List<SuggestionCategory> suggestionList,
            String smartDismissControl) {
            String defaultDismissControl) {
        mContext = context;
        mContext = context;
        mSuggestionList = suggestionList;
        mSuggestionList = suggestionList;
        mSharedPrefs = sharedPrefs;
        mSharedPrefs = sharedPrefs;
        mSmartDismissControl = smartDismissControl;
        mDefaultDismissControl = defaultDismissControl;
    }
    }


    public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) {
    public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) {
@@ -161,25 +158,16 @@ public class SuggestionParser {
        return suggestionList;
        return suggestionList;
    }
    }


    public boolean dismissSuggestion(Tile suggestion) {
        return dismissSuggestion(suggestion, false);
    }

    /**
    /**
     * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should
     * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should
     * be disabled.
     * be disabled.
     */
     */
    public boolean dismissSuggestion(Tile suggestion, boolean isSmartSuggestionEnabled) {
    public boolean dismissSuggestion(Tile suggestion) {
        String keyBase = suggestion.intent.getComponent().flattenToShortString();
        final String keyBase = suggestion.intent.getComponent().flattenToShortString();
        int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0);
        String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled);
        if (dismissControl == null || parseDismissString(dismissControl).length == index) {
            return true;
        }
        mSharedPrefs.edit()
        mSharedPrefs.edit()
                .putBoolean(keyBase + IS_DISMISSED, true)
                .putBoolean(keyBase + IS_DISMISSED, true)
                .commit();
                .commit();
        return false;
        return true;
    }
    }


    @VisibleForTesting
    @VisibleForTesting
@@ -357,32 +345,29 @@ public class SuggestionParser {
    @VisibleForTesting
    @VisibleForTesting
    boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) {
    boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) {
        String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled);
        String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled);
        if (dismissControl == null) {
            return false;
        }
        String keyBase = suggestion.intent.getComponent().flattenToShortString();
        String keyBase = suggestion.intent.getComponent().flattenToShortString();
        if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) {
        if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) {
            mSharedPrefs.edit()
            mSharedPrefs.edit()
                    .putLong(keyBase + SETUP_TIME, System.currentTimeMillis())
                    .putLong(keyBase + SETUP_TIME, System.currentTimeMillis())
                    .commit();
                    .commit();
        }
        }
        // Default to dismissed, so that we can have suggestions that only first appear after
        // Check if it's already manually dismissed
        // some number of days.
        final boolean isDismissed = mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, false);
        if (!mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, true)) {
        if (isDismissed) {
            return false;
        }
        int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0);
        int[] dismissRules = parseDismissString(dismissControl);
        if (dismissRules.length <= index) {
            return true;
            return true;
        }
        }
        int currentDismiss = dismissRules[index];
        if (dismissControl == null) {
        long time = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), currentDismiss);
            return false;
        if (System.currentTimeMillis() >= time) {
        }
        // Parse when suggestion should first appear. return true to artificially hide suggestion
        // before then.
        int firstAppearDay = parseDismissString(dismissControl);
        long firstAppearDayInMs = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0),
                firstAppearDay);
        if (System.currentTimeMillis() >= firstAppearDayInMs) {
            // Dismiss timeout has passed, undismiss it.
            // Dismiss timeout has passed, undismiss it.
            mSharedPrefs.edit()
            mSharedPrefs.edit()
                    .putBoolean(keyBase + IS_DISMISSED, false)
                    .putBoolean(keyBase + IS_DISMISSED, false)
                    .putInt(keyBase + DISMISS_INDEX, index + 1)
                    .commit();
                    .commit();
            return false;
            return false;
        }
        }
@@ -394,18 +379,18 @@ public class SuggestionParser {
        return startTime + days;
        return startTime + days;
    }
    }


    private int[] parseDismissString(String dismissControl) {
    /**
        String[] dismissStrs = dismissControl.split(",");
     * Parse the first int from a string formatted as "0,1,2..."
        int[] dismisses = new int[dismissStrs.length];
     * The value means suggestion should first appear on Day X.
        for (int i = 0; i < dismissStrs.length; i++) {
     */
            dismisses[i] = Integer.parseInt(dismissStrs[i]);
    private int parseDismissString(String dismissControl) {
        }
        final String[] dismissStrs = dismissControl.split(",");
        return dismisses;
        return Integer.parseInt(dismissStrs[0]);
    }
    }


    private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) {
    private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) {
        if (isSmartSuggestionEnabled) {
        if (isSmartSuggestionEnabled) {
            return mSmartDismissControl;
            return mDefaultDismissControl;
        } else {
        } else {
            return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL);
            return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL);
        }
        }
+9 −19
Original line number Original line Diff line number Diff line
@@ -83,7 +83,7 @@ public class SuggestionParserTest {


        mSuggestionParser = new SuggestionParser(mContext, mPrefs,
        mSuggestionParser = new SuggestionParser(mContext, mPrefs,
                Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory),
                Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory),
                "0,0");
                "0");


        ResolveInfo info1 = TileUtilsTest.newInfo(true, null);
        ResolveInfo info1 = TileUtilsTest.newInfo(true, null);
        info1.activityInfo.packageName = "pkg";
        info1.activityInfo.packageName = "pkg";
@@ -109,17 +109,12 @@ public class SuggestionParserTest {
    }
    }


    @Test
    @Test
    public void testDismissSuggestion_withoutSmartSuggestion() {
    public void dismissSuggestion_shouldDismiss() {
        assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, false)).isTrue();
        assertThat(mSuggestionParser.dismissSuggestion(mSuggestion)).isTrue();
    }
    }


    @Test
    @Test
    public void testDismissSuggestion_withSmartSuggestion() {
    public void testGetSuggestions_withoutSmartSuggestions_shouldDismiss() {
        assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, true)).isFalse();
    }

    @Test
    public void testGetSuggestions_withoutSmartSuggestions() {
        readAndDismissSuggestion(false);
        readAndDismissSuggestion(false);
        mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false);
        mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false);
        assertThat(mSuggestionsBeforeDismiss).hasSize(2);
        assertThat(mSuggestionsBeforeDismiss).hasSize(2);
@@ -128,11 +123,10 @@ public class SuggestionParserTest {
    }
    }


    @Test
    @Test
    public void testGetSuggestions_withSmartSuggestions() {
    public void testGetSuggestions_withSmartSuggestions_shouldDismiss() {
        readAndDismissSuggestion(true);
        readAndDismissSuggestion(true);
        assertThat(mSuggestionsBeforeDismiss).hasSize(2);
        assertThat(mSuggestionsBeforeDismiss).hasSize(2);
        assertThat(mSuggestionsAfterDismiss).hasSize(2);
        assertThat(mSuggestionsAfterDismiss).hasSize(1);
        assertThat(mSuggestionsBeforeDismiss).isEqualTo(mSuggestionsAfterDismiss);
    }
    }


    @Test
    @Test
@@ -191,19 +185,15 @@ public class SuggestionParserTest {
    }
    }


    @Test
    @Test
    public void isSuggestionDismissed_mismatchRule_shouldDismiss() {
    public void isSuggestionDismissed_dismissedSuggestion_shouldReturnTrue() {
        final Tile suggestion = new Tile();
        final Tile suggestion = new Tile();
        suggestion.metaData = new Bundle();
        suggestion.metaData = new Bundle();
        suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3");
        suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3");
        suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls"));
        suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls"));


        // Dismiss suggestion when smart suggestion is not enabled.
        // Dismiss suggestion when smart suggestion is not enabled.
        mSuggestionParser.dismissSuggestion(suggestion, false /* isSmartSuggestionEnabled */);
        mSuggestionParser.dismissSuggestion(suggestion);
        final String suggestionKey = suggestion.intent.getComponent().flattenToShortString();
        // And point to last rule in dismiss control
        mPrefs.edit().putInt(suggestionKey + SuggestionParser.DISMISS_INDEX, 2).apply();


        // Turn on smart suggestion, and check if suggestion is enabled.
        assertThat(mSuggestionParser.isDismissed(suggestion, true /* isSmartSuggestionEnabled */))
        assertThat(mSuggestionParser.isDismissed(suggestion, true /* isSmartSuggestionEnabled */))
                .isTrue();
                .isTrue();
    }
    }
@@ -215,7 +205,7 @@ public class SuggestionParserTest {
                mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled);
                mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled);


        final Tile suggestion = mSuggestionsBeforeDismiss.get(0);
        final Tile suggestion = mSuggestionsBeforeDismiss.get(0);
        if (mSuggestionParser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) {
        if (mSuggestionParser.dismissSuggestion(suggestion)) {
            RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent(
            RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent(
                    new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category),
                    new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category),
                    suggestion.intent.getComponent().getPackageName());
                    suggestion.intent.getComponent().getPackageName());