CameraActivity.java revision b19c713286b7beed376ec6c4390e7272a80aa5b9
1d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb/* 2d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * Copyright (C) 2012 The Android Open Source Project 3d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * 4d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); 5d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * you may not use this file except in compliance with the License. 6d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * You may obtain a copy of the License at 7d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * 8d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 9d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * 10d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * Unless required by applicable law or agreed to in writing, software 11d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, 12d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * See the License for the specific language governing permissions and 14d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb * limitations under the License. 15d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb */ 16d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 17d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbpackage com.android.camera; 18d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 19d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.content.Intent; 20d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.content.res.Configuration; 21d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.graphics.drawable.Drawable; 22d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.os.Bundle; 23d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.util.Log; 24d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.view.KeyEvent; 25d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.view.MotionEvent; 26d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.view.View; 27d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.view.ViewGroup.LayoutParams; 28d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.widget.FrameLayout; 29d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport android.widget.ImageView; 30d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 31d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbimport com.android.camera.ui.CameraSwitcher; 32d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 33d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolbpublic class CameraActivity extends ActivityBase 34d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb implements CameraSwitcher.CameraSwitchListener { 35d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 36d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb CameraModule mCurrentModule; 37d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private FrameLayout mFrame; 38d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private ShutterButton mShutter; 39d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private CameraSwitcher mSwitcher; 40d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private Drawable[] mDrawables; 41d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private int mSelectedModule; 42d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 43d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private static final String TAG = "CAM_activity"; 44d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 45d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private static final int[] DRAW_IDS = { 46d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb R.drawable.ic_switch_video_holo_light, 47d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb R.drawable.ic_switch_camera_holo_light, 48d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb R.drawable.ic_switch_pan_holo_light 49d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb }; 50d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 51d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onCreate(Bundle state) { 52d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onCreate(state); 53d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb setContentView(R.layout.camera_main); 54d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mFrame =(FrameLayout) findViewById(R.id.main_content); 55d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mShutter = (ShutterButton) findViewById(R.id.shutter_button); 56d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mSwitcher = (CameraSwitcher) findViewById(R.id.camera_switcher); 57d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mDrawables = new Drawable[DRAW_IDS.length]; 58d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb for (int i = 0; i < DRAW_IDS.length; i++) { 59d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb Drawable d = getResources().getDrawable(DRAW_IDS[i]); 60d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mDrawables[i] = d; 61d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 62d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb for (int i = 0; i < mDrawables.length; i++) { 63d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb ImageView iv = new ImageView(this); 64d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb iv.setImageDrawable(mDrawables[i]); 65d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mSwitcher.add(iv, new LayoutParams(LayoutParams.WRAP_CONTENT, 66d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb LayoutParams.WRAP_CONTENT)); 67d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 68d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 69d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mSwitcher.setSwitchListener(this); 70d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule = new PhotoModule(); 71d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.init(this, mFrame); 72d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mSelectedModule = 1; 73d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mSwitcher.setCurrentModule(mSelectedModule); 74d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 75d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 76d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 77d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onScroll() { 78d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 79d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 80d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 81d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onCameraSelected(int i) { 82d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb if (i != mSelectedModule) { 83d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mPaused = true; 84d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb closeModule(mCurrentModule); 85d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mSelectedModule = i; 86d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb switch (i) { 87d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb case 0: 88d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule = new VideoModule(); 89d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb break; 90d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb case 1: 91d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule = new PhotoModule(); 92d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb break; 93d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb case 2: 94d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule = new VideoModule(); 95d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb break; 96d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 97d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb openModule(mCurrentModule); 98d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 99d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 100d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 101d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private void openModule(CameraModule module) { 102d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb module.init(this, mFrame); 103d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mPaused = false; 104d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb module.onResumeBeforeSuper(); 105d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb module.onResumeAfterSuper(); 106d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 107d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 108d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb private void closeModule(CameraModule module) { 109d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb module.onPauseBeforeSuper(); 110d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb module.onPauseAfterSuper(); 111d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mFrame.removeAllViews(); 112d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 113d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 114d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public ShutterButton getShutterButton() { 115d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb return mShutter; 116d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 117d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 118b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb public void hideUI() { 119b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb mSwitcher.setVisibility(View.INVISIBLE); 120b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb mShutter.setVisibility(View.INVISIBLE); 121b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb } 122b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb 123b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb public void showUI() { 124b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb mSwitcher.setVisibility(View.VISIBLE); 125b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb mShutter.setVisibility(View.VISIBLE); 126b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb } 127b19c713286b7beed376ec6c4390e7272a80aa5b9Michael Kolb 128d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 129d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onConfigurationChanged(Configuration config) { 130d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onConfigurationChanged(config); 131d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onConfigurationChanged(config); 132d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 133d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 134d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 135d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onPause() { 136d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mPaused = true; 137d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onPauseBeforeSuper(); 138d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onPause(); 139d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onPauseAfterSuper(); 140d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 141d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 142d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 143d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onResume() { 144d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mPaused = false; 145d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onResumeBeforeSuper(); 146d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onResume(); 147d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onResumeAfterSuper(); 148d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 149d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 150d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 151d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected void onFullScreenChanged(boolean full) { 152d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onFullScreenChanged(full); 153d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onFullScreenChanged(full); 154d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 155d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 156d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 157d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected void onStop() { 158d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onStop(); 159d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onStop(); 160d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 161d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 162d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 163d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected void onNewIntent(Intent intent) { 164d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onNewIntent(intent); 165d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb getStateManager().clearActivityResult(); 166d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 167d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 168d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 169d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected void installIntentFilter() { 170d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.installIntentFilter(); 171d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.installIntentFilter(); 172d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 173d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 174d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 175d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected void onActivityResult( 176d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb int requestCode, int resultCode, Intent data) { 177d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onActivityResult(requestCode, resultCode, data); 178d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onActivityResult(requestCode, resultCode, data); 179d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 180d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 181d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb // Preview area is touched. Handle touch focus. 182d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 183d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected void onSingleTapUp(View view, int x, int y) { 184d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onSingleTapUp(view, x, y); 185d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 186d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 187d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 188d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onBackPressed() { 189d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb if (!mCurrentModule.onBackPressed()) { 190d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onBackPressed(); 191d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 192d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 193d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 194d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 195d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public boolean onKeyDown(int keyCode, KeyEvent event) { 196d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb return mCurrentModule.onKeyDown(keyCode, event) 197d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb || super.onKeyDown(keyCode, event); 198d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 199d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 200d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 201d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public boolean onKeyUp(int keyCode, KeyEvent event) { 202d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb return mCurrentModule.onKeyUp(keyCode, event) 203d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb || super.onKeyUp(keyCode, event); 204d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 205d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 206d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 207d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public boolean dispatchTouchEvent(MotionEvent m) { 208d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb return mCurrentModule.dispatchTouchEvent(m) 209d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb || super.dispatchTouchEvent(m); 210d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 211d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 212d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb // Preview texture has been copied. Now camera can be released and the 213d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb // animation can be started. 214d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 215d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onPreviewTextureCopied() { 216d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onPreviewTextureCopied(); 217d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 218d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 219d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 220d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void onUserInteraction() { 221d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.onUserInteraction(); 222d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.onUserInteraction(); 223d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 224d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 225d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 226d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb protected boolean updateStorageHintOnResume() { 227d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb return mCurrentModule.updateStorageHintOnResume(); 228d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 229d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 230d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb @Override 231d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb public void updateCameraAppView() { 232d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb super.updateCameraAppView(); 233d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb mCurrentModule.updateCameraAppView(); 234d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb } 235d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb 236d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb} 237