From 02b7238cbb500fb10f2ade3a0342255c8e10a5c1 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 15 Jun 2016 12:35:06 -0700 Subject: [PATCH] Android platform implementation of uri_launcher.mojom (#2760) --- sky/services/platform/BUILD.gn | 1 + .../org/domokit/platform/UriLauncherImpl.java | 43 +++++++++++++++++++ .../android/io/flutter/view/FlutterMain.java | 9 ++++ 3 files changed, 53 insertions(+) create mode 100644 sky/services/platform/src/org/domokit/platform/UriLauncherImpl.java diff --git a/sky/services/platform/BUILD.gn b/sky/services/platform/BUILD.gn index 9ed762df6a3..efaedb79ae4 100644 --- a/sky/services/platform/BUILD.gn +++ b/sky/services/platform/BUILD.gn @@ -25,6 +25,7 @@ if (is_android) { "src/org/domokit/platform/PathProviderImpl.java", "src/org/domokit/platform/SystemChromeImpl.java", "src/org/domokit/platform/SystemSoundImpl.java", + "src/org/domokit/platform/UriLauncherImpl.java", ] deps = [ diff --git a/sky/services/platform/src/org/domokit/platform/UriLauncherImpl.java b/sky/services/platform/src/org/domokit/platform/UriLauncherImpl.java new file mode 100644 index 00000000000..a747e572200 --- /dev/null +++ b/sky/services/platform/src/org/domokit/platform/UriLauncherImpl.java @@ -0,0 +1,43 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.domokit.platform; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; + +import org.chromium.mojo.system.MojoException; + +import org.chromium.mojom.flutter.platform.UriLauncher; + +/** + * Android implementation of UriLauncher. + */ +public class UriLauncherImpl implements UriLauncher { + private final Activity mActivity; + + public UriLauncherImpl(Activity activity) { + mActivity = activity; + } + + @Override + public void close() {} + + @Override + public void onConnectionError(MojoException e) {} + + @Override + public void launch(String urlString, LaunchResponse callback) { + try { + Intent launchIntent = new Intent(Intent.ACTION_VIEW); + launchIntent.setData(Uri.parse(urlString)); + mActivity.startActivity(launchIntent); + callback.call(true); + } catch (java.lang.Exception exception) { + // In case of parsing or ActivityNotFound errors + callback.call(false); + } + } +} diff --git a/sky/shell/platform/android/io/flutter/view/FlutterMain.java b/sky/shell/platform/android/io/flutter/view/FlutterMain.java index 23093bb23db..909e204e88e 100644 --- a/sky/shell/platform/android/io/flutter/view/FlutterMain.java +++ b/sky/shell/platform/android/io/flutter/view/FlutterMain.java @@ -38,6 +38,7 @@ import org.chromium.mojom.flutter.platform.HapticFeedback; import org.chromium.mojom.flutter.platform.PathProvider; import org.chromium.mojom.flutter.platform.SystemChrome; import org.chromium.mojom.flutter.platform.SystemSound; +import org.chromium.mojom.flutter.platform.UriLauncher; import org.chromium.mojom.media.MediaService; import org.chromium.mojom.mojo.NetworkService; import org.chromium.mojom.sensors.SensorService; @@ -50,6 +51,7 @@ import org.domokit.platform.HapticFeedbackImpl; import org.domokit.platform.PathProviderImpl; import org.domokit.platform.SystemChromeImpl; import org.domokit.platform.SystemSoundImpl; +import org.domokit.platform.UriLauncherImpl; import org.domokit.vsync.VSyncProviderImpl; /** @@ -210,6 +212,13 @@ public class FlutterMain { return SystemSound.MANAGER.bind(new SystemSoundImpl((android.app.Activity) context), pipe); } }); + + registry.register(UriLauncher.MANAGER.getName(), new ServiceFactory() { + @Override + public Binding connectToService(Context context, Core core, MessagePipeHandle pipe) { + return UriLauncher.MANAGER.bind(new UriLauncherImpl((android.app.Activity) context), pipe); + } + }); } /**