Commit Graph

308 Commits

Author SHA1 Message Date
Kevin Chyn
b13bc50542 1/n: Make ChooseLockSettingsHelper into a builder
The multitude of slightly different launchConfirmationActivity(*)
methods are a big unsustainable pyramid. It's too difficult to
read, too difficult to track which clients are interested in which
parameters, and too difficult to add new parameters, since we need to

1) Read through all of them and find one that's the closest
2) Try not to affect other callers, so potentially add yet another
3) Modify the internal paths, which all basically call each other
   until it reaches the biggest launchConfirmationActivity which
   has ALL of the parameters

This change should have no behavioral change.

Note: CredentialStorage doesn't need returnCredentials anymore as of
      ag/6073449

Test: make -j56 RunSettingsRoboTests
Test: Manually traced code paths for each invocation. A few hidden
      dependencies (such as explicitly setting challenge=0 with
      hasChallenge=true) were found. Left them the way they were in
      case they were intended
Test: Enroll face, fingerprint
Test: Enable developer options
Test: Change to PIN, Pattern, Password, then back to PIN (so each
      type requests confirmation)
Test: adb shell am start -a android.app.action.CONFIRM_DEVICE_CREDENTIAL,
      authenticate
Test: adb shell am start -a android.app.action.CONFIRM_FRP_CREDENTIAL
      (shows confirm credential screen)
Fixes: 138453993

Change-Id: Ic82ef3c3ac2e14d624281921f2d816bcdacbd82b
2020-07-24 11:13:13 -07:00
Kevin Chyn
cbe32ed1cf Update Settings together with generateChallenge/revokeChallenge
The internal implementation of generate/revoke in system_server is now
asynchronous. To keep existing clients working, the manager classes
introduce a blocking version of the generateChallenge calls. This change
updates Settings to use the backward-compatible blocking calls.

Bug: 157790417

Test: Enroll fingerprint/face
Test: After enrollment, toggle setFeature or do subsequent enrollment
      in face/fingerprint settings
Change-Id: Ib4dfdc5f12530b938ab9b1745f5a19cd9e2eceee
2020-06-25 17:12:46 -07:00
Kevin Chyn
95e05d8d07 Merge "Remove setActiveUser together with frameworks/base (see 12/n)" 2020-06-20 01:02:24 +00:00
Kevin Chyn
af90bd5c11 Remove setActiveUser together with frameworks/base (see 12/n)
setActiveUser is removed from the @hide API surface and is no longer
necessary. The framework ensures that the correct user is set without
an explicit call, since userId is sent as a parameter to each of the
methods already.

Bug: 157790417
Test: See testing from frameworks/base change (12/n) from the same
      gerrit topic
Change-Id: Id88b818ed0bb1f75f18ac8e9ba7aff2a9b80b319
2020-06-16 14:52:15 -07:00
Rubin Xu
5925f83521 Merge "Remove password shards from memory" into rvc-dev am: 01bd0fcaf7 am: 087ec3447d am: 634cdf3825 am: bdf303f0d1
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/11838400

Change-Id: Ia0daf11fe7e57c28b6fe4c3fbdf4107613d47a92
2020-06-15 09:33:52 +00:00
Rubin Xu
01bd0fcaf7 Merge "Remove password shards from memory" into rvc-dev 2020-06-15 08:34:18 +00:00
Kevin Chyn
6abb90c7af Merge "BiometricFragment should commitAllowingStateLoss" into rvc-dev am: 5c4334276f am: 6d5a778090 am: f1a45e1257 am: 4ae5cc5564
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/11838911

Change-Id: I9a9d53f0fe5e47a005a30893cf55170b25a7892b
2020-06-12 20:48:23 +00:00
Rubin Xu
670a30e766 Remove password shards from memory
Force a garbage collection and zeroize some fields after Activity finishes

Test: Goes through password change flow, then grab a heap dump via
      adb shell 'am dumpheap $(pidof com.android.settings)
      /data/local/tmp/settings.hprof'
      And grep for password in the dump
Bug: 144537463
Change-Id: Idd0a04ada98900aeb2a6d20bb1270a4a4aec2cfd
2020-06-12 15:56:04 +01:00
Kevin Chyn
895ddf239a BiometricFragment should commitAllowingStateLoss
This is a terminal case for both authentication as well as the
activity itself, so this should be safe.

Fixes: 158635014

