IndicatorIconController.java revision a1fab413bcbe5f62ae1d829bac0539519fef96a6
1e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren/*
2e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Copyright (C) 2014 The Android Open Source Project
3e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren *
4e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License");
5e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * you may not use this file except in compliance with the License.
6e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * You may obtain a copy of the License at
7e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren *
8e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren *      http://www.apache.org/licenses/LICENSE-2.0
9e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren *
10e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Unless required by applicable law or agreed to in writing, software
11e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS,
12e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * See the License for the specific language governing permissions and
14e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * limitations under the License.
15e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */
16e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
17e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenpackage com.android.camera.widget;
18e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
19e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.content.Context;
20e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.content.res.TypedArray;
21e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.graphics.drawable.Drawable;
22e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.util.AttributeSet;
23e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.util.Log;
24e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.view.View;
25e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.view.ViewGroup;
26e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.widget.ImageView;
27e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
28e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.ButtonManager;
29e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.app.AppController;
30e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.module.ModulesInfo;
31e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.settings.SettingsManager;
32e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
33e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera2.R;
34e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
35e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren/**
36e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * IndicatorIconController sets the visibility and icon state of
37e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * on screen indicators.
38e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren *
39e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Indicators are only visible if they are in a non-default state.  The
40e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * visibility of an indicator is set when an indicator's setting changes.
41e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */
42e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenpublic class IndicatorIconController
43e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    implements SettingsManager.OnSettingChangedListener,
44e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren               ButtonManager.ButtonStatusListener {
45e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
46e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private final static String TAG = "IndicatorIconController";
47e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
48e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private ImageView mFlashIndicator;
49e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private ImageView mHdrIndicator;
50a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    private ImageView mRefocusIndicator;
51a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren    private ImageView mPanoramaIndicator;
52e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
53e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private TypedArray mFlashIndicatorPhotoIcons;
54e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private TypedArray mFlashIndicatorVideoIcons;
55e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private TypedArray mHdrIndicatorIcons;
56a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    private TypedArray mRefocusIndicatorIcons;
57a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren    private TypedArray mPanoramaIndicatorIcons;
58e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
59e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private AppController mController;
60e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
61e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    public IndicatorIconController(AppController controller, View root) {
62e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        mController = controller;
63e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        Context context = controller.getAndroidContext();
64e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
65e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        mFlashIndicator = (ImageView) root.findViewById(R.id.flash_indicator);
66e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        mHdrIndicator = (ImageView) root.findViewById(R.id.hdr_indicator);
67a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        mRefocusIndicator = (ImageView) root.findViewById(R.id.refocus_indicator);
68a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        mPanoramaIndicator = (ImageView) root.findViewById(R.id.panorama_indicator);
69e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
70e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        mFlashIndicatorPhotoIcons = context.getResources().obtainTypedArray(
71e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            R.array.camera_flashmode_indicator_icons);
72e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        mFlashIndicatorVideoIcons = context.getResources().obtainTypedArray(
73e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            R.array.video_flashmode_indicator_icons);
74e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        mHdrIndicatorIcons = context.getResources().obtainTypedArray(
75e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            R.array.pref_camera_hdr_plus_indicator_icons);
76a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        mRefocusIndicatorIcons = context.getResources().obtainTypedArray(
77a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            R.array.refocus_indicator_icons);
78a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        mPanoramaIndicatorIcons = context.getResources().obtainTypedArray(
79a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            R.array.panorama_indicator_icons);
80e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
81e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
82e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    @Override
83e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId) {
84e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        syncIndicatorWithButton(buttonId);
85e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
86e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
87e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    @Override
88e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId) {
89e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        syncIndicatorWithButton(buttonId);
90e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
91e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
92e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    /**
93e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * Syncs a specific indicator's icon and visibility
94e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * based on the enabled state and visibility of a button.
95e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     */
96e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private void syncIndicatorWithButton(int buttonId) {
97e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        switch (buttonId) {
98a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            case ButtonManager.BUTTON_FLASH: {
99a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                syncFlashIndicator();
100a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                break;
101e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
102a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            case ButtonManager.BUTTON_TORCH: {
103a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                syncFlashIndicator();
104a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                break;
105e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
106a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            case ButtonManager.BUTTON_HDRPLUS: {
107a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                syncHdrIndicator();
108a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                break;
109a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            }
110a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            case ButtonManager.BUTTON_REFOCUS: {
111a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                syncRefocusIndicator();
112a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                break;
113e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
114a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            case ButtonManager.BUTTON_PANO_HORIZONTAL: {
115a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncPanoramaIndicator();
116a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                break;
117a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            }
118a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            case ButtonManager.BUTTON_PANO_VERTICAL: {
119a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncPanoramaIndicator();
120a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                break;
121a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            }
122a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            default:
123a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                // Do nothing.  The indicator doesn't care
124a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                // about button that don't correspond to indicators.
125e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
126e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
127e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
128e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    /**
129e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * Sets all indicators to the correct resource and visibility
130e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * based on the current settings.
131e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     */
132a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    public void syncIndicators() {
133a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        syncFlashIndicator();
134a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        syncHdrIndicator();
135a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        syncRefocusIndicator();
136a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        syncPanoramaIndicator();
137e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
138e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
139e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    /**
140e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * Sync the icon and visibility of the flash indicator.
141e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     */
142a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    private void syncFlashIndicator() {
143a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        ButtonManager buttonManager = mController.getButtonManager();
144e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        // If flash isn't an enabled and visible option,
145e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        // do not show the indicator.
146e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        if (buttonManager.isEnabled(ButtonManager.BUTTON_FLASH)
147e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                && buttonManager.isVisible(ButtonManager.BUTTON_FLASH)) {
148e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
149a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            int modeIndex = mController.getCurrentModuleIndex();
150a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            if (modeIndex == mController.getAndroidContext().getResources()
151bd1b8f910d6f2c94daac304f4bd1a098939474c3Doris Liu                    .getInteger(R.integer.camera_mode_video)) {
152a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                setIndicatorState(mController.getSettingsManager(),
153e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                                  SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE,
154a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                                  mFlashIndicator, mFlashIndicatorVideoIcons, false);
155e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            } else {
156a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                setIndicatorState(mController.getSettingsManager(),
157e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                                  SettingsManager.SETTING_FLASH_MODE,
158a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                                  mFlashIndicator, mFlashIndicatorPhotoIcons, false);
159e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
160e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        } else {
161e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            mFlashIndicator.setVisibility(View.GONE);
162e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
163e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
164e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
165e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    /**
166e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * Sync the icon and the visibility of the hdr indicator.
167e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     */
168a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    private void syncHdrIndicator() {
169a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        ButtonManager buttonManager = mController.getButtonManager();
170e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        // If hdr isn't an enabled and visible option,
171e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        // do not show the indicator.
172e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        if (buttonManager.isEnabled(ButtonManager.BUTTON_HDRPLUS)
173e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                && buttonManager.isVisible(ButtonManager.BUTTON_HDRPLUS)) {
174a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            setIndicatorState(mController.getSettingsManager(),
175e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                              SettingsManager.SETTING_CAMERA_HDR,
176a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                              mHdrIndicator, mHdrIndicatorIcons, false);
177e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        } else {
178e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            mHdrIndicator.setVisibility(View.GONE);
179e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
180e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
181e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
182e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    /**
183a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren     * Sync the icon and the visibility of the refocus indicator.
184a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren     */
185a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    private void syncRefocusIndicator() {
186a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        ButtonManager buttonManager = mController.getButtonManager();
187a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        // If refocus isn't an enabled and visible option,
188a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        // do not show the indicator.
189a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        if (buttonManager.isEnabled(ButtonManager.BUTTON_REFOCUS)
190a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                && buttonManager.isVisible(ButtonManager.BUTTON_REFOCUS)) {
191a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            setIndicatorState(mController.getSettingsManager(),
192a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren                              SettingsManager.SETTING_CAMERA_REFOCUS,
193a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                              mRefocusIndicator, mRefocusIndicatorIcons, false);
194a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        } else {
195a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren            mRefocusIndicator.setVisibility(View.GONE);
196a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren        }
197a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    }
198a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren
199a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren    /**
200a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren     * Sync the icon and the visibility of the panorama indicator.
201a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren     */
202a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren    private void syncPanoramaIndicator() {
203a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        ButtonManager buttonManager = mController.getButtonManager();
204a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        // If refocus isn't an enabled and visible option,
205a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        // do not show the indicator.
206a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        boolean panoEnabled = (buttonManager.isEnabled(ButtonManager.BUTTON_PANO_HORIZONTAL)
207a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            && buttonManager.isEnabled(ButtonManager.BUTTON_PANO_VERTICAL));
208a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        boolean panoVisible = (buttonManager.isVisible(ButtonManager.BUTTON_PANO_HORIZONTAL)
209a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            && buttonManager.isVisible(ButtonManager.BUTTON_PANO_VERTICAL));
210a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        if (panoEnabled && panoVisible) {
211a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            setIndicatorState(mController.getSettingsManager(),
212a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                              SettingsManager.SETTING_CAMERA_PANO_ORIENTATION,
213a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                              mPanoramaIndicator, mPanoramaIndicatorIcons, true);
214a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        } else {
215a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            mPanoramaIndicator.setVisibility(View.GONE);
216a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        }
217a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren    }
218a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren
219a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren    /**
220e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * Sets the image resource and visibility of the indicator
221e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     * based on the indicator's corresponding setting state.
222e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren     */
223e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    private void setIndicatorState(SettingsManager settingsManager, int id,
224a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            ImageView imageView, TypedArray iconArray, boolean showDefault) {
225e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
226e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        // Set the correct image src.
227e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        String value = settingsManager.get(id);
228e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        int valueIndex = settingsManager.getStringValueIndex(id);
229e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        if (valueIndex < 0) {
230e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            // This can happen when the setting is camera dependent
231e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            // and the camera is not yet open.  CameraAppUI.onChangeCamera()
232e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            // will call this again when the camera is open.
233e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            Log.w(TAG, "The setting for this indicator is not available.");
234e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            imageView.setVisibility(View.GONE);
235e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            return;
236e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
237e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        Drawable drawable = iconArray.getDrawable(valueIndex);
238e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        if (drawable == null) {
239e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            throw new IllegalStateException("Indicator drawable is null.");
240e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
241e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        imageView.setImageDrawable(drawable);
242e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
243e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        // Set the indicator visible if not in default state.
244a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren        if (!showDefault && settingsManager.isDefault(id)) {
245e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            imageView.setVisibility(View.GONE);
246e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        } else {
247e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            imageView.setVisibility(View.VISIBLE);
248e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
249e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
250e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren
251e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    @Override
252e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    public void onSettingChanged(SettingsManager settingsManager, int id) {
253e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        switch (id) {
254e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            case SettingsManager.SETTING_FLASH_MODE: {
255a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncFlashIndicator();
256e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                break;
257e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
258e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            case SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE: {
259a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncFlashIndicator();
260e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                break;
261e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
262e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            case SettingsManager.SETTING_CAMERA_HDR: {
263a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncHdrIndicator();
264a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                break;
265a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            }
266a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            case SettingsManager.SETTING_CAMERA_REFOCUS: {
267a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncRefocusIndicator();
268a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                break;
269a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            }
270a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren            case SettingsManager.SETTING_CAMERA_PANO_ORIENTATION: {
271a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren                syncPanoramaIndicator();
272e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                break;
273e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
274e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            default: {
275e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren                // Do nothing.
276e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren            }
277e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren        }
278e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren    }
279e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren}
280