Skip to content

Commit

Permalink
feat(capture-sdk): Add DisableCameraPermission feature
Browse files Browse the repository at this point in the history
PIA-3726
  • Loading branch information
abolfazlimahdi committed Jul 25, 2023
1 parent 53eb2ae commit c7b923d
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import net.gini.android.capture.DocumentImportEnabledFileTypes
import net.gini.android.capture.internal.util.ActivityHelper.interceptOnBackPressed
import net.gini.android.capture.screen.R
import net.gini.android.capture.screen.databinding.ActivityConfigurationBinding
import net.gini.android.capture.screen.ui.MainActivity.Companion.CAMERA_PERMISSION_BUNDLE
import net.gini.android.capture.screen.ui.MainActivity.Companion.CONFIGURATION_BUNDLE
import net.gini.android.capture.screen.ui.data.Configuration

Expand All @@ -36,17 +37,33 @@ class ConfigurationActivity : AppCompatActivity() {
configurationViewModel.setConfiguration(
intent.getParcelableExtra(CONFIGURATION_BUNDLE) ?: Configuration()
)
configurationViewModel.disableCameraPermission(
intent.getBooleanExtra(CAMERA_PERMISSION_BUNDLE, false) ?: false
)

setupActionBar()

lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
configurationViewModel.configurationFlow.collect {
updateUIWithConfigurationObject(it)
launch {
configurationViewModel.configurationFlow.collect {
updateUIWithConfigurationObject(it)
}
}
launch {
configurationViewModel.disableCameraPermissionFlow.collect {
binding.switchDisableCameraPermission.isChecked =
it
}
}

}
}

binding.switchDisableCameraPermission.setOnCheckedChangeListener { _, isChecked ->
configurationViewModel.disableCameraPermission(isChecked)
}

