OSDN Git Service

merge in klp-release history after reset to klp-dev
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / filtershow / FilterShowActivity.java
index 56ae93e..9d5005e 100644 (file)
@@ -29,6 +29,7 @@ import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.Color;
 import android.graphics.Matrix;
 import android.graphics.Point;
 import android.graphics.Rect;
@@ -60,6 +61,7 @@ import android.widget.AdapterView.OnItemClickListener;
 import android.widget.FrameLayout;
 import android.widget.ShareActionProvider;
 import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
+import android.widget.Spinner;
 import android.widget.Toast;
 
 import com.android.gallery3d.R;
@@ -88,9 +90,11 @@ import com.android.gallery3d.filtershow.editors.EditorRotate;
 import com.android.gallery3d.filtershow.editors.EditorStraighten;
 import com.android.gallery3d.filtershow.editors.EditorTinyPlanet;
 import com.android.gallery3d.filtershow.editors.ImageOnlyEditor;
+import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterMirrorRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterRotateRepresentation;
+import com.android.gallery3d.filtershow.filters.FilterStraightenRepresentation;
 import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
 import com.android.gallery3d.filtershow.filters.FiltersManager;
 import com.android.gallery3d.filtershow.filters.ImageFilter;
@@ -114,7 +118,6 @@ import com.android.gallery3d.filtershow.ui.ExportDialog;
 import com.android.gallery3d.filtershow.ui.FramedTextButton;
 import com.android.gallery3d.util.GalleryUtils;
 import com.android.gallery3d.util.PrintJob;
-import com.android.gallery3d.util.UsageStatistics;
 import com.android.photos.data.GalleryBitmapPool;
 
 import java.io.File;
@@ -125,7 +128,8 @@ import java.util.ArrayList;
 import java.util.Vector;
 
 public class FilterShowActivity extends FragmentActivity implements OnItemClickListener,
-        OnShareTargetSelectedListener {
+        OnShareTargetSelectedListener, DialogInterface.OnShowListener,
+        DialogInterface.OnDismissListener{
 
     private String mAction = "";
     MasterImage mMasterImage = null;
@@ -147,7 +151,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
     private boolean mShowingTinyPlanet = false;
     private boolean mShowingImageStatePanel = false;
     private boolean mShowingVersionsPanel = false;
-    private boolean mShowingInformationPanel = false;
 
     private final Vector<ImageShow> mImageViews = new Vector<ImageShow>();
 
@@ -186,6 +189,9 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
 
     private ProcessingService mBoundService;
     private boolean mIsBound = false;
+    private Menu mMenu;
+    private DialogInterface mCurrentDialog = null;
+    private boolean mLoadingVisible = true;
 
     public ProcessingService getProcessingService() {
         return mBoundService;
@@ -242,14 +248,19 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         }
     }
 
-    private void setupPipeline() {
-        doBindService();
+    public void updateUIAfterServiceStarted() {
+        MasterImage.setMaster(mMasterImage);
         ImageFilter.setActivityForMemoryToasts(this);
         mUserPresetsManager = new UserPresetsManager(this);
         mUserPresetsAdapter = new UserPresetsAdapter(this);
-    }
 
-    public void updateUIAfterServiceStarted() {
+        setupMasterImage();
+        setupMenu();
+        setDefaultValues();
+        fillEditors();
+        getWindow().setBackgroundDrawable(new ColorDrawable(0));
+        loadXML();
+
         fillCategories();
         loadMainPanel();
         extractXMPData();
@@ -264,19 +275,11 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         if (onlyUsePortrait) {
             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
         }
-        MasterImage.setMaster(mMasterImage);
 
         clearGalleryBitmapPool();
-        setupPipeline();
-
-        setupMasterImage();
-        setDefaultValues();
-        fillEditors();
-
-        loadXML();
-        UsageStatistics.onContentViewChanged(UsageStatistics.COMPONENT_EDITOR, "Main");
-        UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR,
-                UsageStatistics.CATEGORY_LIFECYCLE, UsageStatistics.LIFECYCLE_START);
+        doBindService();
+        getWindow().setBackgroundDrawable(new ColorDrawable(Color.GRAY));
+        setContentView(R.layout.filtershow_splashscreen);
     }
 
     public boolean isShowingImageStatePanel() {
@@ -331,35 +334,12 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         }
     }
 
