summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java
blob: 74605ad6dd77a53b07150ccdf5a4edbc05868801 (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
package com.mapbox.mapboxsdk.testapp.activity.maplayout;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
import com.mapbox.mapboxsdk.offline.OfflineManager;
import com.mapbox.mapboxsdk.offline.OfflineRegion;
import com.mapbox.mapboxsdk.offline.OfflineRegionError;
import com.mapbox.mapboxsdk.offline.OfflineRegionStatus;
import com.mapbox.mapboxsdk.offline.OfflineTilePyramidRegionDefinition;
import com.mapbox.mapboxsdk.testapp.utils.OfflineUtils;
import timber.log.Timber;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;

/**
 * Test activity showcasing a simple MapView without any MapboxMap interaction.
 */
public class SimpleMapActivity extends AppCompatActivity implements OfflineManager.CreateOfflineRegionCallback {

  private long timestamp;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int densityDpi = getResources().getDisplayMetrics().densityDpi;

    LatLng southWest = new LatLng(64.149385, -22.036754);
    LatLng northEast = new LatLng(64.156640, -22.020452);
    LatLngBounds latLngBounds = new LatLngBounds.Builder().include(southWest).include(northEast).build();
    OfflineTilePyramidRegionDefinition definition = new OfflineTilePyramidRegionDefinition(Style.MAPBOX_STREETS, latLngBounds, 17, 18, densityDpi);

    long time = Calendar.getInstance().getTimeInMillis();
    byte[] regionName = OfflineUtils.convertRegionName("test " + getDateCurrentTimeZone(time));
    OfflineManager.getInstance(this).createOfflineRegion(definition, regionName, this);
  }

  @Override
  public void onCreate(OfflineRegion offlineRegion) {
    Timber.e("OfflineRegion created: start your engines!");
    offlineRegion.setObserver(new OfflineRegion.OfflineRegionObserver() {
      @Override
      public void onStatusChanged(OfflineRegionStatus status) {
        // Compute a percentage
        double percentage = status.getRequiredResourceCount() >= 0
          ? (100.0 * status.getCompletedResourceCount() / status.getRequiredResourceCount()) :
          0.0;

        // Debug
        Timber.d("%s/%s resources; %s bytes downloaded.",
          String.valueOf(status.getCompletedResourceCount()),
          String.valueOf(status.getRequiredResourceCount()),
          String.valueOf(status.getCompletedResourceSize()));

        if (status.isComplete()) {
          // Download complete
          Timber.e("Region downloaded");
          offlineRegion.setDownloadState(OfflineRegion.STATE_INACTIVE);
          offlineRegion.setObserver(null);
          long endTime = System.nanoTime();
          long duration = (endTime - timestamp) / 1000000;
          long minutes = TimeUnit.MILLISECONDS.toMinutes(duration);
          long seconds = TimeUnit.MILLISECONDS.toSeconds(duration);
          Timber.e("Time to complete was %s:%s", minutes, seconds);
        }
      }

      @Override
      public void onError(OfflineRegionError error) {

      }

      @Override
      public void mapboxTileCountLimitExceeded(long limit) {

      }
    });

    timestamp = System.nanoTime();
    offlineRegion.setDownloadState(OfflineRegion.STATE_ACTIVE);
  }

  @Override
  public void onError(String error) {
    Timber.e("OnError %s", error);
  }

  public String getDateCurrentTimeZone(long timestamp) {
    Calendar calendar = Calendar.getInstance();
    TimeZone tz = TimeZone.getDefault();
    calendar.setTimeInMillis(timestamp * 1000);
    calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis()));
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
    Date currenTimeZone = calendar.getTime();
    return sdf.format(currenTimeZone);
  }
}