1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
package com.mapswithme.maps.tips;
import android.annotation.TargetApi;
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.os.Build;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import com.mapswithme.util.Utils;
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptBackground;
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptOptions;
import uk.co.samuelwall.materialtaptargetprompt.extras.PromptUtils;
public class ImmersiveModeCompatPromptBackground extends PromptBackground
{
@NonNull
private final WindowManager mWindowManager;
@NonNull
private final RectF mBounds;
@NonNull
private final RectF mBaseBounds;
@NonNull
private final Paint mPaint;
private int mBaseColourAlpha;
@NonNull
private final PointF mFocalCentre;
@NonNull
private final DisplayMetrics mBaseMetrics;
ImmersiveModeCompatPromptBackground(@NonNull WindowManager windowManager)
{
mWindowManager = windowManager;
mPaint = new Paint();
mPaint.setAntiAlias(true);
mBounds = new RectF();
mBaseBounds = new RectF();
mFocalCentre = new PointF();
mBaseMetrics = new DisplayMetrics();
}
@Override
public void setColour(@ColorInt int colour)
{
mPaint.setColor(colour);
mBaseColourAlpha = Color.alpha(colour);
mPaint.setAlpha(mBaseColourAlpha);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void prepare(@NonNull final PromptOptions options, final boolean clipToBounds,
@NonNull Rect clipBounds)
{
final RectF focalBounds = options.getPromptFocal().getBounds();
initDisplayMetrics();
mBaseBounds.set(0, 0, mBaseMetrics.widthPixels, mBaseMetrics.heightPixels);
mFocalCentre.x = focalBounds.centerX();
mFocalCentre.y = focalBounds.centerY();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void initDisplayMetrics()
{
if (Utils.isJellyBeanOrLater())
mWindowManager.getDefaultDisplay().getRealMetrics(mBaseMetrics);
else
mWindowManager.getDefaultDisplay().getMetrics(mBaseMetrics);
}
@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);
}
}
|