Merge "Align history styling with Settings" into main

This commit is contained in:
Julia Reynolds
2025-01-16 06:02:24 -08:00
committed by Android (Google) Code Review
8 changed files with 112 additions and 92 deletions

View File

@@ -17,7 +17,6 @@
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll" android:id="@+id/scroll"
android:background="?android:attr/colorBackgroundFloating"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
@@ -132,7 +131,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:padding="16dp"> android:paddingTop="16dp"
android:paddingBottom="16dp">
<LinearLayout <LinearLayout
android:id="@+id/snoozed_list" android:id="@+id/snoozed_list"
@@ -145,12 +145,12 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="@string/notification_history_snooze" android:text="@string/notification_history_snooze"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:textAppearance="@style/TextAppearance.HomepageCardTitle" android:textAppearance="@style/TextAppearance.HomepageCardTitle"
android:paddingBottom="16dp" /> android:paddingBottom="16dp" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/notification_list" android:id="@+id/notification_list"
android:background="@drawable/rounded_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipChildren="true" android:clipChildren="true"
@@ -170,10 +170,10 @@
android:text="@string/notification_history_dismiss" android:text="@string/notification_history_dismiss"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textAppearance="@style/TextAppearance.HomepageCardTitle" android:textAppearance="@style/TextAppearance.HomepageCardTitle"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:paddingBottom="16dp" /> android:paddingBottom="16dp" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/notification_list" android:id="@+id/notification_list"
android:background="@drawable/rounded_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipChildren="true" android:clipChildren="true"
@@ -191,13 +191,13 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textAppearance="@style/TextAppearance.HomepageCardTitle" android:textAppearance="@style/TextAppearance.HomepageCardTitle"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:paddingBottom="16dp" /> android:paddingBottom="16dp" />
<LinearLayout <LinearLayout
android:id="@+id/apps" android:id="@+id/apps"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical">
android:background="@drawable/rounded_bg">
<!-- app based recycler views added here --> <!-- app based recycler views added here -->
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -25,6 +25,8 @@
android:id="@+id/app_header" android:id="@+id/app_header"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingTop="20dp" android:paddingTop="20dp"
android:paddingBottom="18dp" android:paddingBottom="18dp"
android:paddingStart="16dp" android:paddingStart="16dp"
@@ -84,15 +86,12 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?android:attr/listDivider" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/notification_list_wrapper" android:id="@+id/notification_list_wrapper"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd">
<com.android.settings.notification.history.NotificationHistoryRecyclerView <com.android.settings.notification.history.NotificationHistoryRecyclerView
android:id="@+id/notification_list" android:id="@+id/notification_list"

View File

@@ -17,17 +17,22 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="48dp" android:minHeight="48dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="16dp"
android:orientation="vertical" android:orientation="vertical"
android:foreground="?android:attr/selectableItemBackground"> android:foreground="?android:attr/selectableItemBackground">
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/listDivider" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="@*android:dimen/status_bar_icon_size" android:minHeight="@*android:dimen/status_bar_icon_size"
android:layout_marginStart="54dp"
android:paddingTop="16dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:gravity="center_vertical"> android:gravity="center_vertical">
<TextView <TextView
@@ -36,7 +41,6 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginStart="32dp"
android:ellipsize="end" android:ellipsize="end"
android:singleLine="true" android:singleLine="true"
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title" android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
@@ -77,11 +81,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical" android:layout_gravity="left|center_vertical"
android:ellipsize="end" android:ellipsize="end"
android:layout_marginStart="32dp" android:layout_marginStart="54dp"
android:maxLines="7" android:maxLines="7"
android:paddingTop="4dp" android:paddingTop="4dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification" android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification"
android:textAlignment="viewStart" /> android:textAlignment="viewStart"
android:paddingBottom="16dp" />
</LinearLayout> </LinearLayout>

View File

