Skip to content
This repository was archived by the owner on Jan 7, 2023. It is now read-only.

added ability to change action buttons position #178 #201

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions lib/src/main/java/com/soundcloud/android/crop/Crop.java
Original file line number Diff line number Diff line change
@@ -26,6 +26,20 @@ interface Extra {
String MAX_X = "max_x";
String MAX_Y = "max_y";
String ERROR = "error";
String ACTION_BUTTONS_POSITION = "action_buttons_positions";
}

public enum ActionButtonsPosition {
TOP("TOP"), BOTTOM("BOTTOM");

private final String position;

ActionButtonsPosition(final String position) { this. position = position; }

@Override
public String toString() {
return position;
}
}

private Intent cropIntent;
@@ -79,6 +93,17 @@ public Crop withMaxSize(int width, int height) {
return this;
}

/**
* Set activity action buttons position: top or bottom
* This is optional function, ActionButtonsPosition.TOP is the default position of the buttons
*
* @param pos Enum with values: TOP, BOTTOM
*/
public Crop setActionButtonsPosition(ActionButtonsPosition pos) {
cropIntent.putExtra(Extra.ACTION_BUTTONS_POSITION, pos.toString());
return this;
}

/**
* Send the crop Intent from an Activity
*
Original file line number Diff line number Diff line change
@@ -33,6 +33,8 @@
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;

import java.io.IOException;
import java.io.InputStream;
@@ -126,6 +128,7 @@ private void loadInput() {
maxX = extras.getInt(Crop.Extra.MAX_X);
maxY = extras.getInt(Crop.Extra.MAX_Y);
saveUri = extras.getParcelable(MediaStore.EXTRA_OUTPUT);
getIntentActionButtonsPosition(extras.getString(Crop.Extra.ACTION_BUTTONS_POSITION));
}

sourceUri = intent.getData();
@@ -151,6 +154,48 @@ private void loadInput() {
}
}

private void getIntentActionButtonsPosition(String pos) {
Crop.ActionButtonsPosition actionButtonsPosition =
pos != null ? Crop.ActionButtonsPosition.valueOf(pos) : null;

if (actionButtonsPosition != null) {
switch (actionButtonsPosition) {
case TOP:
setActionButtonsPositionOnTop(true);
break;
case BOTTOM:
setActionButtonsPositionOnTop(false);
break;
}
} else {
setActionButtonsPositionOnTop(true);
}
}

private void setActionButtonsPositionOnTop(boolean onTop) {
final int disabled = 0;
final RelativeLayout actionButtonsLayout = (RelativeLayout) findViewById(R.id.action_buttons_layout);

final LayoutParams actionButtonsParams =
(RelativeLayout.LayoutParams) actionButtonsLayout.getLayoutParams();

final LayoutParams imageViewParams =
(RelativeLayout.LayoutParams) imageView.getLayoutParams();

if (onTop) {
actionButtonsParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, disabled);
imageViewParams.addRule(RelativeLayout.ABOVE, disabled);
imageViewParams.addRule(RelativeLayout.BELOW, actionButtonsLayout.getId());
} else {
actionButtonsParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
imageViewParams.addRule(RelativeLayout.BELOW, disabled);
imageViewParams.addRule(RelativeLayout.ABOVE, actionButtonsLayout.getId());
}

actionButtonsLayout.setLayoutParams(actionButtonsParams);
imageView.setLayoutParams(imageViewParams);
}

private int calculateBitmapSampleSize(Uri bitmapUri) throws IOException {
InputStream is = null;
BitmapFactory.Options options = new BitmapFactory.Options();
15 changes: 11 additions & 4 deletions lib/src/main/res/layout/crop__activity_crop.xml
Original file line number Diff line number Diff line change
@@ -5,15 +5,22 @@
android:layout_width="match_parent"
android:layout_height="match_parent">

<include
android:id="@+id/done_cancel_bar"
layout="@layout/crop__layout_done_cancel" />
<RelativeLayout
android:id="@+id/action_buttons_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="false">

<include
android:id="@+id/done_cancel_bar"
layout="@layout/crop__layout_done_cancel" />
</RelativeLayout>

<com.soundcloud.android.crop.CropImageView
android:id="@+id/crop_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/crop__texture"
android:layout_below="@id/done_cancel_bar" />
android:layout_below="@id/action_buttons_layout" />

</RelativeLayout>