OSDN Git Service

Fix UI Tablet for saturation panel
authornicolasroard <nicolasroard@google.com>
Wed, 14 Aug 2013 16:02:59 +0000 (09:02 -0700)
committernicolasroard <nicolasroard@google.com>
Wed, 14 Aug 2013 16:05:51 +0000 (09:05 -0700)
Change-Id: Id2fffcefc8af3cf8f6ffe2c84447c3f54070f160

res/layout-land/filtershow_editor_panel.xml
res/layout-land/filtershow_saturation_controls.xml [new file with mode: 0644]
src/com/android/gallery3d/filtershow/editors/EditorChanSat.java
src/com/android/gallery3d/filtershow/editors/ParametricEditor.java

index 2cb00e3..fc32468 100644 (file)
               android:orientation="vertical"
               android:visibility="visible">
 
-    <Button
-            android:id="@+id/toggle_state"
+    <RelativeLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/imageState"
-            android:background="@color/background_main_toolbar"
-            />
+            android:layout_height="match_parent"
+            >
 
-    <View
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:visibility="invisible"
-            android:layout_gravity="top"
-            android:layout_weight="1" />
-
-    <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:layout_gravity="bottom">
-
-        <LinearLayout
-                android:id="@+id/controlArea"
+        <Button
+                android:id="@+id/toggle_state"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:layout_alignParentBottom="true"
-                android:visibility="visible">
-
-            <SeekBar
-                    android:id="@+id/primarySeekBar"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical"
-                    style="@style/FilterShowSlider"/>
-
-        </LinearLayout>
+                android:text="@string/imageState"
+                android:background="@color/background_main_toolbar"
+                android:layout_alignParentTop="true"
+                />
 
         <LinearLayout
+                android:id="@+id/applyBar"
                 android:layout_width="match_parent"
                 android:layout_height="48dip"
                 android:background="@color/background_main_toolbar"
                 android:orientation="horizontal"
                 android:baselineAligned="false"
-                android:visibility="visible">
+                android:visibility="visible"
+                android:layout_alignParentBottom="true"
+                >
 
             <ImageButton
                     android:id="@+id/cancelFilter"
                         android:text="@string/apply_effect"
                         android:textSize="18dip"
                         android:drawableRight="@drawable/filtershow_menu_marker"
-                        android:textAllCaps="true" />
+                        android:textAllCaps="true"/>
 
             </LinearLayout>
 
                     android:src="@drawable/ic_menu_done_holo_light"
                     android:textSize="18dip"/>
         </LinearLayout>
-    </LinearLayout>
 
+        <LinearLayout
+                android:id="@+id/controlArea"
+                android:layout_width="match_parent"
+                android:layout_height="fill_parent"
+                android:orientation="vertical"
+                android:layout_above="@id/applyBar"
+                android:layout_below="@id/toggle_state"
+                android:gravity="bottom"
+                android:visibility="visible">
+
+            <SeekBar
+                    android:id="@+id/primarySeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    style="@style/FilterShowSlider"/>
+
+        </LinearLayout>
+
+    </RelativeLayout>
 </LinearLayout>
diff --git a/res/layout-land/filtershow_saturation_controls.xml b/res/layout-land/filtershow_saturation_controls.xml
new file mode 100644 (file)
index 0000000..42c9dc0
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="0dp"
+              android:layout_weight="1">
+
+    <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1">
+
+        <GridLayout
+                android:orientation="horizontal"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:alignmentMode="alignBounds"
+                android:useDefaultMargins="true"
+                android:columnOrderPreserved="false"
+                android:columnCount="2">
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_main"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/mainValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/mainSeekbar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_red"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/redValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/redSeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_yellow"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/yellowValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/yellowSeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_green"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/greenValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/greenSeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_cyan"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/cyanValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/cyanSeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_blue"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/blueValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/blueSeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+
+            <TextView
+                    android:layout_gravity="left|center_vertical"
+                    android:text="@string/editor_chan_sat_magenta"
+                    android:layout_marginLeft="8dp"/>
+            <TextView
+                    android:layout_gravity="right|center_vertical"
+                    android:id="@+id/magentaValue"
+                    android:layout_marginRight="8dp"/>
+            <SeekBar
+                    android:id="@+id/magentaSeekBar"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/FilterShowSlider"
+                    android:layout_columnSpan="2"/>
+        </GridLayout>
+    </ScrollView>
+
+</LinearLayout>
\ No newline at end of file
index 95a30e7..0069aae 100644 (file)
@@ -18,24 +18,27 @@ package com.android.gallery3d.filtershow.editors;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.os.Handler;
+import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.ViewGroup;
 import android.widget.LinearLayout;
 import android.widget.PopupMenu;
+import android.widget.SeekBar;
 import android.widget.SeekBar.OnSeekBarChangeListener;
 
+import android.widget.TextView;
 import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.controller.BasicParameterStyle;
 import com.android.gallery3d.filtershow.controller.BitmapCaller;
 import com.android.gallery3d.filtershow.controller.FilterView;
 import com.android.gallery3d.filtershow.controller.Parameter;
