Layout improvements for notification pages
Changes for upcoming theming changes in Settings: - replacing some margins with padding - merging some (switch pref + info pref) combos into a single preference. I flagged the one that was already launched, but changed the other directly - added some section headers (unflagged) - moved all app wide notification settings to a single section (unflagged) - changed two plain text prefs into TopIntroPreference, the dedicated pref type for that sort of UI - fixed some UI issues with 'Show more categories' appearing too often - removed a duplicate notifcation channel label (unflagged) - replaced a button layout preference with ButtonPreference (unflagged) Test: manual review with is_expressive_design_enabled on and off Test: atest com.android.settings.notification.app Flag: EXEMPT this feature is not using aconfig for flagging Bug: 349652992 Change-Id: I2acd7b2eb9dbcf6929143bfde99cd67163f1f95d
This commit is contained in:
@@ -21,8 +21,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:layout_marginStart="24dp"
|
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
|
||||||
android:layout_marginEnd="16dp"
|
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
|
||||||
android:paddingTop="@dimen/notification_importance_toggle_marginTop"
|
android:paddingTop="@dimen/notification_importance_toggle_marginTop"
|
||||||
android:paddingBottom="@dimen/notification_importance_toggle_marginTop"
|
android:paddingBottom="@dimen/notification_importance_toggle_marginTop"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
@@ -21,8 +21,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:layout_marginStart="24dp"
|
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
|
||||||
android:layout_marginEnd="16dp"
|
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
|
||||||
android:paddingTop="@dimen/notification_importance_toggle_marginTop"
|
android:paddingTop="@dimen/notification_importance_toggle_marginTop"
|
||||||
android:paddingBottom="@dimen/notification_importance_toggle_marginTop"
|
android:paddingBottom="@dimen/notification_importance_toggle_marginTop"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
@@ -8999,9 +8999,12 @@
|
|||||||
<!-- [CHAR LIMIT=100] Title for switch that says whether this app can appear in the conversation notification section-->
|
<!-- [CHAR LIMIT=100] Title for switch that says whether this app can appear in the conversation notification section-->
|
||||||
<string name="conversation_section_switch_title">Conversation section</string>
|
<string name="conversation_section_switch_title">Conversation section</string>
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=100] Summary for switch that says whether this app can appear in the conversation notification section-->
|
<!-- [CHAR LIMIT=100] Summary for switch that says whether this app can appear in the conversation notification section (old)-->
|
||||||
<string name="conversation_section_switch_summary">Allow app to use conversation section</string>
|
<string name="conversation_section_switch_summary">Allow app to use conversation section</string>
|
||||||
|
|
||||||
|
<!-- [CHAR LIMIT=100] Summary for switch that says whether this app can appear in the conversation notification section-->
|
||||||
|
<string name="conversation_section_switch_complete_summary">Allow app to use conversation section, although conversation features like prioritization and bubbles are not supported by this app.</string>
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=NONE] Conversation preference summary, the parent channel this conversation was spawned from (separator) the parent channel group (e.g. an account name)-->
|
<!-- [CHAR LIMIT=NONE] Conversation preference summary, the parent channel this conversation was spawned from (separator) the parent channel group (e.g. an account name)-->
|
||||||
<string name="notification_conversation_summary" translatable="false">"<xliff:g id="parent_category_name">%1$s</xliff:g> • <xliff:g id="parent_category_group_name">%2$s</xliff:g>"</string>
|
<string name="notification_conversation_summary" translatable="false">"<xliff:g id="parent_category_name">%1$s</xliff:g> • <xliff:g id="parent_category_group_name">%2$s</xliff:g>"</string>
|
||||||
|
|
||||||
@@ -9394,8 +9397,11 @@
|
|||||||
<!-- [CHAR LIMIT=NONE] Text appearing when app does not send notifications -->
|
<!-- [CHAR LIMIT=NONE] Text appearing when app does not send notifications -->
|
||||||
<string name="app_notifications_not_send_desc">This app does not send notifications</string>
|
<string name="app_notifications_not_send_desc">This app does not send notifications</string>
|
||||||
|
|
||||||
|
<!-- [CHAR LIMIT=NONE] App notification settings: section header for app wide notif settings -->
|
||||||
|
<string name="app_notification_settings">App settings</string>
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=NONE] App notification settings: channels title -->
|
<!-- [CHAR LIMIT=NONE] App notification settings: channels title -->
|
||||||
<string name="notification_channels">Categories</string>
|
<string name="notification_channels">Notification categories</string>
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=NONE] App notification settings: non-grouped-channels title -->
|
<!-- [CHAR LIMIT=NONE] App notification settings: non-grouped-channels title -->
|
||||||
<string name="notification_channels_other">Other</string>
|
<string name="notification_channels_other">Other</string>
|
||||||
|
@@ -30,49 +30,21 @@
|
|||||||
<Preference
|
<Preference
|
||||||
android:key="block_desc" />
|
android:key="block_desc" />
|
||||||
|
|
||||||
<!-- Whether the app can show promoted notifications -->
|
|
||||||
<PreferenceCategory
|
|
||||||
android:title="@string/live_notifications"
|
|
||||||
android:key="promoted_category"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
|
||||||
android:key="promoted_switch"
|
|
||||||
android:title="@string/live_notifications_switch" />
|
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:key="promoted_desc"
|
|
||||||
android:summary="@string/live_notifications_desc"
|
|
||||||
android:selectable="false"/>
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<!-- Conversations added here -->
|
<!-- Conversations added here -->
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/conversations_category_title"
|
android:title="@string/conversations_category_title"
|
||||||
android:key="conversations"
|
android:key="conversations"
|
||||||
android:visibility="gone">
|
android:visibility="gone"
|
||||||
|
android:layout="@layout/empty_view" >
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
|
||||||
android:key="invalid_conversation_switch"
|
|
||||||
android:title="@string/conversation_section_switch_title" />
|
|
||||||
<Preference
|
|
||||||
android:key="invalid_conversation_info"/>
|
|
||||||
|
|
||||||
<!--Bubbles -->
|
|
||||||
<Preference
|
|
||||||
android:key="bubble_pref_link"
|
|
||||||
android:title="@string/notification_bubbles_title"
|
|
||||||
android:icon="@drawable/ic_create_bubble"
|
|
||||||
settings:controller="com.android.settings.notification.app.BubbleSummaryPreferenceController">
|
|
||||||
</Preference>
|
|
||||||
|
|
||||||
<!-- Bundles added here -->
|
<!-- Bundles added here -->
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="bundles"
|
android:key="bundles"
|
||||||
android:title="@string/notification_bundles"
|
android:title="@string/notification_bundles"
|
||||||
android:visibility="gone" />
|
android:visibility="gone"
|
||||||
|
android:layout="@layout/empty_view" />
|
||||||
|
|
||||||
<!-- Channels/Channel groups added here -->
|
<!-- Channels/Channel groups added here -->
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
@@ -84,61 +56,78 @@
|
|||||||
android:title="@string/no_recent_channels"
|
android:title="@string/no_recent_channels"
|
||||||
android:icon="@drawable/ic_expand"/>
|
android:icon="@drawable/ic_expand"/>
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="pre_channels_fields"
|
||||||
|
android:layout="@layout/empty_view"
|
||||||
|
android:visibility="gone" >
|
||||||
<!-- Importance toggle -->
|
<!-- Importance toggle -->
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
android:key="allow_sound"
|
android:key="allow_sound"
|
||||||
android:title="@string/allow_interruption"
|
android:title="@string/allow_interruption"
|
||||||
android:summary="@string/allow_interruption_summary"
|
android:summary="@string/allow_interruption_summary" />
|
||||||
settings:allowDividerAbove="true"
|
|
||||||
settings:allowDividerBelow="false" />
|
|
||||||
|
|
||||||
<!-- Visibility Override -->
|
<!-- Visibility Override -->
|
||||||
<com.android.settings.RestrictedListPreference
|
<com.android.settings.RestrictedListPreference
|
||||||
android:key="visibility_override"
|
android:key="visibility_override"
|
||||||
android:title="@string/app_notification_visibility_override_title"
|
android:title="@string/app_notification_visibility_override_title" />
|
||||||
settings:allowDividerAbove="true"
|
|
||||||
settings:allowDividerBelow="false" />
|
|
||||||
|
|
||||||
<!-- Bypass DND -->
|
<!-- Bypass DND -->
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
android:key="bypass_dnd"
|
android:key="bypass_dnd"
|
||||||
android:title="@string/app_notification_override_dnd_title"
|
android:title="@string/app_notification_override_dnd_title"
|
||||||
android:summary="@string/app_notification_override_dnd_summary"
|
android:summary="@string/app_notification_override_dnd_summary"/>
|
||||||
settings:allowDividerAbove="true"
|
</PreferenceCategory>
|
||||||
settings:allowDividerBelow="false" />
|
|
||||||
|
|
||||||
<!-- Allow full-screen intents -->
|
<PreferenceCategory
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
android:key="app_wide"
|
||||||
android:key="fsi_permission"
|
android:title="@string/app_notification_settings"
|
||||||
android:title="@string/app_notification_fsi_permission_title"
|
settings:isPreferenceVisible="false">
|
||||||
android:summary="@string/app_notification_fsi_permission_summary"
|
|
||||||
settings:allowDividerAbove="true"
|
|
||||||
settings:allowDividerBelow="false" />
|
|
||||||
|
|
||||||
<!-- Show badge -->
|
<!-- Whether the app can show promoted notifications -->
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
android:key="badge"
|
android:key="promoted_switch"
|
||||||
android:title="@string/notification_badge_title"
|
android:title="@string/live_notifications_switch"
|
||||||
android:icon="@drawable/ic_notification_dot"
|
android:summary="@string/live_notifications_desc" />
|
||||||
settings:useAdditionalSummary="true"
|
|
||||||
settings:restrictedSwitchSummary="@string/enabled_by_admin"
|
|
||||||
android:order="1001"
|
|
||||||
settings:allowDividerAbove="true"
|
|
||||||
settings:allowDividerBelow="false" />
|
|
||||||
|
|
||||||
<Preference
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
android:key="app_link"
|
android:key="invalid_conversation_switch"
|
||||||
android:icon="@drawable/ic_settings_24dp"
|
android:title="@string/conversation_section_switch_title" />
|
||||||
android:title="@string/app_settings_link"
|
<Preference
|
||||||
android:order="1003"
|
android:key="invalid_conversation_info"/>
|
||||||
settings:allowDividerAbove="true"
|
|
||||||
settings:allowDividerBelow="false" />
|
|
||||||
|
|
||||||
<com.android.settingslib.widget.FooterPreference
|
<!--Bubbles -->
|
||||||
android:key="deleted"
|
<Preference
|
||||||
android:icon="@drawable/ic_trash_can"
|
android:key="bubble_pref_link"
|
||||||
android:order="8000"
|
android:title="@string/notification_bubbles_title"
|
||||||
settings:allowDividerAbove="true"
|
android:icon="@drawable/ic_create_bubble"
|
||||||
settings:allowDividerBelow="false" />
|
settings:controller="com.android.settings.notification.app.BubbleSummaryPreferenceController">
|
||||||
|
</Preference>
|
||||||
|
|
||||||
|
<!-- Allow full-screen intents -->
|
||||||
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
|
android:key="fsi_permission"
|
||||||
|
android:title="@string/app_notification_fsi_permission_title"
|
||||||
|
android:summary="@string/app_notification_fsi_permission_summary"/>
|
||||||
|
|
||||||
|
<!-- Show badge -->
|
||||||
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
|
android:key="badge"
|
||||||
|
android:title="@string/notification_badge_title"
|
||||||
|
android:icon="@drawable/ic_notification_dot"
|
||||||
|
settings:useAdditionalSummary="true"
|
||||||
|
settings:restrictedSwitchSummary="@string/enabled_by_admin"
|
||||||
|
android:order="1001"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="app_link"
|
||||||
|
android:icon="@drawable/ic_settings_24dp"
|
||||||
|
android:title="@string/app_settings_link"
|
||||||
|
android:order="1003"/>
|
||||||
|
|
||||||
|
<com.android.settingslib.widget.FooterPreference
|
||||||
|
android:key="deleted"
|
||||||
|
android:icon="@drawable/ic_trash_can"
|
||||||
|
android:order="8000"/>
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
@@ -111,16 +111,18 @@
|
|||||||
android:title="@string/app_notification_override_dnd_title"
|
android:title="@string/app_notification_override_dnd_title"
|
||||||
android:summary="@string/app_notification_override_dnd_summary" />
|
android:summary="@string/app_notification_override_dnd_summary" />
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:key="app_link"
|
|
||||||
android:order="18"
|
|
||||||
android:title="@string/app_settings_link"
|
|
||||||
android:icon="@drawable/ic_settings_24dp"
|
|
||||||
settings:allowDividerAbove="true"/>
|
|
||||||
|
|
||||||
<com.android.settingslib.widget.FooterPreference
|
<com.android.settingslib.widget.FooterPreference
|
||||||
android:key="block_desc"
|
android:key="block_desc"
|
||||||
android:order="110"
|
android:order="110"/>
|
||||||
settings:allowDividerAbove="false"/>
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="external"
|
||||||
|
android:order="18"
|
||||||
|
android:layout="@layout/settingslib_preference_category_no_title">
|
||||||
|
<Preference
|
||||||
|
android:key="app_link"
|
||||||
|
android:title="@string/app_settings_link"
|
||||||
|
android:icon="@drawable/ic_settings_24dp"/>
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
@@ -32,9 +32,11 @@
|
|||||||
android:layout_height="16dp"/>
|
android:layout_height="16dp"/>
|
||||||
|
|
||||||
<!-- Repeat callers -->
|
<!-- Repeat callers -->
|
||||||
<SwitchPreferenceCompat
|
<PreferenceCategory>
|
||||||
android:key="zen_mode_repeat_callers"
|
<SwitchPreferenceCompat
|
||||||
android:title="@string/zen_mode_repeat_callers_title" />
|
android:key="zen_mode_repeat_callers"
|
||||||
|
android:title="@string/zen_mode_repeat_callers_title" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<com.android.settingslib.widget.FooterPreference
|
<com.android.settingslib.widget.FooterPreference
|
||||||
android:key="info_footer"
|
android:key="info_footer"
|
||||||
|
@@ -23,6 +23,7 @@ import androidx.preference.Preference;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
|
import com.android.settingslib.widget.TopIntroPreference;
|
||||||
|
|
||||||
public class AllConversationsPreferenceController extends ConversationListPreferenceController {
|
public class AllConversationsPreferenceController extends ConversationListPreferenceController {
|
||||||
|
|
||||||
@@ -39,9 +40,9 @@ public class AllConversationsPreferenceController extends ConversationListPrefer
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
Preference getSummaryPreference() {
|
Preference getSummaryPreference() {
|
||||||
Preference pref = new Preference(mContext);
|
Preference pref = new TopIntroPreference(mContext);
|
||||||
pref.setOrder(1);
|
pref.setOrder(1);
|
||||||
pref.setSummary(R.string.other_conversations_summary);
|
pref.setTitle(R.string.other_conversations_summary);
|
||||||
pref.setSelectable(false);
|
pref.setSelectable(false);
|
||||||
return pref;
|
return pref;
|
||||||
}
|
}
|
||||||
|
@@ -71,6 +71,9 @@ public class AllowSoundPreferenceController extends NotificationPreferenceContro
|
|||||||
pref.setEnabled(!pref.isDisabledByAdmin());
|
pref.setEnabled(!pref.isDisabledByAdmin());
|
||||||
pref.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT
|
pref.setChecked(mChannel.getImportance() >= IMPORTANCE_DEFAULT
|
||||||
|| mChannel.getImportance() == IMPORTANCE_UNSPECIFIED);
|
|| mChannel.getImportance() == IMPORTANCE_UNSPECIFIED);
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
} else { Log.i(TAG, "tried to updatestate on a null channel?!"); }
|
} else { Log.i(TAG, "tried to updatestate on a null channel?!"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -54,6 +54,9 @@ public class AppLinkPreferenceController extends NotificationPreferenceControlle
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
if (mAppRow != null) {
|
if (mAppRow != null) {
|
||||||
preference.setIntent(mAppRow.settingsIntent);
|
preference.setIntent(mAppRow.settingsIntent);
|
||||||
}
|
}
|
||||||
|
@@ -82,6 +82,9 @@ public class BadgePreferenceController extends NotificationPreferenceController
|
|||||||
|
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
if (mAppRow != null) {
|
if (mAppRow != null) {
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
|
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
|
||||||
pref.setDisabledByAdmin(mAdmin);
|
pref.setDisabledByAdmin(mAdmin);
|
||||||
if (mChannel != null) {
|
if (mChannel != null) {
|
||||||
|
@@ -82,6 +82,9 @@ public class BubbleSummaryPreferenceController extends NotificationPreferenceCon
|
|||||||
intent.putExtra(Settings.EXTRA_APP_UID, mAppRow.uid);
|
intent.putExtra(Settings.EXTRA_APP_UID, mAppRow.uid);
|
||||||
preference.setIntent(intent);
|
preference.setIntent(intent);
|
||||||
}
|
}
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -58,6 +58,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
|
|||||||
|
|
||||||
private List<NotificationChannelGroup> mChannelGroupList;
|
private List<NotificationChannelGroup> mChannelGroupList;
|
||||||
private PreferenceCategory mPreference;
|
private PreferenceCategory mPreference;
|
||||||
|
int mChannelCount;
|
||||||
|
|
||||||
public ChannelListPreferenceController(Context context, NotificationBackend backend) {
|
public ChannelListPreferenceController(Context context, NotificationBackend backend) {
|
||||||
super(context, backend);
|
super(context, backend);
|
||||||
@@ -107,6 +108,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
|
|||||||
} else {
|
} else {
|
||||||
mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
|
mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
|
||||||
}
|
}
|
||||||
|
mChannelCount = mBackend.getChannelCount(mAppRow.pkg, mAppRow.uid);
|
||||||
Collections.sort(mChannelGroupList, CHANNEL_GROUP_COMPARATOR);
|
Collections.sort(mChannelGroupList, CHANNEL_GROUP_COMPARATOR);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -116,6 +118,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
|
|||||||
if (mContext == null) {
|
if (mContext == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateFullList(mPreference, mChannelGroupList);
|
updateFullList(mPreference, mChannelGroupList);
|
||||||
}
|
}
|
||||||
}.execute();
|
}.execute();
|
||||||
@@ -129,25 +132,30 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
|
|||||||
void updateFullList(@NonNull PreferenceCategory groupPrefsList,
|
void updateFullList(@NonNull PreferenceCategory groupPrefsList,
|
||||||
@NonNull List<NotificationChannelGroup> channelGroups) {
|
@NonNull List<NotificationChannelGroup> channelGroups) {
|
||||||
if (channelGroups.isEmpty()) {
|
if (channelGroups.isEmpty()) {
|
||||||
if (groupPrefsList.getPreferenceCount() == 1
|
if (mChannelCount > 0) {
|
||||||
&& KEY_ZERO_CATEGORIES.equals(groupPrefsList.getPreference(0).getKey())) {
|
|
||||||
// Ensure the titles are correct for the current language, but otherwise leave alone
|
|
||||||
PreferenceGroup groupCategory = (PreferenceGroup) groupPrefsList.getPreference(0);
|
|
||||||
groupCategory.setTitle(R.string.notification_channels);
|
|
||||||
groupCategory.getPreference(0).setTitle(R.string.no_channels);
|
|
||||||
} else {
|
|
||||||
// Clear any contents and create the 'zero-categories' group.
|
|
||||||
groupPrefsList.removeAll();
|
groupPrefsList.removeAll();
|
||||||
|
} else {
|
||||||
|
if (groupPrefsList.getPreferenceCount() == 1
|
||||||
|
&& KEY_ZERO_CATEGORIES.equals(groupPrefsList.getPreference(0).getKey())) {
|
||||||
|
// Ensure the titles are correct for the current language, but otherwise leave alone
|
||||||
|
PreferenceGroup groupCategory = (PreferenceGroup) groupPrefsList.getPreference(
|
||||||
|
0);
|
||||||
|
groupCategory.setTitle(R.string.notification_channels);
|
||||||
|
groupCategory.getPreference(0).setTitle(R.string.no_channels);
|
||||||
|
} else {
|
||||||
|
// Clear any contents and create the 'zero-categories' group.
|
||||||
|
groupPrefsList.removeAll();
|
||||||
|
|
||||||
PreferenceCategory groupCategory = new PreferenceCategory(mContext);
|
PreferenceCategory groupCategory = new PreferenceCategory(mContext);
|
||||||
groupCategory.setTitle(R.string.notification_channels);
|
groupCategory.setTitle(R.string.notification_channels);
|
||||||
groupCategory.setKey(KEY_ZERO_CATEGORIES);
|
groupCategory.setKey(KEY_ZERO_CATEGORIES);
|
||||||
groupPrefsList.addPreference(groupCategory);
|
groupPrefsList.addPreference(groupCategory);
|
||||||
|
|
||||||
Preference empty = new Preference(mContext);
|
Preference empty = new Preference(mContext);
|
||||||
empty.setTitle(R.string.no_channels);
|
empty.setTitle(R.string.no_channels);
|
||||||
empty.setEnabled(false);
|
empty.setEnabled(false);
|
||||||
groupCategory.addPreference(empty);
|
groupCategory.addPreference(empty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
updateGroupList(groupPrefsList, channelGroups);
|
updateGroupList(groupPrefsList, channelGroups);
|
||||||
@@ -211,6 +219,11 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
|
|||||||
groupPrefsList.addPreference(group);
|
groupPrefsList.addPreference(group);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Preference otherGroup = groupPrefsList.findPreference(KEY_GENERAL_CATEGORY);
|
||||||
|
if (otherGroup != null) {
|
||||||
|
otherGroup.setTitle(numFinalGroups == 1
|
||||||
|
? R.string.notification_channels : R.string.notification_channels_other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -248,8 +261,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr
|
|||||||
List<Preference> finalOrderedPrefs = new ArrayList<>();
|
List<Preference> finalOrderedPrefs = new ArrayList<>();
|
||||||
Preference appDefinedGroupToggle;
|
Preference appDefinedGroupToggle;
|
||||||
if (group.getId() == null) {
|
if (group.getId() == null) {
|
||||||
// For the 'null' group, set the "Other" title.
|
groupPrefGroup.setTitle(R.string.notification_channels);
|
||||||
groupPrefGroup.setTitle(R.string.notification_channels_other);
|
|
||||||
appDefinedGroupToggle = null;
|
appDefinedGroupToggle = null;
|
||||||
} else {
|
} else {
|
||||||
// For an app-defined group, set their name and create a row to toggle 'isBlocked'.
|
// For an app-defined group, set their name and create a row to toggle 'isBlocked'.
|
||||||
|
@@ -63,6 +63,9 @@ public class DeletedChannelsPreferenceController extends NotificationPreferenceC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
if (mAppRow != null) {
|
if (mAppRow != null) {
|
||||||
int deletedChannelCount = mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid);
|
int deletedChannelCount = mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid);
|
||||||
preference.setTitle(StringUtil.getIcuPluralsString(mContext, deletedChannelCount,
|
preference.setTitle(StringUtil.getIcuPluralsString(mContext, deletedChannelCount,
|
||||||
|
@@ -54,6 +54,9 @@ public class DndPreferenceController extends NotificationPreferenceController
|
|||||||
|
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
if (mChannel != null) {
|
if (mChannel != null) {
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
|
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
|
||||||
pref.setDisabledByAdmin(mAdmin);
|
pref.setDisabledByAdmin(mAdmin);
|
||||||
pref.setEnabled(!pref.isDisabledByAdmin());
|
pref.setEnabled(!pref.isDisabledByAdmin());
|
||||||
|
@@ -21,9 +21,9 @@ import android.app.AppOpsManager
|
|||||||
import android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT
|
import android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT
|
||||||
import android.content.AttributionSource
|
import android.content.AttributionSource
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.PackageManager.NameNotFoundException
|
|
||||||
import android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET
|
import android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET
|
||||||
import android.content.pm.PackageManager.GET_PERMISSIONS
|
import android.content.pm.PackageManager.GET_PERMISSIONS
|
||||||
|
import android.content.pm.PackageManager.NameNotFoundException
|
||||||
import android.os.UserHandle
|
import android.os.UserHandle
|
||||||
import android.permission.PermissionManager
|
import android.permission.PermissionManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
@@ -65,6 +65,7 @@ class FullScreenIntentPermissionPreferenceController(
|
|||||||
preference.setDisabledByAdmin(mAdmin)
|
preference.setDisabledByAdmin(mAdmin)
|
||||||
preference.isEnabled = !preference.isDisabledByAdmin
|
preference.isEnabled = !preference.isDisabledByAdmin
|
||||||
preference.isChecked = isPermissionGranted()
|
preference.isChecked = isPermissionGranted()
|
||||||
|
preference.parent?.isVisible = true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPreferenceChange(preference: Preference, value: Any): Boolean {
|
override fun onPreferenceChange(preference: Preference, value: Any): Boolean {
|
||||||
|
@@ -81,9 +81,8 @@ public class HeaderPreferenceController extends NotificationPreferenceController
|
|||||||
mHeaderController = EntityHeaderController.newInstance(
|
mHeaderController = EntityHeaderController.newInstance(
|
||||||
activity, mFragment, pref.findViewById(R.id.entity_header));
|
activity, mFragment, pref.findViewById(R.id.entity_header));
|
||||||
pref = mHeaderController.setIcon(mAppRow.icon)
|
pref = mHeaderController.setIcon(mAppRow.icon)
|
||||||
.setLabel(getLabel())
|
.setLabel(getSummary())
|
||||||
.setSummary(getSummary())
|
.setSummary(getSecondSummary())
|
||||||
.setSecondSummary(getSecondSummary())
|
|
||||||
.setPackageName(mAppRow.pkg)
|
.setPackageName(mAppRow.pkg)
|
||||||
.setUid(mAppRow.uid)
|
.setUid(mAppRow.uid)
|
||||||
.setButtonActions(EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,
|
.setButtonActions(EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,
|
||||||
@@ -95,14 +94,6 @@ public class HeaderPreferenceController extends NotificationPreferenceController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharSequence getLabel() {
|
|
||||||
if (mChannel != null && !isDefaultChannel()) {
|
|
||||||
return mChannel.getName();
|
|
||||||
} else {
|
|
||||||
return mAppRow.label;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mStarted = true;
|
mStarted = true;
|
||||||
@@ -113,15 +104,7 @@ public class HeaderPreferenceController extends NotificationPreferenceController
|
|||||||
if (mChannel != null) {
|
if (mChannel != null) {
|
||||||
if (mChannelGroup != null
|
if (mChannelGroup != null
|
||||||
&& !TextUtils.isEmpty(mChannelGroup.getName())) {
|
&& !TextUtils.isEmpty(mChannelGroup.getName())) {
|
||||||
final SpannableStringBuilder summary = new SpannableStringBuilder();
|
return mChannelGroup.getName().toString();
|
||||||
BidiFormatter bidi = BidiFormatter.getInstance();
|
|
||||||
summary.append(bidi.unicodeWrap(mAppRow.label));
|
|
||||||
summary.append(bidi.unicodeWrap(mContext.getText(
|
|
||||||
R.string.notification_header_divider_symbol_with_spaces)));
|
|
||||||
summary.append(bidi.unicodeWrap(mChannelGroup.getName().toString()));
|
|
||||||
return summary.toString();
|
|
||||||
} else {
|
|
||||||
return mAppRow.label.toString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
|
@@ -23,6 +23,7 @@ import androidx.preference.Preference;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
|
import com.android.settingslib.widget.SettingsThemeHelper;
|
||||||
|
|
||||||
public class InvalidConversationInfoPreferenceController extends NotificationPreferenceController {
|
public class InvalidConversationInfoPreferenceController extends NotificationPreferenceController {
|
||||||
|
|
||||||
@@ -49,6 +50,9 @@ public class InvalidConversationInfoPreferenceController extends NotificationPre
|
|||||||
if (mPreferenceFilter != null && !isIncludedInFilter()) {
|
if (mPreferenceFilter != null && !isIncludedInFilter()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid);
|
return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ import androidx.preference.Preference;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
import com.android.settingslib.RestrictedSwitchPreference;
|
import com.android.settingslib.RestrictedSwitchPreference;
|
||||||
|
import com.android.settingslib.widget.SettingsThemeHelper;
|
||||||
|
|
||||||
public class InvalidConversationPreferenceController extends NotificationPreferenceController
|
public class InvalidConversationPreferenceController extends NotificationPreferenceController
|
||||||
implements Preference.OnPreferenceChangeListener {
|
implements Preference.OnPreferenceChangeListener {
|
||||||
@@ -67,7 +68,15 @@ public class InvalidConversationPreferenceController extends NotificationPrefere
|
|||||||
pref.setDisabledByAdmin(mAdmin);
|
pref.setDisabledByAdmin(mAdmin);
|
||||||
pref.setEnabled(!pref.isDisabledByAdmin());
|
pref.setEnabled(!pref.isDisabledByAdmin());
|
||||||
pref.setChecked(!mBackend.hasUserDemotedInvalidMsgApp(mAppRow.pkg, mAppRow.uid));
|
pref.setChecked(!mBackend.hasUserDemotedInvalidMsgApp(mAppRow.pkg, mAppRow.uid));
|
||||||
preference.setSummary(mContext.getString(R.string.conversation_section_switch_summary));
|
if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
|
preference.setSummary(mContext.getString(
|
||||||
|
R.string.conversation_section_switch_complete_summary));
|
||||||
|
} else {
|
||||||
|
preference.setSummary(mContext.getString(R.string.conversation_section_switch_summary));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -23,6 +23,7 @@ import androidx.preference.Preference;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
|
import com.android.settingslib.widget.TopIntroPreference;
|
||||||
|
|
||||||
public class PriorityConversationsPreferenceController extends
|
public class PriorityConversationsPreferenceController extends
|
||||||
ConversationListPreferenceController {
|
ConversationListPreferenceController {
|
||||||
@@ -40,9 +41,9 @@ public class PriorityConversationsPreferenceController extends
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
Preference getSummaryPreference() {
|
Preference getSummaryPreference() {
|
||||||
Preference pref = new Preference(mContext);
|
Preference pref = new TopIntroPreference(mContext);
|
||||||
pref.setOrder(1);
|
pref.setOrder(1);
|
||||||
pref.setSummary(R.string.important_conversations_summary_bubbles);
|
pref.setTitle(R.string.important_conversations_summary_bubbles);
|
||||||
pref.setSelectable(false);
|
pref.setSelectable(false);
|
||||||
return pref;
|
return pref;
|
||||||
}
|
}
|
||||||
|
@@ -20,14 +20,12 @@ import android.content.Context;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceCategory;
|
|
||||||
|
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
import com.android.settingslib.RestrictedSwitchPreference;
|
import com.android.settingslib.RestrictedSwitchPreference;
|
||||||
|
|
||||||
public class PromotedNotificationsPreferenceController extends
|
public class PromotedNotificationsPreferenceController extends
|
||||||
NotificationPreferenceController implements Preference.OnPreferenceChangeListener {
|
NotificationPreferenceController implements Preference.OnPreferenceChangeListener {
|
||||||
private static final String KEY_PROMOTED_CATEGORY = "promoted_category";
|
|
||||||
protected static final String KEY_PROMOTED_SWITCH = "promoted_switch";
|
protected static final String KEY_PROMOTED_SWITCH = "promoted_switch";
|
||||||
|
|
||||||
public PromotedNotificationsPreferenceController(@NonNull Context context,
|
public PromotedNotificationsPreferenceController(@NonNull Context context,
|
||||||
@@ -38,7 +36,7 @@ public class PromotedNotificationsPreferenceController extends
|
|||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public String getPreferenceKey() {
|
public String getPreferenceKey() {
|
||||||
return KEY_PROMOTED_CATEGORY;
|
return KEY_PROMOTED_SWITCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -56,12 +54,13 @@ public class PromotedNotificationsPreferenceController extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the state of the promoted notifications switch. Because this controller governs
|
* Updates the state of the promoted notifications switch.
|
||||||
* the full PreferenceCategory, we must find the switch preference within the category first.
|
|
||||||
*/
|
*/
|
||||||
public void updateState(@NonNull Preference preference) {
|
public void updateState(@NonNull Preference preference) {
|
||||||
PreferenceCategory category = (PreferenceCategory) preference;
|
RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
|
||||||
RestrictedSwitchPreference pref = category.findPreference(KEY_PROMOTED_SWITCH);
|
if (pref.getParent() != null) {
|
||||||
|
pref.getParent().setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (pref != null && mAppRow != null) {
|
if (pref != null && mAppRow != null) {
|
||||||
pref.setDisabledByAdmin(mAdmin);
|
pref.setDisabledByAdmin(mAdmin);
|
||||||
|
@@ -40,6 +40,7 @@ import com.android.settings.applications.AppInfoBase;
|
|||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.widget.ButtonPreference;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
import java.text.Collator;
|
import java.text.Collator;
|
||||||
@@ -75,14 +76,12 @@ public class RecentConversationsPreferenceController extends AbstractPreferenceC
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO(b/233325816): Use ButtonPreference instead.
|
ButtonPreference getClearAll(PreferenceGroup parent) {
|
||||||
LayoutPreference getClearAll(PreferenceGroup parent) {
|
ButtonPreference pref = new ButtonPreference(mContext);
|
||||||
LayoutPreference pref = new LayoutPreference(
|
pref.setTitle(R.string.conversation_settings_clear_recents);
|
||||||
mContext, R.layout.conversations_clear_recents);
|
|
||||||
pref.setKey(getPreferenceKey() + CLEAR_ALL_KEY_SUFFIX);
|
pref.setKey(getPreferenceKey() + CLEAR_ALL_KEY_SUFFIX);
|
||||||
pref.setOrder(1);
|
pref.setOrder(1);
|
||||||
Button button = pref.findViewById(R.id.conversation_settings_clear_recents);
|
pref.setOnClickListener(v -> {
|
||||||
button.setOnClickListener(v -> {
|
|
||||||
try {
|
try {
|
||||||
mPs.removeAllRecentConversations();
|
mPs.removeAllRecentConversations();
|
||||||
// Removing recents is asynchronous, so we can't immediately reload the list from
|
// Removing recents is asynchronous, so we can't immediately reload the list from
|
||||||
@@ -97,7 +96,8 @@ public class RecentConversationsPreferenceController extends AbstractPreferenceC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
button.announceForAccessibility(mContext.getString(R.string.recent_convos_removed));
|
pref.getButton().announceForAccessibility(
|
||||||
|
mContext.getString(R.string.recent_convos_removed));
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Slog.w(TAG, "Could not clear recents", e);
|
Slog.w(TAG, "Could not clear recents", e);
|
||||||
}
|
}
|
||||||
@@ -160,25 +160,27 @@ public class RecentConversationsPreferenceController extends AbstractPreferenceC
|
|||||||
.forEachOrdered(pref -> {
|
.forEachOrdered(pref -> {
|
||||||
pref.setOrder(order.getAndIncrement());
|
pref.setOrder(order.getAndIncrement());
|
||||||
mPreferenceGroup.addPreference(pref);
|
mPreferenceGroup.addPreference(pref);
|
||||||
if (pref.hasClearListener()) {
|
if (pref instanceof RecentConversationPreference
|
||||||
|
&& ((RecentConversationPreference) pref).hasClearListener()) {
|
||||||
hasClearable.set(true);
|
hasClearable.set(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return hasClearable.get();
|
return hasClearable.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected RecentConversationPreference createConversationPref(
|
protected Preference createConversationPref(
|
||||||
final ConversationChannel conversation) {
|
final ConversationChannel conversation) {
|
||||||
final String pkg = conversation.getShortcutInfo().getPackage();
|
final String pkg = conversation.getShortcutInfo().getPackage();
|
||||||
final int uid = conversation.getUid();
|
final int uid = conversation.getUid();
|
||||||
final String conversationId = conversation.getShortcutInfo().getId();
|
final String conversationId = conversation.getShortcutInfo().getId();
|
||||||
RecentConversationPreference pref = new RecentConversationPreference(mContext);
|
Preference pref = conversation.hasActiveNotifications() ? new Preference(mContext)
|
||||||
|
: new RecentConversationPreference(mContext);
|
||||||
|
|
||||||
if (!conversation.hasActiveNotifications()) {
|
if (!conversation.hasActiveNotifications()) {
|
||||||
pref.setOnClearClickListener(() -> {
|
((RecentConversationPreference) pref).setOnClearClickListener(() -> {
|
||||||
try {
|
try {
|
||||||
mPs.removeRecentConversation(pkg, UserHandle.getUserId(uid), conversationId);
|
mPs.removeRecentConversation(pkg, UserHandle.getUserId(uid), conversationId);
|
||||||
pref.getClearView().announceForAccessibility(
|
((RecentConversationPreference) pref).getClearView().announceForAccessibility(
|
||||||
mContext.getString(R.string.recent_convo_removed));
|
mContext.getString(R.string.recent_convo_removed));
|
||||||
mPreferenceGroup.removePreference(pref);
|
mPreferenceGroup.removePreference(pref);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
@@ -56,6 +56,9 @@ public class ShowMorePreferenceController extends NotificationPreferenceControll
|
|||||||
if (mAppRow.banned || mAppRow.showAllChannels) {
|
if (mAppRow.banned || mAppRow.showAllChannels) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (mBackend.getChannelCount(mAppRow.pkg, mAppRow.uid) == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -75,6 +75,10 @@ public class VisibilityPreferenceController extends NotificationPreferenceContro
|
|||||||
|
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
if (mChannel != null && mAppRow != null) {
|
if (mChannel != null && mAppRow != null) {
|
||||||
|
if (preference.getParent() != null) {
|
||||||
|
preference.getParent().setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
RestrictedListPreference pref = (RestrictedListPreference) preference;
|
RestrictedListPreference pref = (RestrictedListPreference) preference;
|
||||||
ArrayList<CharSequence> entries = new ArrayList<>();
|
ArrayList<CharSequence> entries = new ArrayList<>();
|
||||||
ArrayList<CharSequence> values = new ArrayList<>();
|
ArrayList<CharSequence> values = new ArrayList<>();
|
||||||
|
@@ -38,6 +38,8 @@ import android.content.Context;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceCategory;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
@@ -68,7 +70,6 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
private NotificationManager mNm;
|
private NotificationManager mNm;
|
||||||
@Mock
|
@Mock
|
||||||
private UserManager mUm;
|
private UserManager mUm;
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
|
||||||
private PreferenceScreen mScreen;
|
private PreferenceScreen mScreen;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
@@ -83,6 +84,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
|
shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
|
||||||
shadowApplication.setSystemService(Context.USER_SERVICE, mUm);
|
shadowApplication.setSystemService(Context.USER_SERVICE, mUm);
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
|
mScreen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
|
||||||
mController =
|
mController =
|
||||||
spy(new AllowSoundPreferenceController(mContext, mDependentFieldListener, mBackend));
|
spy(new AllowSoundPreferenceController(mContext, mDependentFieldListener, mBackend));
|
||||||
}
|
}
|
||||||
@@ -160,6 +162,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
RestrictedLockUtils.EnforcedAdmin.class), null);
|
RestrictedLockUtils.EnforcedAdmin.class), null);
|
||||||
|
|
||||||
Preference pref = new RestrictedSwitchPreference(mContext);
|
Preference pref = new RestrictedSwitchPreference(mContext);
|
||||||
|
mScreen.addPreference(pref);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
|
|
||||||
assertFalse(pref.isEnabled());
|
assertFalse(pref.isEnabled());
|
||||||
@@ -173,6 +176,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
mController.onResume(appRow, channel, null, null, null, null, null);
|
mController.onResume(appRow, channel, null, null, null, null, null);
|
||||||
|
|
||||||
Preference pref = new RestrictedSwitchPreference(mContext);
|
Preference pref = new RestrictedSwitchPreference(mContext);
|
||||||
|
mScreen.addPreference(pref);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
|
|
||||||
assertTrue(pref.isEnabled());
|
assertTrue(pref.isEnabled());
|
||||||
@@ -186,6 +190,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
null);
|
null);
|
||||||
|
|
||||||
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
||||||
|
mScreen.addPreference(pref);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
assertTrue(pref.isChecked());
|
assertTrue(pref.isChecked());
|
||||||
}
|
}
|
||||||
@@ -198,6 +203,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
null);
|
null);
|
||||||
|
|
||||||
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
||||||
|
mScreen.addPreference(pref);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
assertTrue(pref.isChecked());
|
assertTrue(pref.isChecked());
|
||||||
}
|
}
|
||||||
@@ -210,6 +216,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
null);
|
null);
|
||||||
|
|
||||||
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
||||||
|
mScreen.addPreference(pref);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
assertFalse(pref.isChecked());
|
assertFalse(pref.isChecked());
|
||||||
}
|
}
|
||||||
@@ -222,7 +229,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
null);
|
null);
|
||||||
|
|
||||||
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(pref);
|
mScreen.addPreference(pref);
|
||||||
mController.displayPreference(mScreen);
|
mController.displayPreference(mScreen);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
pref.setChecked(true);
|
pref.setChecked(true);
|
||||||
@@ -240,7 +247,7 @@ public class AllowSoundPreferenceControllerTest {
|
|||||||
null);
|
null);
|
||||||
|
|
||||||
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
RestrictedSwitchPreference pref = new RestrictedSwitchPreference(mContext);
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(pref);
|
mScreen.addPreference(pref);
|
||||||
mController.displayPreference(mScreen);
|
mController.displayPreference(mScreen);
|
||||||
mController.updateState(pref);
|
mController.updateState(pref);
|
||||||
|
|
||||||
|
@@ -37,6 +37,7 @@ import android.permission.PermissionManager.PERMISSION_HARD_DENIED
|
|||||||
import android.permission.PermissionManager.PERMISSION_SOFT_DENIED
|
import android.permission.PermissionManager.PERMISSION_SOFT_DENIED
|
||||||
import android.permission.PermissionManager.PermissionResult
|
import android.permission.PermissionManager.PermissionResult
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
||||||
import com.android.settings.notification.NotificationBackend
|
import com.android.settings.notification.NotificationBackend
|
||||||
@@ -80,7 +81,6 @@ class FullScreenIntentPermissionPreferenceControllerTest {
|
|||||||
|
|
||||||
private lateinit var preference: RestrictedSwitchPreference
|
private lateinit var preference: RestrictedSwitchPreference
|
||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
|
||||||
private lateinit var screen: PreferenceScreen
|
private lateinit var screen: PreferenceScreen
|
||||||
|
|
||||||
private lateinit var controller: FullScreenIntentPermissionPreferenceController
|
private lateinit var controller: FullScreenIntentPermissionPreferenceController
|
||||||
@@ -94,7 +94,8 @@ class FullScreenIntentPermissionPreferenceControllerTest {
|
|||||||
|
|
||||||
preference = RestrictedSwitchPreference(context).apply { key = KEY_FSI_PERMISSION }
|
preference = RestrictedSwitchPreference(context).apply { key = KEY_FSI_PERMISSION }
|
||||||
|
|
||||||
whenever(screen.findPreference<Preference>(KEY_FSI_PERMISSION)).thenReturn(preference)
|
screen = PreferenceManager(context).createPreferenceScreen(context)
|
||||||
|
screen.addPreference(preference)
|
||||||
|
|
||||||
controller = FullScreenIntentPermissionPreferenceController(
|
controller = FullScreenIntentPermissionPreferenceController(
|
||||||
context,
|
context,
|
||||||
|
@@ -113,27 +113,6 @@ public class HeaderPreferenceControllerTest {
|
|||||||
assertTrue(mController.isAvailable());
|
assertTrue(mController.isAvailable());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetLabel() {
|
|
||||||
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
|
||||||
appRow.label = "bananas";
|
|
||||||
mController.onResume(appRow, null, null, null, null, null, null);
|
|
||||||
assertEquals(appRow.label, mController.getLabel());
|
|
||||||
|
|
||||||
NotificationChannelGroup group = new NotificationChannelGroup("id", "name");
|
|
||||||
mController.onResume(appRow, null, group, null, null, null, null);
|
|
||||||
assertEquals(appRow.label, mController.getLabel());
|
|
||||||
|
|
||||||
NotificationChannel channel = new NotificationChannel("cid", "cname", IMPORTANCE_NONE);
|
|
||||||
mController.onResume(appRow, channel, group, null, null, null, null);
|
|
||||||
assertEquals(channel.getName(), mController.getLabel());
|
|
||||||
|
|
||||||
NotificationChannel defaultChannel = new NotificationChannel(
|
|
||||||
NotificationChannel.DEFAULT_CHANNEL_ID, "", IMPORTANCE_NONE);
|
|
||||||
mController.onResume(appRow, defaultChannel, null, null, null, null, null);
|
|
||||||
assertEquals(appRow.label, mController.getLabel());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetSummary() {
|
public void testGetSummary() {
|
||||||
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
||||||
@@ -146,16 +125,14 @@ public class HeaderPreferenceControllerTest {
|
|||||||
NotificationChannel channel = new NotificationChannel("cid", "cname", IMPORTANCE_NONE);
|
NotificationChannel channel = new NotificationChannel("cid", "cname", IMPORTANCE_NONE);
|
||||||
mController.onResume(appRow, channel, group, null, null, null, null);
|
mController.onResume(appRow, channel, group, null, null, null, null);
|
||||||
assertTrue(mController.getSummary().toString().contains(group.getName()));
|
assertTrue(mController.getSummary().toString().contains(group.getName()));
|
||||||
assertTrue(mController.getSummary().toString().contains(appRow.label));
|
|
||||||
|
|
||||||
mController.onResume(appRow, channel, null, null, null, null, null);
|
mController.onResume(appRow, channel, null, null, null, null, null);
|
||||||
assertFalse(mController.getSummary().toString().contains(group.getName()));
|
assertFalse(mController.getSummary().toString().contains(group.getName()));
|
||||||
assertTrue(mController.getSummary().toString().contains(appRow.label));
|
|
||||||
|
|
||||||
NotificationChannel defaultChannel = new NotificationChannel(
|
NotificationChannel defaultChannel = new NotificationChannel(
|
||||||
NotificationChannel.DEFAULT_CHANNEL_ID, "", IMPORTANCE_NONE);
|
NotificationChannel.DEFAULT_CHANNEL_ID, "", IMPORTANCE_NONE);
|
||||||
mController.onResume(appRow, defaultChannel, null, null, null, null, null);
|
mController.onResume(appRow, defaultChannel, null, null, null, null, null);
|
||||||
assertEquals(appRow.label, mController.getSummary());
|
assertEquals("", mController.getSummary());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -34,6 +34,7 @@ import androidx.preference.PreferenceScreen;
|
|||||||
|
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||||
|
import com.android.settingslib.widget.SettingsThemeHelper;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
@@ -88,6 +89,18 @@ public class InvalidConversationInfoPreferenceControllerTest {
|
|||||||
mController.updateState(mock(Preference.class));
|
mController.updateState(mock(Preference.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsAvailable_notIfExpressiveTheme() {
|
||||||
|
if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
|
||||||
|
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
|
||||||
|
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
||||||
|
appRow.pkg = "hi";
|
||||||
|
appRow.uid = 0;
|
||||||
|
mController.onResume(appRow, null, null, null, null, null, null);
|
||||||
|
assertFalse(mController.isAvailable());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsAvailable_notIfAppBlocked() {
|
public void testIsAvailable_notIfAppBlocked() {
|
||||||
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
|
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
|
||||||
@@ -111,6 +124,9 @@ public class InvalidConversationInfoPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsAvailable() {
|
public void testIsAvailable() {
|
||||||
|
if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
|
when(mBackend.isInInvalidMsgState(anyString(), anyInt())).thenReturn(true);
|
||||||
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
||||||
appRow.pkg = "hi";
|
appRow.pkg = "hi";
|
||||||
|
@@ -18,13 +18,12 @@ package com.android.settings.notification.app;
|
|||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.app.Flags;
|
import android.app.Flags;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -32,7 +31,7 @@ import android.platform.test.annotations.DisableFlags;
|
|||||||
import android.platform.test.annotations.EnableFlags;
|
import android.platform.test.annotations.EnableFlags;
|
||||||
import android.platform.test.flag.junit.SetFlagsRule;
|
import android.platform.test.flag.junit.SetFlagsRule;
|
||||||
|
|
||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
@@ -55,8 +54,6 @@ public class PromotedNotificationsPreferenceControllerTest {
|
|||||||
private NotificationBackend.AppRow mAppRow;
|
private NotificationBackend.AppRow mAppRow;
|
||||||
@Mock
|
@Mock
|
||||||
private NotificationBackend mBackend;
|
private NotificationBackend mBackend;
|
||||||
@Mock
|
|
||||||
private PreferenceCategory mPrefCategory;
|
|
||||||
private RestrictedSwitchPreference mSwitch;
|
private RestrictedSwitchPreference mSwitch;
|
||||||
|
|
||||||
private PromotedNotificationsPreferenceController mPrefController;
|
private PromotedNotificationsPreferenceController mPrefController;
|
||||||
@@ -66,7 +63,7 @@ public class PromotedNotificationsPreferenceControllerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = ApplicationProvider.getApplicationContext();
|
mContext = ApplicationProvider.getApplicationContext();
|
||||||
mSwitch = new RestrictedSwitchPreference(mContext);
|
mSwitch = new RestrictedSwitchPreference(mContext);
|
||||||
when(mPrefCategory.findPreference("promoted_switch")).thenReturn(mSwitch);
|
new PreferenceManager(mContext).createPreferenceScreen(mContext).addPreference(mSwitch);
|
||||||
mPrefController = new PromotedNotificationsPreferenceController(mContext, mBackend);
|
mPrefController = new PromotedNotificationsPreferenceController(mContext, mBackend);
|
||||||
|
|
||||||
mAppRow = new NotificationBackend.AppRow();
|
mAppRow = new NotificationBackend.AppRow();
|
||||||
@@ -93,12 +90,12 @@ public class PromotedNotificationsPreferenceControllerTest {
|
|||||||
mAppRow.canBePromoted = true;
|
mAppRow.canBePromoted = true;
|
||||||
mPrefController.onResume(mAppRow, null, null, null, null, null, null);
|
mPrefController.onResume(mAppRow, null, null, null, null, null, null);
|
||||||
|
|
||||||
mPrefController.updateState(mPrefCategory);
|
mPrefController.updateState(mSwitch);
|
||||||
assertThat(mSwitch.isChecked()).isTrue();
|
assertThat(mSwitch.isChecked()).isTrue();
|
||||||
|
|
||||||
mAppRow.canBePromoted = false;
|
mAppRow.canBePromoted = false;
|
||||||
mPrefController.onResume(mAppRow, null, null, null, null, null, null);
|
mPrefController.onResume(mAppRow, null, null, null, null, null, null);
|
||||||
mPrefController.updateState(mPrefCategory);
|
mPrefController.updateState(mSwitch);
|
||||||
assertThat(mSwitch.isChecked()).isFalse();
|
assertThat(mSwitch.isChecked()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -50,6 +50,7 @@ import androidx.test.core.app.ApplicationProvider;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.applications.AppInfoBase;
|
import com.android.settings.applications.AppInfoBase;
|
||||||
import com.android.settings.notification.NotificationBackend;
|
import com.android.settings.notification.NotificationBackend;
|
||||||
|
import com.android.settingslib.widget.ButtonPreference;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@@ -232,14 +233,16 @@ public class RecentConversationsPreferenceControllerTest {
|
|||||||
new NotificationChannelGroup("hi", "group"), 7,
|
new NotificationChannelGroup("hi", "group"), 7,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
RecentConversationPreference pref = mController.createConversationPref(ccw);
|
Preference pref = mController.createConversationPref(ccw);
|
||||||
final View view = View.inflate(mContext, pref.getLayoutResource(), null);
|
final View view = View.inflate(mContext, pref.getLayoutResource(), null);
|
||||||
PreferenceViewHolder holder = spy(PreferenceViewHolder.createInstanceForTests(view));
|
PreferenceViewHolder holder = spy(PreferenceViewHolder.createInstanceForTests(view));
|
||||||
View delete = View.inflate(mContext, pref.getSecondTargetResId(), null);
|
View delete = View.inflate(mContext, ((RecentConversationPreference) pref)
|
||||||
when(holder.findViewById(pref.getClearId())).thenReturn(delete);
|
.getSecondTargetResId(), null);
|
||||||
|
when(holder.findViewById(((RecentConversationPreference) pref).getClearId()))
|
||||||
|
.thenReturn(delete);
|
||||||
|
|
||||||
pref.onBindViewHolder(holder);
|
pref.onBindViewHolder(holder);
|
||||||
pref.getClearView().performClick();
|
((RecentConversationPreference) pref).getClearView().performClick();
|
||||||
|
|
||||||
verify(mPs).removeRecentConversation(
|
verify(mPs).removeRecentConversation(
|
||||||
si.getPackage(), UserHandle.getUserId(ccw.getUid()), si.getId());
|
si.getPackage(), UserHandle.getUserId(ccw.getUid()), si.getId());
|
||||||
@@ -260,24 +263,24 @@ public class RecentConversationsPreferenceControllerTest {
|
|||||||
new NotificationChannelGroup("hi", "group"), 7,
|
new NotificationChannelGroup("hi", "group"), 7,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
RecentConversationPreference pref = mController.createConversationPref(ccw);
|
Preference pref = mController.createConversationPref(ccw);
|
||||||
final View view = View.inflate(mContext, pref.getLayoutResource(), null);
|
final View view = View.inflate(mContext, pref.getLayoutResource(), null);
|
||||||
PreferenceViewHolder holder = spy(PreferenceViewHolder.createInstanceForTests(view));
|
PreferenceViewHolder holder = spy(PreferenceViewHolder.createInstanceForTests(view));
|
||||||
View delete = View.inflate(mContext, pref.getSecondTargetResId(), null);
|
View delete = View.inflate(mContext, ((RecentConversationPreference) pref).
|
||||||
when(holder.findViewById(pref.getClearId())).thenReturn(delete);
|
getSecondTargetResId(), null);
|
||||||
|
when(holder.findViewById(((RecentConversationPreference) pref).getClearId()))
|
||||||
|
.thenReturn(delete);
|
||||||
mPreferenceGroup.addPreference(pref);
|
mPreferenceGroup.addPreference(pref);
|
||||||
|
|
||||||
RecentConversationPreference pref2 = mController.createConversationPref(ccw2);
|
Preference pref2 = mController.createConversationPref(ccw2);
|
||||||
final View view2 = View.inflate(mContext, pref2.getLayoutResource(), null);
|
|
||||||
PreferenceViewHolder holder2 = spy(PreferenceViewHolder.createInstanceForTests(view2));
|
|
||||||
View delete2 = View.inflate(mContext, pref2.getSecondTargetResId(), null);
|
|
||||||
when(holder2.findViewById(pref.getClearId())).thenReturn(delete2);
|
|
||||||
mPreferenceGroup.addPreference(pref2);
|
mPreferenceGroup.addPreference(pref2);
|
||||||
|
|
||||||
LayoutPreference clearAll = mController.getClearAll(mPreferenceGroup);
|
ButtonPreference clearAll = mController.getClearAll(mPreferenceGroup);
|
||||||
|
final View rootView = View.inflate(mContext, clearAll.getLayoutResource(), null);
|
||||||
|
clearAll.onBindViewHolder(PreferenceViewHolder.createInstanceForTests(rootView));
|
||||||
mPreferenceGroup.addPreference(clearAll);
|
mPreferenceGroup.addPreference(clearAll);
|
||||||
|
|
||||||
clearAll.findViewById(R.id.conversation_settings_clear_recents).performClick();
|
clearAll.getButton().performClick();
|
||||||
|
|
||||||
verify(mPs).removeAllRecentConversations();
|
verify(mPs).removeAllRecentConversations();
|
||||||
assertThat((Preference) mPreferenceGroup.findPreference("hi:person")).isNull();
|
assertThat((Preference) mPreferenceGroup.findPreference("hi:person")).isNull();
|
||||||
@@ -294,9 +297,9 @@ public class RecentConversationsPreferenceControllerTest {
|
|||||||
new NotificationChannelGroup("hi", "group"), 7,
|
new NotificationChannelGroup("hi", "group"), 7,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
RecentConversationPreference pref = mController.createConversationPref(ccw);
|
Preference pref = mController.createConversationPref(ccw);
|
||||||
|
|
||||||
assertThat(pref.hasClearListener()).isFalse();
|
assertThat(pref instanceof RecentConversationPreference).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -91,6 +91,14 @@ public class ChannelListPreferenceControllerTest {
|
|||||||
assertEquals("zeroCategories", mGroupList.getPreference(0).getKey());
|
assertEquals("zeroCategories", mGroupList.getPreference(0).getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test the case with no groups but hidden channels
|
||||||
|
inGroups = new ArrayList<>();
|
||||||
|
mController.mChannelCount = 1;
|
||||||
|
mController.updateFullList(mGroupList, inGroups);
|
||||||
|
{
|
||||||
|
assertEquals(0, mGroupList.getPreferenceCount());
|
||||||
|
}
|
||||||
|
|
||||||
// Test that adding a group clears the zero category and adds everything
|
// Test that adding a group clears the zero category and adds everything
|
||||||
NotificationChannelGroup inGroup1 = new NotificationChannelGroup("group1", "Group 1");
|
NotificationChannelGroup inGroup1 = new NotificationChannelGroup("group1", "Group 1");
|
||||||
inGroup1.addChannel(new NotificationChannel("ch1a", "Channel 1A", IMPORTANCE_DEFAULT));
|
inGroup1.addChannel(new NotificationChannel("ch1a", "Channel 1A", IMPORTANCE_DEFAULT));
|
||||||
@@ -250,6 +258,7 @@ public class ChannelListPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Test that we go back to the empty state when clearing all groups and channels.
|
// Test that we go back to the empty state when clearing all groups and channels.
|
||||||
|
mController.mChannelCount = 0;
|
||||||
inGroups.clear();
|
inGroups.clear();
|
||||||
mController.updateFullList(mGroupList, inGroups);
|
mController.updateFullList(mGroupList, inGroups);
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user