Test: Builds
Change-Id: Ieef1ab305e6518dbc0ae34ad59d52da82895972a
2020-06-11 12:59:05 -07:00
Rubin Xu
a522f85b8b Merge "Allow setting password during provisioning if FRP is not supported" into rvc-dev am: c3b12c3b00 am: 085509cb17 am: 8f68066459 am: ce931b51ce
Change-Id: I8759fb3ced62acc35e1b451224fd65636cc3e151
2020-05-29 11:51:01 +00:00
Rubin Xu
5e51ed6a89 Allow setting password during provisioning if FRP is not supported
On devices without PersistentDataBlock support, we should
always allow setting up password during provisioning.

Bug: 157451551
Test: make RunSettingsRoboTests
      ROBOTEST_FILTER=com.android.settings.password
Test: On cuttlefish, file ACTION_SET_NET_PASSWORD before SUW completes
Change-Id: Ic7b5d99b38e6427750ce70fa7e38f7ef6054d4ad
2020-05-28 10:30:47 +01:00
TreeHugger Robot
bcf9d9e97f Merge "Fix disappearing biometric prompt for the managed profile" into rvc-dev am: 4d44702659 am: e3e2ce74f7 am: a9df21b508 am: 43a459cb1b
Change-Id: I0ffcb7bfd8fed9aa2f769a144e1c33c330d7c9ff
2020-05-27 12:37:04 +00:00
Eran Messeri
4f2090ddc0 Fix disappearing biometric prompt for the managed profile
In several circumstances, the ConfirmDeviceCredentialActivity
may be started while the device is being unlocked - particularly, when
the managed profile on the device has a separate challenge and the user
is attempting to start an activity associated with the locked, managed
profile. For example, by double-tapping a notification from the managed
profile or trying to reply to such a notification.

When the ConfirmDeviceCredentialActivity is started after the user has
entered the primary lockscreen challenge but before the keyguard is
fully dismissed, the activity may be started and immediately paused.
If the activity then calls finish() in onPause(), the biometric prompt
will disappear and the user will not have a chance to authenticate.

Fix the issue by only calling finish() in onPause() if the biometric
prompt has not been shown.

The flag indicating whether the activity is waiting for biometric
prompt or not needs to be cleared whenever the biometric prompt invokes
the callback, so that the activity will correctly call finish() if the
user does abort authentication.

Bug: 153689182
Bug: 141470517
Test: Manual, set up a work profile and double-tap a work notification
or try to Reply to a work GMail notification.

Change-Id: I9d3d3000b99d0eb4b44b90f5a0c2856db5f32144
2020-05-21 18:42:41 +01:00
Kevin Chyn
f761b35ef5 Remove dependencies on old BiometricPrompt bundle
This moves the dependency to PromptInfo, which isn't optimal but
is still much more readable / manageable

Bug: 149067920
Test: adb shell am start -a android.app.action.CONFIRM_DEVICE_CREDENTIAL
Change-Id: I7d9ba2084db76284d08f68dd2005190f06412a1e
2020-05-13 12:01:54 -07:00
Bill Yi
58957af851 Merge android10-qpr2-s3-release to aosp/master - DO NOT MERGE
Merged-In: I1da09579d5ce7b2c67b4a7db381c779a5c5ccb6b
Change-Id: Ifdb33d0e12e1a487f694c37e3e99f87af06b6b74
2020-05-05 17:02:32 +00:00
TreeHugger Robot
4863cfd64e Merge "Remove setWorkChallengeBackground" 2020-05-01 15:31:33 +00:00
Alex Johnston
362858810a Remove setWorkChallengeBackground
* In Android R, the work challenge
  UI was updated to the latest material
  spec. The background and organization
  color are no longer used and can be
  removed.

Bug: 155464031
Test: Check Settings work challenge to
      ensure code removal does not break
      anything.
Change-Id: Ibc4dac2f47441751fde95485c223e61785f5aae8
2020-05-01 12:57:12 +01:00
Alex Johnston
cf342c9581 Merge "Update work challenge header in Settings" into rvc-dev 2020-05-01 10:10:49 +00:00
Alex Johnston
439947aec7 Update work challenge header in Settings
* If organization name has been set for
  a managed profile, work challenge
  should display it as the header.

Bug: 155274026
Test: manual testing

Manual Testing Steps
* Set up device with managed profile
* Set organization name via TestDPC
* Go Settings > Security > Work profile security
  and add a work profile lock
* Select 'Work profile lock' and verify
  organization name is shown in header

Change-Id: I83209383fd2cf9179c34ccfdf8c097c379ec933e
2020-04-29 15:14:20 +01:00
Kevin Chyn
1895f8b5f2 Move ImeAwareTextEdit to android.widget
Allows it to be used in more projects

Bug: 154161590

