Skip to content

Commit 2baac74

Browse files
Merge branch 'main' into dependabot/pub/packages/android_alarm_manager_plus/example/permission_handler-12.0.01
2 parents d5edea6 + c8c1a14 commit 2baac74

File tree

9 files changed

+69
-3
lines changed

9 files changed

+69
-3
lines changed

packages/device_info_plus/device_info_plus/android/src/main/kotlin/dev/fluttercommunity/plus/device_info/MethodCallHandlerImpl.kt

+7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import android.provider.Settings
99
import io.flutter.plugin.common.MethodCall
1010
import io.flutter.plugin.common.MethodChannel
1111
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
12+
import kotlin.collections.HashMap
13+
import android.os.StatFs
14+
import android.os.Environment
1215

1316
/**
1417
* The implementation of [MethodChannel.MethodCallHandler] for the plugin. Responsible for
@@ -56,6 +59,10 @@ internal class MethodCallHandlerImpl(
5659
build["isPhysicalDevice"] = !isEmulator
5760
build["systemFeatures"] = getSystemFeatures()
5861

62+
val statFs = StatFs(Environment.getDataDirectory().getPath())
63+
build["freeDiskSize"] = statFs.getFreeBytes()
64+
build["totalDiskSize"] = statFs.getTotalBytes()
65+
5966
val version: MutableMap<String, Any> = HashMap()
6067
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
6168
version["baseOS"] = Build.VERSION.BASE_OS

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

+4
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ class _MyAppState extends State<MyApp> {
101101
'tags': build.tags,
102102
'type': build.type,
103103
'isPhysicalDevice': build.isPhysicalDevice,
104+
'freeDiskSize': build.freeDiskSize,
105+
'totalDiskSize': build.totalDiskSize,
104106
'systemFeatures': build.systemFeatures,
105107
'serialNumber': build.serialNumber,
106108
'isLowRamDevice': build.isLowRamDevice,
@@ -120,6 +122,8 @@ class _MyAppState extends State<MyApp> {
120122
'identifierForVendor': data.identifierForVendor,
121123
'isPhysicalDevice': data.isPhysicalDevice,
122124
'isiOSAppOnMac': data.isiOSAppOnMac,
125+
'freeDiskSize': data.freeDiskSize,
126+
'totalDiskSize': data.totalDiskSize,
123127
'physicalRamSize': data.physicalRamSize,
124128
'availableRamSize': data.availableRamSize,
125129
'utsname.sysname:': data.utsname.sysname,

packages/device_info_plus/device_info_plus/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m

+13-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ - (void)handleMethodCall:(FlutterMethodCall *)call
3030
if (@available(iOS 14.0, *)) {
3131
isiOSAppOnMac = [NSNumber numberWithBool:[info isiOSAppOnMac]];
3232
}
33+
NSError *error = nil;
34+
NSDictionary *fsAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
35+
NSNumber *freeSize = [NSNumber numberWithInt:-1];
36+
NSNumber *totalSize = [NSNumber numberWithInt:-1];
37+
if(fsAttributes) {
38+
freeSize = fsAttributes[NSFileSystemFreeSize];
39+
totalSize = fsAttributes[NSFileSystemSize];
40+
}
41+
3342
NSString *machine;
3443
NSString *deviceName;
3544
if ([self isDevicePhysical]) {
@@ -51,10 +60,12 @@ - (void)handleMethodCall:(FlutterMethodCall *)call
5160
@"modelName" : deviceName,
5261
@"identifierForVendor" : [[device identifierForVendor] UUIDString]
5362
?: [NSNull null],
63+
@"freeDiskSize" : freeSize,
64+
@"totalDiskSize" : totalSize,
5465
@"isPhysicalDevice" : isPhysicalNumber,
5566
@"isiOSAppOnMac" : isiOSAppOnMac,
56-
@"physicalRamSize": physicalRamSize,
57-
@"availableRamSize": availableRamSize,
67+
@"physicalRamSize" : physicalRamSize,
68+
@"availableRamSize" : availableRamSize,
5869
@"utsname" : @{
5970
@"sysname" : @(un.sysname),
6071
@"nodename" : @(un.nodename),

packages/device_info_plus/device_info_plus/lib/src/model/android_device_info.dart

+20
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
3131
required this.tags,
3232
required this.type,
3333
required this.isPhysicalDevice,
34+
required this.freeDiskSize,
35+
required this.totalDiskSize,
3436
required List<String> systemFeatures,
3537
required this.serialNumber,
3638
required this.isLowRamDevice,
@@ -123,6 +125,16 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
123125
/// `false` if the application is running in an emulator, `true` otherwise.
124126
final bool isPhysicalDevice;
125127

128+
/// Available disk size in bytes
129+
///
130+
/// https://developer.android.com/reference/android/os/StatFs#getFreeBytes()
131+
final int freeDiskSize;
132+
133+
/// Total disk size in bytes
134+
///
135+
/// https://developer.android.com/reference/android/os/StatFs#getTotalBytes()
136+
final int totalDiskSize;
137+
126138
/// Describes what features are available on the current device.
127139
///
128140
/// This can be used to check if the device has, for example, a front-facing
@@ -183,6 +195,8 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
183195
tags: map['tags'],
184196
type: map['type'],
185197
isPhysicalDevice: map['isPhysicalDevice'],
198+
freeDiskSize: map['freeDiskSize'],
199+
totalDiskSize: map['totalDiskSize'],
186200
systemFeatures: _fromList(map['systemFeatures'] ?? []),
187201
serialNumber: map['serialNumber'],
188202
isLowRamDevice: map['isLowRamDevice'],
@@ -214,6 +228,8 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
214228
required String tags,
215229
required String type,
216230
required bool isPhysicalDevice,
231+
required int freeDiskSize,
232+
required int totalDiskSize,
217233
required List<String> systemFeatures,
218234
required String serialNumber,
219235
required bool isLowRamDevice,
@@ -249,6 +265,8 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
249265
'tags': tags,
250266
'type': type,
251267
'isPhysicalDevice': isPhysicalDevice,
268+
'freeDiskSize': freeDiskSize,
269+
'totalDiskSize': totalDiskSize,
252270
'systemFeatures': systemFeatures,
253271
'serialNumber': serialNumber,
254272
'isLowRamDevice': isLowRamDevice,
@@ -278,6 +296,8 @@ class AndroidDeviceInfo extends BaseDeviceInfo {
278296
tags: tags,
279297
type: type,
280298
isPhysicalDevice: isPhysicalDevice,
299+
freeDiskSize: freeDiskSize,
300+
totalDiskSize: totalDiskSize,
281301
systemFeatures: _fromList(systemFeatures),
282302
serialNumber: serialNumber,
283303
isLowRamDevice: isLowRamDevice,

packages/device_info_plus/device_info_plus/lib/src/model/ios_device_info.dart

+16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class IosDeviceInfo extends BaseDeviceInfo {
1818
required this.model,
1919
required this.modelName,
2020
required this.localizedModel,
21+
required this.freeDiskSize,
22+
required this.totalDiskSize,
2123
this.identifierForVendor,
2224
required this.isPhysicalDevice,
2325
required this.physicalRamSize,
@@ -74,6 +76,12 @@ class IosDeviceInfo extends BaseDeviceInfo {
7476
/// Operating system information derived from `sys/utsname.h`.
7577
final IosUtsname utsname;
7678

79+
/// Free disk size in bytes
80+
final int freeDiskSize;
81+
82+
/// Total disk size in bytes
83+
final int totalDiskSize;
84+
7785
/// Deserializes from the map message received from [_kChannel].
7886
static IosDeviceInfo fromMap(Map<String, dynamic> map) {
7987
return IosDeviceInfo._(
@@ -85,6 +93,8 @@ class IosDeviceInfo extends BaseDeviceInfo {
8593
modelName: map['modelName'],
8694
localizedModel: map['localizedModel'],
8795
identifierForVendor: map['identifierForVendor'],
96+
freeDiskSize: map['freeDiskSize'],
97+
totalDiskSize: map['totalDiskSize'],
8898
isPhysicalDevice: map['isPhysicalDevice'],
8999
physicalRamSize: map['physicalRamSize'],
90100
availableRamSize: map['availableRamSize'],
@@ -103,6 +113,8 @@ class IosDeviceInfo extends BaseDeviceInfo {
103113
required String model,
104114
required String modelName,
105115
required String localizedModel,
116+
required int freeDiskSize,
117+
required int totalDiskSize,
106118
String? identifierForVendor,
107119
required bool isPhysicalDevice,
108120
required bool isiOSAppOnMac,
@@ -118,6 +130,8 @@ class IosDeviceInfo extends BaseDeviceInfo {
118130
'modelName': modelName,
119131
'localizedModel': localizedModel,
120132
'identifierForVendor': identifierForVendor,
133+
'freeDiskSize': freeDiskSize,
134+
'totalDiskSize': totalDiskSize,
121135
'isPhysicalDevice': isPhysicalDevice,
122136
'isiOSAppOnMac': isiOSAppOnMac,
123137
'physicalRamSize': physicalRamSize,
@@ -139,6 +153,8 @@ class IosDeviceInfo extends BaseDeviceInfo {
139153
modelName: modelName,
140154
localizedModel: localizedModel,
141155
identifierForVendor: identifierForVendor,
156+
freeDiskSize: freeDiskSize,
157+
totalDiskSize: totalDiskSize,
142158
isPhysicalDevice: isPhysicalDevice,
143159
isiOSAppOnMac: isiOSAppOnMac,
144160
physicalRamSize: physicalRamSize,

packages/device_info_plus/device_info_plus/test/model/android_device_info_fake.dart

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ const _fakeAndroidDeviceInfo = <String, dynamic>{
2929
'display': 'display',
3030
'hardware': 'hardware',
3131
'isPhysicalDevice': true,
32+
'freeDiskSize': 70729949184,
33+
'totalDiskSize': 113281839104,
3234
'bootloader': 'bootloader',
3335
'fingerprint': 'fingerprint',
3436
'manufacturer': 'manufacturer',

packages/device_info_plus/device_info_plus/test/model/android_device_info_test.dart

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ void main() {
2525
expect(androidDeviceInfo.hardware, 'hardware');
2626
expect(androidDeviceInfo.bootloader, 'bootloader');
2727
expect(androidDeviceInfo.isPhysicalDevice, isTrue);
28+
expect(androidDeviceInfo.freeDiskSize, 70729949184);
29+
expect(androidDeviceInfo.totalDiskSize, 113281839104);
2830
expect(androidDeviceInfo.fingerprint, 'fingerprint');
2931
expect(androidDeviceInfo.manufacturer, 'manufacturer');
3032
expect(androidDeviceInfo.supportedAbis, _fakeSupportedAbis);

packages/device_info_plus/device_info_plus/test/model/ios_device_info_test.dart

+4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ void main() {
2727
'systemVersion': 'systemVersion',
2828
'localizedModel': 'localizedModel',
2929
'identifierForVendor': 'identifierForVendor',
30+
'freeDiskSize': 4096,
31+
'totalDiskSize': 8192,
3032
};
3133

3234
iosDeviceInfo = IosDeviceInfo.fromMap(iosDeviceInfoMap);
@@ -43,6 +45,8 @@ void main() {
4345
expect(iosDeviceInfo.systemName, 'systemName');
4446
expect(iosDeviceInfo.systemVersion, 'systemVersion');
4547
expect(iosDeviceInfo.localizedModel, 'localizedModel');
48+
expect(iosDeviceInfo.freeDiskSize, 4096);
49+
expect(iosDeviceInfo.totalDiskSize, 8192);
4650
expect(iosDeviceInfo.utsname.release, 'release');
4751
expect(iosDeviceInfo.utsname.version, 'version');
4852
expect(iosDeviceInfo.utsname.machine, 'machine');

packages/network_info_plus/network_info_plus/example/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ dependencies:
88
flutter:
99
sdk: flutter
1010
network_info_plus: ^6.1.4
11-
permission_handler: ^11.3.0
11+
permission_handler: ^12.0.0+1
1212

1313
dev_dependencies:
1414
flutter_test:

0 commit comments

Comments
 (0)