Add flag to allow NAS to peform ranking

This will be used by implementations of NotificationAssistantService to
rerank notifications within the same importance bucket.

Bug: 146443378
Test: atest
Change-Id: I95e45081ae90f1e60de86b1b850ad18f33eb803b
This commit is contained in:
Alex Mang
2019-12-04 13:25:32 -08:00
parent 84a23d37fb
commit 8f966787d9
4 changed files with 65 additions and 1 deletions

View File

@@ -7891,6 +7891,12 @@
<!-- Configure Notifications: setting summary [CHAR LIMIT=200] --> <!-- Configure Notifications: setting summary [CHAR LIMIT=200] -->
<string name="asst_capability_prioritizer_summary">Automatically set lower priority notifications to Gentle</string> <string name="asst_capability_prioritizer_summary">Automatically set lower priority notifications to Gentle</string>
<!-- Configure Notifications: setting title [CHAR LIMIT=80 BACKUP_MESSAGE_ID=6691908606916292167] -->
<string name="asst_capability_ranking_title">Adaptive notification ranking</string>
<!-- Configure Notifications: setting summary [CHAR LIMIT=200] -->
<string name="asst_capability_ranking_summary">Automatically rank notifications by relevance</string>
<!-- Configure Notifications: setting title [CHAR LIMIT=80] --> <!-- Configure Notifications: setting title [CHAR LIMIT=80] -->
<string name="asst_capabilities_actions_replies_title">Suggested actions and replies</string> <string name="asst_capabilities_actions_replies_title">Suggested actions and replies</string>

View File

@@ -536,6 +536,11 @@
android:title="@string/asst_capability_prioritizer_title" android:title="@string/asst_capability_prioritizer_title"
settings:controller="com.android.settings.notification.AssistantCapabilityPreferenceController" /> settings:controller="com.android.settings.notification.AssistantCapabilityPreferenceController" />
<SwitchPreference
android:key="asst_capability_ranking"
android:title="@string/asst_capability_ranking_title"
settings:controller="com.android.settings.notification.AssistantCapabilityPreferenceController" />
<Preference <Preference
android:key="inactive_apps" android:key="inactive_apps"
android:title="@string/inactive_apps_title" android:title="@string/inactive_apps_title"

View File

