Point "unlocked" logic at lower level.

There is a race when starting a non-encryption-aware launcher before
we've gone through the user lifecycle to enter the "running unlocked"
state.  This can cause the launcher to choke when it's denied access
to widgets that are still considered locked.

For now, relax the notion of a user being unlocked to reflect the
on-disk state, instead of looking at the user lifecycle.

Also add logging of encryption commands.

Bug: 26267450
Change-Id: Ie330d07418cf10413e0b4380f6d6781684f01952
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index ddd16e2..16696af 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -31,6 +31,7 @@
 import android.graphics.BitmapFactory;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.os.storage.StorageManager;
 import android.provider.Settings;
 import android.util.Log;
 import android.view.WindowManager.LayoutParams;
@@ -857,12 +858,10 @@
 
     /** {@hide} */
     public boolean isUserUnlocked(int userId) {
-        try {
-            return ActivityManagerNative.getDefault().isUserRunning(userId,
-                    ActivityManager.FLAG_AND_UNLOCKED);
-        } catch (RemoteException e) {
-            return false;
-        }
+        // TODO: eventually pivot this back to look at ActivityManager state,
+        // but there is race where we can start a non-encryption-aware launcher
+        // before that lifecycle has entered the running unlocked state.
+        return mContext.getSystemService(StorageManager.class).isUserKeyUnlocked(userId);
     }
 
     /**
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 184f890..487c273 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -3592,12 +3592,18 @@
         }
 
         pw.println();
-        pw.println("mConnection:");
+        pw.println("mConnector:");
         pw.increaseIndent();
         mConnector.dump(fd, pw, args);
         pw.decreaseIndent();
 
         pw.println();
+        pw.println("mCryptConnector:");
+        pw.increaseIndent();
+        mCryptConnector.dump(fd, pw, args);
+        pw.decreaseIndent();
+
+        pw.println();
         pw.print("Last maintenance: ");
         pw.println(TimeUtils.formatForLogging(mLastMaintenance));
     }