mirror of https://github.com/ThmmyNoLife/mTHMMY
babaliaris
4 years ago
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"> |
|||
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 |
|||
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> |
@ -1,50 +1,58 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<LinearLayout |
|||
|
|||
<FrameLayout |
|||
xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:app="http://schemas.android.com/apk/res-auto" |
|||
android:id="@+id/bookmark_row" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:background="?android:attr/selectableItemBackground" |
|||
android:clickable="true" |
|||
android:focusable="true" |
|||
android:gravity="center_vertical" |
|||
android:orientation="horizontal"> |
|||
> |
|||
|
|||
<TextView |
|||
android:id="@+id/bookmark_title" |
|||
android:layout_width="0dp" |
|||
<LinearLayout |
|||
android:id="@+id/bookmark_dragable" |
|||
android:layout_width="match_parent" |
|||
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"/> |
|||
android:background="?android:attr/selectableItemBackground" |
|||
android:clickable="true" |
|||
android:focusable="true" |
|||
android:gravity="center_vertical" |
|||
android:orientation="horizontal"> |
|||
|
|||
<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 |
|||
android:id="@+id/toggle_notification" |
|||
android:layout_width="wrap_content" |
|||
android:layout_height="match_parent" |
|||
android:paddingBottom="3dp" |
|||
android:paddingTop="3dp" |
|||
android:paddingStart="6dp" |
|||
android:paddingEnd="6dp" |
|||
android:background="@android:color/transparent" |
|||
android:contentDescription="@string/toggle_notification" |
|||
app:srcCompat="@drawable/ic_notification_on"/> |
|||
<ImageButton |
|||
android:id="@+id/toggle_notification" |
|||
android:layout_width="wrap_content" |
|||
android:layout_height="match_parent" |
|||
android:paddingBottom="3dp" |
|||
android:paddingTop="3dp" |
|||
android:paddingStart="6dp" |
|||
android:paddingEnd="6dp" |
|||
android:background="@android:color/transparent" |
|||
android:contentDescription="@string/toggle_notification" |
|||
app:srcCompat="@drawable/ic_notification_on"/> |
|||
|
|||
<ImageButton |
|||
android:id="@+id/remove_bookmark" |
|||
android:layout_width="wrap_content" |
|||
android:layout_height="match_parent" |
|||
android:paddingBottom="3dp" |
|||
android:paddingTop="3dp" |
|||
android:paddingStart="6dp" |
|||
android:paddingEnd="6dp" |
|||
android:layout_marginEnd="12dp" |
|||
android:background="@android:color/transparent" |
|||
android:contentDescription="@string/remove_bookmark" |
|||
app:srcCompat="@drawable/ic_delete_accent_24dp"/> |
|||
</LinearLayout> |
|||
<ImageButton |
|||
android:id="@+id/remove_bookmark" |
|||
android:layout_width="wrap_content" |
|||
android:layout_height="match_parent" |
|||
android:paddingBottom="3dp" |
|||
android:paddingTop="3dp" |
|||
android:paddingStart="6dp" |
|||
android:paddingEnd="6dp" |
|||
android:layout_marginEnd="12dp" |
|||
android:background="@android:color/transparent" |
|||
android:contentDescription="@string/remove_bookmark" |
|||
app:srcCompat="@drawable/ic_delete_accent_24dp"/> |
|||
</LinearLayout> |
|||
</FrameLayout> |
Loading…
Reference in new issue