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"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
// fix crash on sdk33, need investigation
|
// fix crash on sdk33, need investigation
|
||||||
implementation "androidx.window:window:1.0.0"
|
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'
|
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.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import androidx.annotation.NonNull
|
import androidx.annotation.NonNull
|
||||||
import com.nkming.nc_photos.plugin.NcPhotosPlugin
|
import com.google.android.gms.maps.MapsInitializer
|
||||||
import com.nkming.nc_photos.plugin.UriUtil
|
import com.google.android.gms.maps.OnMapsSdkInitializedCallback
|
||||||
import com.nkming.nc_photos.plugin.logE
|
import com.nkming.nc_photos.plugin.*
|
||||||
import com.nkming.nc_photos.plugin.logI
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
import io.flutter.plugin.common.EventChannel
|
import io.flutter.plugin.common.EventChannel
|
||||||
|
@ -16,7 +14,8 @@ import io.flutter.plugin.common.MethodCall
|
||||||
import io.flutter.plugin.common.MethodChannel
|
import io.flutter.plugin.common.MethodChannel
|
||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
|
|
||||||
class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
|
class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler,
|
||||||
|
OnMapsSdkInitializedCallback {
|
||||||
companion object {
|
companion object {
|
||||||
private const val METHOD_CHANNEL = "com.nkming.nc_photos/activity"
|
private const val METHOD_CHANNEL = "com.nkming.nc_photos/activity"
|
||||||
|
|
||||||
|
@ -30,6 +29,9 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
|
||||||
logI(TAG, "Initial route: $route")
|
logI(TAG, "Initial route: $route")
|
||||||
_initialRoute = route
|
_initialRoute = route
|
||||||
}
|
}
|
||||||
|
MapsInitializer.initialize(
|
||||||
|
applicationContext, MapsInitializer.Renderer.LATEST, this
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||||
|
@ -75,10 +77,27 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
|
||||||
_initialRoute = null
|
_initialRoute = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"isNewGMapsRenderer" -> {
|
||||||
|
result.success(_isNewGMapsRenderer)
|
||||||
|
}
|
||||||
|
|
||||||
else -> result.notImplemented()
|
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? {
|
private fun getRouteFromImageProcessorResult(intent: Intent): String? {
|
||||||
val resultUri =
|
val resultUri =
|
||||||
intent.getParcelableExtra<Uri>(
|
intent.getParcelableExtra<Uri>(
|
||||||
|
@ -98,4 +117,5 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private var _initialRoute: String? = null
|
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.dart';
|
||||||
import 'package:nc_photos/entity/tagged_file/data_source.dart';
|
import 'package:nc_photos/entity/tagged_file/data_source.dart';
|
||||||
import 'package:nc_photos/k.dart' as k;
|
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/android/android_info.dart';
|
||||||
import 'package:nc_photos/mobile/platform.dart'
|
import 'package:nc_photos/mobile/platform.dart'
|
||||||
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
|
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
|
||||||
|
@ -49,6 +50,8 @@ enum InitIsolateType {
|
||||||
flutterIsolate,
|
flutterIsolate,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isNewGMapsRenderer() => _isNewGMapsRenderer;
|
||||||
|
|
||||||
Future<void> init(InitIsolateType isolateType) async {
|
Future<void> init(InitIsolateType isolateType) async {
|
||||||
if (_hasInitedInThisIsolate) {
|
if (_hasInitedInThisIsolate) {
|
||||||
_log.warning("[init] Already initialized in this isolate");
|
_log.warning("[init] Already initialized in this isolate");
|
||||||
|
@ -71,6 +74,14 @@ Future<void> init(InitIsolateType isolateType) async {
|
||||||
await _initDiContainer(isolateType);
|
await _initDiContainer(isolateType);
|
||||||
_initVisibilityDetector();
|
_initVisibilityDetector();
|
||||||
|
|
||||||
|
if (isolateType == InitIsolateType.main) {
|
||||||
|
try {
|
||||||
|
_isNewGMapsRenderer = await Activity.isNewGMapsRenderer();
|
||||||
|
} catch (e, stackTrace) {
|
||||||
|
_log.severe("[init] Failed while isNewGMapsRenderer", e, stackTrace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_hasInitedInThisIsolate = true;
|
_hasInitedInThisIsolate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,3 +243,4 @@ Future<sql.SqliteDb> _createDb(InitIsolateType isolateType) async {
|
||||||
|
|
||||||
final _log = Logger("app_init");
|
final _log = Logger("app_init");
|
||||||
var _hasInitedInThisIsolate = false;
|
var _hasInitedInThisIsolate = false;
|
||||||
|
var _isNewGMapsRenderer = false;
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:nc_photos/future_extension.dart';
|
||||||
|
|
||||||
class Activity {
|
class Activity {
|
||||||
static Future<String?> consumeInitialRoute() =>
|
static Future<String?> consumeInitialRoute() =>
|
||||||
_methodChannel.invokeMethod("consumeInitialRoute");
|
_methodChannel.invokeMethod("consumeInitialRoute");
|
||||||
|
|
||||||
|
static Future<bool> isNewGMapsRenderer() =>
|
||||||
|
_methodChannel.invokeMethod<bool>("isNewGMapsRenderer").notNull();
|
||||||
|
|
||||||
static const _methodChannel = MethodChannel("com.nkming.nc_photos/activity");
|
static const _methodChannel = MethodChannel("com.nkming.nc_photos/activity");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_map/flutter_map.dart';
|
import 'package:flutter_map/flutter_map.dart';
|
||||||
import 'package:latlong2/latlong.dart';
|
import 'package:latlong2/latlong.dart';
|
||||||
|
import 'package:nc_photos/app_init.dart' as app_init;
|
||||||
import 'package:nc_photos/mobile/platform.dart'
|
import 'package:nc_photos/mobile/platform.dart'
|
||||||
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
|
if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform;
|
||||||
import 'package:nc_photos/pref.dart';
|
import 'package:nc_photos/pref.dart';
|
||||||
|
@ -35,20 +36,21 @@ class GpsMap extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
build(BuildContext context) {
|
build(BuildContext context) {
|
||||||
// if (GpsMapProvider.values[Pref().getGpsMapProviderOr(0)] ==
|
if (GpsMapProvider.values[Pref().getGpsMapProviderOr(0)] ==
|
||||||
// GpsMapProvider.osm) {
|
GpsMapProvider.osm ||
|
||||||
|
!app_init.isNewGMapsRenderer()) {
|
||||||
return _OsmGpsMap(
|
return _OsmGpsMap(
|
||||||
center: center,
|
center: center,
|
||||||
zoom: zoom,
|
zoom: zoom,
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
);
|
);
|
||||||
// } else {
|
} else {
|
||||||
// return _GoogleGpsMap(
|
return _GoogleGpsMap(
|
||||||
// center: center,
|
center: center,
|
||||||
// zoom: zoom,
|
zoom: zoom,
|
||||||
// onTap: onTap,
|
onTap: onTap,
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A pair of latitude and longitude coordinates, stored as degrees
|
/// A pair of latitude and longitude coordinates, stored as degrees
|
||||||
|
|
Loading…
Reference in a new issue