diff --git a/app/src/main/java/org/solovyev/android/calculator/function/FunctionParamsView.java b/app/src/main/java/org/solovyev/android/calculator/function/FunctionParamsView.java index fd4bfdc1..d2cf2a29 100644 --- a/app/src/main/java/org/solovyev/android/calculator/function/FunctionParamsView.java +++ b/app/src/main/java/org/solovyev/android/calculator/function/FunctionParamsView.java @@ -24,29 +24,28 @@ package org.solovyev.android.calculator.function; import android.annotation.TargetApi; import android.content.Context; +import android.content.res.Resources; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.util.AttributeSet; +import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; -import android.widget.Button; -import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.TextView; - +import android.widget.*; import org.solovyev.android.Check; import org.solovyev.android.calculator.App; +import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; -import java.util.ArrayList; -import java.util.List; - import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; @@ -55,11 +54,22 @@ public class FunctionParamsView extends LinearLayout { @Nonnull public static final String PARAM_VIEW_TAG = "param-view"; - private static final int HEADERS = 1; + private static final int FOOTERS = 1; private static final int PARAM_VIEW_INDEX = 3; private static final int START_ROW_ID = App.generateViewId(); + private final int clickableAreaSize; + private final int imageButtonSize; + private final int imageButtonPadding; + @Nonnull + private final Preferences.Gui.Theme theme = App.getTheme(); private int maxRowId = START_ROW_ID; - private final int clickableAreaSize = getResources().getDimensionPixelSize(R.dimen.cpp_clickable_area_size); + + { + final Resources resources = getResources(); + clickableAreaSize = resources.getDimensionPixelSize(R.dimen.cpp_clickable_area_size); + imageButtonSize = resources.getDimensionPixelSize(R.dimen.cpp_image_button_size); + imageButtonPadding = resources.getDimensionPixelSize(R.dimen.cpp_image_button_padding); + } public FunctionParamsView(Context context) { super(context); @@ -82,19 +92,31 @@ public class FunctionParamsView extends LinearLayout { final Context context = getContext(); final LinearLayout headerView = makeRowView(context); - final Button addButton = new Button(context); - addButton.setText("+"); + final ImageButton addButton = makeButton(theme.light ? R.drawable.ic_add_black_24dp : R.drawable.ic_add_white_24dp); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addParam(null); } }); - headerView.addView(addButton, new LayoutParams(clickableAreaSize, WRAP_CONTENT)); - headerView.addView(new View(context), new LayoutParams(0, WRAP_CONTENT, 1)); + headerView.addView(addButton, makeButtonParams()); + headerView.addView(new View(context), new LayoutParams(3 * clickableAreaSize, WRAP_CONTENT)); addView(headerView, new ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)); } + @NonNull + private ImageButton makeButton(int icon) { + final ImageButton addButton = new ImageButton(getContext()); + addButton.setImageResource(icon); + addButton.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + addButton.setPadding(imageButtonPadding, imageButtonPadding, imageButtonPadding, imageButtonPadding); + final TypedValue value = new TypedValue(); + if (getContext().getTheme().resolveAttribute(R.attr.selectableItemBackgroundBorderless, value, true)) { + addButton.setBackgroundResource(value.resourceId); + } + return addButton; + } + @Nonnull private LinearLayout makeRowView(@Nonnull Context context) { final LinearLayout rowView = new LinearLayout(context); @@ -118,35 +140,32 @@ public class FunctionParamsView extends LinearLayout { final Context context = getContext(); final LinearLayout rowView = makeRowView(context); - final Button removeButton = new Button(context); + final ImageButton removeButton = makeButton(theme.light ? R.drawable.ic_remove_black_24dp : R.drawable.ic_remove_white_24dp); removeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { removeRow(rowView); } }); - removeButton.setText("−"); - rowView.addView(removeButton, new LayoutParams(clickableAreaSize, WRAP_CONTENT)); + rowView.addView(removeButton, makeButtonParams()); - final Button upButton = new Button(context); + final ImageButton upButton = makeButton(theme.light ? R.drawable.ic_arrow_upward_black_24dp : R.drawable.ic_arrow_upward_white_24dp); upButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { upRow(rowView); } }); - upButton.setText("↑"); - rowView.addView(upButton, new LayoutParams(clickableAreaSize, WRAP_CONTENT)); + rowView.addView(upButton, makeButtonParams()); - final Button downButton = new Button(context); + final ImageButton downButton = makeButton(theme.light ? R.drawable.ic_arrow_downward_black_24dp : R.drawable.ic_arrow_downward_white_24dp); downButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { downRow(rowView); } }); - downButton.setText("↓"); - rowView.addView(downButton, new LayoutParams(clickableAreaSize, WRAP_CONTENT)); + rowView.addView(downButton, makeButtonParams()); final TextInputLayout paramLabel = new TextInputLayout(context); final EditText paramView = new EditText(context); @@ -162,19 +181,25 @@ public class FunctionParamsView extends LinearLayout { rowView.addView(paramLabel, new LayoutParams(0, WRAP_CONTENT, 1)); - addView(rowView, new ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)); + // for row is added at 0 position, the consequent rows + addView(rowView, Math.max(0, getChildCount() - 1), new ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)); + } + + @NonNull + private LayoutParams makeButtonParams() { + return new LayoutParams(imageButtonSize, imageButtonSize); } private void downRow(@Nonnull ViewGroup row) { final int index = indexOfChild(row); - if (index < getChildCount() - 1) { + if (index < getChildCount() - 1 - FOOTERS) { swap(row, getRow(index + 1)); } } private void upRow(@Nonnull ViewGroup row) { final int index = indexOfChild(row); - if (index > 1) { + if (index > 0) { swap(row, getRow(index - 1)); } } @@ -194,7 +219,7 @@ public class FunctionParamsView extends LinearLayout { @Nonnull private ViewGroup getRow(int index) { - Check.isTrue(index >= 0 && index < getChildCount()); + Check.isTrue(index >= 0 && index < getChildCount() - FOOTERS); return (ViewGroup) getChildAt(index); } @@ -206,7 +231,7 @@ public class FunctionParamsView extends LinearLayout { public List getParams() { final List params = new ArrayList<>(getChildCount()); - for (int i = HEADERS; i < getChildCount(); i++) { + for (int i = 0; i < getChildCount() - FOOTERS; i++) { final ViewGroup row = getRow(i); final EditText paramView = getParamView(row); params.add(paramView.getText().toString()); @@ -235,11 +260,11 @@ public class FunctionParamsView extends LinearLayout { @Nonnull private int[] getRowIds() { final int childCount = getChildCount(); - final int[] rowIds = new int[childCount - 1]; - for (int i = HEADERS; i < childCount; i++) { + final int[] rowIds = new int[childCount - FOOTERS]; + for (int i = 0; i < childCount - FOOTERS; i++) { final ViewGroup row = getRow(i); final EditText paramView = getParamView(row); - rowIds[i - 1] = paramView.getId(); + rowIds[i] = paramView.getId(); } return rowIds; } @@ -263,7 +288,7 @@ public class FunctionParamsView extends LinearLayout { @Nonnull public TextInputLayout getParamLabel(int param) { - return getParamLabel(getRow(param + HEADERS)); + return getParamLabel(getRow(param)); } public static final class SavedState extends BaseSavedState { diff --git a/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png new file mode 100644 index 00000000..c04b523c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_add_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png new file mode 100644 index 00000000..694179bd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_downward_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_arrow_downward_black_24dp.png new file mode 100644 index 00000000..ac842b76 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_downward_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_downward_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_arrow_downward_white_24dp.png new file mode 100644 index 00000000..6686f164 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_downward_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_upward_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_arrow_upward_black_24dp.png new file mode 100644 index 00000000..705f7ae8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_upward_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_upward_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_arrow_upward_white_24dp.png new file mode 100644 index 00000000..c39725cb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_upward_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_remove_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_remove_black_24dp.png new file mode 100644 index 00000000..5dbe79ca Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_remove_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_remove_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_remove_white_24dp.png new file mode 100644 index 00000000..68f65ddb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_remove_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png new file mode 100644 index 00000000..23bf1192 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_add_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png new file mode 100644 index 00000000..3856041d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_downward_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_arrow_downward_black_24dp.png new file mode 100644 index 00000000..5c935c71 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_downward_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_downward_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_arrow_downward_white_24dp.png new file mode 100644 index 00000000..563dae43 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_downward_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_upward_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_arrow_upward_black_24dp.png new file mode 100644 index 00000000..368eb65f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_upward_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_upward_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_arrow_upward_white_24dp.png new file mode 100644 index 00000000..3405c564 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_upward_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_remove_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_remove_black_24dp.png new file mode 100644 index 00000000..262b657c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_remove_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_remove_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_remove_white_24dp.png new file mode 100644 index 00000000..23a9f6a7 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_remove_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png new file mode 100644 index 00000000..3191d528 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_add_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png new file mode 100644 index 00000000..67bb598e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_downward_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_arrow_downward_black_24dp.png new file mode 100644 index 00000000..ff939697 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_downward_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_downward_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_arrow_downward_white_24dp.png new file mode 100644 index 00000000..bad21287 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_downward_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_upward_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_arrow_upward_black_24dp.png new file mode 100644 index 00000000..f2b35ac2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_upward_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_upward_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_arrow_upward_white_24dp.png new file mode 100644 index 00000000..edd9b1dd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_upward_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_remove_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_remove_black_24dp.png new file mode 100644 index 00000000..6a899e35 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_remove_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_remove_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_remove_white_24dp.png new file mode 100644 index 00000000..d28b7118 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_remove_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png new file mode 100644 index 00000000..a84106b0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_add_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png new file mode 100644 index 00000000..0fdced8f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_downward_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_downward_black_24dp.png new file mode 100644 index 00000000..fafe4fb9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_downward_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_downward_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_downward_white_24dp.png new file mode 100644 index 00000000..65c08e1d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_downward_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_upward_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_upward_black_24dp.png new file mode 100644 index 00000000..99622e7c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_upward_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_upward_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_upward_white_24dp.png new file mode 100644 index 00000000..d7b27da8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_upward_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_remove_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_remove_black_24dp.png new file mode 100644 index 00000000..a3a54db3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_remove_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_remove_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_remove_white_24dp.png new file mode 100644 index 00000000..52cad9d2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_remove_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_add_black_24dp.png new file mode 100644 index 00000000..3cb10924 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_add_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png new file mode 100644 index 00000000..d64c22e9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_arrow_downward_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_arrow_downward_black_24dp.png new file mode 100644 index 00000000..43bfcd50 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_arrow_downward_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_arrow_downward_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_arrow_downward_white_24dp.png new file mode 100644 index 00000000..22e0448d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_arrow_downward_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_arrow_upward_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_arrow_upward_black_24dp.png new file mode 100644 index 00000000..fca5022c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_arrow_upward_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_arrow_upward_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_arrow_upward_white_24dp.png new file mode 100644 index 00000000..8ac0552c Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_arrow_upward_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_remove_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_remove_black_24dp.png new file mode 100644 index 00000000..5d36049b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_remove_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_remove_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_remove_white_24dp.png new file mode 100644 index 00000000..b9222f08 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_remove_white_24dp.png differ diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 5e53a389..a05da725 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -40,5 +40,7 @@ 20dp 50dp + 30dp + 5dp 400dp \ No newline at end of file