diff --git a/example/lib/packages/packages.dart b/example/lib/packages/packages.dart index 1d41e86..3467f6d 100644 --- a/example/lib/packages/packages.dart +++ b/example/lib/packages/packages.dart @@ -32,6 +32,7 @@ import 'package:flutter_example_packages/packages/scoped_model/package.dart'; import 'package:flutter_example_packages/packages/shared_preferences/package.dart'; import 'package:flutter_example_packages/packages/sqflite/package.dart'; import 'package:flutter_example_packages/packages/universal_io/package.dart'; +import 'package:flutter_example_packages/packages/wakelock/package.dart'; import 'package:flutter_example_packages/packages/xdga_directories/package.dart'; /// List app packages @@ -67,5 +68,6 @@ final packages = [ packageSharedPreferences, packageSqflite, packageUniversalIO, + packageWakelock, packageXdgaDirectories, ]; diff --git a/example/lib/packages/wakelock/model.dart b/example/lib/packages/wakelock/model.dart new file mode 100644 index 0000000..40aae9c --- /dev/null +++ b/example/lib/packages/wakelock/model.dart @@ -0,0 +1,42 @@ +// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +// SPDX-License-Identifier: BSD-3-Clause +import 'package:flutter/widgets.dart'; +import 'package:scoped_model/scoped_model.dart'; +import 'package:wakelock/wakelock.dart'; + +/// Model for [WakelockPage] +class WakelockModel extends Model { + /// Get [ScopedModel] + static WakelockModel of(BuildContext context) => + ScopedModel.of(context); + + /// Error + String? _error; + + /// Public error + String? get error => _error; + + /// Public is error + bool get isError => _error != null; + + /// Check is enable Wakelock + Future isEnable() async { + try { + return await Wakelock.enabled; + } catch (e) { + _error = e.toString(); + } + notifyListeners(); + return null; + } + + /// Set state Wakelock + Future setStateWakelock(bool enable) async { + try { + await Wakelock.toggle(enable: enable); + } catch (e) { + _error = e.toString(); + } + notifyListeners(); + } +} diff --git a/example/lib/packages/wakelock/package.dart b/example/lib/packages/wakelock/package.dart new file mode 100644 index 0000000..8fdae46 --- /dev/null +++ b/example/lib/packages/wakelock/package.dart @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +// SPDX-License-Identifier: BSD-3-Clause +import 'package:flutter_example_packages/base/package/package_page.dart'; +import 'package:flutter_example_packages/packages/wakelock/page.dart'; +import 'package:get_it/get_it.dart'; + +import 'model.dart'; + +/// Package values +final packageWakelock = PackagePage( + key: 'wakelock', + descEN: ''' + Plugin that allows you to keep the device screen awake, i.e. + prevent the screen from sleeping. + ''', + descRU: ''' + Плагин, который позволяет держать экран устройства в активном состоянии, + т. е. предотвращать переход экрана в спящий режим. + ''', + version: '0.6.2', + isPlatformDependent: true, + page: () => WakelockPage(), + init: () { + GetIt.instance.registerFactory(() => WakelockModel()); + }, +); diff --git a/example/lib/packages/wakelock/page.dart b/example/lib/packages/wakelock/page.dart new file mode 100644 index 0000000..2493763 --- /dev/null +++ b/example/lib/packages/wakelock/page.dart @@ -0,0 +1,89 @@ +// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +// SPDX-License-Identifier: BSD-3-Clause +import 'package:flutter/material.dart'; +import 'package:flutter_example_packages/base/di/app_di.dart'; +import 'package:flutter_example_packages/base/package/package.dart'; +import 'package:flutter_example_packages/packages/wakelock/model.dart'; +import 'package:flutter_example_packages/packages/wakelock/package.dart'; +import 'package:flutter_example_packages/theme/colors.dart'; +import 'package:flutter_example_packages/widgets/base/export.dart'; +import 'package:flutter_example_packages/widgets/blocks/block_alert.dart'; +import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; +import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; +import 'package:flutter_example_packages/widgets/texts/export.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class WakelockPage extends AppStatefulWidget { + WakelockPage({ + super.key, + }); + + final Package package = packageWakelock; + + @override + State createState() => _WakelockPageState(); +} + +class _WakelockPageState extends AppState { + @override + Widget buildWide( + BuildContext context, + MediaQueryData media, + AppLocalizations l10n, + ) { + return BlockLayout( + model: getIt(), + title: widget.package.key, + builder: (context, child, model) { + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + BlockInfoPackage(widget.package), + BlockAlert(model.error), + if (!model.isError) + Row( + children: [ + Expanded( + flex: 1, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextTitleLarge(l10n.wakelockTitle), + const SizedBox(height: 8), + TextBodyMedium(l10n.wakelockDesc), + ], + ), + ), + FutureBuilder( + future: model.isEnable(), + builder: ( + BuildContext context, + AsyncSnapshot snapshot, + ) { + final value = snapshot.data ?? false; + return Expanded( + flex: 0, + child: Switch( + // This bool value toggles the switch. + value: value, + activeColor: AppColors.secondary, + onChanged: (bool value) { + model.setStateWakelock(value); + }, + ), + ); + }, + ), + ], + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 5ee9b10..68e6c8d 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -153,6 +153,22 @@ dependencies: # ref: master # path: packages/sqflite/sqflite_aurora + ## https://github.com/creativecreatorormaybenot/wakelock + ## https://github.com/keygenqt/wakelock - up win32 + wakelock: + git: + url: https://github.com/keygenqt/wakelock.git + ref: wakelock_windows_git + path: wakelock + + ## https://gitlab.com/omprussia/flutter/flutter-plugins/-/tree/master/packages/wakelock/wakelock_aurora + wakelock_aurora: + path: ../packages/wakelock/wakelock_aurora +# git: +# url: https://gitlab.com/omprussia/flutter/flutter-plugins.git +# ref: master +# path: packages/wakelock/wakelock_aurora + dev_dependencies: flutter_test: sdk: diff --git a/packages/wakelock/wakelock_aurora/.gitignore b/packages/wakelock/wakelock_aurora/.gitignore new file mode 100644 index 0000000..96486fd --- /dev/null +++ b/packages/wakelock/wakelock_aurora/.gitignore @@ -0,0 +1,30 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.packages +build/ diff --git a/packages/wakelock/wakelock_aurora/README.md b/packages/wakelock/wakelock_aurora/README.md new file mode 100644 index 0000000..b281e33 --- /dev/null +++ b/packages/wakelock/wakelock_aurora/README.md @@ -0,0 +1,37 @@ +# wakelock_aurora + +The Aurora implementation of [`wakelock`](https://pub.dev/packages/wakelock). + +## Usage +This package is not an _endorsed_ implementation of `wakelock`. +Therefore, you have to include `wakelock_aurora` alongside `wakelock` as dependencies in your `pubspec.yaml` file. + +**pubspec.yaml** + +```yaml +dependencies: + # wakelock: ^0.6.2 - Version is outdated + wakelock: + git: + url: https://github.com/keygenqt/wakelock.git + ref: wakelock_windows_git + path: wakelock + + wakelock_aurora: + git: + url: https://gitlab.com/omprussia/flutter/flutter-plugins.git + ref: master + path: packages/wakelock/wakelock_aurora +``` + +***.dart** + +```dart +import 'package:wakelock/wakelock.dart'; + +// The following line will enable wakelock. +Wakelock.enable(); + +// The next line disables the wakelock again. +Wakelock.disable(); +``` diff --git a/packages/wakelock/wakelock_aurora/analysis_options.yaml b/packages/wakelock/wakelock_aurora/analysis_options.yaml new file mode 100644 index 0000000..8a1fdc6 --- /dev/null +++ b/packages/wakelock/wakelock_aurora/analysis_options.yaml @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +# SPDX-License-Identifier: BSD-3-Clause + +include: package:flutter_lints/flutter.yaml diff --git a/packages/wakelock/wakelock_aurora/data/com.nokia.mce.request.xml b/packages/wakelock/wakelock_aurora/data/com.nokia.mce.request.xml new file mode 100644 index 0000000..ee47a8a --- /dev/null +++ b/packages/wakelock/wakelock_aurora/data/com.nokia.mce.request.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/packages/wakelock/wakelock_aurora/lib/com_nokia_mce_request.dart b/packages/wakelock/wakelock_aurora/lib/com_nokia_mce_request.dart new file mode 100644 index 0000000..8120726 --- /dev/null +++ b/packages/wakelock/wakelock_aurora/lib/com_nokia_mce_request.dart @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +// SPDX-License-Identifier: BSD-3-Clause +import 'package:dbus/dbus.dart'; + +class ComNokiaMceRequest extends DBusRemoteObject { + ComNokiaMceRequest(DBusClient client, String destination, + {DBusObjectPath path = + const DBusObjectPath.unchecked('/com/nokia/mce/request')}) + : super(client, name: destination, path: path); + + /// Invokes com.nokia.mce.request.req_display_blanking_pause() + Future callreq_display_blanking_pause( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + await callMethod('com.nokia.mce.request', 'req_display_blanking_pause', [], + replySignature: DBusSignature(''), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + } +} diff --git a/packages/wakelock/wakelock_aurora/lib/wakelock_aurora.dart b/packages/wakelock/wakelock_aurora/lib/wakelock_aurora.dart new file mode 100644 index 0000000..d254985 --- /dev/null +++ b/packages/wakelock/wakelock_aurora/lib/wakelock_aurora.dart @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +// SPDX-License-Identifier: BSD-3-Clause +import 'dart:async'; + +import 'package:dbus/dbus.dart'; +import 'package:wakelock_platform_interface/wakelock_platform_interface.dart'; +import 'com_nokia_mce_request.dart'; + +class WakelockAurora extends WakelockPlatformInterface { + bool _enable = false; + Timer? _timer; + + static void registerWith() { + WakelockPlatformInterface.instance = WakelockAurora(); + } + + @override + Future toggle({required bool enable}) async { + if (_enable != enable) { + _enable = enable; + final client = DBusClient.system(); + final request = ComNokiaMceRequest(client, 'com.nokia.mce'); + if (_timer == null) { + request.callreq_display_blanking_pause(); + _timer = Timer.periodic(const Duration(seconds: 60), (timer) { + request.callreq_display_blanking_pause(); + }); + } else { + _timer?.cancel(); + _timer = null; + } + await client.close(); + } + } + + @override + Future get enabled async { + return _enable; + } +} diff --git a/packages/wakelock/wakelock_aurora/pubspec.yaml b/packages/wakelock/wakelock_aurora/pubspec.yaml new file mode 100644 index 0000000..ca9291e --- /dev/null +++ b/packages/wakelock/wakelock_aurora/pubspec.yaml @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC +# SPDX-License-Identifier: BSD-3-Clause + +name: wakelock_aurora +description: A new Flutter plugin project. +version: 0.0.1 + +environment: + sdk: '>=2.18.6 <4.0.0' + flutter: ">=3.0.0" + +dependencies: + flutter: + sdk: flutter + dbus: ^0.7.8 + plugin_platform_interface: ^2.0.2 + wakelock_platform_interface: ^0.3.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + plugin: + platforms: + aurora: + dartPluginClass: WakelockAurora