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

Commit 345e154b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Sort contextual cards based on their score."

parents e57e4321 f7f1b9b2
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.widget.BaseAdapter;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;

@@ -109,9 +110,12 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
        }
    }

    //TODO(b/111822376): implement sorting mechanism.
    private void sortCards(List<ContextualCard> cards) {
    @VisibleForTesting
    List<ContextualCard> sortCards(List<ContextualCard> cards) {
        //take mContextualCards as the source and do the ranking based on the rule.
        return cards.stream()
                .sorted((c1, c2) -> Double.compare(c2.getRankingScore(), c1.getRankingScore()))
                .collect(Collectors.toList());
    }

    @Override
@@ -127,10 +131,9 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
        allCards.addAll(
                updateList.values().stream().flatMap(List::stream).collect(Collectors.toList()));

        sortCards(allCards);
        //replace with the new data
        mContextualCards.clear();
        mContextualCards.addAll(allCards);
        mContextualCards.addAll(sortCards(allCards));

        loadCardControllers();

+6 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.homepage.contextualcards.conditional;

import androidx.annotation.VisibleForTesting;

import com.android.settings.homepage.contextualcards.ContextualCard;

/**
@@ -26,6 +28,9 @@ import com.android.settings.homepage.contextualcards.ContextualCard;
 */
public class ConditionalContextualCard extends ContextualCard {

    @VisibleForTesting
    static final double UNSUPPORTED_RANKING_SCORE = -100.0;

    private final long mConditionId;
    private final int mMetricsConstant;
    private final CharSequence mActionText;
@@ -83,6 +88,7 @@ public class ConditionalContextualCard extends ContextualCard {
        }

        public ConditionalContextualCard build() {
            setRankingScore(UNSUPPORTED_RANKING_SCORE);
            return new ConditionalContextualCard(this);
        }
    }
+0 −1
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowContentResolver;
import org.robolectric.shadows.ShadowLog;

import java.util.ArrayList;
import java.util.Arrays;
+67 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.homepage.contextualcards;

import static com.google.common.truth.Truth.assertThat;

import android.content.Context;
import android.net.Uri;

import com.android.settings.homepage.contextualcards.conditional.ConditionalContextualCard;
import com.android.settings.testutils.SettingsRobolectricTestRunner;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;

import java.util.ArrayList;
import java.util.List;

@RunWith(SettingsRobolectricTestRunner.class)
public class ContextualCardManagerTest {

    private Context mContext;
    private ContextualCardManager mManager;

    @Before
    public void setUp() {
        mContext = RuntimeEnvironment.application;
        final ContextualCardsFragment fragment = new ContextualCardsFragment();
        mManager = new ContextualCardManager(mContext, fragment.getSettingsLifecycle());
    }

    @Test
    public void sortCards_hasConditionalAndSliceCards_conditionalShouldAlwaysBeTheLast() {
        final String sliceUri = "content://com.android.settings.slices/action/flashlight";
        final List<ContextualCard> cards = new ArrayList<>();
        cards.add(new ConditionalContextualCard.Builder().build());
        cards.add(buildContextualCard(sliceUri));

        final List<ContextualCard> sortedCards = mManager.sortCards(cards);

        assertThat(sortedCards.get(cards.size() - 1).getCardType())
                .isEqualTo(ContextualCard.CardType.CONDITIONAL);
    }

    private ContextualCard buildContextualCard(String sliceUri) {
        return new ContextualCard.Builder()
                .setName("test_name")
                .setSliceUri(Uri.parse(sliceUri))
                .build();
    }
}
+11 −1
Original line number Diff line number Diff line
@@ -14,10 +14,14 @@
 * limitations under the License.
 */

package com.android.settings.homepage.contextualcards;
package com.android.settings.homepage.contextualcards.conditional;

import static com.android.settings.homepage.contextualcards.conditional.ConditionalContextualCard
        .UNSUPPORTED_RANKING_SCORE;

import static com.google.common.truth.Truth.assertThat;

import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settings.homepage.contextualcards.conditional.ConditionalContextualCard;
import com.android.settings.testutils.SettingsRobolectricTestRunner;

@@ -39,4 +43,10 @@ public class ConditionalContextualCardTest {
        assertThat(new ConditionalContextualCard.Builder().build().getCardType())
                .isEqualTo(ContextualCard.CardType.CONDITIONAL);
    }

    @Test
    public void getRankingScore_shouldAlwaysBeUnsupportedScore() {
        assertThat(new ConditionalContextualCard.Builder().build().getRankingScore())
                .isEqualTo(UNSUPPORTED_RANKING_SCORE);
    }
}