@@ -28,6 +28,7 @@ import java.util.List;
public class AssistantCapabilityPreferenceController extends TogglePreferenceController { public class AssistantCapabilityPreferenceController extends TogglePreferenceController {
static final String PRIORITIZER_KEY = "asst_capability_prioritizer"; static final String PRIORITIZER_KEY = "asst_capability_prioritizer";
static final String RANKING_KEY = "asst_capability_ranking";
static final String SMART_KEY = "asst_capabilities_actions_replies"; static final String SMART_KEY = "asst_capabilities_actions_replies";
private NotificationBackend mBackend; private NotificationBackend mBackend;
@@ -45,7 +46,9 @@ public class AssistantCapabilityPreferenceController extends TogglePreferenceCon
public boolean isChecked() { public boolean isChecked() {
List<String> capabilities = mBackend.getAssistantAdjustments(mContext.getPackageName()); List<String> capabilities = mBackend.getAssistantAdjustments(mContext.getPackageName());
if (PRIORITIZER_KEY.equals(getPreferenceKey())) { if (PRIORITIZER_KEY.equals(getPreferenceKey())) {
return capabilities.contains(Adjustment.KEY_IMPORTANCE); return capabilities.contains(Adjustment.KEY_IMPORTANCE);
} else if (RANKING_KEY.equals(getPreferenceKey())) {
return capabilities.contains(Adjustment.KEY_RANKING_SCORE);
} else if (SMART_KEY.equals(getPreferenceKey())) { } else if (SMART_KEY.equals(getPreferenceKey())) {
return capabilities.contains(Adjustment.KEY_CONTEXTUAL_ACTIONS) return capabilities.contains(Adjustment.KEY_CONTEXTUAL_ACTIONS)
&& capabilities.contains(Adjustment.KEY_TEXT_REPLIES); && capabilities.contains(Adjustment.KEY_TEXT_REPLIES);
@@ -57,6 +60,8 @@ public class AssistantCapabilityPreferenceController extends TogglePreferenceCon
public boolean setChecked(boolean isChecked) { public boolean setChecked(boolean isChecked) {
if (PRIORITIZER_KEY.equals(getPreferenceKey())) { if (PRIORITIZER_KEY.equals(getPreferenceKey())) {
mBackend.allowAssistantAdjustment(Adjustment.KEY_IMPORTANCE, isChecked); mBackend.allowAssistantAdjustment(Adjustment.KEY_IMPORTANCE, isChecked);
} else if (RANKING_KEY.equals(getPreferenceKey())) {
mBackend.allowAssistantAdjustment(Adjustment.KEY_RANKING_SCORE, isChecked);
} else if (SMART_KEY.equals(getPreferenceKey())) { } else if (SMART_KEY.equals(getPreferenceKey())) {
mBackend.allowAssistantAdjustment(Adjustment.KEY_CONTEXTUAL_ACTIONS, isChecked); mBackend.allowAssistantAdjustment(Adjustment.KEY_CONTEXTUAL_ACTIONS, isChecked);
mBackend.allowAssistantAdjustment(Adjustment.KEY_TEXT_REPLIES, isChecked); mBackend.allowAssistantAdjustment(Adjustment.KEY_TEXT_REPLIES, isChecked);

View File

@@ -19,6 +19,7 @@ package com.android.settings.notification;
import static com.android.settings.core.BasePreferenceController.AVAILABLE; import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING; import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
import static com.android.settings.notification.AssistantCapabilityPreferenceController.PRIORITIZER_KEY; import static com.android.settings.notification.AssistantCapabilityPreferenceController.PRIORITIZER_KEY;
import static com.android.settings.notification.AssistantCapabilityPreferenceController.RANKING_KEY;
import static com.android.settings.notification.AssistantCapabilityPreferenceController.SMART_KEY; import static com.android.settings.notification.AssistantCapabilityPreferenceController.SMART_KEY;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -56,8 +57,10 @@ public class AssistantCapabilityPreferenceControllerTest {
private Context mContext; private Context mContext;
private AssistantCapabilityPreferenceController mPrioritizerController; private AssistantCapabilityPreferenceController mPrioritizerController;
private AssistantCapabilityPreferenceController mRankingController;
private AssistantCapabilityPreferenceController mChipController; private AssistantCapabilityPreferenceController mChipController;
private Preference mPrioritizerPreference; private Preference mPrioritizerPreference;
private Preference mRankingPreference;
private Preference mChipPreference; private Preference mChipPreference;
@Before @Before
@@ -71,6 +74,13 @@ public class AssistantCapabilityPreferenceControllerTest {
mPrioritizerPreference.setKey(mPrioritizerController.getPreferenceKey()); mPrioritizerPreference.setKey(mPrioritizerController.getPreferenceKey());
when(mScreen.findPreference( when(mScreen.findPreference(
mPrioritizerController.getPreferenceKey())).thenReturn(mPrioritizerPreference); mPrioritizerController.getPreferenceKey())).thenReturn(mPrioritizerPreference);
mRankingController = new AssistantCapabilityPreferenceController(
mContext, RANKING_KEY);
mRankingController.setBackend(mBackend);
mRankingPreference = new Preference(mContext);
mRankingPreference.setKey(mRankingController.getPreferenceKey());
when(mScreen.findPreference(
mRankingController.getPreferenceKey())).thenReturn(mRankingPreference);
mChipController = new AssistantCapabilityPreferenceController(mContext, SMART_KEY); mChipController = new AssistantCapabilityPreferenceController(mContext, SMART_KEY);
mChipController.setBackend(mBackend); mChipController.setBackend(mBackend);
mChipPreference = new Preference(mContext); mChipPreference = new Preference(mContext);
@@ -111,6 +121,27 @@ public class AssistantCapabilityPreferenceControllerTest {
capabilities.add(Adjustment.KEY_IMPORTANCE); capabilities.add(Adjustment.KEY_IMPORTANCE);
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities); when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
assertThat(mPrioritizerController.isChecked()).isTrue(); assertThat(mPrioritizerController.isChecked()).isTrue();
capabilities = new ArrayList<>();
capabilities.add(Adjustment.KEY_RANKING_SCORE);
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
assertThat(mPrioritizerController.isChecked()).isFalse();
}
@Test
public void isChecked_rankingSettingIsOff_false() {
List<String> capabilities = new ArrayList<>();
capabilities.add(Adjustment.KEY_IMPORTANCE);
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
assertThat(mRankingController.isChecked()).isFalse();
}
@Test
public void isChecked_rankingSettingIsOn_true() {
List<String> capabilities = new ArrayList<>();
capabilities.add(Adjustment.KEY_RANKING_SCORE);
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
assertThat(mRankingController.isChecked()).isTrue();
} }
@Test @Test
@@ -120,6 +151,11 @@ public class AssistantCapabilityPreferenceControllerTest {
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities); when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
assertThat(mChipController.isChecked()).isFalse(); assertThat(mChipController.isChecked()).isFalse();
capabilities = new ArrayList<>();
capabilities.add(Adjustment.KEY_RANKING_SCORE);
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
assertThat(mChipController.isChecked()).isFalse();
capabilities = new ArrayList<>(); capabilities = new ArrayList<>();
capabilities.add(Adjustment.KEY_CONTEXTUAL_ACTIONS); capabilities.add(Adjustment.KEY_CONTEXTUAL_ACTIONS);
when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities); when(mBackend.getAssistantAdjustments(anyString())).thenReturn(capabilities);
@@ -152,6 +188,18 @@ public class AssistantCapabilityPreferenceControllerTest {
verify(mBackend).allowAssistantAdjustment(Adjustment.KEY_IMPORTANCE, false); verify(mBackend).allowAssistantAdjustment(Adjustment.KEY_IMPORTANCE, false);
} }
@Test
public void onPreferenceChange_rankingOn() {
mRankingController.onPreferenceChange(mRankingPreference, true);
verify(mBackend).allowAssistantAdjustment(Adjustment.KEY_RANKING_SCORE, true);
}
@Test
public void onPreferenceChange_rankingOff() {
mRankingController.onPreferenceChange(mRankingPreference, false);
verify(mBackend).allowAssistantAdjustment(Adjustment.KEY_RANKING_SCORE, false);
}
@Test @Test
public void onPreferenceChange_chipsOn() { public void onPreferenceChange_chipsOn() {
mChipController.onPreferenceChange(mChipPreference, true); mChipController.onPreferenceChange(mChipPreference, true);