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

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

Merge "Remove items from the 'last 24 hours' history on swipe" into rvc-dev

parents 9db658bf eabc1904
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@
        android:layout_width="match_parent"
        android:clipChildren="true"
        android:layout_height="wrap_content">
        <androidx.recyclerview.widget.RecyclerView
        <com.android.settings.notification.history.NotificationHistoryRecyclerView
            android:id="@+id/notification_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
+6 −8
Original line number Diff line number Diff line
@@ -101,14 +101,12 @@ public class NotificationHistoryActivity extends Activity {
            count.setText(getResources().getQuantityString(R.plurals.notification_history_count,
                    nhp.notifications.size(), nhp.notifications.size()));

            RecyclerView rv = viewForPackage.findViewById(R.id.notification_list);
            LinearLayoutManager lm = new LinearLayoutManager(this);
            rv.setLayoutManager(lm);
            rv.setAdapter(new NotificationHistoryAdapter());
            DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(
                    rv.getContext(), lm.getOrientation());
            rv.addItemDecoration(dividerItemDecoration);
            ((NotificationHistoryAdapter) rv.getAdapter()).onRebuildComplete(nhp.notifications);
            NotificationHistoryRecyclerView rv =
                    viewForPackage.findViewById(R.id.notification_list);
            rv.setAdapter(new NotificationHistoryAdapter(mNm, rv));
            ((NotificationHistoryAdapter) rv.getAdapter()).onRebuildComplete(
                    new ArrayList<>(nhp.notifications));

            mTodayView.addView(viewForPackage);
        }
    };
+26 −12
Original line number Diff line number Diff line
@@ -16,11 +16,10 @@

package com.android.settings.notification.history;

import android.app.NotificationHistory;
import android.app.INotificationManager;
import android.app.NotificationHistory.HistoricalNotification;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.os.RemoteException;
import android.util.Slog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -29,24 +28,25 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.android.settings.R;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class NotificationHistoryAdapter extends
        RecyclerView.Adapter<NotificationHistoryViewHolder> {
        RecyclerView.Adapter<NotificationHistoryViewHolder> implements
        NotificationHistoryRecyclerView.OnItemSwipeDeleteListener {

    private static String TAG = "NotiHistoryAdapter";

    private INotificationManager mNm;
    private List<HistoricalNotification> mValues;

    public NotificationHistoryAdapter() {
    public NotificationHistoryAdapter(INotificationManager nm,
            NotificationHistoryRecyclerView listView) {
        mValues = new ArrayList<>();
        setHasStableIds(true);
        listView.setOnItemSwipeDeleteListener(this);
        mNm = nm;
    }

    @Override
@@ -77,4 +77,18 @@ public class NotificationHistoryAdapter extends
        mValues.sort((o1, o2) -> Long.compare(o2.getPostedTimeMs(), o1.getPostedTimeMs()));
        notifyDataSetChanged();
    }

    @Override
    public void onItemSwipeDeleted(int position) {
        HistoricalNotification hn = mValues.remove(position);
        if (hn != null) {
            try {
                mNm.deleteNotificationHistoryItem(
                        hn.getPackage(), hn.getUid(), hn.getPostedTimeMs());
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to delete item", e);
            }
        }
        notifyItemRemoved(position);
    }
}
+7 −3
Original line number Diff line number Diff line
@@ -20,27 +20,31 @@ import android.app.NotificationHistory;
import android.graphics.drawable.Drawable;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;

public class NotificationHistoryPackage {
    String pkgName;
    int uid;
    List<NotificationHistory.HistoricalNotification> notifications;
    TreeSet<NotificationHistory.HistoricalNotification> notifications;
    CharSequence label;
    Drawable icon;

    public NotificationHistoryPackage(String pkgName, int uid) {
        this.pkgName = pkgName;
        this.uid = uid;
        notifications = new ArrayList<>();
        notifications = new TreeSet<>(
                (o1, o2) -> Long.compare(o2.getPostedTimeMs(), o1.getPostedTimeMs()));
    }

    public long getMostRecent() {
        if (notifications.isEmpty()) {
            return 0;
        }
        return notifications.get(0).getPostedTimeMs();
        return notifications.first().getPostedTimeMs();
    }

    @Override
+66 −0
Original line number Diff line number Diff line
package com.android.settings.notification.history;

import android.annotation.Nullable;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class NotificationHistoryRecyclerView extends RecyclerView {

    private static final String TAG = "HistoryRecyclerView";

    private OnItemSwipeDeleteListener listener;

    public NotificationHistoryRecyclerView(Context context) {
        this(context, null);
    }

    public NotificationHistoryRecyclerView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public NotificationHistoryRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        setLayoutManager(new LinearLayoutManager(getContext()));
        addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
        ItemTouchHelper touchHelper = new ItemTouchHelper(
                new DismissTouchHelper(0, ItemTouchHelper.START | ItemTouchHelper.END));
        touchHelper.attachToRecyclerView(this);
    }

    public void setOnItemSwipeDeleteListener(OnItemSwipeDeleteListener listener) {
        this.listener = listener;
    }

    private class DismissTouchHelper extends ItemTouchHelper.SimpleCallback {

        public DismissTouchHelper(int dragDirs, int swipeDirs) {
            super(dragDirs, swipeDirs);
        }

        @Override
        public boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target) {
            // Do nothing.
            return false;
        }

        @Override
        public void onSwiped(ViewHolder viewHolder, int direction) {
            if (listener != null) {
                listener.onItemSwipeDeleted(viewHolder.getAdapterPosition());
            }
        }
    }

    public interface OnItemSwipeDeleteListener {
        void onItemSwipeDeleted(int position);
    }
}
 No newline at end of file