/
githubmirror
/
omim
Обзор
Документация
Войти
/
githubmirror
/
omim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java
568 строк
15 KB
velichkomarija
[android] Remove usage of MwmApplication.get.
02 дек 2020, 10:59
02 дек 2020, 10:59
29e1a8d
Код
Авторство
О чём код?
package com.mapswithme.maps.widget.placepage; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.StringRes; import android.content.Context; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.cocosw.bottomsheet.BottomSheet; import com.mapswithme.maps.MwmApplication; import com.mapswithme.maps.R; import com.mapswithme.maps.routing.RoutingController; import com.mapswithme.util.BottomSheetHelper; import com.mapswithme.util.ThemeUtils; import com.mapswithme.util.UiUtils; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public final class PlacePageButtons { private static final Map<Integer, PartnerItem> PARTNERS_ITEMS = new HashMap<Integer, PartnerItem>() {{ // --------------------------------------------------------------------------------------------- // Warning: the following code is autogenerated. // Do NOT change it manually. // %PartnersExtender.PartnerItemMap put(PartnerItem.PARTNER1.getIndex(), PartnerItem.PARTNER1); put(PartnerItem.PARTNER2.getIndex(), PartnerItem.PARTNER2); put(PartnerItem.PARTNER3.getIndex(), PartnerItem.PARTNER3); put(PartnerItem.PARTNER18.getIndex(), PartnerItem.PARTNER18); put(PartnerItem.PARTNER19.getIndex(), PartnerItem.PARTNER19); put(PartnerItem.PARTNER20.getIndex(), PartnerItem.PARTNER20); // /%PartnersExtender.PartnerItemMap // End of autogenerated code. // --------------------------------------------------------------------------------------------- }}; private final int mMaxButtons; private final PlacePageView mPlacePage; private final ViewGroup mFrame; private final ItemListener mItemListener; private List<PlacePageButton> mPrevItems; interface PlacePageButton { @StringRes int getTitle(); ImageResources getIcon(); @NonNull ButtonType getType(); @DrawableRes int getBackgroundResource(); class ImageResources { @DrawableRes private final int mEnabledStateResId; @DrawableRes private final int mDisabledStateResId; public ImageResources(@DrawableRes int enabledStateResId, @DrawableRes int disabledStateResId) { mEnabledStateResId = enabledStateResId; mDisabledStateResId = disabledStateResId; } public ImageResources(@DrawableRes int enabledStateResId) { this(enabledStateResId, enabledStateResId); } @DrawableRes public int getDisabledStateResId() { return mDisabledStateResId; } @DrawableRes public int getEnabledStateResId(@NonNull Context context) { return mEnabledStateResId; } public static class Stub extends ImageResources { public Stub() { super(UiUtils.NO_ID); } @Override public int getDisabledStateResId() { throw new UnsupportedOperationException("Not supported here"); } @Override public int getEnabledStateResId(@NonNull Context context) { throw new UnsupportedOperationException("Not supported here"); } } } } enum ButtonType { // --------------------------------------------------------------------------------------------- // Warning: the following code is autogenerated. // Do NOT change it manually. // %PartnersExtender.ButtonType PARTNER1, PARTNER2, PARTNER3, PARTNER18, PARTNER19, PARTNER20, // /%PartnersExtender.ButtonType // End of autogenerated code. // --------------------------------------------------------------------------------------------- BOOKING, BOOKING_SEARCH, OPENTABLE, BACK, BOOKMARK, ROUTE_FROM, ROUTE_TO, ROUTE_ADD, ROUTE_REMOVE, ROUTE_AVOID_TOLL, ROUTE_AVOID_FERRY, ROUTE_AVOID_UNPAVED, SHARE, MORE, CALL } enum PartnerItem implements PlacePageButtons.PlacePageButton { // --------------------------------------------------------------------------------------------- // Warning: the following code is autogenerated. // Do NOT change it manually. // %PartnersExtender.PartnerItem PARTNER1( 1, R.string.sponsored_partner1_action, new ImageResources(R.drawable.ic_24px_logo_partner1), R.drawable.button_partner1, ButtonType.PARTNER1), PARTNER2( 2, R.string.sponsored_partner2_action, new ImageResources(R.drawable.ic_24px_logo_partner2), R.drawable.button_partner2, ButtonType.PARTNER2), PARTNER3( 3, R.string.sponsored_partner3_action, new ImageResources(R.drawable.ic_24px_logo_partner3), R.drawable.button_partner3, ButtonType.PARTNER3), PARTNER18( 18, R.string.sponsored_partner18_action, new ImageResources(R.drawable.ic_24px_logo_partner18), R.drawable.button_partner18, ButtonType.PARTNER18), PARTNER19( 19, R.string.sponsored_partner19_action, new ImageResources(R.drawable.ic_24px_logo_partner19), R.drawable.button_partner19, ButtonType.PARTNER19), PARTNER20( 20, R.string.sponsored_partner20_action, new ImageResources(R.drawable.ic_24px_logo_partner20), R.drawable.button_partner20, ButtonType.PARTNER20); // /%PartnersExtender.PartnerItem // End of autogenerated code. // --------------------------------------------------------------------------------------------- private final int mIndex; @StringRes private final int mTitleId; private final ImageResources mIconId; @DrawableRes private final int mBackgroundId; @NonNull private final ButtonType mButtonType; PartnerItem(int index, @StringRes int titleId, @NonNull ImageResources iconId, @DrawableRes int backgroundId, @NonNull ButtonType buttonType) { mIndex = index; mTitleId = titleId; mIconId = iconId; mBackgroundId = backgroundId; mButtonType = buttonType; } public int getIndex() { return mIndex; } @StringRes @Override public int getTitle() { return mTitleId; } @NonNull @Override public ImageResources getIcon() { return mIconId; } @NonNull @Override public ButtonType getType() { return mButtonType; } @DrawableRes @Override public int getBackgroundResource() { return mBackgroundId; } } enum Item implements PlacePageButtons.PlacePageButton { BOOKING( R.string.book_button, new ImageResources(R.drawable.ic_booking), ButtonType.BOOKING) { @DrawableRes @Override public int getBackgroundResource() { return R.drawable.button_booking; } }, BOOKING_SEARCH( R.string.booking_search, new ImageResources(R.drawable.ic_menu_search), ButtonType.BOOKING_SEARCH) { @DrawableRes @Override public int getBackgroundResource() { return R.drawable.button_booking; } }, OPENTABLE( R.string.book_button, new ImageResources(R.drawable.ic_opentable), ButtonType.OPENTABLE) { @DrawableRes @Override public int getBackgroundResource() { return R.drawable.button_opentable; } }, BACK( R.string.back, new ImageResources.Stub() { @Override public int getEnabledStateResId(@NonNull Context context) { return ThemeUtils.getResource(MwmApplication.from(context), android.R.attr.homeAsUpIndicator); } }, ButtonType.BACK), BOOKMARK( R.string.bookmark, new ImageResources(R.drawable.ic_bookmarks_off), ButtonType.BOOKMARK), ROUTE_FROM( R.string.p2p_from_here, new ImageResources(R.drawable.ic_route_from), ButtonType.ROUTE_FROM), ROUTE_TO( R.string.p2p_to_here, new ImageResources(R.drawable.ic_route_to), ButtonType.ROUTE_TO), ROUTE_ADD( R.string.placepage_add_stop, new ImageResources(R.drawable.ic_route_via), ButtonType.ROUTE_ADD), ROUTE_REMOVE( R.string.placepage_remove_stop, new ImageResources(R.drawable.ic_route_remove), ButtonType.ROUTE_REMOVE), ROUTE_AVOID_TOLL( R.string.avoid_toll_roads_placepage, new ImageResources(R.drawable.ic_avoid_tolls), ButtonType.ROUTE_AVOID_TOLL), ROUTE_AVOID_UNPAVED( R.string.avoid_unpaved_roads_placepage, new ImageResources(R.drawable.ic_avoid_unpaved), ButtonType.ROUTE_AVOID_UNPAVED), ROUTE_AVOID_FERRY( R.string.avoid_ferry_crossing_placepage, new ImageResources(R.drawable.ic_avoid_ferry), ButtonType.ROUTE_AVOID_FERRY), SHARE( R.string.share, new ImageResources(R.drawable.ic_share), ButtonType.SHARE), // Must not be used outside MORE( R.string.placepage_more_button, new ImageResources(R.drawable.bs_ic_more), ButtonType.MORE), CALL( R.string.placepage_call_button, new ImageResources(R.drawable.ic_place_page_phone), ButtonType.CALL); @StringRes private final int mTitleId; @NonNull private final ImageResources mIconId; @NonNull private final ButtonType mButtonType; Item(@StringRes int titleId, @NonNull ImageResources iconId, @NonNull ButtonType buttonType) { mTitleId = titleId; mIconId = iconId; mButtonType = buttonType; } @StringRes @Override public int getTitle() { return mTitleId; } @NonNull @Override public ImageResources getIcon() { return mIconId; } @NonNull @Override public ButtonType getType() { return mButtonType; } @DrawableRes @Override public int getBackgroundResource() { throw new UnsupportedOperationException("Not supported!"); } } interface ItemListener { void onPrepareVisibleView(@NonNull PlacePageButton item, @NonNull View frame, @NonNull ImageView icon, @NonNull TextView title); void onItemClick(PlacePageButton item); } PlacePageButtons(PlacePageView placePage, ViewGroup frame, ItemListener itemListener) { mPlacePage = placePage; mFrame = frame; mItemListener = itemListener; mMaxButtons = mPlacePage.getContext().getResources().getInteger(R.integer.pp_buttons_max); } @NonNull static PlacePageButtons.PlacePageButton getPartnerItem(int partnerIndex) { PlacePageButtons.PlacePageButton item = PARTNERS_ITEMS.get(partnerIndex); if (item == null) throw new AssertionError("Wrong partner index: " + partnerIndex); return item; } private @NonNull List<PlacePageButtons.PlacePageButton> collectButtons(List<PlacePageButtons.PlacePageButton> items) { List<PlacePageButtons.PlacePageButton> res = new ArrayList<>(items); if (res.size() > mMaxButtons) res.add(mMaxButtons - 1, Item.MORE); // Swap ROUTE_FROM and ROUTE_TO if the latter one was pressed out to bottomsheet int from = res.indexOf(Item.ROUTE_FROM); if (from > -1) { int addStop = res.indexOf(Item.ROUTE_ADD); int to = res.indexOf(Item.ROUTE_TO); if ((to > from && to >= mMaxButtons) || (to > from && addStop >= mMaxButtons)) Collections.swap(res, from, to); if (addStop >= mMaxButtons) { from = res.indexOf(Item.ROUTE_FROM); if (addStop > from) Collections.swap(res, from, addStop); } preserveRoutingButtons(res, Item.CALL); preserveRoutingButtons(res, Item.BOOKING); preserveRoutingButtons(res, Item.BOOKING_SEARCH); from = res.indexOf(Item.ROUTE_FROM); to = res.indexOf(Item.ROUTE_TO); if (from < mMaxButtons && from > to) Collections.swap(res, to, from); } return res; } private void preserveRoutingButtons(@NonNull List<PlacePageButton> items, @NonNull Item itemToShift) { if (!RoutingController.get().isNavigating() && !RoutingController.get().isPlanning()) return; int pos = items.indexOf(itemToShift); if (pos > -1) { items.remove(pos); items.add(mMaxButtons, itemToShift); int to = items.indexOf(Item.ROUTE_TO); if (items.indexOf(Item.ROUTE_ADD) > -1) { items.remove(Item.ROUTE_ADD); items.remove(Item.ROUTE_FROM); items.add(to + 1, Item.ROUTE_ADD); items.add(mMaxButtons, Item.ROUTE_FROM); } else { items.remove(Item.ROUTE_FROM); items.add(to + 1, Item.ROUTE_FROM); } } } private void showPopup(final List<PlacePageButton> buttons) { BottomSheetHelper.Builder bs = new BottomSheetHelper.Builder(mPlacePage.getActivity()); for (int i = mMaxButtons; i < buttons.size(); i++) { PlacePageButton bsItem = buttons.get(i); int iconRes = bsItem.getIcon().getEnabledStateResId(mPlacePage.getContext()); bs.sheet(i, iconRes, bsItem.getTitle()); } BottomSheet bottomSheet = bs.listener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { mItemListener.onItemClick(buttons.get(item.getItemId())); return true; } }).build(); BottomSheetHelper.tint(bottomSheet); bottomSheet.show(); } private View createButton(@NonNull final List<PlacePageButton> items, @NonNull final PlacePageButton current) { Context context = mPlacePage.getContext(); LayoutInflater inflater = LayoutInflater.from(context); View parent = inflater.inflate(R.layout.place_page_button, mFrame, false); ImageView icon = (ImageView) parent.findViewById(R.id.icon); TextView title = (TextView) parent.findViewById(R.id.title); title.setText(current.getTitle()); icon.setImageResource(current.getIcon().getEnabledStateResId(context)); mItemListener.onPrepareVisibleView(current, parent, icon, title); parent.setOnClickListener(new ShowPopupClickListener(current, items)); return parent; } void setItems(List<PlacePageButton> items) { final List<PlacePageButton> buttons = collectButtons(items); if (buttons.equals(mPrevItems)) return; mFrame.removeAllViews(); int count = Math.min(buttons.size(), mMaxButtons); for (int i = 0; i < count; i++) mFrame.addView(createButton(buttons, buttons.get(i))); mPrevItems = buttons; } private class ShowPopupClickListener implements View.OnClickListener { @NonNull private final PlacePageButton mCurrent; @NonNull private final List<PlacePageButton> mItems; public ShowPopupClickListener(@NonNull PlacePageButton current, @NonNull List<PlacePageButton> items) { mCurrent = current; mItems = items; } @Override public void onClick(View v) { if (mCurrent == Item.MORE) showPopup(mItems); else mItemListener.onItemClick(mCurrent); } } }