@@ -157,13 +157,20 @@ abstract class BaseDeviceInfo {
157
157
158
158
/// Like [device_info_plus.AndroidDeviceInfo] , but without things we don't use.
159
159
class AndroidDeviceInfo extends BaseDeviceInfo {
160
+ /// The user-visible version string.
161
+ ///
162
+ /// E.g., "1.0" or "3.4b5" or "bananas". This field is an opaque string.
163
+ /// Do not assume that its value has any particular structure or that
164
+ /// values of RELEASE from different releases can be somehow ordered.
165
+ final String release;
166
+
160
167
/// The Android SDK version.
161
168
///
162
169
/// Possible values are defined in:
163
170
/// https://developer.android.com/reference/android/os/Build.VERSION_CODES.html
164
171
final int sdkInt;
165
172
166
- AndroidDeviceInfo ({required this .sdkInt});
173
+ AndroidDeviceInfo ({required this .release, required this . sdkInt});
167
174
}
168
175
169
176
/// Like [device_info_plus.IosDeviceInfo] , but without things we don't use.
@@ -176,6 +183,56 @@ class IosDeviceInfo extends BaseDeviceInfo {
176
183
IosDeviceInfo ({required this .systemVersion});
177
184
}
178
185
186
+ /// Like [device_info_plus.MacOsDeviceInfo] , but without things we don't use.
187
+ class MacOsDeviceInfo extends BaseDeviceInfo {
188
+ /// The major release number, such as 10 in version 10.9.3.
189
+ final int majorVersion;
190
+
191
+ /// The minor release number, such as 9 in version 10.9.3.
192
+ final int minorVersion;
193
+
194
+ /// The update release number, such as 3 in version 10.9.3.
195
+ final int patchVersion;
196
+
197
+ MacOsDeviceInfo ({
198
+ required this .majorVersion,
199
+ required this .minorVersion,
200
+ required this .patchVersion,
201
+ });
202
+ }
203
+
204
+ /// Like [device_info_plus.WindowsDeviceInfo] , currently only used to
205
+ /// determine if we're on Windows.
206
+ class WindowsDeviceInfo implements BaseDeviceInfo {}
207
+
208
+ /// Like [device_info_plus.LinuxDeviceInfo] , but without things we don't use.
209
+ ///
210
+ /// See:
211
+ /// https://www.freedesktop.org/software/systemd/man/os-release.html
212
+ class LinuxDeviceInfo implements BaseDeviceInfo {
213
+ /// A string identifying the operating system, without a version component,
214
+ /// and suitable for presentation to the user.
215
+ ///
216
+ /// Examples: 'Fedora', 'Debian GNU/Linux'.
217
+ ///
218
+ /// If not set, defaults to 'Linux'.
219
+ final String name;
220
+
221
+ /// A lower-case string identifying the operating system version, excluding
222
+ /// any OS name information or release code name, and suitable for processing
223
+ /// by scripts or usage in generated filenames.
224
+ ///
225
+ /// The version is mostly numeric, and contains no spaces or other characters
226
+ /// outside of 0–9, a–z, '.', '_' and '-'.
227
+ ///
228
+ /// Examples: '17', '11.04'.
229
+ ///
230
+ /// This field is optional and may be null on some systems.
231
+ final String ? versionId;
232
+
233
+ LinuxDeviceInfo ({required this .name, required this .versionId});
234
+ }
235
+
179
236
/// Like [package_info_plus.PackageInfo] , but without things we don't use.
180
237
class PackageInfo {
181
238
final String version;
@@ -226,9 +283,16 @@ class LiveZulipBinding extends ZulipBinding {
226
283
try {
227
284
final info = await device_info_plus.DeviceInfoPlugin ().deviceInfo;
228
285
_maybeDeviceInfo = switch (info) {
229
- device_info_plus.AndroidDeviceInfo (: var version) => AndroidDeviceInfo (sdkInt: version.sdkInt),
230
- device_info_plus.IosDeviceInfo (: var systemVersion) => IosDeviceInfo (systemVersion: systemVersion),
231
- _ => throw UnimplementedError (),
286
+ device_info_plus.AndroidDeviceInfo () => AndroidDeviceInfo (release: info.version.release,
287
+ sdkInt: info.version.sdkInt),
288
+ device_info_plus.IosDeviceInfo () => IosDeviceInfo (systemVersion: info.systemVersion),
289
+ device_info_plus.MacOsDeviceInfo () => MacOsDeviceInfo (majorVersion: info.majorVersion,
290
+ minorVersion: info.minorVersion,
291
+ patchVersion: info.patchVersion),
292
+ device_info_plus.WindowsDeviceInfo () => WindowsDeviceInfo (),
293
+ device_info_plus.LinuxDeviceInfo () => LinuxDeviceInfo (name: info.name,
294
+ versionId: info.versionId),
295
+ _ => throw UnimplementedError (),
232
296
};
233
297
} catch (e) {
234
298
assert (debugLog ('Failed to prefetch device info: $e ' ));
0 commit comments