[andorid] Refactored bookmark list ui to recycler view

This commit is contained in:
Alexander Zatsepin 2018-04-26 12:20:32 +03:00 committed by Roman Kuznetsov
parent 45a629e3e5
commit 485845c4cf
5 changed files with 331 additions and 247 deletions

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"/>

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"/>

View file

@ -1,29 +1,25 @@
package com.mapswithme.maps.bookmarks;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import com.mapswithme.maps.R;
import com.mapswithme.maps.bookmarks.data.Bookmark;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.bookmarks.data.DistanceAndAzimut;
import com.mapswithme.maps.bookmarks.data.Track;
import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.maps.location.LocationListener;
import com.mapswithme.util.Graphics;
import com.mapswithme.maps.widget.recycler.RecyclerClickListener;
import com.mapswithme.maps.widget.recycler.RecyclerLongClickListener;
import static com.mapswithme.maps.bookmarks.Holders.BaseBookmarkHolder.SECTION_BMKS;
import static com.mapswithme.maps.bookmarks.Holders.BaseBookmarkHolder.SECTION_TRACKS;
import static com.mapswithme.maps.bookmarks.Holders.BaseBookmarkHolder.getTracksSectionPosition;
public class BookmarkListAdapter extends BaseAdapter
public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookmarkHolder>
{
private final Activity mActivity;
private final long mCategoryId;
@ -33,9 +29,6 @@ public class BookmarkListAdapter extends BaseAdapter
static final int TYPE_BOOKMARK = 1;
static final int TYPE_SECTION = 2;
private static final int SECTION_TRACKS = 0;
private static final int SECTION_BMKS = 1;
private final LocationListener mLocationListener = new LocationListener.Simple()
{
@Override
@ -45,12 +38,27 @@ public class BookmarkListAdapter extends BaseAdapter
}
};
public BookmarkListAdapter(Activity activity, long catId)
@Nullable
private RecyclerLongClickListener mLongClickListener;
@Nullable
private RecyclerClickListener mClickListener;
BookmarkListAdapter(Activity activity, long catId)
{
mActivity = activity;
mCategoryId = catId;
}
public void setOnClickListener(@Nullable RecyclerClickListener listener)
{
mClickListener = listener;
}
void setOnLongClickListener(@Nullable RecyclerLongClickListener listener)
{
mLongClickListener = listener;
}
public void startLocationUpdate()
{
LocationHelper.INSTANCE.addListener(mLocationListener, true);
@ -62,78 +70,71 @@ public class BookmarkListAdapter extends BaseAdapter
}
@Override
public int getViewTypeCount()
public Holders.BaseBookmarkHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
return 3; // bookmark + track + section
LayoutInflater inflater = LayoutInflater.from(mActivity);
Holders.BaseBookmarkHolder holder = null;
switch (viewType)
{
case TYPE_TRACK:
holder = new Holders.TrackViewHolder(inflater.inflate(R.layout.item_track,
parent, false), mCategoryId);
break;
case TYPE_BOOKMARK:
holder = new Holders.BookmarkViewHolder(inflater.inflate(R.layout.item_bookmark,
parent,false), mCategoryId);
break;
case TYPE_SECTION:
holder = new Holders.SectionViewHolder((TextView) inflater.inflate(R.layout.item_category_title,
parent, false), mCategoryId);
break;
}
if (holder == null)
throw new AssertionError("Unsupported view type: " + viewType);
holder.setOnClickListener(mClickListener);
holder.setOnLongClickListener(mLongClickListener);
return holder;
}
@Override
public void onBindViewHolder(Holders.BaseBookmarkHolder holder, int position)
{
holder.bind(position);
}
@Override
public int getItemViewType(int position)
{
final int bmkPos = getBookmarksSectionPosition();
final int trackPos = getTracksSectionPosition();
final int bmkPos = Holders.BaseBookmarkHolder.getBookmarksSectionPosition(mCategoryId);
final int trackPos = getTracksSectionPosition(mCategoryId);
if (position == bmkPos || position == trackPos)
return TYPE_SECTION;
if (position > bmkPos && !isSectionEmpty(SECTION_BMKS))
if (position > bmkPos && !Holders.BaseBookmarkHolder.isSectionEmpty(mCategoryId, SECTION_BMKS))
return TYPE_BOOKMARK;
else if (position > trackPos && !isSectionEmpty(SECTION_TRACKS))
else if (position > trackPos && !Holders.BaseBookmarkHolder.isSectionEmpty(mCategoryId, SECTION_TRACKS))
return TYPE_TRACK;
throw new IllegalArgumentException("Position not found: " + position);
}
@Override
public boolean isEnabled(int position)
public long getItemId(int position)
{
return getItemViewType(position) != TYPE_SECTION;
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final int type = getItemViewType(position);
if (type == TYPE_SECTION)
{
TextView sectionView;
if (convertView == null)
sectionView = (TextView) LayoutInflater.from(mActivity).inflate(R.layout.item_category_title, parent, false);
else
sectionView = (TextView) convertView;
final int sectionIndex = getSectionForPosition(position);
sectionView.setText(getSections().get(sectionIndex));
return sectionView;
}
if (convertView == null)
{
final int id = (type == TYPE_BOOKMARK) ? R.layout.item_bookmark : R.layout.item_track;
convertView = LayoutInflater.from(mActivity).inflate(id, parent, false);
convertView.setTag(new PinHolder(convertView));
}
final PinHolder holder = (PinHolder) convertView.getTag();
if (type == TYPE_BOOKMARK)
holder.set((Bookmark) getItem(position));
else
holder.set((Track) getItem(position));
return convertView;
}
@Override
public int getCount()
public int getItemCount()
{
return BookmarkManager.INSTANCE.getCategorySize(mCategoryId)
+ (isSectionEmpty(SECTION_TRACKS) ? 0 : 1)
+ (isSectionEmpty(SECTION_BMKS) ? 0 : 1);
+ (Holders.BaseBookmarkHolder.isSectionEmpty(mCategoryId, SECTION_TRACKS) ? 0 : 1)
+ (Holders.BaseBookmarkHolder.isSectionEmpty(mCategoryId, SECTION_BMKS) ? 0 : 1);
}
@Override
public Object getItem(int position)
{
if (getItemViewType(position) == TYPE_TRACK)
@ -144,126 +145,11 @@ public class BookmarkListAdapter extends BaseAdapter
else
{
final int pos = position - 1
- (isSectionEmpty(SECTION_TRACKS) ? 0 : BookmarkManager.INSTANCE.getTracksCount(mCategoryId) + 1);
- (Holders.BaseBookmarkHolder.isSectionEmpty(mCategoryId, SECTION_TRACKS)
? 0 : BookmarkManager.INSTANCE.getTracksCount(mCategoryId) + 1);
final long bookmarkId = BookmarkManager.INSTANCE.getBookmarkIdByPosition(mCategoryId, pos);
return BookmarkManager.INSTANCE.getBookmark(bookmarkId);
}
}
@Override
public long getItemId(int position)
{
return position;
}
private class PinHolder
{
ImageView icon;
TextView name;
TextView distance;
public PinHolder(View convertView)
{
icon = (ImageView) convertView.findViewById(R.id.iv__bookmark_color);
name = (TextView) convertView.findViewById(R.id.tv__bookmark_name);
distance = (TextView) convertView.findViewById(R.id.tv__bookmark_distance);
}
void setName(Bookmark bmk)
{
name.setText(bmk.getTitle());
}
void setName(Track trk)
{
name.setText(trk.getName());
}
void setDistance(Bookmark bmk)
{
final Location loc = LocationHelper.INSTANCE.getSavedLocation();
if (loc != null)
{
final DistanceAndAzimut daa = bmk.getDistanceAndAzimuth(loc.getLatitude(), loc.getLongitude(), 0.0);
distance.setText(daa.getDistance());
}
else
distance.setText(null);
}
void setDistance(Track trk)
{
distance.setText(mActivity.getString(R.string.length) + " " + trk.getLengthString());
}
void setIcon(Bookmark bookmark)
{
icon.setImageResource(bookmark.getIcon().getSelectedResId());
}
void setIcon(Track trk)
{
final Drawable circle = Graphics.drawCircle(trk.getColor(), R.dimen.track_circle_size, mActivity.getResources());
icon.setImageDrawable(circle);
}
void set(Bookmark bmk)
{
setName(bmk);
setDistance(bmk);
setIcon(bmk);
}
void set(Track track)
{
setName(track);
setDistance(track);
setIcon(track);
}
}
private int getTracksSectionPosition()
{
if (isSectionEmpty(SECTION_TRACKS))
return -1;
return 0;
}
private int getBookmarksSectionPosition()
{
if (isSectionEmpty(SECTION_BMKS))
return -1;
return BookmarkManager.INSTANCE.getTracksCount(mCategoryId)
+ (isSectionEmpty(SECTION_TRACKS) ? 0 : 1);
}
private List<String> getSections()
{
final List<String> sections = new ArrayList<>();
sections.add(mActivity.getString(R.string.tracks));
sections.add(mActivity.getString(R.string.bookmarks));
return sections;
}
private int getSectionForPosition(int position)
{
if (position == getTracksSectionPosition())
return SECTION_TRACKS;
if (position == getBookmarksSectionPosition())
return SECTION_BMKS;
throw new IllegalArgumentException("There is no section in position " + position);
}
private boolean isSectionEmpty(int section)
{
if (section == SECTION_TRACKS)
return BookmarkManager.INSTANCE.getTracksCount(mCategoryId) == 0;
if (section == SECTION_BMKS)
return BookmarkManager.INSTANCE.getBookmarksCount(mCategoryId) == 0;
throw new IllegalArgumentException("There is no section with index " + section);
}
}

