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"?> | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
<FrameLayout | 
					<androidx.constraintlayout.widget.ConstraintLayout | 
				
			||||
    xmlns:android="http://schemas.android.com/apk/res/android" | 
					    xmlns:android="http://schemas.android.com/apk/res/android" | 
				
			||||
    xmlns:app="http://schemas.android.com/apk/res-auto" | 
					    xmlns:app="http://schemas.android.com/apk/res-auto" | 
				
			||||
    android:layout_width="match_parent" android:layout_height="match_parent"> | 
					    android:layout_width="match_parent" | 
				
			||||
 | 
					    android:layout_height="match_parent" | 
				
			||||
 | 
					    android:orientation="vertical" | 
				
			||||
 | 
					    > | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <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" /> | 
				
			||||
 | 
					
 | 
				
			||||
    <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> | 
					 | 
				
			||||
    <TextView | 
					    <TextView | 
				
			||||
        android:id="@+id/nothing_bookmarked" | 
					        android:id="@+id/nothing_bookmarked" | 
				
			||||
        android:layout_width="wrap_content" | 
					        android:layout_width="wrap_content" | 
				
			||||
        android:layout_height="wrap_content" | 
					        android:layout_height="wrap_content" | 
				
			||||
        android:layout_gravity="center" | 
					 | 
				
			||||
        android:visibility="invisible" | 
					 | 
				
			||||
        android:textIsSelectable="false" | 
					 | 
				
			||||
        android:text="@string/nothing_bookmarked_here" | 
					        android:text="@string/nothing_bookmarked_here" | 
				
			||||
        android:textColor="@color/accent" | 
					        android:textColor="@color/accent" | 
				
			||||
 | 
					        android:textIsSelectable="false" | 
				
			||||
        android:textSize="@dimen/medium_text" | 
					        android:textSize="@dimen/medium_text" | 
				
			||||
        /> | 
					        android:visibility="invisible" | 
				
			||||
</FrameLayout> | 
					        app:layout_constraintBottom_toBottomOf="parent" | 
				
			||||
 | 
					        app:layout_constraintEnd_toEndOf="parent" | 
				
			||||
 | 
					        app:layout_constraintStart_toStartOf="parent" | 
				
			||||
 | 
					        app:layout_constraintTop_toTopOf="parent" /> | 
				
			||||
 | 
					</androidx.constraintlayout.widget.ConstraintLayout> | 
				
			||||
@ -1,50 +1,58 @@ | 
				
			|||||
