FingerprintUtils: Migrate old fp config xml to new one on HIDL/AIDL switch

Change-Id: Ia40124870ee548a561caa790c34caa50e9d3b809
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintUtils.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintUtils.java
index b8c06c7..ed43b29 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintUtils.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintUtils.java
@@ -31,12 +31,15 @@
 import android.content.Context;
 import android.hardware.biometrics.fingerprint.V2_1.FingerprintError;
 import android.hardware.fingerprint.Fingerprint;
+import android.os.Environment;
 import android.text.TextUtils;
+import android.util.Log;
 import android.util.SparseArray;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.server.biometrics.sensors.BiometricUtils;
 
+import java.io.File;
 import java.util.List;
 
 /**
@@ -48,10 +51,11 @@
     // Map<SensorId, FingerprintUtils>
     private static SparseArray<FingerprintUtils> sInstances;
     private static final String LEGACY_FINGERPRINT_FILE = "settings_fingerprint.xml";
+    private static final String TAG = "FingerprintUtils";
 
     @GuardedBy("this")
     private final SparseArray<FingerprintUserState> mUserStates;
-    private final String mFileName;
+    private String mFileName;
 
     /**
      * Retrieves an instance for the specified sensorId.
@@ -160,6 +164,25 @@
         synchronized (this) {
             FingerprintUserState state = mUserStates.get(userId);
             if (state == null) {
+                if (mFileName.matches("settings_fingerprint_\\d+.xml")) {
+                    // Check if this file is empty or does not exist
+                    File legacyFile = new File(Environment.getUserSystemDirectory(userId),
+                            LEGACY_FINGERPRINT_FILE);
+                    File file = new File(Environment.getUserSystemDirectory(userId), mFileName);
+                    if (legacyFile.length() > 0 && file.length() == 0) {
+                        Log.i(TAG, "Migration needed for " + mFileName);
+                        if (file.exists()) {
+                            // File exists and the length is 0, delete it
+                            if (!file.delete()) {
+                                Log.i(TAG, "Failed to delete empty file: " + file);
+                            }
+                        }
+                        if (!legacyFile.renameTo(file)) {
+                            Log.i(TAG, "Failed to rename file: " + legacyFile + " to " + file);
+                            mFileName = LEGACY_FINGERPRINT_FILE;
+                        }
+                    }
+                }
                 state = new FingerprintUserState(ctx, userId, mFileName);
                 mUserStates.put(userId, state);
             }