summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/PersistentDataBlockService.java52
1 files changed, 33 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/PersistentDataBlockService.java b/services/core/java/com/android/server/PersistentDataBlockService.java
index 9d4cd99acf8e..e5ace1bae9cf 100644
--- a/services/core/java/com/android/server/PersistentDataBlockService.java
+++ b/services/core/java/com/android/server/PersistentDataBlockService.java
@@ -103,9 +103,19 @@ public class PersistentDataBlockService extends SystemService {
@Override
public void onStart() {
enforceChecksumValidity();
+ formatIfOemUnlockEnabled();
publishBinderService(Context.PERSISTENT_DATA_BLOCK_SERVICE, mService);
}
+ private void formatIfOemUnlockEnabled() {
+ if (doGetOemUnlockEnabled()) {
+ synchronized (mLock) {
+ formatPartitionLocked();
+ doSetOemUnlockEnabledLocked(true);
+ }
+ }
+ }
+
private void enforceOemUnlockPermission() {
mContext.enforceCallingOrSelfPermission(
Manifest.permission.OEM_UNLOCK_STATE,
@@ -285,6 +295,28 @@ public class PersistentDataBlockService extends SystemService {
}
}
+ private boolean doGetOemUnlockEnabled() {
+ DataInputStream inputStream;
+ try {
+ inputStream = new DataInputStream(new FileInputStream(new File(mDataBlockFile)));
+ } catch (FileNotFoundException e) {
+ Slog.e(TAG, "partition not available");
+ return false;
+ }
+
+ try {
+ synchronized (mLock) {
+ inputStream.skip(getBlockDeviceSize() - 1);
+ return inputStream.readByte() != 0;
+ }
+ } catch (IOException e) {
+ Slog.e(TAG, "unable to access persistent partition", e);
+ return false;
+ } finally {
+ IoUtils.closeQuietly(inputStream);
+ }
+ }
+
private native long nativeGetBlockDeviceSize(String path);
private native int nativeWipe(String path);
@@ -410,25 +442,7 @@ public class PersistentDataBlockService extends SystemService {
@Override
public boolean getOemUnlockEnabled() {
enforceOemUnlockPermission();
- DataInputStream inputStream;
- try {
- inputStream = new DataInputStream(new FileInputStream(new File(mDataBlockFile)));
- } catch (FileNotFoundException e) {
- Slog.e(TAG, "partition not available");
- return false;
- }
-
- try {
- synchronized (mLock) {
- inputStream.skip(getBlockDeviceSize() - 1);
- return inputStream.readByte() != 0;
- }
- } catch (IOException e) {
- Slog.e(TAG, "unable to access persistent partition", e);
- return false;
- } finally {
- IoUtils.closeQuietly(inputStream);
- }
+ return doGetOemUnlockEnabled();
}
@Override