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
Show file tree
Hide file tree
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
Expand Up @@ -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;
Expand Down Expand Up @@ -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
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand All @@ -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();
Expand Down
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
Expand Up @@ -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>