Merge "Align history styling with Settings" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
f9b8f5af38
@@ -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>
|
||||||
|
@@ -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"
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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>
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -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);
|
||||||
|
@@ -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(
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user