| /* |
| * 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.gallery3d.filtershow.editors; |
| |
| import android.content.Context; |
| import android.util.AttributeSet; |
| import android.util.Log; |
| import android.view.LayoutInflater; |
| import android.view.Menu; |
| import android.view.MenuItem; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.Button; |
| import android.widget.FrameLayout; |
| import android.widget.LinearLayout; |
| import android.widget.PopupMenu; |
| import android.widget.SeekBar; |
| import android.widget.SeekBar.OnSeekBarChangeListener; |
| |
| import com.android.gallery3d.R; |
| import com.android.gallery3d.filtershow.cache.ImageLoader; |
| import com.android.gallery3d.filtershow.controller.Control; |
| import com.android.gallery3d.filtershow.filters.FilterRepresentation; |
| import com.android.gallery3d.filtershow.imageshow.ImageShow; |
| import com.android.gallery3d.filtershow.imageshow.MasterImage; |
| import com.android.gallery3d.filtershow.presets.ImagePreset; |
| |
| /** |
| * Base class for Editors Must contain a mImageShow and a top level view |
| */ |
| public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonListener { |
| protected Context mContext; |
| protected View mView; |
| protected ImageShow mImageShow; |
| protected FrameLayout mFrameLayout; |
| protected SeekBar mSeekBar; |
| Button mEditTitle; |
| protected Button mFilterTitle; |
| protected int mID; |
| private final String LOGTAG = "Editor"; |
| protected FilterRepresentation mLocalRepresentation = null; |
| protected byte mShowParameter = SHOW_VALUE_UNDEFINED; |
| private Button mButton; |
| public static byte SHOW_VALUE_UNDEFINED = -1; |
| public static byte SHOW_VALUE_OFF = 0; |
| public static byte SHOW_VALUE_INT = 1; |
| |
| public static void hackFixStrings(Menu menu) { |
| int count = menu.size(); |
| for (int i = 0; i < count; i++) { |
| MenuItem item = menu.getItem(i); |
| item.setTitle(item.getTitle().toString().toUpperCase()); |
| } |
| } |
| |
| public String calculateUserMessage(Context context, String effectName, Object parameterValue) { |
| return effectName.toUpperCase() + " " + parameterValue; |
| } |
| |
| protected Editor(int id) { |
| mID = id; |
| } |
| |
| public int getID() { |
| return mID; |
| } |
| |
| public byte showParameterValue() { |
| return mShowParameter; |
| } |
| |
| public boolean showsSeekBar() { |
| return true; |
| } |
| |
| public void setUpEditorUI(View actionButton, View editControl, |
| Button editTitle, Button stateButton) { |
| mEditTitle = editTitle; |
| mFilterTitle = stateButton; |
| mButton = editTitle; |
| setMenuIcon(true); |
| setUtilityPanelUI(actionButton, editControl); |
| } |
| |
| public boolean showsPopupIndicator() { |
| return true; |
| } |
| |
| /** |
| * @param actionButton the would be the area for menu etc |
| * @param editControl this is the black area for sliders etc |
| */ |
| public void setUtilityPanelUI(View actionButton, View editControl) { |
| |
| AttributeSet aset; |
| Context context = editControl.getContext(); |
| LayoutInflater inflater = |
| (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
| LinearLayout lp = (LinearLayout) inflater.inflate( |
| R.layout.filtershow_seekbar, (ViewGroup) editControl, true); |
| mSeekBar = (SeekBar) lp.findViewById(R.id.primarySeekBar); |
| mSeekBar.setOnSeekBarChangeListener(this); |
| |
| if (showsSeekBar()) { |
| mSeekBar.setOnSeekBarChangeListener(this); |
| mSeekBar.setVisibility(View.VISIBLE); |
| } else { |
| mSeekBar.setVisibility(View.INVISIBLE); |
| } |
| |
| if (mButton != null) { |
| if (showsPopupIndicator()) { |
| mButton.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, |
| R.drawable.filtershow_menu_marker, 0); |
| } else { |
| mButton.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0); |
| } |
| } |
| } |
| |
| @Override |
| public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) { |
| |
| } |
| |
| public void setPanel() { |
| |
| } |
| |
| public void createEditor(Context context,FrameLayout frameLayout) { |
| mContext = context; |
| mFrameLayout = frameLayout; |
| mLocalRepresentation = null; |
| } |
| |
| protected void unpack(int viewid, int layoutid) { |
| |
| if (mView == null) { |
| mView = mFrameLayout.findViewById(viewid); |
| if (mView == null) { |
| LayoutInflater inflater = (LayoutInflater) mContext.getSystemService |
| (Context.LAYOUT_INFLATER_SERVICE); |
| mView = inflater.inflate(layoutid, mFrameLayout, false); |
| mFrameLayout.addView(mView, mView.getLayoutParams()); |
| } |
| } |
| mImageShow = findImageShow(mView); |
| } |
| |
| private ImageShow findImageShow(View view) { |
| if (view instanceof ImageShow) { |
| return (ImageShow) view; |
| } |
| if (!(view instanceof ViewGroup)) { |
| return null; |
| } |
| ViewGroup vg = (ViewGroup) view; |
| int n = vg.getChildCount(); |
| for (int i = 0; i < n; i++) { |
| View v = vg.getChildAt(i); |
| if (v instanceof ImageShow) { |
| return (ImageShow) v; |
| } else if (v instanceof ViewGroup) { |
| return findImageShow(v); |
| } |
| } |
| return null; |
| } |
| |
| public View getTopLevelView() { |
| return mView; |
| } |
| |
| public ImageShow getImageShow() { |
| return mImageShow; |
| } |
| |
| public void setImageLoader(ImageLoader imageLoader) { |
| mImageShow.setImageLoader(imageLoader); |
| } |
| |
| public void setVisibility(int visible) { |
| mView.setVisibility(visible); |
| } |
| |
| public FilterRepresentation getLocalRepresentation() { |
| if (mLocalRepresentation == null) { |
| ImagePreset preset = MasterImage.getImage().getPreset(); |
| FilterRepresentation filterRepresentation = MasterImage.getImage().getCurrentFilterRepresentation(); |
| mLocalRepresentation = preset.getFilterRepresentationCopyFrom(filterRepresentation); |
| if (mShowParameter == SHOW_VALUE_UNDEFINED) { |
| boolean show = filterRepresentation.showParameterValue(); |
| mShowParameter = show ? SHOW_VALUE_INT : SHOW_VALUE_OFF; |
| } |
| |
| } |
| return mLocalRepresentation; |
| } |
| |
| public void commitLocalRepresentation() { |
| ImagePreset preset = MasterImage.getImage().getPreset(); |
| preset.updateFilterRepresentation(getLocalRepresentation()); |
| if (mButton != null) { |
| updateText(); |
| } |
| } |
| |
| protected void updateText() { |
| String s = ""; |
| if (mLocalRepresentation != null) { |
| s = mContext.getString(mLocalRepresentation.getTextId()); |
| } |
| mButton.setText(calculateUserMessage(mContext, s, "")); |
| } |
| |
| /** |
| * called after the filter is set and the select is called |
| */ |
| public void reflectCurrentFilter() { |
| mLocalRepresentation = null; |
| FilterRepresentation representation = getLocalRepresentation(); |
| if (representation != null && mFilterTitle != null && representation.getTextId() != 0) { |
| String text = mContext.getString(representation.getTextId()).toUpperCase(); |
| mFilterTitle.setText(text); |
| updateText(); |
| } |
| } |
| |
| public boolean useUtilityPanel() { |
| return true; |
| } |
| |
| public void openUtilityPanel(LinearLayout mAccessoryViewList) { |
| setMenuIcon(false); |
| if (mImageShow != null) { |
| mImageShow.openUtilityPanel(mAccessoryViewList); |
| } |
| } |
| |
| protected void setMenuIcon(boolean on) { |
| mEditTitle.setCompoundDrawablesRelativeWithIntrinsicBounds( |
| 0, 0, on ? R.drawable.filtershow_menu_marker : 0, 0); |
| } |
| |
| protected void createMenu(int[] strId, View button) { |
| PopupMenu pmenu = new PopupMenu(mContext, button); |
| Menu menu = pmenu.getMenu(); |
| for (int i = 0; i < strId.length; i++) { |
| menu.add(Menu.NONE, Menu.FIRST + i, 0, mContext.getString(strId[i])); |
| } |
| setMenuIcon(true); |
| |
| } |
| |
| public Control[] getControls() { |
| return null; |
| } |
| @Override |
| public void onStartTrackingTouch(SeekBar arg0) { |
| |
| } |
| |
| @Override |
| public void onStopTrackingTouch(SeekBar arg0) { |
| |
| } |
| |
| @Override |
| public void swapLeft(MenuItem item) { |
| |
| } |
| |
| @Override |
| public void swapRight(MenuItem item) { |
| |
| } |
| |
| public void detach() { |
| if (mImageShow != null) { |
| mImageShow.unselect(); |
| } |
| } |
| } |