OSDN Git Service

Show "prepareing SD card" when media scanner is scanning.
authorWu-cheng Li <wuchengli@google.com>
Mon, 27 Jul 2009 09:44:56 +0000 (17:44 +0800)
committerWu-cheng Li <wuchengli@google.com>
Wed, 29 Jul 2009 06:58:57 +0000 (14:58 +0800)
Fix 1996415.

src/com/android/camera/Camera.java

index fac239c..2491419 100644 (file)
@@ -265,6 +265,8 @@ public class Camera extends Activity implements View.OnClickListener,
         readPreference();
         if (mRecordLocation) startReceivingLocationUpdates();
 
+        checkStorage();
+
         // Initialize last picture button.
         mContentResolver = getContentResolver();
         if (!mIsImageCaptureIntent)  {
@@ -293,8 +295,6 @@ public class Camera extends Activity implements View.OnClickListener,
 
         ImageManager.ensureOSXCompatibleFolder();
 
-        calculatePicturesRemaining();
-
         installIntentFilter();
 
         initializeFocusTone();
@@ -307,7 +307,8 @@ public class Camera extends Activity implements View.OnClickListener,
     }
 
     private void updateThumbnailButton() {
-        if (!mThumbController.isUriValid()) {
+        // Update last image if URI is invalid and the storage is ready.
+        if (!mThumbController.isUriValid() && mPicturesRemaining >= 0) {
             updateLastImage();
         }
         mThumbController.updateDisplayIfNeeded();
@@ -328,6 +329,8 @@ public class Camera extends Activity implements View.OnClickListener,
 
         initializeFocusTone();
 
+        checkStorage();
+
         if (!mIsImageCaptureIntent) {
             updateThumbnailButton();
         }
@@ -342,19 +345,19 @@ public class Camera extends Activity implements View.OnClickListener,
         @Override
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
-            if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
-                // SD card available
-                updateStorageHint(calculatePicturesRemaining());
-            } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED) ||
+            if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED) ||
                     action.equals(Intent.ACTION_MEDIA_CHECKING)) {
                 // SD card unavailable
                 mPicturesRemaining = MenuHelper.NO_STORAGE_ERROR;
                 updateStorageHint(mPicturesRemaining);
             } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
-                Toast.makeText(Camera.this,
-                        getResources().getString(R.string.wait), 5000);
+                mPicturesRemaining = MenuHelper.NO_STORAGE_ERROR;
+                updateStorageHint(mPicturesRemaining);
             } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
-                updateStorageHint();
+                updateStorageHint(calculatePicturesRemaining());
+                if (!mIsImageCaptureIntent)  {
+                    updateThumbnailButton();
+                }
             }
         }
     };
@@ -784,21 +787,18 @@ public class Camera extends Activity implements View.OnClickListener,
         if (!mIsImageCaptureIntent) {
             mSwitcher.setSwitch(SWITCH_CAMERA);
         }
-        Thread t = new Thread(new Runnable() {
-            public void run() {
-                final boolean storageOK = calculatePicturesRemaining() > 0;
-                if (!storageOK) {
-                    mHandler.post(new Runnable() {
-                        public void run() {
-                            updateStorageHint(mPicturesRemaining);
-                        }
-                    });
-                }
-            }
-        });
-        t.start();
     }
 
+    private void checkStorage() {
+        calculatePicturesRemaining();
+        if (ImageManager.isMediaScannerScanning(getContentResolver())) {
+            mPicturesRemaining = MenuHelper.NO_STORAGE_ERROR;
+        }
+        if (mPicturesRemaining < 0) {
+            updateStorageHint(mPicturesRemaining);
+        }
+      }
+
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.btn_retake:
@@ -960,7 +960,8 @@ public class Camera extends Activity implements View.OnClickListener,
 
         if (remaining == MenuHelper.NO_STORAGE_ERROR) {
             String state = Environment.getExternalStorageState();
-            if (state == Environment.MEDIA_CHECKING) {
+            if (state == Environment.MEDIA_CHECKING ||
+                    ImageManager.isMediaScannerScanning(getContentResolver())) {
                 noStorageText = getString(R.string.preparing_sd);
             } else {
                 noStorageText = getString(R.string.no_storage);