Browse Source

Merge branch 'battery_plus' into 'master'

OMP#OS-17083 A Flutter plugin to access various information about the battery

See merge request non-oss/flutter/flutter-plugins!6
merge-requests/6/merge
Vitaliy Zarubin 2 years ago
parent
commit
061fde678e
  1. 2
      .gitignore
  2. 7
      AUTHORS.md
  3. 83
      CODE_OF_CONDUCT.md
  4. 169
      CONTRIBUTING.md
  5. 30
      LICENSE.BSD-3-CLAUSE.md
  6. 5
      README.md
  7. 32
      packages/battery_plus/battery_plus_aurora/.gitignore
  8. 38
      packages/battery_plus/battery_plus_aurora/README.md
  9. 1
      packages/battery_plus/battery_plus_aurora/analysis_options.yaml
  10. 17
      packages/battery_plus/battery_plus_aurora/data/com.nokia.mce.request.xml
  11. 15
      packages/battery_plus/battery_plus_aurora/data/com.nokia.mce.signal.xml
  12. BIN
      packages/battery_plus/battery_plus_aurora/data/preview.png
  13. 45
      packages/battery_plus/battery_plus_aurora/example/.gitignore
  14. 17
      packages/battery_plus/battery_plus_aurora/example/README.md
  15. 1
      packages/battery_plus/battery_plus_aurora/example/analysis_options.yaml
  16. 1
      packages/battery_plus/battery_plus_aurora/example/aurora/.gitignore
  17. 47
      packages/battery_plus/battery_plus_aurora/example/aurora/CMakeLists.txt
  18. 12
      packages/battery_plus/battery_plus_aurora/example/aurora/desktop/com.example.battery_plus_aurora_example.desktop
  19. 14
      packages/battery_plus/battery_plus_aurora/example/aurora/flutter/generated_plugin_registrant.cpp
  20. 12
      packages/battery_plus/battery_plus_aurora/example/aurora/flutter/generated_plugin_registrant.h
  21. 30
      packages/battery_plus/battery_plus_aurora/example/aurora/flutter/generated_plugins.cmake
  22. BIN
      packages/battery_plus/battery_plus_aurora/example/aurora/icons/108x108.png
  23. BIN
      packages/battery_plus/battery_plus_aurora/example/aurora/icons/128x128.png
  24. BIN
      packages/battery_plus/battery_plus_aurora/example/aurora/icons/172x172.png
  25. BIN
      packages/battery_plus/battery_plus_aurora/example/aurora/icons/86x86.png
  26. 10
      packages/battery_plus/battery_plus_aurora/example/aurora/main.cpp
  27. 31
      packages/battery_plus/battery_plus_aurora/example/aurora/rpm/com.example.battery_plus_aurora_example.spec
  28. 160
      packages/battery_plus/battery_plus_aurora/example/lib/main.dart
  29. 23
      packages/battery_plus/battery_plus_aurora/example/pubspec.yaml
  30. 88
      packages/battery_plus/battery_plus_aurora/lib/battery_plus_aurora.dart
  31. 46
      packages/battery_plus/battery_plus_aurora/lib/com_nokia_mce_request.dart
  32. 32
      packages/battery_plus/battery_plus_aurora/lib/com_nokia_mce_signal.dart
  33. 27
      packages/battery_plus/battery_plus_aurora/pubspec.yaml
  34. 32
      packages/device_info_plus/device_info_plus_aurora/.gitignore
  35. 56
      packages/device_info_plus/device_info_plus_aurora/README.md
  36. 1
      packages/device_info_plus/device_info_plus_aurora/analysis_options.yaml
  37. BIN
      packages/device_info_plus/device_info_plus_aurora/data/preview.png
  38. 59
      packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Features.xml
  39. 21
      packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.SIM.xml
  40. 21
      packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Storages.xml
  41. 45
      packages/device_info_plus/device_info_plus_aurora/example/.gitignore
  42. 17
      packages/device_info_plus/device_info_plus_aurora/example/README.md
  43. 1
      packages/device_info_plus/device_info_plus_aurora/example/analysis_options.yaml
  44. 1
      packages/device_info_plus/device_info_plus_aurora/example/aurora/.gitignore
  45. 47
      packages/device_info_plus/device_info_plus_aurora/example/aurora/CMakeLists.txt
  46. 12
      packages/device_info_plus/device_info_plus_aurora/example/aurora/desktop/com.example.device_info_plus_aurora_example.desktop
  47. 14
      packages/device_info_plus/device_info_plus_aurora/example/aurora/flutter/generated_plugin_registrant.cpp
  48. 12
      packages/device_info_plus/device_info_plus_aurora/example/aurora/flutter/generated_plugin_registrant.h
  49. 30
      packages/device_info_plus/device_info_plus_aurora/example/aurora/flutter/generated_plugins.cmake
  50. BIN
      packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/108x108.png
  51. BIN
      packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/128x128.png
  52. BIN
      packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/172x172.png
  53. BIN
      packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/86x86.png
  54. 10
      packages/device_info_plus/device_info_plus_aurora/example/aurora/main.cpp
  55. 31
      packages/device_info_plus/device_info_plus_aurora/example/aurora/rpm/com.example.device_info_plus_aurora_example.spec
  56. 385
      packages/device_info_plus/device_info_plus_aurora/example/lib/main.dart
  57. 23
      packages/device_info_plus/device_info_plus_aurora/example/pubspec.yaml
  58. 106
      packages/device_info_plus/device_info_plus_aurora/lib/aurora_device_info.dart
  59. 94
      packages/device_info_plus/device_info_plus_aurora/lib/device_info_plus_aurora.dart
  60. 237
      packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_features.dart
  61. 105
      packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_sim.dart
  62. 72
      packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_storages.dart
  63. 27
      packages/device_info_plus/device_info_plus_aurora/pubspec.yaml
  64. 32
      packages/flutter_local_notifications/flutter_local_notifications_aurora/.gitignore
  65. 18
      packages/flutter_local_notifications/flutter_local_notifications_aurora/README.md
  66. 1
      packages/flutter_local_notifications/flutter_local_notifications_aurora/analysis_options.yaml
  67. 37
      packages/flutter_local_notifications/flutter_local_notifications_aurora/data/org.freedesktop.Notifications.xml
  68. BIN
      packages/flutter_local_notifications/flutter_local_notifications_aurora/data/preview.gif
  69. 46
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/.gitignore
  70. 17
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/README.md
  71. 1
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/analysis_options.yaml
  72. 1
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/.gitignore
  73. 47
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/CMakeLists.txt
  74. 12
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/desktop/com.example.flutter_local_notifications_aurora_example.desktop
  75. 16
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/flutter/generated_plugin_registrant.cpp
  76. 12
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/flutter/generated_plugin_registrant.h
  77. 31
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/flutter/generated_plugins.cmake
  78. BIN
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/108x108.png
  79. BIN
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/128x128.png
  80. BIN
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/172x172.png
  81. BIN
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/86x86.png
  82. 10
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/main.cpp
  83. 31
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/rpm/com.example.flutter_local_notifications_aurora_example.spec
  84. 90
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/lib/main.dart
  85. 23
      packages/flutter_local_notifications/flutter_local_notifications_aurora/example/pubspec.yaml
  86. 63
      packages/flutter_local_notifications/flutter_local_notifications_aurora/lib/flutter_local_notifications_aurora.dart
  87. 129
      packages/flutter_local_notifications/flutter_local_notifications_aurora/lib/org_freedesktop_notifications.dart
  88. 29
      packages/flutter_local_notifications/flutter_local_notifications_aurora/pubspec.yaml
  89. 32
      packages/package_info_plus/package_info_plus_aurora/.gitignore
  90. 18
      packages/package_info_plus/package_info_plus_aurora/README.md
  91. 1
      packages/package_info_plus/package_info_plus_aurora/analysis_options.yaml
  92. 23
      packages/package_info_plus/package_info_plus_aurora/aurora/CMakeLists.txt
  93. 24
      packages/package_info_plus/package_info_plus_aurora/aurora/include/package_info_plus_aurora/package_info_plus_aurora_plugin.h
  94. 43
      packages/package_info_plus/package_info_plus_aurora/aurora/package_info_plus_aurora_plugin.cpp
  95. BIN
      packages/package_info_plus/package_info_plus_aurora/data/preview.png
  96. 45
      packages/package_info_plus/package_info_plus_aurora/example/.gitignore
  97. 17
      packages/package_info_plus/package_info_plus_aurora/example/README.md
  98. 1
      packages/package_info_plus/package_info_plus_aurora/example/analysis_options.yaml
  99. 1
      packages/package_info_plus/package_info_plus_aurora/example/aurora/.gitignore
  100. 47
      packages/package_info_plus/package_info_plus_aurora/example/aurora/CMakeLists.txt
  101. Some files were not shown because too many files have changed in this diff Show More

2
.gitignore vendored

@ -0,0 +1,2 @@
/.idea/
/.vscode/

7
AUTHORS.md

@ -0,0 +1,7 @@
# Authors
* Denis Glazkov, <d.glazkov@omp.ru>
* Product owner, 2023
* Maintainer, 2023
* Vitaliy Zarubin, <v.zarubin@omp.ru>

83
CODE_OF_CONDUCT.md

