Notification summary updates
- Fix app info summary - Add configure notifications summary Test: make -j RunSettingsRoboTests Change-Id: Ic3c3036ee903fe7403032925a8145693807793d5 Fixes: 77598357 Fixes: 73018368
This commit is contained in:
@@ -2639,6 +2639,8 @@
|
||||
</intent-filter>
|
||||
<meta-data android:name="com.android.settings.category"
|
||||
android:value="com.android.settings.category.ia.apps"/>
|
||||
<meta-data android:name="com.android.settings.summary"
|
||||
android:resource="@string/summary_empty"/>
|
||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||
android:value="com.android.settings.notification.ConfigureNotificationSettings" />
|
||||
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||
|
@@ -7645,11 +7645,11 @@
|
||||
<string name="app_settings_link">Additional settings in the app</string>
|
||||
|
||||
<!-- [CHAR LIMIT=45] App notification listing summary, blocked apps -->
|
||||
<string name="app_notification_listing_summary_zero">Turned on for all apps</string>
|
||||
<string name="app_notification_listing_summary_zero">On for all apps</string>
|
||||
<!-- [CHAR LIMIT=45] App notification listing summary, blocked apps -->
|
||||
<plurals name="app_notification_listing_summary_others">
|
||||
<item quantity="one">Turned off for <xliff:g id="count" example="1">%d</xliff:g> app</item>
|
||||
<item quantity="other">Turned off for <xliff:g id="count" example="10">%d</xliff:g> apps</item>
|
||||
<item quantity="one">Off for <xliff:g id="count" example="1">%d</xliff:g> app</item>
|
||||
<item quantity="other">Off for <xliff:g id="count" example="10">%d</xliff:g> apps</item>
|
||||
</plurals>
|
||||
|
||||
<!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. -->
|
||||
|
@@ -81,11 +81,15 @@ public class AppNotificationPreferenceController extends AppInfoPreferenceContro
|
||||
if (appRow == null) {
|
||||
return "";
|
||||
}
|
||||
if (appRow.banned || appRow.channelCount == appRow.blockedChannelCount) {
|
||||
return context.getString(R.string.notifications_disabled);
|
||||
if (appRow.banned) {
|
||||
return context.getText(R.string.notifications_disabled);
|
||||
} else if (appRow.channelCount == 0) {
|
||||
return context.getText(R.string.notifications_enabled);
|
||||
} else if (appRow.channelCount == appRow.blockedChannelCount) {
|
||||
return context.getText(R.string.notifications_disabled);
|
||||
} else {
|
||||
if (appRow.blockedChannelCount == 0) {
|
||||
return context.getString(R.string.notifications_enabled);
|
||||
return context.getText(R.string.notifications_enabled);
|
||||
}
|
||||
return context.getString(R.string.notifications_enabled_with_info,
|
||||
context.getResources().getQuantityString(R.plurals.notifications_categories_off,
|
||||
|
@@ -26,11 +26,13 @@ import android.os.UserHandle;
|
||||
import android.provider.SearchIndexableResource;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.RingtonePreference;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.dashboard.SummaryLoader;
|
||||
import com.android.settings.gestures.SwipeToNotificationPreferenceController;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settings.search.Indexable;
|
||||
@@ -151,6 +153,54 @@ public class ConfigureNotificationSettings extends DashboardFragment {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* For summary
|
||||
*/
|
||||
static class SummaryProvider implements SummaryLoader.SummaryProvider {
|
||||
|
||||
private final Context mContext;
|
||||
private final SummaryLoader mSummaryLoader;
|
||||
private NotificationBackend mBackend;
|
||||
|
||||
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
|
||||
mContext = context;
|
||||
mSummaryLoader = summaryLoader;
|
||||
mBackend = new NotificationBackend();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected void setBackend(NotificationBackend backend) {
|
||||
mBackend = backend;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setListening(boolean listening) {
|
||||
if (!listening) {
|
||||
return;
|
||||
}
|
||||
int blockedAppCount = mBackend.getBlockedAppCount();
|
||||
if (blockedAppCount == 0) {
|
||||
mSummaryLoader.setSummary(this,
|
||||
mContext.getText(R.string.app_notification_listing_summary_zero));
|
||||
} else {
|
||||
mSummaryLoader.setSummary(this,
|
||||
mContext.getResources().getQuantityString(
|
||||
R.plurals.app_notification_listing_summary_others,
|
||||
blockedAppCount, blockedAppCount));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
|
||||
new SummaryLoader.SummaryProviderFactory() {
|
||||
@Override
|
||||
public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
|
||||
SummaryLoader summaryLoader) {
|
||||
return new ConfigureNotificationSettings.SummaryProvider(
|
||||
activity, summaryLoader);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* For Search.
|
||||
*/
|
||||
|
@@ -250,6 +250,15 @@ public class NotificationBackend {
|
||||
}
|
||||
}
|
||||
|
||||
public int getBlockedAppCount() {
|
||||
try {
|
||||
return sINM.getBlockedAppCount(UserHandle.myUserId());
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "Error calling NoMan", e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static class Row {
|
||||
public String section;
|
||||
}
|
||||
|
@@ -150,4 +150,13 @@ public class AppNotificationPreferenceControllerTest {
|
||||
appRow.channelCount = 10;
|
||||
assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo("On");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNotificationSummary_noChannels() {
|
||||
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
||||
appRow.banned = false;
|
||||
appRow.blockedChannelCount = 0;
|
||||
appRow.channelCount = 0;
|
||||
assertThat(mController.getNotificationSummary(appRow, mContext).toString()).isEqualTo("On");
|
||||
}
|
||||
}
|
||||
|
@@ -17,17 +17,35 @@
|
||||
package com.android.settings.notification;
|
||||
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings.KEY_LOCKSCREEN;
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings.KEY_LOCKSCREEN_WORK_PROFILE;
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings.KEY_LOCKSCREEN_WORK_PROFILE_HEADER;
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings
|
||||
.KEY_LOCKSCREEN_WORK_PROFILE;
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings
|
||||
.KEY_LOCKSCREEN_WORK_PROFILE_HEADER;
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings.KEY_SWIPE_DOWN;
|
||||
import static com.android.settings.notification.ConfigureNotificationSettings
|
||||
.SUMMARY_PROVIDER_FACTORY;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Activity;
|
||||
|
||||
import com.android.settings.dashboard.SummaryLoader;
|
||||
import com.android.settings.notification.ConfigureNotificationSettings.SummaryProvider;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
@@ -36,6 +54,13 @@ import java.util.List;
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
public class ConfigureNotificationSettingsTest {
|
||||
|
||||
private Activity mActivity;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mActivity = spy(Robolectric.buildActivity(Activity.class).get());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {
|
||||
ShadowUtils.class,
|
||||
@@ -49,4 +74,39 @@ public class ConfigureNotificationSettingsTest {
|
||||
KEY_SWIPE_DOWN, KEY_LOCKSCREEN, KEY_LOCKSCREEN_WORK_PROFILE,
|
||||
KEY_LOCKSCREEN_WORK_PROFILE_HEADER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_noneBlocked() {
|
||||
SummaryLoader loader = mock(SummaryLoader.class);
|
||||
NotificationBackend backend = mock(NotificationBackend.class);
|
||||
when(backend.getBlockedAppCount()).thenReturn(0);
|
||||
SummaryProvider provider =
|
||||
(SummaryProvider) SUMMARY_PROVIDER_FACTORY.createSummaryProvider(mActivity, loader);
|
||||
provider.setBackend(backend);
|
||||
|
||||
provider.setListening(true);
|
||||
|
||||
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
|
||||
verify(loader).setSummary(any(), captor.capture());
|
||||
|
||||
assertThat(captor.getValue().toString()).contains("On");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_someBlocked() {
|
||||
SummaryLoader loader = mock(SummaryLoader.class);
|
||||
NotificationBackend backend = mock(NotificationBackend.class);
|
||||
when(backend.getBlockedAppCount()).thenReturn(5);
|
||||
SummaryProvider provider =
|
||||
(SummaryProvider) SUMMARY_PROVIDER_FACTORY.createSummaryProvider(mActivity, loader);
|
||||
provider.setBackend(backend);
|
||||
|
||||
provider.setListening(true);
|
||||
|
||||
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
|
||||
verify(loader).setSummary(any(), captor.capture());
|
||||
|
||||
assertThat(captor.getValue().toString()).contains("Off");
|
||||
assertThat(captor.getValue().toString()).contains("5");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user