diff options
-rw-r--r-- | src/com/android/camera/PhotoMenu.java | 48 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 58 | ||||
-rw-r--r-- | src/com/android/camera/VideoMenu.java | 25 | ||||
-rw-r--r-- | src/com/android/camera/VideoUI.java | 49 | ||||
-rw-r--r-- | src/com/android/camera/ui/CameraRootView.java | 35 | ||||
-rw-r--r-- | src/com/android/camera/ui/ListMenu.java | 33 | ||||
-rw-r--r-- | src/com/android/camera/ui/RotateLayout.java | 20 |
7 files changed, 170 insertions, 98 deletions
diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index 271640d29..078a23e2d 100644 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -44,6 +44,7 @@ import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import com.android.camera.CameraPreference.OnPreferenceChangedListener; +import com.android.camera.ui.CameraRootView; import com.android.camera.ui.CountdownTimerPopup; import com.android.camera.ui.ListSubMenu; import com.android.camera.ui.ListMenu; @@ -53,8 +54,6 @@ import com.android.camera.ui.RotateTextToast; 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; import java.util.Locale; @@ -798,8 +797,6 @@ public class PhotoMenu extends MenuController if (!mIsDefaultToPortrait) { rotation = (rotation + 90) % 360; } - WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); CharSequence[] entries = pref.getEntries(); @@ -831,22 +828,23 @@ public class PhotoMenu extends MenuController gridRes, null, false); mUI.dismissSceneModeMenu(); - LinearLayout previewMenuLayout = new LinearLayout(mActivity); - mUI.setPreviewMenuLayout(previewMenuLayout); + mUI.setPreviewMenuLayout(basic); ViewGroup.LayoutParams params = null; + CameraRootView rootView = mUI.getRootView(); 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); + + int rootViewBottom = rootView.getClientRectForOrientation(rotation).bottom; + basic.setY(rootViewBottom - size); } - basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); + basic.setLayoutParams(params); + rootView.addView(basic); + LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); + Rect insets = rootView.getInsetsForOrientation(rotation); + layout.setPadding(insets.left, insets.top, insets.right, insets.bottom); final View[] views = new View[entries.length]; int init = pref.getCurrentIndex(); @@ -886,7 +884,6 @@ public class PhotoMenu extends MenuController label.setText(entries[i]); layout.addView(layout2); } - previewMenuLayout.addView(basic); mPreviewMenu = basic; } @@ -936,8 +933,6 @@ public class PhotoMenu extends MenuController 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(); @@ -968,22 +963,24 @@ public class PhotoMenu extends MenuController gridRes, null, false); mUI.dismissSceneModeMenu(); - LinearLayout previewMenuLayout = new LinearLayout(mActivity); - mUI.setPreviewMenuLayout(previewMenuLayout); + mUI.setPreviewMenuLayout(basic); ViewGroup.LayoutParams params = null; + CameraRootView rootView = mUI.getRootView(); 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); + + int rootViewBottom = rootView.getClientRectForOrientation(rotation).bottom; + basic.setY(rootViewBottom - size); } - basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); + basic.setLayoutParams(params); + rootView.addView(basic); + LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); + Rect insets = rootView.getInsetsForOrientation(rotation); + layout.setPadding(insets.left, insets.top, insets.right, insets.bottom); + final View[] views = new View[entries.length]; int init = pref.getCurrentIndex(); for (int i = 0; i < entries.length; i++) { @@ -1019,7 +1016,6 @@ public class PhotoMenu extends MenuController label.setText(entries[i]); layout.addView(layout2); } - previewMenuLayout.addView(basic); mPreviewMenu = basic; } diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 5c13a7573..c26664c2f 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -92,7 +92,7 @@ public class PhotoUI implements PieListener, private PhotoController mController; private PreviewGestures mGestures; - private View mRootView; + private CameraRootView mRootView; private SurfaceHolder mSurfaceHolder; private PopupWindow mPopup; @@ -141,7 +141,7 @@ public class PhotoUI implements PieListener, private View mPreviewCover; private RotateLayout mMenuLayout; private RotateLayout mSubMenuLayout; - private LinearLayout mPreviewMenuLayout; + private ViewGroup mPreviewMenuLayout; private boolean mUIhidden = false; private int mPreviewOrientation = -1; @@ -223,9 +223,8 @@ public class PhotoUI implements PieListener, public PhotoUI(CameraActivity activity, PhotoController controller, View parent) { mActivity = activity; mController = controller; - mRootView = parent; - mActivity.getLayoutInflater().inflate(R.layout.photo_module, - (ViewGroup) mRootView, true); + mRootView = (CameraRootView) parent; + mActivity.getLayoutInflater().inflate(R.layout.photo_module, mRootView, true); mPreviewCover = mRootView.findViewById(R.id.preview_cover); // display the view mSurfaceView = (SurfaceView) mRootView.findViewById(R.id.mdp_preview_content); @@ -485,7 +484,7 @@ public class PhotoUI implements PieListener, mController.onPreviewUIDestroyed(); } - public View getRootView() { + public CameraRootView getRootView() { return mRootView; } @@ -792,7 +791,7 @@ public class PhotoUI implements PieListener, return mMenuLayout; } - public void setPreviewMenuLayout(LinearLayout layout) { + public void setPreviewMenuLayout(ViewGroup layout) { mPreviewMenuLayout = layout; } @@ -808,6 +807,7 @@ public class PhotoUI implements PieListener, if (level == 1) { if (mMenuLayout == null) { mMenuLayout = new RotateLayout(mActivity, null); + mMenuLayout.setRootView(mRootView); if (mRootView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) { params = new FrameLayout.LayoutParams( CameraActivity.SETTING_LIST_WIDTH_1, LayoutParams.WRAP_CONTENT, @@ -818,15 +818,15 @@ public class PhotoUI implements PieListener, Gravity.RIGHT | Gravity.TOP); } mMenuLayout.setLayoutParams(params); - ((ViewGroup) mRootView).addView(mMenuLayout); + mRootView.addView(mMenuLayout); } - mMenuLayout.setOrientation(mOrientation, true); mMenuLayout.addView(popup); + mMenuLayout.setOrientation(mOrientation, true); } if (level == 2) { if (mSubMenuLayout == null) { mSubMenuLayout = new RotateLayout(mActivity, null); - ((ViewGroup) mRootView).addView(mSubMenuLayout); + mRootView.addView(mSubMenuLayout); } if (mRootView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) { params = new FrameLayout.LayoutParams( @@ -837,13 +837,14 @@ public class PhotoUI implements PieListener, CameraActivity.SETTING_LIST_WIDTH_2, LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.TOP); } - int screenHeight = (mOrientation == 0 || mOrientation == 180) - ? mRootView.getHeight() : mRootView.getWidth(); + + int containerHeight = mRootView.getClientRectForOrientation(mOrientation).height(); int height = ((ListSubMenu) popup).getPreCalculatedHeight(); - int yBase = ((ListSubMenu) popup).getYBase(); - int y = Math.max(0, yBase); - if (yBase + height > screenHeight) - y = Math.max(0, screenHeight - height); + int yBase = ((ListSubMenu) popup).getYBase(), y = yBase; + if (yBase + height > containerHeight) { + y = Math.max(0, containerHeight - height); + } + if (mRootView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) { params.setMargins(CameraActivity.SETTING_LIST_WIDTH_1, y, 0, 0); } else { @@ -852,8 +853,8 @@ public class PhotoUI implements PieListener, mSubMenuLayout.setLayoutParams(params); - mSubMenuLayout.addView(popup); mSubMenuLayout.setOrientation(mOrientation, true); + mSubMenuLayout.addView(popup); } if (animate) { if (level == 1) @@ -920,14 +921,14 @@ public class PhotoUI implements PieListener, public void dismissLevel1() { if (mMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mMenuLayout); + mRootView.removeView(mMenuLayout); mMenuLayout = null; } } public void dismissLevel2() { if (mSubMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mSubMenuLayout); + mRootView.removeView(mSubMenuLayout); mSubMenuLayout = null; } } @@ -946,14 +947,14 @@ public class PhotoUI implements PieListener, public void dismissSceneModeMenu() { if (mPreviewMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mPreviewMenuLayout); + mRootView.removeView(mPreviewMenuLayout); mPreviewMenuLayout = null; } } public void removeSceneModeMenu() { if (mPreviewMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mPreviewMenuLayout); + mRootView.removeView(mPreviewMenuLayout); mPreviewMenuLayout = null; } cleanupListview(); @@ -1095,9 +1096,8 @@ public class PhotoUI implements PieListener, // Countdown timer private void initializeCountDown() { - mActivity.getLayoutInflater().inflate(R.layout.count_down_to_capture, - (ViewGroup) mRootView, true); - mCountDownView = (CountDownView) (mRootView.findViewById(R.id.count_down_to_capture)); + mActivity.getLayoutInflater().inflate(R.layout.count_down_to_capture, mRootView, true); + mCountDownView = (CountDownView) mRootView.findViewById(R.id.count_down_to_capture); mCountDownView.setCountDownFinishedListener((OnCountDownFinishedListener) mController); mCountDownView.bringToFront(); mCountDownView.setOrientation(mOrientation); @@ -1121,7 +1121,7 @@ public class PhotoUI implements PieListener, public void startSelfieFlash() { if(mSelfieView == null) - mSelfieView = (SelfieFlashView) (mRootView.findViewById(R.id.selfie_flash)); + mSelfieView = (SelfieFlashView) mRootView.findViewById(R.id.selfie_flash); mSelfieView.bringToFront(); mSelfieView.open(); mScreenBrightness = setScreenBrightness(1F); @@ -1129,7 +1129,7 @@ public class PhotoUI implements PieListener, public void stopSelfieFlash() { if(mSelfieView == null) - mSelfieView = (SelfieFlashView) (mRootView.findViewById(R.id.selfie_flash)); + mSelfieView = (SelfieFlashView) mRootView.findViewById(R.id.selfie_flash); mSelfieView.close(); if(mScreenBrightness != 0.0f) setScreenBrightness(mScreenBrightness); @@ -1178,11 +1178,11 @@ public class PhotoUI implements PieListener, } public void initDisplayChangeListener() { - ((CameraRootView) mRootView).setDisplayChangeListener(this); + mRootView.setDisplayChangeListener(this); } public void removeDisplayChangeListener() { - ((CameraRootView) mRootView).removeDisplayChangeListener(); + mRootView.removeDisplayChangeListener(); } public FocusRing getFocusRing() { @@ -1241,8 +1241,6 @@ public class PhotoUI implements PieListener, mSubMenuLayout.setOrientation(orientation, animation); if (mPreviewMenuLayout != null) { ViewGroup vg = (ViewGroup) mPreviewMenuLayout.getChildAt(0); - if (vg != null) - vg = (ViewGroup) vg.getChildAt(0); if (vg != null) { for (int i = vg.getChildCount() - 1; i >= 0; --i) { RotateLayout l = (RotateLayout) vg.getChildAt(i); diff --git a/src/com/android/camera/VideoMenu.java b/src/com/android/camera/VideoMenu.java index 5abb727ee..15d1839cb 100644 --- a/src/com/android/camera/VideoMenu.java +++ b/src/com/android/camera/VideoMenu.java @@ -38,6 +38,7 @@ import android.widget.LinearLayout; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; +import com.android.camera.ui.CameraRootView; import com.android.camera.ui.ListSubMenu; import com.android.camera.ui.ListMenu; import com.android.camera.ui.TimeIntervalPopup; @@ -47,8 +48,6 @@ import org.codeaurora.snapcam.R; import android.widget.HorizontalScrollView; import android.widget.Toast; import android.view.ViewGroup; -import android.view.WindowManager; -import android.view.Display; import com.android.camera.ui.RotateLayout; import com.android.camera.util.CameraUtil; import android.text.TextUtils; @@ -549,8 +548,6 @@ public class VideoMenu extends MenuController 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(); @@ -581,22 +578,23 @@ public class VideoMenu extends MenuController gridRes, null, false); mUI.dismissSceneModeMenu(); - LinearLayout previewMenuLayout = new LinearLayout(mActivity); - mUI.setPreviewMenuLayout(previewMenuLayout); + mUI.setPreviewMenuLayout(basic); ViewGroup.LayoutParams params = null; + CameraRootView rootView = mUI.getRootView(); 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); + + int rootViewBottom = rootView.getClientRectForOrientation(rotation).bottom; + basic.setY(rootViewBottom - size); } - basic.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, - LayoutParams.MATCH_PARENT)); + basic.setLayoutParams(params); + rootView.addView(basic); + LinearLayout layout = (LinearLayout) basic.findViewById(R.id.layout); + Rect insets = rootView.getInsetsForOrientation(rotation); + layout.setPadding(insets.left, insets.top, insets.right, insets.bottom); final View[] views = new View[entries.length]; int init = pref.getCurrentIndex(); @@ -635,7 +633,6 @@ public class VideoMenu extends MenuController label.setText(entries[i]); layout.addView(layout2); } - previewMenuLayout.addView(basic); mPreviewMenu = basic; } diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index 778e067a2..0883f5fac 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -68,7 +68,7 @@ public class VideoUI implements PieRenderer.PieListener, // module fields private final FocusRing mFocusRing; private CameraActivity mActivity; - private View mRootView; + private CameraRootView mRootView; private SurfaceHolder mSurfaceHolder; // An review image having same size as preview. It is displayed when // recording is stopped in capture intent. @@ -102,7 +102,7 @@ public class VideoUI implements PieRenderer.PieListener, private boolean mIsTimeLapse = false; private RotateLayout mMenuLayout; private RotateLayout mSubMenuLayout; - private LinearLayout mPreviewMenuLayout; + private ViewGroup mPreviewMenuLayout; private View mPreviewCover; private SurfaceView mSurfaceView = null; @@ -171,9 +171,8 @@ public class VideoUI implements PieRenderer.PieListener, public VideoUI(CameraActivity activity, VideoController controller, View parent) { mActivity = activity; mController = controller; - mRootView = parent; - mActivity.getLayoutInflater().inflate(R.layout.video_module, - (ViewGroup) mRootView, true); + mRootView = (CameraRootView) parent; + mActivity.getLayoutInflater().inflate(R.layout.video_module, mRootView, true); mPreviewCover = mRootView.findViewById(R.id.preview_cover); // display the view mSurfaceView = (SurfaceView) mRootView.findViewById(R.id.mdp_preview_content); @@ -264,7 +263,7 @@ public class VideoUI implements PieRenderer.PieListener, public void initializeSurfaceView() { if (mSurfaceView == null) { mSurfaceView = new SurfaceView(mActivity); - ((ViewGroup) mRootView).addView(mSurfaceView, 0); + mRootView.addView(mSurfaceView, 0); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); } @@ -520,7 +519,7 @@ public class VideoUI implements PieRenderer.PieListener, } public void initDisplayChangeListener() { - ((CameraRootView) mRootView).setDisplayChangeListener(this); + mRootView.setDisplayChangeListener(this); } public void setDisplayOrientation(int orientation) { @@ -533,7 +532,7 @@ public class VideoUI implements PieRenderer.PieListener, } public void removeDisplayChangeListener() { - ((CameraRootView) mRootView).removeDisplayChangeListener(); + mRootView.removeDisplayChangeListener(); } // no customvideo? @@ -686,14 +685,14 @@ public class VideoUI implements PieRenderer.PieListener, public void dismissLevel1() { if (mMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mMenuLayout); + mRootView.removeView(mMenuLayout); mMenuLayout = null; } } public void dismissLevel2() { if (mSubMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mSubMenuLayout); + mRootView.removeView(mSubMenuLayout); mSubMenuLayout = null; } } @@ -712,14 +711,14 @@ public class VideoUI implements PieRenderer.PieListener, public void dismissSceneModeMenu() { if (mPreviewMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mPreviewMenuLayout); + mRootView.removeView(mPreviewMenuLayout); mPreviewMenuLayout = null; } } public void removeSceneModeMenu() { if (mPreviewMenuLayout != null) { - ((ViewGroup) mRootView).removeView(mPreviewMenuLayout); + mRootView.removeView(mPreviewMenuLayout); mPreviewMenuLayout = null; } cleanupListview(); @@ -740,6 +739,7 @@ public class VideoUI implements PieRenderer.PieListener, if (level == 1) { if (mMenuLayout == null) { mMenuLayout = new RotateLayout(mActivity, null); + mMenuLayout.setRootView(mRootView); if (mRootView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) { layoutParams = new FrameLayout.LayoutParams( CameraActivity.SETTING_LIST_WIDTH_1, LayoutParams.WRAP_CONTENT, @@ -750,10 +750,10 @@ public class VideoUI implements PieRenderer.PieListener, Gravity.RIGHT | Gravity.TOP); } mMenuLayout.setLayoutParams(layoutParams); - ((ViewGroup) mRootView).addView(mMenuLayout); + mRootView.addView(mMenuLayout); } - mMenuLayout.setOrientation(mOrientation, true); mMenuLayout.addView(popup); + mMenuLayout.setOrientation(mOrientation, true); } if (level == 2) { if (mSubMenuLayout == null) { @@ -762,7 +762,7 @@ public class VideoUI implements PieRenderer.PieListener, CameraActivity.SETTING_LIST_WIDTH_2, LayoutParams.WRAP_CONTENT); mSubMenuLayout.setLayoutParams(params); - ((ViewGroup) mRootView).addView(mSubMenuLayout); + mRootView.addView(mSubMenuLayout); } if (mRootView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) { layoutParams = new FrameLayout.LayoutParams( @@ -774,13 +774,14 @@ public class VideoUI implements PieRenderer.PieListener, Gravity.RIGHT | Gravity.TOP); } - int screenHeight = (mOrientation == 0 || mOrientation == 180) - ? mRootView.getHeight() : mRootView.getWidth(); + final int containerHeight = + mRootView.getClientRectForOrientation(mOrientation).height(); int height = ((ListSubMenu) popup).getPreCalculatedHeight(); - int yBase = ((ListSubMenu) popup).getYBase(); - int y = Math.max(0, yBase); - if (yBase + height > screenHeight) - y = Math.max(0, screenHeight - height); + int yBase = ((ListSubMenu) popup).getYBase(), y = yBase; + if (yBase + height > containerHeight) { + y = Math.max(0, containerHeight - height); + } + if (mRootView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) { layoutParams.setMargins(CameraActivity.SETTING_LIST_WIDTH_1, y, 0, 0); } else { @@ -805,7 +806,7 @@ public class VideoUI implements PieRenderer.PieListener, return mMenuLayout; } - public void setPreviewMenuLayout(LinearLayout layout) { + public void setPreviewMenuLayout(ViewGroup layout) { mPreviewMenuLayout = layout; } @@ -1050,7 +1051,7 @@ public class VideoUI implements PieRenderer.PieListener, mController.onPreviewUIDestroyed(); } - public View getRootView() { + public CameraRootView getRootView() { return mRootView; } @@ -1103,8 +1104,6 @@ public class VideoUI implements PieRenderer.PieListener, } if (mPreviewMenuLayout != null) { ViewGroup vg = (ViewGroup) mPreviewMenuLayout.getChildAt(0); - if (vg != null) - vg = (ViewGroup) vg.getChildAt(0); if (vg != null) { for (int i = vg.getChildCount() - 1; i >= 0; --i) { RotateLayout l = (RotateLayout) vg.getChildAt(i); diff --git a/src/com/android/camera/ui/CameraRootView.java b/src/com/android/camera/ui/CameraRootView.java index cd30e8e4f..6bf062b6c 100644 --- a/src/com/android/camera/ui/CameraRootView.java +++ b/src/com/android/camera/ui/CameraRootView.java @@ -37,6 +37,7 @@ public class CameraRootView extends FrameLayout { private Object mDisplayListener; private MyDisplayListener mListener; private Rect mLastInsets = new Rect(); + private Rect mTmpRect = new Rect(); public interface MyDisplayListener { public void onDisplayChanged(); @@ -81,6 +82,40 @@ public class CameraRootView extends FrameLayout { } } + public Rect getInsetsForOrientation(int orientation) { + switch (orientation) { + case 90: + mTmpRect.set(mLastInsets.top, mLastInsets.right, + mLastInsets.bottom, mLastInsets.left); + break; + case 180: + mTmpRect.set(mLastInsets.right, mLastInsets.bottom, + mLastInsets.left, mLastInsets.top); + break; + case 270: + mTmpRect.set(mLastInsets.bottom, mLastInsets.left, + mLastInsets.top, mLastInsets.right); + break; + default: + mTmpRect.set(mLastInsets); + break; + } + + return mTmpRect; + } + + public Rect getClientRectForOrientation(int orientation) { + Rect result = getInsetsForOrientation(orientation); + if (orientation == 90 || orientation == 270) { + result.right = getHeight() - result.right; + result.bottom = getWidth() - result.bottom; + } else { + result.right = getWidth() - result.right; + result.bottom = getHeight() - result.bottom; + } + return result; + } + public void removeDisplayChangeListener() { mListener = null; } diff --git a/src/com/android/camera/ui/ListMenu.java b/src/com/android/camera/ui/ListMenu.java index a1e145797..942822fec 100644 --- a/src/com/android/camera/ui/ListMenu.java +++ b/src/com/android/camera/ui/ListMenu.java @@ -22,6 +22,7 @@ package com.android.camera.ui; import java.util.ArrayList; import android.content.Context; +import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; @@ -31,6 +32,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; +import android.widget.Space; import com.android.camera.ListPreference; import com.android.camera.PreferenceGroup; @@ -38,13 +40,13 @@ import org.codeaurora.snapcam.R; /* A popup window that contains several camera settings. */ public class ListMenu extends ListView - implements ListMenuItem.Listener, - AdapterView.OnItemClickListener { + implements ListMenuItem.Listener, AdapterView.OnItemClickListener, RotateLayout.Child { @SuppressWarnings("unused") private static final String TAG = "ListMenu"; private int mHighlighted = -1; private Listener mListener; private ArrayList<ListPreference> mListItem = new ArrayList<ListPreference>(); + private View mHeader, mFooter; // Keep track of which setting items are disabled // e.g. White balance will be disabled when scene mode is set to non-auto @@ -109,6 +111,30 @@ public class ListMenu extends ListView } } + @Override + public void onApplyWindowInsets(Rect insets) { + if (mHeader == null) { + mHeader = new Space(getContext()); + addHeaderView(mHeader); + setHeaderDividersEnabled(false); + mFooter = new Space(getContext()); + addFooterView(mFooter); + setFooterDividersEnabled(false); + } + + adjustViewHeight(mHeader, insets.top); + adjustViewHeight(mFooter, insets.bottom); + } + + private void adjustViewHeight(View view, int height) { + ViewGroup.LayoutParams lp = view.getLayoutParams(); + if (lp == null) { + lp = generateDefaultLayoutParams(); + } + lp.height = height; + view.setLayoutParams(lp); + } + public void setSettingChangedListener(Listener listener) { mListener = listener; } @@ -204,7 +230,8 @@ public class ListMenu extends ListView @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - if (mListener != null) { + position -= getHeaderViewsCount(); + if (mListener != null && position < mListItem.size()) { resetHighlight(); ListPreference pref = mListItem.get(position); mHighlighted = position; diff --git a/src/com/android/camera/ui/RotateLayout.java b/src/com/android/camera/ui/RotateLayout.java index e394aba0b..61bcf2282 100644 --- a/src/com/android/camera/ui/RotateLayout.java +++ b/src/com/android/camera/ui/RotateLayout.java @@ -18,6 +18,7 @@ package com.android.camera.ui; import android.content.Context; import android.graphics.Matrix; +import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; @@ -32,6 +33,11 @@ public class RotateLayout extends ViewGroup implements Rotatable { private int mOrientation; private Matrix mMatrix = new Matrix(); protected View mChild; + private CameraRootView mRootView; + + public interface Child { + void onApplyWindowInsets(Rect insets); + } public RotateLayout(Context context, AttributeSet attrs) { super(context, attrs); @@ -42,6 +48,10 @@ public class RotateLayout extends ViewGroup implements Rotatable { setBackgroundResource(android.R.color.transparent); } + public void setRootView(CameraRootView rootView) { + mRootView = rootView; + } + @Override protected void onFinishInflate() { setupChild(getChildAt(0)); @@ -52,6 +62,7 @@ public class RotateLayout extends ViewGroup implements Rotatable { mChild = child; child.setPivotX(0); child.setPivotY(0); + applyInsetsToChild(); } } @@ -145,10 +156,19 @@ public class RotateLayout extends ViewGroup implements Rotatable { } } mOrientation = orientation; + applyInsetsToChild(); + if (mChild != null) requestLayout(); } + private void applyInsetsToChild() { + if (mRootView != null && mChild instanceof Child) { + Rect insets = mRootView.getInsetsForOrientation(mOrientation); + ((Child) mChild).onApplyWindowInsets(insets); + } + } + public int getOrientation() { return mOrientation; } |