diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index b208e438f171d..0e674c8641376 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -88,6 +88,8 @@ public final class Sm { runForget(); } else if ("set-emulate-fbe".equals(op)) { runSetEmulateFbe(); + } else if ("get-fbe-mode".equals(op)) { + runGetFbeMode(); } else { throw new IllegalArgumentException(); } @@ -145,6 +147,16 @@ public final class Sm { StorageManager.DEBUG_EMULATE_FBE); } + public void runGetFbeMode() { + if (StorageManager.isFileEncryptedNativeOnly()) { + System.out.println("native"); + } else if (StorageManager.isFileEncryptedEmulatedOnly()) { + System.out.println("emulated"); + } else { + System.out.println("none"); + } + } + public void runPartition() throws RemoteException { final String diskId = nextArg(); final String type = nextArg(); diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index 4019a56133b40..ee03280578e50 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -36,11 +36,11 @@ import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; +import com.android.internal.R; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; -import com.android.internal.R; - import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -319,6 +319,9 @@ public class AccessibilityServiceInfo implements Parcelable { */ public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040; + /** {@hide} */ + public static final int FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000; + /** * The event types an {@link AccessibilityService} is interested in. *

@@ -687,8 +690,9 @@ public class AccessibilityServiceInfo implements Parcelable { } /** {@hide} */ - public boolean isEncryptionAware() { - return mResolveInfo.serviceInfo.directBootAware; + public boolean isDirectBootAware() { + return ((flags & FLAG_FORCE_DIRECT_BOOT_AWARE) != 0) + || mResolveInfo.serviceInfo.directBootAware; } /** diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 336218522c771..65d48e6096184 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -95,7 +95,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM } return sSystemReady; } - static boolean sSystemReady = false; + static volatile boolean sSystemReady = false; static public void broadcastStickyIntent(Intent intent, String permission, int userId) { broadcastStickyIntent(intent, permission, AppOpsManager.OP_NONE, userId); diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java index 276f774a8f4ef..2c1ee8e136247 100644 --- a/core/java/android/app/UiAutomationConnection.java +++ b/core/java/android/app/UiAutomationConnection.java @@ -36,6 +36,7 @@ import android.view.WindowAnimationFrameStats; import android.view.WindowContentFrameStats; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.IAccessibilityManager; + import libcore.io.IoUtils; import java.io.FileOutputStream; @@ -77,6 +78,7 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { private int mOwningUid; + @Override public void connect(IAccessibilityServiceClient client, int flags) { if (client == null) { throw new IllegalArgumentException("Client cannot be null!"); @@ -326,11 +328,12 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { int flags) { IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface( ServiceManager.getService(Context.ACCESSIBILITY_SERVICE)); - AccessibilityServiceInfo info = new AccessibilityServiceInfo(); + final AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS - | AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS; + | AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS + | AccessibilityServiceInfo.FLAG_FORCE_DIRECT_BOOT_AWARE; info.setCapabilities(AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT | AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION | AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 4b96e7a31ccf7..a5798e2d99ae1 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1262,7 +1262,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { Service service = componentNameToServiceMap.get(componentName); // Ignore non-encryption-aware services until user is unlocked - if (!isUnlocked && !installedService.isEncryptionAware()) { + if (!isUnlocked && !installedService.isDirectBootAware()) { Slog.d(LOG_TAG, "Ignoring non-encryption-aware service " + componentName); continue; } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index e82c6c7a22a45..a95c8747eebb2 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1105,20 +1105,20 @@ public final class ActivityManagerService extends ActivityManagerNative ComponentName mTopComponent; String mTopAction = Intent.ACTION_MAIN; String mTopData; - boolean mProcessesReady = false; - boolean mSystemReady = false; - boolean mBooting = false; - boolean mCallFinishBooting = false; - boolean mBootAnimationComplete = false; - boolean mOnBattery = false; - boolean mLaunchWarningShown = false; + + volatile boolean mProcessesReady = false; + volatile boolean mSystemReady = false; + volatile boolean mOnBattery = false; + volatile int mFactoryTest; + + @GuardedBy("this") boolean mBooting = false; + @GuardedBy("this") boolean mCallFinishBooting = false; + @GuardedBy("this") boolean mBootAnimationComplete = false; + @GuardedBy("this") boolean mLaunchWarningShown = false; + @GuardedBy("this") boolean mCheckedForSetup = false; Context mContext; - int mFactoryTest; - - boolean mCheckedForSetup; - /** * The time at which we will allow normal application switches again, * after a call to {@link #stopAppSwitches()}. diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index ff5a0f967b54f..757096016329f 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -538,7 +538,10 @@ public final class PowerManagerService extends SystemService @Override public void onBootPhase(int phase) { synchronized (mLock) { - if (phase == PHASE_BOOT_COMPLETED) { + if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) { + incrementBootCount(); + + } else if (phase == PHASE_BOOT_COMPLETED) { final long now = SystemClock.uptimeMillis(); mBootCompleted = true; mDirty |= DIRTY_BOOT_COMPLETED; @@ -553,8 +556,6 @@ public final class PowerManagerService extends SystemService } } mBootCompletedRunnables = null; - - incrementBootCount(); } } }