From b6b60bf6cf88015956a7651f7249cf2781fc9d1d Mon Sep 17 00:00:00 2001 From: Byunghun Jeon Date: Wed, 5 Nov 2014 16:21:23 -0800 Subject: SnapdragonCamera: Add back missing setting menus Adding back missing setting menus Change-Id: I803d3f694b1953aa6a8932cbba6bb55c0d0e6352 --- src/com/android/camera/CustomPhotoMenu.java | 1009 ---------------------- src/com/android/camera/CustomVideoMenu.java | 689 ---------------- src/com/android/camera/PhotoMenu.java | 1147 ++++++++++++++++++++------ src/com/android/camera/PhotoModule.java | 7 +- src/com/android/camera/PhotoUI.java | 55 +- src/com/android/camera/PreviewGestures.java | 60 +- src/com/android/camera/VideoMenu.java | 684 ++++++++++++--- src/com/android/camera/VideoUI.java | 51 +- src/com/android/camera/ui/FaceView.java | 4 +- src/com/android/camera/ui/FilmStripView.java | 12 +- src/com/android/camera/ui/ListMenu.java | 8 +- 11 files changed, 1536 insertions(+), 2190 deletions(-) delete mode 100644 src/com/android/camera/CustomPhotoMenu.java delete mode 100644 src/com/android/camera/CustomVideoMenu.java diff --git a/src/com/android/camera/CustomPhotoMenu.java b/src/com/android/camera/CustomPhotoMenu.java deleted file mode 100644 index 551412a27..000000000 --- a/src/com/android/camera/CustomPhotoMenu.java +++ /dev/null @@ -1,1009 +0,0 @@ -/* - * Copyright (c) 2014, The Linux Foundation. All rights reserved. - * Not a Contribution. - * - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.camera; - -import java.util.Locale; - -import android.animation.Animator; -import android.animation.Animator.AnimatorListener; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.Resources; -import android.hardware.Camera.Parameters; -import android.graphics.Rect; -import android.preference.PreferenceManager; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewPropertyAnimator; -import android.widget.ListView; -import android.widget.Toast; -import android.widget.TextView; -import android.widget.GridView; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.FrameLayout; -import android.widget.FrameLayout.LayoutParams; - -import com.android.camera.CameraPreference.OnPreferenceChangedListener; -import com.android.camera.ui.CameraControls; -import com.android.camera.ui.CountdownTimerPopup; -import com.android.camera.ui.ListSubMenu; -import com.android.camera.ui.PieItem; -import com.android.camera.ui.ListMenu; -import com.android.camera.ui.RotateImageView; -import org.codeaurora.snapcam.R; -import android.widget.HorizontalScrollView; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.view.Display; -import com.android.camera.util.CameraUtil; - -public class CustomPhotoMenu extends MenuController - implements ListMenu.Listener, - CountdownTimerPopup.Listener, - ListSubMenu.Listener { - private static String TAG = "CustomPhotoMenu"; - - private final String mSettingOff; - - private String[] mOtherKeys1; - private String[] mOtherKeys2; - private ListMenu mListMenu; - private View mPreviewMenu; - private static final int POPUP_NONE = 0; - private static final int POPUP_FIRST_LEVEL = 1; - private static final int POPUP_SECOND_LEVEL = 2; - private static final int POPUP_IN_ANIMATION = 3; - private static final int PREVIEW_MENU_NONE = 0; - private static final int PREVIEW_MENU_IN_ANIMATION = 1; - private static final int PREVIEW_MENU_ON = 2; - private static final int MODE_SCENE = 0; - private static final int MODE_FILTER = 1; - private static final int DEVELOPER_MENU_TOUCH_COUNT = 10; - private int mSceneStatus; - private View mHdrSwitcher; - private View mFrontBackSwitcher; - private View mSceneModeSwitcher; - private View mFilterModeSwitcher; - private PhotoUI mUI; - private int mPopupStatus; - private int mPreviewMenuStatus; - private ListSubMenu mListSubMenu; - private CameraActivity mActivity; - private boolean mHdrOn = false; - private int privateCounter = 0; - private static final int ANIMATION_DURATION = 300; - private static final int CLICK_THRESHOLD = 200; - private int previewMenuSize; - - public CustomPhotoMenu(CameraActivity activity, PhotoUI ui) { - super(activity); - mUI = ui; - mSettingOff = activity.getString(R.string.setting_off_value); - mActivity = activity; - mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher); - mHdrSwitcher = ui.getRootView().findViewById(R.id.hdr_switcher); - mSceneModeSwitcher = ui.getRootView().findViewById(R.id.scene_mode_switcher); - mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher); - } - - public void initialize(PreferenceGroup group) { - super.initialize(group); - mListSubMenu = null; - mListMenu = null; - mPopupStatus = POPUP_NONE; - mPreviewMenuStatus = POPUP_NONE; - final Resources res = mActivity.getResources(); - Locale locale = res.getConfiguration().locale; - // The order is from left to right in the menu. - - initSceneModeButton(mSceneModeSwitcher); - initFilterModeButton(mFilterModeSwitcher); - mHdrSwitcher.setVisibility(View.INVISIBLE); - - mFrontBackSwitcher.setVisibility(View.INVISIBLE); - // HDR. - if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) { - mHdrSwitcher.setVisibility(View.VISIBLE); - initSwitchItem(CameraSettings.KEY_CAMERA_HDR, mHdrSwitcher); - } else { - mHdrSwitcher.setVisibility(View.INVISIBLE); - } - - mOtherKeys1 = new String[] { - CameraSettings.KEY_RECORD_LOCATION, - CameraSettings.KEY_PICTURE_SIZE, - CameraSettings.KEY_JPEG_QUALITY, - CameraSettings.KEY_TIMER, - CameraSettings.KEY_CAMERA_SAVEPATH, - CameraSettings.KEY_LONGSHOT, - CameraSettings.KEY_FACE_DETECTION, - CameraSettings.KEY_ISO, - CameraSettings.KEY_EXPOSURE, - CameraSettings.KEY_WHITE_BALANCE, - CameraSettings.KEY_FOCUS_MODE, - CameraSettings.KEY_REDEYE_REDUCTION - }; - - mOtherKeys2 = new String[] { - CameraSettings.KEY_RECORD_LOCATION, - CameraSettings.KEY_PICTURE_SIZE, - CameraSettings.KEY_JPEG_QUALITY, - CameraSettings.KEY_TIMER, - CameraSettings.KEY_CAMERA_SAVEPATH, - CameraSettings.KEY_LONGSHOT, - CameraSettings.KEY_FACE_DETECTION, - CameraSettings.KEY_ISO, - CameraSettings.KEY_EXPOSURE, - CameraSettings.KEY_WHITE_BALANCE, - CameraSettings.KEY_FOCUS_MODE, - CameraSettings.KEY_REDEYE_REDUCTION, - CameraSettings.KEY_HISTOGRAM, - CameraSettings.KEY_ZSL, - CameraSettings.KEY_TIMER_SOUND_EFFECTS, - CameraSettings.KEY_FACE_RECOGNITION, - CameraSettings.KEY_TOUCH_AF_AEC, - CameraSettings.KEY_SELECTABLE_ZONE_AF, - CameraSettings.KEY_PICTURE_FORMAT, - CameraSettings.KEY_SATURATION, - CameraSettings.KEY_CONTRAST, - CameraSettings.KEY_SHARPNESS, - CameraSettings.KEY_AUTOEXPOSURE, - CameraSettings.KEY_ANTIBANDING, - CameraSettings.KEY_DENOISE, - CameraSettings.KEY_ADVANCED_FEATURES, - CameraSettings.KEY_AE_BRACKET_HDR - }; - - initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher); - } - - @Override - // Hit when an item in a popup gets selected - public void onListPrefChanged(ListPreference pref) { - animateFadeOut(mListSubMenu, 2); - onSettingChanged(pref); - ((ListMenu) mListMenu).resetHighlight(); - } - - public boolean handleBackKey() { - if (mPreviewMenuStatus == PREVIEW_MENU_ON) { - animateSlideOut(mPreviewMenu); - return true; - } - if (mPopupStatus == POPUP_NONE) - return false; - if (mPopupStatus == POPUP_FIRST_LEVEL) { - animateSlideOut(mListMenu, 1); - } else if (mPopupStatus == POPUP_SECOND_LEVEL) { - animateFadeOut(mListSubMenu, 2); - ((ListMenu) mListMenu).resetHighlight(); - } - return true; - } - - public void closeSceneMode() { - mUI.removeSceneModeMenu(); - } - - public void tryToCloseSubList() { - if (mListMenu != null) - ((ListMenu) mListMenu).resetHighlight(); - - if (mPopupStatus == POPUP_SECOND_LEVEL) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - } - - private void animateFadeOut(final ListView v, final int level) { - if (v == null || mPopupStatus == POPUP_IN_ANIMATION) - return; - mPopupStatus = POPUP_IN_ANIMATION; - - ViewPropertyAnimator vp = v.animate(); - vp.alpha(0f).setDuration(ANIMATION_DURATION); - vp.setListener(new AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - } - - @Override - public void onAnimationCancel(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - - } - }); - vp.start(); - } - - private void animateSlideOut(final ListView v, final int level) { - if (v == null || mPopupStatus == POPUP_IN_ANIMATION) - return; - mPopupStatus = POPUP_IN_ANIMATION; - - ViewPropertyAnimator vp = v.animate(); - vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); - vp.setListener(new AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - } - - @Override - public void onAnimationCancel(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - - } - }); - vp.start(); - } - - public void animateFadeIn(final ListView v) { - ViewPropertyAnimator vp = v.animate(); - vp.alpha(0.85f).setDuration(ANIMATION_DURATION); - vp.start(); - } - - public void animateSlideIn(final View v, int delta, boolean settingMenu) { - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - boolean portrait = (rotation == 0) || (rotation == 180); - if (settingMenu) - portrait = true; - ViewPropertyAnimator vp = v.animate(); - if (portrait) { - float dest = v.getX(); - v.setX(dest - delta); - vp.translationX(dest).setDuration(ANIMATION_DURATION); - } - else { - float dest = v.getY(); - v.setY(dest + delta); - vp.translationY(dest).setDuration(ANIMATION_DURATION); - } - vp.start(); - } - - public void animateSlideOutPreviewMenu() { - if (mPreviewMenu == null) - return; - animateSlideOut(mPreviewMenu); - } - - private void animateSlideOut(final View v) { - if (v == null || mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION) - return; - mPreviewMenuStatus = PREVIEW_MENU_IN_ANIMATION; - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - boolean portrait = (rotation == 0) || (rotation == 180); - ViewPropertyAnimator vp = v.animate(); - if (portrait) { - vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); - - } else { - vp.translationY(v.getY() + v.getHeight()).setDuration(ANIMATION_DURATION); - - } - vp.setListener(new AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - closeSceneMode(); - mPreviewMenuStatus = PREVIEW_MENU_NONE; - } - - @Override - public void onAnimationCancel(Animator animation) { - closeSceneMode(); - mPreviewMenuStatus = PREVIEW_MENU_NONE; - - } - }); - vp.start(); - } - - private void buttonSetEnabled(View v, boolean enable) { - v.setEnabled(enable); - if (v instanceof ViewGroup) { - View v2 = ((ViewGroup) v).getChildAt(0); - if (v2 != null) - v2.setEnabled(enable); - - } - - } - - public boolean isOverMenu(MotionEvent ev) { - if (mPopupStatus == POPUP_NONE || mPopupStatus == POPUP_IN_ANIMATION) - return false; - if (mUI.getMenuLayout() == null) - return false; - Rect rec = new Rect(); - mUI.getMenuLayout().getChildAt(0).getHitRect(rec); - return rec.contains((int) ev.getX(), (int) ev.getY()); - } - - public boolean isOverPreviewMenu(MotionEvent ev) { - if (mPreviewMenuStatus != PREVIEW_MENU_ON) - return false; - if (mUI.getPreviewMenuLayout() == null) - return false; - Rect rec = new Rect(); - mUI.getPreviewMenuLayout().getChildAt(0).getHitRect(rec); - rec.top += (int) mUI.getPreviewMenuLayout().getY(); - rec.bottom += (int) mUI.getPreviewMenuLayout().getY(); - return rec.contains((int) ev.getX(), (int) ev.getY()); - } - - public boolean isMenuBeingShown() { - return mPopupStatus != POPUP_NONE; - } - - public boolean isMenuBeingAnimated() { - return mPopupStatus == POPUP_IN_ANIMATION; - } - - public boolean isPreviewMenuBeingShown() { - return mPreviewMenuStatus == PREVIEW_MENU_ON; - } - - public boolean isPreviewMenuBeingAnimated() { - return mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION; - } - - public boolean sendTouchToPreviewMenu(MotionEvent ev) { - return mUI.sendTouchToPreviewMenu(ev); - } - - public boolean sendTouchToMenu(MotionEvent ev) { - return mUI.sendTouchToMenu(ev); - } - - @Override - public void overrideSettings(final String... keyvalues) { - for (int i = 0; i < keyvalues.length; i += 2) { - if (keyvalues[i].equals(CameraSettings.KEY_SCENE_MODE)) { - buttonSetEnabled(mSceneModeSwitcher, keyvalues[i + 1] == null); - } - } - super.overrideSettings(keyvalues); - if ((mListMenu == null)) - initializePopup(); - mListMenu.overrideSettings(keyvalues); - } - - protected void initializePopup() { - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - ListMenu popup1 = (ListMenu) inflater.inflate( - R.layout.list_menu, null, false); - - popup1.setSettingChangedListener(this); - - String[] keys = mOtherKeys1; - if (mActivity.isDeveloperMenuEnabled()) - keys = mOtherKeys2; - popup1.initialize(mPreferenceGroup, keys); - if (mActivity.isSecureCamera()) { - // Prevent location preference from getting changed in secure camera - // mode - popup1.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION, false); - } - mListMenu = popup1; - - ListPreference pref = mPreferenceGroup.findPreference( - CameraSettings.KEY_SCENE_MODE); - String sceneMode = (pref != null) ? pref.getValue() : null; - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_FACE_DETECTION); - String faceDetection = (pref != null) ? pref.getValue() : null; - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ZSL); - String zsl = (pref != null) ? pref.getValue() : null; - if ((sceneMode != null) && !Parameters.SCENE_MODE_AUTO.equals(sceneMode)) { - popup1.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_AUTOEXPOSURE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_SATURATION, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_CONTRAST, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_SHARPNESS, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_COLOR_EFFECT, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_FLASH_MODE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_WHITE_BALANCE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE, false); - } - if ((zsl != null) && Parameters.ZSL_ON.equals(zsl)) { - popup1.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE, false); - } - if ((faceDetection != null) && !Parameters.FACE_DETECTION_ON.equals(faceDetection)) { - popup1.setPreferenceEnabled(CameraSettings.KEY_FACE_RECOGNITION, false); - } - - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ADVANCED_FEATURES); - String advancedFeatures = (pref != null) ? pref.getValue() : null; - - String ubiFocusOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_ubifocus_on); - String chromaFlashOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_chromaflash_on); - String optiZoomOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_optizoom_on); - - if ((zsl != null) && Parameters.ZSL_OFF.equals(zsl)) { - popup1.overrideSettings(CameraSettings.KEY_ADVANCED_FEATURES, - mActivity.getString(R.string.pref_camera_advanced_feature_default)); - - popup1.setPreferenceEnabled(CameraSettings.KEY_ADVANCED_FEATURES, false); - if (mHdrSwitcher.getVisibility() == View.VISIBLE) { - buttonSetEnabled(mHdrSwitcher, true); - } - } else { - if ((advancedFeatures != null) && (advancedFeatures.equals(ubiFocusOn) || - advancedFeatures.equals(chromaFlashOn) || - advancedFeatures.equals(optiZoomOn))) { - popup1.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_FLASH_MODE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_AE_BRACKET_HDR, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_REDEYE_REDUCTION, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_COLOR_EFFECT, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC, false); - popup1.setPreferenceEnabled(CameraSettings.KEY_SCENE_MODE, false); - - setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff); - if (mHdrSwitcher.getVisibility() == View.VISIBLE) { - buttonSetEnabled(mHdrSwitcher, false); - } - } else { - if (mHdrSwitcher.getVisibility() == View.VISIBLE) { - buttonSetEnabled(mHdrSwitcher, true); - } - } - } - - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_SCENE_MODE); - if (pref != null) { - if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) { - buttonSetEnabled(mFilterModeSwitcher, false); - } else { - buttonSetEnabled(mFilterModeSwitcher, true); - } - } - - if (mListener != null) { - mListener.onSharedPreferenceChanged(); - } - } - - public void initSwitchItem(final String prefKey, View switcher) { - final IconListPreference pref = - (IconListPreference) mPreferenceGroup.findPreference(prefKey); - if (pref == null) - return; - - int[] iconIds = pref.getLargeIconIds(); - int resid = -1; - int index = pref.findIndexOfValue(pref.getValue()); - if (!pref.getUseSingleIcon() && iconIds != null) { - // Each entry has a corresponding icon. - resid = iconIds[index]; - } else { - // The preference only has a single icon to represent it. - resid = pref.getSingleIcon(); - } - ImageView iv = (ImageView) ((FrameLayout) switcher).getChildAt(0); - iv.setImageResource(resid); - switcher.setVisibility(View.VISIBLE); - mPreferences.add(pref); - mPreferenceMap.put(pref, switcher); - switcher.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(prefKey); - if (pref == null) - return; - int index = pref.findIndexOfValue(pref.getValue()); - CharSequence[] values = pref.getEntryValues(); - index = (index + 1) % values.length; - pref.setValueIndex(index); - ImageView iv = (ImageView) ((FrameLayout) v).getChildAt(0); - iv.setImageResource(((IconListPreference) pref).getLargeIconIds()[index]); - if (prefKey.equals(CameraSettings.KEY_CAMERA_ID)) - mListener.onCameraPickerClicked(index); - reloadPreference(pref); - onSettingChanged(pref); - } - }); - } - - public void initSceneModeButton(View button) { - button.setVisibility(View.INVISIBLE); - updateSceneModeIcon(); - button.setVisibility(View.VISIBLE); - button.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - addSceneMode(); - View view = mUI.getPreviewMenuLayout().getChildAt(0); - animateSlideIn(view, previewMenuSize, false); - } - }); - } - - public void addModeBack() { - if (mSceneStatus == MODE_SCENE) { - addSceneMode(); - } - if (mSceneStatus == MODE_FILTER) { - addFilterMode(); - } - } - - public void addSceneMode() { - final IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(CameraSettings.KEY_SCENE_MODE); - if (pref == null) - return; - - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); - - CharSequence[] entries = pref.getEntries(); - - int[] thumbnails = pref.getThumbnailIds(); - - Resources r = mActivity.getResources(); - int height = (int) (r.getDimension(R.dimen.scene_mode_height) + 2 - * r.getDimension(R.dimen.scene_mode_padding) + 1); - int width = (int) (r.getDimension(R.dimen.scene_mode_width) + 2 - * r.getDimension(R.dimen.scene_mode_padding) + 1); - - int gridRes = 0; - boolean portrait = (rotation == 0) || (rotation == 180); - int size = height; - if (portrait) { - gridRes = R.layout.vertical_grid; - size = width; - } else { - gridRes = R.layout.horiz_grid; - } - previewMenuSize = size; - mUI.hideUI(); - mPreviewMenuStatus = PREVIEW_MENU_ON; - mSceneStatus = MODE_SCENE; - - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - FrameLayout basic = (FrameLayout) inflater.inflate( - gridRes, null, false); - - mUI.dismissSceneModeMenu(); - LinearLayout previewMenuLayout = new LinearLayout(mActivity); - mUI.setPreviewMenuLayout(previewMenuLayout); - ViewGroup.LayoutParams params = null; - if (portrait) { - params = new ViewGroup.LayoutParams(size, LayoutParams.MATCH_PARENT); - previewMenuLayout.setLayoutParams(params); - ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); - } else { - params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, size); - - previewMenuLayout.setLayoutParams(params); - ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); - previewMenuLayout.setY(display.getHeight() - size); - } - basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); - LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); - - final View[] views = new View[entries.length]; - int init = pref.getCurrentIndex(); - for (int i = 0; i < entries.length; i++) { - LinearLayout layout2 = (LinearLayout) inflater.inflate( - R.layout.scene_mode_view, null, false); - - ImageView imageView = (ImageView) layout2.findViewById(R.id.image); - TextView label = (TextView) layout2.findViewById(R.id.label); - final int j = i; - - layout2.setOnTouchListener(new View.OnTouchListener() { - private long startTime; - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - startTime = System.currentTimeMillis(); - } else if (event.getAction() == MotionEvent.ACTION_UP) { - if (System.currentTimeMillis() - startTime < CLICK_THRESHOLD) { - pref.setValueIndex(j); - onSettingChanged(pref); - updateSceneModeIcon(); - for (View v1 : views) { - v1.setBackgroundResource(R.drawable.scene_mode_view_border); - } - View border = v.findViewById(R.id.border); - border.setBackgroundResource(R.drawable.scene_mode_view_border_selected); - } - - } - return true; - } - }); - - View border = layout2.findViewById(R.id.border); - views[j] = border; - if (i == init) - border.setBackgroundResource(R.drawable.scene_mode_view_border_selected); - imageView.setImageResource(thumbnails[i]); - label.setText(entries[i]); - layout.addView(layout2); - } - previewMenuLayout.addView(basic); - mPreviewMenu = basic; - } - - public void updateSceneModeIcon() { - final IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(CameraSettings.KEY_SCENE_MODE); - if (pref == null) - return; - ImageView iv = (ImageView) ((FrameLayout) mSceneModeSwitcher).getChildAt(0); - int[] thumbnails = pref.getThumbnailIds(); - int ind = pref.getCurrentIndex(); - if (ind == -1) - ind = 0; - iv.setImageResource(thumbnails[ind]); - } - - public void initFilterModeButton(View button) { - button.setVisibility(View.INVISIBLE); - final IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(CameraSettings.KEY_COLOR_EFFECT); - if (pref == null) - return; - - int[] iconIds = pref.getLargeIconIds(); - int resid = -1; - // The preference only has a single icon to represent it. - resid = pref.getSingleIcon(); - ImageView iv = (ImageView) ((FrameLayout) button).getChildAt(0); - iv.setImageResource(resid); - button.setVisibility(View.VISIBLE); - button.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - addFilterMode(); - View view = mUI.getPreviewMenuLayout().getChildAt(0); - animateSlideIn(view, previewMenuSize, false); - } - }); - } - - public void addFilterMode() { - final IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(CameraSettings.KEY_COLOR_EFFECT); - if (pref == null) - return; - - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); - CharSequence[] entries = pref.getEntries(); - - Resources r = mActivity.getResources(); - int height = (int) (r.getDimension(R.dimen.filter_mode_height) + 2 - * r.getDimension(R.dimen.filter_mode_padding) + 1); - int width = (int) (r.getDimension(R.dimen.filter_mode_width) + 2 - * r.getDimension(R.dimen.filter_mode_padding) + 1); - - int gridRes = 0; - boolean portrait = (rotation == 0) || (rotation == 180); - int size = height; - if (portrait) { - gridRes = R.layout.vertical_grid; - size = width; - } else { - gridRes = R.layout.horiz_grid; - } - previewMenuSize = size; - mUI.hideUI(); - mPreviewMenuStatus = PREVIEW_MENU_ON; - mSceneStatus = MODE_FILTER; - - int[] thumbnails = pref.getThumbnailIds(); - - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - FrameLayout basic = (FrameLayout) inflater.inflate( - gridRes, null, false); - - mUI.dismissSceneModeMenu(); - LinearLayout previewMenuLayout = new LinearLayout(mActivity); - mUI.setPreviewMenuLayout(previewMenuLayout); - ViewGroup.LayoutParams params = null; - if (portrait) { - params = new ViewGroup.LayoutParams(size, LayoutParams.MATCH_PARENT); - previewMenuLayout.setLayoutParams(params); - ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); - } else { - params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, size); - previewMenuLayout.setLayoutParams(params); - ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); - previewMenuLayout.setY(display.getHeight() - size); - } - basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); - LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); - final View[] views = new View[entries.length]; - int init = pref.getCurrentIndex(); - for (int i = 0; i < entries.length; i++) { - LinearLayout layout2 = (LinearLayout) inflater.inflate( - R.layout.filter_mode_view, null, false); - ImageView imageView = (ImageView) layout2.findViewById(R.id.image); - final int j = i; - - layout2.setOnTouchListener(new View.OnTouchListener() { - private long startTime; - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - startTime = System.currentTimeMillis(); - } else if (event.getAction() == MotionEvent.ACTION_UP) { - if (System.currentTimeMillis() - startTime < CLICK_THRESHOLD) { - pref.setValueIndex(j); - onSettingChanged(pref); - for (View v1 : views) { - v1.setBackground(null); - } - ImageView image = (ImageView) v.findViewById(R.id.image); - image.setBackgroundColor(0xff33b5e5); - } - } - return true; - } - }); - - views[j] = imageView; - if (i == init) - imageView.setBackgroundColor(0xff33b5e5); - TextView label = (TextView) layout2.findViewById(R.id.label); - imageView.setImageResource(thumbnails[i]); - label.setText(entries[i]); - layout.addView(layout2); - } - previewMenuLayout.addView(basic); - mPreviewMenu = basic; - } - - public void openFirstLevel() { - if (isMenuBeingShown() || CameraControls.isAnimating()) - return; - if (mListMenu == null || mPopupStatus != POPUP_FIRST_LEVEL) { - initializePopup(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - mUI.showPopup(mListMenu, 1, true); - - } - - public void popupDismissed(boolean dismissAll) { - if (!dismissAll && mPopupStatus == POPUP_SECOND_LEVEL) { - initializePopup(); - mPopupStatus = POPUP_FIRST_LEVEL; - mUI.showPopup(mListMenu, 1, false); - if (mListMenu != null) - mListMenu = null; - - } else { - initializePopup(); - } - - } - - @Override - // Hit when an item in the first-level popup gets selected, then bring up - // the second-level popup - public void onPreferenceClicked(ListPreference pref) { - onPreferenceClicked(pref, 0); - } - - public void onPreferenceClicked(ListPreference pref, int y) { - if (!mActivity.isDeveloperMenuEnabled()) { - if (pref.getKey().equals(CameraSettings.KEY_REDEYE_REDUCTION)) { - privateCounter++; - if (privateCounter >= DEVELOPER_MENU_TOUCH_COUNT) { - mActivity.enableDeveloperMenu(); - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(mActivity); - prefs.edit().putBoolean(CameraSettings.KEY_DEVELOPER_MENU, true).apply(); - Toast toast = Toast.makeText(mActivity, - "Camera developer option is enabled now", Toast.LENGTH_SHORT); - toast.show(); - } - } else { - privateCounter = 0; - } - } - - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - ListSubMenu basic = (ListSubMenu) inflater.inflate( - R.layout.list_sub_menu, null, false); - basic.initialize(pref, y); - basic.setSettingChangedListener(this); - basic.setAlpha(0f); - mListSubMenu = basic; - mUI.removeLevel2(); - if (mPopupStatus == POPUP_SECOND_LEVEL) { - mUI.showPopup(mListSubMenu, 2, false); - } else { - mUI.showPopup(mListSubMenu, 2, true); - } - mPopupStatus = POPUP_SECOND_LEVEL; - } - - public void onListMenuTouched() { - mUI.removeLevel2(); - } - - public void closeAllView() { - if (mUI != null) - mUI.removeLevel2(); - - if (mListMenu != null) { - animateSlideOut(mListMenu, 1); - } - animateSlideOutPreviewMenu(); - } - - public void closeView() { - if (mUI != null) - mUI.removeLevel2(); - - if (mListMenu != null && mPopupStatus != POPUP_NONE) - animateSlideOut(mListMenu, 1); - } - - // Return true if the preference has the specified key but not the value. - private static boolean notSame(ListPreference pref, String key, String value) { - return (key.equals(pref.getKey()) && !value.equals(pref.getValue())); - } - - private void setPreference(String key, String value) { - ListPreference pref = mPreferenceGroup.findPreference(key); - if (pref != null && !value.equals(pref.getValue())) { - pref.setValue(value); - reloadPreferences(); - } - } - - @Override - public void onSettingChanged(ListPreference pref) { - // Reset the scene mode if HDR is set to on. Reset HDR if scene mode is - // set to non-auto. - if (notSame(pref, CameraSettings.KEY_CAMERA_HDR, mSettingOff)) { - setPreference(CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO); - setPreference(CameraSettings.KEY_ZSL, mSettingOff); - Toast.makeText(mActivity, R.string.hdr_enable_message, - Toast.LENGTH_LONG).show(); - mHdrOn = true; - } else if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) { - setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff); - if (mHdrOn) { - Toast.makeText(mActivity, R.string.scene_enable_message, - Toast.LENGTH_LONG).show(); - } - mHdrOn = false; - } - if (notSame(pref, CameraSettings.KEY_ZSL, mSettingOff)) { - setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff); - } - if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) { - buttonSetEnabled(mFilterModeSwitcher, false); - } else { - buttonSetEnabled(mFilterModeSwitcher, true); - } - super.onSettingChanged(pref); - } - -} diff --git a/src/com/android/camera/CustomVideoMenu.java b/src/com/android/camera/CustomVideoMenu.java deleted file mode 100644 index 6c4eadae9..000000000 --- a/src/com/android/camera/CustomVideoMenu.java +++ /dev/null @@ -1,689 +0,0 @@ -/* - * Copyright (c) 2014, The Linux Foundation. All rights reserved. - * Not a Contribution. - * - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.camera; - -import android.animation.Animator; -import android.animation.Animator.AnimatorListener; -import android.content.Context; -import android.content.res.Resources; -import android.content.SharedPreferences; -import android.graphics.Rect; -import android.preference.PreferenceManager; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewPropertyAnimator; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.GridView; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.FrameLayout; -import android.widget.FrameLayout.LayoutParams; - -import com.android.camera.ui.CameraControls; -import com.android.camera.ui.ListSubMenu; -import com.android.camera.ui.ListMenu; -import com.android.camera.ui.TimeIntervalPopup; -import com.android.camera.ui.RotateImageView; -import org.codeaurora.snapcam.R; -import android.widget.HorizontalScrollView; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.view.Display; -import com.android.camera.util.CameraUtil; - -public class CustomVideoMenu extends MenuController - implements ListMenu.Listener, - ListSubMenu.Listener, - TimeIntervalPopup.Listener { - - private static String TAG = "CustomVideoMenu"; - - private VideoUI mUI; - private String[] mOtherKeys1; - private String[] mOtherKeys2; - - private ListMenu mListMenu; - private ListSubMenu mListSubMenu; - private View mPreviewMenu; - private static final int POPUP_NONE = 0; - private static final int POPUP_FIRST_LEVEL = 1; - private static final int POPUP_SECOND_LEVEL = 2; - private static final int POPUP_IN_ANIMATION = 3; - private static final int PREVIEW_MENU_NONE = 0; - private static final int PREVIEW_MENU_IN_ANIMATION = 1; - private static final int PREVIEW_MENU_ON = 2; - private static final int MODE_FILTER = 1; - private int mSceneStatus; - private View mFrontBackSwitcher; - private View mFilterModeSwitcher; - private int mPopupStatus; - private int mPreviewMenuStatus; - private CameraActivity mActivity; - private static final int ANIMATION_DURATION = 300; - private static final int CLICK_THRESHOLD = 200; - private int previewMenuSize; - - public CustomVideoMenu(CameraActivity activity, VideoUI ui) { - super(activity); - mUI = ui; - mActivity = activity; - mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher); - mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher); - } - - public void initialize(PreferenceGroup group) { - super.initialize(group); - mListMenu = null; - mListSubMenu = null; - mPopupStatus = POPUP_NONE; - mPreviewMenuStatus = POPUP_NONE; - initFilterModeButton(mFilterModeSwitcher); - // settings popup - mOtherKeys1 = new String[] { - CameraSettings.KEY_VIDEO_QUALITY, - CameraSettings.KEY_VIDEO_DURATION, - CameraSettings.KEY_RECORD_LOCATION, - CameraSettings.KEY_CAMERA_SAVEPATH, - CameraSettings.KEY_WHITE_BALANCE, - CameraSettings.KEY_VIDEO_HIGH_FRAME_RATE, - CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE - }; - mOtherKeys2 = new String[] { - CameraSettings.KEY_VIDEO_QUALITY, - CameraSettings.KEY_VIDEO_DURATION, - CameraSettings.KEY_RECORD_LOCATION, - CameraSettings.KEY_CAMERA_SAVEPATH, - CameraSettings.KEY_WHITE_BALANCE, - CameraSettings.KEY_VIDEO_HIGH_FRAME_RATE, - CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE, - CameraSettings.KEY_DIS, - CameraSettings.KEY_VIDEO_EFFECT, - CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL, - CameraSettings.KEY_VIDEO_ENCODER, - CameraSettings.KEY_AUDIO_ENCODER, - CameraSettings.KEY_VIDEO_HDR, - CameraSettings.KEY_POWER_MODE - }; - mFrontBackSwitcher.setVisibility(View.INVISIBLE); - initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher); - } - - public boolean handleBackKey() { - if (mPreviewMenuStatus == PREVIEW_MENU_ON) { - animateSlideOut(mPreviewMenu); - return true; - } - if (mPopupStatus == POPUP_NONE) - return false; - if (mPopupStatus == POPUP_FIRST_LEVEL) { - animateSlideOut(mListMenu, 1); - } else if (mPopupStatus == POPUP_SECOND_LEVEL) { - animateFadeOut(mListSubMenu, 2); - ((ListMenu) mListMenu).resetHighlight(); - } - return true; - } - - public void closeSceneMode() { - mUI.removeSceneModeMenu(); - } - - public void tryToCloseSubList() { - if (mListMenu != null) - ((ListMenu) mListMenu).resetHighlight(); - - if (mPopupStatus == POPUP_SECOND_LEVEL) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - } - - private void animateFadeOut(final ListView v, final int level) { - if (v == null || mPopupStatus == POPUP_IN_ANIMATION) - return; - mPopupStatus = POPUP_IN_ANIMATION; - - ViewPropertyAnimator vp = v.animate(); - vp.alpha(0f).setDuration(ANIMATION_DURATION); - vp.setListener(new AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - } - - @Override - public void onAnimationCancel(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - - } - }); - vp.start(); - } - - private void animateSlideOut(final ListView v, final int level) { - if (v == null || mPopupStatus == POPUP_IN_ANIMATION) - return; - mPopupStatus = POPUP_IN_ANIMATION; - - ViewPropertyAnimator vp = v.animate(); - vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); - vp.setListener(new AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - } - - @Override - public void onAnimationCancel(Animator animation) { - if (level == 1) { - mUI.dismissLevel1(); - initializePopup(); - mPopupStatus = POPUP_NONE; - mUI.cleanupListview(); - } - else if (level == 2) { - mUI.dismissLevel2(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - - } - }); - vp.start(); - } - - public void animateFadeIn(final ListView v) { - ViewPropertyAnimator vp = v.animate(); - vp.alpha(0.85f).setDuration(ANIMATION_DURATION); - vp.start(); - } - - public void animateSlideIn(final View v, int delta, boolean settingMenu) { - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - boolean portrait = (rotation == 0) || (rotation == 180); - if (settingMenu) - portrait = true; - ViewPropertyAnimator vp = v.animate(); - if (portrait) { - float dest = v.getX(); - v.setX(dest - delta); - vp.translationX(dest).setDuration(ANIMATION_DURATION); - } - else { - float dest = v.getY(); - v.setY(dest + delta); - vp.translationY(dest).setDuration(ANIMATION_DURATION); - } - vp.start(); - } - - public void animateSlideOutPreviewMenu() { - if (mPreviewMenu == null) - return; - animateSlideOut(mPreviewMenu); - } - - private void animateSlideOut(final View v) { - if (v == null || mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION) - return; - mPreviewMenuStatus = PREVIEW_MENU_IN_ANIMATION; - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - boolean portrait = (rotation == 0) || (rotation == 180); - ViewPropertyAnimator vp = v.animate(); - if (portrait) { - vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); - - } else { - vp.translationY(v.getY() + v.getHeight()).setDuration(ANIMATION_DURATION); - - } - vp.setListener(new AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - closeSceneMode(); - mPreviewMenuStatus = PREVIEW_MENU_NONE; - } - - @Override - public void onAnimationCancel(Animator animation) { - closeSceneMode(); - mPreviewMenuStatus = PREVIEW_MENU_NONE; - } - }); - vp.start(); - } - - public boolean isOverMenu(MotionEvent ev) { - if (mPopupStatus == POPUP_NONE || mPopupStatus == POPUP_IN_ANIMATION) - return false; - if (mUI.getMenuLayout() == null) - return false; - Rect rec = new Rect(); - mUI.getMenuLayout().getChildAt(0).getHitRect(rec); - return rec.contains((int) ev.getX(), (int) ev.getY()); - } - - public boolean isOverPreviewMenu(MotionEvent ev) { - if (mPreviewMenuStatus != PREVIEW_MENU_ON) - return false; - if (mUI.getPreviewMenuLayout() == null) - return false; - Rect rec = new Rect(); - mUI.getPreviewMenuLayout().getChildAt(0).getHitRect(rec); - rec.top += (int) mUI.getPreviewMenuLayout().getY(); - rec.bottom += (int) mUI.getPreviewMenuLayout().getY(); - return rec.contains((int) ev.getX(), (int) ev.getY()); - } - - public boolean isMenuBeingShown() { - return mPopupStatus != POPUP_NONE; - } - - public boolean isMenuBeingAnimated() { - return mPopupStatus == POPUP_IN_ANIMATION; - } - - public boolean isPreviewMenuBeingShown() { - return mPreviewMenuStatus == PREVIEW_MENU_ON; - } - - public boolean isPreviewMenuBeingAnimated() { - return mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION; - } - - public boolean sendTouchToPreviewMenu(MotionEvent ev) { - return mUI.sendTouchToPreviewMenu(ev); - } - - public boolean sendTouchToMenu(MotionEvent ev) { - return mUI.sendTouchToMenu(ev); - } - - public void initSwitchItem(final String prefKey, View switcher) { - final IconListPreference pref = - (IconListPreference) mPreferenceGroup.findPreference(prefKey); - if (pref == null) - return; - - int[] iconIds = pref.getLargeIconIds(); - int resid = -1; - int index = pref.findIndexOfValue(pref.getValue()); - if (!pref.getUseSingleIcon() && iconIds != null) { - // Each entry has a corresponding icon. - resid = iconIds[index]; - } else { - // The preference only has a single icon to represent it. - resid = pref.getSingleIcon(); - } - ImageView iv = (ImageView) ((FrameLayout) switcher).getChildAt(0); - iv.setImageResource(resid); - switcher.setVisibility(View.VISIBLE); - mPreferences.add(pref); - mPreferenceMap.put(pref, switcher); - switcher.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(prefKey); - if (pref == null) - return; - int index = pref.findIndexOfValue(pref.getValue()); - CharSequence[] values = pref.getEntryValues(); - index = (index + 1) % values.length; - pref.setValueIndex(index); - ImageView iv = (ImageView) ((FrameLayout) v).getChildAt(0); - iv.setImageResource(((IconListPreference) pref).getLargeIconIds()[index]); - if (prefKey.equals(CameraSettings.KEY_CAMERA_ID)) - mListener.onCameraPickerClicked(index); - reloadPreference(pref); - onSettingChanged(pref); - } - }); - } - - public void initFilterModeButton(View button) { - button.setVisibility(View.INVISIBLE); - final IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(CameraSettings.KEY_COLOR_EFFECT); - if (pref == null) - return; - - int[] iconIds = pref.getLargeIconIds(); - int resid = -1; - // The preference only has a single icon to represent it. - resid = pref.getSingleIcon(); - ImageView iv = (ImageView) ((FrameLayout) button).getChildAt(0); - iv.setImageResource(resid); - button.setVisibility(View.VISIBLE); - button.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - addFilterMode(); - View view = mUI.getPreviewMenuLayout().getChildAt(0); - animateSlideIn(view, previewMenuSize, false); - } - }); - } - - public void addModeBack() { - if (mSceneStatus == MODE_FILTER) { - addFilterMode(); - } - } - - public void addFilterMode() { - final IconListPreference pref = (IconListPreference) mPreferenceGroup - .findPreference(CameraSettings.KEY_COLOR_EFFECT); - if (pref == null) - return; - - int rotation = CameraUtil.getDisplayRotation(mActivity); - boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); - if (!mIsDefaultToPortrait) { - rotation = (rotation + 90) % 360; - } - WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); - CharSequence[] entries = pref.getEntries(); - - Resources r = mActivity.getResources(); - int height = (int) (r.getDimension(R.dimen.filter_mode_height) + 2 - * r.getDimension(R.dimen.filter_mode_padding) + 1); - int width = (int) (r.getDimension(R.dimen.filter_mode_width) + 2 - * r.getDimension(R.dimen.filter_mode_padding) + 1); - - int gridRes = 0; - boolean portrait = (rotation == 0) || (rotation == 180); - int size = height; - if (portrait) { - gridRes = R.layout.vertical_grid; - size = width; - } else { - gridRes = R.layout.horiz_grid; - } - previewMenuSize = size; - mUI.hideUI(); - mPreviewMenuStatus = PREVIEW_MENU_ON; - mSceneStatus = MODE_FILTER; - - int[] thumbnails = pref.getThumbnailIds(); - - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - FrameLayout basic = (FrameLayout) inflater.inflate( - gridRes, null, false); - - mUI.dismissSceneModeMenu(); - LinearLayout previewMenuLayout = new LinearLayout(mActivity); - mUI.setPreviewMenuLayout(previewMenuLayout); - ViewGroup.LayoutParams params = null; - if (portrait) { - params = new ViewGroup.LayoutParams(size, LayoutParams.MATCH_PARENT); - previewMenuLayout.setLayoutParams(params); - ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); - } else { - params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, size); - previewMenuLayout.setLayoutParams(params); - ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); - previewMenuLayout.setY(display.getHeight() - size); - } - basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); - LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); - - final View[] views = new View[entries.length]; - int init = pref.getCurrentIndex(); - for (int i = 0; i < entries.length; i++) { - LinearLayout layout2 = (LinearLayout) inflater.inflate( - R.layout.filter_mode_view, null, false); - - ImageView imageView = (ImageView) layout2.findViewById(R.id.image); - final int j = i; - - layout2.setOnTouchListener(new View.OnTouchListener() { - private long startTime; - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - startTime = System.currentTimeMillis(); - } else if (event.getAction() == MotionEvent.ACTION_UP) { - if (System.currentTimeMillis() - startTime < CLICK_THRESHOLD) { - pref.setValueIndex(j); - for (View v1 : views) { - v1.setBackground(null); - } - ImageView image = (ImageView) v.findViewById(R.id.image); - image.setBackgroundColor(0xff33b5e5); - onSettingChanged(pref); - } - - } - return true; - } - }); - - views[j] = imageView; - if (i == init) - imageView.setBackgroundColor(0xff33b5e5); - TextView label = (TextView) layout2.findViewById(R.id.label); - imageView.setImageResource(thumbnails[i]); - label.setText(entries[i]); - layout.addView(layout2); - } - previewMenuLayout.addView(basic); - mPreviewMenu = basic; - } - - public void openFirstLevel() { - if (isMenuBeingShown() || CameraControls.isAnimating()) - return; - if (mListMenu == null || mPopupStatus != POPUP_FIRST_LEVEL) { - initializePopup(); - mPopupStatus = POPUP_FIRST_LEVEL; - } - mUI.showPopup(mListMenu, 1, true); - } - - @Override - public void overrideSettings(final String... keyvalues) { - super.overrideSettings(keyvalues); - if (((mListMenu == null)) || mPopupStatus != POPUP_FIRST_LEVEL) { - mPopupStatus = POPUP_FIRST_LEVEL; - initializePopup(); - } - mListMenu.overrideSettings(keyvalues); - - } - - @Override - // Hit when an item in the second-level popup gets selected - public void onListPrefChanged(ListPreference pref) { - if (mPopupStatus == POPUP_SECOND_LEVEL) { - mListMenu.reloadPreference(); - animateFadeOut(mListSubMenu, 2); - } - super.onSettingChanged(pref); - ((ListMenu) mListMenu).resetHighlight(); - } - - protected void initializePopup() { - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - - ListMenu popup1 = (ListMenu) inflater.inflate( - R.layout.list_menu, null, false); - popup1.setSettingChangedListener(this); - String[] keys = mOtherKeys1; - if (mActivity.isDeveloperMenuEnabled()) - keys = mOtherKeys2; - popup1.initialize(mPreferenceGroup, keys); - if (mActivity.isSecureCamera()) { - // Prevent location preference from getting changed in secure camera - // mode - popup1.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION, false); - } - mListMenu = popup1; - - } - - public void popupDismissed(boolean topPopupOnly) { - // if the 2nd level popup gets dismissed - if (mPopupStatus == POPUP_SECOND_LEVEL) { - initializePopup(); - mPopupStatus = POPUP_FIRST_LEVEL; - if (topPopupOnly) { - mUI.showPopup(mListMenu, 1, false); - } - } else { - initializePopup(); - } - } - - public void hideUI() { - mFrontBackSwitcher.setVisibility(View.INVISIBLE); - mFilterModeSwitcher.setVisibility(View.INVISIBLE); - } - - public void showUI() { - mFrontBackSwitcher.setVisibility(View.VISIBLE); - mFilterModeSwitcher.setVisibility(View.VISIBLE); - } - - @Override - // Hit when an item in the first-level popup gets selected, then bring up - // the second-level popup - public void onPreferenceClicked(ListPreference pref) { - onPreferenceClicked(pref, 0); - } - - @Override - // Hit when an item in the first-level popup gets selected, then bring up - // the second-level popup - public void onPreferenceClicked(ListPreference pref, int y) { - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - - ListSubMenu basic = (ListSubMenu) inflater.inflate( - R.layout.list_sub_menu, null, false); - basic.initialize(pref, y); - basic.setSettingChangedListener(this); - mUI.removeLevel2(); - mListSubMenu = basic; - if (mPopupStatus == POPUP_SECOND_LEVEL) { - mUI.showPopup(mListSubMenu, 2, false); - } else { - mUI.showPopup(mListSubMenu, 2, true); - } - mPopupStatus = POPUP_SECOND_LEVEL; - } - - public void onListMenuTouched() { - mUI.removeLevel2(); - } - - public void closeAllView() { - if (mUI != null) - mUI.removeLevel2(); - - if (mListMenu != null) - animateSlideOut(mListMenu, 1); - animateSlideOutPreviewMenu(); - } - - public void closeView() { - if (mUI != null) - mUI.removeLevel2(); - - if (mListMenu != null) - animateSlideOut(mListMenu, 1); - } - - @Override - public void onSettingChanged(ListPreference pref) { - super.onSettingChanged(pref); - } - -} diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index 629d91526..c8522ee94 100644 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -18,105 +18,154 @@ package com.android.camera; import java.util.Locale; +import android.animation.Animator; +import android.animation.Animator.AnimatorListener; +import android.content.Context; +import android.content.SharedPreferences; import android.content.res.Resources; import android.hardware.Camera.Parameters; - -import com.android.camera.ui.AbstractSettingPopup; -import com.android.camera.ui.CountdownTimerPopup; -import com.android.camera.ui.ListPrefSettingPopup; -import com.android.camera.ui.MoreSettingPopup; -import com.android.camera.ui.PieItem; -import com.android.camera.ui.PieItem.OnClickListener; -import com.android.camera.ui.PieRenderer; -import org.codeaurora.snapcam.R; -import android.content.Context; +import android.graphics.Rect; +import android.preference.PreferenceManager; +import android.util.Log; import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewPropertyAnimator; +import android.widget.ListView; import android.widget.Toast; -import android.util.Log; +import android.widget.TextView; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.FrameLayout; +import android.widget.FrameLayout.LayoutParams; -import java.util.Locale; +import com.android.camera.CameraPreference.OnPreferenceChangedListener; +import com.android.camera.ui.CameraControls; +import com.android.camera.ui.CountdownTimerPopup; +import com.android.camera.ui.ListSubMenu; +import com.android.camera.ui.ListMenu; +import com.android.camera.ui.RotateImageView; +import org.codeaurora.snapcam.R; +import android.widget.HorizontalScrollView; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.Display; +import com.android.camera.util.CameraUtil; -public class PhotoMenu extends PieController - implements MoreSettingPopup.Listener, - CountdownTimerPopup.Listener, - ListPrefSettingPopup.Listener { +public class PhotoMenu extends MenuController + implements ListMenu.Listener, + CountdownTimerPopup.Listener, + ListSubMenu.Listener { private static String TAG = "PhotoMenu"; private final String mSettingOff; private String[] mOtherKeys1; private String[] mOtherKeys2; - private String[] mOtherKeys3; - private MoreSettingPopup mPopup1; - private MoreSettingPopup mPopup2; - private MoreSettingPopup mPopup3; + private ListMenu mListMenu; + private View mPreviewMenu; private static final int POPUP_NONE = 0; private static final int POPUP_FIRST_LEVEL = 1; private static final int POPUP_SECOND_LEVEL = 2; + private static final int POPUP_IN_ANIMATION = 3; + private static final int PREVIEW_MENU_NONE = 0; + private static final int PREVIEW_MENU_IN_ANIMATION = 1; + private static final int PREVIEW_MENU_ON = 2; + private static final int MODE_SCENE = 0; + private static final int MODE_FILTER = 1; + private static final int DEVELOPER_MENU_TOUCH_COUNT = 10; + private int mSceneStatus; + private View mHdrSwitcher; + private View mFrontBackSwitcher; + private View mSceneModeSwitcher; + private View mFilterModeSwitcher; private PhotoUI mUI; private int mPopupStatus; - private AbstractSettingPopup mPopup; + private int mPreviewMenuStatus; + private ListSubMenu mListSubMenu; private CameraActivity mActivity; - private int popupNum = 0; - private PieItem mHdrItem = null; - private PieItem mHdrPlusItem = null; private String mPrevSavedCDS; private boolean mIsTNREnabled = false; private boolean mIsCDSUpdated = false; + private int privateCounter = 0; + private static final int ANIMATION_DURATION = 300; + private static final int CLICK_THRESHOLD = 200; + private int previewMenuSize; - public PhotoMenu(CameraActivity activity, PhotoUI ui, PieRenderer pie) { - super(activity, pie); + public PhotoMenu(CameraActivity activity, PhotoUI ui) { + super(activity); mUI = ui; mSettingOff = activity.getString(R.string.setting_off_value); mActivity = activity; + mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher); + mHdrSwitcher = ui.getRootView().findViewById(R.id.hdr_switcher); + mSceneModeSwitcher = ui.getRootView().findViewById(R.id.scene_mode_switcher); + mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher); } public void initialize(PreferenceGroup group) { super.initialize(group); - mPopup = null; - mPopup1 = null; - mPopup2 = null; - mPopup3 = null; + mListSubMenu = null; + mListMenu = null; mPopupStatus = POPUP_NONE; - PieItem item = null; - popupNum = 0; + mPreviewMenuStatus = POPUP_NONE; final Resources res = mActivity.getResources(); Locale locale = res.getConfiguration().locale; // The order is from left to right in the menu. - // HDR+ (GCam). - if (group.findPreference(CameraSettings.KEY_CAMERA_HDR_PLUS) != null) { - mHdrPlusItem = makeSwitchItem(CameraSettings.KEY_CAMERA_HDR_PLUS, true); - mRenderer.addItem(mHdrPlusItem); - } + initSceneModeButton(mSceneModeSwitcher); + initFilterModeButton(mFilterModeSwitcher); + mHdrSwitcher.setVisibility(View.INVISIBLE); + mFrontBackSwitcher.setVisibility(View.INVISIBLE); // HDR. if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) { - mHdrItem = makeSwitchItem(CameraSettings.KEY_CAMERA_HDR, true); - mRenderer.addItem(mHdrItem); + mHdrSwitcher.setVisibility(View.VISIBLE); + initSwitchItem(CameraSettings.KEY_CAMERA_HDR, mHdrSwitcher); + } else { + mHdrSwitcher.setVisibility(View.INVISIBLE); } mOtherKeys1 = new String[] { - CameraSettings.KEY_SCENE_MODE, CameraSettings.KEY_RECORD_LOCATION, CameraSettings.KEY_PICTURE_SIZE, - CameraSettings.KEY_HISTOGRAM, CameraSettings.KEY_JPEG_QUALITY, - CameraSettings.KEY_ZSL, CameraSettings.KEY_TIMER, - CameraSettings.KEY_TIMER_SOUND_EFFECTS, CameraSettings.KEY_CAMERA_SAVEPATH, CameraSettings.KEY_LONGSHOT, - CameraSettings.KEY_AUTO_HDR, - CameraSettings.KEY_HDR_MODE, - CameraSettings.KEY_HDR_NEED_1X, - CameraSettings.KEY_CDS_MODE, - CameraSettings.KEY_TNR_MODE + CameraSettings.KEY_FACE_DETECTION, + CameraSettings.KEY_ISO, + CameraSettings.KEY_EXPOSURE, + CameraSettings.KEY_WHITE_BALANCE, + CameraSettings.KEY_FLASH_MODE, + CameraSettings.KEY_FOCUS_MODE, + CameraSettings.KEY_REDEYE_REDUCTION }; mOtherKeys2 = new String[] { - CameraSettings.KEY_COLOR_EFFECT, + CameraSettings.KEY_RECORD_LOCATION, + CameraSettings.KEY_PICTURE_SIZE, + CameraSettings.KEY_JPEG_QUALITY, + CameraSettings.KEY_TIMER, + CameraSettings.KEY_CAMERA_SAVEPATH, + CameraSettings.KEY_LONGSHOT, CameraSettings.KEY_FACE_DETECTION, + CameraSettings.KEY_ISO, + CameraSettings.KEY_EXPOSURE, + CameraSettings.KEY_WHITE_BALANCE, + CameraSettings.KEY_FLASH_MODE, + CameraSettings.KEY_FOCUS_MODE, + CameraSettings.KEY_REDEYE_REDUCTION, + CameraSettings.KEY_AUTO_HDR, + CameraSettings.KEY_HDR_MODE, + CameraSettings.KEY_HDR_NEED_1X, + CameraSettings.KEY_CDS_MODE, + CameraSettings.KEY_TNR_MODE, + CameraSettings.KEY_HISTOGRAM, + CameraSettings.KEY_ZSL, + CameraSettings.KEY_TIMER_SOUND_EFFECTS, CameraSettings.KEY_FACE_RECOGNITION, CameraSettings.KEY_TOUCH_AF_AEC, CameraSettings.KEY_SELECTABLE_ZONE_AF, @@ -124,106 +173,294 @@ public class PhotoMenu extends PieController CameraSettings.KEY_SATURATION, CameraSettings.KEY_CONTRAST, CameraSettings.KEY_SHARPNESS, - CameraSettings.KEY_AUTOEXPOSURE - }; - - mOtherKeys3 = new String[] { + CameraSettings.KEY_AUTOEXPOSURE, CameraSettings.KEY_ANTIBANDING, - CameraSettings.KEY_ISO, CameraSettings.KEY_DENOISE, CameraSettings.KEY_ADVANCED_FEATURES, - CameraSettings.KEY_EXPOSURE, - CameraSettings.KEY_WHITE_BALANCE, - CameraSettings.KEY_FLASH_MODE, - CameraSettings.KEY_FOCUS_MODE, - CameraSettings.KEY_REDEYE_REDUCTION, CameraSettings.KEY_AE_BRACKET_HDR, CameraSettings.KEY_MANUAL_EXPOSURE, CameraSettings.KEY_MANUAL_WB, CameraSettings.KEY_MANUAL_FOCUS }; - PieItem item1 = makeItem(R.drawable.ic_settings_holo_light_01); - item1.setLabel(mActivity.getResources().getString(R.string.camera_menu_more_label)); - item1.setOnClickListener(new OnClickListener() { - @Override - public void onClick(PieItem item) { - if (mPopup1 == null || mPopupStatus != POPUP_FIRST_LEVEL){ + initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher); + } + + @Override + // Hit when an item in a popup gets selected + public void onListPrefChanged(ListPreference pref) { + animateFadeOut(mListSubMenu, 2); + onSettingChanged(pref); + ((ListMenu) mListMenu).resetHighlight(); + } + + public boolean handleBackKey() { + if (mPreviewMenuStatus == PREVIEW_MENU_ON) { + animateSlideOut(mPreviewMenu); + return true; + } + if (mPopupStatus == POPUP_NONE) + return false; + if (mPopupStatus == POPUP_FIRST_LEVEL) { + animateSlideOut(mListMenu, 1); + } else if (mPopupStatus == POPUP_SECOND_LEVEL) { + animateFadeOut(mListSubMenu, 2); + ((ListMenu) mListMenu).resetHighlight(); + } + return true; + } + + public void closeSceneMode() { + mUI.removeSceneModeMenu(); + } + + public void tryToCloseSubList() { + if (mListMenu != null) + ((ListMenu) mListMenu).resetHighlight(); + + if (mPopupStatus == POPUP_SECOND_LEVEL) { + mUI.dismissLevel2(); + mPopupStatus = POPUP_FIRST_LEVEL; + } + } + + private void animateFadeOut(final ListView v, final int level) { + if (v == null || mPopupStatus == POPUP_IN_ANIMATION) + return; + mPopupStatus = POPUP_IN_ANIMATION; + + ViewPropertyAnimator vp = v.animate(); + vp.alpha(0f).setDuration(ANIMATION_DURATION); + vp.setListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); initializePopup(); - mPopupStatus = POPUP_FIRST_LEVEL; + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); + mPopupStatus = POPUP_FIRST_LEVEL; } - mUI.showPopup(mPopup1); - popupNum = 1; } - }); - mRenderer.addItem(item1); - - PieItem item2 = makeItem(R.drawable.ic_settings_holo_light_02); - item2.setLabel(mActivity.getResources().getString(R.string.camera_menu_more_label)); - item2.setOnClickListener(new OnClickListener() { - @Override - public void onClick(PieItem item) { - if (mPopup2 == null || mPopupStatus != POPUP_FIRST_LEVEL) { + + @Override + public void onAnimationCancel(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); mPopupStatus = POPUP_FIRST_LEVEL; } - mUI.showPopup(mPopup2); - popupNum = 2; + } }); - mRenderer.addItem(item2); - - PieItem item3= makeItem(R.drawable.ic_settings_holo_light_03); - item3.setLabel(mActivity.getResources().getString(R.string.camera_menu_more_label)); - item3.setOnClickListener(new OnClickListener() { - @Override - public void onClick(PieItem item) { - if (mPopup3 == null || mPopupStatus != POPUP_FIRST_LEVEL) { + vp.start(); + } + + private void animateSlideOut(final ListView v, final int level) { + if (v == null || mPopupStatus == POPUP_IN_ANIMATION) + return; + mPopupStatus = POPUP_IN_ANIMATION; + + ViewPropertyAnimator vp = v.animate(); + vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); + vp.setListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); mPopupStatus = POPUP_FIRST_LEVEL; } - mUI.showPopup(mPopup3); - popupNum = 3; } - }); - mRenderer.addItem(item3); - // Camera switcher. - if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) { - item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, false); - final PieItem fitem = item; - item.setOnClickListener(new OnClickListener() { - @Override - public void onClick(PieItem item) { - // Find the index of next camera. - ListPreference pref = mPreferenceGroup - .findPreference(CameraSettings.KEY_CAMERA_ID); - if (pref != null) { - int index = pref.findIndexOfValue(pref.getValue()); - CharSequence[] values = pref.getEntryValues(); - index = (index + 1) % values.length; - pref.setValueIndex(index); - mListener.onCameraPickerClicked(index); - } - updateItem(fitem, CameraSettings.KEY_CAMERA_ID); + @Override + public void onAnimationCancel(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); + initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); } - }); - mRenderer.addItem(item); + else if (level == 2) { + mUI.dismissLevel2(); + mPopupStatus = POPUP_FIRST_LEVEL; + } + + } + }); + vp.start(); + } + + public void animateFadeIn(final ListView v) { + ViewPropertyAnimator vp = v.animate(); + vp.alpha(0.85f).setDuration(ANIMATION_DURATION); + vp.start(); + } + + public void animateSlideIn(final View v, int delta, boolean settingMenu) { + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; + } + boolean portrait = (rotation == 0) || (rotation == 180); + if (settingMenu) + portrait = true; + ViewPropertyAnimator vp = v.animate(); + if (portrait) { + float dest = v.getX(); + v.setX(dest - delta); + vp.translationX(dest).setDuration(ANIMATION_DURATION); + } + else { + float dest = v.getY(); + v.setY(dest + delta); + vp.translationY(dest).setDuration(ANIMATION_DURATION); } + vp.start(); } - @Override - // Hit when an item in a popup gets selected - public void onListPrefChanged(ListPreference pref) { - if (mPopup != null && mPopup1 != null && mPopup2 != null && mPopup3 != null) { - mUI.dismissPopup(); + public void animateSlideOutPreviewMenu() { + if (mPreviewMenu == null) + return; + animateSlideOut(mPreviewMenu); + } + + private void animateSlideOut(final View v) { + if (v == null || mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION) + return; + mPreviewMenuStatus = PREVIEW_MENU_IN_ANIMATION; + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; } - onSettingChanged(pref); + boolean portrait = (rotation == 0) || (rotation == 180); + ViewPropertyAnimator vp = v.animate(); + if (portrait) { + vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); + + } else { + vp.translationY(v.getY() + v.getHeight()).setDuration(ANIMATION_DURATION); + + } + vp.setListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + closeSceneMode(); + mPreviewMenuStatus = PREVIEW_MENU_NONE; + } + + @Override + public void onAnimationCancel(Animator animation) { + closeSceneMode(); + mPreviewMenuStatus = PREVIEW_MENU_NONE; + + } + }); + vp.start(); + } + + private void buttonSetEnabled(View v, boolean enable) { + v.setEnabled(enable); + if (v instanceof ViewGroup) { + View v2 = ((ViewGroup) v).getChildAt(0); + if (v2 != null) + v2.setEnabled(enable); + + } + + } + + public boolean isOverMenu(MotionEvent ev) { + if (mPopupStatus == POPUP_NONE || mPopupStatus == POPUP_IN_ANIMATION) + return false; + if (mUI.getMenuLayout() == null) + return false; + Rect rec = new Rect(); + mUI.getMenuLayout().getChildAt(0).getHitRect(rec); + return rec.contains((int) ev.getX(), (int) ev.getY()); + } + + public boolean isOverPreviewMenu(MotionEvent ev) { + if (mPreviewMenuStatus != PREVIEW_MENU_ON) + return false; + if (mUI.getPreviewMenuLayout() == null) + return false; + Rect rec = new Rect(); + mUI.getPreviewMenuLayout().getChildAt(0).getHitRect(rec); + rec.top += (int) mUI.getPreviewMenuLayout().getY(); + rec.bottom += (int) mUI.getPreviewMenuLayout().getY(); + return rec.contains((int) ev.getX(), (int) ev.getY()); + } + + public boolean isMenuBeingShown() { + return mPopupStatus != POPUP_NONE; + } + + public boolean isMenuBeingAnimated() { + return mPopupStatus == POPUP_IN_ANIMATION; + } + + public boolean isPreviewMenuBeingShown() { + return mPreviewMenuStatus == PREVIEW_MENU_ON; + } + + public boolean isPreviewMenuBeingAnimated() { + return mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION; + } + + public boolean sendTouchToPreviewMenu(MotionEvent ev) { + return mUI.sendTouchToPreviewMenu(ev); + } + + public boolean sendTouchToMenu(MotionEvent ev) { + return mUI.sendTouchToMenu(ev); } @Override - public void overrideSettings(final String ... keyvalues) { - if (mPopup1 != null) { + public void overrideSettings(final String... keyvalues) { + if (mListMenu != null) { ListPreference pref_tnr = mPreferenceGroup.findPreference(CameraSettings.KEY_TNR_MODE); ListPreference pref_cds = mPreferenceGroup.findPreference(CameraSettings.KEY_CDS_MODE); @@ -234,11 +471,11 @@ public class PhotoMenu extends PieController mPrevSavedCDS = cds; } - mPopup1.setPreferenceEnabled(CameraSettings.KEY_TNR_MODE, false); + mListMenu.setPreferenceEnabled(CameraSettings.KEY_TNR_MODE, false); if ((tnr != null) && !mActivity.getString(R.string. pref_camera_tnr_default).equals(tnr)) { - mPopup1.setPreferenceEnabled(CameraSettings.KEY_CDS_MODE, false); - mPopup1.overrideSettings(CameraSettings.KEY_CDS_MODE, + mListMenu.setPreferenceEnabled(CameraSettings.KEY_CDS_MODE, false); + mListMenu.overrideSettings(CameraSettings.KEY_CDS_MODE, mActivity.getString(R.string.pref_camera_cds_value_off)); mIsTNREnabled = true; if (!mIsCDSUpdated) { @@ -248,187 +485,547 @@ public class PhotoMenu extends PieController mIsCDSUpdated = true; } } else if (tnr != null) { - mPopup1.setPreferenceEnabled(CameraSettings.KEY_CDS_MODE, true); + mListMenu.setPreferenceEnabled(CameraSettings.KEY_CDS_MODE, true); if (mIsTNREnabled && mPrevSavedCDS != cds) { - mPopup1.overrideSettings(CameraSettings.KEY_CDS_MODE, mPrevSavedCDS); + mListMenu.overrideSettings(CameraSettings.KEY_CDS_MODE, mPrevSavedCDS); mIsTNREnabled = false; mIsCDSUpdated = false; } } } - + for (int i = 0; i < keyvalues.length; i += 2) { + if (keyvalues[i].equals(CameraSettings.KEY_SCENE_MODE)) { + buttonSetEnabled(mSceneModeSwitcher, keyvalues[i + 1] == null); + } + } super.overrideSettings(keyvalues); - if ((mPopup1 == null) || (mPopup2 == null) || (mPopup3 == null)) initializePopup(); - - mPopup1.overrideSettings(keyvalues); - mPopup2.overrideSettings(keyvalues); - mPopup3.overrideSettings(keyvalues); + if ((mListMenu == null)) + initializePopup(); + mListMenu.overrideSettings(keyvalues); } protected void initializePopup() { - LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - MoreSettingPopup popup1 = (MoreSettingPopup) inflater.inflate( - R.layout.more_setting_popup, null, false); - popup1.setSettingChangedListener(this); - popup1.initialize(mPreferenceGroup, mOtherKeys1); - if (mActivity.isSecureCamera()) { - // Prevent location preference from getting changed in secure camera mode - popup1.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION,false); - } - mPopup1 = popup1; - - MoreSettingPopup popup2 = (MoreSettingPopup) inflater.inflate( - R.layout.more_setting_popup, null, false); - popup2.setSettingChangedListener(this); - popup2.initialize(mPreferenceGroup, mOtherKeys2); - mPopup2 = popup2; - - MoreSettingPopup popup3 = (MoreSettingPopup) inflater.inflate( - R.layout.more_setting_popup, null, false); - popup3.setSettingChangedListener(this); - popup3.initialize(mPreferenceGroup, mOtherKeys3); - mPopup3 = popup3; - - ListPreference pref = mPreferenceGroup.findPreference( - CameraSettings.KEY_SCENE_MODE); - String sceneMode = (pref != null) ? pref.getValue() : null; - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_FACE_DETECTION); - String faceDetection = (pref != null) ? pref.getValue() : null; - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ZSL); - String zsl = (pref != null) ? pref.getValue() : null; - pref = mPreferenceGroup.findPreference (CameraSettings.KEY_AUTO_HDR); - String autohdr = (pref != null) ? pref.getValue() : null; - if (((sceneMode != null) && !Parameters.SCENE_MODE_AUTO.equals(sceneMode)) - || ((autohdr != null) && autohdr.equals("enable"))) { - popup3.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_AUTOEXPOSURE,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_SATURATION,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_CONTRAST,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_SHARPNESS,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_COLOR_EFFECT,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_FLASH_MODE,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_WHITE_BALANCE,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE,false); - } - if ((autohdr != null) && autohdr.equals("enable")) { - popup1.setPreferenceEnabled(CameraSettings.KEY_SCENE_MODE,false); - } - if ((zsl != null) && Parameters.ZSL_ON.equals(zsl)) { - popup3.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_MANUAL_EXPOSURE,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_MANUAL_WB,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_MANUAL_FOCUS,false); - } - if ((faceDetection != null) && !Parameters.FACE_DETECTION_ON.equals(faceDetection)){ - popup2.setPreferenceEnabled(CameraSettings.KEY_FACE_RECOGNITION,false); - } - popup1.setPreferenceEnabled(CameraSettings.KEY_ZSL, !mUI.isCountingDown()); - - pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ADVANCED_FEATURES); - String advancedFeatures = (pref != null) ? pref.getValue() : null; - - String ubiFocusOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_ubifocus_on); - String reFocusOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_refocus_on); - String chromaFlashOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_chromaflash_on); - String optiZoomOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_optizoom_on); - String fssrOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_FSSR_on); - String truePortraitOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_trueportrait_on); - String multiTouchFocusOn = mActivity.getString(R.string. - pref_camera_advanced_feature_value_multi_touch_focus_on); - - if ((zsl != null) && Parameters.ZSL_OFF.equals(zsl)) { - popup3.overrideSettings(CameraSettings.KEY_ADVANCED_FEATURES, - mActivity.getString(R.string.pref_camera_advanced_feature_default)); - - popup3.setPreferenceEnabled(CameraSettings.KEY_ADVANCED_FEATURES,false); - if (mHdrItem != null) { - mHdrItem.setEnabled(true); - } - if (mHdrPlusItem != null) { - mHdrPlusItem.setEnabled(true); - } - } else { - if ((advancedFeatures != null) && (advancedFeatures.equals(ubiFocusOn) || - advancedFeatures.equals(chromaFlashOn) || - advancedFeatures.equals(reFocusOn) || - advancedFeatures.equals(optiZoomOn) || - advancedFeatures.equals(fssrOn) || - advancedFeatures.equals(truePortraitOn) || - advancedFeatures.equals(multiTouchFocusOn))) { - popup3.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_FLASH_MODE,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_AE_BRACKET_HDR,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_REDEYE_REDUCTION,false); - popup3.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_COLOR_EFFECT,false); - popup2.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC,false); - popup1.setPreferenceEnabled(CameraSettings.KEY_SCENE_MODE,false); - - setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff); - - if (mHdrItem != null) { - mHdrItem.setEnabled(false); - } - if (mHdrPlusItem != null) { - mHdrPlusItem.setEnabled(false); - } - } else { - if (mHdrItem != null) { - mHdrItem.setEnabled(true); - } - if (mHdrPlusItem != null) { - mHdrPlusItem.setEnabled(true); - } - } - } - - if (mListener != null) { - mListener.onSharedPreferenceChanged(); - } - } + LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + ListMenu popup1 = (ListMenu) inflater.inflate( + R.layout.list_menu, null, false); + + popup1.setSettingChangedListener(this); + + String[] keys = mOtherKeys1; + if (mActivity.isDeveloperMenuEnabled()) + keys = mOtherKeys2; + popup1.initialize(mPreferenceGroup, keys); + if (mActivity.isSecureCamera()) { + // Prevent location preference from getting changed in secure camera + // mode + popup1.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION, false); + } + mListMenu = popup1; + + ListPreference pref = mPreferenceGroup.findPreference( + CameraSettings.KEY_SCENE_MODE); + String sceneMode = (pref != null) ? pref.getValue() : null; + pref = mPreferenceGroup.findPreference(CameraSettings.KEY_FACE_DETECTION); + String faceDetection = (pref != null) ? pref.getValue() : null; + pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ZSL); + String zsl = (pref != null) ? pref.getValue() : null; + pref = mPreferenceGroup.findPreference(CameraSettings.KEY_AUTO_HDR); + String autohdr = (pref != null) ? pref.getValue() : null; + if (((sceneMode != null) && !Parameters.SCENE_MODE_AUTO.equals(sceneMode)) + || ((autohdr != null) && autohdr.equals("enable"))) { + popup1.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_AUTOEXPOSURE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_SATURATION, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_CONTRAST, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_SHARPNESS, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_COLOR_EFFECT, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_FLASH_MODE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_WHITE_BALANCE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE, false); + } + if ((autohdr != null) && autohdr.equals("enable")) { + popup1.setPreferenceEnabled(CameraSettings.KEY_SCENE_MODE, false); + } + if ((zsl != null) && Parameters.ZSL_ON.equals(zsl)) { + popup1.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_MANUAL_EXPOSURE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_MANUAL_WB, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_MANUAL_FOCUS, false); + } + if ((faceDetection != null) && !Parameters.FACE_DETECTION_ON.equals(faceDetection)) { + popup1.setPreferenceEnabled(CameraSettings.KEY_FACE_RECOGNITION, false); + } + popup1.setPreferenceEnabled(CameraSettings.KEY_ZSL, !mUI.isCountingDown()); + + pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ADVANCED_FEATURES); + String advancedFeatures = (pref != null) ? pref.getValue() : null; + + String ubiFocusOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_ubifocus_on); + String reFocusOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_refocus_on); + String chromaFlashOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_chromaflash_on); + String optiZoomOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_optizoom_on); + String fssrOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_FSSR_on); + String truePortraitOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_trueportrait_on); + String multiTouchFocusOn = mActivity.getString(R.string. + pref_camera_advanced_feature_value_multi_touch_focus_on); + + if ((zsl != null) && Parameters.ZSL_OFF.equals(zsl)) { + popup1.overrideSettings(CameraSettings.KEY_ADVANCED_FEATURES, + mActivity.getString(R.string.pref_camera_advanced_feature_default)); + + popup1.setPreferenceEnabled(CameraSettings.KEY_ADVANCED_FEATURES, false); + if (mHdrSwitcher.getVisibility() == View.VISIBLE) { + buttonSetEnabled(mHdrSwitcher, true); + } + } else { + if ((advancedFeatures != null) && (advancedFeatures.equals(ubiFocusOn) || + advancedFeatures.equals(chromaFlashOn) || + advancedFeatures.equals(reFocusOn) || + advancedFeatures.equals(optiZoomOn) || + advancedFeatures.equals(fssrOn) || + advancedFeatures.equals(truePortraitOn) || + advancedFeatures.equals(multiTouchFocusOn))) { + popup1.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_FLASH_MODE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_AE_BRACKET_HDR, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_REDEYE_REDUCTION, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_COLOR_EFFECT, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC, false); + popup1.setPreferenceEnabled(CameraSettings.KEY_SCENE_MODE, false); + + setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff); + if (mHdrSwitcher.getVisibility() == View.VISIBLE) { + buttonSetEnabled(mHdrSwitcher, false); + } + } else { + if (mHdrSwitcher.getVisibility() == View.VISIBLE) { + buttonSetEnabled(mHdrSwitcher, true); + } + } + } + + pref = mPreferenceGroup.findPreference(CameraSettings.KEY_SCENE_MODE); + if (pref != null) { + if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) { + buttonSetEnabled(mFilterModeSwitcher, false); + } else { + buttonSetEnabled(mFilterModeSwitcher, true); + } + } + + if (mListener != null) { + mListener.onSharedPreferenceChanged(); + } + } + + public void initSwitchItem(final String prefKey, View switcher) { + final IconListPreference pref = + (IconListPreference) mPreferenceGroup.findPreference(prefKey); + if (pref == null) + return; + + int[] iconIds = pref.getLargeIconIds(); + int resid = -1; + int index = pref.findIndexOfValue(pref.getValue()); + if (!pref.getUseSingleIcon() && iconIds != null) { + // Each entry has a corresponding icon. + resid = iconIds[index]; + } else { + // The preference only has a single icon to represent it. + resid = pref.getSingleIcon(); + } + ImageView iv = (ImageView) ((FrameLayout) switcher).getChildAt(0); + iv.setImageResource(resid); + switcher.setVisibility(View.VISIBLE); + mPreferences.add(pref); + mPreferenceMap.put(pref, switcher); + switcher.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(prefKey); + if (pref == null) + return; + int index = pref.findIndexOfValue(pref.getValue()); + CharSequence[] values = pref.getEntryValues(); + index = (index + 1) % values.length; + pref.setValueIndex(index); + ImageView iv = (ImageView) ((FrameLayout) v).getChildAt(0); + iv.setImageResource(((IconListPreference) pref).getLargeIconIds()[index]); + if (prefKey.equals(CameraSettings.KEY_CAMERA_ID)) + mListener.onCameraPickerClicked(index); + reloadPreference(pref); + onSettingChanged(pref); + } + }); + } + + public void initSceneModeButton(View button) { + button.setVisibility(View.INVISIBLE); + updateSceneModeIcon(); + button.setVisibility(View.VISIBLE); + button.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + addSceneMode(); + View view = mUI.getPreviewMenuLayout().getChildAt(0); + animateSlideIn(view, previewMenuSize, false); + } + }); + } + + public void addModeBack() { + if (mSceneStatus == MODE_SCENE) { + addSceneMode(); + } + if (mSceneStatus == MODE_FILTER) { + addFilterMode(); + } + } + + public void addSceneMode() { + final IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(CameraSettings.KEY_SCENE_MODE); + if (pref == null) + return; + + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; + } + WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + + CharSequence[] entries = pref.getEntries(); + + int[] thumbnails = pref.getThumbnailIds(); + + Resources r = mActivity.getResources(); + int height = (int) (r.getDimension(R.dimen.scene_mode_height) + 2 + * r.getDimension(R.dimen.scene_mode_padding) + 1); + int width = (int) (r.getDimension(R.dimen.scene_mode_width) + 2 + * r.getDimension(R.dimen.scene_mode_padding) + 1); + + int gridRes = 0; + boolean portrait = (rotation == 0) || (rotation == 180); + int size = height; + if (portrait) { + gridRes = R.layout.vertical_grid; + size = width; + } else { + gridRes = R.layout.horiz_grid; + } + previewMenuSize = size; + mUI.hideUI(); + mPreviewMenuStatus = PREVIEW_MENU_ON; + mSceneStatus = MODE_SCENE; + + LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + FrameLayout basic = (FrameLayout) inflater.inflate( + gridRes, null, false); + + mUI.dismissSceneModeMenu(); + LinearLayout previewMenuLayout = new LinearLayout(mActivity); + mUI.setPreviewMenuLayout(previewMenuLayout); + ViewGroup.LayoutParams params = null; + if (portrait) { + params = new ViewGroup.LayoutParams(size, LayoutParams.MATCH_PARENT); + previewMenuLayout.setLayoutParams(params); + ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); + } else { + params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, size); + previewMenuLayout.setLayoutParams(params); + ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); + previewMenuLayout.setY(display.getHeight() - size); + } + basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); + + final View[] views = new View[entries.length]; + int init = pref.getCurrentIndex(); + for (int i = 0; i < entries.length; i++) { + LinearLayout layout2 = (LinearLayout) inflater.inflate( + R.layout.scene_mode_view, null, false); + + ImageView imageView = (ImageView) layout2.findViewById(R.id.image); + TextView label = (TextView) layout2.findViewById(R.id.label); + final int j = i; + + layout2.setOnTouchListener(new View.OnTouchListener() { + private long startTime; + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + startTime = System.currentTimeMillis(); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + if (System.currentTimeMillis() - startTime < CLICK_THRESHOLD) { + pref.setValueIndex(j); + onSettingChanged(pref); + updateSceneModeIcon(); + for (View v1 : views) { + v1.setBackgroundResource(R.drawable.scene_mode_view_border); + } + View border = v.findViewById(R.id.border); + border.setBackgroundResource(R.drawable.scene_mode_view_border_selected); + } + + } + return true; + } + }); + + View border = layout2.findViewById(R.id.border); + views[j] = border; + if (i == init) + border.setBackgroundResource(R.drawable.scene_mode_view_border_selected); + imageView.setImageResource(thumbnails[i]); + label.setText(entries[i]); + layout.addView(layout2); + } + previewMenuLayout.addView(basic); + mPreviewMenu = basic; + } + + public void updateSceneModeIcon() { + final IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(CameraSettings.KEY_SCENE_MODE); + if (pref == null) + return; + ImageView iv = (ImageView) ((FrameLayout) mSceneModeSwitcher).getChildAt(0); + int[] thumbnails = pref.getThumbnailIds(); + int ind = pref.getCurrentIndex(); + if (ind == -1) + ind = 0; + iv.setImageResource(thumbnails[ind]); + } + + public void initFilterModeButton(View button) { + button.setVisibility(View.INVISIBLE); + final IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(CameraSettings.KEY_COLOR_EFFECT); + if (pref == null) + return; + + int[] iconIds = pref.getLargeIconIds(); + int resid = -1; + // The preference only has a single icon to represent it. + resid = pref.getSingleIcon(); + ImageView iv = (ImageView) ((FrameLayout) button).getChildAt(0); + iv.setImageResource(resid); + button.setVisibility(View.VISIBLE); + button.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + addFilterMode(); + View view = mUI.getPreviewMenuLayout().getChildAt(0); + animateSlideIn(view, previewMenuSize, false); + } + }); + } + + public void addFilterMode() { + final IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(CameraSettings.KEY_COLOR_EFFECT); + if (pref == null) + return; + + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; + } + WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + CharSequence[] entries = pref.getEntries(); + + Resources r = mActivity.getResources(); + int height = (int) (r.getDimension(R.dimen.filter_mode_height) + 2 + * r.getDimension(R.dimen.filter_mode_padding) + 1); + int width = (int) (r.getDimension(R.dimen.filter_mode_width) + 2 + * r.getDimension(R.dimen.filter_mode_padding) + 1); + + int gridRes = 0; + boolean portrait = (rotation == 0) || (rotation == 180); + int size = height; + if (portrait) { + gridRes = R.layout.vertical_grid; + size = width; + } else { + gridRes = R.layout.horiz_grid; + } + previewMenuSize = size; + mUI.hideUI(); + mPreviewMenuStatus = PREVIEW_MENU_ON; + mSceneStatus = MODE_FILTER; + + int[] thumbnails = pref.getThumbnailIds(); + + LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + FrameLayout basic = (FrameLayout) inflater.inflate( + gridRes, null, false); + + mUI.dismissSceneModeMenu(); + LinearLayout previewMenuLayout = new LinearLayout(mActivity); + mUI.setPreviewMenuLayout(previewMenuLayout); + ViewGroup.LayoutParams params = null; + if (portrait) { + params = new ViewGroup.LayoutParams(size, LayoutParams.MATCH_PARENT); + previewMenuLayout.setLayoutParams(params); + ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); + } else { + params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, size); + previewMenuLayout.setLayoutParams(params); + ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); + previewMenuLayout.setY(display.getHeight() - size); + } + basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); + final View[] views = new View[entries.length]; + int init = pref.getCurrentIndex(); + for (int i = 0; i < entries.length; i++) { + LinearLayout layout2 = (LinearLayout) inflater.inflate( + R.layout.filter_mode_view, null, false); + ImageView imageView = (ImageView) layout2.findViewById(R.id.image); + final int j = i; + + layout2.setOnTouchListener(new View.OnTouchListener() { + private long startTime; + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + startTime = System.currentTimeMillis(); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + if (System.currentTimeMillis() - startTime < CLICK_THRESHOLD) { + pref.setValueIndex(j); + onSettingChanged(pref); + for (View v1 : views) { + v1.setBackground(null); + } + ImageView image = (ImageView) v.findViewById(R.id.image); + image.setBackgroundColor(0xff33b5e5); + } + } + return true; + } + }); + + views[j] = imageView; + if (i == init) + imageView.setBackgroundColor(0xff33b5e5); + TextView label = (TextView) layout2.findViewById(R.id.label); + imageView.setImageResource(thumbnails[i]); + label.setText(entries[i]); + layout.addView(layout2); + } + previewMenuLayout.addView(basic); + mPreviewMenu = basic; + } + + public void openFirstLevel() { + if (isMenuBeingShown() || CameraControls.isAnimating()) + return; + if (mListMenu == null || mPopupStatus != POPUP_FIRST_LEVEL) { + initializePopup(); + mPopupStatus = POPUP_FIRST_LEVEL; + } + mUI.showPopup(mListMenu, 1, true); + + } public void popupDismissed(boolean dismissAll) { if (!dismissAll && mPopupStatus == POPUP_SECOND_LEVEL) { initializePopup(); mPopupStatus = POPUP_FIRST_LEVEL; - if (popupNum == 1) - mUI.showPopup(mPopup1); - else if (popupNum == 2) - mUI.showPopup(mPopup2); - else if (popupNum == 3) - mUI.showPopup(mPopup3); + mUI.showPopup(mListMenu, 1, false); + if (mListMenu != null) + mListMenu = null; + } else { initializePopup(); } } - @Override + @Override // Hit when an item in the first-level popup gets selected, then bring up // the second-level popup public void onPreferenceClicked(ListPreference pref) { - if (mPopupStatus != POPUP_FIRST_LEVEL) return; + onPreferenceClicked(pref, 0); + } + + public void onPreferenceClicked(ListPreference pref, int y) { + if (!mActivity.isDeveloperMenuEnabled()) { + if (pref.getKey().equals(CameraSettings.KEY_REDEYE_REDUCTION)) { + privateCounter++; + if (privateCounter >= DEVELOPER_MENU_TOUCH_COUNT) { + mActivity.enableDeveloperMenu(); + SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(mActivity); + prefs.edit().putBoolean(CameraSettings.KEY_DEVELOPER_MENU, true).apply(); + Toast toast = Toast.makeText(mActivity, + "Camera developer option is enabled now", Toast.LENGTH_SHORT); + toast.show(); + } + } else { + privateCounter = 0; + } + } LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( Context.LAYOUT_INFLATER_SERVICE); - ListPrefSettingPopup basic = (ListPrefSettingPopup) inflater.inflate( - R.layout.list_pref_setting_popup, null, false); - basic.initialize(pref); + ListSubMenu basic = (ListSubMenu) inflater.inflate( + R.layout.list_sub_menu, null, false); + basic.initialize(pref, y); basic.setSettingChangedListener(this); - mUI.dismissPopup(); - mPopup = basic; - mUI.showPopup(mPopup); + basic.setAlpha(0f); + mListSubMenu = basic; + mUI.removeLevel2(); + if (mPopupStatus == POPUP_SECOND_LEVEL) { + mUI.showPopup(mListSubMenu, 2, false); + } else { + mUI.showPopup(mListSubMenu, 2, true); + } mPopupStatus = POPUP_SECOND_LEVEL; } + public void onListMenuTouched() { + mUI.removeLevel2(); + } + + public void closeAllView() { + if (mUI != null) + mUI.removeLevel2(); + + if (mListMenu != null) { + animateSlideOut(mListMenu, 1); + } + animateSlideOutPreviewMenu(); + } + + public void closeView() { + if (mUI != null) + mUI.removeLevel2(); + + if (mListMenu != null && mPopupStatus != POPUP_NONE) + animateSlideOut(mListMenu, 1); + } + // Return true if the preference has the specified key but not the value. private static boolean notSame(ListPreference pref, String key, String value) { return (key.equals(pref.getKey()) && !value.equals(pref.getValue())); @@ -496,6 +1093,12 @@ public class PhotoMenu extends PieController setPreference(CameraSettings.KEY_LONGSHOT, mSettingOff); } } + + if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) { + buttonSetEnabled(mFilterModeSwitcher, false); + } else { + buttonSetEnabled(mFilterModeSwitcher, true); + } super.onSettingChanged(pref); } diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 5fb7ac726..2d6a0f256 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -539,6 +539,7 @@ public class PhotoModule CameraSettings.KEY_BRIGHTNESS, DEFAULT_BRIGHTNESS); brightnessProgressBar.setProgress(mbrightness); + brightnessProgressBar.setVisibility(View.INVISIBLE); skinToneSeekBar = (SeekBar) mRootView.findViewById(R.id.skintoneseek); skinToneSeekBar.setOnSeekBarChangeListener(mskinToneSeekListener); skinToneSeekBar.setVisibility(View.INVISIBLE); @@ -2475,7 +2476,7 @@ public class PhotoModule Editor editor = mPreferences.edit(); editor.putInt(CameraSettings.KEY_BRIGHTNESS, mbrightness); editor.apply(); - brightnessProgressBar.setVisibility(View.VISIBLE); + brightnessProgressBar.setVisibility(View.INVISIBLE); mBrightnessVisible = true; } break; @@ -2496,7 +2497,7 @@ public class PhotoModule Editor editor = mPreferences.edit(); editor.putInt(CameraSettings.KEY_BRIGHTNESS, mbrightness); editor.apply(); - brightnessProgressBar.setVisibility(View.VISIBLE); + brightnessProgressBar.setVisibility(View.INVISIBLE); mBrightnessVisible = true; } break; @@ -4323,7 +4324,7 @@ public class PhotoModule Integer.toString(mskinToneValue - MIN_SCE_FACTOR)); editor.apply(); if ((brightnessProgressBar != null) && mBrightnessVisible) - brightnessProgressBar.setVisibility(View.VISIBLE); + brightnessProgressBar.setVisibility(View.INVISIBLE); } /* diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 40672547a..48fb2f704 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -103,7 +103,6 @@ public class PhotoUI implements PieListener, private View mMenuButton; private PhotoMenu mMenu; - private CustomPhotoMenu mCustomPhotoMenu; private ModuleSwitcher mSwitcher; private CameraControls mCameraControls; private AlertDialog mLocationDialog; @@ -120,8 +119,10 @@ public class PhotoUI implements PieListener, private int mPreviewWidth = 0; private int mPreviewHeight = 0; + private int mOriginalPreviewWidth = 0; + private int mOriginalPreviewHeight = 0; + public boolean mMenuInitialized = false; - public boolean mCustomPhotoMenuInitialized = false; private float mSurfaceTextureUncroppedWidth; private float mSurfaceTextureUncroppedHeight; @@ -181,21 +182,28 @@ public class PhotoUI implements PieListener, width = height; height = oldWidth; Log.d(TAG, "Swapping SurfaceView width & height dimensions"); + if (mOriginalPreviewWidth != 0 && mOriginalPreviewHeight != 0) { + int temp = mOriginalPreviewWidth; + mOriginalPreviewWidth = mOriginalPreviewHeight; + mOriginalPreviewHeight = temp; + } } if (mPreviewWidth != width || mPreviewHeight != height || (mOrientationResize != mPrevOrientationResize) || mAspectRatioResize) { + if (mOriginalPreviewWidth == 0) mOriginalPreviewWidth = width; + if (mOriginalPreviewHeight == 0) mOriginalPreviewHeight = height; mPreviewWidth = width; mPreviewHeight = height; - setTransformMatrix(width, height); + setTransformMatrix(mOriginalPreviewWidth, mOriginalPreviewHeight); mController.onScreenSizeChanged((int) mSurfaceTextureUncroppedWidth, (int) mSurfaceTextureUncroppedHeight); mAspectRatioResize = false; } - if (mCustomPhotoMenu != null) - mCustomPhotoMenu.tryToCloseSubList(); + if (mMenu != null) + mMenu.tryToCloseSubList(); } }; @@ -373,7 +381,6 @@ public class PhotoUI implements PieListener, + ", scaledTextureHeight = " + scaledTextureHeight); mTempWidth = (int) scaledTextureWidth; mTempHeight = (int) scaledTextureHeight; - mSurfaceView.requestLayout(); mSurfaceViewUpdateHandler.post(updateSurfaceView); // Calculate the new preview rectangle. @@ -429,19 +436,12 @@ public class PhotoUI implements PieListener, } if (mMenu == null) { - mMenu = new PhotoMenu(mActivity, this, mPieRenderer); + mMenu = new PhotoMenu(mActivity, this); mMenu.setListener(listener); } mMenu.initialize(prefGroup); mMenuInitialized = true; - if (mCustomPhotoMenu == null) { - mCustomPhotoMenu = new CustomPhotoMenu(mActivity, this); - mCustomPhotoMenu.setListener(listener); - } - mCustomPhotoMenu.initialize(prefGroup); - mCustomPhotoMenuInitialized = true; - if (mZoomRenderer == null) { mZoomRenderer = new ZoomRenderer(mActivity); mRenderOverlay.addRenderer(mZoomRenderer); @@ -452,7 +452,7 @@ public class PhotoUI implements PieListener, mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer); mRenderOverlay.setGestures(mGestures); } - mGestures.setCustomPhotoMenu(mCustomPhotoMenu); + mGestures.setPhotoMenu(mMenu); mGestures.setZoomEnabled(params.isZoomSupported()); mGestures.setRenderOverlay(mRenderOverlay); @@ -493,7 +493,7 @@ public class PhotoUI implements PieListener, mMenuButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - mCustomPhotoMenu.openFirstLevel(); + mMenu.openFirstLevel(); } }); if (mController.isImageCaptureIntent()) { @@ -538,7 +538,7 @@ public class PhotoUI implements PieListener, } public void showUI() { - if (!mUIhidden || (mCustomPhotoMenu != null && mCustomPhotoMenu.isMenuBeingShown())) + if (!mUIhidden || (mMenu != null && mMenu.isMenuBeingShown())) return; mUIhidden = false; mCameraControls.showUI(); @@ -589,9 +589,6 @@ public class PhotoUI implements PieListener, if (mMenu != null) { mMenu.reloadPreferences(); } - if (mCustomPhotoMenu != null) { - mCustomPhotoMenu.reloadPreferences(); - } } public void showLocationDialog() { @@ -645,8 +642,6 @@ public class PhotoUI implements PieListener, public void hideGpsOnScreenIndicator() { } public void overrideSettings(final String ... keyvalues) { - if (mCustomPhotoMenu != null) - mCustomPhotoMenu.overrideSettings(keyvalues); if (mMenu == null) return; mMenu.overrideSettings(keyvalues); @@ -696,7 +691,7 @@ public class PhotoUI implements PieListener, } public boolean onBackPressed() { - if (mCustomPhotoMenu != null && mCustomPhotoMenu.handleBackKey()) { + if (mMenu != null && mMenu.handleBackKey()) { return true; } @@ -783,9 +778,9 @@ public class PhotoUI implements PieListener, } if (animate) { if (level == 1) - mCustomPhotoMenu.animateSlideIn(popup, CameraActivity.SETTING_LIST_WIDTH_1, true); + mMenu.animateSlideIn(popup, CameraActivity.SETTING_LIST_WIDTH_1, true); if (level == 2) - mCustomPhotoMenu.animateFadeIn(popup); + mMenu.animateFadeIn(popup); } else popup.setAlpha(0.85f); } @@ -809,7 +804,7 @@ public class PhotoUI implements PieListener, @Override public void onDismiss() { mPopup = null; - mMenu.popupDismissed(mDismissAll); + // mMenu.popupDismissed(mDismissAll); mDismissAll = false; showUI(); @@ -899,8 +894,8 @@ public class PhotoUI implements PieListener, mSwitcher.closePopup(); // Remove all the popups/dialog boxes boolean ret = false; - if (mCustomPhotoMenu != null) { - mCustomPhotoMenu.closeAllView(); + if (mMenu != null) { + mMenu.closeAllView(); } if (mPopup != null) { dismissAllPopup(); @@ -939,9 +934,9 @@ public class PhotoUI implements PieListener, mFaceView.setDisplayOrientation(orientation); } if ((mPreviewOrientation == -1 || mPreviewOrientation != orientation) - && mCustomPhotoMenu != null && mCustomPhotoMenu.isPreviewMenuBeingShown()) { + && mMenu != null && mMenu.isPreviewMenuBeingShown()) { dismissSceneModeMenu(); - mCustomPhotoMenu.addModeBack(); + mMenu.addModeBack(); } mPreviewOrientation = orientation; } diff --git a/src/com/android/camera/PreviewGestures.java b/src/com/android/camera/PreviewGestures.java index f4f8296ab..ce461aadd 100644 --- a/src/com/android/camera/PreviewGestures.java +++ b/src/com/android/camera/PreviewGestures.java @@ -21,8 +21,8 @@ import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View; -import com.android.camera.CustomPhotoMenu; -import com.android.camera.CustomVideoMenu; +import com.android.camera.PhotoMenu; +import com.android.camera.VideoMenu; import com.android.camera.ui.PieRenderer; import com.android.camera.ui.RenderOverlay; import com.android.camera.ui.ZoomRenderer; @@ -56,8 +56,8 @@ public class PreviewGestures private boolean mEnabled; private boolean mZoomOnly; private GestureDetector mGestureDetector; - private CustomPhotoMenu mCustomPhotoMenu; - private CustomVideoMenu mCustomVideoMenu; + private PhotoMenu mPhotoMenu; + private VideoMenu mVideoMenu; private boolean waitUntilNextDown; private boolean setToFalse; @@ -100,15 +100,15 @@ public class PreviewGestures if (deltaX < 0 && Math.abs(deltaX) > 2 * Math.abs(deltaY)) { // Open menu on swipe left waitUntilNextDown = true; - if (mCustomPhotoMenu != null) { - if (!mCustomPhotoMenu.isMenuBeingShown()) { - mCustomPhotoMenu.openFirstLevel(); + if (mPhotoMenu != null) { + if (!mPhotoMenu.isMenuBeingShown()) { + mPhotoMenu.openFirstLevel(); } } - if (mCustomVideoMenu != null) { - if (!mCustomVideoMenu.isMenuBeingShown()) { - mCustomVideoMenu.openFirstLevel(); + if (mVideoMenu != null) { + if (!mVideoMenu.isMenuBeingShown()) { + mVideoMenu.openFirstLevel(); } } return true; @@ -152,20 +152,20 @@ public class PreviewGestures return mEnabled; } - public void setCustomPhotoMenu(CustomPhotoMenu menu) { - mCustomPhotoMenu = menu; + public void setPhotoMenu(PhotoMenu menu) { + mPhotoMenu = menu; } - public void setCustomVideoMenu(CustomVideoMenu menu) { - mCustomVideoMenu = menu; + public void setVideoMenu(VideoMenu menu) { + mVideoMenu = menu; } - public CustomPhotoMenu getCustomPhotoMenu() { - return mCustomPhotoMenu; + public PhotoMenu getPhotoMenu() { + return mPhotoMenu; } - public CustomVideoMenu getCustomVideoMenu() { - return mCustomVideoMenu; + public VideoMenu getVideoMenu() { + return mVideoMenu; } public boolean dispatchTouch(MotionEvent m) { @@ -196,33 +196,33 @@ public class PreviewGestures return sendToPie(m); } - if (mCustomPhotoMenu != null) { - if (mCustomPhotoMenu.isMenuBeingShown()) { - if (!mCustomPhotoMenu.isMenuBeingAnimated()) { + if (mPhotoMenu != null) { + if (mPhotoMenu.isMenuBeingShown()) { + if (!mPhotoMenu.isMenuBeingAnimated()) { waitUntilNextDown = true; - mCustomPhotoMenu.closeView(); + mPhotoMenu.closeView(); } return true; } - if (mCustomPhotoMenu.isPreviewMenuBeingShown()) { + if (mPhotoMenu.isPreviewMenuBeingShown()) { waitUntilNextDown = true; - mCustomPhotoMenu.animateSlideOutPreviewMenu(); + mPhotoMenu.animateSlideOutPreviewMenu(); return true; } } - if (mCustomVideoMenu != null) { - if (mCustomVideoMenu.isMenuBeingShown()) { - if (!mCustomVideoMenu.isMenuBeingAnimated()) { + if (mVideoMenu != null) { + if (mVideoMenu.isMenuBeingShown()) { + if (!mVideoMenu.isMenuBeingAnimated()) { waitUntilNextDown = true; - mCustomVideoMenu.closeView(); + mVideoMenu.closeView(); } return true; } - if (mCustomVideoMenu.isPreviewMenuBeingShown()) { + if (mVideoMenu.isPreviewMenuBeingShown()) { waitUntilNextDown = true; - mCustomVideoMenu.animateSlideOutPreviewMenu(); + mVideoMenu.animateSlideOutPreviewMenu(); return true; } } diff --git a/src/com/android/camera/VideoMenu.java b/src/com/android/camera/VideoMenu.java index 08cb3849c..3f9cde7f0 100644 --- a/src/com/android/camera/VideoMenu.java +++ b/src/com/android/camera/VideoMenu.java @@ -16,155 +16,559 @@ package com.android.camera; +import android.animation.Animator; +import android.animation.Animator.AnimatorListener; import android.content.Context; +import android.content.res.Resources; +import android.content.SharedPreferences; +import android.graphics.Rect; +import android.preference.PreferenceManager; +import android.util.Log; import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewPropertyAnimator; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.FrameLayout; +import android.widget.FrameLayout.LayoutParams; -import com.android.camera.ui.AbstractSettingPopup; -import com.android.camera.ui.ListPrefSettingPopup; -import com.android.camera.ui.MoreSettingPopup; -import com.android.camera.ui.PieItem; -import com.android.camera.ui.PieItem.OnClickListener; -import com.android.camera.ui.PieRenderer; +import com.android.camera.ui.CameraControls; +import com.android.camera.ui.ListSubMenu; +import com.android.camera.ui.ListMenu; import com.android.camera.ui.TimeIntervalPopup; +import com.android.camera.ui.RotateImageView; import org.codeaurora.snapcam.R; +import android.widget.HorizontalScrollView; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.Display; +import com.android.camera.util.CameraUtil; -public class VideoMenu extends PieController - implements MoreSettingPopup.Listener, - ListPrefSettingPopup.Listener, +public class VideoMenu extends MenuController + implements ListMenu.Listener, + ListSubMenu.Listener, TimeIntervalPopup.Listener { - private static String TAG = "CAM_VideoMenu"; + private static String TAG = "VideoMenu"; private VideoUI mUI; private String[] mOtherKeys1; private String[] mOtherKeys2; - private AbstractSettingPopup mPopup1; - private AbstractSettingPopup mPopup2; - + private ListMenu mListMenu; + private ListSubMenu mListSubMenu; + private View mPreviewMenu; private static final int POPUP_NONE = 0; private static final int POPUP_FIRST_LEVEL = 1; private static final int POPUP_SECOND_LEVEL = 2; + private static final int POPUP_IN_ANIMATION = 3; + private static final int PREVIEW_MENU_NONE = 0; + private static final int PREVIEW_MENU_IN_ANIMATION = 1; + private static final int PREVIEW_MENU_ON = 2; + private static final int MODE_FILTER = 1; + private int mSceneStatus; + private View mFrontBackSwitcher; + private View mFilterModeSwitcher; private int mPopupStatus; - private int popupNum; + private int mPreviewMenuStatus; private CameraActivity mActivity; private String mPrevSavedVideoCDS; private boolean mIsVideoTNREnabled = false; private boolean mIsVideoCDSUpdated = false; + private static final int ANIMATION_DURATION = 300; + private static final int CLICK_THRESHOLD = 200; + private int previewMenuSize; - public VideoMenu(CameraActivity activity, VideoUI ui, PieRenderer pie) { - super(activity, pie); + public VideoMenu(CameraActivity activity, VideoUI ui) { + super(activity); mUI = ui; mActivity = activity; + mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher); + mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher); } public void initialize(PreferenceGroup group) { super.initialize(group); - mPopup1 = null; - mPopup2 = null; - popupNum = 0; + mListMenu = null; + mListSubMenu = null; mPopupStatus = POPUP_NONE; - PieItem item = null; + mPreviewMenuStatus = POPUP_NONE; + initFilterModeButton(mFilterModeSwitcher); // settings popup mOtherKeys1 = new String[] { - CameraSettings.KEY_DIS, - CameraSettings.KEY_VIDEO_EFFECT, - CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL, CameraSettings.KEY_VIDEO_QUALITY, - CameraSettings.KEY_VIDEO_ENCODER, - CameraSettings.KEY_AUDIO_ENCODER, CameraSettings.KEY_VIDEO_DURATION, CameraSettings.KEY_RECORD_LOCATION, - CameraSettings.KEY_CAMERA_SAVEPATH + CameraSettings.KEY_CAMERA_SAVEPATH, + CameraSettings.KEY_WHITE_BALANCE, + CameraSettings.KEY_VIDEO_HIGH_FRAME_RATE, + CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE }; - - //settings popup - mOtherKeys2 = new String[] { - CameraSettings.KEY_COLOR_EFFECT, - CameraSettings.KEY_VIDEO_HDR, - CameraSettings.KEY_POWER_MODE, + mOtherKeys2 = new String[] { + CameraSettings.KEY_VIDEO_QUALITY, + CameraSettings.KEY_VIDEO_DURATION, + CameraSettings.KEY_RECORD_LOCATION, + CameraSettings.KEY_CAMERA_SAVEPATH, CameraSettings.KEY_WHITE_BALANCE, CameraSettings.KEY_VIDEO_HIGH_FRAME_RATE, CameraSettings.KEY_SEE_MORE, CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE, + CameraSettings.KEY_DIS, + CameraSettings.KEY_VIDEO_EFFECT, + CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL, + CameraSettings.KEY_VIDEO_ENCODER, + CameraSettings.KEY_AUDIO_ENCODER, + CameraSettings.KEY_VIDEO_HDR, + CameraSettings.KEY_POWER_MODE, CameraSettings.KEY_VIDEO_ROTATION, CameraSettings.KEY_VIDEO_CDS_MODE, CameraSettings.KEY_VIDEO_TNR_MODE - }; + }; + mFrontBackSwitcher.setVisibility(View.INVISIBLE); + initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher); + } + + public boolean handleBackKey() { + if (mPreviewMenuStatus == PREVIEW_MENU_ON) { + animateSlideOut(mPreviewMenu); + return true; + } + if (mPopupStatus == POPUP_NONE) + return false; + if (mPopupStatus == POPUP_FIRST_LEVEL) { + animateSlideOut(mListMenu, 1); + } else if (mPopupStatus == POPUP_SECOND_LEVEL) { + animateFadeOut(mListSubMenu, 2); + ((ListMenu) mListMenu).resetHighlight(); + } + return true; + } + + public void closeSceneMode() { + mUI.removeSceneModeMenu(); + } + + public void tryToCloseSubList() { + if (mListMenu != null) + ((ListMenu) mListMenu).resetHighlight(); + + if (mPopupStatus == POPUP_SECOND_LEVEL) { + mUI.dismissLevel2(); + mPopupStatus = POPUP_FIRST_LEVEL; + } + } + + private void animateFadeOut(final ListView v, final int level) { + if (v == null || mPopupStatus == POPUP_IN_ANIMATION) + return; + mPopupStatus = POPUP_IN_ANIMATION; + + ViewPropertyAnimator vp = v.animate(); + vp.alpha(0f).setDuration(ANIMATION_DURATION); + vp.setListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } - PieItem item1 = makeItem(R.drawable.ic_settings_holo_light_01); - item1.setLabel(mActivity.getResources().getString(R.string.camera_menu_more_label)); - item1.setOnClickListener(new OnClickListener() { @Override - public void onClick(PieItem item) { - if (mPopup1 == null || mPopupStatus != POPUP_FIRST_LEVEL) { + public void onAnimationRepeat(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); mPopupStatus = POPUP_FIRST_LEVEL; } - mUI.showPopup(mPopup1); - popupNum = 1; + } + + @Override + public void onAnimationCancel(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); + initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); + mPopupStatus = POPUP_FIRST_LEVEL; + } + } }); - mRenderer.addItem(item1); + vp.start(); + } + + private void animateSlideOut(final ListView v, final int level) { + if (v == null || mPopupStatus == POPUP_IN_ANIMATION) + return; + mPopupStatus = POPUP_IN_ANIMATION; + + ViewPropertyAnimator vp = v.animate(); + vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); + vp.setListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); + initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); + mPopupStatus = POPUP_FIRST_LEVEL; + } + } - PieItem item2 = makeItem(R.drawable.ic_settings_holo_light_02); - item2.setLabel(mActivity.getResources().getString(R.string.camera_menu_more_label)); - item2.setOnClickListener(new OnClickListener() { @Override - public void onClick(PieItem item) { - if (mPopup2 == null || mPopupStatus != POPUP_FIRST_LEVEL) { + public void onAnimationCancel(Animator animation) { + if (level == 1) { + mUI.dismissLevel1(); initializePopup(); + mPopupStatus = POPUP_NONE; + mUI.cleanupListview(); + } + else if (level == 2) { + mUI.dismissLevel2(); mPopupStatus = POPUP_FIRST_LEVEL; } - mUI.showPopup(mPopup2); - popupNum = 2; + + } + }); + vp.start(); + } + + public void animateFadeIn(final ListView v) { + ViewPropertyAnimator vp = v.animate(); + vp.alpha(0.85f).setDuration(ANIMATION_DURATION); + vp.start(); + } + + public void animateSlideIn(final View v, int delta, boolean settingMenu) { + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; + } + boolean portrait = (rotation == 0) || (rotation == 180); + if (settingMenu) + portrait = true; + ViewPropertyAnimator vp = v.animate(); + if (portrait) { + float dest = v.getX(); + v.setX(dest - delta); + vp.translationX(dest).setDuration(ANIMATION_DURATION); + } + else { + float dest = v.getY(); + v.setY(dest + delta); + vp.translationY(dest).setDuration(ANIMATION_DURATION); + } + vp.start(); + } + + public void animateSlideOutPreviewMenu() { + if (mPreviewMenu == null) + return; + animateSlideOut(mPreviewMenu); + } + + private void animateSlideOut(final View v) { + if (v == null || mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION) + return; + mPreviewMenuStatus = PREVIEW_MENU_IN_ANIMATION; + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; + } + boolean portrait = (rotation == 0) || (rotation == 180); + ViewPropertyAnimator vp = v.animate(); + if (portrait) { + vp.translationX(v.getX() - v.getWidth()).setDuration(ANIMATION_DURATION); + + } else { + vp.translationY(v.getY() + v.getHeight()).setDuration(ANIMATION_DURATION); + + } + vp.setListener(new AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + closeSceneMode(); + mPreviewMenuStatus = PREVIEW_MENU_NONE; + } + + @Override + public void onAnimationCancel(Animator animation) { + closeSceneMode(); + mPreviewMenuStatus = PREVIEW_MENU_NONE; } }); - mRenderer.addItem(item2); + vp.start(); + } - // camera switcher - if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) { - item = makeItem(R.drawable.ic_switch_back); - IconListPreference lpref = (IconListPreference) group.findPreference( - CameraSettings.KEY_CAMERA_ID); - item.setLabel(lpref.getLabel()); - item.setImageResource(mActivity, - ((IconListPreference) lpref).getIconIds() - [lpref.findIndexOfValue(lpref.getValue())]); + public boolean isOverMenu(MotionEvent ev) { + if (mPopupStatus == POPUP_NONE || mPopupStatus == POPUP_IN_ANIMATION) + return false; + if (mUI.getMenuLayout() == null) + return false; + Rect rec = new Rect(); + mUI.getMenuLayout().getChildAt(0).getHitRect(rec); + return rec.contains((int) ev.getX(), (int) ev.getY()); + } - final PieItem fitem = item; - item.setOnClickListener(new OnClickListener() { + public boolean isOverPreviewMenu(MotionEvent ev) { + if (mPreviewMenuStatus != PREVIEW_MENU_ON) + return false; + if (mUI.getPreviewMenuLayout() == null) + return false; + Rect rec = new Rect(); + mUI.getPreviewMenuLayout().getChildAt(0).getHitRect(rec); + rec.top += (int) mUI.getPreviewMenuLayout().getY(); + rec.bottom += (int) mUI.getPreviewMenuLayout().getY(); + return rec.contains((int) ev.getX(), (int) ev.getY()); + } + + public boolean isMenuBeingShown() { + return mPopupStatus != POPUP_NONE; + } + + public boolean isMenuBeingAnimated() { + return mPopupStatus == POPUP_IN_ANIMATION; + } + + public boolean isPreviewMenuBeingShown() { + return mPreviewMenuStatus == PREVIEW_MENU_ON; + } + + public boolean isPreviewMenuBeingAnimated() { + return mPreviewMenuStatus == PREVIEW_MENU_IN_ANIMATION; + } + + public boolean sendTouchToPreviewMenu(MotionEvent ev) { + return mUI.sendTouchToPreviewMenu(ev); + } + + public boolean sendTouchToMenu(MotionEvent ev) { + return mUI.sendTouchToMenu(ev); + } + + public void initSwitchItem(final String prefKey, View switcher) { + final IconListPreference pref = + (IconListPreference) mPreferenceGroup.findPreference(prefKey); + if (pref == null) + return; + + int[] iconIds = pref.getLargeIconIds(); + int resid = -1; + int index = pref.findIndexOfValue(pref.getValue()); + if (!pref.getUseSingleIcon() && iconIds != null) { + // Each entry has a corresponding icon. + resid = iconIds[index]; + } else { + // The preference only has a single icon to represent it. + resid = pref.getSingleIcon(); + } + ImageView iv = (ImageView) ((FrameLayout) switcher).getChildAt(0); + iv.setImageResource(resid); + switcher.setVisibility(View.VISIBLE); + mPreferences.add(pref); + mPreferenceMap.put(pref, switcher); + switcher.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(prefKey); + if (pref == null) + return; + int index = pref.findIndexOfValue(pref.getValue()); + CharSequence[] values = pref.getEntryValues(); + index = (index + 1) % values.length; + pref.setValueIndex(index); + ImageView iv = (ImageView) ((FrameLayout) v).getChildAt(0); + iv.setImageResource(((IconListPreference) pref).getLargeIconIds()[index]); + if (prefKey.equals(CameraSettings.KEY_CAMERA_ID)) + mListener.onCameraPickerClicked(index); + reloadPreference(pref); + onSettingChanged(pref); + } + }); + } + + public void initFilterModeButton(View button) { + button.setVisibility(View.INVISIBLE); + final IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(CameraSettings.KEY_COLOR_EFFECT); + if (pref == null) + return; + + int[] iconIds = pref.getLargeIconIds(); + int resid = -1; + // The preference only has a single icon to represent it. + resid = pref.getSingleIcon(); + ImageView iv = (ImageView) ((FrameLayout) button).getChildAt(0); + iv.setImageResource(resid); + button.setVisibility(View.VISIBLE); + button.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + addFilterMode(); + View view = mUI.getPreviewMenuLayout().getChildAt(0); + animateSlideIn(view, previewMenuSize, false); + } + }); + } + + public void addModeBack() { + if (mSceneStatus == MODE_FILTER) { + addFilterMode(); + } + } + + public void addFilterMode() { + final IconListPreference pref = (IconListPreference) mPreferenceGroup + .findPreference(CameraSettings.KEY_COLOR_EFFECT); + if (pref == null) + return; + + int rotation = CameraUtil.getDisplayRotation(mActivity); + boolean mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait(mActivity); + if (!mIsDefaultToPortrait) { + rotation = (rotation + 90) % 360; + } + WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + CharSequence[] entries = pref.getEntries(); + + Resources r = mActivity.getResources(); + int height = (int) (r.getDimension(R.dimen.filter_mode_height) + 2 + * r.getDimension(R.dimen.filter_mode_padding) + 1); + int width = (int) (r.getDimension(R.dimen.filter_mode_width) + 2 + * r.getDimension(R.dimen.filter_mode_padding) + 1); + + int gridRes = 0; + boolean portrait = (rotation == 0) || (rotation == 180); + int size = height; + if (portrait) { + gridRes = R.layout.vertical_grid; + size = width; + } else { + gridRes = R.layout.horiz_grid; + } + previewMenuSize = size; + mUI.hideUI(); + mPreviewMenuStatus = PREVIEW_MENU_ON; + mSceneStatus = MODE_FILTER; + + int[] thumbnails = pref.getThumbnailIds(); + + LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + FrameLayout basic = (FrameLayout) inflater.inflate( + gridRes, null, false); + + mUI.dismissSceneModeMenu(); + LinearLayout previewMenuLayout = new LinearLayout(mActivity); + mUI.setPreviewMenuLayout(previewMenuLayout); + ViewGroup.LayoutParams params = null; + if (portrait) { + params = new ViewGroup.LayoutParams(size, LayoutParams.MATCH_PARENT); + previewMenuLayout.setLayoutParams(params); + ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); + } else { + params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, size); + previewMenuLayout.setLayoutParams(params); + ((ViewGroup) mUI.getRootView()).addView(previewMenuLayout); + previewMenuLayout.setY(display.getHeight() - size); + } + basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); + + final View[] views = new View[entries.length]; + int init = pref.getCurrentIndex(); + for (int i = 0; i < entries.length; i++) { + LinearLayout layout2 = (LinearLayout) inflater.inflate( + R.layout.filter_mode_view, null, false); + + ImageView imageView = (ImageView) layout2.findViewById(R.id.image); + final int j = i; + + layout2.setOnTouchListener(new View.OnTouchListener() { + private long startTime; @Override - public void onClick(PieItem item) { - // Find the index of next camera. - ListPreference pref = - mPreferenceGroup.findPreference(CameraSettings.KEY_CAMERA_ID); - if (pref != null) { - int index = pref.findIndexOfValue(pref.getValue()); - CharSequence[] values = pref.getEntryValues(); - index = (index + 1) % values.length; - int newCameraId = Integer.parseInt((String) values[index]); - fitem.setImageResource(mActivity, - ((IconListPreference) pref).getIconIds()[index]); - fitem.setLabel(pref.getLabel()); - mListener.onCameraPickerClicked(newCameraId); + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + startTime = System.currentTimeMillis(); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + if (System.currentTimeMillis() - startTime < CLICK_THRESHOLD) { + pref.setValueIndex(j); + for (View v1 : views) { + v1.setBackground(null); + } + ImageView image = (ImageView) v.findViewById(R.id.image); + image.setBackgroundColor(0xff33b5e5); + onSettingChanged(pref); + } + } + return true; } }); - mRenderer.addItem(item); + + views[j] = imageView; + if (i == init) + imageView.setBackgroundColor(0xff33b5e5); + TextView label = (TextView) layout2.findViewById(R.id.label); + imageView.setImageResource(thumbnails[i]); + label.setText(entries[i]); + layout.addView(layout2); } + previewMenuLayout.addView(basic); + mPreviewMenu = basic; } - @Override - public void reloadPreferences() { - super.reloadPreferences(); - if (mPopup1 != null) { - mPopup1.reloadPreference(); - } - if (mPopup2 != null) { - mPopup2.reloadPreference(); + public void openFirstLevel() { + if (isMenuBeingShown() || CameraControls.isAnimating()) + return; + if (mListMenu == null || mPopupStatus != POPUP_FIRST_LEVEL) { + initializePopup(); + mPopupStatus = POPUP_FIRST_LEVEL; } + mUI.showPopup(mListMenu, 1, true); } public void setPreference(String key, String value) { @@ -176,7 +580,7 @@ public class VideoMenu extends PieController } public void overrideCDSMode() { - if (mPopup2 != null) { + if (mListMenu != null) { ListPreference pref_tnr = mPreferenceGroup. findPreference(CameraSettings.KEY_VIDEO_TNR_MODE); ListPreference pref_cds = mPreferenceGroup. @@ -190,9 +594,9 @@ public class VideoMenu extends PieController if ((tnr != null) && !mActivity.getString(R.string. pref_camera_video_tnr_default).equals(tnr)) { - ((MoreSettingPopup) mPopup2).setPreferenceEnabled( + mListMenu.setPreferenceEnabled( CameraSettings.KEY_VIDEO_CDS_MODE,false); - ((MoreSettingPopup) mPopup2).overrideSettings( + mListMenu.overrideSettings( CameraSettings.KEY_VIDEO_CDS_MODE, mActivity.getString(R.string.pref_camera_video_cds_value_off)); mIsVideoTNREnabled = true; @@ -203,10 +607,10 @@ public class VideoMenu extends PieController mIsVideoCDSUpdated = true; } } else if (tnr != null) { - ((MoreSettingPopup) mPopup2).setPreferenceEnabled( + mListMenu.setPreferenceEnabled( CameraSettings.KEY_VIDEO_CDS_MODE,true); if (mIsVideoTNREnabled) { - ((MoreSettingPopup) mPopup2).overrideSettings( + mListMenu.overrideSettings( CameraSettings.KEY_VIDEO_CDS_MODE, mPrevSavedVideoCDS); mIsVideoTNREnabled = false; mIsVideoCDSUpdated = false; @@ -216,49 +620,46 @@ public class VideoMenu extends PieController } @Override - public void overrideSettings(final String ... keyvalues) { + public void overrideSettings(final String... keyvalues) { overrideCDSMode(); super.overrideSettings(keyvalues); - if (((mPopup1 == null) && (mPopup2 == null)) || mPopupStatus != POPUP_FIRST_LEVEL) { + if (((mListMenu == null)) || mPopupStatus != POPUP_FIRST_LEVEL) { mPopupStatus = POPUP_FIRST_LEVEL; initializePopup(); } - ((MoreSettingPopup) mPopup1).overrideSettings(keyvalues); - ((MoreSettingPopup) mPopup2).overrideSettings(keyvalues); + mListMenu.overrideSettings(keyvalues); + } @Override // Hit when an item in the second-level popup gets selected public void onListPrefChanged(ListPreference pref) { - if (mPopup1 != null && mPopup2 != null) { - if (mPopupStatus == POPUP_SECOND_LEVEL) { - mUI.dismissPopup(true); - mPopup1.reloadPreference(); - mPopup2.reloadPreference(); - } + if (mPopupStatus == POPUP_SECOND_LEVEL) { + mListMenu.reloadPreference(); + animateFadeOut(mListSubMenu, 2); } super.onSettingChanged(pref); + ((ListMenu) mListMenu).resetHighlight(); } protected void initializePopup() { LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( Context.LAYOUT_INFLATER_SERVICE); - MoreSettingPopup popup1 = (MoreSettingPopup) inflater.inflate( - R.layout.more_setting_popup, null, false); + ListMenu popup1 = (ListMenu) inflater.inflate( + R.layout.list_menu, null, false); popup1.setSettingChangedListener(this); - popup1.initialize(mPreferenceGroup, mOtherKeys1); + String[] keys = mOtherKeys1; + if (mActivity.isDeveloperMenuEnabled()) + keys = mOtherKeys2; + popup1.initialize(mPreferenceGroup, keys); if (mActivity.isSecureCamera()) { - // Prevent location preference from getting changed in secure camera mode + // Prevent location preference from getting changed in secure camera + // mode popup1.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION, false); } - mPopup1 = popup1; + mListMenu = popup1; - MoreSettingPopup popup2 = (MoreSettingPopup) inflater.inflate( - R.layout.more_setting_popup, null, false); - popup2.setSettingChangedListener(this); - popup2.initialize(mPreferenceGroup, mOtherKeys2); - mPopup2 = popup2; overrideCDSMode(); } @@ -268,40 +669,75 @@ public class VideoMenu extends PieController initializePopup(); mPopupStatus = POPUP_FIRST_LEVEL; if (topPopupOnly) { - if(popupNum == 1) mUI.showPopup(mPopup1); - else if(popupNum == 2) mUI.showPopup(mPopup2); + mUI.showPopup(mListMenu, 1, false); } } else { initializePopup(); } } + public void hideUI() { + mFrontBackSwitcher.setVisibility(View.INVISIBLE); + mFilterModeSwitcher.setVisibility(View.INVISIBLE); + } + + public void showUI() { + mFrontBackSwitcher.setVisibility(View.VISIBLE); + mFilterModeSwitcher.setVisibility(View.VISIBLE); + } + @Override // Hit when an item in the first-level popup gets selected, then bring up // the second-level popup public void onPreferenceClicked(ListPreference pref) { - if (mPopupStatus != POPUP_FIRST_LEVEL) return; + onPreferenceClicked(pref, 0); + } + @Override + // Hit when an item in the first-level popup gets selected, then bring up + // the second-level popup + public void onPreferenceClicked(ListPreference pref, int y) { LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( Context.LAYOUT_INFLATER_SERVICE); - if (CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL.equals(pref.getKey())) { - TimeIntervalPopup timeInterval = (TimeIntervalPopup) inflater.inflate( - R.layout.time_interval_popup, null, false); - timeInterval.initialize((IconListPreference) pref); - timeInterval.setSettingChangedListener(this); - mUI.dismissPopup(true); - mPopup1 = timeInterval; + ListSubMenu basic = (ListSubMenu) inflater.inflate( + R.layout.list_sub_menu, null, false); + basic.initialize(pref, y); + basic.setSettingChangedListener(this); + mUI.removeLevel2(); + mListSubMenu = basic; + if (mPopupStatus == POPUP_SECOND_LEVEL) { + mUI.showPopup(mListSubMenu, 2, false); } else { - ListPrefSettingPopup basic = (ListPrefSettingPopup) inflater.inflate( - R.layout.list_pref_setting_popup, null, false); - basic.initialize(pref); - basic.setSettingChangedListener(this); - mUI.dismissPopup(true); - mPopup1 = basic; + mUI.showPopup(mListSubMenu, 2, true); } - mUI.showPopup(mPopup1); mPopupStatus = POPUP_SECOND_LEVEL; } + public void onListMenuTouched() { + mUI.removeLevel2(); + } + + public void closeAllView() { + if (mUI != null) + mUI.removeLevel2(); + + if (mListMenu != null) + animateSlideOut(mListMenu, 1); + animateSlideOutPreviewMenu(); + } + + public void closeView() { + if (mUI != null) + mUI.removeLevel2(); + + if (mListMenu != null) + animateSlideOut(mListMenu, 1); + } + + @Override + public void onSettingChanged(ListPreference pref) { + super.onSettingChanged(pref); + } + } diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index 6d0e12548..3e23fca83 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -103,12 +103,13 @@ public class VideoUI implements PieRenderer.PieListener, private LinearLayout mMenuLayout; private LinearLayout mSubMenuLayout; private LinearLayout mPreviewMenuLayout; - private CustomVideoMenu mCustomVideoMenu; private View mPreviewCover; private SurfaceView mSurfaceView = null; private int mPreviewWidth = 0; private int mPreviewHeight = 0; + private int mOriginalPreviewWidth = 0; + private int mOriginalPreviewHeight = 0; private float mAspectRatio = 4f / 3f; private boolean mAspectRatioResize; private Matrix mMatrix = null; @@ -163,17 +164,23 @@ public class VideoUI implements PieRenderer.PieListener, width = height; height = oldWidth; Log.d(TAG, "Swapping SurfaceView width & height dimensions"); + if (mOriginalPreviewWidth != 0 && mOriginalPreviewHeight != 0) { + int temp = mOriginalPreviewWidth; + mOriginalPreviewWidth = mOriginalPreviewHeight; + mOriginalPreviewHeight = temp; + } } - if (mPreviewWidth != width || mPreviewHeight != height || (mOrientationResize != mPrevOrientationResize) || mAspectRatioResize) { + if (mOriginalPreviewWidth == 0) mOriginalPreviewWidth = width; + if (mOriginalPreviewHeight == 0) mOriginalPreviewHeight = height; mPreviewWidth = width; mPreviewHeight = height; - setTransformMatrix(width, height); + setTransformMatrix(mOriginalPreviewWidth, mOriginalPreviewHeight); mAspectRatioResize = false; } - mCustomVideoMenu.tryToCloseSubList(); + mVideoMenu.tryToCloseSubList(); } }; @@ -196,7 +203,7 @@ public class VideoUI implements PieRenderer.PieListener, super.dismiss(); popupDismissed(); showUI(); - mVideoMenu.popupDismissed(topLevelOnly); + // mVideoMenu.popupDismissed(topLevelOnly); // Switch back into fullscreen/lights-out mode after popup // is dimissed. @@ -277,7 +284,7 @@ public class VideoUI implements PieRenderer.PieListener, mMenuButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - mCustomVideoMenu.openFirstLevel(); + mVideoMenu.openFirstLevel(); } }); @@ -378,7 +385,6 @@ public class VideoUI implements PieRenderer.PieListener, + ", scaledTextureHeight = " + scaledTextureHeight); mTempWidth = (int) scaledTextureWidth; mTempHeight = (int) scaledTextureHeight; - mSurfaceView.requestLayout(); mHandler.post(updateSurfaceView); } @@ -426,7 +432,7 @@ public class VideoUI implements PieRenderer.PieListener, } public void showUI() { - if (!mUIhidden || (mCustomVideoMenu != null && mCustomVideoMenu.isMenuBeingShown())) + if (!mUIhidden || (mVideoMenu != null && mVideoMenu.isMenuBeingShown())) return; mUIhidden = false; mCameraControls.showUI(); @@ -448,8 +454,8 @@ public class VideoUI implements PieRenderer.PieListener, public boolean collapseCameraControls() { boolean ret = false; mSwitcher.closePopup(); - if (mCustomVideoMenu != null) { - mCustomVideoMenu.closeAllView(); + if (mVideoMenu != null) { + mVideoMenu.closeAllView(); } if (mPopup != null) { dismissPopup(false); @@ -481,9 +487,9 @@ public class VideoUI implements PieRenderer.PieListener, public void setDisplayOrientation(int orientation) { if ((mPreviewOrientation == -1 || mPreviewOrientation != orientation) - && mCustomVideoMenu != null && mCustomVideoMenu.isPreviewMenuBeingShown()) { + && mVideoMenu != null && mVideoMenu.isPreviewMenuBeingShown()) { dismissSceneModeMenu(); - mCustomVideoMenu.addModeBack(); + mVideoMenu.addModeBack(); } mPreviewOrientation = orientation; } @@ -492,6 +498,7 @@ public class VideoUI implements PieRenderer.PieListener, ((CameraRootView) mRootView).removeDisplayChangeListener(); } +// no customvideo? public void overrideSettings(final String... keyvalues) { if (mVideoMenu != null) { mVideoMenu.overrideSettings(keyvalues); @@ -531,11 +538,11 @@ public class VideoUI implements PieRenderer.PieListener, mRenderOverlay = (RenderOverlay) mRootView.findViewById(R.id.render_overlay); if (mPieRenderer == null) { mPieRenderer = new PieRenderer(mActivity); - mVideoMenu = new VideoMenu(mActivity, this, mPieRenderer); + // mVideoMenu = new VideoMenu(mActivity, this, mPieRenderer); mPieRenderer.setPieListener(this); } - if (mCustomVideoMenu == null) { - mCustomVideoMenu = new CustomVideoMenu(mActivity, this); + if (mVideoMenu == null) { + mVideoMenu = new VideoMenu(mActivity, this); } mRenderOverlay.addRenderer(mPieRenderer); if (mZoomRenderer == null) { @@ -546,7 +553,7 @@ public class VideoUI implements PieRenderer.PieListener, mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer); mRenderOverlay.setGestures(mGestures); } - mGestures.setCustomVideoMenu(mCustomVideoMenu); + mGestures.setVideoMenu(mVideoMenu); mGestures.setRenderOverlay(mRenderOverlay); @@ -566,7 +573,6 @@ public class VideoUI implements PieRenderer.PieListener, public void setPrefChangedListener(OnPreferenceChangedListener listener) { mVideoMenu.setListener(listener); - mCustomVideoMenu.setListener(listener); } private void initializeMiscControls() { @@ -642,7 +648,7 @@ public class VideoUI implements PieRenderer.PieListener, } public boolean onBackPressed() { - if (mCustomVideoMenu != null && mCustomVideoMenu.handleBackKey()) { + if (mVideoMenu != null && mVideoMenu.handleBackKey()) { return true; } if (hidePieRenderer()) { @@ -730,9 +736,9 @@ public class VideoUI implements PieRenderer.PieListener, } if (animate) { if (level == 1) - mCustomVideoMenu.animateSlideIn(popup, CameraActivity.SETTING_LIST_WIDTH_1, true); + mVideoMenu.animateSlideIn(popup, CameraActivity.SETTING_LIST_WIDTH_1, true); if (level == 2) - mCustomVideoMenu.animateFadeIn(popup); + mVideoMenu.animateFadeIn(popup); } else popup.setAlpha(0.85f); @@ -832,11 +838,11 @@ public class VideoUI implements PieRenderer.PieListener, } public void hideUIwhileRecording() { - mCustomVideoMenu.hideUI(); + mVideoMenu.hideUI(); } public void showUIafterRecording() { - mCustomVideoMenu.showUI(); + mVideoMenu.showUI(); } public void showReviewImage(Bitmap bitmap) { @@ -889,7 +895,6 @@ public class VideoUI implements PieRenderer.PieListener, public void initializePopup(PreferenceGroup pref) { mVideoMenu.initialize(pref); - mCustomVideoMenu.initialize(pref); } public void initializeZoom(Parameters param) { diff --git a/src/com/android/camera/ui/FaceView.java b/src/com/android/camera/ui/FaceView.java index f3a41509f..6181937ee 100644 --- a/src/com/android/camera/ui/FaceView.java +++ b/src/com/android/camera/ui/FaceView.java @@ -208,8 +208,8 @@ public class FaceView extends View rh = temp; } CameraUtil.prepareMatrix(mMatrix, mMirror, mDisplayOrientation, rw, rh); - int dx = (getWidth() - rw) / 2; - int dy = (getHeight() - rh) / 2; + int dx = 0; + int dy = 0; // Focus indicator is directional. Rotate the matrix and the canvas // so it looks correctly in all orientations. diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java index 7f197caf4..8c2909881 100644 --- a/src/com/android/camera/ui/FilmStripView.java +++ b/src/com/android/camera/ui/FilmStripView.java @@ -37,8 +37,8 @@ import android.view.ViewGroup; import android.view.animation.DecelerateInterpolator; import android.widget.Scroller; -import com.android.camera.CustomPhotoMenu; -import com.android.camera.CustomVideoMenu; +import com.android.camera.PhotoMenu; +import com.android.camera.VideoMenu; import com.android.camera.PreviewGestures; import com.android.camera.CameraActivity; import com.android.camera.data.LocalData; @@ -1829,8 +1829,8 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener { public boolean checkSendToModeView(MotionEvent ev) { if (mSendToPreviewMenu || mSendToMenu || mPreviewGestures == null) return true; - CustomPhotoMenu pMenu = mPreviewGestures.getCustomPhotoMenu(); - CustomVideoMenu vMenu = mPreviewGestures.getCustomVideoMenu(); + PhotoMenu pMenu = mPreviewGestures.getPhotoMenu(); + VideoMenu vMenu = mPreviewGestures.getVideoMenu(); if (pMenu != null) { if (pMenu.isMenuBeingShown()) { if (pMenu.isMenuBeingAnimated()) { @@ -1882,8 +1882,8 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener { || MotionEvent.ACTION_CANCEL == ev.getActionMasked()) mReset = true; } - CustomPhotoMenu pMenu = mPreviewGestures.getCustomPhotoMenu(); - CustomVideoMenu vMenu = mPreviewGestures.getCustomVideoMenu(); + PhotoMenu pMenu = mPreviewGestures.getPhotoMenu(); + VideoMenu vMenu = mPreviewGestures.getVideoMenu(); if (pMenu != null) { if (mSendToPreviewMenu) diff --git a/src/com/android/camera/ui/ListMenu.java b/src/com/android/camera/ui/ListMenu.java index 53cd48d9c..64bdc342b 100644 --- a/src/com/android/camera/ui/ListMenu.java +++ b/src/com/android/camera/ui/ListMenu.java @@ -168,8 +168,12 @@ public class ListMenu extends ListView // If the preference is overridden, disable the preference boolean enable = value == null; mEnabled[j] = enable; - if (getChildCount() > j) { - getChildAt(j).setEnabled(enable); + int offset = getFirstVisiblePosition(); + if (offset >= 0) { + int indexInView = j - offset; + if (getChildCount() > indexInView && indexInView >= 0) { + getChildAt(indexInView).setEnabled(enable); + } } } } -- cgit v1.2.3