Skip to content
Snippets Groups Projects
Commit d728861a authored by Muhammad  Hanan's avatar Muhammad Hanan
Browse files

feat : add layout twibbon and cam

parent 2b1b8e1c
Branches
No related merge requests found
Pipeline #61529 canceled with stages
...@@ -70,4 +70,11 @@ dependencies { ...@@ -70,4 +70,11 @@ dependencies {
// Graph // Graph
implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") implementation("com.github.PhilJay:MPAndroidChart:v3.1.0")
// Twibbon
implementation ("androidx.camera:camera-camera2:1.3.0-alpha03")
implementation ("androidx.camera:camera-lifecycle:1.3.0-alpha03")
implementation ("androidx.camera:camera-view:1.3.0-alpha03")
} }
\ No newline at end of file
...@@ -3,13 +3,133 @@ package com.atm.bondowowo.ui.twibbon ...@@ -3,13 +3,133 @@ package com.atm.bondowowo.ui.twibbon
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.atm.bondowowo.databinding.ActivityTwibbonBinding import com.atm.bondowowo.databinding.ActivityTwibbonBinding
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.core.content.ContextCompat
import com.atm.bondowowo.R
import com.google.common.util.concurrent.ListenableFuture
class TwibbonActivity : AppCompatActivity() { class TwibbonActivity : AppCompatActivity() {
private lateinit var binding: ActivityTwibbonBinding private lateinit var binding: ActivityTwibbonBinding
private lateinit var mContext: Context
private lateinit var previewView: PreviewView
private lateinit var previewImage: ImageView
private lateinit var twibbon: ImageView
private lateinit var cameraProviderFuture: ListenableFuture<ProcessCameraProvider>
private lateinit var warningText: TextView
private lateinit var capturePhotoButton: Button
private var imagePreview: Boolean = false
private val requestPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted: Boolean ->
if (isGranted) {
warningText.visibility = View.GONE
capturePhotoButton.visibility = View.VISIBLE
previewView.visibility = View.VISIBLE
twibbon.visibility = View.VISIBLE
Log.d("Twibbon", "berhasil granted")
} else {
warningText.visibility = View.VISIBLE
warningText.text = resources.getString(R.string.twibbon_warning_no_permissions)
capturePhotoButton.visibility = View.GONE
previewView.visibility = View.GONE
twibbon.visibility = View.GONE
// Request permission again
requestCameraPermission()
Log.e("Twibbon", "GAGAL GRANTED")
}
}
private fun requestCameraPermission() {
requestPermissionLauncher.launch(Manifest.permission.CAMERA)
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityTwibbonBinding.inflate(layoutInflater) binding = ActivityTwibbonBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
mContext = this
cameraProviderFuture = ProcessCameraProvider.getInstance(mContext)
previewView = findViewById(R.id.previewView)
previewView.implementationMode = PreviewView.ImplementationMode.PERFORMANCE
previewView.scaleType = PreviewView.ScaleType.FILL_CENTER
previewView.visibility = View.VISIBLE
previewImage = findViewById(R.id.imagePreview)
twibbon = findViewById(R.id.twibbon)
twibbon.visibility = View.VISIBLE
warningText = findViewById(R.id.warningCameraTwibbon)
warningText.visibility = View.GONE
capturePhotoButton = findViewById(R.id.btnCapture)
capturePhotoButton.visibility = View.VISIBLE
capturePhotoButton.setOnClickListener {
if (imagePreview) {
previewView.visibility = View.VISIBLE
previewImage.visibility = View.GONE
capturePhotoButton.text = resources.getString(R.string.btn_capture)
imagePreview = false
} else {
previewView.visibility = View.GONE
previewImage.visibility = View.VISIBLE
capturePhotoButton.text = resources.getString(R.string.btn_take_photo)
imagePreview = true
val bitmap = previewView.bitmap
previewImage.setImageBitmap(bitmap)
Toast.makeText(mContext, "Image captured", Toast.LENGTH_SHORT).show()
}
}
}
override fun onStart() {
super.onStart()
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestCameraPermission()
} else {
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
bindPreview(cameraProvider)
}, ContextCompat.getMainExecutor(mContext))
}
}
override fun onDestroy() {
super.onDestroy()
cameraProviderFuture.get().unbindAll()
} }
private fun bindPreview(cameraProvider: ProcessCameraProvider) {
val preview: Preview = Preview.Builder()
.build()
val cameraSelector: CameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_FRONT)
.build()
preview.setSurfaceProvider(previewView.surfaceProvider)
cameraProvider.bindToLifecycle(this, cameraSelector, preview)
}
} }
\ No newline at end of file
app/src/main/res/drawable/twibbon.png

829 KiB

...@@ -24,39 +24,78 @@ ...@@ -24,39 +24,78 @@
android:textStyle="bold" /> android:textStyle="bold" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<LinearLayout <androidx.camera.view.PreviewView
android:layout_width="match_parent" android:id="@+id/previewView"
android:layout_height="match_parent" android:layout_width="0dp"
android:layout_marginTop="40dp" android:layout_height="0dp"
android:orientation="vertical" app:layout_constraintDimensionRatio="1:1"
tools:contex="com.atm.bondowowo.ui.scan.ScanFragment"> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.35"
app:layout_constraintHorizontal_bias="0.5" />
<ImageView
android:visibility="gone"
android:id="@+id/imagePreview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.35"
app:layout_constraintHorizontal_bias="0.5"
android:contentDescription="Image Preview" />
<com.budiyev.android.codescanner.CodeScannerView <ImageView
android:id="@+id/scanner" android:id="@+id/twibbon"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:contentDescription="Twibbon"
app:autoFocusButtonVisible="true" /> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.35"
app:srcCompat="@drawable/twibbon"
tools:srcCompat="@drawable/twibbon" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.89">
<Button <Button
android:id="@+id/btn_upload" android:id="@+id/btnCapture"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:text="Cekrek"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" app:backgroundTint="#012B39"
android:text="Cekrek" /> android:textColor="#FFFFFF"
app:layout_constraintTop_toTopOf="@+id/textureViewTwibbon"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="1dp"
android:text="..."
android:textAlignment="center"
android:textColor="#A92B"
android:textSize="20sp" />
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/warningCameraTwibbon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
<string name="upload_file">Upload File</string> <string name="upload_file">Upload File</string>
<string name="use_filter">Use Filter</string> <string name="use_filter">Use Filter</string>
<string name="twibbon">Twibbon</string> <string name="twibbon">Twibbon</string>
<string name="twibbon_warning_no_permissions">Camera permission is required to use this feature</string>
<string name="btn_capture">Capture</string>
<string name="btn_take_photo">Take Again</string>
<string-array name="transaction_option"> <string-array name="transaction_option">
<item>Edit</item> <item>Edit</item>
<item>Delete</item> <item>Delete</item>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment