WIP Share media refactoring

This commit is contained in:
Yegor Vialov 2019-12-11 18:24:09 +00:00
parent 9cc60a136b
commit 9eb74b5a8d
5 changed files with 30 additions and 20 deletions

View File

@ -48,6 +48,7 @@
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </intent-filter>
<intent-filter android:autoVerify="true"> <intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@ -56,6 +57,11 @@
android:scheme="haclient" android:scheme="haclient"
android:host="auth" /> android:host="auth" />
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity> </activity>
<service <service

View File

@ -3,9 +3,8 @@ package com.keyboardcrumbs.hassclient;
import android.os.Bundle; import android.os.Bundle;
import io.flutter.app.FlutterActivity; import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant; import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.share.FlutterShareReceiverActivity;
public class MainActivity extends FlutterShareReceiverActivity { public class MainActivity extends FlutterActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {

View File

@ -22,8 +22,7 @@ import 'package:device_info/device_info.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:in_app_purchase/in_app_purchase.dart'; import 'package:in_app_purchase/in_app_purchase.dart';
import 'plugins/circular_slider/single_circular_slider.dart'; import 'plugins/circular_slider/single_circular_slider.dart';
import 'package:share/receive_share_state.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:share/share.dart';
import 'plugins/dynamic_multi_column_layout.dart'; import 'plugins/dynamic_multi_column_layout.dart';
import 'plugins/spoiler_card.dart'; import 'plugins/spoiler_card.dart';
import 'package:uni_links/uni_links.dart'; import 'package:uni_links/uni_links.dart';

View File

@ -9,7 +9,7 @@ class MainPage extends StatefulWidget {
_MainPageState createState() => new _MainPageState(); _MainPageState createState() => new _MainPageState();
} }
class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObserver, TickerProviderStateMixin { class _MainPageState extends State<MainPage> with WidgetsBindingObserver, TickerProviderStateMixin {
StreamSubscription<List<PurchaseDetails>> _subscription; StreamSubscription<List<PurchaseDetails>> _subscription;
StreamSubscription _stateSubscription; StreamSubscription _stateSubscription;
@ -22,6 +22,7 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
StreamSubscription _showPopupMessageSubscription; StreamSubscription _showPopupMessageSubscription;
StreamSubscription _reloadUISubscription; StreamSubscription _reloadUISubscription;
StreamSubscription _showPageSubscription; StreamSubscription _showPageSubscription;
StreamSubscription _intentDataStreamSubscription;
int _previousViewCount; int _previousViewCount;
bool _showLoginButton = false; bool _showLoginButton = false;
bool _preventAppRefresh = false; bool _preventAppRefresh = false;
@ -40,7 +41,6 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
updateDeviceLocationIsolate, updateDeviceLocationIsolate,
isInDebugMode: false isInDebugMode: false
); );
enableShareReceiving();
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
_firebaseMessaging.configure( _firebaseMessaging.configure(
@ -60,6 +60,13 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
_firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true)); _firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true));
_intentDataStreamSubscription = ReceiveSharingIntent.getTextStream().listen((String value) {
Logger.d("[SHARED] Got share from stream: $value");
_handleShare(value);
}, onError: (err) {
Logger.w("[SHARE] getLinkStream error: $err");
});
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
var initializationSettingsAndroid = var initializationSettingsAndroid =
new AndroidInitializationSettings('mini_icon'); new AndroidInitializationSettings('mini_icon');
@ -81,12 +88,6 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
_fullLoad(); _fullLoad();
} }
@override void receiveShare(Share shared) {
if (shared.mimeType == ShareType.TYPE_PLAIN_TEXT) {
_savedSharedText = shared.text;
}
}
Future onSelectNotification(String payload) async { Future onSelectNotification(String payload) async {
if (payload != null) { if (payload != null) {
Logger.d('Notification clicked: ' + payload); Logger.d('Notification clicked: ' + payload);
@ -131,12 +132,17 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
}); });
} }
_fetchData() async { _handleShare(String text) {
if (_savedSharedText != null && !HomeAssistant().isNoEntities) { if (text != null && !HomeAssistant().isNoEntities) {
Logger.d("Got shared text: $_savedSharedText"); Navigator.pushNamed(context, "/play-media", arguments: {"url": text});
Navigator.pushNamed(context, "/play-media", arguments: {"url": _savedSharedText});
_savedSharedText = null;
} }
}
_fetchData() async {
ReceiveSharingIntent.getInitialText().then((String value) {
Logger.d("[SHARED] Got initial share: $value");
_handleShare(value);
});
await HomeAssistant().fetchData().then((_) { await HomeAssistant().fetchData().then((_) {
_hideBottomBar(); _hideBottomBar();
if (_entityToShow != null) { if (_entityToShow != null) {
@ -918,6 +924,7 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
_subscription?.cancel(); _subscription?.cancel();
_showPageSubscription?.cancel(); _showPageSubscription?.cancel();
_reloadUISubscription?.cancel(); _reloadUISubscription?.cancel();
_intentDataStreamSubscription?.cancel();
//TODO disconnect //TODO disconnect
//widget.homeAssistant?.disconnect(); //widget.homeAssistant?.disconnect();
super.dispose(); super.dispose();

View File

@ -30,9 +30,8 @@ dependencies:
workmanager: ^0.1.5 workmanager: ^0.1.5
battery: ^0.3.1+1 battery: ^0.3.1+1
sentry: ^2.3.1 sentry: ^2.3.1
share: receive_sharing_intent: ^1.3.2
git:
url: https://github.com/d-silveira/flutter-share.git
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: