From da4fc7f906836bd191e68f547bb77979d3130625 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 14 Apr 2022 15:37:47 +0800 Subject: [PATCH 1/2] temporary solution for Flutter catch Accessibility Input --- lib/common.dart | 45 +++++++++++++++++++++++++++++++++++++++++++++ lib/main.dart | 8 +++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/lib/common.dart b/lib/common.dart index d17eeffa5..ef0ced2b0 100644 --- a/lib/common.dart +++ b/lib/common.dart @@ -1,3 +1,4 @@ +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter_easyloading/flutter_easyloading.dart'; @@ -217,3 +218,47 @@ String readableFileSize(double size) { return (size / G).toStringAsFixed(2) + " GB"; } } + +/// Flutter can't not catch PointerMoveEvent when size is 1 +/// This will happen in Android AccessibilityService Input +/// android can't init dispatching size yet ,see: https://stackoverflow.com/questions/59960451/android-accessibility-dispatchgesture-is-it-possible-to-specify-pressure-for-a +/// use this temporary solution until flutter or android fixes the bug +class AccessibilityListener extends StatelessWidget { + final Widget? child; + static final offset = 100; + + AccessibilityListener({this.child}); + + @override + Widget build(BuildContext context) { + return Listener( + onPointerDown: (evt) { + if (evt.size == 1 && GestureBinding.instance != null) { + GestureBinding.instance!.handlePointerEvent(PointerAddedEvent( + pointer: evt.pointer + offset, position: evt.position)); + GestureBinding.instance!.handlePointerEvent(PointerDownEvent( + pointer: evt.pointer + offset, + size: 0.1, + position: evt.position)); + } + }, + onPointerUp: (evt) { + if (evt.size == 1 && GestureBinding.instance != null) { + GestureBinding.instance!.handlePointerEvent(PointerUpEvent( + pointer: evt.pointer + offset, + size: 0.1, + position: evt.position)); + } + }, + onPointerMove: (evt) { + if (evt.size == 1 && GestureBinding.instance != null) { + GestureBinding.instance!.handlePointerEvent(PointerMoveEvent( + pointer: evt.pointer + offset, + size: 0.1, + delta: evt.delta, + position: evt.position)); + } + }, + child: child); + } +} diff --git a/lib/main.dart b/lib/main.dart index f02e8409a..4f8adc9e1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -41,7 +41,13 @@ class App extends StatelessWidget { navigatorObservers: [ FirebaseAnalyticsObserver(analytics: analytics), ], - builder: EasyLoading.init(), + builder: isAndroid + ? (_, child) { + return AccessibilityListener( + child: FlutterEasyLoading(child: child), + ); + } + : EasyLoading.init(), ), ); } From 8823c4f785d25d269e408f74a0ce705f72852d6e Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 14 Apr 2022 15:44:33 +0800 Subject: [PATCH 2/2] android icon --- assets/android.png | Bin 0 -> 1762 bytes lib/pages/connection_page.dart | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/android.png diff --git a/assets/android.png b/assets/android.png new file mode 100644 index 0000000000000000000000000000000000000000..3231003306c630840b052b8a9140f2ef6dbb466c GIT binary patch literal 1762 zcmcJQ`#%#3AIEpt&}3(lAql%_&8=MHsHus?mMJ8QnOLXexL2H5r;*!cnQKS$xa3x1 zGs-12xh|euk`~Ej*{SF>By$cq&L8l+&QH(x`}%&~uh;jN&*!&Kx+lq11H1m9shv zk|Az)xT8&VD7=whl5|DXnql%YtZO?Yn1FXa6F0FqxgadG1OR71?C+Fk(KF}QHUovc zdk?Q9^X}i6(d&4^v8vN2dcXr79bQneji)EdEjtV_>_yg)rKDB*3AL0a_*Xw1`WrY>e}M?>xLKp zsQIg>>dVZV{PJo>l?43Fu6=DOq{l~j?ZBhwqE?6k+2R2OXJaZ$La{>%Fu7QgVF@ao zxkI|0Vle$K7;Jm3!`)Du;_kzQ_3MWB6z21eHEY2dO(N|&PCC~JH7IV68qLxU9tn&A zU~h75m`VG0u|Ga7?T1Rqju2P=LD*$kmXe`V4u)XUhUdHfRKQPsD3{5Z;G}`WDh4zv zs*n4N?%26VBz-4_yXcuq=KXYJ;p-b#XsWVG>>OfbhUL2gN?q9D=!n<#5JOOPAAMs0 z2c(E1s!@>0)oW^>tl`jxWSV zR!?M&?!F*6p0jyXNFem|h$m<}Dkxme%pjn`UPpa>^n$GLZeN(>MT>mpmE1O>vgiW^s85PDPtgDsHE5MD7sW85-eyKd zovnpbeE!z^dz07hwQ{ZJNWNlJiOZU_(x?jG^MZ7zfTdI zSzq6YyY|Nxnl(`goOR07>Z-dN|1HI>tq`99AFq+ZDaow&&1yQca0m0JF3o8iR-~qR z+5dbOt6^NYH+KtP2GV+JDbLq6St~Ts7wfX>D9WH7cD0o6+BgSO)n+C!a2A>cht#o1 zohsyujy8=&9O^-HLYK?@gPmqbZPgm5uvgZd1`fR?MgLKuArQ-ep$0l#FUV^nZ#sh3 zYE*3LIre7-nTTn6WL5aM zh;+N}+!2dk=|ZJUh4<_n_6MM~YDYIxTOjxelXsnK`u^$Zs=YB84-zQ$c9WFdc?zn- zpqamZyu;+&cN6VD_>P9eu^EpW=1->_BqWB(sUt^QE*8FjUIKxhpKTevcip&_-s*hA zcxO-==ikK7&CRrsHdi6mZu{U8R2dN5o_ch?`xNV8nM72)I<}UV<`2G3i(;8DszdTR z@1CTDrD(SAST=FLg9M?8!UHoe19~?_&1Jb!{t9i>AvA`kzemqX)YRMGz6>Hwhu{rF zP9q-@(?6Lo_D1O7REN*CTuv+b=o1}$`Iv4vKdCNw<5WE(hnDhdc;HZ>^mRV^9;8aA k%{7<5Fg-08pg&W9wzw-rraZr!+Z6&JxRCI5$EeJ|0aB!T!2kdN literal 0 HcmV?d00001 diff --git a/lib/pages/connection_page.dart b/lib/pages/connection_page.dart index 0cd12882e..deca3cee5 100644 --- a/lib/pages/connection_page.dart +++ b/lib/pages/connection_page.dart @@ -188,7 +188,7 @@ class _ConnectionPageState extends State { platform = platform.toLowerCase(); if (platform == 'mac os') platform = 'mac'; - else if (platform != 'linux') platform = 'win'; + else if (platform != 'linux' && platform != 'android') platform = 'win'; return Image.asset('assets/$platform.png', width: 24, height: 24); }