diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 70da6e001c2da30dc34f8a24ca2da1945d4bf4b2..326df95d756d958680c6f6a32c15173983dfc900 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,8 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
 
 
     <application
diff --git a/app/src/main/java/com/example/bondoman/ui/scan/ScanFragment.kt b/app/src/main/java/com/example/bondoman/ui/scan/ScanFragment.kt
index 91be4a2ef472d0eab7bbc3ae712c9e281adbafdd..fd29788ef94324c0c0e10664486759862c27caa5 100644
--- a/app/src/main/java/com/example/bondoman/ui/scan/ScanFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/scan/ScanFragment.kt
@@ -2,6 +2,7 @@ package com.example.bondoman.ui.scan
 
 import android.Manifest
 import android.annotation.SuppressLint
+import android.app.Activity
 import android.app.AlertDialog
 import android.content.pm.PackageManager
 import android.os.Bundle
@@ -16,7 +17,9 @@ import com.example.bondoman.databinding.FragmentScanBinding
 import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
 import android.content.Context
+import android.content.Intent
 import android.graphics.BitmapFactory
+import android.provider.MediaStore
 import android.widget.Toast
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.camera.lifecycle.ProcessCameraProvider
@@ -48,6 +51,10 @@ class ScanFragment : Fragment() {
 
     private lateinit var cameraExecutor: ExecutorService
 
+    private lateinit var imageView: ImageView
+
+    private val PICK_IMAGE_REQUEST = 1
+
     private val activityResultLauncher =
         registerForActivityResult(
             ActivityResultContracts.RequestMultiplePermissions())
@@ -91,6 +98,8 @@ class ScanFragment : Fragment() {
 
         viewBinding.imageCaptureButton.setOnClickListener { takePhoto() }
 
+        viewBinding.imagePickerButton.setOnClickListener { pickImageFromGallery() }
+
         cameraExecutor = Executors.newSingleThreadExecutor()
     }
 
@@ -188,6 +197,27 @@ class ScanFragment : Fragment() {
         }
     }
 
+    private fun pickImageFromGallery() {
+        val intent = Intent(Intent.ACTION_PICK)
+        intent.type = "image/*"
+        startActivityForResult(intent, PICK_IMAGE_REQUEST)
+    }
+
+    @Deprecated("Deprecated in Java")
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+
+        if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null) {
+            val imageUri = data.data
+            imageUri?.let { uri ->
+                val imageStream = requireActivity().contentResolver.openInputStream(uri)
+                val imageData = imageStream?.readBytes()
+                imageData?.let { bytes ->
+                    uploadImage(bytes, requireActivity())
+                }
+            }
+        }
+    }
 
     private fun showResultDialog(context: Context, imageData: ByteArray, items: List<Item>?) {
         // Inflate the layout for the dialog
@@ -226,7 +256,8 @@ class ScanFragment : Fragment() {
         private const val TAG = "BondoMan"
         private val REQUIRED_PERMISSIONS =
             mutableListOf(
-                Manifest.permission.CAMERA
+                Manifest.permission.CAMERA,
+                Manifest.permission.READ_EXTERNAL_STORAGE
             ).toTypedArray()
     }
 }
\ No newline at end of file
diff --git a/app/src/main/res/drawable/rounded_div.xml b/app/src/main/res/drawable/rounded_div.xml
index 492e3db8ecc9786c346010f0c46e6c3cd34a269a..e655fbbbbf01bae91f47e5619bab7ff976b9b939 100644
--- a/app/src/main/res/drawable/rounded_div.xml
+++ b/app/src/main/res/drawable/rounded_div.xml
@@ -2,5 +2,5 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
     <corners android:radius="8dp" /> <!-- Adjust the radius to your preference -->
-    <solid android:color="@android:color/white" /> <!-- Set the background color -->
+    <solid android:color="@color/white" /> <!-- Set the background color -->
 </shape>
diff --git a/app/src/main/res/drawable/take_photo_button.xml b/app/src/main/res/drawable/take_photo_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15594d98b42e7458206c874fe3397963b65198ad
--- /dev/null
+++ b/app/src/main/res/drawable/take_photo_button.xml
@@ -0,0 +1,4 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/red" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_scan.xml b/app/src/main/res/layout/fragment_scan.xml
index 9ba2001fdf45705d6a60b7a008a5cff421454e11..e200e4d5e56b28cc177a6fb4b9a35de6a7c3e43b 100644
--- a/app/src/main/res/layout/fragment_scan.xml
+++ b/app/src/main/res/layout/fragment_scan.xml
@@ -10,20 +10,34 @@
     <androidx.camera.view.PreviewView
         android:id="@+id/viewFinder"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-    </androidx.camera.view.PreviewView>
+        android:layout_height="match_parent"
+        tools:layout_editor_absoluteX="16dp"
+        tools:layout_editor_absoluteY="0dp"/>
 
 
     <Button
         android:id="@+id/imageCaptureButton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Button"
+        android:layout_width="60dp"
+        android:layout_height="60dp"
+        android:background="@drawable/take_photo_button"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.498"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0.831" />
+
+    <ImageView
+        android:id="@+id/imagePickerButton"
+        android:layout_width="60dp"
+        android:layout_height="59dp"
+        android:src="@android:drawable/ic_menu_gallery"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.17"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_bias="0.796" />
+        app:layout_constraintVertical_bias="0.831" />
 
     <androidx.constraintlayout.widget.Guideline
         android:id="@+id/vertical_centerline"
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index c8524cd961d27b6695e755c6ef2d4d58cf38431e..7a4c95b2fb7a917498376463c34ea6eedc5a3303 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,4 +2,5 @@
 <resources>
     <color name="black">#FF000000</color>
     <color name="white">#FFFFFFFF</color>
+    <color name="red">#FFED1515</color>
 </resources>
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index a6711ae4bb2aa2ece2ee114e6a81933141669b25..31ed43cc99341f5b95f5b15fd54f84d14a585002 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,5 +1,5 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 plugins {
-    id("com.android.application") version "8.2.1" apply false
+    id("com.android.application") version "8.3.0" apply false
     id("org.jetbrains.kotlin.android") version "1.9.22" apply false
 }
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 02904965b35e9ae3b165ce4a37be9137ffdf1893..a8c69a358c4d7579f04295edb8927a99450052d2 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
 #Mon Mar 11 18:56:50 WIB 2024
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists