Welcome to mirror list, hosted at ThFree Co, Russian Federation.

MyPositionButton.java « menu « widget « maps « mapswithme « com « src « android - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1145daced108e7b817e8aa9c4c0497fde39ce53c (plain)
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
98
99
100
101
102
103
104
105
106
107
package com.mapswithme.maps.widget.menu;

import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;

import androidx.annotation.NonNull;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;

import com.mapswithme.maps.R;
import com.mapswithme.maps.location.LocationState;
import com.mapswithme.maps.routing.RoutingController;
import com.mapswithme.util.Graphics;
import com.mapswithme.util.ThemeUtils;
import com.mapswithme.util.UiUtils;

public class MyPositionButton
{
  private static final int FOLLOW_SHIFT = 1;

  @NonNull
  private final ImageView mButton;
  private static final SparseArray<Drawable> mIcons = new SparseArray<>(); // Location mode -> Button icon

  private int mMode;
  private boolean mVisible;

  private final int mFollowPaddingShift;

  public MyPositionButton(@NonNull View button, @NonNull View.OnClickListener listener)
  {
    mButton = (ImageView) button;
    mVisible = UiUtils.isVisible(mButton);
    mButton.setOnClickListener(listener);
    mIcons.clear();
    mFollowPaddingShift = (int) (FOLLOW_SHIFT * button.getResources().getDisplayMetrics().density);
  }

  @SuppressWarnings("deprecation")
  public void update(int mode)
  {
    mMode = mode;
    Drawable image = mIcons.get(mode);
    if (image == null)
    {
      switch (mode)
      {
        case LocationState.PENDING_POSITION:
          image = mButton.getResources()
                         .getDrawable(ThemeUtils.getResource(mButton.getContext(), R.attr.myPositionButtonAnimation));
          break;

        case LocationState.NOT_FOLLOW_NO_POSITION:
        case LocationState.NOT_FOLLOW:
          image = Graphics.tint(mButton.getContext(), R.drawable.ic_not_follow);
          break;

        case LocationState.FOLLOW:
          image = Graphics.tint(mButton.getContext(), R.drawable.ic_follow, R.attr.colorAccent);
          break;

        case LocationState.FOLLOW_AND_ROTATE:
          image = Graphics.tint(mButton.getContext(), R.drawable.ic_follow_and_rotate, R.attr.colorAccent);
          break;

        default:
          throw new IllegalArgumentException("Invalid button mode: " + mode);
      }

      mIcons.put(mode, image);
    }

    mButton.setImageDrawable(image);
    updatePadding(mode);

    if (image instanceof AnimationDrawable)
      ((AnimationDrawable) image).start();

    UiUtils.visibleIf(!shouldBeHidden(), mButton);
  }

  private void updatePadding(int mode)
  {
    if (mode == LocationState.FOLLOW)
      mButton.setPadding(0, mFollowPaddingShift, mFollowPaddingShift, 0);
    else
      mButton.setPadding(0, 0, 0, 0);
  }

  private boolean shouldBeHidden()
  {
    return (mMode == LocationState.FOLLOW_AND_ROTATE
            && (RoutingController.get().isPlanning()))
           || !mVisible;
  }

  public void show()
  {
    UiUtils.show(mButton);
  }

  public void hide()
  {
    UiUtils.hide(mButton);
  }
}