diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index c931bbd4ae41e89218eb8cca3af29ca12ea01b1a..621029c9755d123c91d49dfc106367fecfe12c48 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -5,6 +5,8 @@ on: branches: - main - dev + - result-page + - home-page jobs: build-and-test: diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 56d3bf360f34c62501fb0fd75b776533bf0f2794..e15f3774c371523dab63227cf87873082705b8d8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -41,7 +41,8 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.11.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("com.github.chrisbanes:PhotoView:2.3.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") -} \ No newline at end of file +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 679213792fcc2bb3f4342d71fd7495727907cbd7..61fd85e7049292664c23728e0229f6ef1501b7e6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:theme="@style/Theme.Omrekap" tools:targetApi="31"> <activity - android:name=".MainActivity" + android:name=".activities.MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -21,9 +21,10 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity android:name=".activities.ExpandImageActivity" /> <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" /> </application> -</manifest> \ No newline at end of file +</manifest> diff --git a/app/src/main/java/com/k2_9/omrekap/MainActivity.kt b/app/src/main/java/com/k2_9/omrekap/MainActivity.kt deleted file mode 100644 index e415f54c336e328bf40e0339626559d05228c9e9..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/k2_9/omrekap/MainActivity.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.k2_9.omrekap - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity - -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - } -} diff --git a/app/src/main/java/com/k2_9/omrekap/ResultPageFragment.kt b/app/src/main/java/com/k2_9/omrekap/ResultPageFragment.kt deleted file mode 100644 index 9b7354637499f8f6be0502dbb724b5f73e237837..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/k2_9/omrekap/ResultPageFragment.kt +++ /dev/null @@ -1,63 +0,0 @@ -package com.k2_9.omrekap - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment - -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" - -/** - * A simple [Fragment] subclass. - * Use the [ResultPageFragment.newInstance] factory method to - * create an instance of this fragment. - */ -class ResultPageFragment : Fragment() { - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_result_page, container, false) - } - - companion object { - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment ResultPageFragment. - */ - // TODO: Rename and change types and number of parameters - @JvmStatic - fun newInstance( - param1: String, - param2: String, - ) = ResultPageFragment().apply { - arguments = - Bundle().apply { - putString(ARG_PARAM1, param1) - putString(ARG_PARAM2, param2) - } - } - } -} diff --git a/app/src/main/java/com/k2_9/omrekap/activities/ExpandImageActivity.kt b/app/src/main/java/com/k2_9/omrekap/activities/ExpandImageActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..25cec8ce843ba769616130d4002040dadf944943 --- /dev/null +++ b/app/src/main/java/com/k2_9/omrekap/activities/ExpandImageActivity.kt @@ -0,0 +1,43 @@ +package com.k2_9.omrekap.activities + +import android.net.Uri +import android.os.Build +import android.os.Build.VERSION +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.github.chrisbanes.photoview.PhotoView +import com.k2_9.omrekap.R + +class ExpandImageActivity : AppCompatActivity() { + companion object { + const val EXTRA_NAME_DRAWABLE_RESOURCE = "DRAWABLE_RESOURCE" + const val EXTRA_NAME_IMAGE_RESOURCE = "IMAGE_RESOURRE" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_expand_image) + + val photoView: PhotoView = findViewById(R.id.fullscreen_content) + + val imageResource = + if (VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getParcelableExtra("DATA", Uri::class.java) + } else { + intent.getParcelableExtra<Uri>("DATA") + } + + if (imageResource != null) { + photoView.setImageURI(imageResource) + } else { + // Retrieve the image resource ID from the intent + val drawableResource = intent.getIntExtra(EXTRA_NAME_DRAWABLE_RESOURCE, 0) + // Set the image resource to PhotoView + if (drawableResource != 0) { + photoView.setImageResource(drawableResource) + } else { + photoView.setImageResource(R.drawable.ic_image) + } + } + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..91e518b7626f45210d2b53624400de51ea027fb3 --- /dev/null +++ b/app/src/main/java/com/k2_9/omrekap/activities/MainActivity.kt @@ -0,0 +1,21 @@ +package com.k2_9.omrekap.activities + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.k2_9.omrekap.R +import com.k2_9.omrekap.fragments.HomePageFragment +import com.k2_9.omrekap.fragments.ResultPageFragment + +class MainActivity : AppCompatActivity(), ResultPageFragment.OnButtonClickListener { + override fun onHomeButtonClick() { + // Replace the current fragment with the home fragment + supportFragmentManager.beginTransaction() + .replace(R.id.fragment_container_view, HomePageFragment()) + .commit() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + } +} diff --git a/app/src/main/java/com/k2_9/omrekap/adapters/ResultAdapter.kt b/app/src/main/java/com/k2_9/omrekap/adapters/ResultAdapter.kt new file mode 100644 index 0000000000000000000000000000000000000000..acdf2ca476dc40325e49e3802ef40ad0f1112518 --- /dev/null +++ b/app/src/main/java/com/k2_9/omrekap/adapters/ResultAdapter.kt @@ -0,0 +1,38 @@ +package com.k2_9.omrekap.adapters +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.k2_9.omrekap.R + +class ResultAdapter(private val dataList: List<Pair<String, String>>) : + RecyclerView.Adapter<ResultAdapter.ResultViewHolder>() { + inner class ResultViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val keyTextView: TextView = itemView.findViewById(R.id.result_candidate_text) + val valueTextView: TextView = itemView.findViewById(R.id.result_count_text) + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): ResultViewHolder { + val view = + LayoutInflater.from(parent.context) + .inflate(R.layout.layout_result_row, parent, false) + return ResultViewHolder(view) + } + + override fun onBindViewHolder( + holder: ResultViewHolder, + position: Int, + ) { + val item = dataList[position] + holder.keyTextView.text = item.first + holder.valueTextView.text = item.second + } + + override fun getItemCount(): Int { + return dataList.size + } +} diff --git a/app/src/main/java/com/k2_9/omrekap/fragments/HomePageFragment.kt b/app/src/main/java/com/k2_9/omrekap/fragments/HomePageFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..98a69e2d03bc369ea3b620452db6311b6150eb3b --- /dev/null +++ b/app/src/main/java/com/k2_9/omrekap/fragments/HomePageFragment.kt @@ -0,0 +1,26 @@ +package com.k2_9.omrekap.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.k2_9.omrekap.R + +class HomePageFragment : Fragment() { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_home_page, container, false) + } + + override fun onViewCreated( + view: View, + savedInstanceState: Bundle?, + ) { + super.onViewCreated(view, savedInstanceState) + } +} diff --git a/app/src/main/java/com/k2_9/omrekap/fragments/ResultPageFragment.kt b/app/src/main/java/com/k2_9/omrekap/fragments/ResultPageFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..340dc2e09dac24f973a8c5e972c51795e6cbd373 --- /dev/null +++ b/app/src/main/java/com/k2_9/omrekap/fragments/ResultPageFragment.kt @@ -0,0 +1,107 @@ +package com.k2_9.omrekap.fragments + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageButton +import android.widget.ImageView +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.k2_9.omrekap.R +import com.k2_9.omrekap.activities.ExpandImageActivity +import com.k2_9.omrekap.adapters.ResultAdapter + +/** + * A simple [Fragment] subclass. + * Use the [ResultPageFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class ResultPageFragment : Fragment() { + interface OnButtonClickListener { + fun onHomeButtonClick() + } + + private lateinit var recyclerView: RecyclerView + private lateinit var resultAdapter: ResultAdapter + + private var buttonClickListener: OnButtonClickListener? = null + + override fun onAttach(context: Context) { + super.onAttach(context) + + if (context is OnButtonClickListener) { + buttonClickListener = context + } else { + throw ClassCastException("$context must implement OnButtonClickListener") + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View? { + val view = inflater.inflate(R.layout.fragment_result_page, container, false) + + // Initialize your data (list of key-value pairs) + val resultData = + listOf( + Pair("Prabowo Subianto Djojohadikusumo", "270,20 juta"), + Pair("Key2", "Value2"), + Pair("Key3", "Value3"), + Pair("Key4", "Value4"), + Pair("Key5", "Value5"), + Pair("Key6", "Value6"), + // ... add more key-value pairs as needed + ) + + // Set up RecyclerView + recyclerView = view.findViewById(R.id.result_recycler_view) + recyclerView.layoutManager = LinearLayoutManager(requireContext()) + resultAdapter = ResultAdapter(resultData) + recyclerView.adapter = resultAdapter + + // set default image + val documentImageView: ImageView = view.findViewById(R.id.document_image) + val defaultDrawableId = R.drawable.ic_image + + documentImageView.tag = defaultDrawableId + documentImageView.setImageResource(defaultDrawableId) + + // configure expand action + val expandButton: ImageButton = view.findViewById(R.id.expand_button) + expandButton.setOnClickListener { + // Pass the image resource ID to ExpandImageActivity + val imageResource = documentImageView.tag ?: R.drawable.ic_image + val intent = Intent(requireContext(), ExpandImageActivity::class.java) + + // Choose the appropriate constant based on the type of resource + when (imageResource) { + is Int -> { + intent.putExtra(ExpandImageActivity.EXTRA_NAME_DRAWABLE_RESOURCE, imageResource) + } + is Uri -> { + intent.putExtra(ExpandImageActivity.EXTRA_NAME_IMAGE_RESOURCE, imageResource) + } + else -> { + throw IllegalArgumentException("Unsupported resource type") + } + } + + startActivity(intent) + } + + // set home button listener + val homeButton: ImageButton = view.findViewById(R.id.home_button) + homeButton.setOnClickListener { + buttonClickListener?.onHomeButtonClick() + } + + return view + } +} diff --git a/app/src/main/res/drawable/bg_gradient_result_card.xml b/app/src/main/res/drawable/bg_gradient_result_card.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b2e43d3123b48af76738a912216aed64399f89e --- /dev/null +++ b/app/src/main/res/drawable/bg_gradient_result_card.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <gradient + + android:startColor="@color/purpleResultCardGradient2" + android:endColor="@color/purpleResultCardGradient1" + android:type="linear" + android:angle="90"/> +</shape> diff --git a/app/src/main/res/layout/activity_expand_image.xml b/app/src/main/res/layout/activity_expand_image.xml new file mode 100644 index 0000000000000000000000000000000000000000..90782a40b889e7e1aecbecce03b165a00a69db03 --- /dev/null +++ b/app/src/main/res/layout/activity_expand_image.xml @@ -0,0 +1,23 @@ +<?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="#000000" + tools:context=".activities.ExpandImageActivity"> + + <com.github.chrisbanes.photoview.PhotoView + android:id="@+id/fullscreen_content" + android:layout_width="0dp" + android:layout_height="0dp" + android:scaleType="fitCenter" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintDimensionRatio="@string/ratio_image" + /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a1aa018ed318729d12cd0a2add77c90b2c3d1c1c..f69eaead85b4d4013dce34e75dc9454db5e1a51b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -12,7 +12,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_marginTop="45dp" - android:name="com.k2_9.omrekap.ResultPageFragment" + android:name="com.k2_9.omrekap.fragments.ResultPageFragment" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" @@ -24,7 +24,7 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="0dp" android:layout_height="60dp" - android:theme="@style/ThemeOverlay.Omrekap.MainPageRoundBackground" + android:theme="@style/ThemeOverlay.Omrekap.MainPageButtonRoundBackground" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" @@ -39,8 +39,8 @@ android:outlineAmbientShadowColor="@color/purplePrimary" android:outlineSpotShadowColor="@color/purplePrimary" app:cardCornerRadius="100dp" - app:cardElevation="2.5dp" - app:layout_constraintDimensionRatio="1:1" + app:cardElevation="3dp" + app:layout_constraintDimensionRatio="@string/ratio_square" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"> @@ -48,23 +48,23 @@ android:id="@+id/gallery_button" android:layout_width="match_parent" android:layout_height="match_parent" - android:src="@drawable/ic_image" - android:scaleType="fitCenter" android:background="@drawable/bg_round" android:contentDescription="@string/gallery_button" android:padding="14dp" - app:tint="@color/white" /> + android:scaleType="fitCenter" + android:src="@drawable/ic_image" + app:tint="@color/white" + tools:ignore="TouchTargetSizeCheck" /> </androidx.cardview.widget.CardView> <androidx.cardview.widget.CardView - android:id="@+id/camera_card_view" android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="5dp" android:outlineAmbientShadowColor="@color/purplePrimary" android:outlineSpotShadowColor="@color/purplePrimary" app:cardCornerRadius="100dp" - app:cardElevation="2.5dp" - app:layout_constraintDimensionRatio="1:1" + app:cardElevation="3dp" + app:layout_constraintDimensionRatio="@string/ratio_square" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"> diff --git a/app/src/main/res/layout/fragment_home_page.xml b/app/src/main/res/layout/fragment_home_page.xml index baebe7e8f3fd3c9a1c9705ea499bead4501d30a7..d80a15eaacd18b241bb8278d4c631a2bc66339b9 100644 --- a/app/src/main/res/layout/fragment_home_page.xml +++ b/app/src/main/res/layout/fragment_home_page.xml @@ -5,15 +5,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_gradient_main_background" - tools:context=".HomePageFragment"> + tools:context=".fragments.HomePageFragment"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/constraintLayout3" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" - android:layout_marginTop="34dp" - android:layout_marginStart="20dp" app:layout_constraintTop_toTopOf="parent"> <TextView @@ -40,69 +38,4 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/constraintLayout3" /> - - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="0dp" - android:layout_height="60dp" - android:theme="@style/ThemeOverlay.Omrekap.MainPageRoundBackground" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toBottomOf="@+id/imageView" - app:layout_constraintWidth_percent="0.9" - android:layout_marginTop="100dp"> - - <androidx.cardview.widget.CardView - android:id="@+id/gallery_card_view" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="5dp" - android:outlineAmbientShadowColor="@color/purplePrimary" - android:outlineSpotShadowColor="@color/purplePrimary" - app:cardCornerRadius="100dp" - app:cardElevation="2.5dp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintDimensionRatio="1:1" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintTop_toTopOf="parent"> - - <ImageButton - android:id="@+id/gallery_button" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@drawable/bg_round" - android:contentDescription="@string/gallery_button" - android:padding="14dp" - android:scaleType="fitCenter" - android:src="@drawable/ic_image" - app:tint="@color/white" /> - </androidx.cardview.widget.CardView> - - <androidx.cardview.widget.CardView - android:id="@+id/camera_card_view" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="5dp" - android:outlineAmbientShadowColor="@color/purplePrimary" - android:outlineSpotShadowColor="@color/purplePrimary" - app:cardCornerRadius="100dp" - app:cardElevation="2.5dp" - - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintDimensionRatio="1:1" - app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent"> - <ImageButton - android:id="@+id/camera_button" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@drawable/bg_round" - android:contentDescription="@string/camera_button" - android:padding="14dp" - android:scaleType="fitCenter" - android:elevation="4dp" - android:src="@drawable/ic_camera" - app:tint="@color/white" /> - </androidx.cardview.widget.CardView> - </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/fragment_result_page.xml b/app/src/main/res/layout/fragment_result_page.xml index 84f5fd91ee320194a34af351739b66cba9ed7e27..65b80e18dc621f661dd4888f2c9aa49df4f36046 100644 --- a/app/src/main/res/layout/fragment_result_page.xml +++ b/app/src/main/res/layout/fragment_result_page.xml @@ -5,50 +5,144 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@drawable/bg_gradient_main_background" - tools:context=".ResultPageFragment"> + tools:context=".fragments.ResultPageFragment"> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/top_layout" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" + android:theme="@style/ThemeOverlay.Omrekap.MainPageButtonRoundBackground" > + <TextView - android:id="@+id/textView" + android:id="@+id/result_page_title" android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/result_page_title" android:theme="@style/TextAppearance.Heading1" - app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + tools:ignore="TextContrastCheck" /> <androidx.cardview.widget.CardView - android:id="@+id/gallery_card_view" - android:layout_width="40dp" - android:layout_height="40dp" + android:id="@+id/home_card_view" + android:layout_width="0dp" + android:layout_height="0dp" android:layout_margin="5dp" android:outlineAmbientShadowColor="@color/purplePrimary" android:outlineSpotShadowColor="@color/purplePrimary" app:cardCornerRadius="100dp" - app:cardElevation="2.5dp" - app:layout_constraintDimensionRatio="1:1" + app:cardElevation="3dp" + app:layout_constraintDimensionRatio="@string/ratio_square" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="1"> + <ImageButton - android:id="@+id/gallery_button" + android:id="@+id/home_button" android:layout_width="match_parent" android:layout_height="match_parent" - android:src="@drawable/ic_home" - android:scaleType="fitCenter" android:background="@drawable/bg_round" android:contentDescription="@string/home_button" - android:padding="14dp" - app:tint="@color/white" /> + android:padding="8dp" + android:scaleType="fitCenter" + android:src="@drawable/ic_home" + app:tint="@color/white" + tools:ignore="TouchTargetSizeCheck" /> </androidx.cardview.widget.CardView> </androidx.constraintlayout.widget.ConstraintLayout> + <androidx.cardview.widget.CardView + android:id="@+id/result_card_view" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginTop="20dp" + android:outlineAmbientShadowColor="@color/purplePrimary" + android:outlineSpotShadowColor="@color/purplePrimary" + app:cardCornerRadius="30dp" + app:cardElevation="10dp" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@id/top_layout" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintWidth_percent="0.9" + app:layout_constraintHeight_percent="0.73" + app:layout_constraintVertical_bias="0"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="center_horizontal" + android:background="@drawable/bg_gradient_result_card" + android:paddingHorizontal="40dp" + android:paddingVertical="30dp"> + <androidx.cardview.widget.CardView + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:cardCornerRadius="10dp" + app:cardElevation="0dp"> + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ImageView + android:id="@+id/document_image" + android:layout_width="match_parent" + android:layout_height="0dp" + android:background="@color/purplePrimary" + android:contentDescription="@string/document_photo" + android:padding="20dp" + android:scaleType="fitCenter" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:tint="@color/documentPhotoAlt" + app:layout_constraintDimensionRatio="@string/ratio_image" + tools:ignore="ImageContrastCheck" /> + <ImageButton + android:id="@+id/expand_button" + android:layout_width="30dp" + android:layout_height="30dp" + android:background="@drawable/bg_round" + android:contentDescription="@string/expand_button" + android:scaleType="fitCenter" + android:src="@drawable/ic_expand" + android:theme="@style/ThemeOverlay.Omrekap.ExpandButtonRoundBackground" + android:layout_marginEnd="20dp" + android:layout_marginTop="20dp" + app:tint="@color/white" + app:layout_constraintDimensionRatio="@string/ratio_square" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:ignore="TouchTargetSizeCheck" /> + </androidx.constraintlayout.widget.ConstraintLayout> + </androidx.cardview.widget.CardView> + <Space + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_weight="1" /> + <TextView + android:id="@+id/result_timestamp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/result_timestamp" + + android:theme="@style/TextAppearance.Paragraph1" /> + <Space + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_weight="2" /> + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/result_recycler_view" + android:theme="@style/TextAppearance.ResultText" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="20" /> + </LinearLayout> + </androidx.cardview.widget.CardView> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/layout_result_row.xml b/app/src/main/res/layout/layout_result_row.xml new file mode 100644 index 0000000000000000000000000000000000000000..b10f0402c803ac6f2dfeee4111b254fc9e5296a0 --- /dev/null +++ b/app/src/main/res/layout/layout_result_row.xml @@ -0,0 +1,41 @@ +<androidx.constraintlayout.widget.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp"> + + <TextView + android:id="@+id/result_candidate_text" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="8dp" + android:gravity="start" + android:scrollHorizontally="true" + android:ellipsize="end" + android:maxLines="1" + app:layout_constraintEnd_toStartOf="@+id/guideline" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> + + <TextView + android:id="@+id/result_count_text" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:gravity="end" + android:scrollHorizontally="true" + android:ellipsize="end" + android:maxLines="1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/guideline" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> + + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guideline" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.6"/> +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cb409dbb55ccbb64a62303ff35e2d0dcc1c6b082..8a9cada7e14cec3842acb1f46a726c7b76b3f41a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,6 +6,10 @@ <color name="backgroundSecondary">#341369</color> <color name="purplePrimary">#8546ED</color> <color name="purpleSecondary">#6437A0</color> + <color name="purpleResultCardGradient1">#341369</color> + <color name="purpleResultCardGradient2">#6437A0</color> + <color name="documentPhotoAlt">#66FFFFFF</color> + <color name="backgroundExpandButton">#11FFFFFF</color> <color name="white_opacity_16">#80FFFFFF</color> <color name="white_opacity_0">#00FFFFFF</color> </resources> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..045e125f3d8dad8668061d471dd9869e29e4713a --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> +</resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97d9bb9421f81d2dc3442d58242cc7ac4cf12427..783c23ca787cb6cf18850d4bdfe23fac1795a505 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,5 +4,10 @@ <string name="camera_button">Camera</string> <string name="result_page_title">Hasil</string> <string name="home_button">home</string> + <string name="result_timestamp">27/02/2024 16:15</string> + <string name="document_photo">document</string> + <string name="expand_button">expand</string> + <string name="ratio_image">3:4</string> + <string name="ratio_square">1:1</string> <string name="img_omr_description">OMR Illustration</string> </resources> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2983975a82112ee5463697ff759f94c18bd8828a..b00f458b0783d5fd774e38db85c4b6f101300d4b 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,16 +2,21 @@ <!-- Base application theme. --> <style name="Base.Theme.Omrekap" parent="Theme.Material3.DayNight.NoActionBar"> <item name="android:ambientShadowAlpha">0</item> - <item name="android:spotShadowAlpha">0.4</item> + <item name="android:spotShadowAlpha">1</item> </style> <style name="Theme.Omrekap" parent="Base.Theme.Omrekap" /> - <style name="ThemeOverlay.Omrekap.MainPageRoundBackground" parent=""> + <style name="ThemeOverlay.Omrekap.MainPageButtonRoundBackground" parent=""> <item name="RoundBackgroundRadius">100dp</item> <item name="RoundBackgroundColor">@color/purplePrimary</item> </style> + <style name="ThemeOverlay.Omrekap.ExpandButtonRoundBackground" parent=""> + <item name="RoundBackgroundRadius">5dp</item> + <item name="RoundBackgroundColor">@color/backgroundExpandButton</item> + </style> + <style name="TextAppearance.Heading1" parent="@android:style/TextAppearance"> <item name="android:textSize">30sp</item> <item name="android:fontFamily">@font/inter_bold</item> @@ -23,10 +28,11 @@ <item name="android:textColorLink">@color/white</item> </style> <style name="TextAppearance.Heading3" parent="@android:style/TextAppearance"> - <item name="android:textSize">16sp</item> + <item name="android:textSize">12sp</item> <item name="android:fontFamily">@font/inter_bold</item> <item name="android:typeface">normal</item> <item name="android:textColor">@color/white</item> + <item name="android:letterSpacing">0.07</item> <item name="android:textColorHighlight">@color/white</item> <item name="android:textColorHint">@color/white</item> <item name="android:textColorLink">@color/white</item> @@ -40,5 +46,11 @@ <item name="android:textColorHint">@color/white</item> <item name="android:textColorLink">@color/white</item> </style> + <style name="TextAppearance.ResultText" parent="TextAppearance.Heading3"> + <item name="android:shadowColor">@color/white</item> + <item name="android:shadowDx">0</item> + <item name="android:shadowDy">0</item> + <item name="android:shadowRadius">5</item> + </style> </resources> diff --git a/settings.gradle.kts b/settings.gradle.kts index 57918f61b4d829b758e4f94bbbfacae0a60f472b..630f1222aeeed5f7ded006fa90bed2b9f3700888 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,6 +10,7 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven("https://www.jitpack.io") } }