View file

@ -7,40 +7,39 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.mapswithme.maps.MwmActivity;
import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmListFragment;
import com.mapswithme.maps.base.BaseMwmRecyclerFragment;
import com.mapswithme.maps.bookmarks.data.Bookmark;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.bookmarks.data.BookmarkSharingResult;
import com.mapswithme.maps.bookmarks.data.Track;
import com.mapswithme.maps.widget.placepage.EditBookmarkFragment;
import com.mapswithme.maps.widget.placepage.Sponsored;
import com.mapswithme.maps.widget.recycler.RecyclerClickListener;
import com.mapswithme.maps.widget.recycler.RecyclerLongClickListener;
import com.mapswithme.util.BottomSheetHelper;
import com.mapswithme.util.sharing.ShareOption;
import com.mapswithme.util.sharing.SharingHelper;
public class BookmarksListFragment extends BaseMwmListFragment
implements AdapterView.OnItemLongClickListener,
MenuItem.OnMenuItemClickListener,
BookmarkManager.BookmarksSharingListener
public class BookmarksListFragment extends BaseMwmRecyclerFragment
implements RecyclerLongClickListener, RecyclerClickListener,
MenuItem.OnMenuItemClickListener,
BookmarkManager.BookmarksSharingListener
{
public static final String TAG = BookmarksListFragment.class.getSimpleName();
private int mCategoryPosition;
private long mCategoryId;
private int mSelectedPosition;
@Nullable
private BookmarkListAdapter mAdapter;
@CallSuper
@Override
@ -51,10 +50,16 @@ public class BookmarksListFragment extends BaseMwmListFragment
mCategoryId = BookmarkManager.INSTANCE.getCategoryIdByPosition(mCategoryPosition);
}
@Override
protected RecyclerView.Adapter createAdapter()
{
return new BookmarkListAdapter(getActivity(), mCategoryId);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
return inflater.inflate(R.layout.simple_list, container, false);
return inflater.inflate(R.layout.fragment_bookmark_list, container, false);
}
@CallSuper
@ -80,11 +85,12 @@ public class BookmarksListFragment extends BaseMwmListFragment
public void onResume()
{
super.onResume();
if (mAdapter == null)
BookmarkListAdapter adapter = (BookmarkListAdapter) getAdapter();
if (adapter == null)
return;
mAdapter.startLocationUpdate();
mAdapter.notifyDataSetChanged();
adapter.startLocationUpdate();
adapter.notifyDataSetChanged();
}
@Override
@ -92,8 +98,9 @@ public class BookmarksListFragment extends BaseMwmListFragment
{
super.onPause();
if (mAdapter != null)
mAdapter.stopLocationUpdate();
BookmarkListAdapter adapter = (BookmarkListAdapter) getAdapter();
if (adapter != null)
adapter.stopLocationUpdate();
}
@Override
@ -105,30 +112,35 @@ public class BookmarksListFragment extends BaseMwmListFragment
private void initList()
{
mAdapter = new BookmarkListAdapter(getActivity(), mCategoryId);
mAdapter.startLocationUpdate();
setListAdapter(mAdapter);
getListView().setOnItemLongClickListener(this);
BookmarkListAdapter adapter = (BookmarkListAdapter) getAdapter();
if (adapter != null)
{
adapter.startLocationUpdate();
adapter.setOnClickListener(this);
adapter.setOnLongClickListener(this);
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
public void onItemClick(View v, int position)
{
final Intent i = new Intent(getActivity(), MwmActivity.class);
if (mAdapter != null)
BookmarkListAdapter adapter = (BookmarkListAdapter) getAdapter();
if (adapter != null)
{
switch (mAdapter.getItemViewType(position))
switch (adapter.getItemViewType(position))
{
case BookmarkListAdapter.TYPE_SECTION:
return;
case BookmarkListAdapter.TYPE_BOOKMARK:
final Bookmark bookmark = (Bookmark) mAdapter.getItem(position);
final Bookmark bookmark = (Bookmark) adapter.getItem(position);
i.putExtra(MwmActivity.EXTRA_TASK,
new MwmActivity.ShowBookmarkTask(bookmark.getCategoryId(), bookmark.getBookmarkId()));
break;
case BookmarkListAdapter.TYPE_TRACK:
final Track track = (Track) mAdapter.getItem(position);
final Track track = (Track) adapter.getItem(position);
i.putExtra(MwmActivity.EXTRA_TASK,
new MwmActivity.ShowTrackTask(track.getCategoryId(), track.getTrackId()));
break;
@ -140,53 +152,53 @@ public class BookmarksListFragment extends BaseMwmListFragment
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
public void onLongItemClick(View v, int position)
{
if (mAdapter == null)
return false;
BookmarkListAdapter adapter = (BookmarkListAdapter) getAdapter();
if (adapter == null)
return;
mSelectedPosition = position;
final Object item = mAdapter.getItem(mSelectedPosition);
int type = mAdapter.getItemViewType(mSelectedPosition);
final Object item = adapter.getItem(mSelectedPosition);
int type = adapter.getItemViewType(mSelectedPosition);
switch (type)
{
case BookmarkListAdapter.TYPE_SECTION:
// Do nothing here?
break;
case BookmarkListAdapter.TYPE_SECTION:
// Do nothing here?
break;
case BookmarkListAdapter.TYPE_BOOKMARK:
BottomSheetHelper.Builder bs = BottomSheetHelper.create(getActivity(), ((Bookmark) item).getTitle())
.sheet(R.menu.menu_bookmarks)
.listener(this);
if (!ShareOption.SMS.isSupported(getActivity()))
bs.getMenu().removeItem(R.id.share_message);
case BookmarkListAdapter.TYPE_BOOKMARK:
BottomSheetHelper.Builder bs = BottomSheetHelper.create(getActivity(), ((Bookmark) item).getTitle())
.sheet(R.menu.menu_bookmarks)
.listener(this);
if (!ShareOption.SMS.isSupported(getActivity()))
bs.getMenu().removeItem(R.id.share_message);
if (!ShareOption.EMAIL.isSupported(getActivity()))
bs.getMenu().removeItem(R.id.share_email);
if (!ShareOption.EMAIL.isSupported(getActivity()))
bs.getMenu().removeItem(R.id.share_email);
bs.tint().show();
break;
bs.tint().show();
break;
case BookmarkListAdapter.TYPE_TRACK:
BottomSheetHelper.create(getActivity(), ((Track) item).getName())
.sheet(Menu.NONE, R.drawable.ic_delete, R.string.delete)
.listener(new MenuItem.OnMenuItemClickListener()
{
@Override
public boolean onMenuItemClick(MenuItem menuItem)
case BookmarkListAdapter.TYPE_TRACK:
BottomSheetHelper.create(getActivity(), ((Track) item).getName())
.sheet(Menu.NONE, R.drawable.ic_delete, R.string.delete)
.listener(new MenuItem.OnMenuItemClickListener()
{
BookmarkManager.INSTANCE.deleteTrack(((Track) item).getTrackId());
mAdapter.notifyDataSetChanged();
return false;
}
}).tint().show();
break;
@Override
public boolean onMenuItemClick(MenuItem menuItem)
{
BookmarkManager.INSTANCE.deleteTrack(((Track) item).getTrackId());
adapter.notifyDataSetChanged();
return false;
}
}).tint().show();
break;
}
return true;
}
@Override
public void onPreparedFileForSharing(@NonNull BookmarkSharingResult result)
{
@ -196,10 +208,11 @@ public class BookmarksListFragment extends BaseMwmListFragment
@Override
public boolean onMenuItemClick(MenuItem menuItem)
{
if (mAdapter == null)
BookmarkListAdapter adapter = (BookmarkListAdapter) getAdapter();
if (adapter == null)
return false;
Bookmark item = (Bookmark) mAdapter.getItem(mSelectedPosition);
Bookmark item = (Bookmark) adapter.getItem(mSelectedPosition);
switch (menuItem.getItemId())
{
@ -222,14 +235,14 @@ public class BookmarksListFragment extends BaseMwmListFragment
@Override
public void onBookmarkSaved(long bookmarkId)
{
mAdapter.notifyDataSetChanged();
adapter.notifyDataSetChanged();
}
});
break;
case R.id.delete:
BookmarkManager.INSTANCE.deleteBookmark(item.getBookmarkId());
mAdapter.notifyDataSetChanged();
adapter.notifyDataSetChanged();
break;
}
return false;

View file

@ -1,15 +1,29 @@
package com.mapswithme.maps.bookmarks;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.mapswithme.maps.R;
import com.mapswithme.maps.bookmarks.data.Bookmark;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.bookmarks.data.DistanceAndAzimut;
import com.mapswithme.maps.bookmarks.data.Track;
import com.mapswithme.maps.location.LocationHelper;
import com.mapswithme.maps.widget.recycler.RecyclerClickListener;
import com.mapswithme.maps.widget.recycler.RecyclerLongClickListener;
import com.mapswithme.util.Graphics;
import com.mapswithme.util.UiUtils;
import java.util.ArrayList;
import java.util.List;
public class Holders
{
static class GeneralViewHolder extends RecyclerView.ViewHolder
@ -104,4 +118,174 @@ public class Holders
mSize.setText(mSize.getResources().getQuantityString(R.plurals.bookmarks_places, size, size));
}
}
static abstract class BaseBookmarkHolder extends RecyclerView.ViewHolder
{
static final int SECTION_TRACKS = 0;
static final int SECTION_BMKS = 1;
final long mCategoryId;
@NonNull
private final View mView;
BaseBookmarkHolder(@NonNull View itemView, long categoryId)
{
super(itemView);
mCategoryId = categoryId;
mView = itemView;
}
abstract void bind(int position);
static boolean isSectionEmpty(long categoryId, int section)
{
if (section == SECTION_TRACKS)
return BookmarkManager.INSTANCE.getTracksCount(categoryId) == 0;
if (section == SECTION_BMKS)
return BookmarkManager.INSTANCE.getBookmarksCount(categoryId) == 0;
throw new IllegalArgumentException("There is no section with index " + section);
}
static int getSectionForPosition(long categoryId, int position)
{
if (position == getTracksSectionPosition(categoryId))
return SECTION_TRACKS;
if (position == getBookmarksSectionPosition(categoryId))
return SECTION_BMKS;
throw new IllegalArgumentException("There is no section in position " + position);
}
static int getTracksSectionPosition(long categoryId)
{
if (isSectionEmpty(categoryId, SECTION_TRACKS))
return -1;
return 0;
}
static int getBookmarksSectionPosition(long categoryId)
{
if (isSectionEmpty(categoryId, SECTION_BMKS))
return -1;
return BookmarkManager.INSTANCE.getTracksCount(categoryId)
+ (isSectionEmpty(categoryId, SECTION_TRACKS) ? 0 : 1);
}
void setOnClickListener(@Nullable RecyclerClickListener listener)
{
mView.setOnClickListener(v -> {
if (listener != null)
listener.onItemClick(v, getAdapterPosition());
});
}
void setOnLongClickListener(@Nullable RecyclerLongClickListener listener)
{
mView.setOnLongClickListener(v -> {
if (listener != null)
listener.onLongItemClick(v, getAdapterPosition());
return true;
});
}
}
static class BookmarkViewHolder extends BaseBookmarkHolder
{
@NonNull
private final ImageView mIcon;
@NonNull
private final TextView mName;
@NonNull
private final TextView mDistance;
BookmarkViewHolder(@NonNull View itemView, long categoryId)
{
super(itemView, categoryId);
mIcon = itemView.findViewById(R.id.iv__bookmark_color);
mName = itemView.findViewById(R.id.tv__bookmark_name);
mDistance = itemView.findViewById(R.id.tv__bookmark_distance);
}
@Override
void bind(int position)
{
int pos = position - 1 - (isSectionEmpty(mCategoryId, SECTION_TRACKS)
? 0 : BookmarkManager.INSTANCE.getTracksCount(mCategoryId) + 1);
final long bookmarkId = BookmarkManager.INSTANCE.getBookmarkIdByPosition(mCategoryId, pos);
Bookmark bookmark = BookmarkManager.INSTANCE.getBookmark(bookmarkId);
mName.setText(bookmark.getTitle());
final Location loc = LocationHelper.INSTANCE.getSavedLocation();
if (loc != null)
{
final DistanceAndAzimut daa = bookmark.getDistanceAndAzimuth(loc.getLatitude(),
loc.getLongitude(), 0.0);
mDistance.setText(daa.getDistance());
}
else
mDistance.setText(null);
mIcon.setImageResource(bookmark.getIcon().getSelectedResId());
}
}
static class TrackViewHolder extends BaseBookmarkHolder
{
@NonNull
private final ImageView mIcon;
@NonNull
private final TextView mName;
@NonNull
private final TextView mDistance;
TrackViewHolder(@NonNull View itemView, long categoryId)
{
super(itemView, categoryId);
mIcon = itemView.findViewById(R.id.iv__bookmark_color);
mName = itemView.findViewById(R.id.tv__bookmark_name);
mDistance = itemView.findViewById(R.id.tv__bookmark_distance);
}
@Override
void bind(int position)
{
final long trackId = BookmarkManager.INSTANCE.getTrackIdByPosition(mCategoryId,
position - 1);
Track track = BookmarkManager.INSTANCE.getTrack(trackId);
mName.setText(track.getName());
mDistance.setText(mDistance.getContext().getString(R.string.length)
+ " " + track.getLengthString());
Drawable circle = Graphics.drawCircle(track.getColor(), R.dimen.track_circle_size,
mIcon.getContext().getResources());
mIcon.setImageDrawable(circle);
}
}
static class SectionViewHolder extends BaseBookmarkHolder
{
@NonNull
private final TextView mView;
SectionViewHolder(@NonNull TextView itemView, long categoryId)
{
super(itemView, categoryId);
mView = itemView;
}
@Override
void bind(int position)
{
final int sectionIndex = getSectionForPosition(mCategoryId, position);
mView.setText(getSections().get(sectionIndex));
mView.setText(getSections().get(sectionIndex));
}
private List<String> getSections()
{
final List<String> sections = new ArrayList<>();
sections.add(mView.getContext().getString(R.string.tracks));
sections.add(mView.getContext().getString(R.string.bookmarks));
return sections;
}
}
}