diff options
Diffstat (limited to 'src/com/android/camera/CameraActivity.java')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 139 |
1 files changed, 99 insertions, 40 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 4e58afae4..3d630ecad 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -17,12 +17,9 @@ package com.android.camera; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.Display; -import android.graphics.Point; import android.Manifest; import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; @@ -35,7 +32,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.SharedPreferences; -import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.database.Cursor; @@ -44,18 +40,18 @@ import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.BitmapShader; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; -import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; -import android.graphics.Point; -import android.net.Uri; import android.media.ThumbnailUtils; +import android.net.Uri; import android.nfc.NfcAdapter; import android.nfc.NfcAdapter.CreateBeamUrisCallback; import android.nfc.NfcEvent; @@ -72,6 +68,7 @@ import android.os.SystemProperties; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.util.Log; +import android.view.Display; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; @@ -80,6 +77,7 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.OrientationEventListener; import android.view.View; +import android.view.ViewAnimationUtils; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; @@ -89,8 +87,8 @@ import android.widget.ProgressBar; import android.widget.ShareActionProvider; import com.android.camera.app.AppManagerFactory; -import com.android.camera.app.PlaceholderManager; import com.android.camera.app.PanoramaStitchingManager; +import com.android.camera.app.PlaceholderManager; import com.android.camera.crop.CropActivity; import com.android.camera.data.CameraDataAdapter; import com.android.camera.data.CameraPreviewData; @@ -104,24 +102,24 @@ import com.android.camera.data.MediaDetails; import com.android.camera.data.SimpleViewData; import com.android.camera.exif.ExifInterface; import com.android.camera.tinyplanet.TinyPlanetFragment; -import com.android.camera.ui.ModuleSwitcher; import com.android.camera.ui.DetailsDialog; import com.android.camera.ui.FilmStripView; import com.android.camera.ui.FilmStripView.ImageData; +import com.android.camera.ui.ModuleSwitcher; import com.android.camera.util.ApiHelper; import com.android.camera.util.CameraUtil; import com.android.camera.util.GcamHelper; import com.android.camera.util.IntentHelper; -import com.android.camera.util.PhotoSphereHelper; import com.android.camera.util.PhotoSphereHelper.PanoramaViewHelper; import com.android.camera.util.UsageStatistics; -import org.codeaurora.snapcam.R; import com.bumptech.glide.Glide; import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.MemoryCategory; import com.bumptech.glide.load.DecodeFormat; import com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor; +import org.codeaurora.snapcam.R; + import java.io.File; import java.io.IOException; @@ -197,7 +195,7 @@ public class CameraActivity extends Activity private PanoramaStitchingManager mPanoramaManager; private PlaceholderManager mPlaceholderManager; - private int mCurrentModuleIndex; + private int mCurrentModuleIndex = -1; private CameraModule mCurrentModule; private PhotoModule mPhotoModule; private VideoModule mVideoModule; @@ -2053,7 +2051,7 @@ public class CameraActivity extends Activity } @Override - public void onModuleSelected(int moduleIndex) { + public void onModuleSelected(int moduleIndex, final Point hotspot) { boolean cam2on = mSettingsManager.isCamera2On(); mForceReleaseCamera = moduleIndex == ModuleSwitcher.CAPTURE_MODULE_INDEX || (cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX); @@ -2065,21 +2063,65 @@ public class CameraActivity extends Activity return; } } + + final int index = moduleIndex; + final View currentView = getModuleRootView(mCurrentModuleIndex); + + final int cx; + final int cy; + final int radius; + + if (hotspot == null) { + cx = currentView.getMeasuredWidth() / 2; + cy = currentView.getMeasuredHeight() / 2; + radius = Math.max(currentView.getWidth(), currentView.getHeight()); + } else { + cx = hotspot.x; + cy = hotspot.y; + radius = Math.max(cx, cy); + } + + Animator anim = ViewAnimationUtils.createCircularReveal(currentView, cx, cy, radius, 0); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + closeModule(mCurrentModule); + currentView.setVisibility(View.GONE); + selectModuleWithReveal(index, hotspot); + } + }); + CameraHolder.instance().keep(); - closeModule(mCurrentModule); - setModuleFromIndex(moduleIndex); + getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.camera_controls_bg_opaque)); + + anim.start(); + } + + private void selectModuleWithReveal(final int moduleIndex, Point hotspot) { + final View selectedView = selectModule(moduleIndex); openModule(mCurrentModule); - mForceReleaseCamera = false; - mCurrentModule.onOrientationChanged(mLastRawOrientation); - if (mMediaSaveService != null) { - mCurrentModule.onMediaSaveServiceConnected(mMediaSaveService); - } - // Store the module index so we can use it the next time the Camera - // starts up. - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - prefs.edit().putInt(CameraSettings.KEY_STARTUP_MODULE_INDEX, moduleIndex).apply(); + final int cx; + final int cy; + final int radius; + if (hotspot == null) { + cx = selectedView.getMeasuredWidth() / 2; + cy = selectedView.getMeasuredHeight() / 2; + radius = Math.max(selectedView.getWidth(), selectedView.getHeight()) / 2; + } else { + cx = hotspot.x; + cy = hotspot.y; + radius = Math.max(cx, cy); + } + Animator anim = ViewAnimationUtils.createCircularReveal(selectedView, cx, cy, 0, radius); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + getWindow().getDecorView().setBackgroundColor(Color.BLACK); + } + }); + anim.start(); } private void calculateDisplayWidth() { @@ -2092,15 +2134,31 @@ public class CameraActivity extends Activity * Sets the mCurrentModuleIndex, creates a new module instance for the given * index an sets it as mCurrentModule. */ - private void setModuleFromIndex(int moduleIndex) { - mCameraPhotoModuleRootView.setVisibility(View.GONE); - mCameraVideoModuleRootView.setVisibility(View.GONE); - mCameraPanoModuleRootView.setVisibility(View.GONE); - mCameraCaptureModuleRootView.setVisibility(View.GONE); + private void setModuleFromIndex(final int moduleIndex) { + selectModule(moduleIndex); + } + + private View getModuleRootView(int moduleIndex) { + final View v; + if (mCurrentModuleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX) { + v = mCameraPhotoModuleRootView; + } else if (mCurrentModuleIndex == ModuleSwitcher.VIDEO_MODULE_INDEX) { + v = mCameraVideoModuleRootView; + } else if (mCurrentModuleIndex == ModuleSwitcher.WIDE_ANGLE_PANO_MODULE_INDEX) { + v = mCameraPanoModuleRootView; + } else if (mCurrentModuleIndex == ModuleSwitcher.CAPTURE_MODULE_INDEX) { + v = mCameraCaptureModuleRootView; + } else { + v = mCameraPhotoModuleRootView; + } + return v; + } + + private View selectModule(int moduleIndex) { mCurrentModuleIndex = moduleIndex; switch (moduleIndex) { case ModuleSwitcher.VIDEO_MODULE_INDEX: - if(mVideoModule == null) { + if (mVideoModule == null) { mVideoModule = new VideoModule(); mVideoModule.init(this, mCameraVideoModuleRootView); } else { @@ -2108,10 +2166,10 @@ public class CameraActivity extends Activity } mCurrentModule = mVideoModule; mCameraVideoModuleRootView.setVisibility(View.VISIBLE); - break; + return mCameraVideoModuleRootView; case ModuleSwitcher.PHOTO_MODULE_INDEX: - if(mPhotoModule == null) { + if (mPhotoModule == null) { mPhotoModule = new PhotoModule(); mPhotoModule.init(this, mCameraPhotoModuleRootView); } else { @@ -2119,19 +2177,19 @@ public class CameraActivity extends Activity } mCurrentModule = mPhotoModule; mCameraPhotoModuleRootView.setVisibility(View.VISIBLE); - break; + return mCameraPhotoModuleRootView; case ModuleSwitcher.WIDE_ANGLE_PANO_MODULE_INDEX: - if(mPanoModule == null) { + if (mPanoModule == null) { mPanoModule = new WideAnglePanoramaModule(); mPanoModule.init(this, mCameraPanoModuleRootView); } mCurrentModule = mPanoModule; mCameraPanoModuleRootView.setVisibility(View.VISIBLE); - break; + return mCameraPanoModuleRootView; case ModuleSwitcher.CAPTURE_MODULE_INDEX: - if(mCaptureModule == null) { + if (mCaptureModule == null) { mCaptureModule = new CaptureModule(); mCaptureModule.init(this, mCameraCaptureModuleRootView); } else { @@ -2139,12 +2197,13 @@ public class CameraActivity extends Activity } mCurrentModule = mCaptureModule; mCameraCaptureModuleRootView.setVisibility(View.VISIBLE); - break; + return mCameraCaptureModuleRootView; + case ModuleSwitcher.LIGHTCYCLE_MODULE_INDEX: //Unused module for now case ModuleSwitcher.GCAM_MODULE_INDEX: //Unused module for now default: // Fall back to photo mode. - if(mPhotoModule == null) { + if (mPhotoModule == null) { mPhotoModule = new PhotoModule(); mPhotoModule.init(this, mCameraPhotoModuleRootView); } else { @@ -2152,7 +2211,7 @@ public class CameraActivity extends Activity } mCurrentModule = mPhotoModule; mCameraPhotoModuleRootView.setVisibility(View.VISIBLE); - break; + return mCameraPhotoModuleRootView; } } |