@ -0,0 +1,83 @@
# Code of Conduct
## What is this code of conduct for?
Code of conduct is a current set of rules of the Open Mobile Platform
which informs you how we expect
the members of the Open Mobile Platform community
will interact while contributing and communicating.
We are committed to providing a friendly, safe and welcoming
environment for all, regardless of gender, gender identity and expression,
sexual orientation, ability, physical appearance, body size, race, age,
socioeconomic status, religion (or lack thereof),
or other marginalized aspect of community members.
We expect all members of the Open Mobile Platform community
to abide by this Code of Conduct whenever interacting
in Open Mobile Platform venues
(merge requests, pull requests, issues, 1-1 or group chat, meetups, conferences, etc.)
## Examples of appropriate behavior
* Using welcoming and inclusive language.
* Being respectful of differing viewpoints and experiences.
* Gracefully accepting constructive criticism.
* Focusing on what is best for the community.
* Showing empathy towards other community members.
## Examples of inappropriate behavior
Because we come from a variety of backgrounds,
we do not want to assume that everyone has the same assumptions
about what is and is not appropriate.
Here are some examples of inappropriate behavior
that are incompatible with our community's ethos:
* spamming, trolling, intentionally disrupting conversations,
or irrelevant solicitation or advertisement;
* making demeaning or discriminatory comments;
* making negative assumptions about someone's background,
abilities, or intentions;
* harassing or stalking individuals (online or in person).
In general: treat others how you would like to be treated,
were you in their place.
Do ask questions.
Do keep conflicts productively focused on technical issues.
Do remember that we are all people, not robots,
and all equally deserving of sensitivity and respect.
## What will organizers do about inappropriate behavior?
If we notice you doing or saying something inappropriate,
an organizer will ask you to stop.
We will not demonize you.
But please do stop the inappropriate behavior
so we can get back to writing and discussing code in a safe environment.
If you have philosophical disagreements about what is actually inappropriate,
please take them to a separate public or private conversation
with an Open Mobile Platform maintainer
so we don't turn pull requests into an ethics debate.
If you keep doing unacceptable things,
we will likely ban you, report you to the administration,
or take other appropriate action.
## What if I see or am subject to what feels like inappropriate behavior?
Let us know.
Please notify a community organizer as soon as possible.
Full contact information is listed in the Contact Info section of this document.
All communications will be kept strictly confidential,
unless otherwise required by law.
No issue will be considered too inconsequential or unimportant for us
to have a conversation about.
## Contact Info
If you need to report an incident,
please contact <community@omp.ru>.
This work is licensed under a Creative Commons Attribution 3.0 Unported License
For attribution requirements:
«Open Mobile Platform Code of Conduct»
Copyright (c) 2021 Open Mobile Platform LLC,
used under a [Creative Commons Attribution Unported license](http://creativecommons.org/licenses/by/3.0/).

169
CONTRIBUTING.md

@ -0,0 +1,169 @@
# Contributor License Agreements
Thank you for your interest in contributing
to software projects managed by Open Mobile Platform («We» or «Us»).
This contributor agreement («Agreement»)
documents the rights granted by contributors to Us.
To make this document effective,
please sign it and send it to Us by email or electronic submission.
This is a legally binding document,
so please read it carefully before agreeing to it.
The Agreement may cover more than one software project managed by Us.
## 1. Definitions
**«We» or «Us»** means Open Mobile Platform Limited Liability Company
(Open Mobile Platform LLC),
420500, Republic of Tatarstan, Verkhneuslonsky District,
Innopolis, Universitetskaya Street, h. 7, office 59,
OGRN (Primary State Registration Number) 1161690087020.
**«You»** means the individual who Submits a Contribution to Us.
**«Contribution»** means any work of authorship
that is Submitted by You to Us
in which You own or assert ownership of the Copyright.
**«Copyright»** means all rights protecting works of authorship
owned or controlled by You,
including copyright, moral and neighboring rights, as appropriate,
for the full term of their existence including any extensions by You.
**«Material»** means the work of authorship
which is made available by Us to third parties.
When this Agreement covers more than one software project,
the Material means the work of authorship
to which the Contribution was Submitted.
After You Submit the Contribution,
it may be included in the Material.
**«Submit»** means any form of electronic, verbal, or written communication
sent to Us or our representatives,
including but not limited to electronic mailing lists,
source code control systems, and issue tracking systems
that are managed by, or on behalf of, Us
for the purpose of discussing and improving the Material,
but excluding communication that is conspicuously marked
or otherwise designated in writing by You as «Not a Contribution».
**«Submission Date»** means the date
on which You Submit a Contribution to Us.
**«Effective Date»** means the date You execute this Agreement
or the date You first Submit a Contribution to Us,
whichever is earlier.
**«Media»** means any portion of a Contribution which is not software.
## 2. Grant of Rights
### 2.1. Copyright License
(a) You retain ownership of the Copyright in Your Contribution
and have the same rights to use or license the Contribution
which You would have had without entering into the Agreement.
(b) To the maximum extent permitted by the relevant law,
You grant to Us a perpetual, worldwide, non-exclusive,
transferable, royalty-free, irrevocable license
under the Copyright covering the Contribution,
with the right to sublicense
such rights through multiple tiers of sublicensees,
to reproduce, modify, display, perform and distribute
the Contribution as part of the Material;
provided that this license is conditioned upon compliance with Section 2.3.
### 2.2. Patent License
For patent claims including, without limitation,
method, process, and apparatus claims
which You own, control or have the right to grant, now or in the future,
You grant to Us a perpetual, worldwide, non-exclusive,
transferable, royalty-free, irrevocable patent license,
with the right to sublicense these rights to multiple tiers of sublicensees,
to make, have made, use, sell, offer for sale, import
and otherwise transfer the Contribution
and the Contribution in combination with the Material
(and portions of such combination).
This license is granted only to the extent
that the exercise of the licensed rights infringes such patent claims;
and provided that this license is conditioned upon compliance with Section 2.3.
### 2.3. Outbound License
Based on the grant of rights in Sections 2.1 and 2.2,
if We include Your Contribution in a Material,
We may license the Contribution under any license,
including copyleft, permissive, commercial, or proprietary licenses.
As a condition on the exercise of this right,
We agree to also license the Contribution
under the terms of the license or licenses
which We are using for the Material on the Submission Date.
### 2.4. Our Rights
You acknowledge that We are not obligated
to use Your Contribution as part of the Material
and may decide to include any Contribution We consider appropriate.
## 3. Agreement
You confirm that:
(a) You have the legal authority to enter into this Agreement.
(b) You own the Copyright and patent claims
covering the Contribution which are required
to grant the rights under Section 2.
(c) The grant of rights under Section 2
does not violate any grant of rights
which You have made to third parties, including Your employer.
If You are an employee,
You have had Your employer approve this Agreement
or sign the Entity version of this document.
If You are less than eighteen years old,
please have Your parents or guardian sign the Agreement.
## 4. Disclaimer
EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3,
THE CONTRIBUTION IS PROVIDED «AS IS».
MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES
INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE
AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US.
TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED,
SUCH WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW.
## 5. Miscellaneous
5.1. This Agreement will be governed by and construed
in accordance with the laws of Russian Federation.
5.2. This Agreement sets out the entire agreement between You
and Us for Your Contributions to Us
and overrides all other agreements or understandings.
5.3. If You or We assign the rights or obligations
received through this Agreement to a third party,
as a condition of the assignment,
that third party must agree in writing
to abide by all the rights and obligations in the Agreement.
5.4. The failure of either party to require performance
by the other party of any provision of this Agreement in one situation
shall not affect the right of a party
to require such performance at any time in the future.
A waiver of performance under a provision in one situation
shall not be considered a waiver of the performance
of the provision in the future or a waiver of the provision in its entirety.
5.5. If any provision of this Agreement is found void and unenforceable,
such provision will be replaced to the extent possible with a provision
that comes closest to the meaning of the original provision
and which is enforceable.
The terms and conditions set forth in this Agreement
shall apply notwithstanding any failure of essential purpose
of this Agreement or any limited remedy
to the maximum extent possible under law.

30
LICENSE.BSD-3-CLAUSE.md

@ -0,0 +1,30 @@
# The 3-Clause BSD License
_Copyright (C) 2022 ru.auroraos_
Redistribution and use in source and binary forms,
with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain
the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce
the above copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

5
README.md

@ -0,0 +1,5 @@
# Flutter Packages Aurora OS
This repo is a companion repo to the main flutter repo.
It contains the source code for Aurora Flutter's packages (i.e., packages developed by the Aurora team).
Check the packages directory to see all packages.

32
packages/battery_plus/battery_plus_aurora/.gitignore vendored

@ -0,0 +1,32 @@
# 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/
.metadata
run.sh

38
packages/battery_plus/battery_plus_aurora/README.md

@ -0,0 +1,38 @@
# battery_plus_aurora
The Aurora implementation of [`battery_plus`][https://pub.dev/packages/battery_plus].
## Usage
This package is not an _endorsed_ implementation of `battery_plus`.
Therefore, you have to include `battery_plus_aurora` alongside `battery_plus` as dependencies in your `pubspec.yaml` file.
```yaml
dependencies:
battery_plus: ^4.0.1
battery_plus_aurora:
path: # path to folder with plugin
```
```dart
// Import package
import 'package:battery_plus/battery_plus.dart';
// Instantiate it
var battery = Battery();
// Get current battery level
final batteryLevel = await _battery.batteryLevel;
// Get current battery state
final batteryState = await _battery.batteryState;
// Check is enable SaveMode
final isInBatterySaveMode = await _battery.isInBatterySaveMode;
// Be informed when the state (full, charging, discharging) changes
_battery.onBatteryStateChanged.listen((BatteryState state) {
debugPrint(state.toString());
});
```
### Preview example
![preview.png](data%2Fpreview.png)

1
packages/battery_plus/battery_plus_aurora/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

17
packages/battery_plus/battery_plus_aurora/data/com.nokia.mce.request.xml

@ -0,0 +1,17 @@
<?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="get_psm_state">
<arg direction="out" name="power_saving_mode_active" type="b"/>
</method>
<method name="get_battery_level">
<arg direction="out" name="battery_level" type="i"/>
</method>
<method name="get_charger_state">
<arg direction="out" name="charger_state" type="s"/>
</method>
</interface>
</node>

15
packages/battery_plus/battery_plus_aurora/data/com.nokia.mce.signal.xml

@ -0,0 +1,15 @@
<?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/signal">
<interface name="com.nokia.mce.signal">
<signal name="battery_status_ind">
<arg name="battery_status" type="s"/>
</signal>
<signal name="charger_state_ind">
<arg name="charger_state" type="s"/>
</signal>
</interface>
</node>

BIN
packages/battery_plus/battery_plus_aurora/data/preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

45
packages/battery_plus/battery_plus_aurora/example/.gitignore vendored

@ -0,0 +1,45 @@
# 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
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
pubspec.lock

17
packages/battery_plus/battery_plus_aurora/example/README.md

@ -0,0 +1,17 @@
# battery_plus_aurora_example
Demonstrates how to use the battery_plus_aurora plugin.
## Build
```shell
# Add an alias if it doesn't already exist
alias flutter-aurora=$HOME/.local/opt/flutter-sdk/bin/flutter
# Get dependencies
flutter-aurora pub get
# Run build
flutter-aurora build aurora --release
```
You can collect, sign, run an example on the device with a script located in the `script/build_example.sh`
More information in `build_example.sh`.

1
packages/battery_plus/battery_plus_aurora/example/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

1
packages/battery_plus/battery_plus_aurora/example/aurora/.gitignore vendored

@ -0,0 +1 @@
flutter/ephemeral

47
packages/battery_plus/battery_plus_aurora/example/aurora/CMakeLists.txt

@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.10)
project(com.example.battery_plus_aurora_example LANGUAGES CXX)
include(GNUInstallDirs)
set(BINARY_NAME ${CMAKE_PROJECT_NAME})
set(FLUTTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flutter)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_SKIP_RPATH OFF)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../share/${BINARY_NAME}/lib")
find_package(PkgConfig REQUIRED)
pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder)
add_executable(${BINARY_NAME} main.cpp ${FLUTTER_DIR}/generated_plugin_registrant.cpp)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::FlutterEmbedder)
target_include_directories(${BINARY_NAME} PRIVATE ${FLUTTER_DIR})
include(flutter/generated_plugins.cmake)
set(PACKAGE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
set(DESKTOP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/applications)
set(ICONS_INSTALL_ROOT_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor)
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libflutter-embedder.so
${PROJECT_BINARY_DIR}/bundle/lib/libflutter-embedder.so)
install(FILES ${PROJECT_BINARY_DIR}/bundle/icudtl.dat DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/flutter_assets DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/lib DESTINATION ${PACKAGE_INSTALL_DIR})
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES desktop/${BINARY_NAME}.desktop DESTINATION ${DESKTOP_INSTALL_DIR})
foreach(ICONS_SIZE 86x86 108x108 128x128 172x172)
install(FILES icons/${ICONS_SIZE}.png
RENAME ${BINARY_NAME}.png
DESTINATION ${ICONS_INSTALL_ROOT_DIR}/${ICONS_SIZE}/apps/)
endforeach(ICONS_SIZE)

12
packages/battery_plus/battery_plus_aurora/example/aurora/desktop/com.example.battery_plus_aurora_example.desktop

@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
Name=battery_plus_aurora_example
Comment=Demonstrates how to use the battery_plus_aurora plugin.
Icon=com.example.battery_plus_aurora_example
Exec=/usr/bin/com.example.battery_plus_aurora_example
X-Nemo-Application-Type=silica-qt5
[X-Application]
Permissions=
OrganizationName=com.example
ApplicationName=battery_plus_aurora_example

14
packages/battery_plus/battery_plus_aurora/example/aurora/flutter/generated_plugin_registrant.cpp

@ -0,0 +1,14 @@
//
// Generated file. Do not edit.
//
// clang-format off
#include <flutter/application.h>
#include "generated_plugin_registrant.h"
void RegisterPlugins() {
Application::RegisterPlugins({
});
}

12
packages/battery_plus/battery_plus_aurora/example/aurora/flutter/generated_plugin_registrant.h

@ -0,0 +1,12 @@
//
// Generated file. Do not edit.
//
// clang-format off
#ifndef GENERATED_PLUGIN_REGISTRANT
#define GENERATED_PLUGIN_REGISTRANT
void RegisterPlugins();
#endif /* GENERATED_PLUGIN_REGISTRANT */

30
packages/battery_plus/battery_plus_aurora/example/aurora/flutter/generated_plugins.cmake

