Skip to content

Commit 0f372d3

Browse files
committed
Added the setTouchEnabled method so we can disable any touch inputs
1 parent 1ec03cc commit 0f372d3

File tree

8 files changed

+83
-4
lines changed

8 files changed

+83
-4
lines changed

library/src/main/assets/google_map.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@
6060
function stopTrackingUserLocation() {
6161
GeoMarker.setMap(null);
6262
}
63+
function setTouchEnabled(enabled) {
64+
map.setOptions({draggable: enabled, zoomControl: enabled, scrollwheel: enabled, disableDoubleClickZoom: !enabled});
65+
}
6366

6467
function clearMarkers() {
6568
for (var key in markers) {

library/src/main/java/com/airbnb/android/airmapview/AirGoogleMapOptions.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,14 @@ public AirGoogleMapOptions mapToolbarEnabled(boolean enabled) {
7676
return this;
7777
}
7878

79+
public AirGoogleMapOptions setTouchEnabled(boolean enabled) {
80+
tiltGesturesEnabled(enabled);
81+
rotateGesturesEnabled(enabled);
82+
zoomGesturesEnabled(enabled);
83+
scrollGesturesEnabled(enabled);
84+
return this;
85+
}
86+
7987
public Boolean getZOrderOnTop() {
8088
return options.getZOrderOnTop();
8189
}

library/src/main/java/com/airbnb/android/airmapview/AirMapInterface.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,9 @@ public interface AirMapInterface {
248248
* Remove GeoJson layer from map, if any.
249249
*/
250250
void clearGeoJsonLayer();
251+
/**
252+
* Set to whether to enable touch. If it's disabled then the user won't be allowed to drag, zoom or pan.
253+
* @param enabled
254+
*/
255+
void setTouchEnabled(boolean enabled);
251256
}

library/src/main/java/com/airbnb/android/airmapview/AirMapView.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,10 @@ public void setMyLocationEnabled(boolean trackUserLocation) {
349349
mapInterface.setMyLocationEnabled(trackUserLocation);
350350
}
351351

352+
public void setTouchEnabled(boolean enabled) {
353+
mapInterface.setTouchEnabled(enabled);
354+
}
355+
352356
@Override public void onCameraChanged(LatLng latLng, int zoom) {
353357
if (onCameraChangeListener != null) {
354358
onCameraChangeListener.onCameraChanged(latLng, zoom);

library/src/main/java/com/airbnb/android/airmapview/NativeGoogleMapFragment.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public void onMapReady(GoogleMap googleMap) {
8080
if (onMapLoadedListener != null) {
8181
onMapLoadedListener.onMapLoaded();
8282
}
83+
8384
}
8485
}
8586
});
@@ -126,6 +127,10 @@ public void onInfoWindowClick(Marker marker) {
126127
});
127128
}
128129

