-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
alexandre_poichet
committed
Jan 23, 2025
1 parent
5d5c7cc
commit 8a873ed
Showing
30 changed files
with
1,233 additions
and
551 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
{ | ||
"flutter": "3.19.3", | ||
"flutter": "3.24.5", | ||
"flavors": {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,6 +17,7 @@ jobs: | |
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: hrishikesh-kadam/setup-lcov@v1 | ||
|
||
# Note: This workflow uses the latest stable version of the Dart SDK. | ||
# You can specify other versions if desired, see documentation here: | ||
|
@@ -39,7 +40,10 @@ jobs: | |
working-directory: lib | ||
|
||
- name: Run tests | ||
run: flutter test --coverage --update-goldens | ||
run: flutter test --coverage | ||
|
||
- name: Exclude coverage | ||
run: lcov --remove coverage/lcov.info 'lib/flutter_eco_mode_platform_interface.dart' 'lib/messages.g.dart' 'lib/streams/*' -o coverage/lcov.info | ||
|
||
- name: Upload coverage reports to Codecov | ||
uses: codecov/[email protected] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,4 +27,9 @@ migrate_working_dir/ | |
**/doc/api/ | ||
.dart_tool/ | ||
build/ | ||
.fvm | ||
|
||
# FVM Version Cache | ||
.fvm/ | ||
|
||
# Coverage | ||
coverage/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="sncf.connect.tech.flutter_eco_mode"> | ||
|
||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> | ||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> | ||
<uses-permission android:name="android.permission.READ_BASIC_PHONE_STATE" /> | ||
</manifest> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
package listener | ||
|
||
import android.content.BroadcastReceiver | ||
import android.content.Context | ||
import android.content.Intent | ||
import android.content.Intent.ACTION_BATTERY_CHANGED | ||
import android.content.IntentFilter | ||
import android.os.BatteryManager | ||
import android.os.BatteryManager.BATTERY_STATUS_CHARGING | ||
import android.os.BatteryManager.BATTERY_STATUS_DISCHARGING | ||
import android.os.BatteryManager.BATTERY_STATUS_FULL | ||
import android.os.BatteryManager.BATTERY_STATUS_NOT_CHARGING | ||
import android.os.Build | ||
import android.os.PowerManager | ||
import androidx.annotation.RequiresApi | ||
import io.flutter.plugin.common.EventChannel | ||
import sncf.connect.tech.flutter_eco_mode.BatteryState.CHARGING | ||
import sncf.connect.tech.flutter_eco_mode.BatteryState.DISCHARGING | ||
import sncf.connect.tech.flutter_eco_mode.BatteryState.FULL | ||
import sncf.connect.tech.flutter_eco_mode.BatteryState.UNKNOWN | ||
|
||
class PowerModeStreamHandler(private val context: Context) : EventChannel.StreamHandler { | ||
|
||
private var lowPowerModeEventSink: EventChannel.EventSink? = null | ||
private var powerSavingReceiver: BroadcastReceiver? = null | ||
|
||
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { | ||
lowPowerModeEventSink = events | ||
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | ||
setupPowerSavingReceiver() | ||
} | ||
} | ||
|
||
override fun onCancel(p0: Any?) { | ||
context.unregisterReceiver(powerSavingReceiver) | ||
} | ||
|
||
@RequiresApi(Build.VERSION_CODES.LOLLIPOP) | ||
private fun setupPowerSavingReceiver() { | ||
powerSavingReceiver = object : BroadcastReceiver() { | ||
override fun onReceive(context: Context, intent: Intent?) { | ||
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager | ||
lowPowerModeEventSink?.success(powerManager.isPowerSaveMode) | ||
} | ||
} | ||
val filter = IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED) | ||
context.registerReceiver(powerSavingReceiver, filter) | ||
} | ||
|
||
} | ||
|
||
class BatteryStateStreamHandler(private val context: Context) : EventChannel.StreamHandler { | ||
|
||
private var batteryStateEventSink: EventChannel.EventSink? = null | ||
private var batteryStateReceiver: BroadcastReceiver? = null | ||
|
||
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { | ||
batteryStateEventSink = events | ||
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | ||
setupBatteryStateReceiver() | ||
} | ||
} | ||
|
||
override fun onCancel(p0: Any?) { | ||
context.unregisterReceiver(batteryStateReceiver) | ||
} | ||
|
||
@RequiresApi(Build.VERSION_CODES.M) | ||
private fun setupBatteryStateReceiver() { | ||
batteryStateReceiver = object : BroadcastReceiver() { | ||
override fun onReceive(context: Context, intent: Intent?) { | ||
val event = when (intent?.action) { | ||
ACTION_BATTERY_CHANGED -> | ||
when (intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)) { | ||
BATTERY_STATUS_CHARGING -> CHARGING.name | ||
BATTERY_STATUS_FULL -> FULL.name | ||
BATTERY_STATUS_DISCHARGING, BATTERY_STATUS_NOT_CHARGING -> DISCHARGING.name | ||
else -> UNKNOWN.name | ||
} | ||
|
||
else -> DISCHARGING.name | ||
} | ||
batteryStateEventSink?.success(event) | ||
} | ||
} | ||
val filterBatteryState = IntentFilter() | ||
filterBatteryState.addAction(ACTION_BATTERY_CHANGED) | ||
context.registerReceiver(batteryStateReceiver, filterBatteryState) | ||
} | ||
|
||
} | ||
|
||
class BatteryLevelStreamHandler(private val context: Context) : EventChannel.StreamHandler { | ||
|
||
private var batteryLevelEventSink: EventChannel.EventSink? = null | ||
private var batteryLevelReceiver: BroadcastReceiver? = null | ||
|
||
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { | ||
batteryLevelEventSink = events | ||
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | ||
setupBatteryLevelReceiver() | ||
} | ||
} | ||
|
||
override fun onCancel(p0: Any?) { | ||
context.unregisterReceiver(batteryLevelReceiver) | ||
} | ||
|
||
|
||
@RequiresApi(Build.VERSION_CODES.LOLLIPOP) | ||
private fun setupBatteryLevelReceiver() { | ||
|
||
batteryLevelReceiver = object : BroadcastReceiver() { | ||
|
||
override fun onReceive(context: Context, intent: Intent?) { | ||
val batteryPct = intent?.let { i -> | ||
val level: Int = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) | ||
val scale: Int = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1) | ||
level * 100 / scale.toFloat() | ||
} | ||
batteryLevelEventSink?.success(batteryPct?.toDouble()) | ||
} | ||
} | ||
val filter = IntentFilter(ACTION_BATTERY_CHANGED) | ||
context.registerReceiver(batteryLevelReceiver, filter) | ||
|
||
} | ||
|
||
} |
Oops, something went wrong.