setConfigurationFeatures()
handleOnBackPressed()
}
Expand Down Expand Up @@ -76,7 +93,12 @@ class ConfigurationActivity : AppCompatActivity() {

private fun returnToMainActivity() {
val returnIntent =
Intent().putExtra(CONFIGURATION_BUNDLE, configurationViewModel.configurationFlow.value)
Intent()
.putExtra(CONFIGURATION_BUNDLE, configurationViewModel.configurationFlow.value)
.putExtra(
CAMERA_PERMISSION_BUNDLE,
configurationViewModel.disableCameraPermissionFlow.value
)
setResult(Activity.RESULT_OK, returnIntent)
finish()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,16 @@ import javax.inject.Inject
@HiltViewModel
class ConfigurationViewModel @Inject constructor() : ViewModel() {

private val _disableCameraPermissionFlow = MutableStateFlow<Boolean>(false)
val disableCameraPermissionFlow: StateFlow<Boolean> = _disableCameraPermissionFlow

private val _configurationFlow = MutableStateFlow(Configuration())
val configurationFlow: StateFlow<Configuration> = _configurationFlow

fun disableCameraPermission(cameraPermission: Boolean) {
_disableCameraPermissionFlow.value = cameraPermission
}

fun setConfiguration(configuration: Configuration) {
_configurationFlow.value = configuration
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class MainActivity : AppCompatActivity() {

private val configurationViewModel: ConfigurationViewModel by viewModels()


@Inject
lateinit var giniCaptureDefaultNetworkService: GiniCaptureDefaultNetworkService
private var mRestoredInstance = false
Expand Down Expand Up @@ -84,19 +83,15 @@ class MainActivity : AppCompatActivity() {
}

private fun createRuntimePermissionsHandler() {
mRuntimePermissionHandler = RuntimePermissionHandler
.forActivity(this)
.withCameraPermissionDeniedMessage(
mRuntimePermissionHandler =
RuntimePermissionHandler.forActivity(this).withCameraPermissionDeniedMessage(
getString(R.string.camera_permission_denied_message)
)
.withCameraPermissionRationale(getString(R.string.camera_permission_rationale))
.withStoragePermissionDeniedMessage(
getString(R.string.storage_permission_denied_message)
)
.withStoragePermissionRationale(getString(R.string.storage_permission_rationale))
.withGrantAccessButtonTitle(getString(R.string.grant_access))
.withCancelButtonTitle(getString(R.string.cancel))
.build()
).withCameraPermissionRationale(getString(R.string.camera_permission_rationale))
.withStoragePermissionDeniedMessage(
getString(R.string.storage_permission_denied_message)
).withStoragePermissionRationale(getString(R.string.storage_permission_rationale))
.withGrantAccessButtonTitle(getString(R.string.grant_access))
.withCancelButtonTitle(getString(R.string.cancel)).build()
}

override fun onNewIntent(intent: Intent) {
Expand All @@ -123,7 +118,8 @@ class MainActivity : AppCompatActivity() {
// Configure the Gini Capture SDK
configureGiniCapture()
mFileImportCancellationToken = GiniCapture.getInstance().createIntentForImportedFiles(
importedFileIntent, this,
importedFileIntent,
this,
object : AsyncCallback<Intent, ImportedFileValidationException> {
override fun onSuccess(result: Intent) {
mFileImportCancellationToken = null
Expand All @@ -146,10 +142,8 @@ class MainActivity : AppCompatActivity() {
if (exception.validationError != null) {
message = getString(exception.validationError!!.textResource)
}
MaterialAlertDialogBuilder(this)
.setMessage(message)
.setPositiveButton("OK") { dialogInterface, i -> finish() }
.show()
MaterialAlertDialogBuilder(this).setMessage(message)
.setPositiveButton("OK") { dialogInterface, i -> finish() }.show()
}

private fun isIntentActionViewOrSend(intent: Intent): Boolean {
Expand All @@ -172,21 +166,27 @@ class MainActivity : AppCompatActivity() {

private fun addInputHandlers() {
binding.buttonStartScanner.setOnClickListener { v: View? ->
//TODO: set from configuration object and delete the line below
startGiniCaptureSdk()
/*if (disableCameraPermission.isChecked) {
if (configurationViewModel.disableCameraPermissionFlow.value) {
doStartGiniCaptureSdk()
} else {
startGiniCaptureSdk()
}*/
}
}

binding.textGiniCaptureVersion.setOnClickListener {
startActivityForResult(
Intent(
this,
ConfigurationActivity::class.java
).putExtra(CONFIGURATION_BUNDLE, configurationViewModel.configurationFlow.value), REQUEST_CONFIGURATION
this, ConfigurationActivity::class.java
)
.putExtra(
CONFIGURATION_BUNDLE,
configurationViewModel.configurationFlow.value
)
.putExtra(
CAMERA_PERMISSION_BUNDLE,
configurationViewModel.disableCameraPermissionFlow.value
),
REQUEST_CONFIGURATION
)
}

Expand Down Expand Up @@ -221,10 +221,9 @@ class MainActivity : AppCompatActivity() {
private fun configureGiniCapture() {
val app = application as ScreenApiExampleApp
app.clearGiniCaptureNetworkInstances()
val builder = GiniCapture.newInstance(this)
.setGiniCaptureNetworkService(
giniCaptureDefaultNetworkService
)
val builder = GiniCapture.newInstance(this).setGiniCaptureNetworkService(
giniCaptureDefaultNetworkService
)

val intent = Intent(this, CustomHelpActivity::class.java)
configurationViewModel.configureGiniCapture(builder, intent)
Expand All @@ -247,15 +246,13 @@ class MainActivity : AppCompatActivity() {
}
}
Toast.makeText(
this, "Requirements not fulfilled:\n$stringBuilder",
Toast.LENGTH_LONG
this, "Requirements not fulfilled:\n$stringBuilder", Toast.LENGTH_LONG
).show()
}


override fun onActivityResult(
requestCode: Int, resultCode: Int,
data: Intent?
requestCode: Int, resultCode: Int, data: Intent?
) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_SCAN) {
Expand Down Expand Up @@ -287,8 +284,9 @@ class MainActivity : AppCompatActivity() {
}
val compoundExtractionsBundle =
data.getBundleExtra(CameraActivity.EXTRA_OUT_COMPOUND_EXTRACTIONS)
if ((pay5ExtractionsAvailable(extractionsBundle)
|| epsPaymentAvailable(extractionsBundle)) || compoundExtractionsBundle != null
if ((pay5ExtractionsAvailable(extractionsBundle) || epsPaymentAvailable(
extractionsBundle
)) || compoundExtractionsBundle != null
) {
startExtractionsActivity(extractionsBundle, compoundExtractionsBundle)
}
Expand All @@ -301,9 +299,8 @@ class MainActivity : AppCompatActivity() {
)
if (error != null) {
Toast.makeText(
this, "Error: "
+ error.errorCode + " - "
+ error.message,
this,
"Error: " + error.errorCode + " - " + error.message,
Toast.LENGTH_LONG
).show()
}
Expand All @@ -323,6 +320,12 @@ class MainActivity : AppCompatActivity() {
if (configurationResult != null) {
configurationViewModel.setConfiguration(configurationResult)
}

configurationViewModel.disableCameraPermission(
data?.getBooleanExtra(
CAMERA_PERMISSION_BUNDLE, false
) ?: false
)
}
}
}
Expand All @@ -347,14 +350,12 @@ class MainActivity : AppCompatActivity() {
}

private fun startExtractionsActivity(
extractionsBundle: Bundle,
compoundExtractionsBundle: Bundle?
extractionsBundle: Bundle, compoundExtractionsBundle: Bundle?
) {
val intent = Intent(this, ExtractionsActivity::class.java)
intent.putExtra(ExtractionsActivity.EXTRA_IN_EXTRACTIONS, extractionsBundle)
intent.putExtra(
ExtractionsActivity.EXTRA_IN_COMPOUND_EXTRACTIONS,
compoundExtractionsBundle
ExtractionsActivity.EXTRA_IN_COMPOUND_EXTRACTIONS, compoundExtractionsBundle
)
startActivity(intent)
}
Expand Down Expand Up @@ -382,6 +383,7 @@ class MainActivity : AppCompatActivity() {
companion object {
const val EXTRA_OUT_EXTRACTIONS = "EXTRA_OUT_EXTRACTIONS"
const val CONFIGURATION_BUNDLE = "CONFIGURATION_BUNDLE"
const val CAMERA_PERMISSION_BUNDLE = "CAMERA_PERMISSION_BUNDLE"
private const val REQUEST_SCAN = 1
private const val REQUEST_NO_EXTRACTIONS = 2
private const val REQUEST_CONFIGURATION = 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,13 @@
tools:text="Hello@World and stuff and foo and bar and whatchamacallit"/>
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switch_disableCameraPermission"
style="@style/TextAppearance.MaterialComponents.Body1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/gc_medium_12"
android:text="@string/disable_camera_permission" />

</LinearLayout>

Expand Down

0 comments on commit c7b923d

Please sign in to comment.