mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-24 10:28:50 +01:00
Reenable GMaps on devices with new renderer
This commit is contained in:
parent
ebff61b08e
commit
5925d3f59b
5 changed files with 59 additions and 20 deletions
|
@ -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'
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue