forked from organicmaps/organicmaps
[andorid] Refactored bookmark list ui to recycler view
This commit is contained in:
parent
45a629e3e5
commit
485845c4cf
5 changed files with 331 additions and 247 deletions
7
android/res/layout/fragment_bookmark_list.xml
Normal file
7
android/res/layout/fragment_bookmark_list.xml
Normal 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"/>
|
|
@ -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"/>
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue