From ae0de4b6086e56741097d28a77a7df45be085ab3 Mon Sep 17 00:00:00 2001 From: Sean Barbeau Date: Tue, 19 May 2020 15:16:40 -0400 Subject: [PATCH] chore: Add StreetViewPanoramaEventsDemoActivity in Kotlin (#207) Also apply following changes to Java version: * Refactor variables to remove Hungarian notation * Use lambda (requires Java 8 support) * Support Java 8 features (for all Java demos) via build.gradle --- .../StreetViewPanoramaEventsDemoActivity.java | 94 +++++++-------- .../example/kotlindemos/DemoDetailsList.kt | 4 + .../StreetViewPanoramaEventsDemoActivity.kt | 111 ++++++++++++++++++ .../street_view_panorama_events_demo.xml | 56 +++++++++ .../kotlin/app/src/main/AndroidManifest.xml | 1 + .../app/src/main/res/values/strings.xml | 8 ++ 6 files changed, 225 insertions(+), 49 deletions(-) create mode 100644 ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/StreetViewPanoramaEventsDemoActivity.kt create mode 100644 ApiDemos/kotlin/app/src/gms/res/layout/street_view_panorama_events_demo.xml diff --git a/ApiDemos/java/app/src/gms/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java b/ApiDemos/java/app/src/gms/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java index f967d24b..17ffa6e0 100755 --- a/ApiDemos/java/app/src/gms/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java +++ b/ApiDemos/java/app/src/gms/java/com/example/mapdemo/StreetViewPanoramaEventsDemoActivity.java @@ -15,7 +15,12 @@ package com.example.mapdemo; -import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback; +import android.graphics.Point; +import android.os.Bundle; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + import com.google.android.gms.maps.StreetViewPanorama; import com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaCameraChangeListener; import com.google.android.gms.maps.StreetViewPanorama.OnStreetViewPanoramaChangeListener; @@ -27,12 +32,6 @@ import com.google.android.gms.maps.model.StreetViewPanoramaCamera; import com.google.android.gms.maps.model.StreetViewPanoramaLocation; import com.google.android.gms.maps.model.StreetViewPanoramaOrientation; -import android.graphics.Point; -import android.os.Bundle; -import android.widget.TextView; - -import androidx.appcompat.app.AppCompatActivity; - /** * This shows how to listen to some {@link StreetViewPanorama} events. */ @@ -43,56 +42,53 @@ public class StreetViewPanoramaEventsDemoActivity extends AppCompatActivity // George St, Sydney private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); - private StreetViewPanorama mStreetViewPanorama; + private StreetViewPanorama streetViewPanorama; - private TextView mPanoChangeTimesTextView; + private TextView panoChangeTimesTextView; - private TextView mPanoCameraChangeTextView; + private TextView panoCameraChangeTextView; - private TextView mPanoClickTextView; + private TextView panoClickTextView; - private TextView mPanoLongClickTextView; + private TextView panoLongClickTextView; - private int mPanoChangeTimes = 0; + private int panoChangeTimes = 0; - private int mPanoCameraChangeTimes = 0; + private int panoCameraChangeTimes = 0; - private int mPanoClickTimes = 0; + private int panoClickTimes = 0; - private int mPanoLongClickTimes = 0; + private int panoLongClickTimes = 0; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.street_view_panorama_events_demo); - mPanoChangeTimesTextView = (TextView) findViewById(R.id.change_pano); - mPanoCameraChangeTextView = (TextView) findViewById(R.id.change_camera); - mPanoClickTextView = (TextView) findViewById(R.id.click_pano); - mPanoLongClickTextView = (TextView) findViewById(R.id.long_click_pano); + panoChangeTimesTextView = findViewById(R.id.change_pano); + panoCameraChangeTextView = findViewById(R.id.change_camera); + panoClickTextView = findViewById(R.id.click_pano); + panoLongClickTextView = findViewById(R.id.long_click_pano); SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager().findFragmentById(R.id.streetviewpanorama); streetViewPanoramaFragment.getStreetViewPanoramaAsync( - new OnStreetViewPanoramaReadyCallback() { - @Override - public void onStreetViewPanoramaReady(StreetViewPanorama panorama) { - mStreetViewPanorama = panorama; - mStreetViewPanorama.setOnStreetViewPanoramaChangeListener( - StreetViewPanoramaEventsDemoActivity.this); - mStreetViewPanorama.setOnStreetViewPanoramaCameraChangeListener( - StreetViewPanoramaEventsDemoActivity.this); - mStreetViewPanorama.setOnStreetViewPanoramaClickListener( - StreetViewPanoramaEventsDemoActivity.this); - mStreetViewPanorama.setOnStreetViewPanoramaLongClickListener( - StreetViewPanoramaEventsDemoActivity.this); + panorama -> { + streetViewPanorama = panorama; + streetViewPanorama.setOnStreetViewPanoramaChangeListener( + StreetViewPanoramaEventsDemoActivity.this); + streetViewPanorama.setOnStreetViewPanoramaCameraChangeListener( + StreetViewPanoramaEventsDemoActivity.this); + streetViewPanorama.setOnStreetViewPanoramaClickListener( + StreetViewPanoramaEventsDemoActivity.this); + streetViewPanorama.setOnStreetViewPanoramaLongClickListener( + StreetViewPanoramaEventsDemoActivity.this); - // Only set the panorama to SYDNEY on startup (when no panoramas have been - // loaded which is when the savedInstanceState is null). - if (savedInstanceState == null) { - mStreetViewPanorama.setPosition(SYDNEY); - } + // Only set the panorama to SYDNEY on startup (when no panoramas have been + // loaded which is when the savedInstanceState is null). + if (savedInstanceState == null) { + streetViewPanorama.setPosition(SYDNEY); } }); } @@ -100,37 +96,37 @@ public class StreetViewPanoramaEventsDemoActivity extends AppCompatActivity @Override public void onStreetViewPanoramaChange(StreetViewPanoramaLocation location) { if (location != null) { - mPanoChangeTimesTextView.setText("Times panorama changed=" + ++mPanoChangeTimes); + panoChangeTimesTextView.setText("Times panorama changed=" + ++panoChangeTimes); } } @Override public void onStreetViewPanoramaCameraChange(StreetViewPanoramaCamera camera) { - mPanoCameraChangeTextView.setText("Times camera changed=" + ++mPanoCameraChangeTimes); + panoCameraChangeTextView.setText("Times camera changed=" + ++panoCameraChangeTimes); } @Override public void onStreetViewPanoramaClick(StreetViewPanoramaOrientation orientation) { - Point point = mStreetViewPanorama.orientationToPoint(orientation); + Point point = streetViewPanorama.orientationToPoint(orientation); if (point != null) { - mPanoClickTimes++; - mPanoClickTextView.setText( - "Times clicked=" + mPanoClickTimes + " : " + point.toString()); - mStreetViewPanorama.animateTo( + panoClickTimes++; + panoClickTextView.setText( + "Times clicked=" + panoClickTimes + " : " + point.toString()); + streetViewPanorama.animateTo( new StreetViewPanoramaCamera.Builder() .orientation(orientation) - .zoom(mStreetViewPanorama.getPanoramaCamera().zoom) + .zoom(streetViewPanorama.getPanoramaCamera().zoom) .build(), 1000); } } @Override public void onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation orientation) { - Point point = mStreetViewPanorama.orientationToPoint(orientation); + Point point = streetViewPanorama.orientationToPoint(orientation); if (point != null) { - mPanoLongClickTimes++; - mPanoLongClickTextView.setText( - "Times long clicked=" + mPanoLongClickTimes + " : " + point.toString()); + panoLongClickTimes++; + panoLongClickTextView.setText( + "Times long clicked=" + panoLongClickTimes + " : " + point.toString()); } } } diff --git a/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/DemoDetailsList.kt b/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/DemoDetailsList.kt index 1048cab1..05c29c24 100644 --- a/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/DemoDetailsList.kt +++ b/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/DemoDetailsList.kt @@ -57,6 +57,10 @@ class DemoDetailsList { R.string.street_view_panorama_options_demo_label, R.string.street_view_panorama_options_demo_details, StreetViewPanoramaOptionsDemoActivity::class.java), + DemoDetails( + R.string.street_view_panorama_events_demo_label, + R.string.street_view_panorama_events_demo_details, + StreetViewPanoramaEventsDemoActivity::class.java), DemoDetails(R.string.tags_demo_label, R.string.tags_demo_details, TagsDemoActivity::class.java), DemoDetails(R.string.ui_settings_demo_label, R.string.ui_settings_demo_details, diff --git a/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/StreetViewPanoramaEventsDemoActivity.kt b/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/StreetViewPanoramaEventsDemoActivity.kt new file mode 100644 index 00000000..6815eaf9 --- /dev/null +++ b/ApiDemos/kotlin/app/src/gms/java/com/example/kotlindemos/StreetViewPanoramaEventsDemoActivity.kt @@ -0,0 +1,111 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.example.kotlindemos + +import android.os.Bundle +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.google.android.gms.maps.StreetViewPanorama +import com.google.android.gms.maps.StreetViewPanorama.* +import com.google.android.gms.maps.SupportStreetViewPanoramaFragment +import com.google.android.gms.maps.model.LatLng +import com.google.android.gms.maps.model.StreetViewPanoramaCamera +import com.google.android.gms.maps.model.StreetViewPanoramaLocation +import com.google.android.gms.maps.model.StreetViewPanoramaOrientation + +/** + * This shows how to listen to some [StreetViewPanorama] events. + */ +class StreetViewPanoramaEventsDemoActivity : AppCompatActivity(), + OnStreetViewPanoramaChangeListener, OnStreetViewPanoramaCameraChangeListener, + OnStreetViewPanoramaClickListener, OnStreetViewPanoramaLongClickListener { + + private lateinit var streetViewPanorama: StreetViewPanorama + private lateinit var panoChangeTimesTextView: TextView + private lateinit var panoCameraChangeTextView: TextView + private lateinit var panoClickTextView: TextView + private lateinit var panoLongClickTextView: TextView + + private var panoChangeTimes = 0 + private var panoCameraChangeTimes = 0 + private var panoClickTimes = 0 + private var panoLongClickTimes = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.street_view_panorama_events_demo) + + panoChangeTimesTextView = findViewById(R.id.change_pano) + panoCameraChangeTextView = findViewById(R.id.change_camera) + panoClickTextView = findViewById(R.id.click_pano) + panoLongClickTextView = findViewById(R.id.long_click_pano) + + val streetViewPanoramaFragment = + supportFragmentManager.findFragmentById(R.id.streetviewpanorama) as SupportStreetViewPanoramaFragment? + streetViewPanoramaFragment?.getStreetViewPanoramaAsync { panorama: StreetViewPanorama -> + streetViewPanorama = panorama + streetViewPanorama.setOnStreetViewPanoramaChangeListener( + this@StreetViewPanoramaEventsDemoActivity + ) + streetViewPanorama.setOnStreetViewPanoramaCameraChangeListener( + this@StreetViewPanoramaEventsDemoActivity + ) + streetViewPanorama.setOnStreetViewPanoramaClickListener( + this@StreetViewPanoramaEventsDemoActivity + ) + streetViewPanorama.setOnStreetViewPanoramaLongClickListener( + this@StreetViewPanoramaEventsDemoActivity + ) + + // Only set the panorama to SYDNEY on startup (when no panoramas have been + // loaded which is when the savedInstanceState is null). + savedInstanceState ?: streetViewPanorama.setPosition(SYDNEY) + } + } + + override fun onStreetViewPanoramaChange(location: StreetViewPanoramaLocation) { + panoChangeTimesTextView.text = "Times panorama changed=" + ++panoChangeTimes + } + + override fun onStreetViewPanoramaCameraChange(camera: StreetViewPanoramaCamera) { + panoCameraChangeTextView.text = "Times camera changed=" + ++panoCameraChangeTimes + } + + override fun onStreetViewPanoramaClick(orientation: StreetViewPanoramaOrientation) { + val point = streetViewPanorama.orientationToPoint(orientation) + point?.let { + panoClickTimes++ + panoClickTextView.text = "Times clicked=$panoClickTimes : $point" + streetViewPanorama.animateTo( + StreetViewPanoramaCamera.Builder() + .orientation(orientation) + .zoom(streetViewPanorama.panoramaCamera.zoom) + .build(), 1000 + ) + } + } + + override fun onStreetViewPanoramaLongClick(orientation: StreetViewPanoramaOrientation) { + val point = streetViewPanorama.orientationToPoint(orientation) + if (point != null) { + panoLongClickTimes++ + panoLongClickTextView.text = "Times long clicked=$panoLongClickTimes : $point" + } + } + + companion object { + // George St, Sydney + private val SYDNEY = LatLng(-33.87365, 151.20689) + } +} \ No newline at end of file diff --git a/ApiDemos/kotlin/app/src/gms/res/layout/street_view_panorama_events_demo.xml b/ApiDemos/kotlin/app/src/gms/res/layout/street_view_panorama_events_demo.xml new file mode 100644 index 00000000..2251e277 --- /dev/null +++ b/ApiDemos/kotlin/app/src/gms/res/layout/street_view_panorama_events_demo.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + diff --git a/ApiDemos/kotlin/app/src/main/AndroidManifest.xml b/ApiDemos/kotlin/app/src/main/AndroidManifest.xml index 8e910e8b..173ba5ca 100644 --- a/ApiDemos/kotlin/app/src/main/AndroidManifest.xml +++ b/ApiDemos/kotlin/app/src/main/AndroidManifest.xml @@ -60,6 +60,7 @@ + \ No newline at end of file diff --git a/ApiDemos/kotlin/app/src/main/res/values/strings.xml b/ApiDemos/kotlin/app/src/main/res/values/strings.xml index 30b04d9e..7226860c 100644 --- a/ApiDemos/kotlin/app/src/main/res/values/strings.xml +++ b/ApiDemos/kotlin/app/src/main/res/values/strings.xml @@ -160,6 +160,14 @@ Panning Gestures Streetnames + + Street View Panorama Events + Standard Street View Panorama with event handling. + navigate to another panorama + pan camera + tap screen + long press screen + Tags Demonstrates how to get and set tags on API objects.