diff --git a/android/res/layout/map.xml b/android/res/layout/map.xml
index c681a8d3bf..f82d2c7b4e 100644
--- a/android/res/layout/map.xml
+++ b/android/res/layout/map.xml
@@ -30,18 +30,24 @@
android:layout_height="match_parent"
android:layout_below="@id/search_box"/>
-
+
+
+
+
-
-
-
-
-
-
+ android:layout_alignParentBottom="true"/>
\ 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 912aa347ea..3f8bd71c53 100644
--- a/android/src/com/mapswithme/maps/MWMActivity.java
+++ b/android/src/com/mapswithme/maps/MWMActivity.java
@@ -23,6 +23,8 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
@@ -99,8 +101,12 @@ public class MWMActivity extends NvEventQueueActivity
// Initialized to invalid combination to force update on the first check
private boolean mStorageAvailable = false;
private boolean mStorageWritable = true;
+ // toolbars
+ private static final long VERT_TOOLBAR_ANIM_DURATION = 250;
private ViewGroup mVerticalToolbar;
private ViewGroup mToolbar;
+ private Animation mVerticalToolbarAnimation;
+ private View mFadeView;
private static final String IS_KML_MOVED = "KmlBeenMoved";
private static final String IS_KITKAT_MIGRATION_COMPLETED = "KitKatMigrationCompleted";
@@ -620,8 +626,67 @@ public class MWMActivity extends NvEventQueueActivity
public void onMoreClicked(View v)
{
- UiUtils.show(mVerticalToolbar);
- UiUtils.hide(mToolbar);
+ setVerticalToolbarVisible(true);
+ }
+
+ private void setVerticalToolbarVisible(boolean showVerticalToolbar)
+ {
+ if (mVerticalToolbarAnimation != null ||
+ (mVerticalToolbar.getVisibility() == View.VISIBLE && showVerticalToolbar) ||
+ (mVerticalToolbar.getVisibility() != View.VISIBLE && !showVerticalToolbar))
+ return;
+
+ int fromY, toY;
+ Animation.AnimationListener listener;
+ float fromAlpha, toAlpha;
+ if (showVerticalToolbar)
+ {
+ fromY = 1;
+ toY = 0;
+ fromAlpha = 0.0f;
+ toAlpha = 0.5f;
+ listener = new UiUtils.SimpleAnimationListener()
+ {
+ @Override
+ public void onAnimationStart(Animation animation)
+ {
+ mVerticalToolbar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation)
+ {
+ mVerticalToolbarAnimation = null;
+ }
+ };
+ }
+ else
+ {
+ fromY = 0;
+ toY = 1;
+ fromAlpha = 0.5f;
+ toAlpha = 0.0f;
+ listener = new UiUtils.SimpleAnimationListener()
+ {
+ @Override
+ public void onAnimationEnd(Animation animation)
+ {
+ mVerticalToolbar.setVisibility(View.INVISIBLE);
+ mVerticalToolbarAnimation = null;
+ }
+ };
+ }
+ // slide vertical toolbar
+ mVerticalToolbarAnimation = UiUtils.generateSlideAnimation(0, 0, fromY, toY);
+ mVerticalToolbarAnimation.setDuration(VERT_TOOLBAR_ANIM_DURATION);
+ mVerticalToolbarAnimation.setAnimationListener(listener);
+ mVerticalToolbar.startAnimation(mVerticalToolbarAnimation);
+ // fade map
+ Animation alphaAnimation = new AlphaAnimation(fromAlpha, toAlpha);
+ alphaAnimation.setFillBefore(true);
+ alphaAnimation.setFillAfter(true);
+ alphaAnimation.setDuration(VERT_TOOLBAR_ANIM_DURATION);
+ mFadeView.startAnimation(alphaAnimation);
}
private void shareMyLocation()
@@ -759,15 +824,19 @@ public class MWMActivity extends NvEventQueueActivity
mVerticalToolbar.findViewById(R.id.btn_settings).setOnClickListener(this);
View moreApps = mVerticalToolbar.findViewById(R.id.btn_more_apps);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB || Framework.getGuideIds().length == 0)
- {
UiUtils.hide(moreApps);
- }
else
- {
moreApps.setOnClickListener(this);
- }
- UiUtils.hide(mVerticalToolbar);
+ UiUtils.invisible(mVerticalToolbar);
+
+ // hacky way to implement alpha at pre-honeycomb SDK.
+ mFadeView = findViewById(R.id.fade_view);
+ Animation alphaAnimation = new AlphaAnimation(0.0f, 0.0f);
+ alphaAnimation.setFillAfter(true);
+ alphaAnimation.setDuration(0);
+ mFadeView.startAnimation(alphaAnimation);
+ mFadeView.setVisibility(View.VISIBLE);
}
private void setUpInfoBox()
@@ -1127,10 +1196,7 @@ public class MWMActivity extends NvEventQueueActivity
deactivatePopup();
}
else if (mVerticalToolbar.getVisibility() == View.VISIBLE)
- {
- UiUtils.show(mToolbar);
- UiUtils.hide(mVerticalToolbar);
- }
+ setVerticalToolbarVisible(false);
else
super.onBackPressed();
}
@@ -1283,13 +1349,13 @@ public class MWMActivity extends NvEventQueueActivity
@Override
public void onPreviewVisibilityChanged(boolean isVisible)
{
- UiUtils.hide(mVerticalToolbar);
+ setVerticalToolbarVisible(false);
}
@Override
public void onPlacePageVisibilityChanged(boolean isVisible)
{
- UiUtils.hide(mVerticalToolbar);
+ setVerticalToolbarVisible(false);
}
@Override
@@ -1298,28 +1364,23 @@ public class MWMActivity extends NvEventQueueActivity
switch (v.getId())
{
case R.id.btn_buy_pro:
- UiUtils.hide(mVerticalToolbar);
- UiUtils.show(mToolbar);
+ setVerticalToolbarVisible(false);
UiUtils.runProMarketActivity(MWMActivity.this);
break;
case R.id.btn_share:
- UiUtils.hide(mVerticalToolbar);
- UiUtils.show(mToolbar);
+ setVerticalToolbarVisible(false);
shareMyLocation();
break;
case R.id.btn_settings:
- UiUtils.hide(mVerticalToolbar);
- UiUtils.show(mToolbar);
+ setVerticalToolbarVisible(false);
startActivity(new Intent(this, SettingsActivity.class));
break;
case R.id.btn_download_maps:
- UiUtils.hide(mVerticalToolbar);
- UiUtils.show(mToolbar);
+ setVerticalToolbarVisible(false);
runDownloadActivity();
break;
case R.id.btn_more_apps:
- UiUtils.hide(mVerticalToolbar);
- UiUtils.show(mToolbar);
+ setVerticalToolbarVisible(false);
startActivity(new Intent(this, MoreAppsActivity.class));
break;
default:
@@ -1330,8 +1391,12 @@ public class MWMActivity extends NvEventQueueActivity
@Override
public boolean onTouch(View view, MotionEvent event)
{
- UiUtils.hide(mVerticalToolbar);
- UiUtils.show(mToolbar);
+ // if vertical toolbar is visible - hide it and ignore touch
+ if (mVerticalToolbar.getVisibility() == View.VISIBLE)
+ {
+ setVerticalToolbarVisible(false);
+ return true;
+ }
if (mInfoView.getState() == State.FULL_PLACEPAGE)
{
deactivatePopup();
diff --git a/android/src/com/mapswithme/maps/widget/MapInfoView.java b/android/src/com/mapswithme/maps/widget/MapInfoView.java
index 7e5204e2da..9f7eeafbae 100644
--- a/android/src/com/mapswithme/maps/widget/MapInfoView.java
+++ b/android/src/com/mapswithme/maps/widget/MapInfoView.java
@@ -258,7 +258,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
TranslateAnimation slide;
if (show) // slide up
{
- slide = generateSlideAnimation(0, 0, -1, 0);
+ slide = UiUtils.generateSlideAnimation(0, 0, -1, 0);
slide.setDuration(SHORT_ANIM_DURATION);
UiUtils.show(mPlacePageGroup);
UiUtils.hide(mArrow);
@@ -267,7 +267,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
}
else // slide down
{
- slide = generateSlideAnimation(0, 0, 0, -1);
+ slide = UiUtils.generateSlideAnimation(0, 0, 0, -1);
slide.setDuration(SHORT_ANIM_DURATION);
slide.setFillEnabled(true);
@@ -298,7 +298,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
TranslateAnimation slide;
if (show)
{
- slide = generateSlideAnimation(0, 0, -1, 0);
+ slide = UiUtils.generateSlideAnimation(0, 0, -1, 0);
UiUtils.show(mPreviewGroup);
slide.setAnimationListener(new SimpleAnimationListener()
{
@@ -312,7 +312,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
}
else
{
- slide = generateSlideAnimation(0, 0, 0, -1);
+ slide = UiUtils.generateSlideAnimation(0, 0, 0, -1);
slide.setAnimationListener(new SimpleAnimationListener()
{
@Override
@@ -332,7 +332,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
private void hideEverything()
{
- final TranslateAnimation slideDown = generateSlideAnimation(0, 0, 0, -1);
+ final TranslateAnimation slideDown = UiUtils.generateSlideAnimation(0, 0, 0, -1);
slideDown.setDuration(LONG_ANIM_DURATION);
slideDown.setAnimationListener(new SimpleAnimationListener()
@@ -760,15 +760,6 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
.drawCircleForPin(to, (int) getResources().getDimension(R.dimen.color_chooser_radius), getResources()));
}
- private TranslateAnimation generateSlideAnimation(float fromX, float toX, float fromY, float toY)
- {
- return new TranslateAnimation(
- Animation.RELATIVE_TO_SELF, fromX,
- Animation.RELATIVE_TO_SELF, toX,
- Animation.RELATIVE_TO_SELF, fromY,
- Animation.RELATIVE_TO_SELF, toY);
- }
-
@Override
public void onClick(View v)
{
diff --git a/android/src/com/mapswithme/util/UiUtils.java b/android/src/com/mapswithme/util/UiUtils.java
index 74cd8b9530..6fb352dfbd 100644
--- a/android/src/com/mapswithme/util/UiUtils.java
+++ b/android/src/com/mapswithme/util/UiUtils.java
@@ -21,6 +21,7 @@ import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
+import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
@@ -103,6 +104,15 @@ public final class UiUtils
target.startAnimation(anim);
}
+ public static TranslateAnimation generateSlideAnimation(float fromX, float toX, float fromY, float toY)
+ {
+ return new TranslateAnimation(
+ Animation.RELATIVE_TO_SELF, fromX,
+ Animation.RELATIVE_TO_SELF, toX,
+ Animation.RELATIVE_TO_SELF, fromY,
+ Animation.RELATIVE_TO_SELF, toY);
+ }
+
public static Drawable setCompoundDrawableBounds(int drawableId, int dimenId, Resources res)
{
return setCompoundDrawableBounds(res.getDrawable(drawableId), dimenId, res);
@@ -349,7 +359,6 @@ public final class UiUtils
return "hdpi";
}
-
// utility class
private UiUtils()
{}