Vitaliy Zarubin
1 year ago
15 changed files with 336 additions and 2 deletions
@ -0,0 +1,42 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
// SPDX-License-Identifier: BSD-3-Clause |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
import 'package:wakelock_plus/wakelock_plus.dart'; |
||||
|
||||
/// Model for [WakelockPlusPage] |
||||
class WakelockPlusModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static WakelockPlusModel of(BuildContext context) => |
||||
ScopedModel.of<WakelockPlusModel>(context); |
||||
|
||||
/// Error |
||||
String? _error; |
||||
|
||||
/// Public error |
||||
String? get error => _error; |
||||
|
||||
/// Public is error |
||||
bool get isError => _error != null; |
||||
|
||||
/// Check is enable Wakelock |
||||
Future<bool?> isEnable() async { |
||||
try { |
||||
return await WakelockPlus.enabled; |
||||
} catch (e) { |
||||
_error = e.toString(); |
||||
} |
||||
notifyListeners(); |
||||
return null; |
||||
} |
||||
|
||||
/// Set state Wakelock |
||||
Future<void> setStateWakelockPlus(bool enable) async { |
||||
try { |
||||
await WakelockPlus.toggle(enable: enable); |
||||
} catch (e) { |
||||
_error = e.toString(); |
||||
} |
||||
notifyListeners(); |
||||
} |
||||
} |
@ -0,0 +1,26 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
// SPDX-License-Identifier: BSD-3-Clause |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:flutter_example_packages/packages/wakelock_plus/page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
|
||||
/// Package values |
||||
final packageWakelockPlus = PackagePage( |
||||
key: 'wakelock_plus', |
||||
descEN: ''' |
||||
Plugin that allows you to keep the device screen awake, i.e. |
||||
prevent the screen from sleeping. |
||||
''', |
||||
descRU: ''' |
||||
Плагин, который позволяет держать экран устройства в активном состоянии, |
||||
т. е. предотвращать переход экрана в спящий режим. |
||||
''', |
||||
version: '1.1.1', |
||||
isPlatformDependent: true, |
||||
page: () => WakelockPlusPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<WakelockPlusModel>(() => WakelockPlusModel()); |
||||
}, |
||||
); |
@ -0,0 +1,89 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
// 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_plus/model.dart'; |
||||
import 'package:flutter_example_packages/packages/wakelock_plus/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 WakelockPlusPage extends AppStatefulWidget { |
||||
WakelockPlusPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageWakelockPlus; |
||||
|
||||
@override |
||||
State<WakelockPlusPage> createState() => _WakelockPlusPageState(); |
||||
} |
||||
|
||||
class _WakelockPlusPageState extends AppState<WakelockPlusPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<WakelockPlusModel>( |
||||
model: getIt<WakelockPlusModel>(), |
||||
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<bool?>( |
||||
future: model.isEnable(), |
||||
builder: ( |
||||
BuildContext context, |
||||
AsyncSnapshot<bool?> 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.setStateWakelockPlus(value); |
||||
}, |
||||
), |
||||
); |
||||
}, |
||||
), |
||||
], |
||||
), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -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/ |
@ -0,0 +1,32 @@
|
||||
# wakelock_plus_aurora |
||||
|
||||
The Aurora implementation of [`wakelock_plus`](https://pub.dev/packages/wakelock_plus). |
||||
|
||||
## Usage |
||||
This package is not an _endorsed_ implementation of `wakelock_plus`. |
||||
Therefore, you have to include `wakelock_plus_aurora` alongside `wakelock_plus` as dependencies in your `pubspec.yaml` file. |
||||
|
||||
**pubspec.yaml** |
||||
|
||||
```yaml |
||||
dependencies: |
||||
wakelock_plus: ^1.1.1 |
||||
wakelock_plus_aurora: |
||||
git: |
||||
url: https://gitlab.com/omprussia/flutter/flutter-plugins.git |
||||
ref: master |
||||
path: packages/wakelock_plus/wakelock_plus_aurora |
||||
``` |
||||
|
||||
***.dart** |
||||
|
||||
```dart |
||||
import 'package:wakelock_plus/wakelock_plus.dart'; |
||||
// ... |
||||
|
||||
// The following line will enable the Android and iOS wakelock. |
||||
WakelockPlus.enable(); |
||||
|
||||
// The next line disables the wakelock again. |
||||
WakelockPlus.disable(); |
||||
``` |
@ -0,0 +1,4 @@
|
||||
# SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
# SPDX-License-Identifier: BSD-3-Clause |
||||
|
||||
include: package:flutter_lints/flutter.yaml |
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE node PUBLIC |
||||
"-//freedesktop//DTD D-Bus Object Introspection 1.0//EN" |
||||
"http://standards.freedesktop.org/dbus/1.0/introspect.dtd"> |
||||
<node name="/com/nokia/mce/request"> |
||||
<interface name="com.nokia.mce.request"> |
||||
<method name="req_display_blanking_pause"> |
||||
</method> |
||||
</interface> |
||||
</node> |
@ -0,0 +1,20 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
// 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<void> 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); |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
// SPDX-License-Identifier: BSD-3-Clause |
||||
import 'dart:async'; |
||||
|
||||
import 'package:dbus/dbus.dart'; |
||||
import 'package:wakelock_plus_platform_interface/wakelock_plus_platform_interface.dart'; |
||||
import 'com_nokia_mce_request.dart'; |
||||
|
||||
class WakelockPlusAurora extends WakelockPlusPlatformInterface { |
||||
bool _enable = false; |
||||
Timer? _timer; |
||||
|
||||
static void registerWith() { |
||||
WakelockPlusPlatformInterface.instance = WakelockPlusAurora(); |
||||
} |
||||
|
||||
@override |
||||
Future<void> 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<bool> get enabled async { |
||||
return _enable; |
||||
} |
||||
} |
@ -0,0 +1,28 @@
|
||||
# SPDX-FileCopyrightText: Copyright 2023 Open Mobile Platform LLC <community@omp.ru> |
||||
# SPDX-License-Identifier: BSD-3-Clause |
||||
|
||||
name: wakelock_plus_aurora |
||||
description: Wakelock is Flutter plugin that allows you to keep the device screen awake, i.e. prevent the screen from sleeping. |
||||
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_plus_platform_interface: ^1.1.0 |
||||
|
||||
dev_dependencies: |
||||
flutter_test: |
||||
sdk: flutter |
||||
flutter_lints: ^2.0.0 |
||||
|
||||
flutter: |
||||
plugin: |
||||
platforms: |
||||
aurora: |
||||
dartPluginClass: WakelockPlusAurora |
Loading…
Reference in new issue