Canhub Cropper Implementation

38 Views Asked by At

I was trying to use canhub image cropper for my project and was following the github documentation but I am not able to implement it properly and am getting confused. So, if anyone can help in this.

package com.example.googleassistantclone.functions

import android.Manifest
import android.content.ContentValues
import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import android.widget.Toast
import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.example.googleassistantclone.R

class GoogleLensActivity : AppCompatActivity() {

    private val CAMERA_REQUEST_PERMISSION = 200
    private val STORAGE_REQUEST_PERMISSION = 400
    private val IMAGE_PICK_GALLERY_REQUEST_PERMISSION = 1000
    private val IMAGE_PICK_CAMERA_REQUEST_PERMISSION = 200
    private lateinit var cameraPermissions: Array<String>
    private lateinit var storagePermission: Array<String>
    private lateinit var mResulted: EditText
    private lateinit var mPreviewIm: ImageView
    private lateinit var search: Button
    private var imageUri: Uri? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_google_lens)
        val actionBar: ActionBar? = supportActionBar
        actionBar?.subtitle = "Insert or Click Pictures"

        mPreviewIm = findViewById(R.id.image_preview)
        mResulted = findViewById(R.id.result_edit_text)
        search = findViewById(R.id.search_button)
        cameraPermissions = arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        storagePermission = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE)

        search.setOnClickListener {
            val texttoSearch = mResulted.text.toString()
            if (texttoSearch.isNotEmpty()) {
                val uri = Uri.parse("https://www.google.com/search?q=$texttoSearch")
                val gSearchIntent = Intent(Intent.ACTION_VIEW, uri)
                startActivity(gSearchIntent)
            } else {
                Toast.makeText(this@GoogleLensActivity, "Add an Image with text", Toast.LENGTH_SHORT).show()
            }
        }
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.addimgbtn -> {
                showImageInputDialog()
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }

    private fun showImageInputDialog() {
        val items = arrayOf("Camera", "Gallery")
        val dialog = AlertDialog.Builder(this)
        dialog.setTitle("SET IMAGE")
        dialog.setItems(items) { _, which ->
            when (which) {
                0 -> {
                    if (!checkCameraPermission()) {
                        requestCameraPermission()
                    } else {
                        pickCamera()
                    }
                }
                1 -> {
                    if (!checkStoragePermission()) {
                        requestStoragePermission()
                    } else {
                        pickGallery()
                    }
                }
            }
        }
        dialog.create().show()
    }

    private fun pickGallery() {
        val intent = Intent(Intent.ACTION_PICK)
        intent.type = "image/*"
        startActivityForResult(intent, IMAGE_PICK_GALLERY_REQUEST_PERMISSION)
    }

    private fun requestStoragePermission() {
        ActivityCompat.requestPermissions(this, storagePermission, STORAGE_REQUEST_PERMISSION)
    }

    private fun checkStoragePermission(): Boolean {
        return ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        ) == PackageManager.PERMISSION_GRANTED
    }

    private fun pickCamera() {
        val contentValues = ContentValues()
        contentValues.put(MediaStore.Images.Media.TITLE, "New Pic")
        contentValues.put(MediaStore.Images.Media.DESCRIPTION, "Text")
        imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
        val cameraImage = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        cameraImage.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
        startActivityForResult(cameraImage, IMAGE_PICK_CAMERA_REQUEST_PERMISSION)
    }

    private fun requestCameraPermission() {
        ActivityCompat.requestPermissions(this, cameraPermissions, CAMERA_REQUEST_PERMISSION)
    }

    private fun checkCameraPermission(): Boolean {
        val resultCamera = ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.CAMERA
        ) == PackageManager.PERMISSION_GRANTED
        val resultStorage = ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        ) == PackageManager.PERMISSION_GRANTED
        return resultCamera && resultStorage
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<String>,
        grantResults: IntArray
    ) {
        when (requestCode) {
            CAMERA_REQUEST_PERMISSION -> {
                if (grantResults.isNotEmpty()) {
                    val cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED
                    val writeStorageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED
                    if (cameraAccepted && writeStorageAccepted) {
                        pickCamera()
                    } else {
                        Toast.makeText(this, "Permission is Denied", Toast.LENGTH_SHORT).show()
                    }
                }
            }
            STORAGE_REQUEST_PERMISSION -> {
                if (grantResults.isNotEmpty()) {
                    val writeStorageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED
                    if (writeStorageAccepted) {
                        pickGallery()
                    } else {
                        Toast.makeText(this, "Permission is Denied", Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK) {
            if (requestCode == IMAGE_PICK_GALLERY_REQUEST_PERMISSION) {

            }
        }
    }
}

enter image description here I was trying this method but when I used setCropImage() method it was not recognised by the file, them I tried creating a new class by but it didn't helped too. I have added all the dependency and updated the manifest file as well.

0

There are 0 best solutions below