+import com.android.gallery3d.filtershow.filters.FilterBasicRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterChanSatRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.imageshow.MasterImage;
 import com.android.gallery3d.filtershow.pipeline.ImagePreset;
-import com.android.gallery3d.filtershow.pipeline.RenderingRequest;
-import com.android.gallery3d.filtershow.pipeline.RenderingRequestCaller;
 
 public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeListener, FilterView {
     public static final int ID = R.id.editorChanSat;
@@ -43,6 +46,21 @@ public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeLi
     private SwapButton mButton;
     private final Handler mHandler = new Handler();
 
+    private SeekBar mMainBar;
+    private SeekBar mRedBar;
+    private SeekBar mYellowBar;
+    private SeekBar mGreenBar;
+    private SeekBar mCyanBar;
+    private SeekBar mBlueBar;
+    private SeekBar mMagentaBar;
+    private TextView mMainValue;
+    private TextView mRedValue;
+    private TextView mYellowValue;
+    private TextView mGreenValue;
+    private TextView mCyanValue;
+    private TextView mBlueValue;
+    private TextView mMagentaValue;
+
     int[] mMenuStrings = {
             R.string.editor_chan_sat_main,
             R.string.editor_chan_sat_red,
@@ -80,29 +98,119 @@ public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeLi
         mButton = (SwapButton) accessoryViewList.findViewById(R.id.applyEffect);
         mButton.setText(mContext.getString(R.string.editor_chan_sat_main));
 
-        final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), mButton);
+        if (useCompact(mContext)) {
+            final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), mButton);
 
-        popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_chan_sat, popupMenu.getMenu());
+            popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_chan_sat,
+                    popupMenu.getMenu());
 
-        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
-            @Override
-            public boolean onMenuItemClick(MenuItem item) {
-                selectMenuItem(item);
-                return true;
-            }
-        });
-        mButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View arg0) {
-                popupMenu.show();
-            }
-        });
-        mButton.setListener(this);
+            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+                @Override
+                public boolean onMenuItemClick(MenuItem item) {
+                    selectMenuItem(item);
+                    return true;
+                }
+            });
+            mButton.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View arg0) {
+                    popupMenu.show();
+                }
+            });
+            mButton.setListener(this);
+
+            FilterChanSatRepresentation csrep = getChanSatRep();
+            String menuString = mContext.getString(mMenuStrings[0]);
+            switchToMode(csrep, FilterChanSatRepresentation.MODE_MASTER, menuString);
+        }
+    }
 
-        FilterChanSatRepresentation csrep = getChanSatRep();
-        String menuString = mContext.getString(mMenuStrings[0]);
-        switchToMode(csrep, FilterChanSatRepresentation.MODE_MASTER, menuString);
+    @Override
+    public void reflectCurrentFilter() {
+        if (useCompact(mContext)) {
+            super.reflectCurrentFilter();
+            updateText();
+            return;
+        }
+        mLocalRepresentation = null;
+        if (getLocalRepresentation() != null
+                && getLocalRepresentation() instanceof FilterChanSatRepresentation) {
+            FilterChanSatRepresentation rep =
+                    (FilterChanSatRepresentation) getLocalRepresentation();
+            int value = rep.getValue(FilterChanSatRepresentation.MODE_MASTER);
+            mMainBar.setProgress(value + 100);
+            mMainValue.setText("" + value);
+            value = rep.getValue(FilterChanSatRepresentation.MODE_RED);
+            mRedBar.setProgress(value + 100);
+            mRedValue.setText("" + value);
+            value = rep.getValue(FilterChanSatRepresentation.MODE_YELLOW);
+            mYellowBar.setProgress(value + 100);
+            mYellowValue.setText("" + value);
+            value = rep.getValue(FilterChanSatRepresentation.MODE_GREEN);
+            mGreenBar.setProgress(value + 100);
+            mGreenValue.setText("" + value);
+            value = rep.getValue(FilterChanSatRepresentation.MODE_CYAN);
+            mCyanBar.setProgress(value + 100);
+            mCyanValue.setText("" + value);
+            value = rep.getValue(FilterChanSatRepresentation.MODE_BLUE);
+            mBlueBar.setProgress(value + 100);
+            mBlueValue.setText("" + value);
+            value = rep.getValue(FilterChanSatRepresentation.MODE_MAGENTA);
+            mMagentaBar.setProgress(value + 100);
+            mMagentaValue.setText("" + value);
+            String text = mContext.getString(rep.getTextId()).toUpperCase();
+            mFilterTitle.setText(text);
+            updateText();
+        }
+    }
 
