@@ -5,6 +5,7 @@ import android.content.ClipData
55import android.content.ClipboardManager
66import android.content.Context
77import android.content.Intent
8+ import android.content.pm.PackageManager
89import android.graphics.drawable.Drawable
910import android.net.Uri
1011import android.os.Bundle
@@ -61,9 +62,13 @@ import chat.rocket.android.emoji.EmojiPickerPopup
6162import chat.rocket.android.emoji.EmojiReactionListener
6263import chat.rocket.android.emoji.internal.isCustom
6364import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
64- import chat.rocket.android.helper.ImageHelper
6565import chat.rocket.android.helper.KeyboardHelper
6666import chat.rocket.android.helper.MessageParser
67+ import chat.rocket.android.helper.AndroidPermissionsHelper
68+ import chat.rocket.android.helper.AndroidPermissionsHelper.getCameraPermission
69+ import chat.rocket.android.helper.AndroidPermissionsHelper.getWriteExternalStoragePermission
70+ import chat.rocket.android.helper.AndroidPermissionsHelper.hasCameraPermission
71+ import chat.rocket.android.helper.AndroidPermissionsHelper.hasWriteExternalStoragePermission
6772import chat.rocket.android.util.extension.asObservable
6873import chat.rocket.android.util.extension.createImageFile
6974import chat.rocket.android.util.extensions.circularRevealOrUnreveal
@@ -81,6 +86,7 @@ import chat.rocket.common.model.RoomType
8186import chat.rocket.common.model.roomTypeOf
8287import chat.rocket.core.internal.realtime.socket.model.State
8388import com.bumptech.glide.Glide
89+ import com.google.android.material.snackbar.Snackbar
8490import dagger.android.support.AndroidSupportInjection
8591import io.reactivex.Observable
8692import io.reactivex.disposables.CompositeDisposable
@@ -904,8 +910,14 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
904910 button_add_reaction_or_show_keyboard.setOnClickListener { toggleKeyboard() }
905911
906912 button_take_a_photo.setOnClickListener {
907- dispatchTakePictureIntent()
908-
913+ // Check for camera permission
914+ context?.let {
915+ if (hasCameraPermission(it)) {
916+ dispatchTakePictureIntent()
917+ } else {
918+ getCameraPermission(this )
919+ }
920+ }
909921 handler.postDelayed({
910922 hideAttachmentOptions()
911923 }, 400 )
@@ -923,11 +935,10 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
923935
924936 button_drawing.setOnClickListener {
925937 activity?.let { fragmentActivity ->
926- if (! ImageHelper .canWriteToExternalStorage (fragmentActivity)) {
927- ImageHelper .checkWritingPermission(fragmentActivity )
938+ if (! hasWriteExternalStoragePermission (fragmentActivity)) {
939+ getWriteExternalStoragePermission( this )
928940 } else {
929- val intent = Intent (fragmentActivity, DrawingActivity ::class .java)
930- startActivityForResult(intent, REQUEST_CODE_FOR_DRAW )
941+ dispatchDrawingIntent()
931942 }
932943 }
933944
@@ -938,6 +949,11 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
938949 }
939950 }
940951
952+ private fun dispatchDrawingIntent () {
953+ val intent = Intent (activity, DrawingActivity ::class .java)
954+ startActivityForResult(intent, REQUEST_CODE_FOR_DRAW )
955+ }
956+
941957 private fun dispatchTakePictureIntent () {
942958 Intent (MediaStore .ACTION_IMAGE_CAPTURE ).also { takePictureIntent ->
943959 // Create the File where the photo should go
@@ -958,6 +974,44 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
958974 }
959975 }
960976
977+ override fun onRequestPermissionsResult (
978+ requestCode : Int ,
979+ permissions : Array <out String >,
980+ grantResults : IntArray
981+ ) {
982+ super .onRequestPermissionsResult(requestCode, permissions, grantResults)
983+ when (requestCode) {
984+ AndroidPermissionsHelper .CAMERA_CODE -> {
985+ if (grantResults.isNotEmpty() && grantResults[0 ] == PackageManager .PERMISSION_GRANTED ) {
986+ // permission was granted
987+ dispatchTakePictureIntent()
988+ } else {
989+ // permission denied
990+ Snackbar .make(
991+ root_layout,
992+ R .string.msg_camera_permission_denied,
993+ Snackbar .LENGTH_SHORT
994+ ).show()
995+ }
996+ return
997+ }
998+ AndroidPermissionsHelper .WRITE_EXTERNAL_STORAGE_CODE -> {
999+ if (grantResults.isNotEmpty() && grantResults[0 ] == PackageManager .PERMISSION_GRANTED ) {
1000+ // permission was granted
1001+ dispatchDrawingIntent()
1002+ } else {
1003+ // permission denied
1004+ Snackbar .make(
1005+ root_layout,
1006+ R .string.msg_storage_permission_denied,
1007+ Snackbar .LENGTH_SHORT
1008+ ).show()
1009+ }
1010+ return
1011+ }
1012+ }
1013+ }
1014+
9611015 private fun getDraftMessage () {
9621016 val unfinishedMessage = presenter.getDraftUnfinishedMessage()
9631017 if (unfinishedMessage.isNotNullNorEmpty()) {
0 commit comments