Reenable GMaps on devices with new renderer

This commit is contained in:
Ming Ming 2022-08-30 02:21:36 +08:00
parent ebff61b08e
commit 5925d3f59b
5 changed files with 59 additions and 20 deletions

View file

@ -106,5 +106,6 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// fix crash on sdk33, need investigation
implementation "androidx.window:window:1.0.0"
implementation 'com.google.android.gms:play-services-maps:18.0.2'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.8'
}

View file

@ -3,12 +3,10 @@ package com.nkming.nc_photos
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.annotation.NonNull
import com.nkming.nc_photos.plugin.NcPhotosPlugin
import com.nkming.nc_photos.plugin.UriUtil
import com.nkming.nc_photos.plugin.logE
import com.nkming.nc_photos.plugin.logI
import com.google.android.gms.maps.MapsInitializer
import com.google.android.gms.maps.OnMapsSdkInitializedCallback
import com.nkming.nc_photos.plugin.*
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.EventChannel
@ -16,7 +14,8 @@ import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import java.net.URLEncoder
class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler,
OnMapsSdkInitializedCallback {
companion object {
private const val METHOD_CHANNEL = "com.nkming.nc_photos/activity"
@ -30,6 +29,9 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
logI(TAG, "Initial route: $route")
_initialRoute = route
}
MapsInitializer.initialize(
applicationContext, MapsInitializer.Renderer.LATEST, this
)
}
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
@ -75,10 +77,27 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
_initialRoute = null
}
"isNewGMapsRenderer" -> {
result.success(_isNewGMapsRenderer)
}
else -> result.notImplemented()
}
}
override fun onMapsSdkInitialized(renderer: MapsInitializer.Renderer) {
_isNewGMapsRenderer = when (renderer) {
MapsInitializer.Renderer.LATEST -> {
logD(TAG, "Using new map renderer")
true
}
MapsInitializer.Renderer.LEGACY -> {
logD(TAG, "Using legacy map renderer")
false
}
}
}
private fun getRouteFromImageProcessorResult(intent: Intent): String? {
val resultUri =
intent.getParcelableExtra<Uri>(
@ -98,4 +117,5 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
}
private var _initialRoute: String? = null
private var _isNewGMapsRenderer = false
}

View file

@ -31,6 +31,7 @@ import 'package:nc_photos/entity/tag/data_source.dart';
import 'package:nc_photos/entity/tagged_file.dart';
import 'package:nc_photos/entity/tagged_file/data_source.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/mobile/android/activity.dart';
import 'package:nc_photos/mobile/android/android_info.dart';
import 'package:nc_photos/mobile/platform.dart'
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
@ -49,6 +50,8 @@ enum InitIsolateType {
flutterIsolate,
}
bool isNewGMapsRenderer() => _isNewGMapsRenderer;
Future<void> init(InitIsolateType isolateType) async {
if (_hasInitedInThisIsolate) {
_log.warning("[init] Already initialized in this isolate");
@ -71,6 +74,14 @@ Future<void> init(InitIsolateType isolateType) async {
await _initDiContainer(isolateType);
_initVisibilityDetector();
if (isolateType == InitIsolateType.main) {
try {
_isNewGMapsRenderer = await Activity.isNewGMapsRenderer();
} catch (e, stackTrace) {
_log.severe("[init] Failed while isNewGMapsRenderer", e, stackTrace);
}
}
_hasInitedInThisIsolate = true;
}
@ -232,3 +243,4 @@ Future<sql.SqliteDb> _createDb(InitIsolateType isolateType) async {
final _log = Logger("app_init");
var _hasInitedInThisIsolate = false;
var _isNewGMapsRenderer = false;

View file

@ -1,8 +1,12 @@
import 'package:flutter/services.dart';
import 'package:nc_photos/future_extension.dart';
class Activity {
static Future<String?> consumeInitialRoute() =>
_methodChannel.invokeMethod("consumeInitialRoute");
static Future<bool> isNewGMapsRenderer() =>
_methodChannel.invokeMethod<bool>("isNewGMapsRenderer").notNull();
static const _methodChannel = MethodChannel("com.nkming.nc_photos/activity");
}

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:nc_photos/app_init.dart' as app_init;
import 'package:nc_photos/mobile/platform.dart'
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
import 'package:nc_photos/pref.dart';
@ -35,20 +36,21 @@ class GpsMap extends StatelessWidget {
@override
build(BuildContext context) {
// if (GpsMapProvider.values[Pref().getGpsMapProviderOr(0)] ==
// GpsMapProvider.osm) {
if (GpsMapProvider.values[Pref().getGpsMapProviderOr(0)] ==
GpsMapProvider.osm ||
!app_init.isNewGMapsRenderer()) {
return _OsmGpsMap(
center: center,
zoom: zoom,
onTap: onTap,
);
// } else {
// return _GoogleGpsMap(
// center: center,
// zoom: zoom,
// onTap: onTap,
// );
// }
} else {
return _GoogleGpsMap(
center: center,
zoom: zoom,
onTap: onTap,
);
}
}
/// A pair of latitude and longitude coordinates, stored as degrees