diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java index e6e6bcd4381..8078ad63d56 100644 --- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java @@ -159,6 +159,14 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase startIconAnimation(); } + @Override + protected void onPause() { + super.onPause(); + if (mSidecar != null) { + mSidecar.setListener(null); + } + } + private void startIconAnimation() { mIconAnimationDrawable.start(); } diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java index 7fc7a040021..cbfec0c200b 100644 --- a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java +++ b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java @@ -31,6 +31,8 @@ import com.android.settings.Utils; import com.android.settings.core.InstrumentedFragment; import com.android.settings.password.IFingerprintManager; +import java.util.ArrayList; + /** * Sidecar fragment to handle the state around fingerprint enrollment. */ @@ -46,6 +48,57 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment { private boolean mDone; private int mUserId; private IFingerprintManager mFingerprintManager; + private ArrayList mQueuedEvents; + + private abstract class QueuedEvent { + public abstract void send(Listener listener); + } + + private class QueuedEnrollmentProgress extends QueuedEvent { + int enrollmentSteps; + int remaining; + public QueuedEnrollmentProgress(int enrollmentSteps, int remaining) { + this.enrollmentSteps = enrollmentSteps; + this.remaining = remaining; + } + + @Override + public void send(Listener listener) { + listener.onEnrollmentProgressChange(enrollmentSteps, remaining); + } + } + + private class QueuedEnrollmentHelp extends QueuedEvent { + int helpMsgId; + CharSequence helpString; + public QueuedEnrollmentHelp(int helpMsgId, CharSequence helpString) { + this.helpMsgId = helpMsgId; + this.helpString = helpString; + } + + @Override + public void send(Listener listener) { + listener.onEnrollmentHelp(helpString); + } + } + + private class QueuedEnrollmentError extends QueuedEvent { + int errMsgId; + CharSequence errString; + public QueuedEnrollmentError(int errMsgId, CharSequence errString) { + this.errMsgId = errMsgId; + this.errString = errString; + } + + @Override + public void send(Listener listener) { + listener.onEnrollmentError(errMsgId, errString); + } + } + + public FingerprintEnrollSidecar() { + mQueuedEvents = new ArrayList<>(); + } @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -103,6 +156,13 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment { public void setListener(Listener listener) { mListener = listener; + if (mListener != null) { + for (int i=0; i