@ -0,0 +1,30 @@
#
# Generated file, do not edit.
#
set(ROOT_PROJECT_BINARY_DIR "${PROJECT_BINARY_DIR}")
function(add_library TARGET)
_add_library(${TARGET} ${ARGN})
if(NOT "${TARGET}" MATCHES "^PkgConfig::.*")
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${TARGET}>"
"${ROOT_PROJECT_BINARY_DIR}/bundle/lib/$<TARGET_FILE_NAME:${TARGET}>")
endif(NOT "${TARGET}" MATCHES "^PkgConfig::.*")
endfunction()
list(APPEND FLUTTER_PLATFORM_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
)
foreach(PLUGIN ${FLUTTER_PLATFORM_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${PLUGIN}/aurora plugins/${PLUGIN})
target_link_libraries(${BINARY_NAME} PRIVATE ${PLUGIN}_platform_plugin)
endforeach(PLUGIN)
foreach(FFI_PLUGIN ${FLUTTER_FFI_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${FFI_PLUGIN}/aurora plugins/${FFI_PLUGIN})
endforeach(FFI_PLUGIN)

BIN
packages/battery_plus/battery_plus_aurora/example/aurora/icons/108x108.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
packages/battery_plus/battery_plus_aurora/example/aurora/icons/128x128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
packages/battery_plus/battery_plus_aurora/example/aurora/icons/172x172.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
packages/battery_plus/battery_plus_aurora/example/aurora/icons/86x86.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

10
packages/battery_plus/battery_plus_aurora/example/aurora/main.cpp

@ -0,0 +1,10 @@
#include <flutter/application.h>
#include "generated_plugin_registrant.h"
int main(int argc, char *argv[]) {
Application::Initialize(argc, argv);
Application::SetPixelRatio(1.8);
RegisterPlugins();
Application::Launch();
return 0;
}

31
packages/battery_plus/battery_plus_aurora/example/aurora/rpm/com.example.battery_plus_aurora_example.spec

@ -0,0 +1,31 @@
%global __provides_exclude_from ^%{_datadir}/%{name}/lib/.*$
%global __requires_exclude ^lib(dconf|flutter-embedder|maliit-glib|appmanifest-.+|.+_platform_plugin)\\.so.*$
Name: com.example.battery_plus_aurora_example
Summary: Demonstrates how to use the battery_plus_aurora plugin.
Version: 0.1.0
Release: 1
License: Proprietary
Source0: %{name}-%{version}.tar.zst
BuildRequires: cmake
BuildRequires: pkgconfig(flutter-embedder)
%description
%{summary}.
%prep
%autosetup
%build
%cmake -DCMAKE_BUILD_TYPE=%{_flutter_build_type}
%make_build
%install
%make_install
%files
%{_bindir}/%{name}
%{_datadir}/%{name}/*
%{_datadir}/applications/%{name}.desktop
%{_datadir}/icons/hicolor/*/apps/%{name}.png

160
packages/battery_plus/battery_plus_aurora/example/lib/main.dart

@ -0,0 +1,160 @@
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:battery_plus/battery_plus.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _battery = Battery();
String? _error;
int? _batteryLevel;
String? _batteryState;
bool? _isInBatterySaveMode;
@override
void initState() {
super.initState();
initPlatformState();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
try {
// Get current battery level
final batteryLevel = await _battery.batteryLevel;
// Get current battery state
final batteryState = await _battery.batteryState;
// Check is enable SaveMode
final isInBatterySaveMode = await _battery.isInBatterySaveMode;
// Be informed when the state (full, charging, discharging) changes
_battery.onBatteryStateChanged.listen((BatteryState state) {
debugPrint(state.toString());
});
setState(() {
_batteryLevel = batteryLevel;
_batteryState = batteryState.name;
_isInBatterySaveMode = isInBatterySaveMode;
});
} on Exception catch (e) {
setState(() {
_error = e.toString();
});
}
}
@override
Widget build(BuildContext context) {
const textStyleWhite = TextStyle(fontSize: 18, color: Colors.white);
const textStyleTitle = TextStyle(fontSize: 20, color: Colors.black);
const textStylePath = TextStyle(fontSize: 18, color: Colors.black54);
const spaceMedium = SizedBox(height: 20);
const spaceSmall = SizedBox(height: 10);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Example battery_plus'),
),
body: Stack(
children: [
// Error message
Visibility(
visible: _error != null,
child: Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
color: Colors.redAccent,
borderRadius: BorderRadius.all(Radius.circular(10.0)),
),
child: Text(
_error ?? '',
style: textStyleWhite,
),
),
),
),
),
// List directories path
Visibility(
visible: _error == null,
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
child: Center(
child: Column(
children: [
// Info
Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
color: Colors.green,
borderRadius:
BorderRadius.all(Radius.circular(10.0)),
),
child: const Text(
'Demo application demonstration implementation of battery_plus',
style: textStyleWhite,
textAlign: TextAlign.center,
),
),
const SizedBox(height: 30),
const Text(
'Battery Level',
style: textStyleTitle,
),
spaceSmall,
Text(
"$_batteryLevel%",
style: textStylePath,
),
spaceMedium,
const Text(
'Battery State',
style: textStyleTitle,
),
spaceSmall,
Text(
_batteryState.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Is In Battery SaveMode',
style: textStyleTitle,
),
spaceSmall,
Text(
_isInBatterySaveMode.toString(),
style: textStylePath,
),
],
),
),
),
),
),
],
),
),
);
}
}

23
packages/battery_plus/battery_plus_aurora/example/pubspec.yaml

@ -0,0 +1,23 @@
name: battery_plus_aurora_example
description: Demonstrates how to use the battery_plus_aurora plugin.
publish_to: 'none'
environment:
sdk: '>=2.18.6 <3.0.0'
dependencies:
flutter:
sdk: flutter
battery_plus: ^4.0.1
battery_plus_aurora:
path: ../
cupertino_icons: ^1.0.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true

88
packages/battery_plus/battery_plus_aurora/lib/battery_plus_aurora.dart

@ -0,0 +1,88 @@
import 'package:battery_plus_aurora/com_nokia_mce_request.dart';
import 'package:battery_plus_aurora/com_nokia_mce_signal.dart';
import 'package:dbus/dbus.dart';
import 'package:battery_plus_platform_interface/battery_plus_platform_interface.dart';
import 'package:flutter/foundation.dart';
import 'dart:async' show Stream;
import 'package:async/async.dart' show StreamGroup;
class BatteryPlusAurora extends BatteryPlatform {
/// Register this dart class as the platform implementation for aurora
static void registerWith() {
if (TargetPlatform.aurora == defaultTargetPlatform) {
BatteryPlatform.instance = BatteryPlusAurora();
}
}
/// Returns the current battery level in percent.
@override
Future<int> get batteryLevel async {
final client = DBusClient.system();
final request = ComNokiaMceRequest(client, 'com.nokia.mce');
final level = await request.callget_battery_level();
await client.close();
return level;
}
/// Returns true if the device is on battery save mode
@override
Future<bool> get isInBatterySaveMode async {
final client = DBusClient.system();
final request = ComNokiaMceRequest(client, 'com.nokia.mce');
final state = await request.callget_psm_state();
await client.close();
return state;
}
/// Returns the current battery state in percent.
@override
Future<BatteryState> get batteryState async {
final client = DBusClient.system();
final request = ComNokiaMceRequest(client, 'com.nokia.mce');
final level = await request.callget_battery_level();
final status = await request.callget_charger_state();
await client.close();
if (level == 100) {
return BatteryState.full;
} else if (status == 'on') {
return BatteryState.charging;
} else {
return BatteryState.discharging;
}
}
/// Returns a Stream of BatteryState changes.
@override
Stream<BatteryState> get onBatteryStateChanged async* {
final client = DBusClient.system();
final signal = ComNokiaMceSignal(client, 'com.nokia.mce');
final request = ComNokiaMceRequest(client, 'com.nokia.mce');
var steam = StreamGroup.merge([
signal.battery_status_ind,
signal.charger_state_ind,
]);
await for (final event in steam) {
if (event.name == 'battery_status_ind') {
if (event.values.first.toNative() == 'full') {
yield BatteryState.full;
}
} else {
if (event.values.first.toNative() == 'on') {
yield BatteryState.charging;
final level = await request.callget_battery_level();
if (level == 100) {
yield BatteryState.full;
}
} else {
yield BatteryState.discharging;
}
}
}
await client.close();
}
}

46
packages/battery_plus/battery_plus_aurora/lib/com_nokia_mce_request.dart

