forked from organicmaps/organicmaps
[android] Immersive tips and tricks view
This commit is contained in:
parent
a94f7c7811
commit
08a680e75e
3 changed files with 109 additions and 11 deletions
|
@ -67,17 +67,16 @@ import com.mapswithme.maps.location.CompassData;
|
|||
import com.mapswithme.maps.location.LocationHelper;
|
||||
import com.mapswithme.maps.maplayer.MapLayerCompositeController;
|
||||
import com.mapswithme.maps.maplayer.Mode;
|
||||
import com.mapswithme.maps.metrics.UserActionsLogger;
|
||||
import com.mapswithme.maps.tips.TipsApi;
|
||||
import com.mapswithme.maps.maplayer.subway.OnSubwayLayerToggleListener;
|
||||
import com.mapswithme.maps.maplayer.subway.SubwayManager;
|
||||
import com.mapswithme.maps.maplayer.traffic.OnTrafficLayerToggleListener;
|
||||
import com.mapswithme.maps.maplayer.traffic.TrafficManager;
|
||||
import com.mapswithme.maps.maplayer.traffic.widget.TrafficButton;
|
||||
import com.mapswithme.maps.metrics.UserActionsLogger;
|
||||
import com.mapswithme.maps.purchase.AdsRemovalPurchaseCallback;
|
||||
import com.mapswithme.maps.purchase.PurchaseFactory;
|
||||
import com.mapswithme.maps.purchase.PurchaseController;
|
||||
import com.mapswithme.maps.purchase.AdsRemovalPurchaseControllerProvider;
|
||||
import com.mapswithme.maps.purchase.PurchaseController;
|
||||
import com.mapswithme.maps.purchase.PurchaseFactory;
|
||||
import com.mapswithme.maps.routing.NavigationController;
|
||||
import com.mapswithme.maps.routing.RoutePointInfo;
|
||||
import com.mapswithme.maps.routing.RoutingBottomMenuListener;
|
||||
|
@ -100,6 +99,7 @@ import com.mapswithme.maps.settings.UnitLocale;
|
|||
import com.mapswithme.maps.sound.TtsPlayer;
|
||||
import com.mapswithme.maps.taxi.TaxiInfo;
|
||||
import com.mapswithme.maps.taxi.TaxiManager;
|
||||
import com.mapswithme.maps.tips.TipsApi;
|
||||
import com.mapswithme.maps.widget.FadeView;
|
||||
import com.mapswithme.maps.widget.menu.BaseMenu;
|
||||
import com.mapswithme.maps.widget.menu.MainMenu;
|
||||
|
@ -125,6 +125,7 @@ import com.mapswithme.util.sharing.SharingHelper;
|
|||
import com.mapswithme.util.statistics.AlohaHelper;
|
||||
import com.mapswithme.util.statistics.PlacePageTracker;
|
||||
import com.mapswithme.util.statistics.Statistics;
|
||||
import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Locale;
|
||||
|
@ -240,6 +241,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
PurchaseFactory.createPurchaseController();
|
||||
@NonNull
|
||||
private final OnClickListener mOnMyPositionClickListener = new CurrentPositionClickListener();
|
||||
private MaterialTapTargetPrompt mTutorial;
|
||||
|
||||
public interface LeftAnimationTrackListener
|
||||
{
|
||||
|
@ -595,16 +597,19 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
initOnmapDownloader();
|
||||
initPositionChooser();
|
||||
initFilterViews();
|
||||
initTips();
|
||||
}
|
||||
|
||||
private void initTips()
|
||||
{
|
||||
if (mTutorial != null)
|
||||
return;
|
||||
|
||||
TipsApi api = TipsApi.requestCurrent(getClass());
|
||||
if (api == TipsApi.STUB)
|
||||
return;
|
||||
|
||||
api.showTutorial(getActivity());
|
||||
View contentView = findViewById(android.R.id.content);
|
||||
mTutorial = api.showTutorial(getActivity(), contentView.getHeight());
|
||||
}
|
||||
|
||||
private void initFilterViews()
|
||||
|
@ -644,6 +649,13 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWindowFocusChanged(boolean hasFocus)
|
||||
{
|
||||
super.onWindowFocusChanged(hasFocus);
|
||||
initTips();
|
||||
}
|
||||
|
||||
private void runSearch()
|
||||
{
|
||||
// The previous search should be cancelled before the new one is started, since previous search
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
package com.mapswithme.maps.tips;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptBackground;
|
||||
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptOptions;
|
||||
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptUtils;
|
||||
|
||||
/**
|
||||
* {@link PromptBackground} implementation that renders the prompt background as a rectangle.
|
||||
*/
|
||||
public class ImmersiveCompatPromptBackground extends PromptBackground
|
||||
{
|
||||
private RectF mBounds, mBaseBounds;
|
||||
private Paint mPaint;
|
||||
private int mBaseColourAlpha;
|
||||
private PointF mFocalCentre;
|
||||
int mHeight = 0;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public ImmersiveCompatPromptBackground()
|
||||
{
|
||||
mPaint = new Paint();
|
||||
mPaint.setAntiAlias(true);
|
||||
mBounds = new RectF();
|
||||
mBaseBounds = new RectF();
|
||||
mFocalCentre = new PointF();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColour(@ColorInt int colour)
|
||||
{
|
||||
mPaint.setColor(colour);
|
||||
mBaseColourAlpha = Color.alpha(colour);
|
||||
mPaint.setAlpha(mBaseColourAlpha);
|
||||
}
|
||||
|
||||
public void setHeight(int height)
|
||||
{
|
||||
mHeight = height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepare(@NonNull final PromptOptions options, final boolean clipToBounds, @NonNull Rect clipBounds)
|
||||
{
|
||||
final RectF focalBounds = options.getPromptFocal().getBounds();
|
||||
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
|
||||
|
||||
mBaseBounds.set(0, 0, metrics.widthPixels, mHeight == 0 ? metrics.heightPixels : mHeight);
|
||||
mFocalCentre.x = focalBounds.centerX();
|
||||
mFocalCentre.y = focalBounds.centerY();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(@NonNull final PromptOptions prompt, float revealModifier,
|
||||
float alphaModifier)
|
||||
{
|
||||
mPaint.setAlpha((int) (mBaseColourAlpha * alphaModifier));
|
||||
PromptUtils.scale(mFocalCentre, mBaseBounds, mBounds, revealModifier, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(@NonNull Canvas canvas)
|
||||
{
|
||||
canvas.drawRect(mBounds, mPaint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(float x, float y)
|
||||
{
|
||||
return mBounds.contains(x, y);
|
||||
}
|
||||
}
|
|
@ -18,7 +18,6 @@ import com.mapswithme.util.UiUtils;
|
|||
import com.mapswithme.util.log.Logger;
|
||||
import com.mapswithme.util.log.LoggerFactory;
|
||||
import uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt;
|
||||
import uk.co.samuelwall.materialtaptargetprompt.extras.backgrounds.FullscreenPromptBackground;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
@ -76,7 +75,7 @@ public enum TipsApi
|
|||
|
||||
STUB
|
||||
{
|
||||
public void showTutorial(@NonNull Activity activity)
|
||||
public MaterialTapTargetPrompt showTutorial(@NonNull Activity activity, int height)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported here!");
|
||||
}
|
||||
|
@ -123,8 +122,10 @@ public enum TipsApi
|
|||
return mAllowedScreens.contains(screenClass);
|
||||
}
|
||||
|
||||
public void showTutorial(@NonNull Activity activity)
|
||||
public MaterialTapTargetPrompt showTutorial(@NonNull Activity activity, int height)
|
||||
{
|
||||
ImmersiveCompatPromptBackground bg = new ImmersiveCompatPromptBackground();
|
||||
bg.setHeight(height);
|
||||
View target = activity.findViewById(mAnchorViewId);
|
||||
MaterialTapTargetPrompt.Builder builder = new MaterialTapTargetPrompt
|
||||
.Builder(activity)
|
||||
|
@ -140,9 +141,10 @@ public enum TipsApi
|
|||
.setSecondaryTextTypeface(Typeface.DEFAULT)
|
||||
.setBackgroundColour(ThemeUtils.getColor(activity, R.attr.tipsBgColor))
|
||||
.setFocalColour(activity.getResources().getColor(android.R.color.transparent))
|
||||
.setPromptBackground(new FullscreenPromptBackground())
|
||||
.setPromptBackground(bg)
|
||||
.setClipToView(null)
|
||||
.setPromptStateChangeListener((prompt, state) -> onPromptStateChanged(state));
|
||||
builder.show();
|
||||
return builder.show();
|
||||
}
|
||||
|
||||
private void onPromptStateChanged(int state)
|
||||
|
|
Loading…
Add table
Reference in a new issue