Skip to content

Commit b9d2358

Browse files
author
cedafiso0403
committed
More
1 parent 6bdd545 commit b9d2358

File tree

9 files changed

+412
-41
lines changed

9 files changed

+412
-41
lines changed

android/app/src/main/kotlin/com/example/testing_application/MainActivity.kt

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,37 @@
11
package com.example.testing_application
22

3+
import android.annotation.SuppressLint
4+
import android.os.Handler
5+
import android.os.Looper
36
import io.flutter.embedding.android.FlutterActivity
47
import io.flutter.embedding.engine.FlutterEngine
8+
import io.flutter.plugin.common.EventChannel
59
import io.flutter.plugin.common.MethodChannel
10+
import kotlinx.coroutines.*
11+
import kotlinx.coroutines.flow.*
612
import java.util.*
713

814

915
class MainActivity: FlutterActivity() {
1016

1117

1218
private val CHANNEL = "testing_channel"
19+
private val EVENTCHANNEL = "on_device_found"
1320

14-
private lateinit var bluetoothController: AndroidBluetoothController
1521

22+
lateinit var bluetoothController: AndroidBluetoothController
23+
24+
@SuppressLint("MissingPermission")
1625
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
1726
super.configureFlutterEngine(flutterEngine)
1827

1928
// Initialize the Bluetooth controller
2029
bluetoothController = AndroidBluetoothController(context)
2130

31+
EventChannel(flutterEngine.dartExecutor.binaryMessenger, EVENTCHANNEL).setStreamHandler(
32+
OnDeviceFoundHandler(bluetoothController)
33+
)
34+
2235
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
2336
when (call.method) {
2437
"startBluetoothDiscovery" -> {
@@ -50,13 +63,63 @@ class MainActivity: FlutterActivity() {
5063
}
5164
}
5265

66+
override fun onResume() {
67+
super.onResume()
68+
}
69+
5370
override fun onDestroy() {
5471
super.onDestroy()
5572
// Release resources when the activity is destroyed
5673
bluetoothController.release()
5774
}
5875

76+
class OnDeviceFoundHandler(private val bluetoothController: AndroidBluetoothController) : EventChannel.StreamHandler {
77+
78+
// Declare our eventSink later it will be initialized
79+
private var eventSink: EventChannel.EventSink? = null
80+
81+
@SuppressLint("SimpleDateFormat")
82+
override fun onListen(p0: Any?, sink: EventChannel.EventSink) {
83+
println("CALLED")
84+
eventSink = sink
85+
val customScope = CoroutineScope(Dispatchers.Default + Job())
86+
var hashMap : HashMap<String?, String>
87+
= HashMap<String?, String> ()
88+
val _state = MutableStateFlow(DevicesState())
89+
val state = combine(bluetoothController.scannedDevices, _state) { scannedDevices, state ->
90+
println("MONDAAAAA")
91+
state.copy(
92+
scannedDevices = scannedDevices
93+
)
94+
}.stateIn(
95+
scope = customScope,
96+
started = SharingStarted.WhileSubscribed(5000),
97+
initialValue = _state.value
98+
)
99+
100+
val job = customScope.launch {
101+
state.collect { scannedDeviceState ->
102+
scannedDeviceState.scannedDevices.forEach { device ->
103+
hashMap[device.name] = device.address
104+
}
105+
withContext(Dispatchers.Main) {
106+
eventSink?.success(hashMap)
107+
}
108+
}
109+
}
110+
111+
}
59112

113+
override fun onCancel(p0: Any?) {
114+
eventSink = null
115+
}
116+
}
117+
118+
data class DevicesState(
119+
val scannedDevices: List<BluetoothDevice> = emptyList()
120+
)
60121
}
61122

62123

124+
125+
Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,63 @@
1+
import 'dart:io';
12
import 'dart:isolate';
23

34
class HeadLessApp {
45
SendPort? sendPort;
5-
66
dynamic message;
77

8-
void startHeadlessTask() async {
8+
void startHeadlessTask(Function startTime, Function currentTime) async {
99
final ReceivePort receivePort = ReceivePort();
1010
final isolate = await Isolate.spawn(
1111
_isolateEntryPoint,
1212
receivePort.sendPort,
1313
);
1414

15+
startTime(DateTime.now());
16+
1517
receivePort.listen(
1618
(message) {
1719
sendPort = message is SendPort ? message : null;
18-
print('Received message: $message');
20+
print('Headless Received message: $message');
21+
if (message is DateTime) {
22+
print("Headless Received time: $message");
23+
currentTime(message);
24+
}
1925
},
2026
);
2127

22-
sendPort?.send("Hello!");
28+
sendPort?.send("Headless Hello!");
2329
}
2430

2531
void sendInfoToHeadlessTask(dynamic message) {
32+
print("Headless Sending message to headless isolate: $message");
2633
sendPort?.send(message);
2734
}
2835

2936
// This function runs in the separate isolate
30-
static void _isolateEntryPoint(SendPort sendPort) {
37+
static void _isolateEntryPoint(
38+
SendPort sendPort,
39+
) {
3140
final ReceivePort receivePort = ReceivePort();
3241
sendPort.send(receivePort.sendPort);
3342

34-
receivePort.listen((message) {
35-
print("Received message in headless isolate: $message");
36-
sendPort.send("Hello from headless isolate!");
37-
// Call your headless task function here
38-
myHeadlessTask();
39-
});
43+
receivePort.listen(
44+
(message) {
45+
print("Headless Received message in headless isolate: $message");
46+
// Call your headless task function here
47+
myHeadlessTask(sendPort);
48+
},
49+
);
4050
}
4151

42-
static void myHeadlessTask() {
52+
static void myHeadlessTask(SendPort sendPort) {
4353
// Your background logic here
44-
print("Headless task is running...");
54+
while (true) {
55+
print("Headless Time now: ${DateTime.now()}");
56+
sendPort.send(DateTime.now());
57+
sleep(
58+
const Duration(seconds: 5),
59+
);
60+
}
61+
;
4562
}
4663
}

lib/cubit/test_cubit.dart

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1-
import 'package:bloc/bloc.dart';
21
import 'package:freezed_annotation/freezed_annotation.dart';
2+
import 'package:hydrated_bloc/hydrated_bloc.dart';
33

4-
part 'test_state.dart';
54
part 'test_cubit.freezed.dart';
5+
part 'test_cubit.g.dart';
6+
part 'test_state.dart';
67

7-
class TestCubit extends Cubit<TestState> {
8+
class TestCubit extends HydratedCubit<TestState> {
89
TestCubit()
910
: super(
1011
const TestState.initial(
1112
running: false,
1213
count: 0,
14+
startTime: null,
15+
currentTime: null,
1316
),
1417
);
1518

@@ -29,6 +32,22 @@ class TestCubit extends Cubit<TestState> {
2932
}
3033
}
3134

35+
void setStartTime(DateTime dateTime) {
36+
emit(
37+
state.copyWith(
38+
startTime: dateTime,
39+
),
40+
);
41+
}
42+
43+
void setCurrentTime(DateTime dateTime) {
44+
emit(
45+
state.copyWith(
46+
currentTime: dateTime,
47+
),
48+
);
49+
}
50+
3251
void start() {
3352
emit(
3453
state.copyWith(
@@ -45,4 +64,10 @@ class TestCubit extends Cubit<TestState> {
4564
),
4665
);
4766
}
67+
68+
@override
69+
TestState? fromJson(Map<String, dynamic> json) => TestState.fromJson(json);
70+
71+
@override
72+
Map<String, dynamic> toJson(TestState state) => state.toJson();
4873
}

0 commit comments

Comments
 (0)