diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 7cc01825..21e8dd6f 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -35,5 +35,17 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java b/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java
index 8acd2a18..6bf5b22b 100644
--- a/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java
+++ b/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java
@@ -22,13 +22,15 @@ import io.flutter.util.PathUtils;
public class MainActivity extends FlutterActivity implements MethodCallHandler {
private static final String CHANNEL_NAME = "gitjournal.io/git";
+ static MethodChannel channel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
- new MethodChannel(getFlutterView(), CHANNEL_NAME).setMethodCallHandler(this);
+ channel = new MethodChannel(getFlutterView(), CHANNEL_NAME);
+ channel.setMethodCallHandler(this);
}
@Override
diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/UriReceiverActivity.java b/android/app/src/main/java/io/gitjournal/gitjournal/UriReceiverActivity.java
new file mode 100644
index 00000000..4cc670ab
--- /dev/null
+++ b/android/app/src/main/java/io/gitjournal/gitjournal/UriReceiverActivity.java
@@ -0,0 +1,35 @@
+package io.gitjournal.gitjournal;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.app.Activity;
+import android.net.*;
+
+import android.content.Intent;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class UriReceiverActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Uri data = getIntent().getData();
+
+ Map map = new HashMap<>();
+ map.put("URL", data.toString());
+
+ MainActivity.channel.invokeMethod("onURL", map);
+
+ // Now that all data has been sent back to Dart-land, we should re-open the Flutter
+ // activity. Due to the manifest-setting of the MainActivity ("singleTop), only a single
+ // instance will exist, popping the old one back up and destroying the preceding
+ // activities on the backstack, such as the custom tab.
+ // Flags taken from how the AppAuth-library accomplishes the same thing
+ Intent mainIntent = new Intent(this, MainActivity.class);
+ mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(mainIntent);
+ finish();
+ }
+
+}
diff --git a/lib/oauthapp.dart b/lib/oauthapp.dart
new file mode 100644
index 00000000..0ab4faa7
--- /dev/null
+++ b/lib/oauthapp.dart
@@ -0,0 +1,51 @@
+import 'package:flutter/material.dart';
+import 'package:journal/apis/git.dart';
+import 'package:flutter/services.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+const _platform = const MethodChannel('gitjournal.io/git');
+
+// Actual message handler:
+Future _handleMessages(MethodCall call) async {
+ switch (call.method) {
+ case "onURL":
+ print("Call onURL" + call.arguments.toString());
+ // Do something nice using call.arguments["URL"]
+ }
+}
+
+class OAuthApp extends StatefulWidget {
+ @override
+ OAuthAppState createState() {
+ return new OAuthAppState();
+ }
+}
+
+class OAuthAppState extends State {
+ void initState() {
+ super.initState();
+ _platform.setMethodCallHandler(_handleMessages);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return new MaterialApp(
+ title: 'OAuth App',
+ home: Scaffold(
+ appBar: AppBar(
+ title: Text('OAuth Test'),
+ ),
+ body: Column(children: [
+ RaisedButton(
+ child: Text("Open OAuth URL"),
+ onPressed: () {
+ var url =
+ "https://github.com/login/oauth/authorize?client_id=aa3072cbfb02b1db14ed&scope=repo";
+ launch(url);
+ },
+ ),
+ ]),
+ ),
+ );
+ }
+}