mirror of https://github.com/ThmmyNoLife/mTHMMY
				
				
			
				 6 changed files with 309 additions and 115 deletions
			
			
		@ -0,0 +1,180 @@ | 
				
			|||
package gr.thmmy.mthmmy.activities.bookmarks; | 
				
			|||
 | 
				
			|||
import android.app.Activity; | 
				
			|||
import android.graphics.drawable.Drawable; | 
				
			|||
import android.view.LayoutInflater; | 
				
			|||
import android.view.View; | 
				
			|||
import android.view.ViewGroup; | 
				
			|||
import android.widget.ImageView; | 
				
			|||
import android.widget.TextView; | 
				
			|||
import android.widget.Toast; | 
				
			|||
 | 
				
			|||
import androidx.annotation.NonNull; | 
				
			|||
 | 
				
			|||
import com.woxthebox.draglistview.DragItemAdapter; | 
				
			|||
 | 
				
			|||
import java.util.ArrayList; | 
				
			|||
 | 
				
			|||
import gr.thmmy.mthmmy.R; | 
				
			|||
import gr.thmmy.mthmmy.model.Bookmark; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
public class BookmarksAdapter extends DragItemAdapter<ArrayList<Bookmark>, BookmarksAdapter.BookmarksViewHolder> | 
				
			|||
{ | 
				
			|||
    private final BookmarksFragment m_fragment; | 
				
			|||
    private final ArrayList<Bookmark> m_bookMarks; | 
				
			|||
    private final Drawable m_notificationsEnabled; | 
				
			|||
    private final Drawable m_notificationsDisabled; | 
				
			|||
 | 
				
			|||
    public BookmarksAdapter(BookmarksFragment fragment, ArrayList<Bookmark> bookmarks, Drawable noteEnabled, Drawable noteDisabled) | 
				
			|||
    { | 
				
			|||
        this.m_fragment = fragment; | 
				
			|||
        this.m_bookMarks = bookmarks; | 
				
			|||
        this.m_notificationsEnabled = noteEnabled; | 
				
			|||
        this.m_notificationsDisabled = noteDisabled; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @Override | 
				
			|||
    public long getUniqueItemId(int position) | 
				
			|||
    { | 
				
			|||
        return m_bookMarks.get(position).getId().hashCode(); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @NonNull | 
				
			|||
    @Override | 
				
			|||
    public BookmarksAdapter.BookmarksViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) | 
				
			|||
    { | 
				
			|||
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_bookmarks_row, parent, false); | 
				
			|||
        return new BookmarksViewHolder(view, view.findViewById(R.id.bookmark_dragable).getId(), true); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @Override | 
				
			|||
    public void onBindViewHolder(@NonNull BookmarksViewHolder holder, int position) | 
				
			|||
    { | 
				
			|||
        super.onBindViewHolder(holder, position); | 
				
			|||
 | 
				
			|||
        //Check if bookMarks ArrayList Exists and is not empty.
 | 
				
			|||
        if(m_bookMarks != null && !m_bookMarks.isEmpty()) | 
				
			|||
        { | 
				
			|||
            //Check if the current bookmark exists and has a title.
 | 
				
			|||
            if (m_bookMarks.get(position) != null && m_bookMarks.get(position).getTitle() != null) | 
				
			|||
            { | 
				
			|||
 | 
				
			|||
                //Set the title.
 | 
				
			|||
                holder.m_textView.setText(m_bookMarks.get(position).getTitle()); | 
				
			|||
 | 
				
			|||
                //Set Notifications Enabled Image Indicator.
 | 
				
			|||
                if (m_bookMarks.get(position).isNotificationsEnabled()) | 
				
			|||
                    holder.m_noteView.setImageDrawable(m_notificationsEnabled); | 
				
			|||
 | 
				
			|||
                //Set Notifications Disabled Image Indicator.
 | 
				
			|||
                else | 
				
			|||
                    holder.m_noteView.setImageDrawable(m_notificationsDisabled); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
                //On Bookmark Click.
 | 
				
			|||
                holder.mGrabView.setOnClickListener(v -> { | 
				
			|||
 | 
				
			|||
                    //Get the activity.
 | 
				
			|||
                    Activity activity = m_fragment.getActivity(); | 
				
			|||
 | 
				
			|||
                    //Go to the bookmarked activity.
 | 
				
			|||
                    if (activity instanceof BookmarksActivity) | 
				
			|||
                        ((BookmarksActivity) activity).onFragmentRowInteractionListener( | 
				
			|||
                                m_fragment.type, | 
				
			|||
                                m_fragment.interactionClick, | 
				
			|||
                                m_bookMarks.get(position)); | 
				
			|||
                }); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
                //On Notifications Toggle.
 | 
				
			|||
                holder.m_noteView.setOnClickListener(v -> { | 
				
			|||
 | 
				
			|||
                    //Toggle the current local instance.
 | 
				
			|||
                    m_bookMarks.get(position).toggleNotificationsEnabled(); | 
				
			|||
 | 
				
			|||
                    //Get the fragment activity.
 | 
				
			|||
                    Activity activity = m_fragment.getActivity(); | 
				
			|||
 | 
				
			|||
                    //Check if it is indeed the fragment activity.
 | 
				
			|||
                    if (activity instanceof BookmarksActivity) | 
				
			|||
                    { | 
				
			|||
 | 
				
			|||
                        //Trigger the toggle functionality and set the Enabled notifications image.
 | 
				
			|||
                        if (((BookmarksActivity) activity).onFragmentRowInteractionListener( | 
				
			|||
                                m_fragment.type, | 
				
			|||
                                m_fragment.interactionToggle, | 
				
			|||
                                m_bookMarks.get(position))) | 
				
			|||
                        { | 
				
			|||
                            holder.m_noteView.setImageDrawable(m_notificationsEnabled); | 
				
			|||
                        } | 
				
			|||
 | 
				
			|||
                        //Trigger returned false, so set the notifications disabled image.
 | 
				
			|||
                        else | 
				
			|||
                            holder.m_noteView.setImageDrawable(m_notificationsDisabled); | 
				
			|||
                    } | 
				
			|||
                }); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
                //Remove Item.
 | 
				
			|||
                holder.m_removeView.setOnClickListener(v -> { | 
				
			|||
 | 
				
			|||
                    //Get fragment's activity.
 | 
				
			|||
                    Activity activity = m_fragment.getActivity(); | 
				
			|||
 | 
				
			|||
                    if (activity instanceof BookmarksActivity) | 
				
			|||
                    { | 
				
			|||
 | 
				
			|||
                        //Trigger the bookmark remove functionality.
 | 
				
			|||
                        ((BookmarksActivity) activity).onFragmentRowInteractionListener( | 
				
			|||
                                m_fragment.type, | 
				
			|||
                                m_fragment.interactionRemove, | 
				
			|||
                                m_bookMarks.get(position)); | 
				
			|||
                        { | 
				
			|||
                            notifyItemRemoved(position); | 
				
			|||
                            notifyItemRangeChanged(position, m_bookMarks.size()); | 
				
			|||
                            m_bookMarks.remove(m_bookMarks.get(position)); | 
				
			|||
                        } | 
				
			|||
                    } | 
				
			|||
 | 
				
			|||
                    //If the bookmarks are empty then show nothing marked.
 | 
				
			|||
                    if (m_bookMarks.isEmpty()) | 
				
			|||
                    { | 
				
			|||
                        m_fragment.showNothingBookmarked(); | 
				
			|||
                    } | 
				
			|||
 | 
				
			|||
                }); | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    @Override | 
				
			|||
    public int getItemCount() | 
				
			|||
    { | 
				
			|||
        if (m_bookMarks != null) | 
				
			|||
         return m_bookMarks.size(); | 
				
			|||
 | 
				
			|||
        return 0; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    //View Holder.
 | 
				
			|||
    static class BookmarksViewHolder extends DragItemAdapter.ViewHolder | 
				
			|||
    { | 
				
			|||
 | 
				
			|||
        public final TextView m_textView; | 
				
			|||
        public final ImageView m_noteView; | 
				
			|||
        public final ImageView m_removeView; | 
				
			|||
        public final View m_thisView; | 
				
			|||
 | 
				
			|||
        public BookmarksViewHolder(View itemView, int handleResId, boolean dragOnLongPress) | 
				
			|||
        { | 
				
			|||
            super(itemView, handleResId, dragOnLongPress); | 
				
			|||
            this.m_textView   = itemView.findViewById(R.id.bookmark_title); | 
				
			|||
            this.m_noteView   = itemView.findViewById(R.id.toggle_notification); | 
				
			|||
            this.m_removeView = itemView.findViewById(R.id.remove_bookmark); | 
				
			|||
            this.m_thisView   = itemView; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -1,36 +1,33 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<FrameLayout | 
				
			|||
<androidx.constraintlayout.widget.ConstraintLayout | 
				
			|||
    xmlns:android="http://schemas.android.com/apk/res/android" | 
				
			|||
    xmlns:app="http://schemas.android.com/apk/res-auto" | 
				
			|||
    android:layout_width="match_parent" android:layout_height="match_parent"> | 
				
			|||
 | 
				
			|||
    <androidx.core.widget.NestedScrollView | 
				
			|||
        android:id="@+id/bookmarks_nested_scroll" | 
				
			|||
        android:layout_width="match_parent" | 
				
			|||
        android:layout_height="match_parent" | 
				
			|||
        android:layout_gravity="top|start" | 
				
			|||
        android:background="@color/primary_lighter" | 
				
			|||
        android:scrollbars="none" | 
				
			|||
        app:layout_behavior="@string/appbar_scrolling_view_behavior"> | 
				
			|||
 | 
				
			|||
        <LinearLayout | 
				
			|||
            android:id="@+id/bookmarks_container" | 
				
			|||
    android:layout_width="match_parent" | 
				
			|||
    android:layout_height="match_parent" | 
				
			|||
    android:orientation="vertical" | 
				
			|||
            android:showDividers="middle" | 
				
			|||
            android:divider="?android:listDivider" | 
				
			|||
            android:dividerPadding="16dp"/> | 
				
			|||
    </androidx.core.widget.NestedScrollView> | 
				
			|||
    > | 
				
			|||
 | 
				
			|||
    <com.woxthebox.draglistview.DragListView | 
				
			|||
        android:id="@+id/fragment_bookmarks_dragList" | 
				
			|||
        android:layout_width="0dp" | 
				
			|||
        android:layout_height="0dp" | 
				
			|||
        app:layout_constraintBottom_toBottomOf="parent" | 
				
			|||
        app:layout_constraintEnd_toEndOf="parent" | 
				
			|||
        app:layout_constraintStart_toStartOf="parent" | 
				
			|||
        app:layout_constraintTop_toTopOf="parent" /> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    <TextView | 
				
			|||
        android:id="@+id/nothing_bookmarked" | 
				
			|||
        android:layout_width="wrap_content" | 
				
			|||
        android:layout_height="wrap_content" | 
				
			|||
        android:layout_gravity="center" | 
				
			|||
        android:visibility="invisible" | 
				
			|||
        android:textIsSelectable="false" | 
				
			|||
        android:text="@string/nothing_bookmarked_here" | 
				
			|||
        android:textColor="@color/accent" | 
				
			|||
        android:textIsSelectable="false" | 
				
			|||
        android:textSize="@dimen/medium_text" | 
				
			|||
        /> | 
				
			|||
</FrameLayout> | 
				
			|||
        android:visibility="invisible" | 
				
			|||
        app:layout_constraintBottom_toBottomOf="parent" | 
				
			|||
        app:layout_constraintEnd_toEndOf="parent" | 
				
			|||
        app:layout_constraintStart_toStartOf="parent" | 
				
			|||
        app:layout_constraintTop_toTopOf="parent" /> | 
				
			|||
</androidx.constraintlayout.widget.ConstraintLayout> | 
				
			|||
					Loading…
					
					
				
		Reference in new issue