Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7888112f authored by Moez Bhatti's avatar Moez Bhatti
Browse files

#972 - Allow using gallery app to attach photos

parent 0da4b968
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ package manager

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.provider.Telephony
import android.support.v4.content.ContextCompat
import javax.inject.Inject
@@ -35,9 +35,10 @@ class PermissionManagerImpl @Inject constructor(private val context: Context) :
        return hasSms() && hasContacts()
    }

    override fun hasSms(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_SMS) == PackageManager.PERMISSION_GRANTED
    override fun hasSms(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_SMS) == PERMISSION_GRANTED

    override fun hasContacts(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED
    override fun hasContacts(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) == PERMISSION_GRANTED

    override fun hasStorage(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_GRANTED

}
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -28,4 +28,6 @@ interface PermissionManager {

    fun hasContacts(): Boolean

    fun hasStorage(): Boolean

}
 No newline at end of file
+0 −1
Original line number Diff line number Diff line
@@ -135,7 +135,6 @@ dependencies {
    implementation "com.f2prateek.rx.preferences2:rx-preferences:$rx_preferences_version"
    implementation "com.google.android:flexbox:0.3.1"
    implementation "com.jakewharton.timber:timber:$timber_version"
    implementation "com.mlsdev.rximagepicker:library:2.0.2"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation project(":android-smsmms")
    implementation project(':data')
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SMS" />

    <application
+52 −0
Original line number Diff line number Diff line
@@ -18,11 +18,18 @@
 */
package feature.compose

import android.Manifest
import android.app.Activity
import android.arch.lifecycle.ViewModelProvider
import android.arch.lifecycle.ViewModelProviders
import android.content.ContentValues
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.PorterDuff
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.support.v4.app.ActivityCompat
import android.support.v7.widget.LinearLayoutManager
import android.view.Menu
import android.view.MenuItem
@@ -46,10 +53,18 @@ import io.reactivex.subjects.Subject
import kotlinx.android.synthetic.main.compose_activity.*
import model.Contact
import model.Message
import java.text.SimpleDateFormat
import java.util.*
import javax.inject.Inject


class ComposeActivity : QkThemedActivity(), ComposeView {

    companion object {
        const val CAMERA_REQUEST_CODE = 0
        const val GALLERY_REQUEST_CODE = 1
    }

    @Inject lateinit var attachmentAdapter: AttachmentAdapter
    @Inject lateinit var chipsAdapter: ChipsAdapter
    @Inject lateinit var contactsAdapter: ContactAdapter
@@ -72,12 +87,15 @@ class ComposeActivity : QkThemedActivity(), ComposeView {
    override val attachIntent by lazy { attach.clicks() }
    override val cameraIntent by lazy { camera.clicks() }
    override val galleryIntent by lazy { gallery.clicks() }
    override val attachmentSelectedIntent: Subject<Uri> = PublishSubject.create()
    override val inputContentIntent by lazy { message.inputContentSelected }
    override val sendIntent by lazy { send.clicks() }
    override val backPressedIntent: Subject<Unit> = PublishSubject.create()

    private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory)[ComposeViewModel::class.java] }

    var cameraDestination: Uri? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
@@ -224,6 +242,30 @@ class ComposeActivity : QkThemedActivity(), ComposeView {
        messageAdapter.clearSelection()
    }

    override fun requestStoragePermission() {
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 0)
    }

    override fun requestCamera() {
        cameraDestination = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
                .let { timestamp -> ContentValues().apply { put(MediaStore.Images.Media.TITLE, timestamp) } }
                .let { cv -> contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv) }

        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                .putExtra(MediaStore.EXTRA_OUTPUT, cameraDestination)
        startActivityForResult(intent, CAMERA_REQUEST_CODE)
    }

    override fun requestGallery() {
        val intent = Intent(Intent.ACTION_PICK)
                .putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
                .addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
                .putExtra(Intent.EXTRA_LOCAL_ONLY, false)
                .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                .setType("image/*")
        startActivityForResult(intent, GALLERY_REQUEST_CODE)
    }

    override fun setDraft(draft: String) {
        message.setText(draft)
    }
@@ -249,6 +291,16 @@ class ComposeActivity : QkThemedActivity(), ComposeView {
        return super.getColoredMenuItems() + R.id.call
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (resultCode == Activity.RESULT_OK) {
            when (requestCode) {
                CAMERA_REQUEST_CODE -> cameraDestination
                GALLERY_REQUEST_CODE -> data?.data
                else -> null
            }?.let(attachmentSelectedIntent::onNext)
        }
    }

    override fun onBackPressed() {
        backPressedIntent.onNext(Unit)
    }
Loading