blob: 7e514dcbf2e66f393d4e5f77d1fe98b7d3b57752 [file] [log] [blame]
import 'dart:async';
import 'dart:io';
import 'package:fidl_fuchsia_devicesettings/fidl_async.dart';
import 'package:lib.app.dart/app_async.dart';
import 'package:lib.app.dart/logging.dart';
import 'package:meta/meta.dart';
const String _lastUpdateFilePath = '/system/data/build/last-update';
const String _factoryResetKey = 'FactoryReset';
/// Class to provide device-specific details, such as build information.
class DeviceInfo {
DateTime _sourceTimeStamp;
DateTime get sourceTimeStamp => _sourceTimeStamp;
/// Returns the date the source code was last updated.
static DateTime getSourceDate() {
final File updateFile = new File(_lastUpdateFilePath);
if (updateFile.existsSync()) {
final String lastUpdate = updateFile.readAsStringSync();
try {
return DateTime.parse(lastUpdate.trim());
} on FormatException {
log.warning('Could not parse build timestamp!');
}
} else {
log.warning('Update file not present');
}
return null;
}
/// Determines whether the factory reset flag has been set.
///
/// Completes as true if the factory reset flag is present, false otherwise.
static Future<bool> getFactoryResetFlag() async {
final completer = Completer<bool>();
final deviceSettingsManagerProxy = DeviceSettingsManagerProxy();
await connectToService(StartupContext.fromStartupInfo().environmentServices,
deviceSettingsManagerProxy.ctrl);
final result =
await deviceSettingsManagerProxy.getInteger(_factoryResetKey);
deviceSettingsManagerProxy.ctrl.close();
completer.complete(result.s == Status.ok && result.val > 0);
return completer.future;
}
/// Sets a flag to determine whether the device should be reset to factory
/// settings or not.
///
/// [shouldReset] specifies whether the flag should be set or not. Will
/// complete with true if the flag was set successfully and false otherwise.
static Future<bool> setFactoryResetFlag({@required bool shouldReset}) async {
final resetFlagValue = shouldReset ? 1 : 0;
final completer = Completer<bool>();
final deviceSettingsManagerProxy = DeviceSettingsManagerProxy();
await connectToService(StartupContext.fromStartupInfo().environmentServices,
deviceSettingsManagerProxy.ctrl);
bool result = await deviceSettingsManagerProxy.setInteger(
_factoryResetKey, resetFlagValue);
deviceSettingsManagerProxy.ctrl.close();
completer.complete(result);
return completer.future;
}
}