<?xml version="1.0" encoding="utf-8"?> | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
<LinearLayout | 
					
 | 
				
			||||
 | 
					<FrameLayout | 
				
			||||
    xmlns:android="http://schemas.android.com/apk/res/android" | 
					    xmlns:android="http://schemas.android.com/apk/res/android" | 
				
			||||
    xmlns:app="http://schemas.android.com/apk/res-auto" | 
					    xmlns:app="http://schemas.android.com/apk/res-auto" | 
				
			||||
    android:id="@+id/bookmark_row" | 
					    android:id="@+id/bookmark_row" | 
				
			||||
    android:layout_width="match_parent" | 
					    android:layout_width="match_parent" | 
				
			||||
    android:layout_height="wrap_content" | 
					    android:layout_height="wrap_content" | 
				
			||||
    android:background="?android:attr/selectableItemBackground" | 
					    > | 
				
			||||
    android:clickable="true" | 
					 | 
				
			||||
    android:focusable="true" | 
					 | 
				
			||||
    android:gravity="center_vertical" | 
					 | 
				
			||||
    android:orientation="horizontal"> | 
					 | 
				
			||||
 | 
					
 | 
				
			||||
    <TextView | 
					    <LinearLayout | 
				
			||||
        android:id="@+id/bookmark_title" | 
					        android:id="@+id/bookmark_dragable" | 
				
			||||
        android:layout_width="0dp" | 
					        android:layout_width="match_parent" | 
				
			||||
        android:layout_height="wrap_content" | 
					        android:layout_height="wrap_content" | 
				
			||||
        android:layout_weight="1" | 
					        android:background="?android:attr/selectableItemBackground" | 
				
			||||
        android:paddingBottom="8dp" | 
					        android:clickable="true" | 
				
			||||
        android:paddingTop="6dp" | 
					        android:focusable="true" | 
				
			||||
        android:paddingStart="16dp" | 
					        android:gravity="center_vertical" | 
				
			||||
        android:paddingEnd="0dp" | 
					        android:orientation="horizontal"> | 
				
			||||
        android:textColor="@color/primary_text" | 
					
 | 
				
			||||
        android:textSize="18sp"/> | 
					        <TextView | 
				
			||||
 | 
					            android:id="@+id/bookmark_title" | 
				
			||||
 | 
					            android:layout_width="0dp" | 
				
			||||
 | 
					            android:layout_height="wrap_content" | 
				
			||||
 | 
					            android:layout_weight="1" | 
				
			||||
 | 
					            android:paddingBottom="8dp" | 
				
			||||
 | 
					            android:paddingTop="6dp" | 
				
			||||
 | 
					            android:paddingStart="16dp" | 
				
			||||
 | 
					            android:paddingEnd="0dp" | 
				
			||||
 | 
					            android:textColor="@color/primary_text" | 
				
			||||
 | 
					            android:textSize="18sp"/> | 
				
			||||
 | 
					
 | 
				
			||||
    <ImageButton | 
					        <ImageButton | 
				
			||||
        android:id="@+id/toggle_notification" | 
					            android:id="@+id/toggle_notification" | 
				
			||||
        android:layout_width="wrap_content" | 
					            android:layout_width="wrap_content" | 
				
			||||
        android:layout_height="match_parent" | 
					            android:layout_height="match_parent" | 
				
			||||
        android:paddingBottom="3dp" | 
					            android:paddingBottom="3dp" | 
				
			||||
        android:paddingTop="3dp" | 
					            android:paddingTop="3dp" | 
				
			||||
        android:paddingStart="6dp" | 
					            android:paddingStart="6dp" | 
				
			||||
        android:paddingEnd="6dp" | 
					            android:paddingEnd="6dp" | 
				
			||||
        android:background="@android:color/transparent" | 
					            android:background="@android:color/transparent" | 
				
			||||
        android:contentDescription="@string/toggle_notification" | 
					            android:contentDescription="@string/toggle_notification" | 
				
			||||
        app:srcCompat="@drawable/ic_notification_on"/> | 
					            app:srcCompat="@drawable/ic_notification_on"/> | 
				
			||||
 | 
					
 | 
				
			||||
    <ImageButton | 
					        <ImageButton | 
				
			||||
        android:id="@+id/remove_bookmark" | 
					            android:id="@+id/remove_bookmark" | 
				
			||||
        android:layout_width="wrap_content" | 
					            android:layout_width="wrap_content" | 
				
			||||
        android:layout_height="match_parent" | 
					            android:layout_height="match_parent" | 
				
			||||
        android:paddingBottom="3dp" | 
					            android:paddingBottom="3dp" | 
				
			||||
        android:paddingTop="3dp" | 
					            android:paddingTop="3dp" | 
				
			||||
        android:paddingStart="6dp" | 
					            android:paddingStart="6dp" | 
				
			||||
        android:paddingEnd="6dp" | 
					            android:paddingEnd="6dp" | 
				
			||||
        android:layout_marginEnd="12dp" | 
					            android:layout_marginEnd="12dp" | 
				
			||||
        android:background="@android:color/transparent" | 
					            android:background="@android:color/transparent" | 
				
			||||
        android:contentDescription="@string/remove_bookmark" | 
					            android:contentDescription="@string/remove_bookmark" | 
				
			||||
        app:srcCompat="@drawable/ic_delete_accent_24dp"/> | 
					            app:srcCompat="@drawable/ic_delete_accent_24dp"/> | 
				
			||||
</LinearLayout> | 
					    </LinearLayout> | 
				
			||||
 | 
					</FrameLayout> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue