From 6cb40e1c157df7661df72a0202d77f2083d25d10 Mon Sep 17 00:00:00 2001
From: Mathieu De Brito <mathieu.debrito@gmail.com>
Date: Tue, 8 Nov 2016 17:45:10 +0100
Subject: [PATCH] Android samples: add fragment example (#233)

---
 vtm-android-example/AndroidManifest.xml       |   3 +
 vtm-android-example/build.gradle              |   1 +
 .../res/layout/activity_map_fragment.xml      |  11 ++
 .../res/layout/fragment_map.xml               |  11 ++
 .../android/test/MapFragmentActivity.java     | 107 ++++++++++++++++++
 .../src/org/oscim/android/test/Samples.java   |   1 +
 6 files changed, 134 insertions(+)
 create mode 100644 vtm-android-example/res/layout/activity_map_fragment.xml
 create mode 100644 vtm-android-example/res/layout/fragment_map.xml
 create mode 100644 vtm-android-example/src/org/oscim/android/test/MapFragmentActivity.java

diff --git a/vtm-android-example/AndroidManifest.xml b/vtm-android-example/AndroidManifest.xml
index 2f486cd0..65e58a04 100644
--- a/vtm-android-example/AndroidManifest.xml
+++ b/vtm-android-example/AndroidManifest.xml
@@ -44,6 +44,9 @@
         <activity
             android:name=".MapboxMapActivity"
             android:configChanges="keyboardHidden|orientation|screenSize" />
+        <activity
+            android:name=".MapFragmentActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize" />
         <activity
             android:name=".MapsforgeMapActivity"
             android:configChanges="keyboardHidden|orientation|screenSize" />
diff --git a/vtm-android-example/build.gradle b/vtm-android-example/build.gradle
index 37e0264d..99fed70a 100644
--- a/vtm-android-example/build.gradle
+++ b/vtm-android-example/build.gradle
@@ -7,6 +7,7 @@ dependencies {
     compile project(':vtm-jts')
     compile project(':vtm-themes')
     compile 'com.noveogroup.android:android-logger:1.3.6'
+    compile 'com.android.support:support-v4:25.0.0'
 }
 
 android {
diff --git a/vtm-android-example/res/layout/activity_map_fragment.xml b/vtm-android-example/res/layout/activity_map_fragment.xml
new file mode 100644
index 00000000..ebc717af
--- /dev/null
+++ b/vtm-android-example/res/layout/activity_map_fragment.xml
@@ -0,0 +1,11 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <FrameLayout
+        android:id="@+id/fragment_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</LinearLayout>
diff --git a/vtm-android-example/res/layout/fragment_map.xml b/vtm-android-example/res/layout/fragment_map.xml
new file mode 100644
index 00000000..5b7297cc
--- /dev/null
+++ b/vtm-android-example/res/layout/fragment_map.xml
@@ -0,0 +1,11 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@android:color/white">
+
+    <org.oscim.android.MapView
+        android:id="@+id/mapView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</RelativeLayout>
diff --git a/vtm-android-example/src/org/oscim/android/test/MapFragmentActivity.java b/vtm-android-example/src/org/oscim/android/test/MapFragmentActivity.java
new file mode 100644
index 00000000..9d36bc9c
--- /dev/null
+++ b/vtm-android-example/src/org/oscim/android/test/MapFragmentActivity.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2016 Mathieu De Brito
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.oscim.android.test;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.oscim.android.MapPreferences;
+import org.oscim.android.MapView;
+import org.oscim.core.MapPosition;
+import org.oscim.core.Tile;
+import org.oscim.layers.GroupLayer;
+import org.oscim.layers.tile.buildings.BuildingLayer;
+import org.oscim.layers.tile.vector.VectorTileLayer;
+import org.oscim.layers.tile.vector.labeling.LabelLayer;
+import org.oscim.theme.VtmThemes;
+import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
+
+public class MapFragmentActivity extends FragmentActivity {
+
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Tile.SIZE = Tile.calculateTileSize(getResources().getDisplayMetrics().scaledDensity);
+        setContentView(R.layout.activity_map_fragment);
+
+        setTitle(getClass().getSimpleName());
+
+        MapFragment newFragment = new MapFragment();
+        getSupportFragmentManager()
+                .beginTransaction()
+                .add(R.id.fragment_container, newFragment)
+                .commit();
+    }
+
+    public static class MapFragment extends Fragment {
+
+        private MapView mMapView;
+        private MapPreferences mPrefs;
+
+        @Nullable
+        @Override
+        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+            View contentView = super.onCreateView(inflater, container, savedInstanceState);
+            if (contentView == null) {
+                contentView = inflater.inflate(R.layout.fragment_map, container, false);
+            }
+            return contentView;
+        }
+
+        @Override
+        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+            super.onViewCreated(view, savedInstanceState);
+
+            mMapView = (MapView) view.findViewById(R.id.mapView);
+            mMapView.setZOrderOnTop(true);
+            mPrefs = new MapPreferences(MapFragment.class.getName(), getContext());
+
+            VectorTileLayer l = mMapView.map().setBaseMap(new OSciMap4TileSource());
+
+            GroupLayer groupLayer = new GroupLayer(mMapView.map());
+            groupLayer.layers.add(new BuildingLayer(mMapView.map(), l));
+            groupLayer.layers.add(new LabelLayer(mMapView.map(), l));
+            mMapView.map().layers().add(groupLayer);
+
+            mMapView.map().setTheme(VtmThemes.DEFAULT);
+
+            // set initial position on first run
+            MapPosition pos = new MapPosition();
+            mMapView.map().getMapPosition(pos);
+            if (pos.x == 0.5 && pos.y == 0.5)
+                mMapView.map().setMapPosition(53.08, 8.83, Math.pow(2, 16));
+        }
+
+        @Override
+        public void onResume() {
+            super.onResume();
+
+            mPrefs.load(mMapView.map());
+            mMapView.onResume();
+        }
+
+        @Override
+        public void onPause() {
+            super.onPause();
+
+            mMapView.onPause();
+            mPrefs.save(mMapView.map());
+        }
+    }
+}
diff --git a/vtm-android-example/src/org/oscim/android/test/Samples.java b/vtm-android-example/src/org/oscim/android/test/Samples.java
index 81762e9a..69ed562f 100644
--- a/vtm-android-example/src/org/oscim/android/test/Samples.java
+++ b/vtm-android-example/src/org/oscim/android/test/Samples.java
@@ -52,6 +52,7 @@ public class Samples extends Activity {
         linearLayout.addView(createButton(OsmJsonMapActivity.class));
         linearLayout.addView(createButton(VectorLayerMapActivity.class));
         linearLayout.addView(createButton(MultiMapActivity.class));
+        linearLayout.addView(createButton(MapFragmentActivity.class));
     }
 
     private Button createButton(final Class<?> clazz) {