@ -0,0 +1,46 @@
// This file was generated using the following command and may be overwritten.
// dart-dbus generate-remote-object data/com.nokia.mce.request.xml
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.get_psm_state()
Future<bool> callget_psm_state(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod('com.nokia.mce.request', 'get_psm_state', [],
replySignature: DBusSignature('b'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asBoolean();
}
/// Invokes com.nokia.mce.request.get_battery_level()
Future<int> callget_battery_level(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'com.nokia.mce.request', 'get_battery_level', [],
replySignature: DBusSignature('i'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asInt32();
}
/// Invokes com.nokia.mce.request.get_charger_state()
Future<String> callget_charger_state(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'com.nokia.mce.request', 'get_charger_state', [],
replySignature: DBusSignature('s'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asString();
}
}

32
packages/battery_plus/battery_plus_aurora/lib/com_nokia_mce_signal.dart

@ -0,0 +1,32 @@
// This file was generated using the following command and may be overwritten.
// dart-dbus generate-remote-object data/com.nokia.mce.signal.xml
import 'package:dbus/dbus.dart';
/// Signal data for com.nokia.mce.signal.battery_status_ind.
class ComNokiaMceSignalbattery_status_ind extends DBusSignal {
String get battery_status => values[0].asString();
ComNokiaMceSignalbattery_status_ind(DBusSignal signal) : super(sender: signal.sender, path: signal.path, interface: signal.interface, name: signal.name, values: signal.values);
}
/// Signal data for com.nokia.mce.signal.charger_state_ind.
class ComNokiaMceSignalcharger_state_ind extends DBusSignal {
String get charger_state => values[0].asString();
ComNokiaMceSignalcharger_state_ind(DBusSignal signal) : super(sender: signal.sender, path: signal.path, interface: signal.interface, name: signal.name, values: signal.values);
}
class ComNokiaMceSignal extends DBusRemoteObject {
/// Stream of com.nokia.mce.signal.battery_status_ind signals.
late final Stream<ComNokiaMceSignalbattery_status_ind> battery_status_ind;
/// Stream of com.nokia.mce.signal.charger_state_ind signals.
late final Stream<ComNokiaMceSignalcharger_state_ind> charger_state_ind;
ComNokiaMceSignal(DBusClient client, String destination, {DBusObjectPath path = const DBusObjectPath.unchecked('/com/nokia/mce/signal')}) : super(client, name: destination, path: path) {
battery_status_ind = DBusRemoteObjectSignalStream(object: this, interface: 'com.nokia.mce.signal', name: 'battery_status_ind', signature: DBusSignature('s')).asBroadcastStream().map((signal) => ComNokiaMceSignalbattery_status_ind(signal));
charger_state_ind = DBusRemoteObjectSignalStream(object: this, interface: 'com.nokia.mce.signal', name: 'charger_state_ind', signature: DBusSignature('s')).asBroadcastStream().map((signal) => ComNokiaMceSignalcharger_state_ind(signal));
}
}

27
packages/battery_plus/battery_plus_aurora/pubspec.yaml

@ -0,0 +1,27 @@
name: battery_plus_aurora
description: The Aurora OS implementation of battery_plus.
version: 0.0.1
homepage:
environment:
sdk: '>=2.18.6 <3.0.0'
flutter: ">=2.5.0"
dependencies:
flutter:
sdk: flutter
dbus: ^0.7.8
async: ^2.11.0
plugin_platform_interface: ^2.0.2
battery_plus_platform_interface: ^1.2.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
plugin:
platforms:
aurora:
dartPluginClass: BatteryPlusAurora

32
packages/device_info_plus/device_info_plus_aurora/.gitignore vendored

@ -0,0 +1,32 @@
# 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/
.metadata
run.sh

56
packages/device_info_plus/device_info_plus_aurora/README.md

@ -0,0 +1,56 @@
# device_info_plus_aurora
The Aurora implementation of [`device_info_plus`](https://pub.dev/packages/device_info_plus).
Permission: `DeviceInfo`
Information available:
- `id` - Target platform.
- `name` - Name OS.
- `version` - Versions OS.
- `prettyName` - Name and version OS.
- `hasGNSS` - The presence of GNSS in the device.
- `hasNFC` - The presence of NFC in the device.
- `hasBluetooth` - The presence of bluetooth in the device.
- `hasWlan` - The presence of wlan in the device.
- `maxCpuClockSpeed` - Max CPU clock speed.
- `numberCpuCores` - Number CPU cores.
- `batteryChargePercentage` - Device battery charge percentage.
- `mainCameraResolution` - Device main camera resolution.
- `frontalCameraResolution` - Device frontal camera resolution.
- `ramTotalSize` - Size total ram.
- `ramFreeSize` - Size free ram.
- `screenResolution` - Device screen resolution.
- `osVersion` - Name and version OS.
- `deviceModel` - Device name model.
- `internalStorage` - Map with information on internal storage.
- `internalStorage` - Map with information on internal storage.
- `simCards` - Array with information about SIM cards.
## Usage
This package is not an _endorsed_ implementation of `device_info_plus`.
Therefore, you have to include `device_info_plus_aurora` alongside `device_info_plus` as dependencies in your `pubspec.yaml` file.
```yaml
dependencies:
device_info_plus: ^9.0.1
device_info_plus_aurora:
path: # path to folder with plugin
```
After that you can use like this:
```dart
import 'package:device_info_plus/device_info_plus.dart';
final deviceInfoPlugin = DeviceInfoPlugin();
final deviceInfo = await deviceInfoPlugin.linuxInfo as AuroraDeviceInfo;
debutPrint(deviceInfo.data);
```
### Preview example
![preview.png](data%2Fpreview.png)

1
packages/device_info_plus/device_info_plus_aurora/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

BIN
packages/device_info_plus/device_info_plus_aurora/data/preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

59
packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Features.xml

@ -0,0 +1,59 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="ru.omp.deviceinfo.Features">
<signal name="cameraEnabledChanged">
<arg name="enabled" type="b" direction="out"/>
</signal>
<method name="hasGNSS">
<arg type="b" direction="out"/>
</method>
<method name="hasNFC">
<arg type="b" direction="out"/>
</method>
<method name="hasBluetooth">
<arg type="b" direction="out"/>
</method>
<method name="hasWlan">
<arg type="b" direction="out"/>
</method>
<method name="getMaxCpuClockSpeed">
<arg type="u" direction="out"/>
</method>
<method name="getNumberCpuCores">
<arg type="u" direction="out"/>
</method>
<method name="getCpuModel">
<arg type="s" direction="out"/>
</method>
<method name="getMaxCpuCoresClockSpeed">
<arg type="av" direction="out"/>
</method>
<method name="getBatteryChargePercentage">
<arg type="u" direction="out"/>
</method>
<method name="getMainCameraResolution">
<arg type="d" direction="out"/>
</method>
<method name="getFrontalCameraResolution">
<arg type="d" direction="out"/>
</method>
<method name="getRamTotalSize">
<arg type="t" direction="out"/>
</method>
<method name="getRamFreeSize">
<arg type="t" direction="out"/>
</method>
<method name="getScreenResolution">
<arg type="s" direction="out"/>
</method>
<method name="getOsVersion">
<arg type="s" direction="out"/>
</method>
<method name="getDeviceModel">
<arg type="s" direction="out"/>
</method>
<method name="getSerialNumber">
<arg type="s" direction="out"/>
</method>
</interface>
</node>

21
packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.SIM.xml

@ -0,0 +1,21 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="ru.omp.deviceinfo.SIM">
<signal name="simCardsEnabledChanged">
<arg name="updatedSimCards" type="aa{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMapList"/>
</signal>
<signal name="preferredDataTransferSimChanged">
<arg name="updatedSimCards" type="aa{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMapList"/>
</signal>
<signal name="preferredVoiceCallSimChanged">
<arg name="updatedSimCards" type="aa{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMapList"/>
</signal>
<method name="getSimCardsInfo">
<arg type="aa{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMapList"/>
</method>
</interface>
</node>

21
packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Storages.xml

@ -0,0 +1,21 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="ru.omp.deviceinfo.Storages">
<signal name="externalStorageChanged">
<arg name="updatedStorage" type="a{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
</signal>
<method name="getInternalStorageInfo">
<arg type="a{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
</method>
<method name="getInternalUserPartitionInfo">
<arg type="a{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
</method>
<method name="getExternalStorageInfo">
<arg type="a{sv}" direction="out"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>
</method>
</interface>
</node>

45
packages/device_info_plus/device_info_plus_aurora/example/.gitignore vendored

@ -0,0 +1,45 @@
# 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
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
pubspec.lock
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

17
packages/device_info_plus/device_info_plus_aurora/example/README.md

@ -0,0 +1,17 @@
# device_info_plus_aurora
Demonstrates how to use the device_info_plus_aurora plugin.
## Build
```shell
# Add an alias if it doesn't already exist
alias flutter-aurora=$HOME/.local/opt/flutter-sdk/bin/flutter
# Get dependencies
flutter-aurora pub get
# Run build
flutter-aurora build aurora --release
```
You can collect, sign, run an example on the device with a script located in the `script/build_example.sh`
More information in `build_example.sh`.

1
packages/device_info_plus/device_info_plus_aurora/example/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

1
packages/device_info_plus/device_info_plus_aurora/example/aurora/.gitignore vendored

@ -0,0 +1 @@
flutter/ephemeral

47
packages/device_info_plus/device_info_plus_aurora/example/aurora/CMakeLists.txt

@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.10)
project(com.example.device_info_plus_aurora_example LANGUAGES CXX)
include(GNUInstallDirs)
set(BINARY_NAME ${CMAKE_PROJECT_NAME})
set(FLUTTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flutter)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_SKIP_RPATH OFF)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../share/${BINARY_NAME}/lib")
find_package(PkgConfig REQUIRED)
pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder)
add_executable(${BINARY_NAME} main.cpp ${FLUTTER_DIR}/generated_plugin_registrant.cpp)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::FlutterEmbedder)
target_include_directories(${BINARY_NAME} PRIVATE ${FLUTTER_DIR})
include(flutter/generated_plugins.cmake)
set(PACKAGE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
set(DESKTOP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/applications)
set(ICONS_INSTALL_ROOT_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor)
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libflutter-embedder.so
${PROJECT_BINARY_DIR}/bundle/lib/libflutter-embedder.so)
install(FILES ${PROJECT_BINARY_DIR}/bundle/icudtl.dat DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/flutter_assets DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/lib DESTINATION ${PACKAGE_INSTALL_DIR})
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES desktop/${BINARY_NAME}.desktop DESTINATION ${DESKTOP_INSTALL_DIR})
foreach(ICONS_SIZE 86x86 108x108 128x128 172x172)
install(FILES icons/${ICONS_SIZE}.png
RENAME ${BINARY_NAME}.png
DESTINATION ${ICONS_INSTALL_ROOT_DIR}/${ICONS_SIZE}/apps/)
endforeach(ICONS_SIZE)

12
packages/device_info_plus/device_info_plus_aurora/example/aurora/desktop/com.example.device_info_plus_aurora_example.desktop

@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
Name=device_info_plus_aurora_example
Comment=Demonstrates how to use the device_info_plus_aurora plugin.
Icon=com.example.device_info_plus_aurora_example
Exec=/usr/bin/com.example.device_info_plus_aurora_example
X-Nemo-Application-Type=silica-qt5
[X-Application]
Permissions=DeviceInfo
OrganizationName=com.example
ApplicationName=device_info_plus_aurora_example

14
packages/device_info_plus/device_info_plus_aurora/example/aurora/flutter/generated_plugin_registrant.cpp

@ -0,0 +1,14 @@
//
// Generated file. Do not edit.
//
// clang-format off
#include <flutter/application.h>
#include "generated_plugin_registrant.h"
void RegisterPlugins() {
Application::RegisterPlugins({
});
}

12
packages/device_info_plus/device_info_plus_aurora/example/aurora/flutter/generated_plugin_registrant.h

@ -0,0 +1,12 @@
//
// Generated file. Do not edit.
//
// clang-format off
#ifndef GENERATED_PLUGIN_REGISTRANT
#define GENERATED_PLUGIN_REGISTRANT
void RegisterPlugins();
#endif /* GENERATED_PLUGIN_REGISTRANT */

30
packages/device_info_plus/device_info_plus_aurora/example/aurora/flutter/generated_plugins.cmake