Test: Manually opened each setting that was impacted
Change-Id: Ife59074e5f8ffa76c2c81cca4022ca200bb59526
2020-04-28 15:57:40 -07:00
Rubin Xu
81d8664d81 Merge "Improve work profile unification flow" into rvc-dev 2020-04-15 11:18:00 +00:00
Rubin Xu
f535e87e51 Improve work profile unification flow
When unifying work profile challenge, keep the device lock
as long as it will still meet password requirement after unification.
If not, prompt the user to set a new device lock and only unify
work challenge after a compliant device lock is set.

Bug: 148630506
Fix: 149682344
Test: make RunSettingsRoboTests
ROBOTEST_FILTER='ChooseLockGenericTest|ChooseLockPasswordTest|ChooseLockPatternTest|LockUnificationPreferenceControllerTest'

Change-Id: I99cde2650902927f6a4cc7c0cc7c6016e0dc283f
2020-04-08 14:43:48 +01:00
Jason Chiu
b12e3b96c9 Support click metrics logs in several pages
- Assign metrics category to perferences at an earlier stage in
  DashboardFragment for better usability.

Bug: 137559984
Test: robotest
Change-Id: Icd4185efa0e655be20c4b673a1380fa42140923f
2020-04-07 16:44:53 +08:00
Kevin Chyn
ef28e9b75f Merge "Adjust ConfirmDeviceCredentialActivity system bars" into rvc-dev 2020-03-28 00:06:00 +00:00
Kevin Chyn
28a034d6ed Adjust ConfirmDeviceCredentialActivity system bars
CDCA is a transparent activity with the sole purpose of
requesting authentication. Since authentication is all drawn
by SystemUI, we should also stop this activity from drawing
the StatusBar.

Register to receive biometric system events (early user canceled),
so that we can finish() and start the activity transition
simultaneously. This fixes some navigation bar jank.

Bug: 148273355

Test: Set up a work profile, then install BiometricPromptDemo
      Disable one-lock and set up a password/biometric for the
      work profile. Lock/unlock screen, then open the work
      profile version of the app. No status bar jank seen.
Change-Id: I54a352527ed007dcaf1bea14a51711e4022fe028
2020-03-27 12:12:30 -07:00
Curtis Belmonte
66090dce59 Set CDC detail string as subtitle, not description
With an associated change to the UI of the BiometricPrompt credential
view, this commit preserves the current appearance of the CDC auth flow
by promoting the "details" string from the description to the subtitle
field of the prompt.

Test: Manually, using the TestDPC app

Bug: 152053691
Change-Id: If1d773f7f9a7b141520eac70a6cd64c09eb27f20
2020-03-26 13:49:27 -07:00
Mill Chen
abe9cee25e RESTRICT AUTOMERGE
Allow LockScreenPattern to be launched in the pinning screen

If work profile lock is enabled and work app is pinned, users will get a
black/white screen on the phone. That's because Settings is prevented
from other apps launch any pages of Settings in the pinning mode.

In order to launch some pages of Settings from other apps, we add a
condition to the preventive mechanism and allow the activity inherited
from SettingsBaseActivity to override the condition to have the activity
to be launched from other apps in the pinning mode.

Bug: 137015265
Bug: 135604684
Test: manual test
Change-Id: I8070de79a83350d1658efcb19e983669dad0e673
(cherry picked from commit 077dd9b07f)
2020-03-19 04:52:35 +00:00
Christopher Tate
0f2d02be9c DO NOT MERGE - Track framework changes to crashApplication
Bug: 128649910
Test: manual
Test: atest OsHostTests#testForegroundServiceBadNotification
Merged-In: Ia613372360f8b32f6ad3b7d2092e7cb27f067fbc
Change-Id: I6894e3df309669ba98ad23432aa18d6043739aad
(cherry picked from commit 36f182159f)
2020-03-19 04:52:30 +00:00
Rubin Xu
b79e01680d Merge "Do not reset incorrect password attempts after biometric authentication" into rvc-dev 2020-03-18 18:48:23 +00:00
Rubin Xu
397ee8b563 Do not reset incorrect password attempts after biometric authentication
For work challenges, do not reset incorrect password attempts if
challenge is resolved via biometric authentication. This is the
behaviour for personal keyguard and work challenge should be
consistent.

Bug: 139438785
Test: manual: enroll work challenge with fingerprint, set failed wipe
count (3) via TestDPC and attempt two failed attempts (via cmd
lock_settings). Resolve work challenge with fingerprint and attempt one
last failed attempt. Verify work profiel is wiped.

