Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9b8f5af authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Align history styling with Settings" into main

parents 1ac39a15 e5359b28
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
<androidx.core.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll"
    android:background="?android:attr/colorBackgroundFloating"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

@@ -132,7 +131,8 @@
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="16dp">
            android:paddingTop="16dp"
            android:paddingBottom="16dp">

            <LinearLayout
                android:id="@+id/snoozed_list"
@@ -145,12 +145,12 @@
                    android:layout_width="wrap_content"
                    android:text="@string/notification_history_snooze"
                    android:textColor="?android:attr/textColorPrimary"
                    android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
                    android:textAppearance="@style/TextAppearance.HomepageCardTitle"
                    android:paddingBottom="16dp" />

                    <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/notification_list"
                        android:background="@drawable/rounded_bg"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:clipChildren="true"
@@ -170,10 +170,10 @@
                    android:text="@string/notification_history_dismiss"
                    android:textColor="?android:attr/textColorPrimary"
                    android:textAppearance="@style/TextAppearance.HomepageCardTitle"
                    android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
                    android:paddingBottom="16dp" />
                <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/notification_list"
                        android:background="@drawable/rounded_bg"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:clipChildren="true"
@@ -191,13 +191,13 @@
                    android:layout_width="wrap_content"
                    android:textColor="?android:attr/textColorPrimary"
                    android:textAppearance="@style/TextAppearance.HomepageCardTitle"
                    android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
                    android:paddingBottom="16dp" />
                <LinearLayout
                    android:id="@+id/apps"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:background="@drawable/rounded_bg">
                    android:orientation="vertical">
                    <!-- app based recycler views added here -->
                </LinearLayout>
            </LinearLayout>
+5 −6
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
        android:id="@+id/app_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
        android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
        android:paddingTop="20dp"
        android:paddingBottom="18dp"
        android:paddingStart="16dp"
@@ -84,15 +86,12 @@

    </androidx.constraintlayout.widget.ConstraintLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:attr/listDivider" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/notification_list_wrapper"
        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
            android:id="@+id/notification_list"
+14 −7
Original line number Diff line number Diff line
@@ -17,17 +17,22 @@
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="48dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="16dp"
    android:orientation="vertical"
    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
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="@*android:dimen/status_bar_icon_size"
        android:layout_marginStart="54dp"
        android:paddingTop="16dp"
        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
        android:gravity="center_vertical">

        <TextView
@@ -36,7 +41,6 @@
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginStart="32dp"
            android:ellipsize="end"
            android:singleLine="true"
            android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
@@ -77,11 +81,14 @@
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:ellipsize="end"
        android:layout_marginStart="32dp"
        android:layout_marginStart="54dp"
        android:maxLines="7"
        android:paddingTop="4dp"
        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
        android:textColor="?android:attr/textColorSecondary"
        android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification"
        android:textAlignment="viewStart" />
        android:textAlignment="viewStart"
        android:paddingBottom="16dp" />

</LinearLayout>
+3 −7
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
        android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
        android:paddingStart="16dp"
        android:layout_marginEnd="16dp"
        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:orientation="vertical">
@@ -128,11 +130,5 @@
            />

        </LinearLayout>

    </LinearLayout>
    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/listDivider" />
</LinearLayout>
 No newline at end of file
+70 −57
Original line number Diff line number Diff line
@@ -17,11 +17,14 @@
package com.android.settings.notification.history;

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 android.annotation.AttrRes;
import android.annotation.ColorInt;
import android.annotation.DrawableRes;
import android.app.ActionBar;
import android.app.ActivityManager;
import android.app.INotificationManager;
@@ -30,7 +33,6 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Outline;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -41,12 +43,10 @@ import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import android.util.Slog;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.TextView;
@@ -95,22 +95,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
    private PackageManager mPm;
    private CountDownLatch mCountdownLatch;
    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();

    enum NotificationHistoryEvent implements UiEventLogger.UiEventEnum {
@@ -158,20 +143,28 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {

    private HistoryLoader.OnHistoryLoaderListener mOnHistoryLoaderListener = notifications -> {
        findViewById(R.id.today_list).setVisibility(
                notifications.isEmpty() ? View.GONE : View.VISIBLE);
                notifications.isEmpty() ? GONE : VISIBLE);
        mCountdownLatch.countDown();
        View recyclerView = mTodayView.findViewById(R.id.apps);
        recyclerView.setClipToOutline(true);
        mTodayView.setOutlineProvider(mOutlineProvider);
        mSnoozeView.setOutlineProvider(mOutlineProvider);
        // for each package, new header and recycler view
        for (int i = 0, notificationsSize = notifications.size(); i < notificationsSize; i++) {
            NotificationHistoryPackage nhp = notifications.get(i);
            View viewForPackage = LayoutInflater.from(this)
                    .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);
            container.setVisibility(View.GONE);
            container.setVisibility(GONE);
            View header = viewForPackage.findViewById(R.id.app_header);
            NotificationExpandButton expand = viewForPackage.findViewById(
                    com.android.internal.R.id.expand_button);
@@ -181,19 +174,19 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
            expand.setDefaultPillColor(pillColor);
            expand.setDefaultTextColor(textColor);
            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_show));
            int finalI = i;
            header.setOnClickListener(v -> {
                container.setVisibility(container.getVisibility() == View.VISIBLE
                        ? View.GONE : View.VISIBLE);
                expand.setExpanded(container.getVisibility() == View.VISIBLE);
                header.setStateDescription(container.getVisibility() == View.VISIBLE
                container.setVisibility(container.getVisibility() == VISIBLE
                        ? GONE : VISIBLE);
                expand.setExpanded(container.getVisibility() == VISIBLE);
                header.setStateDescription(container.getVisibility() == VISIBLE
                        ? getString(R.string.condition_expand_hide)
                        : getString(R.string.condition_expand_show));
                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_CLOSE,
                        nhp.uid, nhp.pkgName, finalI);
@@ -217,7 +210,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
                        count.setText(StringUtil.getIcuPluralsString(this, newCount,
                                R.string.notification_history_count));
                        if (newCount == 0) {
                            viewForPackage.setVisibility(View.GONE);
                            viewForPackage.setVisibility(GONE);
                        }
                    }, mUiEventLogger));
            ((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
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -240,8 +228,6 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
        mTodayView = findViewById(R.id.apps);
        mSnoozeView = findViewById(R.id.snoozed_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);
        mHistoryOn = findViewById(R.id.history_on);
        mHistoryEmpty = findViewById(R.id.history_on_empty);
@@ -289,11 +275,11 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
            }
            ThreadUtils.postOnMainThread(() -> {
                if (mSwitchBar.isChecked()
                        && findViewById(R.id.today_list).getVisibility() == View.GONE
                        && mSnoozeView.getVisibility() == View.GONE
                        && mDismissView.getVisibility() == View.GONE) {
                    mHistoryOn.setVisibility(View.GONE);
                    mHistoryEmpty.setVisibility(View.VISIBLE);
                        && findViewById(R.id.today_list).getVisibility() == GONE
                        && mSnoozeView.getVisibility() == GONE
                        && mDismissView.getVisibility() == GONE) {
                    mHistoryOn.setVisibility(GONE);
                    mHistoryEmpty.setVisibility(VISIBLE);
                }
            });
        });