@ -0,0 +1,30 @@
#
# Generated file, do not edit.
#
set(ROOT_PROJECT_BINARY_DIR "${PROJECT_BINARY_DIR}")
function(add_library TARGET)
_add_library(${TARGET} ${ARGN})
if(NOT "${TARGET}" MATCHES "^PkgConfig::.*")
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${TARGET}>"
"${ROOT_PROJECT_BINARY_DIR}/bundle/lib/$<TARGET_FILE_NAME:${TARGET}>")
endif(NOT "${TARGET}" MATCHES "^PkgConfig::.*")
endfunction()
list(APPEND FLUTTER_PLATFORM_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
)
foreach(PLUGIN ${FLUTTER_PLATFORM_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${PLUGIN}/aurora plugins/${PLUGIN})
target_link_libraries(${BINARY_NAME} PRIVATE ${PLUGIN}_platform_plugin)
endforeach(PLUGIN)
foreach(FFI_PLUGIN ${FLUTTER_FFI_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${FFI_PLUGIN}/aurora plugins/${FFI_PLUGIN})
endforeach(FFI_PLUGIN)

BIN
packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/108x108.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/128x128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/172x172.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/86x86.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

10
packages/device_info_plus/device_info_plus_aurora/example/aurora/main.cpp

@ -0,0 +1,10 @@
#include <flutter/application.h>
#include "generated_plugin_registrant.h"
int main(int argc, char *argv[]) {
Application::Initialize(argc, argv);
Application::SetPixelRatio(1.8);
RegisterPlugins();
Application::Launch();
return 0;
}

31
packages/device_info_plus/device_info_plus_aurora/example/aurora/rpm/com.example.device_info_plus_aurora_example.spec

@ -0,0 +1,31 @@
%global __provides_exclude_from ^%{_datadir}/%{name}/lib/.*$
%global __requires_exclude ^lib(dconf|flutter-embedder|maliit-glib|appmanifest-.+|.+_platform_plugin)\\.so.*$
Name: com.example.device_info_plus_aurora_example
Summary: Demonstrates how to use the device_info_plus_aurora plugin.
Version: 0.1.0
Release: 1
License: Proprietary
Source0: %{name}-%{version}.tar.zst
BuildRequires: cmake
BuildRequires: pkgconfig(flutter-embedder)
%description
%{summary}.
%prep
%autosetup
%build
%cmake -DCMAKE_BUILD_TYPE=%{_flutter_build_type}
%make_build
%install
%make_install
%files
%{_bindir}/%{name}
%{_datadir}/%{name}/*
%{_datadir}/applications/%{name}.desktop
%{_datadir}/icons/hicolor/*/apps/%{name}.png

385
packages/device_info_plus/device_info_plus_aurora/example/lib/main.dart

@ -0,0 +1,385 @@
import 'package:device_info_plus_aurora/aurora_device_info.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:device_info_plus/device_info_plus.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? _error;
String? _id;
String? _name;
String? _version;
String? _prettyName;
bool? _hasGNSS;
bool? _hasNFC;
bool? _hasBluetooth;
bool? _hasWlan;
int? _maxCpuClockSpeed;
int? _numberCpuCores;
int? _batteryChargePercentage;
double? _mainCameraResolution;
double? _frontalCameraResolution;
int? _ramTotalSize;
int? _ramFreeSize;
String? _screenResolution;
String? _osVersion;
String? _deviceModel;
Map<String, dynamic>? _externalStorage;
Map<String, dynamic>? _internalStorage;
List<Map<String, dynamic>>? _simCards;
@override
void initState() {
super.initState();
initPlatformState();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
final deviceInfoPlugin = DeviceInfoPlugin();
try {
final deviceInfo = await deviceInfoPlugin.linuxInfo as AuroraDeviceInfo;
setState(() {
_id = deviceInfo.id;
_name = deviceInfo.name;
_version = deviceInfo.version;
_prettyName = deviceInfo.prettyName;
_hasGNSS = deviceInfo.hasGNSS;
_hasNFC = deviceInfo.hasNFC;
_hasBluetooth = deviceInfo.hasBluetooth;
_hasWlan = deviceInfo.hasWlan;
_maxCpuClockSpeed = deviceInfo.maxCpuClockSpeed;
_numberCpuCores = deviceInfo.numberCpuCores;
_batteryChargePercentage = deviceInfo.batteryChargePercentage;
_mainCameraResolution = deviceInfo.mainCameraResolution;
_frontalCameraResolution = deviceInfo.frontalCameraResolution;
_ramTotalSize = deviceInfo.ramTotalSize;
_ramFreeSize = deviceInfo.ramFreeSize;
_screenResolution = deviceInfo.screenResolution;
_osVersion = deviceInfo.osVersion;
_deviceModel = deviceInfo.deviceModel;
_externalStorage = deviceInfo.externalStorage;
_internalStorage = deviceInfo.internalStorage;
_simCards = deviceInfo.simCards;
});
} on Exception catch (e) {
setState(() {
_error = e.toString();
});
}
}
@override
Widget build(BuildContext context) {
const textStyleWhite = TextStyle(fontSize: 18, color: Colors.white);
const textStyleTitle = TextStyle(fontSize: 20, color: Colors.black);
const textStylePath = TextStyle(fontSize: 18, color: Colors.black54);
const spaceMedium = SizedBox(height: 20);
const spaceSmall = SizedBox(height: 10);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Example device_info_plus'),
),
body: Stack(
children: [
// Error message
Visibility(
visible: _error != null,
child: Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
color: Colors.redAccent,
borderRadius: BorderRadius.all(Radius.circular(10.0)),
),
child: Text(
_error ?? '',
style: textStyleWhite,
),
),
),
),
),
// List directories path
Visibility(
visible: _error == null,
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
child: Center(
child: Column(
children: [
// Info
Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
color: Colors.green,
borderRadius:
BorderRadius.all(Radius.circular(10.0)),
),
child: const Text(
'Demo application demonstration implementation of device_info_plus',
style: textStyleWhite,
textAlign: TextAlign.center,
),
),
const SizedBox(height: 30),
const Text(
'ID',
style: textStyleTitle,
),
spaceSmall,
Text(
_id.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Name',
style: textStyleTitle,
),
spaceSmall,
Text(
_name.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Version',
style: textStyleTitle,
),
spaceSmall,
Text(
_version.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Pretty Name',
style: textStyleTitle,
),
spaceSmall,
Text(
_prettyName.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Has GNSS',
style: textStyleTitle,
),
spaceSmall,
Text(
_hasGNSS.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Has NFC',
style: textStyleTitle,
),
spaceSmall,
Text(
_hasNFC.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Has Bluetooth',
style: textStyleTitle,
),
spaceSmall,
Text(
_hasBluetooth.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Has Wlan',
style: textStyleTitle,
),
spaceSmall,
Text(
_hasWlan.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Max Cpu Clock Speed',
style: textStyleTitle,
),
spaceSmall,
Text(
_maxCpuClockSpeed.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Number Cpu Cores',
style: textStyleTitle,
),
spaceSmall,
Text(
_numberCpuCores.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Battery Charge Percentage',
style: textStyleTitle,
),
spaceSmall,
Text(
_batteryChargePercentage.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Main Camera Resolution',
style: textStyleTitle,
),
spaceSmall,
Text(
_mainCameraResolution.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Frontal Camera Resolution',
style: textStyleTitle,
),
spaceSmall,
Text(
_frontalCameraResolution.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Ram Total Size',
style: textStyleTitle,
),
spaceSmall,
Text(
_ramTotalSize.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Ram Free Size',
style: textStyleTitle,
),
spaceSmall,
Text(
_ramFreeSize.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Screen Resolution',
style: textStyleTitle,
),
spaceSmall,
Text(
_screenResolution.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'OS Version',
style: textStyleTitle,
),
spaceSmall,
Text(
_osVersion.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Device Model',
style: textStyleTitle,
),
spaceSmall,
Text(
_deviceModel.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'External Storage Info',
style: textStyleTitle,
),
spaceSmall,
Text(
_externalStorage.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'Internal Storage Info',
style: textStyleTitle,
),
spaceSmall,
Text(
_internalStorage.toString(),
style: textStylePath,
),
spaceMedium,
const Text(
'SIM Cards Info',
style: textStyleTitle,
),
spaceSmall,
Text(
_simCards.toString(),
style: textStylePath,
),
],
),
),
),
),
),
],
),
),
);
}
}

23
packages/device_info_plus/device_info_plus_aurora/example/pubspec.yaml

@ -0,0 +1,23 @@
name: device_info_plus_aurora_example
description: Demonstrates how to use the device_info_plus_aurora plugin.
publish_to: 'none'
environment:
sdk: '>=2.18.6 <3.0.0'
dependencies:
flutter:
sdk: flutter
device_info_plus: ^9.0.1
device_info_plus_aurora:
path: ../
cupertino_icons: ^1.0.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true

106
packages/device_info_plus/device_info_plus_aurora/lib/aurora_device_info.dart

@ -0,0 +1,106 @@
import 'package:device_info_plus/device_info_plus.dart';
class AuroraDeviceInfo implements LinuxDeviceInfo {
/// Constructs a AuroraDeviceInfo.
AuroraDeviceInfo({
required this.hasGNSS,
required this.hasNFC,
required this.hasBluetooth,
required this.hasWlan,
required this.maxCpuClockSpeed,
required this.numberCpuCores,
required this.batteryChargePercentage,
required this.mainCameraResolution,
required this.frontalCameraResolution,
required this.ramTotalSize,
required this.ramFreeSize,
required this.screenResolution,
required this.osVersion,
required this.deviceModel,
required this.externalStorage,
required this.internalStorage,
required this.simCards,
});
@override
String get id => 'aurora';
@override
String get name => osVersion.split(' ').first;
@override
String? get version => osVersion.split(' ').last;
@override
String get prettyName => osVersion;
final bool hasGNSS;
final bool hasNFC;
final bool hasBluetooth;
final bool hasWlan;
final int maxCpuClockSpeed;
final int numberCpuCores;
final int batteryChargePercentage;
final double mainCameraResolution;
final double frontalCameraResolution;
final int ramTotalSize;
final int ramFreeSize;
final String screenResolution;
final String osVersion;
final String deviceModel;
final Map<String, dynamic> externalStorage;
final Map<String, dynamic> internalStorage;
final List<Map<String, dynamic>> simCards;
@override
Map<String, dynamic> get data => {
'id': id,
'name': name,
'version': version,
'prettyName': prettyName,
'hasGNSS': hasGNSS,
'hasNFC': hasNFC,
'hasBluetooth': hasBluetooth,
'hasWlan': hasWlan,
'maxCpuClockSpeed': maxCpuClockSpeed,
'numberCpuCores': numberCpuCores,
'batteryChargePercentage': batteryChargePercentage,
'mainCameraResolution': mainCameraResolution,
'frontalCameraResolution': frontalCameraResolution,
'ramTotalSize': ramTotalSize,
'ramFreeSize': ramFreeSize,
'screenResolution': screenResolution,
'osVersion': osVersion,
'deviceModel': deviceModel,
'externalStorage': externalStorage,
'internalStorage': internalStorage,
'simCards': simCards,
};
@override
String? get buildId => null;
@override
List<String>? get idLike => null;
@override
String? get machineId => null;
@override
String? get variant => null;
@override
String? get variantId => null;
@override
String? get versionCodename => null;
@override
String? get versionId => null;
@Deprecated('Use [data] getter instead')
@override
Map<String, dynamic> toMap() {
return data;
}
}

94
packages/device_info_plus/device_info_plus_aurora/lib/device_info_plus_aurora.dart

@ -0,0 +1,94 @@
import 'package:dbus/dbus.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:device_info_plus_aurora/ru_omp_deviceinfo_features.dart';
import 'package:device_info_plus_aurora/ru_omp_deviceinfo_sim.dart';
import 'package:device_info_plus_aurora/ru_omp_deviceinfo_storages.dart';
import 'package:device_info_plus_platform_interface/device_info_plus_platform_interface.dart';
import 'package:flutter/foundation.dart';
import 'aurora_device_info.dart';
class DeviceInfoPlusAurora extends DeviceInfoPlatform {
/// Register this dart class as the platform implementation for aurora
static void registerWith() {
if (TargetPlatform.aurora == defaultTargetPlatform) {
DeviceInfoPlatform.instance = DeviceInfoPlusAurora();
} else {
DeviceInfoPlatform.instance = DeviceInfoPlusLinuxPlugin();
}
}
@override
Future<BaseDeviceInfo> deviceInfo() async {
final client = DBusClient.session();
// Features
final features = RuOmpDeviceinfoFeatures(client, 'ru.omp.deviceinfo',
DBusObjectPath('/ru/omp/deviceinfo/Features'));
final hasGNSS = await features.callhasGNSS();
final hasNFC = await features.callhasNFC();
final hasBluetooth = await features.callhasBluetooth();
final hasWlan = await features.callhasWlan();
final maxCpuClockSpeed = await features.callgetMaxCpuClockSpeed();
final numberCpuCores = await features.callgetNumberCpuCores();
final batteryChargePercentage =
await features.callgetBatteryChargePercentage();
final mainCameraResolution = await features.callgetMainCameraResolution();
final frontalCameraResolution =
await features.callgetFrontalCameraResolution();
final ramTotalSize = await features.callgetRamTotalSize();
final ramFreeSize = await features.callgetRamFreeSize();
final screenResolution = await features.callgetScreenResolution();
final osVersion = await features.callgetOsVersion();
final deviceModel = await features.callgetDeviceModel();
// Storages
final storages = RuOmpDeviceinfoStorages(client, 'ru.omp.deviceinfo',
DBusObjectPath('/ru/omp/deviceinfo/Storages'));
final Map<String, dynamic> internalStorage = {};
(await storages.callgetInternalStorageInfo()).forEach((key, value) {
internalStorage[key] = value.toNative();
});
final Map<String, dynamic> externalStorage = {};
(await storages.callgetExternalStorageInfo()).forEach((key, value) {
externalStorage[key] = value.toNative();
});
// SIM
final infoSIM = RuOmpDeviceinfoSIM(
client, 'ru.omp.deviceinfo', DBusObjectPath('/ru/omp/deviceinfo/SIM'));
final List<Map<String, dynamic>> simCards = [];
for (var element in await infoSIM.callgetSimCardsInfo()) {
final Map<String, dynamic> simCard = {};
element.forEach((key, value) {
simCard[key] = value.toNative();
});
simCards.add(simCard);
}
await client.close();
return AuroraDeviceInfo(
hasGNSS: hasGNSS,
hasNFC: hasNFC,
hasBluetooth: hasBluetooth,
hasWlan: hasWlan,
maxCpuClockSpeed: maxCpuClockSpeed,
numberCpuCores: numberCpuCores,
batteryChargePercentage: batteryChargePercentage,
mainCameraResolution: mainCameraResolution,
frontalCameraResolution: frontalCameraResolution,
ramTotalSize: ramTotalSize,
ramFreeSize: ramFreeSize,
screenResolution: screenResolution,
osVersion: osVersion,
deviceModel: deviceModel,
externalStorage: externalStorage,
internalStorage: internalStorage,
simCards: simCards,
);
}
}

