CameraActivity.java revision d3a252bb71d119cbaeff55aeaa27dd1f8adadba2
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
118d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
119d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void onConfigurationChanged(Configuration config) {
120d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onConfigurationChanged(config);
121d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onConfigurationChanged(config);
122d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
123d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
124d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
125d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void onPause() {
126d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mPaused = true;
127d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onPauseBeforeSuper();
128d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onPause();
129d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onPauseAfterSuper();
130d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
131d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
132d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
133d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void onResume() {
134d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mPaused = false;
135d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onResumeBeforeSuper();
136d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onResume();
137d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onResumeAfterSuper();
138d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
139d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
140d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
141d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected void onFullScreenChanged(boolean full) {
142d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onFullScreenChanged(full);
143d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onFullScreenChanged(full);
144d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
145d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
146d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
147d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected void onStop() {
148d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onStop();
149d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onStop();
150d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
151d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
152d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
153d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected void onNewIntent(Intent intent) {
154d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onNewIntent(intent);
155d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        getStateManager().clearActivityResult();
156d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
157d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
158d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
159d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected void installIntentFilter() {
160d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.installIntentFilter();
161d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.installIntentFilter();
162d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
163d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
164d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
165d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected void onActivityResult(
166d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb            int requestCode, int resultCode, Intent data) {
167d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onActivityResult(requestCode, resultCode, data);
168d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onActivityResult(requestCode, resultCode, data);
169d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
170d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
171d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    // Preview area is touched. Handle touch focus.
172d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
173d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected void onSingleTapUp(View view, int x, int y) {
174d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onSingleTapUp(view, x, y);
175d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
176d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
177d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
178d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void onBackPressed() {
179d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        if (!mCurrentModule.onBackPressed()) {
180d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb            super.onBackPressed();
181d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        }
182d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
183d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
184d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
185d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public boolean onKeyDown(int keyCode, KeyEvent event) {
186d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        return mCurrentModule.onKeyDown(keyCode,  event)
187d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb                || super.onKeyDown(keyCode, event);
188d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
189d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
190d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
191d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public boolean onKeyUp(int keyCode, KeyEvent event) {
192d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        return mCurrentModule.onKeyUp(keyCode,  event)
193d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb                || super.onKeyUp(keyCode, event);
194d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
195d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
196d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
197d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public boolean dispatchTouchEvent(MotionEvent m) {
198d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        return mCurrentModule.dispatchTouchEvent(m)
199d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb                || super.dispatchTouchEvent(m);
200d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
201d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
202d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    // Preview texture has been copied. Now camera can be released and the
203d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    // animation can be started.
204d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
205d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void onPreviewTextureCopied() {
206d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onPreviewTextureCopied();
207d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
208d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
209d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
210d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void onUserInteraction() {
211d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.onUserInteraction();
212d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.onUserInteraction();
213d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
214d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
215d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
216d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    protected boolean updateStorageHintOnResume() {
217d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        return mCurrentModule.updateStorageHintOnResume();
218d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
219d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
220d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    @Override
221d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    public void updateCameraAppView() {
222d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        super.updateCameraAppView();
223d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb        mCurrentModule.updateCameraAppView();
224d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb    }
225d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb
226d3a252bb71d119cbaeff55aeaa27dd1f8adadba2Michael Kolb}
227