From d5d104dd2625e9fbc2d936ea65b90c3fc3cb74b4 Mon Sep 17 00:00:00 2001 From: GaidamakUA Date: Mon, 11 Apr 2016 18:23:37 +0300 Subject: [PATCH] Map mode icon now shown at top. --- OsmAnd/res/layout/map_hud_bottom.xml | 8 - .../src/net/londatiga/android/ActionItem.java | 131 -------- .../londatiga/android/CustomPopupWindow.java | 219 ------------- .../net/londatiga/android/QuickAction.java | 290 ------------------ .../osmand/plus/views/MapControlsLayer.java | 46 +-- 5 files changed, 2 insertions(+), 692 deletions(-) delete mode 100644 OsmAnd/src/net/londatiga/android/ActionItem.java delete mode 100644 OsmAnd/src/net/londatiga/android/CustomPopupWindow.java delete mode 100644 OsmAnd/src/net/londatiga/android/QuickAction.java diff --git a/OsmAnd/res/layout/map_hud_bottom.xml b/OsmAnd/res/layout/map_hud_bottom.xml index 3f858d0ad2..e6e65f2906 100644 --- a/OsmAnd/res/layout/map_hud_bottom.xml +++ b/OsmAnd/res/layout/map_hud_bottom.xml @@ -45,14 +45,6 @@ android:layout_marginLeft="@dimen/map_button_shadow_margin" android:background="@drawable/btn_round_trans"> - - anchor.getTop()) { - yPos = anchorRect.bottom + yOffset; - - window.setAnimationStyle(R.style.Animations_PopDownMenu_Center); - } - - window.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos); - } - - public void dismiss() { - window.dismiss(); - } -} \ No newline at end of file diff --git a/OsmAnd/src/net/londatiga/android/QuickAction.java b/OsmAnd/src/net/londatiga/android/QuickAction.java deleted file mode 100644 index 0bd93123b5..0000000000 --- a/OsmAnd/src/net/londatiga/android/QuickAction.java +++ /dev/null @@ -1,290 +0,0 @@ -/** - * Lorensius W. L. T - * - * http://www.londatiga.net - * - * lorenz@londatiga.net - */ -package net.londatiga.android; - -import java.util.ArrayList; - -import net.osmand.plus.R; -import android.content.Context; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.view.animation.Interpolator; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -/** - * Popup window, shows action list as icon and text (QuickContact / Twitter app). - * - * @author Lorensius. W. T - */ -public class QuickAction extends CustomPopupWindow { - private final View root; - private final ImageView mArrowUp; - private final ImageView mArrowDown; - private final Animation mTrackAnim; - private final LayoutInflater inflater; - private final Context context; - - public static final int ANIM_GROW_FROM_LEFT = 1; - public static final int ANIM_GROW_FROM_RIGHT = 2; - public static final int ANIM_GROW_FROM_CENTER = 3; - public static final int ANIM_AUTO = 4; - - private int animStyle; - private boolean animateTrack; - private ViewGroup mTrack; - private ArrayList actionList; - private boolean onTop; - - /** - * Constructor - * - * @param anchor {@link View} on where the popup should be displayed - */ - public QuickAction(View anchor) { - super(anchor); - - actionList = new ArrayList(); - context = anchor.getContext(); - inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - - root = (ViewGroup) inflater.inflate(R.layout.quickaction, null); - - mArrowDown = (ImageView) root.findViewById(R.id.arrow_down); - mArrowUp = (ImageView) root.findViewById(R.id.arrow_up); - - setContentView(root); - - mTrackAnim = AnimationUtils.loadAnimation(anchor.getContext(), R.anim.rail); - - mTrackAnim.setInterpolator(new Interpolator() { - @Override - public float getInterpolation(float t) { - // Pushes past the target area, then snaps back into place. - // Equation for graphing: 1.2-((x*1.6)-1.1)^2 - final float inner = (t * 1.55f) - 1.1f; - - return 1.2f - inner * inner; - } - }); - - mTrack = (ViewGroup) root.findViewById(R.id.tracks); - animStyle = ANIM_AUTO; - animateTrack = true; - } - - public void setOnAnchorOnTop(boolean top) { - this.onTop = top; - - } - - /** - * Animate track - * - * @param animateTrack flag to animate track - */ - public void animateTrack(boolean animateTrack) { - this.animateTrack = animateTrack; - } - - /** - * Set animation style - * - * @param animStyle animation style, default is set to ANIM_AUTO - */ - public void setAnimStyle(int animStyle) { - this.animStyle = animStyle; - } - - /** - * Add action item - * - * @param action {@link ActionItem} - */ - public void addActionItem(ActionItem action) { - actionList.add(action); - } - - /** - * Add action item - * - * @param action {@link ActionItem} - */ - public void addActionItem(ActionItem action, int pos) { - actionList.add(pos, action); - } - - /** - * Show popup window - */ - public void show () { - preShow(); - - int[] location = new int[2]; - - anchor.getLocationOnScreen(location); - - Rect anchorRect = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] - + anchor.getHeight()); - - root.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); - root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - - int rootWidth = root.getMeasuredWidth(); - int rootHeight = root.getMeasuredHeight(); - - int screenWidth = windowManager.getDefaultDisplay().getWidth(); - //int screenHeight = windowManager.getDefaultDisplay().getHeight(); - - int xPos = (screenWidth - rootWidth) / 2; - int yPos = anchorRect.top - rootHeight; - - boolean onTop = true; - - // display on bottom - if (rootHeight > anchor.getTop() && !this.onTop) { - yPos = anchorRect.bottom; - onTop = false; - } - - showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), anchorRect.centerX()); - - setAnimationStyle(screenWidth, anchorRect.centerX(), onTop); - - createActionList(); - - window.showAtLocation(this.anchor, Gravity.NO_GRAVITY, xPos, yPos); - - if (animateTrack) mTrack.startAnimation(mTrackAnim); - } - - /** - * Set animation style - * - * @param screenWidth Screen width - * @param requestedX distance from left screen - * @param onTop flag to indicate where the popup should be displayed. Set TRUE if displayed on top of anchor and vice versa - */ - private void setAnimationStyle(int screenWidth, int requestedX, boolean onTop) { - int arrowPos = requestedX - mArrowUp.getMeasuredWidth()/2; - - switch (animStyle) { - case ANIM_GROW_FROM_LEFT: - window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left); - break; - - case ANIM_GROW_FROM_RIGHT: - window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right : R.style.Animations_PopDownMenu_Right); - break; - - case ANIM_GROW_FROM_CENTER: - window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center); - break; - - case ANIM_AUTO: - if (arrowPos <= screenWidth/4) { - window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left); - } else if (arrowPos > screenWidth/4 && arrowPos < 3 * (screenWidth/4)) { - window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center); - } else { - window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right : R.style.Animations_PopDownMenu_Right); - } - - break; - } - } - - /** - * Create action list - * - */ - private void createActionList() { - View view; - String title; - Drawable icon; - OnClickListener listener; - int index = 1; - - for (int i = 0; i < actionList.size(); i++) { - title = actionList.get(i).getTitle(); - icon = actionList.get(i).getIcon(); - listener = actionList.get(i).getListener(); - - view = getActionItem(title, icon, listener); - - view.setFocusable(true); - view.setClickable(true); - - mTrack.addView(view, index); - - index++; - } - } - - /** - * Get action item {@link View} - * - * @param title action item title - * @param icon {@link Drawable} action item icon - * @param listener {@link View.OnClickListener} action item listener - * @return action item {@link View} - */ - private View getActionItem(String title, Drawable icon, OnClickListener listener) { - LinearLayout container = (LinearLayout) inflater.inflate(R.layout.action_item, null); - ImageView img = (ImageView) container.findViewById(R.id.icon); - TextView text = (TextView) container.findViewById(R.id.title); - - if (icon != null) { - img.setImageDrawable(icon); - } else { - img.setVisibility(View.GONE); - } - - if (title != null) { - text.setText(title); - } else { - text.setVisibility(View.GONE); - } - - if (listener != null) { - container.setOnClickListener(listener); - } - - return container; - } - - /** - * Show arrow - * - * @param whichArrow arrow type resource id - * @param requestedX distance from left screen - */ - private void showArrow(int whichArrow, int requestedX) { - final View showArrow = (whichArrow == R.id.arrow_up) ? mArrowUp : mArrowDown; - final View hideArrow = (whichArrow == R.id.arrow_up) ? mArrowDown : mArrowUp; - - final int arrowWidth = mArrowUp.getMeasuredWidth(); - - showArrow.setVisibility(View.VISIBLE); - - ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams)showArrow.getLayoutParams(); - - param.leftMargin = requestedX - arrowWidth / 2; - - hideArrow.setVisibility(View.INVISIBLE); - } -} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index bc6f3a7440..606f152faa 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -23,13 +23,10 @@ import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; -import net.londatiga.android.ActionItem; -import net.londatiga.android.QuickAction; import net.osmand.AndroidUtils; import net.osmand.core.android.MapRendererContext; import net.osmand.data.LatLon; import net.osmand.data.RotatedTileBox; -import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmAndLocationProvider; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; @@ -348,14 +345,7 @@ public class MapControlsLayer extends OsmandMapLayer { } }); mapAppModeShadow = mapActivity.findViewById(R.id.map_app_mode_shadow); - mapAppModeShadow.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - onApplicationModePress(v); - } - }); - appModeIcon = (ImageView) mapActivity.findViewById(R.id.map_app_mode_icon); + appModeIcon = (ImageView) mapActivity.findViewById(R.id.map_layers_button); zoomText = (TextView) mapActivity.findViewById(R.id.map_app_mode_text); View routePlanButton = mapActivity.findViewById(R.id.map_route_info_button); @@ -548,12 +538,9 @@ public class MapControlsLayer extends OsmandMapLayer { //if (!mapView.isZooming() || !OsmandPlugin.isDevelopment()) { if ((System.currentTimeMillis() - lastZoom > 1000) || !OsmandPlugin.isDevelopment()) { zoomText.setVisibility(View.GONE); - appModeIcon.setVisibility(View.VISIBLE); - appModeIcon.setImageDrawable( - app.getIconsCache().getIcon( + appModeIcon.setImageDrawable(app.getIconsCache().getIcon( settings.getApplicationMode().getSmallIconDark(), !isNight)); } else { - appModeIcon.setVisibility(View.GONE); zoomText.setVisibility(View.VISIBLE); zoomText.setTextColor(textColor); zoomText.setText(getZoomLevel(tileBox)); @@ -840,35 +827,6 @@ public class MapControlsLayer extends OsmandMapLayer { } - private void onApplicationModePress(View v) { - final QuickAction mQuickAction = new QuickAction(v); - mQuickAction.setOnAnchorOnTop(true); - List vls = ApplicationMode.values(mapActivity.getMyApplication().getSettings()); - final ApplicationMode[] modes = vls.toArray(new ApplicationMode[vls.size()]); - Drawable[] icons = new Drawable[vls.size()]; - int[] values = new int[vls.size()]; - for (int k = 0; k < modes.length; k++) { - icons[k] = app.getIconsCache().getIcon(modes[k].getSmallIconDark(), R.color.icon_color); - values[k] = modes[k].getStringResource(); - } - for (int i = 0; i < modes.length; i++) { - final ActionItem action = new ActionItem(); - action.setTitle(mapActivity.getResources().getString(values[i])); - action.setIcon(icons[i]); - final int j = i; - action.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - mapActivity.getMyApplication().getSettings().APPLICATION_MODE.set(modes[j]); - mQuickAction.dismiss(); - } - }); - mQuickAction.addActionItem(action); - } - mQuickAction.setAnimStyle(QuickAction.ANIM_AUTO); - mQuickAction.show(); - } - private String getZoomLevel(@NonNull RotatedTileBox tb) { String zoomText = tb.getZoom() + ""; double frac = tb.getMapDensity();