From 54b809117ee40e386c1b03f3c6ab54fcd9e9dd6d Mon Sep 17 00:00:00 2001 From: Amethyst Reese Date: Fri, 4 Sep 2026 16:07:44 -0700 Subject: [PATCH] feat: add build timestamp to Android device info Exposes the upstream Android build timestamp [1][] as part of the `AndroidDeviceInfo` class. [1]: https://developer.android.com/reference/android/os/Build#TIME --- .../plus/device_info/MethodCallHandlerImpl.kt | 1 + .../integration_test/device_info_plus_test.dart | 1 + .../device_info_plus/example/lib/main.dart | 1 + .../lib/src/model/android_device_info.dart | 10 ++++++++++ .../test/model/android_device_info_fake.dart | 1 + .../test/model/android_device_info_test.dart | 1 + 6 files changed, 15 insertions(+) diff --git a/packages/device_info_plus/device_info_plus/android/src/main/kotlin/dev/fluttercommunity/plus/device_info/MethodCallHandlerImpl.kt b/packages/device_info_plus/device_info_plus/android/src/main/kotlin/dev/fluttercommunity/plus/device_info/MethodCallHandlerImpl.kt index 2d82b02799..a29ee6f33b 100644 --- a/packages/device_info_plus/device_info_plus/android/src/main/kotlin/dev/fluttercommunity/plus/device_info/MethodCallHandlerImpl.kt +++ b/packages/device_info_plus/device_info_plus/android/src/main/kotlin/dev/fluttercommunity/plus/device_info/MethodCallHandlerImpl.kt @@ -39,6 +39,7 @@ internal class MethodCallHandlerImpl( build["manufacturer"] = Build.MANUFACTURER build["model"] = Build.MODEL build["product"] = Build.PRODUCT + build["time"] = Build.TIME if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { build["name"] = Settings.Global.getString(contentResolver, Settings.Global.DEVICE_NAME) ?: "" diff --git a/packages/device_info_plus/device_info_plus/example/integration_test/device_info_plus_test.dart b/packages/device_info_plus/device_info_plus/example/integration_test/device_info_plus_test.dart index be6d7531bf..7d0c1d4c6c 100644 --- a/packages/device_info_plus/device_info_plus/example/integration_test/device_info_plus_test.dart +++ b/packages/device_info_plus/device_info_plus/example/integration_test/device_info_plus_test.dart @@ -108,6 +108,7 @@ void main() { expect(androidInfo.supportedAbis, isNotNull); expect(androidInfo.tags, isNotNull); + expect(androidInfo.time, isNotNull); expect(androidInfo.type, isNotNull); expect(androidInfo.isPhysicalDevice, isNotNull); expect(androidInfo.systemFeatures, isNotNull); diff --git a/packages/device_info_plus/device_info_plus/example/lib/main.dart b/packages/device_info_plus/device_info_plus/example/lib/main.dart index 1c23698c93..0e02b8bf18 100644 --- a/packages/device_info_plus/device_info_plus/example/lib/main.dart +++ b/packages/device_info_plus/device_info_plus/example/lib/main.dart @@ -107,6 +107,7 @@ class _MyAppState extends State { 'supported64BitAbis': build.supported64BitAbis, 'supportedAbis': build.supportedAbis, 'tags': build.tags, + 'time': build.time, 'type': build.type, 'isPhysicalDevice': build.isPhysicalDevice, 'freeDiskSize': build.freeDiskSize, diff --git a/packages/device_info_plus/device_info_plus/lib/src/model/android_device_info.dart b/packages/device_info_plus/device_info_plus/lib/src/model/android_device_info.dart index 5fae369614..9648df18ca 100644 --- a/packages/device_info_plus/device_info_plus/lib/src/model/android_device_info.dart +++ b/packages/device_info_plus/device_info_plus/lib/src/model/android_device_info.dart @@ -29,6 +29,7 @@ class AndroidDeviceInfo extends BaseDeviceInfo { required List supported64BitAbis, required List supportedAbis, required this.tags, + required this.time, required this.type, required this.isPhysicalDevice, required this.freeDiskSize, @@ -117,6 +118,11 @@ class AndroidDeviceInfo extends BaseDeviceInfo { /// https://developer.android.com/reference/android/os/Build#TAGS final String tags; + /// The time at which the build was produced, given in milliseconds since the + /// UNIX epoch. + /// https://developer.android.com/reference/android/os/Build#TIME + final int time; + /// The type of build, like "user" or "eng". /// https://developer.android.com/reference/android/os/Build#TYPE final String type; @@ -187,6 +193,7 @@ class AndroidDeviceInfo extends BaseDeviceInfo { supported64BitAbis: _fromList(map['supported64BitAbis'] ?? []), supportedAbis: _fromList(map['supportedAbis'] ?? []), tags: map['tags'], + time: map['time'], type: map['type'], isPhysicalDevice: map['isPhysicalDevice'], freeDiskSize: map['freeDiskSize'], @@ -219,6 +226,7 @@ class AndroidDeviceInfo extends BaseDeviceInfo { required List supported64BitAbis, required List supportedAbis, required String tags, + required int time, required String type, required bool isPhysicalDevice, required int freeDiskSize, @@ -255,6 +263,7 @@ class AndroidDeviceInfo extends BaseDeviceInfo { 'supported64BitAbis': supported64BitAbis, 'supportedAbis': supportedAbis, 'tags': tags, + 'time': time, 'type': type, 'isPhysicalDevice': isPhysicalDevice, 'freeDiskSize': freeDiskSize, @@ -285,6 +294,7 @@ class AndroidDeviceInfo extends BaseDeviceInfo { supported64BitAbis: _fromList(supported64BitAbis), supportedAbis: _fromList(supportedAbis), tags: tags, + time: time, type: type, isPhysicalDevice: isPhysicalDevice, freeDiskSize: freeDiskSize, diff --git a/packages/device_info_plus/device_info_plus/test/model/android_device_info_fake.dart b/packages/device_info_plus/device_info_plus/test/model/android_device_info_fake.dart index 8564286cb8..a9f1c0640e 100644 --- a/packages/device_info_plus/device_info_plus/test/model/android_device_info_fake.dart +++ b/packages/device_info_plus/device_info_plus/test/model/android_device_info_fake.dart @@ -19,6 +19,7 @@ const _fakeAndroidDeviceInfo = { 'id': 'id', 'host': 'host', 'tags': 'tags', + 'time': 1788562900, 'type': 'type', 'model': 'model', 'board': 'board', diff --git a/packages/device_info_plus/device_info_plus/test/model/android_device_info_test.dart b/packages/device_info_plus/device_info_plus/test/model/android_device_info_test.dart index c89737b4ff..f38b97ec63 100644 --- a/packages/device_info_plus/device_info_plus/test/model/android_device_info_test.dart +++ b/packages/device_info_plus/device_info_plus/test/model/android_device_info_test.dart @@ -15,6 +15,7 @@ void main() { expect(androidDeviceInfo.id, 'id'); expect(androidDeviceInfo.host, 'host'); expect(androidDeviceInfo.tags, 'tags'); + expect(androidDeviceInfo.time, 1788562900); expect(androidDeviceInfo.type, 'type'); expect(androidDeviceInfo.model, 'model'); expect(androidDeviceInfo.board, 'board');