diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java b/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java index 10b304bb8434..e041fcac5f6b 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/FODCircleView.java @@ -16,6 +16,11 @@ package com.android.systemui.biometrics; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; + +import android.app.ActivityManager.StackInfo; +import android.app.ActivityTaskManager; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.Configuration; @@ -45,6 +50,8 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; import vendor.lineage.biometrics.fingerprint.inscreen.V1_0.IFingerprintInscreen; import vendor.lineage.biometrics.fingerprint.inscreen.V1_0.IFingerprintInscreenCallback; @@ -74,6 +81,7 @@ public class FODCircleView extends ImageView { private int mDreamingOffsetY; private boolean mFading; + private boolean mIsAssistantVisible = false; private boolean mIsBouncer; private boolean mIsBiometricRunning; private boolean mIsCircleShowing; @@ -158,6 +166,7 @@ public class FODCircleView extends ImageView { mIsBouncer = isBouncer; if (mUpdateMonitor.isFingerprintDetectionRunning()) { if (isPinOrPattern(mUpdateMonitor.getCurrentUser()) || !isBouncer) { + mIsAssistantVisible = false; show(); } else { hide(); @@ -187,6 +196,28 @@ public class FODCircleView extends ImageView { } }; + private final TaskStackChangeListener + mTaskStackChangeListener = new TaskStackChangeListener() { + @Override + public void onTaskStackChangedBackground() { + try { + StackInfo stackInfo = ActivityTaskManager.getService().getStackInfo( + WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_ASSISTANT); + if (stackInfo == null && mIsAssistantVisible) { + mIsAssistantVisible = false; + if (mUpdateMonitor.isFingerprintDetectionRunning()) { + mHandler.post(() -> show()); + } + return; + } + if (stackInfo != null) mIsAssistantVisible = stackInfo.visible; + if (mIsAssistantVisible) { + mHandler.post(() -> hide()); + } + } catch (RemoteException ignored) { } + } + }; + public FODCircleView(Context context) { super(context); @@ -263,6 +294,20 @@ public class FODCircleView extends ImageView { } @Override + protected void onAttachedToWindow() { + ActivityManagerWrapper.getInstance().registerTaskStackListener( + mTaskStackChangeListener); + super.onAttachedToWindow(); + } + + @Override + protected void onDetachedFromWindow() { + ActivityManagerWrapper.getInstance().unregisterTaskStackListener( + mTaskStackChangeListener); + super.onDetachedFromWindow(); + } + + @Override protected void onDraw(Canvas canvas) { if (!mIsCircleShowing) { canvas.drawCircle(mSize / 2, mSize / 2, mSize / 2.0f, mPaintFingerprintBackground); @@ -400,6 +445,11 @@ public class FODCircleView extends ImageView { return; } + if (mIsAssistantVisible) { + // Don't show when assistant UI is visible + return; + } + updatePosition(); setVisibility(View.VISIBLE); |