private FaceSettingsAttentionPreferenceController mAttentionController;
private FaceSettingsRemoveButtonPreferenceController mRemoveController;
private FaceSettingsEnrollButtonPreferenceController mEnrollController;
+ private FaceSettingsLockscreenBypassPreferenceController mLockscreenController;
private List<AbstractPreferenceController> mControllers;
private List<Preference> mTogglePreferences;
Preference attentionPref = findPreference(FaceSettingsAttentionPreferenceController.KEY);
Preference confirmPref = findPreference(FaceSettingsConfirmPreferenceController.KEY);
Preference bypassPref =
- findPreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
+ findPreference(mLockscreenController.getPreferenceKey());
mTogglePreferences = new ArrayList<>(
Arrays.asList(keyguardPref, appPref, attentionPref, confirmPref, bypassPref));
// There is no better way to do this :/
for (AbstractPreferenceController controller : mControllers) {
- if (controller instanceof FaceSettingsPreferenceController) {
+ if (controller instanceof FaceSettingsPreferenceController) {
((FaceSettingsPreferenceController) controller).setUserId(mUserId);
} else if (controller instanceof FaceSettingsEnrollButtonPreferenceController) {
((FaceSettingsEnrollButtonPreferenceController) controller).setUserId(mUserId);
- } else if (controller instanceof FaceSettingsLockscreenBypassPreferenceController) {
- ((FaceSettingsLockscreenBypassPreferenceController) controller).setUserId(mUserId);
}
}
mRemoveController.setUserId(mUserId);
// Don't show keyguard controller for work profile settings.
if (mUserManager.isManagedProfile(mUserId)) {
removePreference(FaceSettingsKeyguardPreferenceController.KEY);
- removePreference(FaceSettingsLockscreenBypassPreferenceController.KEY);
+ removePreference(mLockscreenController.getPreferenceKey());
}
if (savedInstanceState != null) {
}
@Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ mLockscreenController = use(FaceSettingsLockscreenBypassPreferenceController.class);
+ mLockscreenController.setUserId(mUserId);
+ }
+
+ @Override
public void onResume() {
super.onResume();
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new FaceSettingsVideoPreferenceController(context));
controllers.add(new FaceSettingsKeyguardPreferenceController(context));
- controllers.add(new FaceSettingsLockscreenBypassPreferenceController(context));
controllers.add(new FaceSettingsAppPreferenceController(context));
controllers.add(new FaceSettingsAttentionPreferenceController(context));
controllers.add(new FaceSettingsRemoveButtonPreferenceController(context));
public class FaceSettingsLockscreenBypassPreferenceController
extends FaceSettingsPreferenceController {
- static final String KEY = "security_lockscreen_bypass";
-
@VisibleForTesting
protected FaceManager mFaceManager;
private UserManager mUserManager;
- public FaceSettingsLockscreenBypassPreferenceController(Context context) {
- this(context, KEY);
- }
-
public FaceSettingsLockscreenBypassPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
import android.annotation.LayoutRes;
import android.annotation.Nullable;
+import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.view.LayoutInflater;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (isLockTaskModePinned() && !isSettingsRunOnTop()) {
+ Log.w(TAG, "Devices lock task mode pinned.");
+ finish();
+ }
final long startTime = System.currentTimeMillis();
getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));
}
}
+ private boolean isLockTaskModePinned() {
+ final ActivityManager activityManager =
+ getApplicationContext().getSystemService(ActivityManager.class);
+ return activityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_PINNED;
+ }
+
+ private boolean isSettingsRunOnTop() {
+ final ActivityManager activityManager =
+ getApplicationContext().getSystemService(ActivityManager.class);
+ final String taskPkgName = activityManager.getRunningTasks(1 /* maxNum */)
+ .get(0 /* index */).baseActivity.getPackageName();
+ return TextUtils.equals(getPackageName(), taskPkgName);
+ }
+
/**
* @return whether or not the enabled state actually changed.
*/