Feat[cropper]: improve UI

This commit is contained in:
artdeell 2024-01-05 18:18:51 +03:00 committed by Maksim Belov
parent 1fd64e0a3a
commit d8773ce8bf
5 changed files with 284 additions and 265 deletions

View File

@ -126,6 +126,7 @@ public class CropperView extends View {
canvas.drawRect(mSelectionHighlight, mSelectionPaint);
}
@SuppressWarnings("ClickableViewAccessibility") // the view is not clickable
@Override
public boolean onTouchEvent(MotionEvent event) {
return dispatchGenericMotionEvent(event);

View File

@ -28,7 +28,7 @@ public class CropperUtils {
public static ActivityResultLauncher<?> registerCropper(Fragment fragment, final CropperListener cropperListener) {
return fragment.registerForActivityResult(new ActivityResultContracts.OpenDocument(), (result)->{
Context context = fragment.getContext();
if (context == null) return;
if (context == null || result == null) return;
openCropperDialog(context, result, cropperListener);
});
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<stroke android:width="@dimen/profile_editor_image_padding" android:color="#fff"/>
</shape>
</item>
</layer-list>

View File

@ -1,284 +1,293 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_app"
android:fadeScrollbars="true"
android:scrollbarThumbVertical="@color/minebutton_color"
android:orientation="vertical"
>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:fadeScrollbars="true"
android:scrollbarThumbVertical="@color/minebutton_color">
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/fragment_padding_medium">
<ImageView
android:layout_marginTop="@dimen/padding_extra_large"
android:layout_width="@dimen/_36sdp"
android:layout_height="@dimen/_36sdp"
android:paddingVertical="@dimen/profile_editor_image_padding"
android:paddingHorizontal="@dimen/profile_editor_image_padding"
android:background="@drawable/background_profile_icon_selector"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/vprof_editor_profile_icon"
tools:src="@tools:sample/avatars" />
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/ic_edit_profile"
android:layout_marginStart="-5dp"
android:layout_marginTop="-5dp"
app:layout_constraintStart_toEndOf="@id/vprof_editor_profile_icon"
app:layout_constraintTop_toBottomOf="@id/vprof_editor_profile_icon"/>
<TextView
android:id="@+id/vprof_editor_profile_name_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profiles_profile_name"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_profile_name"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_profile_name" />
<EditText
android:id="@+id/vprof_editor_profile_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding_extra_large"
android:background="@drawable/background_line"
android:textSize="@dimen/_13ssp"
android:ems="10"
android:hint="@string/unnamed"
android:inputType="textPersonName"
android:paddingHorizontal="@dimen/padding_heavy"
app:layout_constraintTop_toBottomOf="@id/vprof_editor_profile_icon" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profiles_profile_version"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_version_spinner"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_version_spinner" />
<TextView
android:id="@+id/vprof_editor_version_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="@dimen/padding_medium"
android:background="@drawable/background_line"
android:hint="@string/version_select_hint"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toStartOf="@+id/vprof_editor_version_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_profile_name" />
<Button
android:id="@+id/vprof_editor_version_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:paddingHorizontal="@dimen/padding_large"
android:paddingVertical="0px"
android:text="@string/global_select"
app:layout_constraintBottom_toBottomOf="@+id/vprof_editor_version_spinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/vprof_editor_version_spinner" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_control"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_ctrl_spinner"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_ctrl_spinner" />
<TextView
android:id="@+id/vprof_editor_ctrl_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="@dimen/padding_medium"
android:background="@drawable/background_line"
android:hint="@string/use_global_default"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toStartOf="@id/vprof_editor_ctrl_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_version_spinner" />
<Button
android:id="@+id/vprof_editor_ctrl_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:paddingHorizontal="@dimen/padding_large"
android:text="@string/global_select"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_ctrl_spinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/vprof_editor_ctrl_spinner" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pvc_jvmArgs"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_jre_args"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_jre_args" />
<EditText
android:id="@+id/vprof_editor_jre_args"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/background_line"
android:ems="10"
android:hint="@string/use_global_default"
android:inputType="text"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_ctrl_spinner" />
<TextView
android:id="@+id/vprof_editor_beginPathView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom path"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_path"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_path" />
<TextView
android:id="@+id/vprof_editor_path"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="@dimen/padding_medium"
android:background="@drawable/background_line"
android:ems="10"
android:hint=".minecraft"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toStartOf="@id/vprof_editor_path_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_jre_args" />
<Button
android:id="@+id/vprof_editor_path_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:paddingHorizontal="@dimen/padding_large"
android:text="@string/global_select"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_path"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/vprof_editor_path" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pedit_java_runtime"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_spinner_runtime"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_spinner_runtime" />
<Spinner
android:id="@+id/vprof_editor_spinner_runtime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/background_line"
android:paddingVertical="0px"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_path"
tools:paddingVertical="@dimen/_12sdp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/_8sdp"
android:paddingHorizontal="@dimen/_8sdp"
android:rotation="180"
android:src="@drawable/spinner_arrow"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_spinner_runtime"
app:layout_constraintEnd_toEndOf="@id/vprof_editor_spinner_runtime"
app:layout_constraintTop_toTopOf="@id/vprof_editor_spinner_runtime" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pedit_renderer"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_profile_renderer"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_profile_renderer" />
<Spinner
android:id="@+id/vprof_editor_profile_renderer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/background_line"
android:dropDownWidth="match_parent"
android:paddingVertical="0px"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_spinner_runtime"
tools:paddingVertical="@dimen/_12sdp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/_8sdp"
android:paddingHorizontal="@dimen/_8sdp"
android:rotation="180"
android:src="@drawable/spinner_arrow"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_profile_renderer"
app:layout_constraintEnd_toEndOf="@id/vprof_editor_profile_renderer"
app:layout_constraintTop_toTopOf="@id/vprof_editor_profile_renderer" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/fragment_padding_medium">
<ImageView
android:layout_marginTop="@dimen/padding_extra_large"
android:id="@+id/vprof_editor_profile_icon"
android:layout_width="32dp"
android:layout_height="32dp"
tools:src="@tools:sample/avatars"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PROFILE ICON"
app:layout_constraintBottom_toTopOf="@id/vprof_editor_profile_icon"
app:layout_constraintStart_toStartOf="@id/vprof_editor_profile_icon"/>
<TextView
android:id="@+id/vprof_editor_profile_name_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profiles_profile_name"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_profile_name"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_profile_name" />
<EditText
android:id="@+id/vprof_editor_profile_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding_extra_large"
android:background="@drawable/background_line"
android:textSize="@dimen/_13ssp"
android:ems="10"
android:hint="@string/unnamed"
android:inputType="textPersonName"
android:paddingHorizontal="@dimen/padding_heavy"
app:layout_constraintTop_toBottomOf="@id/vprof_editor_profile_icon" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profiles_profile_version"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_version_spinner"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_version_spinner" />
<TextView
android:id="@+id/vprof_editor_version_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="@dimen/padding_medium"
android:background="@drawable/background_line"
android:hint="@string/version_select_hint"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toStartOf="@+id/vprof_editor_version_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_profile_name" />
<Button
android:id="@+id/vprof_editor_version_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:paddingHorizontal="@dimen/padding_large"
android:paddingVertical="0px"
android:text="@string/global_select"
app:layout_constraintBottom_toBottomOf="@+id/vprof_editor_version_spinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/vprof_editor_version_spinner" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_control"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_ctrl_spinner"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_ctrl_spinner" />
<TextView
android:id="@+id/vprof_editor_ctrl_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="@dimen/padding_medium"
android:background="@drawable/background_line"
android:hint="@string/use_global_default"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toStartOf="@id/vprof_editor_ctrl_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_version_spinner" />
<Button
android:id="@+id/vprof_editor_ctrl_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:paddingHorizontal="@dimen/padding_large"
android:text="@string/global_select"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_ctrl_spinner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/vprof_editor_ctrl_spinner" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pvc_jvmArgs"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_jre_args"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_jre_args" />
<EditText
android:id="@+id/vprof_editor_jre_args"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/background_line"
android:ems="10"
android:hint="@string/use_global_default"
android:inputType="text"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_ctrl_spinner" />
<TextView
android:id="@+id/vprof_editor_beginPathView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom path"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_path"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_path" />
<TextView
android:id="@+id/vprof_editor_path"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="@dimen/padding_medium"
android:background="@drawable/background_line"
android:ems="10"
android:hint=".minecraft"
android:paddingHorizontal="@dimen/padding_heavy"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toStartOf="@id/vprof_editor_path_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_jre_args" />
<Button
android:id="@+id/vprof_editor_path_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:paddingHorizontal="@dimen/padding_large"
android:text="@string/global_select"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_path"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/vprof_editor_path" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pedit_java_runtime"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_spinner_runtime"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_spinner_runtime" />
<Spinner
android:id="@+id/vprof_editor_spinner_runtime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/background_line"
android:paddingVertical="0px"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_path"
tools:paddingVertical="@dimen/_12sdp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/_8sdp"
android:paddingHorizontal="@dimen/_8sdp"
android:rotation="180"
android:src="@drawable/spinner_arrow"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_spinner_runtime"
app:layout_constraintEnd_toEndOf="@id/vprof_editor_spinner_runtime"
app:layout_constraintTop_toTopOf="@id/vprof_editor_spinner_runtime" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pedit_renderer"
app:layout_constraintBottom_toTopOf="@+id/vprof_editor_profile_renderer"
app:layout_constraintStart_toStartOf="@+id/vprof_editor_profile_renderer" />
<Spinner
android:id="@+id/vprof_editor_profile_renderer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:background="@drawable/background_line"
android:dropDownWidth="match_parent"
android:paddingVertical="0px"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_spinner_runtime"
tools:paddingVertical="@dimen/_12sdp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/_8sdp"
android:paddingHorizontal="@dimen/_8sdp"
android:rotation="180"
android:src="@drawable/spinner_arrow"
app:layout_constraintBottom_toBottomOf="@id/vprof_editor_profile_renderer"
app:layout_constraintEnd_toEndOf="@id/vprof_editor_profile_renderer"
app:layout_constraintTop_toTopOf="@id/vprof_editor_profile_renderer" />
android:orientation="horizontal"
android:paddingHorizontal="@dimen/fragment_padding_medium"
android:layout_marginVertical="13dp"
>
<com.kdt.mcgui.MineButton
android:id="@+id/vprof_editor_save_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginVertical="26dp"
android:layout_weight="1"
android:text="@string/global_save"
android:layout_marginEnd="@dimen/padding_medium"
app:layout_constraintEnd_toStartOf="@+id/vprof_editor_delete_button"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vprof_editor_profile_renderer"
/>
android:layout_marginEnd="@dimen/padding_medium" />
<com.kdt.mcgui.MineButton
android:id="@+id/vprof_editor_delete_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="@dimen/padding_medium"
android:text="@string/global_delete"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/vprof_editor_save_button"
app:layout_constraintTop_toTopOf="@+id/vprof_editor_save_button"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
android:text="@string/global_delete" />
</LinearLayout>
</LinearLayout>

View File

@ -29,5 +29,6 @@
<!-- Fragment padding -->
<dimen name="fragment_padding_medium">@dimen/_10sdp</dimen>
<!-- Misc paddings -->
<dimen name="profile_editor_image_padding">2dp</dimen>
</resources>