Change-Id: Ic64d3e44f3faa5adf8ac43db09e33c8403427990
2020-03-18 11:38:30 +00:00
Eric Sandness
7430932305 Use ChooseLockGeneric When Started By Admin App
The device management app may run before the end of device provisioning,
and it may start SetNewPasswordActivity.  If this happens, use
ChooseLockGeneric instead of SetupChooseLockGeneric.  Only use
SetupChoseLockGeneric if SetNewPasswordActivity was started by Setup
Wizard itself.

Fixes: 151552453
Test: atest com.android.settings.password.SetNewPasswordActivityTest
Test: atest com.android.settings.password.ChooseLockGenericTest
Test: Manually run consumer and enterprise device setup
Change-Id: I3b479ed18211d6625654f266fe692f07d0047e4f
2020-03-17 17:16:08 +00:00
Pavel Grafov
c4d9980a5d Fix NPE when there's no forgot password button.
Test: manual
Bug: 149887743
Change-Id: If2238aec2e618f617b7459b819303c03f009941a
2020-02-20 12:42:12 +00:00
Pavel Grafov
04f783c759 "Forgot my password" to start profile in locked state.
Currently if a work profile with a separate lock is turned off
(a.k.a. in quiet mode), and the user has forgotten the password,
profile owner app cannot use DPM.resetPasswordWithToken because
the profile user is not running.

In BYOD case the user can remove and re-provision the profile but
in the new COPE mode (a.k.a. on an organization owned device with
work profile) it is not possible to remove the profile. So full
factory reset is required.

This CL allows the user to start the profile in locked state
(a.k.a direct boot mode) so that the admin can reset the password.

This CL adds "Forgot my password" button to work profile credential prompt
if all of the following conditions are true:
 * Work profile is turned off
 * Profile owner app is capable of running in direct boot mode.
 * Profile owner app has an active password reset token.
 * The device is an FBE device (otherwise profile will be unlocked).

Clicking this button starts the profile in locked state and shows an
activity to the user that instruct them to go to their IT admin.

Bug: 143516540
Test: manual
Change-Id: I832f7121b43e39161c5afa816f44ce89584b66e2
2020-02-19 13:48:34 +00:00
Curtis Belmonte
c4bcf041d2 Pass CDC text as credential-only to BiometricPrompt
Invokes the new hidden API to allow the work authentication prompt to
supply specific text to BiometricPrompt for credential auth. This
allows the prompt to use work-specific language when verifying work
credentials, while retaining more generic language when authenticating
with biometrics.

Test: Work lock prompt shows "Enter your work ___" for credential
Test: Work lock prompt now shows "Verify it's you" for face

Bug: 149003660
Change-Id: Icab8e16702ca31d08fa8b0b00f0519c9a37f609f
2020-02-13 10:12:19 -08:00
Alex Johnston
403c330135 Update work profile app lock to latest spec
* Updated text and description for PIN, password and pattern
* Added enterprise logo to work profile lock

Bug: 141290838
Test: Manual testing
      atest com.android.systemui.biometrics.AuthBiometricViewTest
      atest com.android.systemui.biometrics.AuthContainerViewTest

Change-Id: Iac6c9ca15e7446cbd7cce9fc1a1ac4e1c867bf31
2020-01-30 14:49:39 +00:00
Alex Johnston
28c6b577ad Update string displayed on work pin/password challenge
* The incorrect string was being displayed when the user
  was asked to enter their pin/password.
* Updated the string to include **work** instead of
  **device** when entering a work pin/password.

Bug: 148211118
Test: Manual testing
Change-Id: I2239a5011dec62fd63574bbf75495548ddd0d907
2020-01-28 17:49:33 +00:00
Kevin Chyn
dbdd06ca85 No longer need to cancel authentication from ConfirmDeviceCredentialActivity
CDCA no longer needs to cancel authentication in onPause. Since it
internally invokes BiometricPrompt, and BiometricPrompt's components e.g.
BiometricService and AuthController are aware of the "top-ness" of its
client, this code is redundant.

Fixes: 145991060

Test: Follow comment#3 in the bug above, repeat 10+ times
Test: Set up work profile, set up work profile password. Open work profile
      app, but before entering password, swipe up to go to home screen.
      Authentication is cancelled as expected.

Change-Id: I0b4d7d89cb9801ddbb6e3bd07f71191035cc75ec
2020-01-17 13:29:49 -08:00
Alex Johnston
7868acfa74 Update work profile lock in Settings to latest spec
* Updated FrameLayout of work profile lock in Settings to use GlifLayout
* Removed old background image of work profile lock
* Updated text for PIN, password and pattern
* Added enterprise logo to work profile lock

