am c6e570db: Merge "Fix camera disambiguation in secure keyguard" into jb-mr1-dev
* commit 'c6e570dbadc3689bc80c0516492a3209d5f6742b': Fix camera disambiguation in secure keyguard
This commit is contained in:
@@ -125,7 +125,9 @@ public class LockPatternUtils {
|
||||
private final ContentResolver mContentResolver;
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
private ILockSettings mLockSettingsService;
|
||||
private int mCurrentUserId = UserHandle.USER_NULL;
|
||||
|
||||
// The current user is set by KeyguardViewMediator and shared by all LockPatternUtils.
|
||||
private static volatile int sCurrentUserId = UserHandle.USER_NULL;
|
||||
|
||||
public DevicePolicyManager getDevicePolicyManager() {
|
||||
if (mDevicePolicyManager == null) {
|
||||
@@ -215,13 +217,13 @@ public class LockPatternUtils {
|
||||
}
|
||||
|
||||
public void setCurrentUser(int userId) {
|
||||
mCurrentUserId = userId;
|
||||
sCurrentUserId = userId;
|
||||
}
|
||||
|
||||
public int getCurrentUser() {
|
||||
if (mCurrentUserId != UserHandle.USER_NULL) {
|
||||
if (sCurrentUserId != UserHandle.USER_NULL) {
|
||||
// Someone is regularly updating using setCurrentUser() use that value.
|
||||
return mCurrentUserId;
|
||||
return sCurrentUserId;
|
||||
}
|
||||
try {
|
||||
return ActivityManagerNative.getDefault().getCurrentUser().id;
|
||||
|
||||
@@ -153,7 +153,8 @@ public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecu
|
||||
if (mBiometricUnlock != null) {
|
||||
mBiometricUnlock.stop();
|
||||
}
|
||||
mLockPatternUtils.setCurrentUser(userId);
|
||||
// No longer required; static value set by KeyguardViewMediator
|
||||
// mLockPatternUtils.setCurrentUser(userId);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.content.ActivityNotFoundException;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.MediaStore;
|
||||
@@ -38,6 +40,8 @@ import com.android.internal.widget.multiwaveview.GlowPadView;
|
||||
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
|
||||
import com.android.internal.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView {
|
||||
private static final boolean DEBUG = KeyguardHostView.DEBUG;
|
||||
private static final String TAG = "SecuritySelectorView";
|
||||
@@ -118,12 +122,39 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
private boolean wouldLaunchResolverActivity(Intent intent) {
|
||||
PackageManager packageManager = mContext.getPackageManager();
|
||||
ResolveInfo resolved = packageManager.resolveActivityAsUser(intent,
|
||||
PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser());
|
||||
final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser(
|
||||
intent, PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser());
|
||||
// If the list contains the above resolved activity, then it can't be
|
||||
// ResolverActivity itself.
|
||||
for (int i = 0; i < appList.size(); i++) {
|
||||
ResolveInfo tmp = appList.get(i);
|
||||
if (tmp.activityInfo.name.equals(resolved.activityInfo.name)
|
||||
&& tmp.activityInfo.packageName.equals(resolved.activityInfo.packageName)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void launchCamera() {
|
||||
if (mLockPatternUtils.isSecure()) {
|
||||
// Launch the secure version of the camera
|
||||
Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE);
|
||||
final Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
||||
launchActivity(intent, true);
|
||||
|
||||
if (wouldLaunchResolverActivity(intent)) {
|
||||
// TODO: Show disambiguation dialog instead.
|
||||
// For now, we'll treat this like launching any other app from secure keyguard.
|
||||
// When they do, user sees the system's ResolverActivity which lets them choose
|
||||
// which secure camera to use.
|
||||
launchActivity(intent, false);
|
||||
} else {
|
||||
launchActivity(intent, true);
|
||||
}
|
||||
} else {
|
||||
// Launch the normal camera
|
||||
launchActivity(new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA), false);
|
||||
|
||||
@@ -894,6 +894,8 @@ public class KeyguardViewMediator {
|
||||
|
||||
/**
|
||||
* Update the newUserId. Call while holding WindowManagerService lock.
|
||||
* NOTE: Should only be called by KeyguardViewMediator in response to the user id changing.
|
||||
*
|
||||
* @param newUserId The id of the incoming user.
|
||||
*/
|
||||
public void setCurrentUser(int newUserId) {
|
||||
|
||||
Reference in New Issue
Block a user