@@ -22,8 +22,10 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="16dp" android:paddingStart="16dp"
android:layout_marginEnd="16dp" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingTop="16dp" android:paddingTop="16dp"
android:paddingBottom="16dp" android:paddingBottom="16dp"
android:orientation="vertical"> android:orientation="vertical">
@@ -128,11 +130,5 @@
/> />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/listDivider" />
</LinearLayout> </LinearLayout>

View File

@@ -17,11 +17,14 @@
package com.android.settings.notification.history; package com.android.settings.notification.history;
import static android.provider.Settings.Secure.NOTIFICATION_HISTORY_ENABLED; import static android.provider.Settings.Secure.NOTIFICATION_HISTORY_ENABLED;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static androidx.core.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUSED; import static androidx.core.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUSED;
import android.annotation.AttrRes; import android.annotation.AttrRes;
import android.annotation.ColorInt; import android.annotation.ColorInt;
import android.annotation.DrawableRes;
import android.app.ActionBar; import android.app.ActionBar;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.INotificationManager; import android.app.INotificationManager;
@@ -30,7 +33,6 @@ import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Outline;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
@@ -41,12 +43,10 @@ import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.util.Log; import android.util.Log;
import android.util.Slog; import android.util.Slog;
import android.util.TypedValue;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
@@ -95,22 +95,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
private PackageManager mPm; private PackageManager mPm;
private CountDownLatch mCountdownLatch; private CountDownLatch mCountdownLatch;
private Future mCountdownFuture; private Future mCountdownFuture;
private final ViewOutlineProvider mOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
final TypedArray ta = NotificationHistoryActivity.this.obtainStyledAttributes(
new int[]{android.R.attr.dialogCornerRadius});
final float dialogCornerRadius = ta.getDimension(0, 0);
ta.recycle();
TypedValue v = new TypedValue();
NotificationHistoryActivity.this.getTheme().resolveAttribute(
com.android.internal.R.attr.listDivider, v, true);
int bottomPadding = NotificationHistoryActivity.this.getDrawable(v.resourceId)
.getIntrinsicHeight();
outline.setRoundRect(0, 0, view.getWidth(), (view.getHeight() - bottomPadding),
dialogCornerRadius);
}
};
private UiEventLogger mUiEventLogger = new UiEventLoggerImpl(); private UiEventLogger mUiEventLogger = new UiEventLoggerImpl();
enum NotificationHistoryEvent implements UiEventLogger.UiEventEnum { enum NotificationHistoryEvent implements UiEventLogger.UiEventEnum {
@@ -158,20 +143,28 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
private HistoryLoader.OnHistoryLoaderListener mOnHistoryLoaderListener = notifications -> { private HistoryLoader.OnHistoryLoaderListener mOnHistoryLoaderListener = notifications -> {
findViewById(R.id.today_list).setVisibility( findViewById(R.id.today_list).setVisibility(
notifications.isEmpty() ? View.GONE : View.VISIBLE); notifications.isEmpty() ? GONE : VISIBLE);
mCountdownLatch.countDown(); mCountdownLatch.countDown();
View recyclerView = mTodayView.findViewById(R.id.apps); View recyclerView = mTodayView.findViewById(R.id.apps);
recyclerView.setClipToOutline(true); recyclerView.setClipToOutline(true);
mTodayView.setOutlineProvider(mOutlineProvider);
mSnoozeView.setOutlineProvider(mOutlineProvider);
// for each package, new header and recycler view // for each package, new header and recycler view
for (int i = 0, notificationsSize = notifications.size(); i < notificationsSize; i++) { for (int i = 0, notificationsSize = notifications.size(); i < notificationsSize; i++) {
NotificationHistoryPackage nhp = notifications.get(i); NotificationHistoryPackage nhp = notifications.get(i);
View viewForPackage = LayoutInflater.from(this) View viewForPackage = LayoutInflater.from(this)
.inflate(R.layout.notification_history_app_layout, null); .inflate(R.layout.notification_history_app_layout, null);
int cornerType = ROUND_CORNER_CENTER;
if (i == (notificationsSize - 1)) {
cornerType |= ROUND_CORNER_BOTTOM;
}
if (i == 0) {
cornerType |= ROUND_CORNER_TOP;
}
int backgroundRes = NotificationHistoryActivity.getRoundCornerDrawableRes(cornerType);
viewForPackage.setBackgroundResource(backgroundRes);
final View container = viewForPackage.findViewById(R.id.notification_list_wrapper); final View container = viewForPackage.findViewById(R.id.notification_list_wrapper);
container.setVisibility(View.GONE); container.setVisibility(GONE);
View header = viewForPackage.findViewById(R.id.app_header); View header = viewForPackage.findViewById(R.id.app_header);
NotificationExpandButton expand = viewForPackage.findViewById( NotificationExpandButton expand = viewForPackage.findViewById(
com.android.internal.R.id.expand_button); com.android.internal.R.id.expand_button);
@@ -181,19 +174,19 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
expand.setDefaultPillColor(pillColor); expand.setDefaultPillColor(pillColor);
expand.setDefaultTextColor(textColor); expand.setDefaultTextColor(textColor);
expand.setExpanded(false); expand.setExpanded(false);
header.setStateDescription(container.getVisibility() == View.VISIBLE header.setStateDescription(container.getVisibility() == VISIBLE
? getString(R.string.condition_expand_hide) ? getString(R.string.condition_expand_hide)
: getString(R.string.condition_expand_show)); : getString(R.string.condition_expand_show));
int finalI = i; int finalI = i;
header.setOnClickListener(v -> { header.setOnClickListener(v -> {
container.setVisibility(container.getVisibility() == View.VISIBLE container.setVisibility(container.getVisibility() == VISIBLE
? View.GONE : View.VISIBLE); ? GONE : VISIBLE);
expand.setExpanded(container.getVisibility() == View.VISIBLE); expand.setExpanded(container.getVisibility() == VISIBLE);
header.setStateDescription(container.getVisibility() == View.VISIBLE header.setStateDescription(container.getVisibility() == VISIBLE
? getString(R.string.condition_expand_hide) ? getString(R.string.condition_expand_hide)
: getString(R.string.condition_expand_show)); : getString(R.string.condition_expand_show));
header.sendAccessibilityEvent(TYPE_VIEW_ACCESSIBILITY_FOCUSED); header.sendAccessibilityEvent(TYPE_VIEW_ACCESSIBILITY_FOCUSED);
mUiEventLogger.logWithPosition((container.getVisibility() == View.VISIBLE) mUiEventLogger.logWithPosition((container.getVisibility() == VISIBLE)
? NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_OPEN ? NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_OPEN
: NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_CLOSE, : NotificationHistoryEvent.NOTIFICATION_HISTORY_PACKAGE_HISTORY_CLOSE,
nhp.uid, nhp.pkgName, finalI); nhp.uid, nhp.pkgName, finalI);
@@ -217,7 +210,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
count.setText(StringUtil.getIcuPluralsString(this, newCount, count.setText(StringUtil.getIcuPluralsString(this, newCount,
R.string.notification_history_count)); R.string.notification_history_count));
if (newCount == 0) { if (newCount == 0) {
viewForPackage.setVisibility(View.GONE); viewForPackage.setVisibility(GONE);
} }
}, mUiEventLogger)); }, mUiEventLogger));
((NotificationHistoryAdapter) rv.getAdapter()).onRebuildComplete( ((NotificationHistoryAdapter) rv.getAdapter()).onRebuildComplete(
@@ -227,11 +220,6 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
} }
}; };
private void configureNotificationList(View recyclerView) {
recyclerView.setClipToOutline(true);
recyclerView.setOutlineProvider(mOutlineProvider);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -240,8 +228,6 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
mTodayView = findViewById(R.id.apps); mTodayView = findViewById(R.id.apps);
mSnoozeView = findViewById(R.id.snoozed_list); mSnoozeView = findViewById(R.id.snoozed_list);
mDismissView = findViewById(R.id.recently_dismissed_list); mDismissView = findViewById(R.id.recently_dismissed_list);
configureNotificationList(mDismissView.findViewById(R.id.notification_list));
configureNotificationList(mSnoozeView.findViewById(R.id.notification_list));
mHistoryOff = findViewById(R.id.history_off); mHistoryOff = findViewById(R.id.history_off);
mHistoryOn = findViewById(R.id.history_on); mHistoryOn = findViewById(R.id.history_on);
mHistoryEmpty = findViewById(R.id.history_on_empty); mHistoryEmpty = findViewById(R.id.history_on_empty);
@@ -289,11 +275,11 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
} }
ThreadUtils.postOnMainThread(() -> { ThreadUtils.postOnMainThread(() -> {
if (mSwitchBar.isChecked() if (mSwitchBar.isChecked()
&& findViewById(R.id.today_list).getVisibility() == View.GONE && findViewById(R.id.today_list).getVisibility() == GONE
&& mSnoozeView.getVisibility() == View.GONE && mSnoozeView.getVisibility() == GONE
&& mDismissView.getVisibility() == View.GONE) { && mDismissView.getVisibility() == GONE) {
mHistoryOn.setVisibility(View.GONE); mHistoryOn.setVisibility(GONE);
mHistoryEmpty.setVisibility(View.VISIBLE); mHistoryEmpty.setVisibility(VISIBLE);
} }
}); });
}); });
@@ -320,6 +306,33 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
super.onDestroy(); super.onDestroy();
} }
public static final int ROUND_CORNER_CENTER = 1;
public static final int ROUND_CORNER_TOP = 1 << 1;
public static final int ROUND_CORNER_BOTTOM = 1 << 2;
public static @DrawableRes int getRoundCornerDrawableRes(int cornerType) {
if ((cornerType & ROUND_CORNER_CENTER) == 0) {
return 0;
}
if (((cornerType & ROUND_CORNER_TOP) != 0) && ((cornerType & ROUND_CORNER_BOTTOM) == 0)) {
// the first
return com.android.settingslib.widget.theme.R.drawable.settingslib_round_background_top;
} else if (((cornerType & ROUND_CORNER_BOTTOM) != 0)
&& ((cornerType & ROUND_CORNER_TOP) == 0)) {
// the last
return com.android.settingslib.widget.theme.R.drawable.settingslib_round_background_bottom;
} else if (((cornerType & ROUND_CORNER_TOP) != 0)
&& ((cornerType & ROUND_CORNER_BOTTOM) != 0)) {
// the only one preference
return com.android.settingslib.widget.theme.R.drawable.settingslib_round_background;
} else {
// in the center
return com.android.settingslib.widget.theme.R.drawable.settingslib_round_background_center;
}
}
private @ColorInt int obtainThemeColor(@AttrRes int attrRes) { private @ColorInt int obtainThemeColor(@AttrRes int attrRes) {
Resources.Theme theme = new ContextThemeWrapper(this, Resources.Theme theme = new ContextThemeWrapper(this,
android.R.style.Theme_DeviceDefault_DayNight).getTheme(); android.R.style.Theme_DeviceDefault_DayNight).getTheme();
@@ -345,14 +358,14 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
private void toggleViews(boolean isChecked) { private void toggleViews(boolean isChecked) {
if (isChecked) { if (isChecked) {
mHistoryOff.setVisibility(View.GONE); mHistoryOff.setVisibility(GONE);
mHistoryOn.setVisibility(View.VISIBLE); mHistoryOn.setVisibility(VISIBLE);
} else { } else {
mHistoryOn.setVisibility(View.GONE); mHistoryOn.setVisibility(GONE);
mHistoryOff.setVisibility(View.VISIBLE); mHistoryOff.setVisibility(VISIBLE);
mTodayView.removeAllViews(); mTodayView.removeAllViews();
} }
mHistoryEmpty.setVisibility(View.GONE); mHistoryEmpty.setVisibility(GONE);
} }
private final OnCheckedChangeListener mOnSwitchClickListener = private final OnCheckedChangeListener mOnSwitchClickListener =
@@ -372,13 +385,13 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
Log.d(TAG, "onSwitchChange history to " + isChecked); Log.d(TAG, "onSwitchChange history to " + isChecked);
} }
// Reset UI visibility to ensure it matches real state. // Reset UI visibility to ensure it matches real state.
mHistoryOn.setVisibility(View.GONE); mHistoryOn.setVisibility(GONE);
if (isChecked) { if (isChecked) {
mHistoryEmpty.setVisibility(View.VISIBLE); mHistoryEmpty.setVisibility(VISIBLE);
mHistoryOff.setVisibility(View.GONE); mHistoryOff.setVisibility(GONE);
} else { } else {
mHistoryOff.setVisibility(View.VISIBLE); mHistoryOff.setVisibility(VISIBLE);
mHistoryEmpty.setVisibility(View.GONE); mHistoryEmpty.setVisibility(GONE);
} }
mTodayView.removeAllViews(); mTodayView.removeAllViews();
}; };
@@ -410,7 +423,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
mSnoozedRv.setNestedScrollingEnabled(false); mSnoozedRv.setNestedScrollingEnabled(false);
if (snoozed == null || snoozed.length == 0) { if (snoozed == null || snoozed.length == 0) {
mSnoozeView.setVisibility(View.GONE); mSnoozeView.setVisibility(GONE);
} else { } else {
((NotificationSbnAdapter) mSnoozedRv.getAdapter()).onRebuildComplete( ((NotificationSbnAdapter) mSnoozedRv.getAdapter()).onRebuildComplete(
new ArrayList<>(Arrays.asList(snoozed))); new ArrayList<>(Arrays.asList(snoozed)));
@@ -426,9 +439,9 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
mDismissedRv.setNestedScrollingEnabled(false); mDismissedRv.setNestedScrollingEnabled(false);
if (dismissed == null || dismissed.length == 0) { if (dismissed == null || dismissed.length == 0) {
mDismissView.setVisibility(View.GONE); mDismissView.setVisibility(GONE);
} else { } else {
mDismissView.setVisibility(View.VISIBLE); mDismissView.setVisibility(VISIBLE);
((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete( ((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete(
new ArrayList<>(Arrays.asList(dismissed))); new ArrayList<>(Arrays.asList(dismissed)));
} }
@@ -446,10 +459,10 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
int reason) { int reason) {
if (reason == REASON_SNOOZED) { if (reason == REASON_SNOOZED) {
((NotificationSbnAdapter) mSnoozedRv.getAdapter()).addSbn(sbn); ((NotificationSbnAdapter) mSnoozedRv.getAdapter()).addSbn(sbn);
mSnoozeView.setVisibility(View.VISIBLE); mSnoozeView.setVisibility(VISIBLE);
} else { } else {
((NotificationSbnAdapter) mDismissedRv.getAdapter()).addSbn(sbn); ((NotificationSbnAdapter) mDismissedRv.getAdapter()).addSbn(sbn);
mDismissView.setVisibility(View.VISIBLE); mDismissView.setVisibility(VISIBLE);
} }
} }
}; };

View File

@@ -9,7 +9,6 @@ import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@@ -36,7 +35,6 @@ public class NotificationHistoryRecyclerView extends RecyclerView {
super(context, attrs, defStyle); super(context, attrs, defStyle);
setLayoutManager(new LinearLayoutManager(getContext())); setLayoutManager(new LinearLayoutManager(getContext()));
addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
ItemTouchHelper touchHelper = new ItemTouchHelper( ItemTouchHelper touchHelper = new ItemTouchHelper(
new DismissTouchHelper(0, ItemTouchHelper.START | ItemTouchHelper.END)); new DismissTouchHelper(0, ItemTouchHelper.START | ItemTouchHelper.END));
touchHelper.attachToRecyclerView(this); touchHelper.attachToRecyclerView(this);

View File

@@ -24,6 +24,10 @@ import static android.provider.Settings.EXTRA_APP_PACKAGE;
import static android.provider.Settings.EXTRA_CHANNEL_ID; import static android.provider.Settings.EXTRA_CHANNEL_ID;
import static android.provider.Settings.EXTRA_CONVERSATION_ID; import static android.provider.Settings.EXTRA_CONVERSATION_ID;
import static com.android.settings.notification.history.NotificationHistoryActivity.ROUND_CORNER_BOTTOM;
import static com.android.settings.notification.history.NotificationHistoryActivity.ROUND_CORNER_CENTER;
import static com.android.settings.notification.history.NotificationHistoryActivity.ROUND_CORNER_TOP;
import android.annotation.ColorInt; import android.annotation.ColorInt;
import android.annotation.UserIdInt; import android.annotation.UserIdInt;
import android.app.ActivityManager; import android.app.ActivityManager;
@@ -111,13 +115,22 @@ public class NotificationSbnAdapter extends
int position) { int position) {
final StatusBarNotification sbn = mValues.get(position); final StatusBarNotification sbn = mValues.get(position);
if (sbn != null) { if (sbn != null) {
int cornerType = ROUND_CORNER_CENTER;
if (position == (getItemCount() - 1)) {
cornerType |= ROUND_CORNER_BOTTOM;
}
if (position == 0) {
cornerType |= ROUND_CORNER_TOP;
}
int backgroundRes = NotificationHistoryActivity.getRoundCornerDrawableRes(cornerType);
holder.itemView.setBackgroundResource(backgroundRes);
holder.setIconBackground(loadBackground(sbn)); holder.setIconBackground(loadBackground(sbn));
holder.setIcon(loadIcon(sbn)); holder.setIcon(loadIcon(sbn));
holder.setPackageLabel(loadPackageLabel(sbn.getPackageName()).toString()); holder.setPackageLabel(loadPackageLabel(sbn.getPackageName()).toString());
holder.setTitle(getTitleString(sbn.getNotification())); holder.setTitle(getTitleString(sbn.getNotification()));
holder.setSummary(getTextString(mContext, sbn.getNotification())); holder.setSummary(getTextString(mContext, sbn.getNotification()));
holder.setPostedTime(sbn.getPostTime()); holder.setPostedTime(sbn.getPostTime());
holder.setDividerVisible(position < (mValues.size() -1));
int userId = normalizeUserId(sbn); int userId = normalizeUserId(sbn);
if (!mUserBadgeCache.containsKey(userId)) { if (!mUserBadgeCache.containsKey(userId)) {
Drawable profile = mContext.getPackageManager().getUserBadgeForDensityNoBackground( Drawable profile = mContext.getPackageManager().getUserBadgeForDensityNoBackground(

View File

@@ -49,7 +49,6 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder {
private final TextView mTitle; private final TextView mTitle;
private final TextView mSummary; private final TextView mSummary;
private final ImageView mProfileBadge; private final ImageView mProfileBadge;
private final View mDivider;
NotificationSbnViewHolder(View itemView) { NotificationSbnViewHolder(View itemView) {
super(itemView); super(itemView);
@@ -59,7 +58,6 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder {
mTitle = itemView.findViewById(R.id.title); mTitle = itemView.findViewById(R.id.title);
mSummary = itemView.findViewById(R.id.text); mSummary = itemView.findViewById(R.id.text);
mProfileBadge = itemView.findViewById(R.id.profile_badge); mProfileBadge = itemView.findViewById(R.id.profile_badge);
mDivider = itemView.findViewById(R.id.divider);
} }
void setSummary(CharSequence summary) { void setSummary(CharSequence summary) {
@@ -92,10 +90,6 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder {
mProfileBadge.setVisibility(badge != null ? View.VISIBLE : View.GONE); mProfileBadge.setVisibility(badge != null ? View.VISIBLE : View.GONE);
} }
void setDividerVisible(boolean visible) {
mDivider.setVisibility(visible ? View.VISIBLE : View.GONE);
}
void addOnClick(int position, String pkg, int uid, int userId, PendingIntent pi, void addOnClick(int position, String pkg, int uid, int userId, PendingIntent pi,
InstanceId instanceId, InstanceId instanceId,
boolean isSnoozed, UiEventLogger uiEventLogger) { boolean isSnoozed, UiEventLogger uiEventLogger) {