diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-02-16 16:16:47 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-02-24 17:54:20 +0200 |
commit | 465c949153a838bb3159204ab268eb551fbd2e6c (patch) | |
tree | 250922b879261580b1252a78b461218be9012bc0 /platform/android/MapboxGLAndroidSDKTestApp/src/main | |
parent | 7d9018093a61d327fa7ca1312845d2a00d928380 (diff) | |
download | qtlocation-mapboxgl-465c949153a838bb3159204ab268eb551fbd2e6c.tar.gz |
[android] jni high level binding refactor
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main')
5 files changed, 204 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 23372b49e3..9aeb0282b9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -329,6 +329,17 @@ android:value=".activity.FeatureOverviewActivity"/> </activity> <activity + android:name=".activity.offline.DeleteRegionActivity" + android:description="@string/description_offline_region_delete" + android:label="@string/activity_offline_region_delete"> + <meta-data + android:name="@string/category" + android:value="@string/category_offline"/> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity"/> + </activity> + <activity android:name=".activity.imagegenerator.SnapshotActivity" android:description="@string/description_snapshot" android:label="@string/activity_snapshot"> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DeleteRegionActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DeleteRegionActivity.java new file mode 100644 index 0000000000..220f46f4e8 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DeleteRegionActivity.java @@ -0,0 +1,168 @@ +package com.mapbox.mapboxsdk.testapp.activity.offline; + +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v7.app.AlertDialog; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.mapbox.mapboxsdk.offline.OfflineManager; +import com.mapbox.mapboxsdk.offline.OfflineRegion; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.OfflineUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Test activity showing integration of deleting an OfflineRegion. + */ +public class DeleteRegionActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { + + private OfflineRegionAdapter adapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_offline_region_delete); + + ListView listView = (ListView) findViewById(R.id.listView); + listView.setAdapter(adapter = new OfflineRegionAdapter(this)); + listView.setEmptyView(findViewById(android.R.id.empty)); + listView.setOnItemClickListener(this); + } + + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + final OfflineRegion region = adapter.getItem(position); + String metadata = OfflineUtils.convertRegionName(region.getMetadata()); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Delete region"); + + final TextView input = new TextView(this); + input.setText(metadata); + builder.setView(input); + + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + delete(region); + } + }); + builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + + builder.show(); + } + + private void delete(OfflineRegion region) { + region.delete(new OfflineRegion.OfflineRegionDeleteCallback() { + @Override + public void onDelete() { + Toast.makeText( + DeleteRegionActivity.this, + "Region deleted", + Toast.LENGTH_SHORT + ).show(); + loadOfflineRegions(); + } + + @Override + public void onError(String error) { + Toast.makeText( + DeleteRegionActivity.this, + "Region deletion failed with " + error, + Toast.LENGTH_LONG + ).show(); + } + }); + } + + @Override + protected void onStart() { + super.onStart(); + loadOfflineRegions(); + } + + private void loadOfflineRegions() { + OfflineManager.getInstance(this).listOfflineRegions(new OfflineManager.ListOfflineRegionsCallback() { + @Override + public void onList(OfflineRegion[] offlineRegions) { + if (offlineRegions != null && offlineRegions.length > 0) { + adapter.setOfflineRegions(Arrays.asList(offlineRegions)); + } + } + + @Override + public void onError(String error) { + Toast.makeText(DeleteRegionActivity.this, "Error loading regions " + error, Toast.LENGTH_LONG).show(); + } + }); + } + + private static class OfflineRegionAdapter extends BaseAdapter { + + private Context context; + private List<OfflineRegion> offlineRegions; + + OfflineRegionAdapter(Context ctx) { + context = ctx; + offlineRegions = new ArrayList<>(); + } + + void setOfflineRegions(List<OfflineRegion> offlineRegions) { + this.offlineRegions = offlineRegions; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return offlineRegions.size(); + } + + @Override + public OfflineRegion getItem(int position) { + return offlineRegions.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + + if (convertView == null) { + holder = new ViewHolder(); + convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false); + holder.text = (TextView) convertView.findViewById(android.R.id.text1); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.text.setText(OfflineUtils.convertRegionName(getItem(position).getMetadata())); + return convertView; + } + + static class ViewHolder { + TextView text; + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java index c2b0cb0769..137ee2d478 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java @@ -260,6 +260,7 @@ public class OfflineActivity extends AppCompatActivity if (status.isComplete()) { // Download complete endProgress("Region downloaded successfully."); + offlineRegion.setObserver(null); return; } else if (status.isRequiredResourceCountPrecise()) { // Switch to determinate state @@ -277,6 +278,7 @@ public class OfflineActivity extends AppCompatActivity public void onError(OfflineRegionError error) { Timber.e("onError reason: " + error.getReason()); Timber.e("onError message: " + error.getMessage()); + offlineRegion.setObserver(null); } @Override diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml new file mode 100644 index 0000000000..084675fb2c --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <ListView + android:id="@+id/listView" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + + <TextView + android:id="@android:id/empty" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center" + android:text="No Results" + android:textSize="24sp"/> + +</LinearLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml index 2012a92593..61d251f861 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml @@ -33,6 +33,7 @@ <string name="activity_debug_mode">Debug Mode</string> <string name="activity_offline">Offline Map</string> <string name="activity_update_metadata">Update metadata Map</string> + <string name="activity_offline_region_delete">Delete region</string> <string name="activity_minmax_zoom">Min/Max Zoom</string> <string name="activity_viewpager">ViewPager</string> <string name="activity_runtime_style">Runtime Style</string> @@ -76,6 +77,7 @@ <string name="description_debug_mode">Debug Mode</string> <string name="description_offline">Offline Map example</string> <string name="description_update_metadata">Update metadata example</string> + <string name="description_offline_region_delete">Delete region example</string> <string name="description_animated_marker">Animate the position change of a marker</string> <string name="description_polyline">Add a polyline to a map</string> <string name="description_polygon">Add a polygon to a map</string> |