+    @Override
+    public void setUtilityPanelUI(View actionButton, View editControl) {
+        if (useCompact(mContext)) {
+            super.setUtilityPanelUI(actionButton, editControl);
+            return;
+        }
+        mActionButton = actionButton;
+        mEditControl = editControl;
+        mEditTitle.setCompoundDrawables(null, null, null, null);
+        LinearLayout group = (LinearLayout) editControl;
+        LayoutInflater inflater =
+                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        LinearLayout controls = (LinearLayout) inflater.inflate(
+                R.layout.filtershow_saturation_controls, group, false);
+        ViewGroup.LayoutParams lp = new LinearLayout.LayoutParams(
+                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+        controls.setLayoutParams(lp);
+        group.removeAllViews();
+        group.addView(controls);
+        mMainBar = (SeekBar) controls.findViewById(R.id.mainSeekbar);
+        mMainBar.setMax(200);
+        mMainBar.setOnSeekBarChangeListener(this);
+        mMainValue = (TextView) controls.findViewById(R.id.mainValue);
+        mRedBar = (SeekBar) controls.findViewById(R.id.redSeekBar);
+        mRedBar.setMax(200);
+        mRedBar.setOnSeekBarChangeListener(this);
+        mRedValue = (TextView) controls.findViewById(R.id.redValue);
+        mYellowBar = (SeekBar) controls.findViewById(R.id.yellowSeekBar);
+        mYellowBar.setMax(200);
+        mYellowBar.setOnSeekBarChangeListener(this);
+        mYellowValue = (TextView) controls.findViewById(R.id.yellowValue);
+        mGreenBar = (SeekBar) controls.findViewById(R.id.greenSeekBar);
+        mGreenBar.setMax(200);
+        mGreenBar.setOnSeekBarChangeListener(this);
+        mGreenValue = (TextView) controls.findViewById(R.id.greenValue);
+        mCyanBar = (SeekBar) controls.findViewById(R.id.cyanSeekBar);
+        mCyanBar.setMax(200);
+        mCyanBar.setOnSeekBarChangeListener(this);
+        mCyanValue = (TextView) controls.findViewById(R.id.cyanValue);
+        mBlueBar = (SeekBar) controls.findViewById(R.id.blueSeekBar);
+        mBlueBar.setMax(200);
+        mBlueBar.setOnSeekBarChangeListener(this);
+        mBlueValue = (TextView) controls.findViewById(R.id.blueValue);
+        mMagentaBar = (SeekBar) controls.findViewById(R.id.magentaSeekBar);
+        mMagentaBar.setMax(200);
+        mMagentaBar.setOnSeekBarChangeListener(this);
+        mMagentaValue = (TextView) controls.findViewById(R.id.magentaValue);
     }
 
     public int getParameterIndex(int id) {
@@ -127,6 +235,9 @@ public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeLi
 
     @Override
     public void detach() {
+        if (mButton == null) {
+            return;
+        }
         mButton.setListener(null);
         mButton.setOnClickListener(null);
     }
@@ -181,6 +292,9 @@ public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeLi
     }
 
     protected void switchToMode(FilterChanSatRepresentation csrep, int mode, String title) {
+        if (csrep == null) {
+            return;
+        }
         csrep.setParameterMode(mode);
         mCurrentlyEditing = title;
         mButton.setText(mCurrentlyEditing);
@@ -194,6 +308,44 @@ public class EditorChanSat extends ParametricEditor implements OnSeekBarChangeLi
     }
 
     @Override
+    public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
+        FilterChanSatRepresentation rep = getChanSatRep();
+        int value = progress - 100;
+        switch (sbar.getId()) {
+            case R.id.mainSeekbar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_MASTER);
+                mMainValue.setText("" + value);
+                break;
+            case R.id.redSeekBar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_RED);
+                mRedValue.setText("" + value);
+                break;
+            case R.id.yellowSeekBar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_YELLOW);
+                mYellowValue.setText("" + value);
+                break;
+            case R.id.greenSeekBar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_GREEN);
+                mGreenValue.setText("" + value);
+                break;
+            case R.id.cyanSeekBar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_CYAN);
+                mCyanValue.setText("" + value);
+                break;
+            case R.id.blueSeekBar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_BLUE);
+                mBlueValue.setText("" + value);
+                break;
+            case R.id.magentaSeekBar:
+                rep.setParameterMode(FilterChanSatRepresentation.MODE_MAGENTA);
+                mMagentaValue.setText("" + value);
+                break;
+        }
+        rep.setCurrentParameter(value);
+        commitLocalRepresentation();
+    }
+
+    @Override
     public void swapLeft(MenuItem item) {
         super.swapLeft(item);
         mButton.setTranslationX(0);
index 6f0a792..d80b147 100644 (file)
@@ -17,6 +17,7 @@
 package com.android.gallery3d.filtershow.editors;
 
 import android.content.Context;
+import android.content.res.Configuration;
 import android.graphics.Point;
 import android.util.Log;
 import android.view.View;
@@ -144,21 +145,9 @@ public class ParametricEditor extends Editor {
         };
     }
 
-    // TODO: need a better way to decide which representation
     static boolean useCompact(Context context) {
-        WindowManager w = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE));
-        Point size = new Point();
-        w.getDefaultDisplay().getSize(size);
-        if (size.x < size.y) { // if tall than wider
-            return true;
-        }
-        if (size.x < MINIMUM_WIDTH) {
-            return true;
-        }
-        if (size.y < MINIMUM_HEIGHT) {
-            return true;
-        }
-        return false;
+        return context.getResources().getConfiguration().orientation
+                == Configuration.ORIENTATION_PORTRAIT;
     }
 
     protected Parameter getParameterToEdit(FilterRepresentation rep) {