130+
@Override public void setTouchEnabled(boolean enabled) {
131+
googleMap.getUiSettings().setAllGesturesEnabled(enabled);
132+
}
133+
129134
@Override public void setInfoWindowCreator(GoogleMap.InfoWindowAdapter adapter,
130135
InfoWindowCreator creator) {
131136
googleMap.setInfoWindowAdapter(adapter);

library/src/main/java/com/airbnb/android/airmapview/WebViewMapFragment.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,11 @@ public void setOnMarkerClickListener(OnMapMarkerClickListener listener) {
243243
// no-op
244244
}
245245

246+
@Override
247+
public void setTouchEnabled(boolean enabled) {
248+
webView.loadUrl("javascript:setTouchEnabled(" + enabled + ");");
249+
}
250+
246251
@Override public <T> void addPolyline(AirMapPolyline<T> polyline) {
247252
try {
248253
JSONArray array = new JSONArray();

sample/src/main/java/com/airbnb/airmapview/sample/MainActivity.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import android.widget.TextView;
1414
import android.widget.Toast;
1515

16+
import com.airbnb.android.airmapview.AirGoogleMapOptions;
1617
import com.airbnb.android.airmapview.AirMapGeoJsonLayer;
1718
import com.airbnb.android.airmapview.AirMapInterface;
1819
import com.airbnb.android.airmapview.AirMapMarker;
@@ -30,7 +31,9 @@
3031
import com.airbnb.android.airmapview.listeners.OnLatLngScreenLocationCallback;
3132
import com.airbnb.android.airmapview.listeners.OnMapClickListener;
3233
import com.airbnb.android.airmapview.listeners.OnMapInitializedListener;
34+
import com.airbnb.android.airmapview.listeners.OnMapLoadedListener;
3335
import com.airbnb.android.airmapview.listeners.OnMapMarkerClickListener;
36+
import com.google.android.gms.maps.GoogleMapOptions;
3437
import com.google.android.gms.maps.model.LatLng;
3538
import com.google.android.gms.maps.model.Marker;
3639

@@ -122,6 +125,24 @@ public class MainActivity extends AppCompatActivity
122125
case R.id.action_clear_logs:
123126
textLogs.setText("");
124127
break;
128+
case R.id.action_web_map_no_touch:
129+
try {
130+
airMapInterface = createMapWithTouchDisabled(AirMapViewTypes.WEB);
131+
} catch (UnsupportedOperationException e) {
132+
Toast.makeText(this, "Sorry, native Google Maps are not supported by this device. " +
133+
"Please make sure you have Google Play Services installed.",
134+
Toast.LENGTH_SHORT).show();
135+
}
136+
break;
137+
case R.id.action_native_map_no_touch:
138+
try {
139+
airMapInterface = createMapWithTouchDisabled(AirMapViewTypes.NATIVE);
140+
} catch (UnsupportedOperationException e) {
141+
Toast.makeText(this, "Sorry, native Google Maps are not supported by this device. " +
142+
"Please make sure you have Google Play Services installed.",
143+
Toast.LENGTH_SHORT).show();
144+
}
145+
break;
125146
case R.id.add_geojson_layer:
126147
// Draws a layer on top of Australia
127148
String geoJsonString = Util.readFromRawResource(this, R.raw.google);
@@ -152,6 +173,25 @@ public class MainActivity extends AppCompatActivity
152173
return super.onOptionsItemSelected(item);
153174
}
154175

176+
private AirMapInterface createMapWithTouchDisabled(AirMapViewTypes type) {
177+
if (type == AirMapViewTypes.NATIVE) {
178+
AirGoogleMapOptions options = new AirGoogleMapOptions(new GoogleMapOptions());
179+
options.setTouchEnabled(false);
180+
AirMapInterface airMapInterface = mapViewBuilder.builder(type).withOptions(options).build();
181+
return airMapInterface;
182+
}
183+
184+
// case where it's not a native map, doesn't use AirGoogleMapOptions
185+
final AirMapInterface mapInterface = mapViewBuilder.builder(type).build();
186+
mapInterface.setOnMapLoadedListener(new OnMapLoadedListener() {
187+
@Override
188+
public void onMapLoaded() {
189+
mapInterface.setTouchEnabled(false);
190+
}
191+
});
192+
return mapInterface;
193+
}
194+
155195
@Override public void onCameraChanged(LatLng latLng, int zoom) {
156196
appendLog("Map onCameraChanged triggered with lat: " + latLng.latitude + ", lng: "
157197
+ latLng.longitude);

sample/src/main/res/menu/menu_main.xml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
xmlns:tools="http://schemas.android.com/tools"
44
tools:context=".MainActivity">
55

6-
<item android:id="@+id/action_native_map"
7-
android:title="Use Native Map"
8-
android:orderInCategory="100"
9-
app:showAsAction="never"/>
6+
<item android:id="@+id/action_native_map"
7+
android:title="Use Native Map"
8+
android:orderInCategory="100"
9+
app:showAsAction="never"/>
1010

1111
<item android:id="@+id/action_google_web_map"
1212
android:title="Use Google Web Map"
@@ -38,5 +38,14 @@
3838
android:orderInCategory="100"
3939
app:showAsAction="never"/>
4040

41+
<item android:id="@+id/action_web_map_no_touch"
42+
android:title="Use Web Map (Don't allow drag)"
43+
android:orderInCategory="100"
44+
app:showAsAction="never"/>
45+
46+
<item android:id="@+id/action_native_map_no_touch"
47+
android:title="Use Native Map (Don't allow drag)"
48+
android:orderInCategory="100"
49+
app:showAsAction="never"/>
4150
</menu>
4251

0 commit comments

Comments
 (0)