@@ -320,6 +306,33 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
        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) {
        Resources.Theme theme = new ContextThemeWrapper(this,
                android.R.style.Theme_DeviceDefault_DayNight).getTheme();
@@ -345,14 +358,14 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {

    private void toggleViews(boolean isChecked) {
        if (isChecked) {
            mHistoryOff.setVisibility(View.GONE);
            mHistoryOn.setVisibility(View.VISIBLE);
            mHistoryOff.setVisibility(GONE);
            mHistoryOn.setVisibility(VISIBLE);
        } else {
            mHistoryOn.setVisibility(View.GONE);
            mHistoryOff.setVisibility(View.VISIBLE);
            mHistoryOn.setVisibility(GONE);
            mHistoryOff.setVisibility(VISIBLE);
            mTodayView.removeAllViews();
        }
        mHistoryEmpty.setVisibility(View.GONE);
        mHistoryEmpty.setVisibility(GONE);
    }

    private final OnCheckedChangeListener mOnSwitchClickListener =
@@ -372,13 +385,13 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
                    Log.d(TAG, "onSwitchChange history to " + isChecked);
                }
                // Reset UI visibility to ensure it matches real state.
                mHistoryOn.setVisibility(View.GONE);
                mHistoryOn.setVisibility(GONE);
                if (isChecked) {
                    mHistoryEmpty.setVisibility(View.VISIBLE);
                    mHistoryOff.setVisibility(View.GONE);
                    mHistoryEmpty.setVisibility(VISIBLE);
                    mHistoryOff.setVisibility(GONE);
                } else {
                    mHistoryOff.setVisibility(View.VISIBLE);
                    mHistoryEmpty.setVisibility(View.GONE);
                    mHistoryOff.setVisibility(VISIBLE);
                    mHistoryEmpty.setVisibility(GONE);
                }
                mTodayView.removeAllViews();
            };
@@ -410,7 +423,7 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
            mSnoozedRv.setNestedScrollingEnabled(false);

            if (snoozed == null || snoozed.length == 0) {
                mSnoozeView.setVisibility(View.GONE);
                mSnoozeView.setVisibility(GONE);
            } else {
                ((NotificationSbnAdapter) mSnoozedRv.getAdapter()).onRebuildComplete(
                        new ArrayList<>(Arrays.asList(snoozed)));
@@ -426,9 +439,9 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
            mDismissedRv.setNestedScrollingEnabled(false);

            if (dismissed == null || dismissed.length == 0) {
                mDismissView.setVisibility(View.GONE);
                mDismissView.setVisibility(GONE);
            } else {
                mDismissView.setVisibility(View.VISIBLE);
                mDismissView.setVisibility(VISIBLE);
                ((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete(
                        new ArrayList<>(Arrays.asList(dismissed)));
            }
@@ -446,10 +459,10 @@ public class NotificationHistoryActivity extends CollapsingToolbarBaseActivity {
                int reason) {
            if (reason == REASON_SNOOZED) {
                ((NotificationSbnAdapter) mSnoozedRv.getAdapter()).addSbn(sbn);
                mSnoozeView.setVisibility(View.VISIBLE);
                mSnoozeView.setVisibility(VISIBLE);
            } else {
                ((NotificationSbnAdapter) mDismissedRv.getAdapter()).addSbn(sbn);
                mDismissView.setVisibility(View.VISIBLE);
                mDismissView.setVisibility(VISIBLE);
            }
        }
    };
Loading