diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index ba12b0d2c8..a0d089b317 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -220,14 +220,6 @@ android:value="com.mapswithme.maps.MwmActivity"/> - - - + \ No newline at end of file diff --git a/android/res/layout/item_bookmark_set_create.xml b/android/res/layout/item_bookmark_set_create.xml deleted file mode 100644 index d01d623a9d..0000000000 --- a/android/res/layout/item_bookmark_set_create.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index f262806446..4b47013309 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -6,7 +6,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.graphics.Point; import android.location.Location; import android.os.Build; import android.os.Bundle; @@ -25,6 +24,7 @@ import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.Toast; + import com.mapswithme.country.ActiveCountryTree; import com.mapswithme.country.DownloadActivity; import com.mapswithme.country.DownloadFragment; @@ -36,12 +36,10 @@ import com.mapswithme.maps.ads.LikesManager; import com.mapswithme.maps.api.ParsedMwmRequest; import com.mapswithme.maps.base.BaseMwmFragmentActivity; import com.mapswithme.maps.bookmarks.BookmarkCategoriesActivity; -import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryActivity; -import com.mapswithme.maps.bookmarks.data.Bookmark; +import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryFragment; import com.mapswithme.maps.bookmarks.data.BookmarkManager; import com.mapswithme.maps.bookmarks.data.MapObject; import com.mapswithme.maps.bookmarks.data.MapObject.ApiPoint; -import com.mapswithme.maps.bookmarks.data.ParcelablePoint; import com.mapswithme.maps.dialog.RoutingErrorDialogFragment; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.location.LocationPredictor; @@ -60,7 +58,13 @@ import com.mapswithme.maps.widget.menu.MainMenu; import com.mapswithme.maps.widget.placepage.BasePlacePageAnimationController; import com.mapswithme.maps.widget.placepage.PlacePageView; import com.mapswithme.maps.widget.placepage.PlacePageView.State; -import com.mapswithme.util.*; +import com.mapswithme.util.BottomSheetHelper; +import com.mapswithme.util.Constants; +import com.mapswithme.util.InputUtils; +import com.mapswithme.util.LocationUtils; +import com.mapswithme.util.UiUtils; +import com.mapswithme.util.Utils; +import com.mapswithme.util.Yota; import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.sharing.SharingHelper; import com.mapswithme.util.statistics.AlohaHelper; @@ -79,7 +83,8 @@ public class MwmActivity extends BaseMwmFragmentActivity Framework.RoutingListener, MapFragment.MapRenderingListener, CustomNavigateUpListener, - Framework.RoutingProgressListener + Framework.RoutingProgressListener, + ChooseBookmarkCategoryFragment.Listener { public static final String EXTRA_TASK = "map_task"; private final static String TAG = "MwmActivity"; @@ -136,11 +141,12 @@ public class MwmActivity extends BaseMwmFragmentActivity private SearchToolbarController mSearchController; private LastCompassData mLastCompassData; - public interface LeftAnimationTrackListener { void onTrackStarted(boolean collapsed); + void onTrackFinished(boolean collapsed); + void onTrackLeftAnimation(float offset); } @@ -1333,18 +1339,6 @@ public class MwmActivity extends BaseMwmFragmentActivity mMapFragment.onTouch(view, event); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) - { - if (resultCode == RESULT_OK && requestCode == ChooseBookmarkCategoryActivity.REQUEST_CODE_BOOKMARK_SET) - { - final Point bookmarkAndCategory = ((ParcelablePoint) data.getParcelableExtra(ChooseBookmarkCategoryActivity.BOOKMARK)).getPoint(); - final Bookmark bookmark = BookmarkManager.INSTANCE.getBookmark(bookmarkAndCategory.x, bookmarkAndCategory.y); - mPlacePage.setMapObject(bookmark); - } - super.onActivityResult(requestCode, resultCode, data); - } - @Override public void onRoutingEvent(final int resultCode, final Index[] missingCountries) { @@ -1499,4 +1493,10 @@ public class MwmActivity extends BaseMwmFragmentActivity mMapFragment.nativeCompassUpdated(mLastCompassData.magneticNorth, mLastCompassData.trueNorth, true); } } + + @Override + public void onCategoryChanged(int bookmarkId, int newCategoryId) + { + mPlacePage.setMapObject(BookmarkManager.INSTANCE.getBookmark(newCategoryId, bookmarkId)); + } } diff --git a/android/src/com/mapswithme/maps/bookmarks/AbstractBookmarkCategoryAdapter.java b/android/src/com/mapswithme/maps/bookmarks/BaseBookmarkCategoryAdapter.java similarity index 65% rename from android/src/com/mapswithme/maps/bookmarks/AbstractBookmarkCategoryAdapter.java rename to android/src/com/mapswithme/maps/bookmarks/BaseBookmarkCategoryAdapter.java index c83ff86114..d8405efa3f 100644 --- a/android/src/com/mapswithme/maps/bookmarks/AbstractBookmarkCategoryAdapter.java +++ b/android/src/com/mapswithme/maps/bookmarks/BaseBookmarkCategoryAdapter.java @@ -1,16 +1,16 @@ package com.mapswithme.maps.bookmarks; import android.content.Context; -import android.widget.BaseAdapter; +import android.support.v7.widget.RecyclerView; import com.mapswithme.maps.bookmarks.data.BookmarkCategory; import com.mapswithme.maps.bookmarks.data.BookmarkManager; -public abstract class AbstractBookmarkCategoryAdapter extends BaseAdapter +public abstract class BaseBookmarkCategoryAdapter extends RecyclerView.Adapter { private final Context mContext; - public AbstractBookmarkCategoryAdapter(Context context) + public BaseBookmarkCategoryAdapter(Context context) { mContext = context; } @@ -21,18 +21,11 @@ public abstract class AbstractBookmarkCategoryAdapter extends BaseAdapter } @Override - public int getCount() + public int getItemCount() { return BookmarkManager.INSTANCE.getCategoriesCount(); } - @Override - public long getItemId(int position) - { - return position; - } - - @Override public BookmarkCategory getItem(int position) { return BookmarkManager.INSTANCE.getCategoryById(position); diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesAdapter.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesAdapter.java index 4a99ef8f52..59213743b0 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesAdapter.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesAdapter.java @@ -1,6 +1,7 @@ package com.mapswithme.maps.bookmarks; import android.content.Context; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,60 +11,74 @@ import android.widget.TextView; import com.mapswithme.maps.R; import com.mapswithme.maps.bookmarks.data.BookmarkCategory; import com.mapswithme.maps.bookmarks.data.BookmarkManager; +import com.mapswithme.maps.widget.recycler.RecyclerClickListener; +import com.mapswithme.maps.widget.recycler.RecyclerLongClickListener; -public class BookmarkCategoriesAdapter extends AbstractBookmarkCategoryAdapter +public class BookmarkCategoriesAdapter extends BaseBookmarkCategoryAdapter { + private final static int TYPE_ITEM = 0; + private final static int TYPE_HELP = 1; + private RecyclerLongClickListener mLongClickListener; + private RecyclerClickListener mClickListener; + public BookmarkCategoriesAdapter(Context context) { super(context); } - private final static int TYPE_ITEM = 0; - private final static int TYPE_HELP = 1; - - @Override - public int getCount() + public void setOnClickListener(RecyclerClickListener listener) { - return super.getCount() + 1; + mClickListener = listener; + } + + public void setOnLongClickListener(RecyclerLongClickListener listener) + { + mLongClickListener = listener; } @Override - public int getItemViewType(int position) + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return (position == getCount() - 1) ? TYPE_HELP : TYPE_ITEM; + View view; + if (viewType == TYPE_HELP) + { + TextView hintView = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_hint, parent, false); + if (getItemCount() > 1) + hintView.setText(R.string.bookmarks_usage_hint_import_only); + + view = hintView; + } + else + view = LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_category, parent, false); + + final ViewHolder holder = new ViewHolder(view, viewType); + view.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + mClickListener.onItemClick(v, holder.getAdapterPosition()); + } + }); + view.setOnLongClickListener(new View.OnLongClickListener() + { + @Override + public boolean onLongClick(View v) + { + mLongClickListener.onLongItemClick(v, holder.getAdapterPosition()); + return true; + } + }); + + return holder; } @Override - public int getViewTypeCount() - { - return 2; - } - - @Override - public boolean isEnabled(int position) - { - return getItemViewType(position) != TYPE_HELP; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) + public void onBindViewHolder(final ViewHolder holder, final int position) { if (getItemViewType(position) == TYPE_HELP) - { - final TextView hintView = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_hint, parent, false); - if (super.getCount() > 0) - hintView.setText(R.string.bookmarks_usage_hint_import_only); - return hintView; - } + return; - if (convertView == null) - { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_category, parent, false); - final ViewHolder holder = new ViewHolder(convertView); - convertView.setTag(holder); - } - - final ViewHolder holder = (ViewHolder) convertView.getTag(); final BookmarkCategory set = getItem(position); holder.name.setText(set.getName()); holder.size.setText(String.valueOf(set.getSize())); @@ -77,21 +92,38 @@ public class BookmarkCategoriesAdapter extends AbstractBookmarkCategoryAdapter holder.setVisibilityState(set.isVisible()); } }); - - - return convertView; } - static class ViewHolder + @Override + public int getItemViewType(int position) + { + return (position == getItemCount() - 1) ? TYPE_HELP : TYPE_ITEM; + } + + @Override + public int getItemCount() + { + return super.getItemCount() + 1; + } + + static class ViewHolder extends RecyclerView.ViewHolder { TextView name; ImageView visibilityMarker; TextView size; - public ViewHolder(View root) + public ViewHolder(View root, int viewType) { + super(root); + + if (viewType == TYPE_HELP) + { + root.setEnabled(false); + return; + } + name = (TextView) root.findViewById(R.id.tv__set_name); - visibilityMarker = (ImageView) root.findViewById(R.id.set_visible); + visibilityMarker = (ImageView) root.findViewById(R.id.iv__set_visible); size = (TextView) root.findViewById(R.id.tv__set_size); } diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java index 65d7191b07..d78f2a8ee3 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java @@ -7,22 +7,23 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ListView; import com.cocosw.bottomsheet.BottomSheet; import com.mapswithme.maps.R; -import com.mapswithme.maps.base.BaseMwmListFragment; +import com.mapswithme.maps.base.BaseMwmRecyclerFragment; import com.mapswithme.maps.bookmarks.data.BookmarkCategory; import com.mapswithme.maps.bookmarks.data.BookmarkManager; import com.mapswithme.maps.dialog.EditTextDialogFragment; +import com.mapswithme.maps.widget.recycler.RecyclerClickListener; +import com.mapswithme.maps.widget.recycler.RecyclerLongClickListener; import com.mapswithme.util.BottomSheetHelper; import com.mapswithme.util.sharing.SharingHelper; -public class BookmarkCategoriesFragment extends BaseMwmListFragment +public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment implements EditTextDialogFragment.OnTextSaveListener, MenuItem.OnMenuItemClickListener, - AdapterView.OnItemLongClickListener + RecyclerClickListener, + RecyclerLongClickListener { private int mSelectedPosition; private BookmarkCategoriesAdapter mAdapter; @@ -30,7 +31,7 @@ public class BookmarkCategoriesFragment extends BaseMwmListFragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.simple_list, container, false); + return inflater.inflate(R.layout.recycler_default, container, false); } @Override @@ -39,8 +40,9 @@ public class BookmarkCategoriesFragment extends BaseMwmListFragment super.onViewCreated(view, savedInstanceState); mAdapter = new BookmarkCategoriesAdapter(getActivity()); - setListAdapter(mAdapter); - getListView().setOnItemLongClickListener(this); + mAdapter.setOnClickListener(this); + mAdapter.setOnLongClickListener(this); + getRecyclerView().setAdapter(mAdapter); } @Override @@ -57,34 +59,6 @@ public class BookmarkCategoriesFragment extends BaseMwmListFragment BottomSheetHelper.free(); } - @Override - public void onListItemClick(ListView l, View v, int position, long id) - { - startActivity(new Intent(getActivity(), BookmarkListActivity.class) - .putExtra(ChooseBookmarkCategoryActivity.BOOKMARK_CATEGORY_INDEX, position)); - } - - @Override - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) - { - mSelectedPosition = position; - - BookmarkCategory category = BookmarkManager.INSTANCE.getCategoryById(mSelectedPosition); - BottomSheet bs = BottomSheetHelper.create(getActivity()) - .title(category.getName()) - .sheet(R.menu.menu_bookmark_categories) - .listener(this) - .build(); - - MenuItem show = bs.getMenu().getItem(0); - show.setIcon(category.isVisible() ? R.drawable.ic_hide - : R.drawable.ic_show); - show.setTitle(category.isVisible() ? R.string.hide - : R.string.show); - bs.show(); - return true; - } - @Override public void onSaveText(String text) { @@ -119,7 +93,6 @@ public class BookmarkCategoriesFragment extends BaseMwmListFragment args.putString(EditTextDialogFragment.EXTRA_POSITIVE_BUTTON, getString(R.string.rename)); args.putString(EditTextDialogFragment.EXTRA_NEGATIVE_BUTTON, getString(R.string.cancel)); final EditTextDialogFragment fragment = (EditTextDialogFragment) Fragment.instantiate(getActivity(), EditTextDialogFragment.class.getName()); - fragment.setOnTextSaveListener(this); fragment.setArguments(args); fragment.show(getActivity().getSupportFragmentManager(), EditTextDialogFragment.class.getName()); break; @@ -127,4 +100,31 @@ public class BookmarkCategoriesFragment extends BaseMwmListFragment return true; } + + @Override + public void onLongItemClick(View v, int position) + { + mSelectedPosition = position; + + BookmarkCategory category = BookmarkManager.INSTANCE.getCategoryById(mSelectedPosition); + BottomSheet bs = BottomSheetHelper.create(getActivity()) + .title(category.getName()) + .sheet(R.menu.menu_bookmark_categories) + .listener(this) + .build(); + + MenuItem show = bs.getMenu().getItem(0); + show.setIcon(category.isVisible() ? R.drawable.ic_hide + : R.drawable.ic_show); + show.setTitle(category.isVisible() ? R.string.hide + : R.string.show); + bs.show(); + } + + @Override + public void onItemClick(View v, int position) + { + startActivity(new Intent(getActivity(), BookmarkListActivity.class) + .putExtra(ChooseBookmarkCategoryFragment.CATEGORY_ID, position)); + } } diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java index dee9e38565..ec5e76c73e 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java @@ -45,7 +45,7 @@ public class BookmarksListFragment extends BaseMwmListFragment { super.onCreate(savedInstanceState); - mCategoryIndex = getArguments().getInt(ChooseBookmarkCategoryActivity.BOOKMARK_CATEGORY_INDEX, -1); + mCategoryIndex = getArguments().getInt(ChooseBookmarkCategoryFragment.CATEGORY_ID, -1); mCategory = BookmarkManager.INSTANCE.getCategoryById(mCategoryIndex); } @@ -197,7 +197,7 @@ public class BookmarksListFragment extends BaseMwmListFragment args.putInt(EditBookmarkFragment.EXTRA_BOOKMARK_ID, bmk); final EditBookmarkFragment fragment = (EditBookmarkFragment) Fragment.instantiate(getActivity(), EditBookmarkFragment.class.getName(), args); fragment.setArguments(args); - fragment.show(getActivity().getSupportFragmentManager(), null); + fragment.show(getChildFragmentManager(), null); } @Override diff --git a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java deleted file mode 100644 index dcc4a53042..0000000000 --- a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.mapswithme.maps.bookmarks; - -import android.app.Activity; -import android.content.Intent; -import android.support.v4.app.Fragment; - -import com.mapswithme.maps.base.BaseMwmFragmentActivity; - -public class ChooseBookmarkCategoryActivity extends BaseMwmFragmentActivity -{ - public static final String BOOKMARK = "Bookmark"; - public static final String BOOKMARK_CATEGORY_INDEX = "BoookmarkCategoryIndex"; - public static final int REQUEST_CODE_BOOKMARK_SET = 0x1; - - @Override - protected Class getFragmentClass() - { - return ChooseBookmarkCategoryFragment.class; - } - - @Override - public void onBackPressed() - { - setResult(Activity.RESULT_OK, new Intent().putExtra(BOOKMARK, getIntent().getParcelableExtra(BOOKMARK))); - - super.onBackPressed(); - } -} diff --git a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryAdapter.java b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryAdapter.java index bcfb01c0af..f9182966a6 100644 --- a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryAdapter.java +++ b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryAdapter.java @@ -1,6 +1,7 @@ package com.mapswithme.maps.bookmarks; import android.content.Context; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,83 +10,103 @@ import android.widget.TextView; import com.mapswithme.maps.R; -public class ChooseBookmarkCategoryAdapter extends AbstractBookmarkCategoryAdapter +public class ChooseBookmarkCategoryAdapter extends BaseBookmarkCategoryAdapter { - private int mCheckedPosition; - public static final int VIEW_TYPE_CATEGORY = 0; public static final int VIEW_TYPE_ADD_NEW = 1; + private int mCheckedPosition; + + public interface CategoryListener + { + void onCategorySet(int categoryId); + + void onCategoryCreate(); + } + + private CategoryListener mListener; + public ChooseBookmarkCategoryAdapter(Context context, int pos) { super(context); mCheckedPosition = pos; } - @Override - public int getViewTypeCount() + public void setListener(CategoryListener listener) { - return super.getViewTypeCount() + 1; + mListener = listener; } @Override - public int getCount() + public SingleChoiceHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return super.getCount() + 1; + View view; + final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + if (viewType == VIEW_TYPE_CATEGORY) + view = inflater.inflate(R.layout.item_bookmark_category_choose, parent, false); + else + view = inflater.inflate(R.layout.item_bookmark_category_create, parent, false); + + final SingleChoiceHolder holder = new SingleChoiceHolder(view); + + view.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + if (mListener == null) + return; + + if (holder.getItemViewType() == VIEW_TYPE_ADD_NEW) + mListener.onCategoryCreate(); + else + mListener.onCategorySet(holder.getAdapterPosition()); + } + }); + + return holder; + } + + @Override + public void onBindViewHolder(SingleChoiceHolder holder, int position) + { + if (holder.getItemViewType() == VIEW_TYPE_CATEGORY) + { + holder.name.setText(getItem(position).getName()); + holder.checked.setChecked(mCheckedPosition == position); + } } @Override public int getItemViewType(int position) { - return position == getCount() - 1 ? VIEW_TYPE_ADD_NEW : VIEW_TYPE_CATEGORY; + return position == getItemCount() - 1 ? VIEW_TYPE_ADD_NEW : VIEW_TYPE_CATEGORY; } @Override - public View getView(int position, View convertView, ViewGroup parent) + public int getItemCount() { - final int viewType = getItemViewType(position); - if (convertView == null) - { - if (viewType == VIEW_TYPE_CATEGORY) - { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_set_chooser, parent, false); - convertView.setTag(new SingleChoiceHolder(convertView)); - } - else - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_bookmark_set_create, parent, false); - } - - if (viewType == VIEW_TYPE_CATEGORY) - { - final SingleChoiceHolder holder = (SingleChoiceHolder) convertView.getTag(); - boolean checked = mCheckedPosition == position; - holder.name.setText(getItem(position).getName()); - holder.checked.setChecked(checked); - } - - return convertView; + return super.getItemCount() + 1; } - private static class SingleChoiceHolder + public void chooseItem(int position) + { + final int oldPosition = mCheckedPosition; + mCheckedPosition = position; + notifyItemChanged(oldPosition); + notifyItemChanged(mCheckedPosition); + } + + static class SingleChoiceHolder extends RecyclerView.ViewHolder { TextView name; RadioButton checked; public SingleChoiceHolder(View convertView) { + super(convertView); name = (TextView) convertView.findViewById(R.id.tv__set_name); checked = (RadioButton) convertView.findViewById(R.id.rb__selected); } } - - public void chooseItem(int position) - { - mCheckedPosition = position; - notifyDataSetChanged(); - } - - public int getCheckedItemPosition() - { - return mCheckedPosition; - } } diff --git a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryFragment.java b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryFragment.java index 6db18a3c25..f393db0ed2 100644 --- a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryFragment.java @@ -1,81 +1,85 @@ package com.mapswithme.maps.bookmarks; -import android.graphics.Point; +import android.app.Activity; import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; import android.view.View; -import android.widget.ListView; +import android.view.ViewGroup; import com.mapswithme.maps.R; -import com.mapswithme.maps.base.BaseMwmListFragment; +import com.mapswithme.maps.base.BaseMwmDialogFragment; import com.mapswithme.maps.bookmarks.data.Bookmark; import com.mapswithme.maps.bookmarks.data.BookmarkManager; -import com.mapswithme.maps.bookmarks.data.ParcelablePoint; import com.mapswithme.maps.dialog.EditTextDialogFragment; import com.mapswithme.util.statistics.Statistics; -public class ChooseBookmarkCategoryFragment extends BaseMwmListFragment implements EditTextDialogFragment.OnTextSaveListener +import static com.mapswithme.maps.dialog.EditTextDialogFragment.EXTRA_POSITIVE_BUTTON; +import static com.mapswithme.maps.dialog.EditTextDialogFragment.EXTRA_TITLE; +import static com.mapswithme.maps.dialog.EditTextDialogFragment.OnTextSaveListener; + +public class ChooseBookmarkCategoryFragment extends BaseMwmDialogFragment implements OnTextSaveListener, ChooseBookmarkCategoryAdapter.CategoryListener { - private ChooseBookmarkCategoryAdapter mAdapter; + public static final String CATEGORY_ID = "ExtraCategoryId"; + public static final String BOOKMARK_ID = "ExtraBookmarkId"; + private Bookmark mBookmark; + private ChooseBookmarkCategoryAdapter mAdapter; + private RecyclerView mRecycler; + + + public interface Listener + { + void onCategoryChanged(int bookmarkId, int newCategoryId); + } + private Listener mListener; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setStyle(DialogFragment.STYLE_NO_FRAME, R.style.MwmMain_DialogFragment); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + { + mRecycler = (RecyclerView) inflater.inflate(R.layout.recycler_default, container, false); + mRecycler.setLayoutManager(new org.solovyev.android.views.llm.LinearLayoutManager(getActivity())); + + return mRecycler; + } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - mAdapter = new ChooseBookmarkCategoryAdapter(getActivity(), getArguments().getInt(ChooseBookmarkCategoryActivity.BOOKMARK_CATEGORY_INDEX, 0)); - setListAdapter(mAdapter); - mBookmark = getBookmarkFromIntent(); + final Bundle args = getArguments(); + final int catId = args.getInt(CATEGORY_ID, 0); + mBookmark = BookmarkManager.INSTANCE.getBookmark(catId, args.getInt(BOOKMARK_ID)); + mAdapter = new ChooseBookmarkCategoryAdapter(getActivity(), catId); + mAdapter.setListener(this); + mRecycler.setAdapter(mAdapter); } @Override - public void onListItemClick(ListView l, View v, int position, long id) + public void onAttach(Activity activity) { - if (mAdapter.getItemViewType(position) == ChooseBookmarkCategoryAdapter.VIEW_TYPE_ADD_NEW) - showCreateCategoryDialog(); - else + if (mListener == null) { - mAdapter.chooseItem(position); - - mBookmark.setCategoryId(position); - getActivity().getIntent().putExtra(ChooseBookmarkCategoryActivity.BOOKMARK, - new ParcelablePoint(mBookmark.getCategoryId(), mBookmark.getBookmarkId())); - - getActivity().onBackPressed(); + final Fragment parent = getParentFragment(); + if (parent instanceof Listener) + mListener = (Listener) parent; + else if (activity instanceof Listener) + mListener = (Listener) activity; } - } - private Bookmark getBookmarkFromIntent() - { - // Note that Point result from the intent is actually a pair - // of (category index, bookmark index in category). - final Point cab = ((ParcelablePoint) getArguments().getParcelable(ChooseBookmarkCategoryActivity.BOOKMARK)).getPoint(); - return BookmarkManager.INSTANCE.getBookmark(cab.x, cab.y); - } - - private void showCreateCategoryDialog() - { - final Bundle args = new Bundle(); - args.putString(EditTextDialogFragment.EXTRA_TITLE, getString(R.string.new_group)); - args.putString(EditTextDialogFragment.EXTRA_POSITIVE_BUTTON, getString(R.string.ok)); - final EditTextDialogFragment fragment = (EditTextDialogFragment) Fragment.instantiate(getActivity(), EditTextDialogFragment.class.getName()); - fragment.setOnTextSaveListener(this); - fragment.setArguments(args); - fragment.show(getActivity().getSupportFragmentManager(), EditTextDialogFragment.class.getName()); - } - - private void createCategory(String name) - { - final int category = BookmarkManager.INSTANCE.createCategory(name); - mBookmark.setCategoryId(category); - - getActivity().getIntent().putExtra(ChooseBookmarkCategoryActivity.BOOKMARK_CATEGORY_INDEX, category) - .putExtra(ChooseBookmarkCategoryActivity.BOOKMARK, new ParcelablePoint(category, 0)); - - mAdapter.chooseItem(category); - - Statistics.INSTANCE.trackGroupCreated(); + super.onAttach(activity); } @Override @@ -83,4 +87,36 @@ public class ChooseBookmarkCategoryFragment extends BaseMwmListFragment implemen { createCategory(text); } + + private void createCategory(String name) + { + final int category = BookmarkManager.INSTANCE.createCategory(name); + mBookmark.setCategoryId(category); + mAdapter.chooseItem(category); + Statistics.INSTANCE.trackGroupCreated(); + } + + @Override + public void onCategorySet(int categoryId) + { + mBookmark.setCategoryId(categoryId); + mAdapter.chooseItem(categoryId); + if (mListener != null) + mListener.onCategoryChanged(mBookmark.getBookmarkId(), categoryId); + dismiss(); + Statistics.INSTANCE.trackSimpleNamedEvent(Statistics.EventName.GROUP_CHANGED); + } + + @Override + public void onCategoryCreate() + { + final Bundle args = new Bundle(); + Activity activity = getActivity(); + args.putString(EXTRA_TITLE, activity.getString(R.string.new_group)); + args.putString(EXTRA_POSITIVE_BUTTON, activity.getString(R.string.ok)); + final EditTextDialogFragment fragment = (EditTextDialogFragment) Fragment. + instantiate(activity, EditTextDialogFragment.class.getName()); + fragment.setArguments(args); + fragment.show(getChildFragmentManager(), EditTextDialogFragment.class.getName()); + } } diff --git a/android/src/com/mapswithme/maps/dialog/EditTextDialogFragment.java b/android/src/com/mapswithme/maps/dialog/EditTextDialogFragment.java index d9c7724b77..8da05f8f37 100644 --- a/android/src/com/mapswithme/maps/dialog/EditTextDialogFragment.java +++ b/android/src/com/mapswithme/maps/dialog/EditTextDialogFragment.java @@ -1,10 +1,12 @@ package com.mapswithme.maps.dialog; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.view.View; @@ -31,10 +33,6 @@ public class EditTextDialogFragment extends BaseMwmDialogFragment void onSaveText(String text); } - private OnTextSaveListener mTextSaveListener; - - public EditTextDialogFragment() {} - @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) @@ -51,35 +49,29 @@ public class EditTextDialogFragment extends BaseMwmDialogFragment negativeButtonText = args.getString(EXTRA_NEGATIVE_BUTTON); } - final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()). - setView(buildView()). + final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setView(buildView()). setPositiveButton(positiveButtonText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - if (mTextSaveListener != null) - mTextSaveListener.onSaveText(mEtInput.getText().toString()); - } - } - ).setNegativeButton(negativeButtonText, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int which) - { + final Fragment parentFragment = getParentFragment(); + final String result = mEtInput.getText().toString(); + if (parentFragment instanceof OnTextSaveListener) + { + ((OnTextSaveListener) parentFragment).onSaveText(result); + return; + } - } - } - ); + final Activity activity = getActivity(); + if (activity instanceof OnTextSaveListener) + ((OnTextSaveListener) activity).onSaveText(result); + } + }).setNegativeButton(negativeButtonText, null); return builder.create(); } - public void setOnTextSaveListener(OnTextSaveListener listener) - { - mTextSaveListener = listener; - } - private View buildView() { @SuppressLint("InflateParams") final View root = getActivity().getLayoutInflater().inflate(R.layout.dialog_edit_text, null); diff --git a/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java b/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java index 21d1e6b986..2ec5d80df3 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java +++ b/android/src/com/mapswithme/maps/widget/placepage/EditBookmarkFragment.java @@ -1,9 +1,9 @@ package com.mapswithme.maps.widget.placepage; -import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.LayoutInflater; @@ -15,16 +15,16 @@ import android.widget.TextView; import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmDialogFragment; -import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryActivity; +import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryFragment; +import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryFragment.Listener; import com.mapswithme.maps.bookmarks.data.Bookmark; import com.mapswithme.maps.bookmarks.data.BookmarkManager; import com.mapswithme.maps.bookmarks.data.Icon; -import com.mapswithme.maps.bookmarks.data.ParcelablePoint; import com.mapswithme.util.InputUtils; import com.mapswithme.util.UiUtils; import com.mapswithme.util.statistics.Statistics; -public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.OnClickListener +public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.OnClickListener, Listener { public static final String EXTRA_CATEGORY_ID = "CategoryId"; public static final String EXTRA_BOOKMARK_ID = "BookmarkId"; @@ -117,10 +117,11 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View. private void selectBookmarkSet() { - final Intent intent = new Intent(getActivity(), ChooseBookmarkCategoryActivity.class) - .putExtra(ChooseBookmarkCategoryActivity.BOOKMARK_CATEGORY_INDEX, mBookmark.getCategoryId()) - .putExtra(ChooseBookmarkCategoryActivity.BOOKMARK, new ParcelablePoint(mBookmark.getCategoryId(), mBookmark.getBookmarkId())); - getActivity().startActivityForResult(intent, ChooseBookmarkCategoryActivity.REQUEST_CODE_BOOKMARK_SET); + final Bundle args = new Bundle(); + args.putInt(ChooseBookmarkCategoryFragment.CATEGORY_ID, mBookmark.getCategoryId()); + args.putInt(ChooseBookmarkCategoryFragment.BOOKMARK_ID, mBookmark.getBookmarkId()); + final ChooseBookmarkCategoryFragment fragment = (ChooseBookmarkCategoryFragment) Fragment.instantiate(getActivity(), ChooseBookmarkCategoryFragment.class.getName(), args); + fragment.show(getChildFragmentManager(), null); } private void selectBookmarkColor() @@ -165,4 +166,11 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View. mTvBookmarkGroup.setText(mBookmark.getCategoryName(getActivity())); refreshColorMarker(); } + + @Override + public void onCategoryChanged(int bookmarkId, int newCategoryId) + { + mBookmark = BookmarkManager.INSTANCE.getBookmark(newCategoryId, bookmarkId); + refreshBookmark(); + } } diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index f0829b22be..a1c275807c 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -16,21 +16,48 @@ import android.support.v4.app.FragmentActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.AttributeSet; -import android.view.*; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; import android.webkit.WebView; -import android.widget.*; -import com.mapswithme.maps.*; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupMenu; +import android.widget.RatingBar; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import com.mapswithme.maps.BuildConfig; +import com.mapswithme.maps.Framework; +import com.mapswithme.maps.MwmActivity; +import com.mapswithme.maps.MwmApplication; +import com.mapswithme.maps.R; import com.mapswithme.maps.api.ParsedMwmRequest; -import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryActivity; -import com.mapswithme.maps.bookmarks.data.*; +import com.mapswithme.maps.bookmarks.ChooseBookmarkCategoryFragment; +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.Icon; +import com.mapswithme.maps.bookmarks.data.MapObject; import com.mapswithme.maps.bookmarks.data.MapObject.MapObjectType; import com.mapswithme.maps.bookmarks.data.MapObject.Poi; +import com.mapswithme.maps.bookmarks.data.Metadata; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.widget.ArrowView; import com.mapswithme.maps.widget.BaseShadowController; import com.mapswithme.maps.widget.ObservableScrollView; import com.mapswithme.maps.widget.ScrollViewShadowController; -import com.mapswithme.util.*; +import com.mapswithme.util.InputUtils; +import com.mapswithme.util.LocationUtils; +import com.mapswithme.util.StringUtils; +import com.mapswithme.util.UiUtils; +import com.mapswithme.util.Utils; import com.mapswithme.util.concurrency.UiThread; import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.statistics.AlohaHelper; @@ -744,12 +771,14 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListene private void selectBookmarkSet() { - final Activity activity = (Activity) getContext(); + final FragmentActivity activity = (FragmentActivity) getContext(); final Bookmark bookmark = (Bookmark) mMapObject; - final Intent intent = new Intent(activity, ChooseBookmarkCategoryActivity.class) - .putExtra(ChooseBookmarkCategoryActivity.BOOKMARK_CATEGORY_INDEX, bookmark.getCategoryId()) - .putExtra(ChooseBookmarkCategoryActivity.BOOKMARK, new ParcelablePoint(bookmark.getCategoryId(), bookmark.getBookmarkId())); - activity.startActivityForResult(intent, ChooseBookmarkCategoryActivity.REQUEST_CODE_BOOKMARK_SET); + + final Bundle args = new Bundle(); + args.putInt(ChooseBookmarkCategoryFragment.CATEGORY_ID, bookmark.getCategoryId()); + args.putInt(ChooseBookmarkCategoryFragment.BOOKMARK_ID, bookmark.getBookmarkId()); + final ChooseBookmarkCategoryFragment fragment = (ChooseBookmarkCategoryFragment) Fragment.instantiate(activity, ChooseBookmarkCategoryFragment.class.getName(), args); + fragment.show(activity.getSupportFragmentManager(), null); } private void selectBookmarkColor() diff --git a/android/src/com/mapswithme/maps/widget/recycler/RecyclerClickListener.java b/android/src/com/mapswithme/maps/widget/recycler/RecyclerClickListener.java new file mode 100644 index 0000000000..5c1c6ab010 --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/recycler/RecyclerClickListener.java @@ -0,0 +1,8 @@ +package com.mapswithme.maps.widget.recycler; + +import android.view.View; + +public interface RecyclerClickListener +{ + void onItemClick(View v, int position); +} diff --git a/android/src/com/mapswithme/maps/widget/recycler/RecyclerLongClickListener.java b/android/src/com/mapswithme/maps/widget/recycler/RecyclerLongClickListener.java new file mode 100644 index 0000000000..da2af20319 --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/recycler/RecyclerLongClickListener.java @@ -0,0 +1,8 @@ +package com.mapswithme.maps.widget.recycler; + +import android.view.View; + +public interface RecyclerLongClickListener +{ + void onLongItemClick(View v, int position); +} diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index 3822735770..7273dc92e5 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -39,6 +39,7 @@ public enum Statistics public static final String SEARCH_CAT_CLICKED = "Search category clicked"; public static final String DESCRIPTION_CHANGED = "Description changed"; public static final String GROUP_CREATED = "Group Created"; + public static final String GROUP_CHANGED = "Group changed"; public static final String COLOR_CHANGED = "Color changed"; public static final String BOOKMARK_CREATED = "Bookmark created"; public static final String PLACE_SHARED = "Place Shared"; diff --git a/data/copyright.html b/data/copyright.html index fd386ac218..263f43ce66 100644 --- a/data/copyright.html +++ b/data/copyright.html @@ -82,6 +82,9 @@
  • Bolts Framework
    © 2013-present, Facebook, Inc.; BSD License
  • + +
  • Linear Layout Manager
    + © 2014 serso aka se.solovyev; Apache License
  • We also use these wonderful fonts for labels on the map: