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