237
packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_features.dart

@ -0,0 +1,237 @@
// This file was generated using the following command and may be overwritten.
// dart-dbus generate-remote-object data/ru.omp.deviceinfo.Features.xml
import 'package:dbus/dbus.dart';
/// dart-dbus generate-remote-object data/ru.omp.deviceinfo.Features.xml -o lib/ru_omp_deviceinfo_features.dart
/// Signal data for ru.omp.deviceinfo.Features.cameraEnabledChanged.
class RuOmpDeviceinfoFeaturescameraEnabledChanged extends DBusSignal {
bool get enabled => values[0].asBoolean();
RuOmpDeviceinfoFeaturescameraEnabledChanged(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
class RuOmpDeviceinfoFeatures extends DBusRemoteObject {
/// Stream of ru.omp.deviceinfo.Features.cameraEnabledChanged signals.
late final Stream<RuOmpDeviceinfoFeaturescameraEnabledChanged>
cameraEnabledChanged;
RuOmpDeviceinfoFeatures(
DBusClient client, String destination, DBusObjectPath path)
: super(client, name: destination, path: path) {
cameraEnabledChanged = DBusRemoteObjectSignalStream(
object: this,
interface: 'ru.omp.deviceinfo.Features',
name: 'cameraEnabledChanged',
signature: DBusSignature('b'))
.asBroadcastStream()
.map((signal) => RuOmpDeviceinfoFeaturescameraEnabledChanged(signal));
}
/// Invokes ru.omp.deviceinfo.Features.hasGNSS()
Future<bool> callhasGNSS(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod('ru.omp.deviceinfo.Features', 'hasGNSS', [],
replySignature: DBusSignature('b'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asBoolean();
}
/// Invokes ru.omp.deviceinfo.Features.hasNFC()
Future<bool> callhasNFC(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod('ru.omp.deviceinfo.Features', 'hasNFC', [],
replySignature: DBusSignature('b'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asBoolean();
}
/// Invokes ru.omp.deviceinfo.Features.hasBluetooth()
Future<bool> callhasBluetooth(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'hasBluetooth', [],
replySignature: DBusSignature('b'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asBoolean();
}
/// Invokes ru.omp.deviceinfo.Features.hasWlan()
Future<bool> callhasWlan(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod('ru.omp.deviceinfo.Features', 'hasWlan', [],
replySignature: DBusSignature('b'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asBoolean();
}
/// Invokes ru.omp.deviceinfo.Features.getMaxCpuClockSpeed()
Future<int> callgetMaxCpuClockSpeed(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getMaxCpuClockSpeed', [],
replySignature: DBusSignature('u'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asUint32();
}
/// Invokes ru.omp.deviceinfo.Features.getNumberCpuCores()
Future<int> callgetNumberCpuCores(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getNumberCpuCores', [],
replySignature: DBusSignature('u'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asUint32();
}
/// Invokes ru.omp.deviceinfo.Features.getCpuModel()
Future<String> callgetCpuModel(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getCpuModel', [],
replySignature: DBusSignature('s'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asString();
}
/// Invokes ru.omp.deviceinfo.Features.getMaxCpuCoresClockSpeed()
Future<List<DBusValue>> callgetMaxCpuCoresClockSpeed(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getMaxCpuCoresClockSpeed', [],
replySignature: DBusSignature('av'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asVariantArray().toList();
}
/// Invokes ru.omp.deviceinfo.Features.getBatteryChargePercentage()
Future<int> callgetBatteryChargePercentage(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getBatteryChargePercentage', [],
replySignature: DBusSignature('u'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asUint32();
}
/// Invokes ru.omp.deviceinfo.Features.getMainCameraResolution()
Future<double> callgetMainCameraResolution(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getMainCameraResolution', [],
replySignature: DBusSignature('d'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asDouble();
}
/// Invokes ru.omp.deviceinfo.Features.getFrontalCameraResolution()
Future<double> callgetFrontalCameraResolution(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getFrontalCameraResolution', [],
replySignature: DBusSignature('d'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asDouble();
}
/// Invokes ru.omp.deviceinfo.Features.getRamTotalSize()
Future<int> callgetRamTotalSize(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getRamTotalSize', [],
replySignature: DBusSignature('t'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asUint64();
}
/// Invokes ru.omp.deviceinfo.Features.getRamFreeSize()
Future<int> callgetRamFreeSize(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getRamFreeSize', [],
replySignature: DBusSignature('t'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asUint64();
}
/// Invokes ru.omp.deviceinfo.Features.getScreenResolution()
Future<String> callgetScreenResolution(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getScreenResolution', [],
replySignature: DBusSignature('s'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asString();
}
/// Invokes ru.omp.deviceinfo.Features.getOsVersion()
Future<String> callgetOsVersion(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getOsVersion', [],
replySignature: DBusSignature('s'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asString();
}
/// Invokes ru.omp.deviceinfo.Features.getDeviceModel()
Future<String> callgetDeviceModel(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getDeviceModel', [],
replySignature: DBusSignature('s'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asString();
}
/// Invokes ru.omp.deviceinfo.Features.getSerialNumber()
Future<String> callgetSerialNumber(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Features', 'getSerialNumber', [],
replySignature: DBusSignature('s'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asString();
}
}

105
packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_sim.dart

@ -0,0 +1,105 @@
// This file was generated using the following command and may be overwritten.
// dart-dbus generate-remote-object data/ru.omp.deviceinfo.SIM.xml
import 'package:dbus/dbus.dart';
/// dart-dbus generate-remote-object data/ru.omp.deviceinfo.SIM.xml -o lib/ru_omp_deviceinfo_sim.dart
/// Signal data for ru.omp.deviceinfo.SIM.simCardsEnabledChanged.
class RuOmpDeviceinfoSIMsimCardsEnabledChanged extends DBusSignal {
List<Map<String, DBusValue>> get updatedSimCards =>
values[0].asArray().map((child) => child.asStringVariantDict()).toList();
RuOmpDeviceinfoSIMsimCardsEnabledChanged(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
/// Signal data for ru.omp.deviceinfo.SIM.preferredDataTransferSimChanged.
class RuOmpDeviceinfoSIMpreferredDataTransferSimChanged extends DBusSignal {
List<Map<String, DBusValue>> get updatedSimCards =>
values[0].asArray().map((child) => child.asStringVariantDict()).toList();
RuOmpDeviceinfoSIMpreferredDataTransferSimChanged(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
/// Signal data for ru.omp.deviceinfo.SIM.preferredVoiceCallSimChanged.
class RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged extends DBusSignal {
List<Map<String, DBusValue>> get updatedSimCards =>
values[0].asArray().map((child) => child.asStringVariantDict()).toList();
RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
class RuOmpDeviceinfoSIM extends DBusRemoteObject {
/// Stream of ru.omp.deviceinfo.SIM.simCardsEnabledChanged signals.
late final Stream<RuOmpDeviceinfoSIMsimCardsEnabledChanged>
simCardsEnabledChanged;
/// Stream of ru.omp.deviceinfo.SIM.preferredDataTransferSimChanged signals.
late final Stream<RuOmpDeviceinfoSIMpreferredDataTransferSimChanged>
preferredDataTransferSimChanged;
/// Stream of ru.omp.deviceinfo.SIM.preferredVoiceCallSimChanged signals.
late final Stream<RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged>
preferredVoiceCallSimChanged;
RuOmpDeviceinfoSIM(DBusClient client, String destination, DBusObjectPath path)
: super(client, name: destination, path: path) {
simCardsEnabledChanged = DBusRemoteObjectSignalStream(
object: this,
interface: 'ru.omp.deviceinfo.SIM',
name: 'simCardsEnabledChanged',
signature: DBusSignature('aa{sv}'))
.asBroadcastStream()
.map((signal) => RuOmpDeviceinfoSIMsimCardsEnabledChanged(signal));
preferredDataTransferSimChanged = DBusRemoteObjectSignalStream(
object: this,
interface: 'ru.omp.deviceinfo.SIM',
name: 'preferredDataTransferSimChanged',
signature: DBusSignature('aa{sv}'))
.asBroadcastStream()
.map((signal) =>
RuOmpDeviceinfoSIMpreferredDataTransferSimChanged(signal));
preferredVoiceCallSimChanged = DBusRemoteObjectSignalStream(
object: this,
interface: 'ru.omp.deviceinfo.SIM',
name: 'preferredVoiceCallSimChanged',
signature: DBusSignature('aa{sv}'))
.asBroadcastStream()
.map(
(signal) => RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged(signal));
}
/// Invokes ru.omp.deviceinfo.SIM.getSimCardsInfo()
Future<List<Map<String, DBusValue>>> callgetSimCardsInfo(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.SIM', 'getSimCardsInfo', [],
replySignature: DBusSignature('aa{sv}'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0]
.asArray()
.map((child) => child.asStringVariantDict())
.toList();
}
}

72
packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_storages.dart

@ -0,0 +1,72 @@
// This file was generated using the following command and may be overwritten.
// dart-dbus generate-remote-object data/ru.omp.deviceinfo.Storages.xml
import 'package:dbus/dbus.dart';
/// dart-dbus generate-remote-object data/ru.omp.deviceinfo.Storages.xml -o lib/ru_omp_deviceinfo_storages.dart
/// Signal data for ru.omp.deviceinfo.Storages.externalStorageChanged.
class RuOmpDeviceinfoStoragesexternalStorageChanged extends DBusSignal {
Map<String, DBusValue> get updatedStorage => values[0].asStringVariantDict();
RuOmpDeviceinfoStoragesexternalStorageChanged(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
class RuOmpDeviceinfoStorages extends DBusRemoteObject {
/// Stream of ru.omp.deviceinfo.Storages.externalStorageChanged signals.
late final Stream<RuOmpDeviceinfoStoragesexternalStorageChanged>
externalStorageChanged;
RuOmpDeviceinfoStorages(
DBusClient client, String destination, DBusObjectPath path)
: super(client, name: destination, path: path) {
externalStorageChanged = DBusRemoteObjectSignalStream(
object: this,
interface: 'ru.omp.deviceinfo.Storages',
name: 'externalStorageChanged',
signature: DBusSignature('a{sv}'))
.asBroadcastStream()
.map((signal) => RuOmpDeviceinfoStoragesexternalStorageChanged(signal));
}
/// Invokes ru.omp.deviceinfo.Storages.getInternalStorageInfo()
Future<Map<String, DBusValue>> callgetInternalStorageInfo(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Storages', 'getInternalStorageInfo', [],
replySignature: DBusSignature('a{sv}'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asStringVariantDict();
}
/// Invokes ru.omp.deviceinfo.Storages.getInternalUserPartitionInfo()
Future<Map<String, DBusValue>> callgetInternalUserPartitionInfo(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Storages', 'getInternalUserPartitionInfo', [],
replySignature: DBusSignature('a{sv}'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asStringVariantDict();
}
/// Invokes ru.omp.deviceinfo.Storages.getExternalStorageInfo()
Future<Map<String, DBusValue>> callgetExternalStorageInfo(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'ru.omp.deviceinfo.Storages', 'getExternalStorageInfo', [],
replySignature: DBusSignature('a{sv}'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asStringVariantDict();
}
}

27
packages/device_info_plus/device_info_plus_aurora/pubspec.yaml

@ -0,0 +1,27 @@
name: device_info_plus_aurora
description: The Aurora OS implementation of flutter_local_notifications.
version: 0.0.1
homepage:
environment:
sdk: '>=2.18.6 <3.0.0'
flutter: ">=2.5.0"
dependencies:
flutter:
sdk: flutter
dbus: ^0.7.8
device_info_plus: ^9.0.1
plugin_platform_interface: ^2.0.2
device_info_plus_platform_interface: ^7.0.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
plugin:
platforms:
aurora:
dartPluginClass: DeviceInfoPlusAurora

32
packages/flutter_local_notifications/flutter_local_notifications_aurora/.gitignore vendored

@ -0,0 +1,32 @@
# 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/
run.sh
.metadata

18
packages/flutter_local_notifications/flutter_local_notifications_aurora/README.md

@ -0,0 +1,18 @@
# flutter_local_notifications_aurora
The Aurora implementation of [`flutter_local_notifications`][https://github.com/MaikuB/flutter_local_notifications].
## Usage
This package is not an _endorsed_ implementation of `flutter_local_notifications`.
Therefore, you have to include `flutter_local_notifications_aurora` alongside `flutter_local_notifications` as dependencies in your `pubspec.yaml` file.
```yaml
dependencies:
flutter_local_notifications: 14.0.0+2
flutter_local_notifications_aurora:
path: # path to folder with plugin
```
### Preview example
![preview.png](data%2Fpreview.gif)

1
packages/flutter_local_notifications/flutter_local_notifications_aurora/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

37
packages/flutter_local_notifications/flutter_local_notifications_aurora/data/org.freedesktop.Notifications.xml

@ -0,0 +1,37 @@
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.freedesktop.Notifications">
<signal name="NotificationClosed">
<arg name="id" type="u" direction="out"/>
<arg name="reason" type="u" direction="out"/>
</signal>
<signal name="ActionInvoked">
<arg name="id" type="u" direction="out"/>
<arg name="action_key" type="s" direction="out"/>
</signal>
<method name="Notify">
<annotation name="org.qtproject.QtDBus.QtTypeName.In6" value="QVariantMap"/>
<arg type="u" direction="out"/>
<arg name="app_name" type="s" direction="in"/>
<arg name="replaces_id" type="u" direction="in"/>
<arg name="app_icon" type="s" direction="in"/>
<arg name="summary" type="s" direction="in"/>
<arg name="body" type="s" direction="in"/>
<arg name="actions" type="as" direction="in"/>
<arg name="hints" type="a{sv}" direction="in"/>
<arg name="timeout" type="i" direction="in"/>
</method>
<method name="CloseNotification">
<arg name="id" type="u" direction="in"/>
</method>
<method name="GetCapabilities">
<arg type="as" name="caps" direction="out"/>
</method>
<method name="GetServerInformation">
<arg type="s" name="name" direction="out"/>
<arg type="s" name="vendor" direction="out"/>
<arg type="s" name="version" direction="out"/>
<arg type="s" name="spec_version" direction="out"/>
</method>
</interface>
</node>

BIN
packages/flutter_local_notifications/flutter_local_notifications_aurora/data/preview.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 KiB

46
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/.gitignore vendored

@ -0,0 +1,46 @@
# 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
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
.metadata
pubspec.lock
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

17
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/README.md

@ -0,0 +1,17 @@
# flutter_local_notifications_aurora_example
Demonstrates how to use the flutter_local_notifications_aurora plugin.
## Build
```shell
# Add an alias if it doesn't already exist
alias flutter-aurora=$HOME/.local/opt/flutter-sdk/bin/flutter
# Get dependencies
flutter-aurora pub get
# Run build
flutter-aurora build aurora --release
```
You can collect, sign, run an example on the device with a script located in the `script/build_example.sh`
More information in `build_example.sh`.

1
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

1
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/.gitignore vendored

@ -0,0 +1 @@
flutter/ephemeral

47
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/CMakeLists.txt

@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.10)
project(com.example.flutter_local_notifications_aurora_example LANGUAGES CXX)
include(GNUInstallDirs)
set(BINARY_NAME ${CMAKE_PROJECT_NAME})
set(FLUTTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flutter)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_SKIP_RPATH OFF)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../share/${BINARY_NAME}/lib")
find_package(PkgConfig REQUIRED)
pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder)
add_executable(${BINARY_NAME} main.cpp ${FLUTTER_DIR}/generated_plugin_registrant.cpp)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::FlutterEmbedder)
target_include_directories(${BINARY_NAME} PRIVATE ${FLUTTER_DIR})
include(flutter/generated_plugins.cmake)
set(PACKAGE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
set(DESKTOP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/applications)
set(ICONS_INSTALL_ROOT_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor)
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libflutter-embedder.so
${PROJECT_BINARY_DIR}/bundle/lib/libflutter-embedder.so)
install(FILES ${PROJECT_BINARY_DIR}/bundle/icudtl.dat DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/flutter_assets DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/lib DESTINATION ${PACKAGE_INSTALL_DIR})
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES desktop/${BINARY_NAME}.desktop DESTINATION ${DESKTOP_INSTALL_DIR})
foreach(ICONS_SIZE 86x86 108x108 128x128 172x172)
install(FILES icons/${ICONS_SIZE}.png
RENAME ${BINARY_NAME}.png
DESTINATION ${ICONS_INSTALL_ROOT_DIR}/${ICONS_SIZE}/apps/)
endforeach(ICONS_SIZE)

12
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/desktop/com.example.flutter_local_notifications_aurora_example.desktop

@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
Name=Flutter Notification
Comment=Demonstrates how to use the flutter_local_notifications_aurora plugin.
Icon=com.example.flutter_local_notifications_aurora_example
Exec=/usr/bin/com.example.flutter_local_notifications_aurora_example
X-Nemo-Application-Type=silica-qt5
[X-Application]
Permissions=
OrganizationName=com.example
ApplicationName=flutter_local_notifications_aurora_example

16
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/flutter/generated_plugin_registrant.cpp

@ -0,0 +1,16 @@
//
// Generated file. Do not edit.
//
// clang-format off
#include <flutter/application.h>
#include <package_info_plus_aurora/package_info_plus_aurora_plugin.h>
#include "generated_plugin_registrant.h"
void RegisterPlugins() {
Application::RegisterPlugins({
std::make_shared<PackageInfoPlusAuroraPlugin>(),
});
}

12
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/flutter/generated_plugin_registrant.h

@ -0,0 +1,12 @@
//
// Generated file. Do not edit.
//
// clang-format off
#ifndef GENERATED_PLUGIN_REGISTRANT
#define GENERATED_PLUGIN_REGISTRANT
void RegisterPlugins();
#endif /* GENERATED_PLUGIN_REGISTRANT */

31
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/flutter/generated_plugins.cmake

@ -0,0 +1,31 @@
#
# Generated file, do not edit.
#
set(ROOT_PROJECT_BINARY_DIR "${PROJECT_BINARY_DIR}")
function(add_library TARGET)
_add_library(${TARGET} ${ARGN})
if(NOT "${TARGET}" MATCHES "^PkgConfig::.*")
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${TARGET}>"
"${ROOT_PROJECT_BINARY_DIR}/bundle/lib/$<TARGET_FILE_NAME:${TARGET}>")
endif(NOT "${TARGET}" MATCHES "^PkgConfig::.*")
endfunction()
list(APPEND FLUTTER_PLATFORM_PLUGIN_LIST
package_info_plus_aurora
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
)
foreach(PLUGIN ${FLUTTER_PLATFORM_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${PLUGIN}/aurora plugins/${PLUGIN})
target_link_libraries(${BINARY_NAME} PRIVATE ${PLUGIN}_platform_plugin)
endforeach(PLUGIN)
foreach(FFI_PLUGIN ${FLUTTER_FFI_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${FFI_PLUGIN}/aurora plugins/${FFI_PLUGIN})
endforeach(FFI_PLUGIN)

BIN
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/108x108.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/128x128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/172x172.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/icons/86x86.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

10
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/main.cpp

@ -0,0 +1,10 @@
#include <flutter/application.h>
#include "generated_plugin_registrant.h"
int main(int argc, char *argv[]) {
Application::Initialize(argc, argv);
Application::SetPixelRatio(1.8);
RegisterPlugins();
Application::Launch();
return 0;
}

31
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/aurora/rpm/com.example.flutter_local_notifications_aurora_example.spec

@ -0,0 +1,31 @@
%global __provides_exclude_from ^%{_datadir}/%{name}/lib/.*$
%global __requires_exclude ^lib(dconf|flutter-embedder|maliit-glib|appmanifest-.+|.+_platform_plugin)\\.so.*$
Name: com.example.flutter_local_notifications_aurora_example
Summary: Demonstrates how to use the flutter_local_notifications_aurora plugin.
Version: 0.1.0
Release: 1
License: Proprietary
Source0: %{name}-%{version}.tar.zst
BuildRequires: cmake
BuildRequires: pkgconfig(flutter-embedder)
%description
%{summary}.
%prep
%autosetup
%build
%cmake -DCMAKE_BUILD_TYPE=%{_flutter_build_type}
%make_build
%install
%make_install
%files
%{_bindir}/%{name}
%{_datadir}/%{name}/*
%{_datadir}/applications/%{name}.desktop
%{_datadir}/icons/hicolor/*/apps/%{name}.png

90
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/lib/main.dart

@ -0,0 +1,90 @@
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final notificationID = 1;
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
@override
void initState() {
super.initState();
}
Future<void> _showNotification() async {
await flutterLocalNotificationsPlugin.show(
notificationID,
"Title notification",
"My long body text notification",
null,
);
}
Future<void> _cancelNotification() async {
await flutterLocalNotificationsPlugin.cancel(notificationID);
}
@override
Widget build(BuildContext context) {
const textStyleWhite = TextStyle(fontSize: 18, color: Colors.white);
const spaceMedium = SizedBox(height: 20);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Example flutter_local_notifications'),
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
child: Center(
child: Column(
children: [
// Info
Container(
padding: const EdgeInsets.all(20),
decoration: const BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.all(Radius.circular(10.0)),
),
child: const Text(
'Demo application demonstration implementation of flutter_local_notifications',
style: textStyleWhite,
textAlign: TextAlign.center,
),
),
const SizedBox(height: 30),
ElevatedButton(
onPressed: _showNotification,
child: const Text('Show notification'),
),
spaceMedium,
ElevatedButton(
onPressed: _cancelNotification,
child: const Text('Cancel notification'),
)
],
),
),
),
),
),
);
}
}

23
packages/flutter_local_notifications/flutter_local_notifications_aurora/example/pubspec.yaml

@ -0,0 +1,23 @@
name: flutter_local_notifications_aurora_example
description: Demonstrates how to use the flutter_local_notifications_aurora plugin.
publish_to: 'none'
environment:
sdk: '>=2.18.6 <3.0.0'
dependencies:
flutter:
sdk: flutter
flutter_local_notifications: ^14.0.0+2
flutter_local_notifications_aurora:
path: ../
cupertino_icons: ^1.0.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true

63
packages/flutter_local_notifications/flutter_local_notifications_aurora/lib/flutter_local_notifications_aurora.dart

@ -0,0 +1,63 @@
import 'dart:async';
import 'package:dbus/dbus.dart';
import 'package:flutter_local_notifications_aurora/org_freedesktop_notifications.dart';
import 'package:flutter_local_notifications_platform_interface/flutter_local_notifications_platform_interface.dart';
import 'package:package_info_plus/package_info_plus.dart';
class FlutterLocalNotificationsAurora
extends FlutterLocalNotificationsPlatform {
/// Registers this class as the default instance of [FlutterLocalNotificationsPlatform].
static void registerWith() {
FlutterLocalNotificationsPlatform.instance =
FlutterLocalNotificationsAurora();
}
final Map<int, List<int>> auroraIDs = {};
@override
Future<void> show(
int id,
String? title,
String? body, {
String? payload,
}) async {
final appName = (await PackageInfo.fromPlatform()).appName;
final client = DBusClient.session();
final object = OrgFreedesktopNotifications(
client,
'org.freedesktop.Notifications',
DBusObjectPath('/org/freedesktop/Notifications'));
auroraIDs[id] = auroraIDs[id] ?? [];
auroraIDs[id]!.add(await object.callNotify(
appName,
0,
' ',
title ?? '',
body ?? '',
[],
{},
-1,
));
await client.close();
}
@override
Future<void> cancel(int id) async {
final ids = auroraIDs[id] ?? [];
if (auroraIDs.isNotEmpty) {
final client = DBusClient.session();
final object = OrgFreedesktopNotifications(
client,
'org.freedesktop.Notifications',
DBusObjectPath('/org/freedesktop/Notifications'));
for (final auroraID in ids) {
await object.callCloseNotification(auroraID);
}
ids.remove(id);
await client.close();
}
}
}

129
packages/flutter_local_notifications/flutter_local_notifications_aurora/lib/org_freedesktop_notifications.dart

@ -0,0 +1,129 @@
// This file was generated using the following command and may be overwritten.
// dart-dbus generate-remote-object data/org.freedesktop.Notifications.xml
// dart pub global activate dbus
// dart-dbus generate-remote-object data/org.freedesktop.Notifications.xml -o lib/org_freedesktop_notifications.dart
import 'package:dbus/dbus.dart';
/// Signal data for org.freedesktop.Notifications.NotificationClosed.
class OrgFreedesktopNotificationsNotificationClosed extends DBusSignal {
int get id => values[0].asUint32();
int get reason => values[1].asUint32();
OrgFreedesktopNotificationsNotificationClosed(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
/// Signal data for org.freedesktop.Notifications.ActionInvoked.
class OrgFreedesktopNotificationsActionInvoked extends DBusSignal {
int get id => values[0].asUint32();
String get action_key => values[1].asString();
OrgFreedesktopNotificationsActionInvoked(DBusSignal signal)
: super(
sender: signal.sender,
path: signal.path,
interface: signal.interface,
name: signal.name,
values: signal.values);
}
class OrgFreedesktopNotifications extends DBusRemoteObject {
/// Stream of org.freedesktop.Notifications.NotificationClosed signals.
late final Stream<OrgFreedesktopNotificationsNotificationClosed>
notificationClosed;
/// Stream of org.freedesktop.Notifications.ActionInvoked signals.
late final Stream<OrgFreedesktopNotificationsActionInvoked> actionInvoked;
OrgFreedesktopNotifications(
DBusClient client, String destination, DBusObjectPath path)
: super(client, name: destination, path: path) {
notificationClosed = DBusRemoteObjectSignalStream(
object: this,
interface: 'org.freedesktop.Notifications',
name: 'NotificationClosed',
signature: DBusSignature('uu'))
.asBroadcastStream()
.map((signal) => OrgFreedesktopNotificationsNotificationClosed(signal));
actionInvoked = DBusRemoteObjectSignalStream(
object: this,
interface: 'org.freedesktop.Notifications',
name: 'ActionInvoked',
signature: DBusSignature('us'))
.asBroadcastStream()
.map((signal) => OrgFreedesktopNotificationsActionInvoked(signal));
}
/// Invokes org.freedesktop.Notifications.Notify()
Future<int> callNotify(
String app_name,
int replaces_id,
String app_icon,
String summary,
String body,
List<String> actions,
Map<String, DBusValue> hints,
int timeout,
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'org.freedesktop.Notifications',
'Notify',
[
DBusString(app_name),
DBusUint32(replaces_id),
DBusString(app_icon),
DBusString(summary),
DBusString(body),
DBusArray.string(actions),
DBusDict.stringVariant(hints),
DBusInt32(timeout)
],
replySignature: DBusSignature('u'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asUint32();
}
/// Invokes org.freedesktop.Notifications.CloseNotification()
Future<void> callCloseNotification(int id,
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
await callMethod(
'org.freedesktop.Notifications', 'CloseNotification', [DBusUint32(id)],
replySignature: DBusSignature(''),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
}
/// Invokes org.freedesktop.Notifications.GetCapabilities()
Future<List<String>> callGetCapabilities(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'org.freedesktop.Notifications', 'GetCapabilities', [],
replySignature: DBusSignature('as'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues[0].asStringArray().toList();
}
/// Invokes org.freedesktop.Notifications.GetServerInformation()
Future<List<DBusValue>> callGetServerInformation(
{bool noAutoStart = false,
bool allowInteractiveAuthorization = false}) async {
var result = await callMethod(
'org.freedesktop.Notifications', 'GetServerInformation', [],
replySignature: DBusSignature('ssss'),
noAutoStart: noAutoStart,
allowInteractiveAuthorization: allowInteractiveAuthorization);
return result.returnValues;
}
}

29
packages/flutter_local_notifications/flutter_local_notifications_aurora/pubspec.yaml

@ -0,0 +1,29 @@
name: flutter_local_notifications_aurora
description: The Aurora OS implementation of flutter_local_notifications.
version: 0.0.1
homepage:
environment:
sdk: '>=2.18.6 <3.0.0'
flutter: ">=2.5.0"
dependencies:
flutter:
sdk: flutter
dbus: ^0.7.8
plugin_platform_interface: ^2.0.2
flutter_local_notifications_platform_interface: ^7.0.0
package_info_plus: ^4.0.0
package_info_plus_aurora:
path: ../../package_info_plus/package_info_plus_aurora
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
plugin:
platforms:
aurora:
dartPluginClass: FlutterLocalNotificationsAurora

32
packages/package_info_plus/package_info_plus_aurora/.gitignore vendored

@ -0,0 +1,32 @@
# 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/
.metadata
run.sh

18
packages/package_info_plus/package_info_plus_aurora/README.md

@ -0,0 +1,18 @@
# package_info_plus_aurora
The Aurora implementation of [`package_info_plus`](https://pub.dev/packages/package_info_plus).
## Usage
This package is not an _endorsed_ implementation of `package_info_plus`.
Therefore, you have to include `package_info_plus_aurora` alongside `package_info_plus` as dependencies in your `pubspec.yaml` file.
```yaml
dependencies:
package_info_plus: 4.0.0
package_info_plus_aurora:
path: # path to folder with plugin
```
### Preview example
![preview.png](data%2Fpreview.png)

1
packages/package_info_plus/package_info_plus_aurora/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

23
packages/package_info_plus/package_info_plus_aurora/aurora/CMakeLists.txt

@ -0,0 +1,23 @@
cmake_minimum_required(VERSION 3.10)
set(PROJECT_NAME package_info_plus_aurora)
set(PLUGIN_NAME package_info_plus_aurora_platform_plugin)
project(${PROJECT_NAME} LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-psabi")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
find_package(PkgConfig REQUIRED)
pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder)
add_library(${PLUGIN_NAME} SHARED package_info_plus_aurora_plugin.cpp)
set_target_properties(${PLUGIN_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden)
target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::FlutterEmbedder)
target_include_directories(${PLUGIN_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(${PLUGIN_NAME} PRIVATE PLUGIN_IMPL)

24
packages/package_info_plus/package_info_plus_aurora/aurora/include/package_info_plus_aurora/package_info_plus_aurora_plugin.h

@ -0,0 +1,24 @@
#ifndef FLUTTER_PLUGIN_PACKAGE_INFO_PLUS_AURORA_PLUGIN_H
#define FLUTTER_PLUGIN_PACKAGE_INFO_PLUS_AURORA_PLUGIN_H
#include <flutter/plugin-interface.h>
#ifdef PLUGIN_IMPL
#define PLUGIN_EXPORT __attribute__((visibility("default")))
#else
#define PLUGIN_EXPORT
#endif
class PLUGIN_EXPORT PackageInfoPlusAuroraPlugin final : public PluginInterface
{
public:
void RegisterWithRegistrar(PluginRegistrar &registrar) override;
private:
void onMethodCall(const MethodCall &call);
void onGetApplicationOrg(const MethodCall &call);
void onGetApplicationName(const MethodCall &call);
void unimplemented(const MethodCall &call);
};
#endif /* FLUTTER_PLUGIN_PACKAGE_INFO_PLUS_AURORA_PLUGIN_H */

43
packages/package_info_plus/package_info_plus_aurora/aurora/package_info_plus_aurora_plugin.cpp

@ -0,0 +1,43 @@
#include <package_info_plus_aurora/package_info_plus_aurora_plugin.h>
#include <flutter/method-channel.h>
#include <flutter/application.h>
#include <sys/utsname.h>
void PackageInfoPlusAuroraPlugin::RegisterWithRegistrar(PluginRegistrar &registrar)
{
registrar.RegisterMethodChannel("package_info_plus_aurora",
MethodCodecType::Standard,
[this](const MethodCall &call) { this->onMethodCall(call); });
}
void PackageInfoPlusAuroraPlugin::onMethodCall(const MethodCall &call)
{
const auto &method = call.GetMethod();
if (method == "getApplicationOrg") {
onGetApplicationOrg(call);
return;
}
if (method == "getApplicationName") {
onGetApplicationName(call);
return;
}
unimplemented(call);
}
void PackageInfoPlusAuroraPlugin::onGetApplicationOrg(const MethodCall &call)
{
call.SendSuccessResponse(Application::GetID().orgname);
}
void PackageInfoPlusAuroraPlugin::onGetApplicationName(const MethodCall &call)
{
call.SendSuccessResponse(Application::GetID().appname);
}
void PackageInfoPlusAuroraPlugin::unimplemented(const MethodCall &call)
{
call.SendSuccessResponse(nullptr);
}

BIN
packages/package_info_plus/package_info_plus_aurora/data/preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

45
packages/package_info_plus/package_info_plus_aurora/example/.gitignore vendored

@ -0,0 +1,45 @@
# 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
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
pubspec.lock
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

17
packages/package_info_plus/package_info_plus_aurora/example/README.md

@ -0,0 +1,17 @@
# package_info_plus_aurora_example
Demonstrates how to use the package_info_plus_aurora_example plugin.
## Build
```shell
# Add an alias if it doesn't already exist
alias flutter-aurora=$HOME/.local/opt/flutter-sdk/bin/flutter
# Get dependencies
flutter-aurora pub get
# Run build
flutter-aurora build aurora --release
```
You can collect, sign, run an example on the device with a script located in the `script/build_example.sh`
More information in `build_example.sh`.

1
packages/package_info_plus/package_info_plus_aurora/example/analysis_options.yaml

@ -0,0 +1 @@
include: package:flutter_lints/flutter.yaml

1
packages/package_info_plus/package_info_plus_aurora/example/aurora/.gitignore vendored

@ -0,0 +1 @@
flutter/ephemeral

47
packages/package_info_plus/package_info_plus_aurora/example/aurora/CMakeLists.txt

@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.10)
project(com.example.package_info_plus_aurora_example LANGUAGES CXX)
include(GNUInstallDirs)
set(BINARY_NAME ${CMAKE_PROJECT_NAME})
set(FLUTTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flutter)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_SKIP_RPATH OFF)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../share/${BINARY_NAME}/lib")
find_package(PkgConfig REQUIRED)
pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder)
add_executable(${BINARY_NAME} main.cpp ${FLUTTER_DIR}/generated_plugin_registrant.cpp)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::FlutterEmbedder)
target_include_directories(${BINARY_NAME} PRIVATE ${FLUTTER_DIR})
include(flutter/generated_plugins.cmake)
set(PACKAGE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
set(DESKTOP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/applications)
set(ICONS_INSTALL_ROOT_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor)
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libflutter-embedder.so
${PROJECT_BINARY_DIR}/bundle/lib/libflutter-embedder.so)
install(FILES ${PROJECT_BINARY_DIR}/bundle/icudtl.dat DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/flutter_assets DESTINATION ${PACKAGE_INSTALL_DIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/lib DESTINATION ${PACKAGE_INSTALL_DIR})
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES desktop/${BINARY_NAME}.desktop DESTINATION ${DESKTOP_INSTALL_DIR})
foreach(ICONS_SIZE 86x86 108x108 128x128 172x172)
install(FILES icons/${ICONS_SIZE}.png
RENAME ${BINARY_NAME}.png
DESTINATION ${ICONS_INSTALL_ROOT_DIR}/${ICONS_SIZE}/apps/)
endforeach(ICONS_SIZE)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save