6767import android .util .Pools .SimplePool ;
6868import android .util .Slog ;
6969import android .util .SparseArray ;
70+ import android .view .AccessibilityManagerInternal ;
7071import android .view .Display ;
7172import android .view .IWindow ;
7273import android .view .InputDevice ;
9192import com .android .internal .R ;
9293import com .android .internal .content .PackageMonitor ;
9394import com .android .internal .statusbar .IStatusBarService ;
95+ import com .android .internal .widget .LockPatternUtils ;
9496import com .android .server .LocalServices ;
9597
9698import org .xmlpull .v1 .XmlPullParserException ;
@@ -202,6 +204,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
202204
203205 private final UserManager mUserManager ;
204206
207+ private final LockPatternUtils mLockPatternUtils ;
208+
205209 private int mCurrentUserId = UserHandle .USER_OWNER ;
206210
207211 //TODO: Remove this hack
@@ -225,9 +229,11 @@ public AccessibilityManagerService(Context context) {
225229 mUserManager = (UserManager ) context .getSystemService (Context .USER_SERVICE );
226230 mSecurityPolicy = new SecurityPolicy ();
227231 mMainHandler = new MainHandler (mContext .getMainLooper ());
232+ mLockPatternUtils = new LockPatternUtils (context );
228233 registerBroadcastReceivers ();
229234 new AccessibilityContentObserver (mMainHandler ).register (
230235 context .getContentResolver ());
236+ LocalServices .addService (AccessibilityManagerInternal .class , new LocalService ());
231237 }
232238
233239 private UserState getUserStateLocked (int userId ) {
@@ -1294,6 +1300,7 @@ private void onUserStateChangedLocked(UserState userState) {
12941300 updateTouchExplorationLocked (userState );
12951301 updateEnhancedWebAccessibilityLocked (userState );
12961302 updateDisplayColorAdjustmentSettingsLocked (userState );
1303+ updateEncryptionState (userState );
12971304 scheduleUpdateInputFilter (userState );
12981305 scheduleUpdateClientsIfNeededLocked (userState );
12991306 }
@@ -1570,6 +1577,21 @@ private void updateDisplayColorAdjustmentSettingsLocked(UserState userState) {
15701577 DisplayAdjustmentUtils .applyAdjustments (mContext , userState .mUserId );
15711578 }
15721579
1580+ private void updateEncryptionState (UserState userState ) {
1581+ if (userState .mUserId != UserHandle .USER_OWNER ) {
1582+ return ;
1583+ }
1584+ if (hasRunningServicesLocked (userState ) && LockPatternUtils .isDeviceEncrypted ()) {
1585+ // If there are running accessibility services we do not have encryption as
1586+ // the user needs the accessibility layer to be running to authenticate.
1587+ mLockPatternUtils .clearEncryptionPassword ();
1588+ }
1589+ }
1590+
1591+ private boolean hasRunningServicesLocked (UserState userState ) {
1592+ return !userState .mBoundServices .isEmpty () || !userState .mBindingServices .isEmpty ();
1593+ }
1594+
15731595 private MagnificationSpec getCompatibleMagnificationSpecLocked (int windowId ) {
15741596 IBinder windowToken = mGlobalWindowTokens .get (windowId );
15751597 if (windowToken == null ) {
@@ -3883,4 +3905,14 @@ public void onChange(boolean selfChange, Uri uri) {
38833905 }
38843906 }
38853907 }
3908+
3909+ private final class LocalService extends AccessibilityManagerInternal {
3910+ @ Override
3911+ public boolean isNonDefaultEncryptionPasswordAllowed () {
3912+ synchronized (mLock ) {
3913+ UserState userState = getCurrentUserStateLocked ();
3914+ return !hasRunningServicesLocked (userState );
3915+ }
3916+ }
3917+ }
38863918}
0 commit comments