Compare commits
	
		
			No commits in common. "c905b3242d37eb87bea19baf5666812bb0567287" and "1852f2d1987c210f2eacdfc92c8d49206d044684" have entirely different histories.
		
	
	
		
			c905b3242d
			...
			1852f2d198
		
	
		
| @ -27,7 +27,3 @@ Thanks to [ekasetiawans](https://github.com/ekasetiawans) for [flutter_backgroun | |||||||
| was essentially the blueprint for the service and background service APIs. They were reimplemented | was essentially the blueprint for the service and background service APIs. They were reimplemented | ||||||
| to allow the root isolate to pass some additional data to the service, which `flutter_background_service` | to allow the root isolate to pass some additional data to the service, which `flutter_background_service` | ||||||
| did not support. | did not support. | ||||||
| 
 |  | ||||||
| Thanks to [nschairer](https://github.com/nschairer) for [flutter_keyboard_height](https://github.com/nschairer/keyboard_height_plugin), which was the base for keeping track of the keyboard height. |  | ||||||
| Due to having an issue with the height calculation if the Android device uses gesture navigation, I |  | ||||||
| [forked the package](https://git.polynom.me/moxxy/keyboard_height_plugin) and modified the height calculation. |  | ||||||
|  | |||||||
| @ -2,9 +2,6 @@ package org.moxxy.moxxy_native | |||||||
| 
 | 
 | ||||||
| const val TAG = "moxxy_native" | const val TAG = "moxxy_native" | ||||||
| 
 | 
 | ||||||
| // The event channel name for the keyboard height |  | ||||||
| const val KEYBOARD_HEIGHT_EVENT_CHANNEL_NAME = "org.moxxy.moxxyv2/notification_stream" |  | ||||||
| 
 |  | ||||||
| // The size of buffers to use for various operations | // The size of buffers to use for various operations | ||||||
| const val BUFFER_SIZE = 4096 | const val BUFFER_SIZE = 4096 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -29,7 +29,6 @@ import org.moxxy.moxxy_native.notifications.NotificationsImplementation | |||||||
| import org.moxxy.moxxy_native.picker.FilePickerType | import org.moxxy.moxxy_native.picker.FilePickerType | ||||||
| import org.moxxy.moxxy_native.picker.MoxxyPickerApi | import org.moxxy.moxxy_native.picker.MoxxyPickerApi | ||||||
| import org.moxxy.moxxy_native.picker.PickerResultListener | import org.moxxy.moxxy_native.picker.PickerResultListener | ||||||
| import org.moxxy.moxxy_native.platform.KeyboardStreamHandler |  | ||||||
| import org.moxxy.moxxy_native.platform.MoxxyPlatformApi | import org.moxxy.moxxy_native.platform.MoxxyPlatformApi | ||||||
| import org.moxxy.moxxy_native.platform.PlatformImplementation | import org.moxxy.moxxy_native.platform.PlatformImplementation | ||||||
| import org.moxxy.moxxy_native.service.BackgroundService | import org.moxxy.moxxy_native.service.BackgroundService | ||||||
| @ -103,10 +102,6 @@ class MoxxyNativePlugin : FlutterPlugin, ActivityAware, ServiceAware, BroadcastR | |||||||
|             IntentFilter(SERVICE_FOREGROUND_METHOD_CHANNEL_KEY), |             IntentFilter(SERVICE_FOREGROUND_METHOD_CHANNEL_KEY), | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         // Special handling for the keyboard height |  | ||||||
|         val keyboardChannel = EventChannel(flutterPluginBinding.getBinaryMessenger(), KEYBOARD_HEIGHT_EVENT_CHANNEL_NAME) |  | ||||||
|         keyboardChannel?.setStreamHandler(KeyboardStreamHandler) |  | ||||||
| 
 |  | ||||||
|         // Register the picker handler |         // Register the picker handler | ||||||
|         pickerListener = PickerResultListener(context!!) |         pickerListener = PickerResultListener(context!!) | ||||||
|         Log.d(TAG, "Attached to engine") |         Log.d(TAG, "Attached to engine") | ||||||
| @ -123,24 +118,20 @@ class MoxxyNativePlugin : FlutterPlugin, ActivityAware, ServiceAware, BroadcastR | |||||||
|     override fun onAttachedToActivity(binding: ActivityPluginBinding) { |     override fun onAttachedToActivity(binding: ActivityPluginBinding) { | ||||||
|         activity = binding.activity |         activity = binding.activity | ||||||
|         binding.addActivityResultListener(pickerListener) |         binding.addActivityResultListener(pickerListener) | ||||||
|         KeyboardStreamHandler.activity = activity |  | ||||||
|         Log.d(TAG, "Attached to activity") |         Log.d(TAG, "Attached to activity") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun onDetachedFromActivityForConfigChanges() { |     override fun onDetachedFromActivityForConfigChanges() { | ||||||
|         activity = null |         activity = null | ||||||
|         KeyboardStreamHandler.activity = null |  | ||||||
|         Log.d(TAG, "Detached from activity") |         Log.d(TAG, "Detached from activity") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { |     override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { | ||||||
|         activity = binding.activity |         activity = binding.activity | ||||||
|         KeyboardStreamHandler.activity = activity |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun onDetachedFromActivity() { |     override fun onDetachedFromActivity() { | ||||||
|         activity = null |         activity = null | ||||||
|         KeyboardStreamHandler.activity = null |  | ||||||
|         Log.d(TAG, "Detached from activity") |         Log.d(TAG, "Detached from activity") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -164,7 +164,7 @@ class NotificationReceiver : BroadcastReceiver() { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun handleTap(context: Context, intent: Intent) { |     fun handleTap(context: Context, intent: Intent) { | ||||||
|         MoxxyEventChannels.notificationEventSink?.success( |         MoxxyEventChannels.notificationEventSink?.success( | ||||||
|             NotificationEvent( |             NotificationEvent( | ||||||
|                 intent.getLongExtra(NOTIFICATION_EXTRA_ID_KEY, -1), |                 intent.getLongExtra(NOTIFICATION_EXTRA_ID_KEY, -1), | ||||||
|  | |||||||
| @ -1,73 +0,0 @@ | |||||||
| package org.moxxy.moxxy_native.platform |  | ||||||
| 
 |  | ||||||
| import android.app.Activity |  | ||||||
| import android.graphics.Rect |  | ||||||
| import android.util.Log |  | ||||||
| import android.view.View |  | ||||||
| import android.view.ViewTreeObserver |  | ||||||
| import androidx.core.view.ViewCompat |  | ||||||
| import androidx.core.view.WindowInsetsCompat |  | ||||||
| import io.flutter.plugin.common.EventChannel |  | ||||||
| import org.moxxy.moxxy_native.MoxxyEventChannels |  | ||||||
| import org.moxxy.moxxy_native.TAG |  | ||||||
| 
 |  | ||||||
| object KeyboardStreamHandler : EventChannel.StreamHandler { |  | ||||||
|     // The currently active activity. Set by @MoxxyNativePlugin. |  | ||||||
|     var activity: Activity? = null |  | ||||||
| 
 |  | ||||||
|     // The current bottom inset. |  | ||||||
|     private var bottomInset: Int = 0 |  | ||||||
| 
 |  | ||||||
|     // The current event sink to use for sending events to the UI. |  | ||||||
|     private var sink: EventChannel.EventSink? = null |  | ||||||
| 
 |  | ||||||
|     private fun handleKeyboardHeightCheck(rootView: View?) { |  | ||||||
|         rootView?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { |  | ||||||
|             override fun onGlobalLayout() { |  | ||||||
|                 val r = Rect() |  | ||||||
|                 rootView.getWindowVisibleDisplayFrame(r) |  | ||||||
| 
 |  | ||||||
|                 val screenHeight = rootView.height |  | ||||||
|                 // Also subtract the height of the bottom inset as the SafeArea with "bottom: false" |  | ||||||
|                 // allows us to draw under the bottom system bar, if it is there. |  | ||||||
|                 val keypadHeight = screenHeight - r.bottom - bottomInset |  | ||||||
| 
 |  | ||||||
|                 val displayMetrics = activity?.resources?.displayMetrics |  | ||||||
|                 val logicalKeypadHeight = keypadHeight / (displayMetrics?.density ?: 1f) |  | ||||||
| 
 |  | ||||||
|                 if (keypadHeight > screenHeight * 0.15) { |  | ||||||
|                     sink?.success(logicalKeypadHeight.toDouble()) |  | ||||||
|                 } else { |  | ||||||
|                     sink?.success(0.0) |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         }) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { |  | ||||||
|         // "register" the event sink |  | ||||||
|         sink = events |  | ||||||
| 
 |  | ||||||
|         val rootView = activity?.window?.decorView?.rootView |  | ||||||
|         handleKeyboardHeightCheck(rootView) |  | ||||||
| 
 |  | ||||||
|         if (rootView != null) { |  | ||||||
|             ViewCompat.setOnApplyWindowInsetsListener(rootView!!) { _, windowInsets -> |  | ||||||
|                 val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) |  | ||||||
|                 val triggerEvent = bottomInset != insets.bottom |  | ||||||
|                 bottomInset = insets.bottom |  | ||||||
| 
 |  | ||||||
|                 // Notify in case the inset changed |  | ||||||
|                 if (triggerEvent) handleKeyboardHeightCheck(rootView) |  | ||||||
| 
 |  | ||||||
|                 WindowInsetsCompat.CONSUMED |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         Log.d(TAG, "KeyboardStreamHandler: Attached stream") |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     override fun onCancel(arguments: Any?) { |  | ||||||
|         MoxxyEventChannels.notificationEventSink = null |  | ||||||
|         Log.d(TAG, "KeyboardStreamHandler: Detached stream") |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,5 +1,6 @@ | |||||||
| // ignore_for_file: avoid_print | // ignore_for_file: avoid_print | ||||||
| import 'dart:io'; | import 'dart:io'; | ||||||
|  | import 'dart:typed_data'; | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||||
| import 'package:get_it/get_it.dart'; | import 'package:get_it/get_it.dart'; | ||||||
| @ -50,19 +51,6 @@ class TestEvent extends BackgroundEvent { | |||||||
| class MyAppState extends State<MyApp> { | class MyAppState extends State<MyApp> { | ||||||
|   String? imagePath; |   String? imagePath; | ||||||
| 
 | 
 | ||||||
|   @override |  | ||||||
|   void initState() { |  | ||||||
|     super.initState(); |  | ||||||
| 
 |  | ||||||
|     const EventChannel('org.moxxy.moxxyv2/notification_stream') |  | ||||||
|         .receiveBroadcastStream() |  | ||||||
|         .listen( |  | ||||||
|       (event) { |  | ||||||
|         print('Keyboard height: ${event as double}'); |  | ||||||
|       }, |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return MaterialApp( |     return MaterialApp( | ||||||
| @ -233,7 +221,6 @@ class MyAppState extends State<MyApp> { | |||||||
|               }, |               }, | ||||||
|               child: const Text('Share some text'), |               child: const Text('Share some text'), | ||||||
|             ), |             ), | ||||||
|             const TextField(), |  | ||||||
|           ], |           ], | ||||||
|         ), |         ), | ||||||
|       ), |       ), | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| name: moxxy_native | name: moxxy_native | ||||||
| description: Interactions with the system for Moxxy | description: Interactions with the system for Moxxy | ||||||
| version: 0.3.0 | version: 0.2.0 | ||||||
| publish_to: https://git.polynom.me/api/packages/Moxxy/pub | publish_to: https://git.polynom.me/api/packages/Moxxy/pub | ||||||
| homepage:  | homepage:  | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user