From c2c689db4431183dc97a64975e43f120ce4beb15 Mon Sep 17 00:00:00 2001 From: Enliven26 <16521443@mahasiswa.itb.ac.id> Date: Thu, 14 Mar 2024 05:16:16 +0700 Subject: [PATCH] feat: preview page --- app/src/main/AndroidManifest.xml | 1 + .../k2_9/omrekap/activities/CameraActivity.kt | 5 +- .../k2_9/omrekap/activities/MainActivity.kt | 36 ++++++------ .../omrekap/activities/PreviewActivity.kt | 56 +++++++++++++++++++ app/src/main/res/drawable/ic_check.xml | 13 +++++ app/src/main/res/drawable/ic_x.xml | 20 +++++++ app/src/main/res/layout/activity_camera.xml | 2 +- app/src/main/res/layout/activity_preview.xml | 49 ++++++++++++++++ app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/themes.xml | 5 ++ 12 files changed, 172 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/k2_9/omrekap/activities/PreviewActivity.kt create mode 100644 app/src/main/res/drawable/ic_check.xml create mode 100644 app/src/main/res/drawable/ic_x.xml create mode 100644 app/src/main/res/layout/activity_preview.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a387f24..ec8ef99 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -27,6 +27,7 @@ </activity> <activity android:name=".activities.ExpandImageActivity" /> <activity android:name=".activities.CameraActivity" /> + <activity android:name=".activities.PreviewActivity" /> <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" /> diff --git a/app/src/main/java/com/k2_9/omrekap/activities/CameraActivity.kt b/app/src/main/java/com/k2_9/omrekap/activities/CameraActivity.kt index 0c46d01..5df0e05 100644 --- a/app/src/main/java/com/k2_9/omrekap/activities/CameraActivity.kt +++ b/app/src/main/java/com/k2_9/omrekap/activities/CameraActivity.kt @@ -167,12 +167,11 @@ class CameraActivity : AppCompatActivity() { // send URI to MainActivity startActivity( - Intent(this, MainActivity::class.java) + Intent(this, PreviewActivity::class.java) .putExtra(MainActivity.EXTRA_NAME_IMAGE_URI_STRING, uri.toString()) .putExtra(MainActivity.EXTRA_NAME_IS_RESULT, true) .putExtra(MainActivity.EXTRA_NAME_IS_FROM_CAMERA, true) - .putExtra(MainActivity.EXTRA_NAME_IS_RESET, true) - .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT or Intent.FLAG_ACTIVITY_SINGLE_TOP), + .putExtra(MainActivity.EXTRA_NAME_IS_RESET, true), ) } diff --git a/app/src/main/java/com/k2_9/omrekap/activities/MainActivity.kt b/app/src/main/java/com/k2_9/omrekap/activities/MainActivity.kt index 91024e4..dac2191 100644 --- a/app/src/main/java/com/k2_9/omrekap/activities/MainActivity.kt +++ b/app/src/main/java/com/k2_9/omrekap/activities/MainActivity.kt @@ -61,25 +61,25 @@ class MainActivity : AppCompatActivity() { pickImage.launch(intent) } - private val pickImage = registerForActivityResult( - ActivityResultContracts.StartActivityForResult() - ) { result: ActivityResult -> - if (result.resultCode == RESULT_OK) { - val data: Intent? = result.data - val imageUri: Uri? = data?.data - - if (imageUri != null) { - val intent = Intent(this, MainActivity::class.java) - - intent.putExtra(EXTRA_NAME_IS_RESULT, true) - intent.putExtra(EXTRA_NAME_IS_RESET, true) - intent.putExtra(EXTRA_NAME_IS_FROM_CAMERA, false) - intent.putExtra(EXTRA_NAME_IMAGE_URI_STRING, imageUri.toString()) - - startActivity(intent) + private val pickImage = + registerForActivityResult( + ActivityResultContracts.StartActivityForResult(), + ) { result: ActivityResult -> + if (result.resultCode == RESULT_OK) { + val data: Intent? = result.data + val imageUri: Uri? = data?.data + + if (imageUri != null) { + val intent = Intent(this, PreviewActivity::class.java) + + intent.putExtra(EXTRA_NAME_IS_RESULT, true) + intent.putExtra(EXTRA_NAME_IS_RESET, true) + intent.putExtra(EXTRA_NAME_IS_FROM_CAMERA, false) + intent.putExtra(EXTRA_NAME_IMAGE_URI_STRING, imageUri.toString()) + startActivity(intent) + } } } - } private fun requirePermission( permission: String, @@ -193,6 +193,8 @@ class MainActivity : AppCompatActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) + // Important assumption: home page is always below result page in the activity stack + if (intent != null) { if (isCreated && (isResult.xor(intent.getBooleanExtra(EXTRA_NAME_IS_RESULT, false)))) { // wrong activity reused, restarting the new intent and finishing this activity diff --git a/app/src/main/java/com/k2_9/omrekap/activities/PreviewActivity.kt b/app/src/main/java/com/k2_9/omrekap/activities/PreviewActivity.kt new file mode 100644 index 0000000..aceac03 --- /dev/null +++ b/app/src/main/java/com/k2_9/omrekap/activities/PreviewActivity.kt @@ -0,0 +1,56 @@ +package com.k2_9.omrekap.activities + +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.widget.ImageButton +import androidx.appcompat.app.AppCompatActivity +import com.github.chrisbanes.photoview.PhotoView +import com.k2_9.omrekap.R + +class PreviewActivity : AppCompatActivity() { + private var imageUriString: String? = null + private var isFromCamera: Boolean = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_preview) + + // display photo + val photoView: PhotoView = findViewById(R.id.preview_content) + + imageUriString = intent.getStringExtra(MainActivity.EXTRA_NAME_IMAGE_URI_STRING) + isFromCamera = intent.getBooleanExtra(MainActivity.EXTRA_NAME_IS_FROM_CAMERA, false) + + if (imageUriString == null) { + throw IllegalArgumentException("Image URI string is null") + } + + photoView.setImageURI(Uri.parse(imageUriString)) + + // set buttons action + val acceptButton = findViewById<ImageButton>(R.id.accept_preview_button) + val rejectButton = findViewById<ImageButton>(R.id.reject_preview_button) + + acceptButton.setOnClickListener { + val newIntent = Intent(this, MainActivity::class.java) + + intent.extras?.let { extras -> + newIntent.putExtras(extras) + } + + if (isFromCamera) { + newIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT or Intent.FLAG_ACTIVITY_SINGLE_TOP) + } else { + newIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) + } + + finish() + startActivity(newIntent) + } + + rejectButton.setOnClickListener { + finish() + } + } +} diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..6283bb4 --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,13 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M5,12l5,5l10,-10" + android:strokeLineJoin="round" + android:strokeWidth="2" + android:fillColor="#00000000" + android:strokeColor="@color/white" + android:strokeLineCap="round"/> +</vector> diff --git a/app/src/main/res/drawable/ic_x.xml b/app/src/main/res/drawable/ic_x.xml new file mode 100644 index 0000000..9029a28 --- /dev/null +++ b/app/src/main/res/drawable/ic_x.xml @@ -0,0 +1,20 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M18,6l-12,12" + android:strokeLineJoin="round" + android:strokeWidth="2" + android:fillColor="#00000000" + android:strokeColor="@color/white" + android:strokeLineCap="round"/> + <path + android:pathData="M6,6l12,12" + android:strokeLineJoin="round" + android:strokeWidth="2" + android:fillColor="#00000000" + android:strokeColor="@color/white" + android:strokeLineCap="round"/> +</vector> diff --git a/app/src/main/res/layout/activity_camera.xml b/app/src/main/res/layout/activity_camera.xml index 6ce9b93..c50acf3 100644 --- a/app/src/main/res/layout/activity_camera.xml +++ b/app/src/main/res/layout/activity_camera.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#000000"> + android:background="@color/black"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/camera_image_layout" diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml new file mode 100644 index 0000000..9bb9a82 --- /dev/null +++ b/app/src/main/res/layout/activity_preview.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout + 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/black" + tools:context=".activities.ExpandImageActivity"> + + <com.github.chrisbanes.photoview.PhotoView + android:id="@+id/preview_content" + android:layout_width="0dp" + android:layout_height="0dp" + android:scaleType="fitCenter" + android:layout_marginTop="59dp" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintDimensionRatio="@string/ratio_image" /> + + <ImageButton + android:id="@+id/accept_preview_button" + android:theme="@style/ThemeOverlay.Omrekap.PreviewPageButtonRoundbackground" + android:layout_width="63dp" + android:layout_height="63dp" + android:background="@drawable/bg_round" + android:contentDescription="@string/desc_accept_preview" + android:layout_marginRight="@dimen/margin_horizontal_preview_button" + android:src="@drawable/ic_check" + app:tint="@color/acceptPreviewButton" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@id/preview_content"/> + <ImageButton + android:id="@+id/reject_preview_button" + android:theme="@style/ThemeOverlay.Omrekap.PreviewPageButtonRoundbackground" + android:layout_width="63dp" + android:layout_height="63dp" + android:background="@drawable/bg_round" + android:contentDescription="@string/desc_reject_preview" + android:layout_marginLeft="@dimen/margin_horizontal_preview_button" + android:src="@drawable/ic_x" + app:tint="@color/rejectPreviewButton" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@id/preview_content"/> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 8a9cada..8dcda9a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -12,4 +12,6 @@ <color name="backgroundExpandButton">#11FFFFFF</color> <color name="white_opacity_16">#80FFFFFF</color> <color name="white_opacity_0">#00FFFFFF</color> + <color name="acceptPreviewButton">#00FF00</color> + <color name="rejectPreviewButton">#FF0000</color> </resources> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 045e125..405cccd 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,3 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <resources> + <dimen name="margin_horizontal_preview_button">50dp</dimen> </resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 783c23c..e93284c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,4 +10,7 @@ <string name="ratio_image">3:4</string> <string name="ratio_square">1:1</string> <string name="img_omr_description">OMR Illustration</string> + <string name="title_activity_preview">PreviewActivity</string> + <string name="desc_accept_preview">accept preview</string> + <string name="desc_reject_preview">reject preview</string> </resources> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 0b4f707..6b5be61 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -17,6 +17,11 @@ <item name="RoundBackgroundColor">@color/backgroundExpandButton</item> </style> + <style name="ThemeOverlay.Omrekap.PreviewPageButtonRoundbackground" parent=""> + <item name="RoundBackgroundRadius">100dp</item> + <item name="RoundBackgroundColor">@color/white</item> + </style> + <style name="TextAppearance.Heading1" parent="@android:style/TextAppearance"> <item name="android:textSize">30sp</item> <item name="android:fontFamily">@font/inter_bold</item> -- GitLab