Merge "Disable quiet mode after UserManager.trySetQuietModeDisabled() is unlocked" into nyc-dev
This commit is contained in:
@@ -481,6 +481,7 @@
|
|||||||
|
|
||||||
<protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_AVAILABLE" />
|
<protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_AVAILABLE" />
|
||||||
<protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_UNAVAILABLE" />
|
<protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_UNAVAILABLE" />
|
||||||
|
<protected-broadcast android:name="com.android.server.pm.DISABLE_QUIET_MODE_AFTER_UNLOCK" />
|
||||||
|
|
||||||
<!-- ====================================================================== -->
|
<!-- ====================================================================== -->
|
||||||
<!-- RUNTIME PERMISSIONS -->
|
<!-- RUNTIME PERMISSIONS -->
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.app.ActivityManagerNative;
|
|||||||
import android.app.IActivityManager;
|
import android.app.IActivityManager;
|
||||||
import android.app.IStopUserCallback;
|
import android.app.IStopUserCallback;
|
||||||
import android.app.KeyguardManager;
|
import android.app.KeyguardManager;
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -328,6 +329,27 @@ public class UserManagerService extends IUserManager.Stub {
|
|||||||
|
|
||||||
private final LockPatternUtils mLockPatternUtils;
|
private final LockPatternUtils mLockPatternUtils;
|
||||||
|
|
||||||
|
private final String ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK =
|
||||||
|
"com.android.server.pm.DISABLE_QUIET_MODE_AFTER_UNLOCK";
|
||||||
|
|
||||||
|
private final BroadcastReceiver mDisableQuietModeCallback = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
if (ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK.equals(intent.getAction())) {
|
||||||
|
final IntentSender target = intent.getParcelableExtra(Intent.EXTRA_INTENT);
|
||||||
|
final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_ID, 0);
|
||||||
|
setQuietModeEnabled(userHandle, false);
|
||||||
|
if (target != null) {
|
||||||
|
try {
|
||||||
|
mContext.startIntentSender(target, null, 0, 0, 0);
|
||||||
|
} catch (IntentSender.SendIntentException e) {
|
||||||
|
/* ignore */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether all users should be created ephemeral.
|
* Whether all users should be created ephemeral.
|
||||||
*/
|
*/
|
||||||
@@ -420,6 +442,9 @@ public class UserManagerService extends IUserManager.Stub {
|
|||||||
// user restriction was not a default guest restriction.
|
// user restriction was not a default guest restriction.
|
||||||
setUserRestriction(UserManager.DISALLOW_CONFIG_WIFI, true, currentGuestUser.id);
|
setUserRestriction(UserManager.DISALLOW_CONFIG_WIFI, true, currentGuestUser.id);
|
||||||
}
|
}
|
||||||
|
mContext.registerReceiver(mDisableQuietModeCallback,
|
||||||
|
new IntentFilter(ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK),
|
||||||
|
null, mHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -709,6 +734,7 @@ public class UserManagerService extends IUserManager.Stub {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean trySetQuietModeDisabled(int userHandle, IntentSender target) {
|
public boolean trySetQuietModeDisabled(int userHandle, IntentSender target) {
|
||||||
|
checkManageUsersPermission("silence profile");
|
||||||
if (StorageManager.isUserKeyUnlocked(userHandle)
|
if (StorageManager.isUserKeyUnlocked(userHandle)
|
||||||
|| !mLockPatternUtils.isSecure(userHandle)) {
|
|| !mLockPatternUtils.isSecure(userHandle)) {
|
||||||
// if the user is already unlocked, no need to show a profile challenge
|
// if the user is already unlocked, no need to show a profile challenge
|
||||||
@@ -729,9 +755,24 @@ public class UserManagerService extends IUserManager.Stub {
|
|||||||
if (unlockIntent == null) {
|
if (unlockIntent == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
final Intent callBackIntent = new Intent(
|
||||||
|
ACTION_DISABLE_QUIET_MODE_AFTER_UNLOCK);
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
unlockIntent.putExtra(Intent.EXTRA_INTENT, target);
|
callBackIntent.putExtra(Intent.EXTRA_INTENT, target);
|
||||||
}
|
}
|
||||||
|
callBackIntent.putExtra(Intent.EXTRA_USER_ID, userHandle);
|
||||||
|
callBackIntent.setPackage(mContext.getPackageName());
|
||||||
|
callBackIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
|
||||||
|
final PendingIntent pendingIntent = PendingIntent.getBroadcast(
|
||||||
|
mContext,
|
||||||
|
0,
|
||||||
|
callBackIntent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT |
|
||||||
|
PendingIntent.FLAG_ONE_SHOT |
|
||||||
|
PendingIntent.FLAG_IMMUTABLE);
|
||||||
|
// After unlocking the challenge, it will disable quiet mode and run the original
|
||||||
|
// intentSender
|
||||||
|
unlockIntent.putExtra(Intent.EXTRA_INTENT, pendingIntent.getIntentSender());
|
||||||
unlockIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
unlockIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
||||||
mContext.startActivity(unlockIntent);
|
mContext.startActivity(unlockIntent);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in New Issue
Block a user