-    public void hideInformationPanel() {
-        FrameLayout infoLayout = (FrameLayout) findViewById(R.id.central_panel_container);
-        infoLayout.setVisibility(View.GONE);
-        Fragment fragment = getSupportFragmentManager().findFragmentByTag(InfoPanel.FRAGMENT_TAG);
-        if (fragment != null) {
-            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-            transaction.remove(fragment);
-            transaction.commit();
-        }
-        mShowingInformationPanel = false;
-    }
-
     public void toggleInformationPanel() {
-        mShowingInformationPanel = !mShowingInformationPanel;
-        if (!mShowingInformationPanel) {
-            hideInformationPanel();
-            showDefaultImageView();
-            return;
-        }
         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
         transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
-        FrameLayout infoLayout = (FrameLayout) findViewById(R.id.central_panel_container);
-        infoLayout.setVisibility(View.VISIBLE);
-        mEditorPlaceHolder.hide();
-        mImageShow.setVisibility(View.GONE);
 
         InfoPanel panel = new InfoPanel();
-        transaction.replace(R.id.central_panel_container, panel, InfoPanel.FRAGMENT_TAG);
-        transaction.commit();
+        panel.show(transaction, InfoPanel.FRAGMENT_TAG);
     }
 
     private void loadXML() {
@@ -492,8 +472,18 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
             mCategoryGeometryAdapter.clear();
         }
         mCategoryGeometryAdapter = new CategoryAdapter(this);
+        boolean found = false;
         for (FilterRepresentation representation : filtersRepresentations) {
             mCategoryGeometryAdapter.add(new Action(this, representation));
+            if (representation instanceof FilterDrawRepresentation) {
+                found = true;
+            }
+        }
+        if (!found) {
+            FilterRepresentation representation = new FilterDrawRepresentation();
+            Action action = new Action(this, representation);
+            action.setIsDoubleAction(true);
+            mCategoryGeometryAdapter.add(action);
         }
     }
 
@@ -549,13 +539,14 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size);
         Spline.setCurveHandle(curveHandle, curveHandleSize);
         Spline.setCurveWidth((int) getPixelsFromDip(3));
+
+        mOriginalImageUri = null;
     }
 
     private void startLoadBitmap(Uri uri) {
-        final View loading = findViewById(R.id.loading);
         final View imageShow = findViewById(R.id.imageShow);
         imageShow.setVisibility(View.INVISIBLE);
-        loading.setVisibility(View.VISIBLE);
+        startLoadingIndicator();
         mShowingTinyPlanet = false;
         mLoadBitmapTask = new LoadBitmapTask();
         mLoadBitmapTask.execute(uri);
@@ -673,6 +664,18 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
             FilterMirrorRepresentation r = (FilterMirrorRepresentation) representation;
             r.cycle();
         }
+        if (representation.isBooleanFilter()) {
+            ImagePreset preset = MasterImage.getImage().getPreset();
+            if (preset.getRepresentation(representation) != null) {
+                // remove
+                ImagePreset copy = new ImagePreset(preset);
+                copy.removeFilter(representation);
+                FilterRepresentation filterRepresentation = representation.copy();
+                MasterImage.getImage().setPreset(copy, filterRepresentation, true);
+                MasterImage.getImage().setCurrentFilterRepresentation(null);
+                return;
+            }
+        }
         useFilterRepresentation(representation);
 
         // show representation
@@ -681,7 +684,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         }
         mCurrentEditor = mEditorPlaceHolder.showEditor(representation.getEditorId());
         loadEditorPanel(representation, mCurrentEditor);
-        hideInformationPanel();
     }
 
     public Editor getEditor(int editorID) {
@@ -706,6 +708,16 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         return findViewById(id);
     }
 
+    @Override
+    public void onShow(DialogInterface dialog) {
+        mCurrentDialog = dialog;
+    }
+
+    @Override
+    public void onDismiss(DialogInterface dialogInterface) {
+        mCurrentDialog = null;
+    }
+
     private class LoadHighresBitmapTask extends AsyncTask<Void, Void, Boolean> {
         @Override
         protected Boolean doInBackground(Void... params) {
@@ -740,9 +752,20 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         }
     }
 
