private Intent getDefaultShareIntent() {
   Intent intent = new Intent(Intent.ACTION_SEND);
   intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
   intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
   intent.setType(SharedImageProvider.MIME_TYPE);
   mSharedOutputFile = SaveCopyTask.getNewFile(this, mImageLoader.getUri());
   Uri uri =
       Uri.withAppendedPath(
           SharedImageProvider.CONTENT_URI, Uri.encode(mSharedOutputFile.getAbsolutePath()));
   intent.putExtra(Intent.EXTRA_STREAM, uri);
   return intent;
 }
 public void saveImage() {
   if (mImageShow.hasModifications()) {
     // Get the name of the album, to which the image will be saved
     File saveDir = SaveCopyTask.getFinalSaveDirectory(this, mImageLoader.getUri());
     int bucketId = GalleryUtils.getBucketId(saveDir.getPath());
     String albumName = LocalAlbum.getLocalizedName(getResources(), bucketId, null);
     showSavingProgress(albumName);
     mImageShow.saveImage(this, null);
   } else {
     finish();
   }
 }
Example #3
0
 private Bitmap createNotificationBitmap(Bitmap preview, Uri sourceUri, ImagePreset preset) {
   int notificationBitmapSize =
       Resources.getSystem().getDimensionPixelSize(android.R.dimen.notification_large_icon_width);
   if (preview != null) {
     return Bitmap.createScaledBitmap(
         preview, notificationBitmapSize, notificationBitmapSize, true);
   }
   Bitmap bitmap =
       ImageLoader.loadConstrainedBitmap(
           sourceUri, getContext(), notificationBitmapSize, null, true);
   CachingPipeline pipeline = new CachingPipeline(FiltersManager.getManager(), "Thumb");
   return pipeline.renderFinalImage(bitmap, preset);
 }
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ImageFilterRS.setRenderScriptContext(this);

    ImageShow.setDefaultBackgroundColor(getResources().getColor(R.color.background_screen));
    ImageSmallFilter.setDefaultBackgroundColor(
        getResources().getColor(R.color.background_main_toolbar));
    // TODO: get those values from XML.
    ImageZoom.setZoomedSize(getPixelsFromDip(256));
    FramedTextButton.setTextSize((int) getPixelsFromDip(14));
    FramedTextButton.setTrianglePadding((int) getPixelsFromDip(4));
    FramedTextButton.setTriangleSize((int) getPixelsFromDip(10));
    ImageShow.setTextSize((int) getPixelsFromDip(12));
    ImageShow.setTextPadding((int) getPixelsFromDip(10));
    ImageShow.setOriginalTextMargin((int) getPixelsFromDip(4));
    ImageShow.setOriginalTextSize((int) getPixelsFromDip(18));
    ImageShow.setOriginalText(getResources().getString(R.string.original_picture_text));
    ImageButtonTitle.setTextSize((int) getPixelsFromDip(12));
    ImageButtonTitle.setTextPadding((int) getPixelsFromDip(10));
    ImageSmallFilter.setMargin((int) getPixelsFromDip(3));
    ImageSmallFilter.setTextMargin((int) getPixelsFromDip(4));
    Drawable curveHandle = getResources().getDrawable(R.drawable.camera_crop);
    int curveHandleSize = (int) getResources().getDimension(R.dimen.crop_indicator_size);
    Spline.setCurveHandle(curveHandle, curveHandleSize);
    Spline.setCurveWidth((int) getPixelsFromDip(3));

    setContentView(R.layout.filtershow_activity);
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(R.layout.filtershow_actionbar);

    actionBar
        .getCustomView()
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View view) {
                saveImage();
              }
            });

    mImageLoader = new ImageLoader(this, getApplicationContext());

    LinearLayout listFilters = (LinearLayout) findViewById(R.id.listFilters);
    LinearLayout listBorders = (LinearLayout) findViewById(R.id.listBorders);
    LinearLayout listColors = (LinearLayout) findViewById(R.id.listColorsFx);

    mImageShow = (ImageShow) findViewById(R.id.imageShow);
    mImageCurves = (ImageCurves) findViewById(R.id.imageCurves);
    mImageBorders = (ImageBorder) findViewById(R.id.imageBorder);
    mImageStraighten = (ImageStraighten) findViewById(R.id.imageStraighten);
    mImageZoom = (ImageZoom) findViewById(R.id.imageZoom);
    mImageCrop = (ImageCrop) findViewById(R.id.imageCrop);
    mImageRotate = (ImageRotate) findViewById(R.id.imageRotate);
    mImageFlip = (ImageFlip) findViewById(R.id.imageFlip);
    mImageTinyPlanet = (ImageTinyPlanet) findViewById(R.id.imageTinyPlanet);

    mImageCrop.setAspectTextSize((int) getPixelsFromDip(18));
    ImageCrop.setTouchTolerance((int) getPixelsFromDip(25));
    mImageViews.add(mImageShow);
    mImageViews.add(mImageCurves);
    mImageViews.add(mImageBorders);
    mImageViews.add(mImageStraighten);
    mImageViews.add(mImageZoom);
    mImageViews.add(mImageCrop);
    mImageViews.add(mImageRotate);
    mImageViews.add(mImageFlip);
    mImageViews.add(mImageTinyPlanet);

    mListFx = findViewById(R.id.fxList);
    mListBorders = findViewById(R.id.bordersList);
    mListGeometry = findViewById(R.id.geometryList);
    mListFilterButtons = findViewById(R.id.filterButtonsList);
    mListColors = findViewById(R.id.colorsFxList);
    mListViews.add(mListFx);
    mListViews.add(mListBorders);
    mListViews.add(mListGeometry);
    mListViews.add(mListFilterButtons);
    mListViews.add(mListColors);

    mFxButton = (ImageButton) findViewById(R.id.fxButton);
    mBorderButton = (ImageButton) findViewById(R.id.borderButton);
    mGeometryButton = (ImageButton) findViewById(R.id.geometryButton);
    mColorsButton = (ImageButton) findViewById(R.id.colorsButton);

    mBottomPanelButtons.add(mFxButton);
    mBottomPanelButtons.add(mBorderButton);
    mBottomPanelButtons.add(mGeometryButton);
    mBottomPanelButtons.add(mColorsButton);

    mImageShow.setImageLoader(mImageLoader);
    mImageCurves.setImageLoader(mImageLoader);
    mImageCurves.setMaster(mImageShow);
    mImageBorders.setImageLoader(mImageLoader);
    mImageBorders.setMaster(mImageShow);
    mImageStraighten.setImageLoader(mImageLoader);
    mImageStraighten.setMaster(mImageShow);
    mImageZoom.setImageLoader(mImageLoader);
    mImageZoom.setMaster(mImageShow);
    mImageCrop.setImageLoader(mImageLoader);
    mImageCrop.setMaster(mImageShow);
    mImageRotate.setImageLoader(mImageLoader);
    mImageRotate.setMaster(mImageShow);
    mImageFlip.setImageLoader(mImageLoader);
    mImageFlip.setMaster(mImageShow);
    mImageTinyPlanet.setImageLoader(mImageLoader);
    mImageTinyPlanet.setMaster(mImageShow);

    mPanelController.setActivity(this);

    mPanelController.addImageView(findViewById(R.id.imageShow));
    mPanelController.addImageView(findViewById(R.id.imageCurves));
    mPanelController.addImageView(findViewById(R.id.imageBorder));
    mPanelController.addImageView(findViewById(R.id.imageStraighten));
    mPanelController.addImageView(findViewById(R.id.imageCrop));
    mPanelController.addImageView(findViewById(R.id.imageRotate));
    mPanelController.addImageView(findViewById(R.id.imageFlip));
    mPanelController.addImageView(findViewById(R.id.imageZoom));
    mPanelController.addImageView(findViewById(R.id.imageTinyPlanet));

    mPanelController.addPanel(mFxButton, mListFx, 0);
    mPanelController.addPanel(mBorderButton, mListBorders, 1);

    mPanelController.addPanel(mGeometryButton, mListGeometry, 2);
    mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton));
    mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton));
    mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton));
    mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton));

    mPanelController.addPanel(mColorsButton, mListColors, 3);

    int[] recastIDs = {
      R.id.tinyplanetButton,
      R.id.vignetteButton,
      R.id.vibranceButton,
      R.id.contrastButton,
      R.id.saturationButton,
      R.id.bwfilterButton,
      R.id.wbalanceButton,
      R.id.hueButton,
      R.id.exposureButton,
      R.id.shadowRecoveryButton
    };
    ImageFilter[] filters = {
      new ImageFilterTinyPlanet(),
      new ImageFilterVignette(),
      new ImageFilterVibrance(),
      new ImageFilterContrast(),
      new ImageFilterSaturated(),
      new ImageFilterBwFilter(),
      new ImageFilterWBalance(),
      new ImageFilterHue(),
      new ImageFilterExposure(),
      new ImageFilterShadows()
    };

    for (int i = 0; i < filters.length; i++) {
      ImageSmallFilter fView = new ImageSmallFilter(this);
      View v = listColors.findViewById(recastIDs[i]);
      int pos = listColors.indexOfChild(v);
      listColors.removeView(v);

      filters[i].setParameter(filters[i].getPreviewParameter());
      if (v instanceof ImageButtonTitle) filters[i].setName(((ImageButtonTitle) v).getText());
      fView.setImageFilter(filters[i]);
      fView.setController(this);
      fView.setImageLoader(mImageLoader);
      fView.setId(recastIDs[i]);
      mPanelController.addComponent(mColorsButton, fView);
      listColors.addView(fView, pos);
    }

    int[] overlayIDs = {R.id.sharpenButton, R.id.curvesButtonRGB};
    int[] overlayBitmaps = {
      R.drawable.filtershow_button_colors_sharpen, R.drawable.filtershow_button_colors_curve
    };
    int[] overlayNames = {R.string.sharpness, R.string.curvesRGB};

    for (int i = 0; i < overlayIDs.length; i++) {
      ImageWithIcon fView = new ImageWithIcon(this);
      View v = listColors.findViewById(overlayIDs[i]);
      int pos = listColors.indexOfChild(v);
      listColors.removeView(v);
      final int sid = overlayNames[i];
      ImageFilterExposure efilter =
          new ImageFilterExposure() {
            {
              mName = getString(sid);
            }
          };
      efilter.setParameter(-300);
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), overlayBitmaps[i]);

      fView.setIcon(bitmap);
      fView.setImageFilter(efilter);
      fView.setController(this);
      fView.setImageLoader(mImageLoader);
      fView.setId(overlayIDs[i]);
      mPanelController.addComponent(mColorsButton, fView);
      listColors.addView(fView, pos);
    }

    mPanelController.addView(findViewById(R.id.applyEffect));
    mPanelController.addView(findViewById(R.id.pickCurvesChannel));
    mPanelController.addView(findViewById(R.id.aspect));
    findViewById(R.id.resetOperationsButton)
        .setOnClickListener(createOnClickResetOperationsButton());

    ListView operationsList = (ListView) findViewById(R.id.operationsList);
    operationsList.setAdapter(mImageShow.getHistory());
    operationsList.setOnItemClickListener(this);
    ListView imageStateList = (ListView) findViewById(R.id.imageStateList);
    imageStateList.setAdapter(mImageShow.getImageStateAdapter());
    mImageLoader.setAdapter(mImageShow.getHistory());

    fillListImages(listFilters);
    fillListBorders(listBorders);

    SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar);
    seekBar.setMax(SEEK_BAR_MAX);

    mImageShow.setSeekBar(seekBar);
    mImageZoom.setSeekBar(seekBar);
    mImageTinyPlanet.setSeekBar(seekBar);
    mPanelController.setRowPanel(findViewById(R.id.secondRowPanel));
    mPanelController.setUtilityPanel(
        this,
        findViewById(R.id.filterButtonsList),
        findViewById(R.id.applyEffect),
        findViewById(R.id.aspect),
        findViewById(R.id.pickCurvesChannel));
    mPanelController.setMasterImage(mImageShow);
    mPanelController.setCurrentPanel(mFxButton);
    Intent intent = getIntent();
    if (intent.getBooleanExtra(LAUNCH_FULLSCREEN, false)) {
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    if (intent.getData() != null) {
      startLoadBitmap(intent.getData());
    } else {
      pickImage();
    }

    String action = intent.getAction();
    if (action.equalsIgnoreCase(CROP_ACTION)) {
      mPanelController.showComponent(findViewById(R.id.cropButton));
    } else if (action.equalsIgnoreCase(TINY_PLANET_ACTION)) {
      mPanelController.showComponent(findViewById(R.id.tinyplanetButton));
    }
  }
  public synchronized void render(RenderingRequest request) {
    // TODO: cleanup/remove GEOMETRY / FILTERS paths
    synchronized (CachingPipeline.class) {
      if (getRenderScriptContext() == null) {
        return;
      }
      if ((request.getType() != RenderingRequest.PARTIAL_RENDERING
              && request.getType() != RenderingRequest.ICON_RENDERING
              && request.getBitmap() == null)
          || request.getImagePreset() == null) {
        return;
      }

      if (DEBUG) {
        Log.v(LOGTAG, "render image of type " + getType(request));
      }

      Bitmap bitmap = request.getBitmap();
      ImagePreset preset = request.getImagePreset();
      setupEnvironment(preset, true);
      mFiltersManager.freeFilterResources(preset);

      if (request.getType() == RenderingRequest.PARTIAL_RENDERING) {
        MasterImage master = MasterImage.getImage();
        bitmap =
            ImageLoader.getScaleOneImageForPreset(
                master.getActivity(),
                mEnvironment.getBimapCache(),
                master.getUri(),
                request.getBounds(),
                request.getDestination());
        if (bitmap == null) {
          Log.w(LOGTAG, "could not get bitmap for: " + getType(request));
          return;
        }
      }

      if (request.getType() == RenderingRequest.FULL_RENDERING
          || request.getType() == RenderingRequest.GEOMETRY_RENDERING
          || request.getType() == RenderingRequest.FILTERS_RENDERING) {
        updateOriginalAllocation(preset);
      }

      if (DEBUG && bitmap != null) {
        Log.v(
            LOGTAG,
            "after update, req bitmap ("
                + bitmap.getWidth()
                + "x"
                + bitmap.getHeight()
                + " ? resizeOriginal ("
                + mResizedOriginalBitmap.getWidth()
                + "x"
                + mResizedOriginalBitmap.getHeight());
      }

      if (request.getType() == RenderingRequest.FULL_RENDERING
          || request.getType() == RenderingRequest.GEOMETRY_RENDERING) {
        mOriginalAllocation.copyTo(bitmap);
      } else if (request.getType() == RenderingRequest.FILTERS_RENDERING) {
        mFiltersOnlyOriginalAllocation.copyTo(bitmap);
      }

      if (request.getType() == RenderingRequest.FULL_RENDERING
          || request.getType() == RenderingRequest.FILTERS_RENDERING
          || request.getType() == RenderingRequest.ICON_RENDERING
          || request.getType() == RenderingRequest.PARTIAL_RENDERING
          || request.getType() == RenderingRequest.STYLE_ICON_RENDERING) {

        if (request.getType() == RenderingRequest.ICON_RENDERING) {
          mEnvironment.setQuality(FilterEnvironment.QUALITY_ICON);
        } else {
          mEnvironment.setQuality(FilterEnvironment.QUALITY_PREVIEW);
        }

        if (request.getType() == RenderingRequest.ICON_RENDERING) {
          Rect iconBounds = request.getIconBounds();
          Bitmap source = MasterImage.getImage().getThumbnailBitmap();
          if (iconBounds.width() > source.getWidth() * 2) {
            source = MasterImage.getImage().getLargeThumbnailBitmap();
          }
          if (iconBounds != null) {
            bitmap =
                mEnvironment.getBitmap(iconBounds.width(), iconBounds.height(), BitmapCache.ICON);
            Canvas canvas = new Canvas(bitmap);
            Matrix m = new Matrix();
            float minSize = Math.min(source.getWidth(), source.getHeight());
            float maxSize = Math.max(iconBounds.width(), iconBounds.height());
            float scale = maxSize / minSize;
            m.setScale(scale, scale);
            float dx = (iconBounds.width() - (source.getWidth() * scale)) / 2.0f;
            float dy = (iconBounds.height() - (source.getHeight() * scale)) / 2.0f;
            m.postTranslate(dx, dy);
            canvas.drawBitmap(source, m, new Paint(Paint.FILTER_BITMAP_FLAG));
          } else {
            bitmap = mEnvironment.getBitmapCopy(source, BitmapCache.ICON);
          }
        }
        Bitmap bmp = preset.apply(bitmap, mEnvironment);
        if (!mEnvironment.needsStop()) {
          request.setBitmap(bmp);
        }
        mFiltersManager.freeFilterResources(preset);
      }
    }
  }