From 89749c03097111bcdfc26e6efe84922a2ca88862 Mon Sep 17 00:00:00 2001 From: davinci9196 Date: Fri, 7 Feb 2025 11:10:30 +0800 Subject: [PATCH 1/3] GoogleMap: Added Issue fixed --- .../org/microg/gms/maps/hms/GoogleMap.kt | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt index aef3dd8e36..48c22646e7 100644 --- a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt +++ b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt @@ -15,6 +15,9 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.LinearLayout +import android.widget.RelativeLayout +import androidx.annotation.IdRes +import androidx.annotation.Keep import androidx.collection.LongSparseArray import com.google.android.gms.dynamic.IObjectWrapper import com.google.android.gms.dynamic.unwrap @@ -97,7 +100,62 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) MapsInitializer.setApiKey(BuildConfig.HMSMAP_KEY) } - this.view = object : FrameLayout(mapContext) {} + val fakeWatermark = View(mapContext) + fakeWatermark.tag = "GoogleWatermark" + fakeWatermark.visibility = View.GONE + + val fakeCompass = View(mapContext) + fakeCompass.tag = "GoogleMapCompass" + fakeCompass.visibility = View.GONE + + val fakeZoomInButton = View(mapContext) + fakeCompass.tag = "GoogleMapZoomInButton" + fakeCompass.visibility = View.GONE + + this.view = object : FrameLayout(mapContext) { + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + RelativeLayout(mapContext).apply { + addView(fakeZoomInButton) + visibility = GONE + }.also { addView(it) } + } + + @Keep + fun findViewTraversal(@IdRes id: Int): T? { + return null + } + + @Keep + fun findViewWithTagTraversal(tag: Any): T? { + if ("GoogleWatermark" == tag) { + return try { + @Suppress("UNCHECKED_CAST") + fakeWatermark as T + } catch (e: ClassCastException) { + null + } + } + if ("GoogleMapCompass" == tag) { + return try { + @Suppress("UNCHECKED_CAST") + fakeCompass as T + } catch (e: ClassCastException) { + null + } + } + if ("GoogleMapZoomInButton" == tag) { + return try { + @Suppress("UNCHECKED_CAST") + fakeZoomInButton as T + } catch (e: ClassCastException) { + null + } + } + return null + } + } } override fun getCameraPosition(): CameraPosition { From 79943bb4f5cfacb36e7f9176d877cab3667e5ac8 Mon Sep 17 00:00:00 2001 From: davinci9196 Date: Fri, 7 Feb 2025 11:12:31 +0800 Subject: [PATCH 2/3] cleanup --- .../hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt index 48c22646e7..cd679690f0 100644 --- a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt +++ b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt @@ -109,8 +109,8 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) fakeCompass.visibility = View.GONE val fakeZoomInButton = View(mapContext) - fakeCompass.tag = "GoogleMapZoomInButton" - fakeCompass.visibility = View.GONE + fakeZoomInButton.tag = "GoogleMapZoomInButton" + fakeZoomInButton.visibility = View.GONE this.view = object : FrameLayout(mapContext) { From 11fa8538293a963b741c094b58888d38688597d1 Mon Sep 17 00:00:00 2001 From: davinci9196 Date: Mon, 10 Mar 2025 15:17:22 +0800 Subject: [PATCH 3/3] Optimize content --- .../org/microg/gms/maps/hms/GoogleMap.kt | 41 +++++++++++-------- .../org/microg/gms/maps/hms/MapFragment.kt | 11 +++-- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt index cd679690f0..613aa418a9 100644 --- a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt +++ b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/GoogleMap.kt @@ -100,26 +100,33 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) MapsInitializer.setApiKey(BuildConfig.HMSMAP_KEY) } - val fakeWatermark = View(mapContext) - fakeWatermark.tag = "GoogleWatermark" - fakeWatermark.visibility = View.GONE - - val fakeCompass = View(mapContext) - fakeCompass.tag = "GoogleMapCompass" - fakeCompass.visibility = View.GONE - - val fakeZoomInButton = View(mapContext) - fakeZoomInButton.tag = "GoogleMapZoomInButton" - fakeZoomInButton.visibility = View.GONE - this.view = object : FrameLayout(mapContext) { + private val fakeWatermark = View(mapContext).apply { + tag = "GoogleWatermark" + visibility = GONE + } + private val fakeCompass = View(mapContext).apply { + tag = "GoogleMapCompass" + visibility = GONE + } + private val fakeZoomInButton = View(mapContext).apply { + tag = "GoogleMapZoomInButton" + visibility = GONE + } + + private val zoomInButtonRoot = RelativeLayout(mapContext).apply { + addView(fakeZoomInButton) + visibility = GONE + } override fun onAttachedToWindow() { super.onAttachedToWindow() - RelativeLayout(mapContext).apply { - addView(fakeZoomInButton) - visibility = GONE - }.also { addView(it) } + addView(zoomInButtonRoot) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + removeView(zoomInButtonRoot) } @Keep @@ -659,7 +666,7 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions) } private fun initMap(map: HuaweiMap) { - if (this.map != null) return + if (this.map != null && initialized) return loaded = true this.map = map diff --git a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/MapFragment.kt b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/MapFragment.kt index 5bb62383b2..bb2b1ae7da 100644 --- a/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/MapFragment.kt +++ b/play-services-maps/core/hms/src/main/kotlin/org/microg/gms/maps/hms/MapFragment.kt @@ -35,7 +35,7 @@ class MapFragmentImpl(private val activity: Activity) : IMapFragmentDelegate.Stu if (options == null) { options = GoogleMapOptions() } - Log.d(TAG, "onCreate: $options") + Log.d(TAG, "onCreate $this : $options ") map = GoogleMapImpl(activity, options ?: GoogleMapOptions()) } @@ -47,7 +47,7 @@ class MapFragmentImpl(private val activity: Activity) : IMapFragmentDelegate.Stu if (map == null) { map = GoogleMapImpl(activity, options ?: GoogleMapOptions()) } - Log.d(TAG, "onCreateView: $options") + Log.d(TAG, "onCreateView $this : $options") map!!.onCreate(savedInstanceState) val view = map!!.view val parent = view.parent as ViewGroup? @@ -67,10 +67,15 @@ class MapFragmentImpl(private val activity: Activity) : IMapFragmentDelegate.Stu override fun getMapAsync(callback: IOnMapReadyCallback) = map?.getMapAsync(callback) ?: Unit override fun onDestroyView() { - map?.onDestroy() + Log.d(TAG, "onDestroyView: $this : $options") + if (options?.useViewLifecycleInFragment == true) { + map?.onDestroy() + map = null + } } override fun onDestroy() { + Log.d(TAG, "onDestroy: $this") map?.onDestroy() map = null options = null