+    public boolean isLoadingVisible() {
+        return mLoadingVisible;
+    }
+
+    public void startLoadingIndicator() {
+        final View loading = findViewById(R.id.loading);
+        mLoadingVisible = true;
+        loading.setVisibility(View.VISIBLE);
+    }
+
     public void stopLoadingIndicator() {
         final View loading = findViewById(R.id.loading);
         loading.setVisibility(View.GONE);
+        mLoadingVisible = false;
     }
 
     private class LoadBitmapTask extends AsyncTask<Uri, Boolean, Boolean> {
@@ -780,7 +803,8 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
             }
 
             if (!result) {
-                if (!mOriginalImageUri.equals(mSelectedImageUri)) {
+                if (mOriginalImageUri != null
+                        && !mOriginalImageUri.equals(mSelectedImageUri)) {
                     mOriginalImageUri = mSelectedImageUri;
                     mOriginalPreset = null;
                     Toast.makeText(FilterShowActivity.this,
@@ -953,12 +977,19 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
                 .getActionProvider();
         mShareActionProvider.setShareIntent(getDefaultShareIntent());
         mShareActionProvider.setOnShareTargetSelectedListener(this);
+        mMenu = menu;
+        setupMenu();
+        return true;
+    }
 
-        MenuItem undoItem = menu.findItem(R.id.undoButton);
-        MenuItem redoItem = menu.findItem(R.id.redoButton);
-        MenuItem resetItem = menu.findItem(R.id.resetHistoryButton);
+    private void setupMenu(){
+        if (mMenu == null || mMasterImage == null) {
+            return;
+        }
+        MenuItem undoItem = mMenu.findItem(R.id.undoButton);
+        MenuItem redoItem = mMenu.findItem(R.id.redoButton);
+        MenuItem resetItem = mMenu.findItem(R.id.resetHistoryButton);
         mMasterImage.getHistory().setMenuItems(undoItem, redoItem, resetItem);
-        return true;
     }
 
     @Override
@@ -986,8 +1017,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
                 mMasterImage.onHistoryItemClick(position);
                 backToMain();
                 invalidateViews();
-                UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR,
-                        UsageStatistics.CATEGORY_BUTTON_PRESS, "Undo");
                 return true;
             }
             case R.id.redoButton: {
@@ -995,21 +1024,14 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
                 int position = adapter.redo();
                 mMasterImage.onHistoryItemClick(position);
                 invalidateViews();
-                UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR,
-                        UsageStatistics.CATEGORY_BUTTON_PRESS, "Redo");
                 return true;
             }
             case R.id.resetHistoryButton: {
                 resetHistory();
-                UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR,
-                        UsageStatistics.CATEGORY_BUTTON_PRESS, "ResetHistory");
                 return true;
             }
             case R.id.showImageStateButton: {
                 toggleImageStatePanel();
-                UsageStatistics.onEvent(UsageStatistics.COMPONENT_EDITOR,
-                        UsageStatistics.CATEGORY_BUTTON_PRESS,
-                        mShowingImageStatePanel ? "ShowPanel" : "HidePanel");
                 return true;
             }
             case R.id.exportFlattenButton: {
@@ -1201,13 +1223,19 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
     public void onConfigurationChanged(Configuration newConfig)
     {
         super.onConfigurationChanged(newConfig);
+
         setDefaultValues();
+        if (mMasterImage == null) {
+            return;
+        }
         loadXML();
         fillCategories();
         loadMainPanel();
 
-        mShowingInformationPanel = false;
-
+        if (mCurrentDialog != null) {
+            mCurrentDialog.dismiss();
+            mCurrentDialog = null;
+        }
         // mLoadBitmapTask==null implies you have looked at the intent
         if (!mShowingTinyPlanet && (mLoadBitmapTask == null)) {
             mCategoryFiltersAdapter.removeTinyPlanet();
@@ -1224,7 +1252,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
         mMasterImage.setHistoryManager(historyManager);
         mMasterImage.setStateAdapter(imageStateAdapter);
         mMasterImage.setActivity(this);
-        mMasterImage.setFirstLoad(true);
 
         if (Runtime.getRuntime().maxMemory() > LIMIT_SUPPORTS_HIGHRES) {
             mMasterImage.setSupportsHighRes(true);
@@ -1244,7 +1271,6 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
     }
 
     public void showDefaultImageView() {
-        hideInformationPanel();
         mEditorPlaceHolder.hide();
         mImageShow.setVisibility(View.VISIBLE);
         MasterImage.getImage().setCurrentFilter(null);