Bug: 141290838
Test: Manual testing
      atest com.android.settings.password

Change-Id: Ie09974857b6c76a182a8075b9e1964a2e0af0de9
2020-01-07 14:15:28 +00:00
joshmccloskey
53ccc448c8 Using new Biometric API
Test: Verified disabling fingerprint will not allow
the user to unlock work apps with fingerprint. (But can use fingeprint
within apps.)
Test: Verified disabling face and/or iris on a fingerprint device will
continue to
allow the user to unlock work apps with fingerprint.
Test: Verified disabling face on a face authentication device
will not allow the user to unlock work apps with face authentication.
(But can use face
authentication within apps.)
Test: Verified disabling fingerprint and/or iris on a face
authentication device will continue to allow the user to unlock work
apps with face authentication.

Change-Id: I2f72a85f39ec539e6c6bc2cf710ed2f5ebeb5f9a
2019-12-18 16:18:31 -08:00
Rubin Xu
0008986ef1 Fix NPE in ChooseLockPattern
Since mChosenPattern can be null, guard against it.

Bug: 144452509
Test: manual
Change-Id: I2814e49ee2e63e19631e8415efcc50e9ae78d4fc
2019-11-14 10:53:43 +00:00
Raff Tsai
c898775914 Hide search box if it is called in initial setup wizard
- Search box is hidden if user set intent extra isSetupFlow true

Fixes: 135717823
Test: search box is hidden in the following command
adb shell am start -a android.settings.SETTINGS --ez isSetupFlow true

Change-Id: Ia3d955c9390d6b0eef9391b9b35b6a483eb63d26
2019-10-18 02:08:38 +00:00
Joshua Mccloskey
0546a9faf1 Merge "Enforce policy management." 2019-10-16 23:23:27 +00:00
Pavel Grafov
7bdfda7775 Merge "Password constraints cleanup." 2019-10-16 17:49:12 +00:00
Pavel Grafov
69cac2c986 Password constraints cleanup.
Unified password validation code between DPMS and Settings.

Bug: 138375712
Test: atest tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
Change-Id: I55e4dae47526659594af3fcdbfc1292edceb5807
2019-10-16 15:36:21 +01:00
joshmccloskey
9be0899b3c Enforce policy management.
Test: Verified disabling fingerprint will not allow
the user to unlock work apps with fingerprint. (But can use fingeprint
within apps.)
Test: Verified disabling face and/or iris on a fingerprint device will
continue to
allow the user to unlock work apps with fingerprint.
Test: Verified disabling face on a face authentication device
will not allow the user to unlock work apps with face authentication.
(But can use face
authentication within apps.)
Test: Verified disabling fingerprint and/or iris on a face
authentication device will continue to allow the user to unlock work
apps with face authentication.
Bug: 141382589

Change-Id: I74135dd9f6afb1b789302ad0af3daf8a73a4181b
2019-10-16 00:05:10 +00:00
Rubin Xu
3bf2e70745 Fix NPE when user goes from none to swipe for lockscreen
If the user currently doesn't have a password and transitions
into another empty lockscreen (none -> swipe or swipe -> none),
there is no need to call setLockCredential.

Bug: 142701762
Test: Not yet :(
Change-Id: I553c8b30c7414775185d632660d962a73607baca
2019-10-15 23:51:10 +01:00
Rubin Xu
010116a173 Introduce LockscreenCredential
Bug: 65239740
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.password
Change-Id: Icb73d639291d6d2eda8015e18e93d0906f916bb2
2019-10-13 21:20:02 +01:00
Kevin Chyn
da1438d0c4 Merge "Removed old settings device credential logic." 2019-10-05 02:37:26 +00:00
Alex Johnston
a0351e2e19 Remove all biometrics data of a user when password is cleared.
Previously, the biometrics were only cleared if the password was cleared from the Settings.
Moved the logic from the Settings app to the system server side.
Now, the biometrics will be removed no matter how the password is cleared (Settings, adb, TestDPC).

Bug: 130653263
Test: Atest LockSettingsServiceTests
      manual testing from Settings, adb and TestDPC

Change-Id: I864b93404ec5cadb0685ac5d41376bf64ebde6f7
2019-10-03 16:05:07 +01:00
joshmccloskey
3786016993 Removed old settings device credential logic.
Bug: 140128468
Test: Verified with biometricpromptdemo that confirm device credential
still works correctly.
Change-Id: I0f608ba1256c696317402f56549452bf6933066b
2019-09-18 15:57:22 -07:00