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

Commit fe8ad050 authored by Julia Reynolds's avatar Julia Reynolds Committed by Automerger Merge Worker
Browse files

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

Change-Id: I76382dd6050ed5c913feaab485ce3c17c4a80328
parents 9d9504f9 dad135f4
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