@@ -38,6 +38,10 @@ abstract class CameraController implements CameraPreview.SurfaceCallback {
3838
3939 protected int mDisplayOffset ;
4040 protected int mDeviceOrientation ;
41+
42+ protected boolean mScheduledForStart = false ;
43+ protected boolean mScheduledForStop = false ;
44+ protected boolean mScheduledForRestart = false ;
4145 protected int mState = STATE_STOPPED ;
4246
4347 protected WorkerHandler mHandler ;
@@ -84,11 +88,13 @@ private String ss() {
8488 // Starts the preview asynchronously.
8589 final void start () {
8690 LOG .i ("Start:" , "posting runnable. State:" , ss ());
91+ mScheduledForStart = true ;
8792 mHandler .post (new Runnable () {
8893 @ Override
8994 public void run () {
9095 try {
9196 LOG .i ("Start:" , "executing. State:" , ss ());
97+ mScheduledForStart = false ;
9298 if (mState >= STATE_STARTING ) return ;
9399 mState = STATE_STARTING ;
94100 LOG .i ("Start:" , "about to call onStart()" , ss ());
@@ -108,11 +114,13 @@ public void run() {
108114 // Stops the preview asynchronously.
109115 final void stop () {
110116 LOG .i ("Stop:" , "posting runnable. State:" , ss ());
117+ mScheduledForStop = true ;
111118 mHandler .post (new Runnable () {
112119 @ Override
113120 public void run () {
114121 try {
115122 LOG .i ("Stop:" , "executing. State:" , ss ());
123+ mScheduledForStop = false ;
116124 if (mState <= STATE_STOPPED ) return ;
117125 mState = STATE_STOPPING ;
118126 LOG .i ("Stop:" , "about to call onStop()" );
@@ -148,11 +156,13 @@ void stopImmediately() {
148156 // Forces a restart.
149157 protected final void restart () {
150158 LOG .i ("Restart:" , "posting runnable" );
159+ mScheduledForRestart = true ;
151160 mHandler .post (new Runnable () {
152161 @ Override
153162 public void run () {
154163 try {
155164 LOG .i ("Restart:" , "executing. Needs stopping:" , mState > STATE_STOPPED , ss ());
165+ mScheduledForRestart = false ;
156166 // Don't stop if stopped.
157167 if (mState > STATE_STOPPED ) {
158168 mState = STATE_STOPPING ;
0 commit comments