From d7ac1c8d72984b8f40e4c65627d1872d873542a2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 21 Dec 2017 17:48:00 +0100 Subject: [PATCH] implement the Take Photo intent --- app/src/main/AndroidManifest.xml | 9 +++++ .../contacts/activities/ContactActivity.kt | 39 ++++++++++++++++++- app/src/main/res/xml/provider_paths.xml | 6 +++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/xml/provider_paths.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 05d786e1..88894cb7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,5 +59,14 @@ android:label="@string/customize_colors" android:parentActivityName=".activities.SettingsActivity"/> + + + diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt index c367db5c..5022e85d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt @@ -1,9 +1,12 @@ package com.simplemobiletools.contacts.activities +import android.content.Intent import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.os.Bundle import android.provider.ContactsContract +import android.provider.MediaStore +import android.support.v4.content.FileProvider import android.view.Menu import android.view.MenuItem import android.view.ViewGroup @@ -23,6 +26,7 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS import com.simplemobiletools.commons.models.RadioItem +import com.simplemobiletools.contacts.BuildConfig import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.extensions.sendEmailIntent @@ -36,17 +40,22 @@ import com.simplemobiletools.contacts.models.PhoneNumber import kotlinx.android.synthetic.main.activity_contact.* import kotlinx.android.synthetic.main.item_email.view.* import kotlinx.android.synthetic.main.item_phone_number.view.* +import java.io.File class ContactActivity : SimpleActivity() { private val DEFAULT_EMAIL_TYPE = ContactsContract.CommonDataKinds.Email.TYPE_HOME private val DEFAULT_PHONE_NUMBER_TYPE = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE + private val INTENT_TAKE_PHOTO = 1 + private val INTENT_CHOOSE_PHOTO = 2 + private val TAKE_PHOTO = 1 private val CHOOSE_PHOTO = 2 private val REMOVE_PHOTO = 3 private var wasActivityInitialized = false private var currentContactPhotoPath = "" + private var takePhotoPath = "" private var contact: Contact? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -144,6 +153,16 @@ class ContactActivity : SimpleActivity() { return true } + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + super.onActivityResult(requestCode, resultCode, resultData) + if (resultCode == RESULT_OK) { + if (requestCode == INTENT_TAKE_PHOTO) { + currentContactPhotoPath = takePhotoPath + updateContactPhoto(currentContactPhotoPath) + } + } + } + private fun setupEditContact() { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) supportActionBar?.title = resources.getString(R.string.edit_contact) @@ -204,7 +223,10 @@ class ContactActivity : SimpleActivity() { .transition(DrawableTransitionOptions.withCrossFade()) .apply(options) .listener(object : RequestListener { - override fun onResourceReady(resource: Drawable?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean) = false + override fun onResourceReady(resource: Drawable?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { + contact_photo.setPadding(0, 0, 0, 0) + return false + } override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { showPhotoPlaceholder() @@ -417,7 +439,22 @@ class ContactActivity : SimpleActivity() { } private fun startTakePhotoIntent() { + val imagesFolder = File(filesDir, "images") + if (!imagesFolder.exists()) { + imagesFolder.mkdirs() + } + val file = File(imagesFolder, "Photo_${System.currentTimeMillis()}.jpg") + takePhotoPath = file.absolutePath + val uri = FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", file) + Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply { + putExtra(MediaStore.EXTRA_OUTPUT, uri) + if (resolveActivity(packageManager) != null) { + startActivityForResult(this, INTENT_TAKE_PHOTO) + } else { + toast(R.string.no_app_found) + } + } } private fun startChoosePhotoIntent() { diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml new file mode 100644 index 00000000..3df64651 --- /dev/null +++ b/app/src/main/res/xml/provider_paths.xml @@ -0,0 +1,6 @@ + + + + + +