Commit 41adfb58 authored by divyanshu's avatar divyanshu

requested changes

parent 5a2445c4
...@@ -3,6 +3,7 @@ package chat.rocket.android.chatroom.domain ...@@ -3,6 +3,7 @@ package chat.rocket.android.chatroom.domain
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import java.io.File
import javax.inject.Inject import javax.inject.Inject
class UriInteractor @Inject constructor(private val context: Context) { class UriInteractor @Inject constructor(private val context: Context) {
...@@ -33,4 +34,9 @@ class UriInteractor @Inject constructor(private val context: Context) { ...@@ -33,4 +34,9 @@ class UriInteractor @Inject constructor(private val context: Context) {
* Note: It should be an image. * Note: It should be an image.
*/ */
fun getBitmap(uri: Uri) = uri.getBitmpap(context) fun getBitmap(uri: Uri) = uri.getBitmpap(context)
/**
* Returns the Uri from the [File].
*/
fun getUri(file: File) = Uri.fromFile(file)
} }
\ No newline at end of file
package chat.rocket.android.chatroom.presentation package chat.rocket.android.chatroom.presentation
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri import android.net.Uri
import android.os.Environment
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.chatroom.adapter.AutoCompleteType import chat.rocket.android.chatroom.adapter.AutoCompleteType
import chat.rocket.android.chatroom.adapter.PEOPLE import chat.rocket.android.chatroom.adapter.PEOPLE
...@@ -77,6 +80,8 @@ import timber.log.Timber ...@@ -77,6 +80,8 @@ import timber.log.Timber
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.InputStream import java.io.InputStream
import java.io.File
import java.io.FileOutputStream
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
...@@ -898,6 +903,12 @@ class ChatRoomPresenter @Inject constructor( ...@@ -898,6 +903,12 @@ class ChatRoomPresenter @Inject constructor(
} }
} }
fun getDrawingImageUri(byteArray: ByteArray): Uri {
val bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
val file = saveDrawingImage(bitmap)
return uriInteractor.getUri(file)
}
private suspend fun subscribeTypingStatus() { private suspend fun subscribeTypingStatus() {
launch(CommonPool + strategy.jobs) { launch(CommonPool + strategy.jobs) {
client.subscribeTypingStatus(chatRoomId.toString()) { _, id -> client.subscribeTypingStatus(chatRoomId.toString()) { _, id ->
...@@ -963,4 +974,17 @@ class ChatRoomPresenter @Inject constructor( ...@@ -963,4 +974,17 @@ class ChatRoomPresenter @Inject constructor(
} }
} }
} }
private fun saveDrawingImage(bitmap: Bitmap): File {
val imageDir = "${Environment.DIRECTORY_PICTURES}/Rocket.Chat Images/"
val path = Environment.getExternalStoragePublicDirectory(imageDir)
val file = File(path, UUID.randomUUID().toString()+".png")
path.mkdirs()
file.createNewFile()
val outputStream = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.PNG,100, outputStream)
outputStream.flush()
outputStream.close()
return file
}
} }
\ No newline at end of file
package chat.rocket.android.chatroom.ui package chat.rocket.android.chatroom.ui
import android.Manifest
import android.app.Activity import android.app.Activity
import android.content.ClipData import android.content.ClipData
import android.content.ClipboardManager import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Environment
import android.os.Handler import android.os.Handler
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.view.KeyEvent import android.view.KeyEvent
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.Menu import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
...@@ -48,10 +43,10 @@ import chat.rocket.android.emoji.EmojiKeyboardPopup ...@@ -48,10 +43,10 @@ import chat.rocket.android.emoji.EmojiKeyboardPopup
import chat.rocket.android.emoji.EmojiParser import chat.rocket.android.emoji.EmojiParser
import chat.rocket.android.emoji.EmojiPickerPopup import chat.rocket.android.emoji.EmojiPickerPopup
import chat.rocket.android.emoji.EmojiReactionListener import chat.rocket.android.emoji.EmojiReactionListener
import chat.rocket.android.helper.AndroidPermissionsHelper
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.helper.KeyboardHelper import chat.rocket.android.helper.KeyboardHelper
import chat.rocket.android.helper.MessageParser import chat.rocket.android.helper.MessageParser
import chat.rocket.android.helper.ImageHelper
import chat.rocket.android.util.extensions.asObservable import chat.rocket.android.util.extensions.asObservable
import chat.rocket.android.util.extensions.circularRevealOrUnreveal import chat.rocket.android.util.extensions.circularRevealOrUnreveal
import chat.rocket.android.util.extensions.fadeIn import chat.rocket.android.util.extensions.fadeIn
...@@ -74,9 +69,6 @@ import kotlinx.android.synthetic.main.fragment_chat_room.* ...@@ -74,9 +69,6 @@ import kotlinx.android.synthetic.main.fragment_chat_room.*
import kotlinx.android.synthetic.main.message_attachment_options.* import kotlinx.android.synthetic.main.message_attachment_options.*
import kotlinx.android.synthetic.main.message_composer.* import kotlinx.android.synthetic.main.message_composer.*
import kotlinx.android.synthetic.main.message_list.* import kotlinx.android.synthetic.main.message_list.*
import java.io.File
import java.io.FileOutputStream
import java.util.UUID
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
import javax.inject.Inject import javax.inject.Inject
...@@ -243,27 +235,13 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -243,27 +235,13 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
} }
REQUEST_CODE_FOR_DRAW -> { REQUEST_CODE_FOR_DRAW -> {
val result= resultData.getByteArrayExtra("bitmap") val result= resultData.getByteArrayExtra("bitmap")
val bitmap = BitmapFactory.decodeByteArray(result, 0, result.size) val uri = presenter.getDrawingImageUri(result)
val uri = saveImage(bitmap)
uploadFile(uri) uploadFile(uri)
} }
} }
} }
} }
private fun saveImage(bitmap: Bitmap): Uri {
val imageDir = "${Environment.DIRECTORY_PICTURES}/Rocket.Chat Images/"
val path = Environment.getExternalStoragePublicDirectory(imageDir)
val file = File(path, UUID.randomUUID().toString()+".png")
path.mkdirs()
file.createNewFile()
val outputStream = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.PNG,100,outputStream)
outputStream.flush()
outputStream.close()
return Uri.fromFile(file)
}
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareOptionsMenu(menu: Menu) {
menu.clear() menu.clear()
if (isFavorite) { if (isFavorite) {
...@@ -825,11 +803,13 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -825,11 +803,13 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
} }
button_drawing.setOnClickListener { button_drawing.setOnClickListener {
if (!canWriteToExternalStorage()) { context?.let {
checkWritingPermission() if (!ImageHelper.canWriteToExternalStorage(it)) {
}else{ ImageHelper.checkWritingPermission(it)
val intent = Intent(activity, DrawingActivity::class.java) }else{
startActivityForResult(intent, REQUEST_CODE_FOR_DRAW) val intent = Intent(activity, DrawingActivity::class.java)
startActivityForResult(intent, REQUEST_CODE_FOR_DRAW)
}
} }
handler.postDelayed({ handler.postDelayed({
hideAttachmentOptions() hideAttachmentOptions()
...@@ -838,18 +818,6 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -838,18 +818,6 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
} }
} }
private fun canWriteToExternalStorage(): Boolean {
return context?.let { AndroidPermissionsHelper.checkPermission(it, Manifest.permission.WRITE_EXTERNAL_STORAGE) }!!
}
private fun checkWritingPermission() {
activity?.let {
AndroidPermissionsHelper.requestPermission(it,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
AndroidPermissionsHelper.WRITE_EXTERNAL_STORAGE_CODE)
}
}
private fun setupSuggestionsView() { private fun setupSuggestionsView() {
suggestions_view.anchorTo(text_message) suggestions_view.anchorTo(text_message)
.setMaximumHeight(resources.getDimensionPixelSize(R.dimen.suggestions_box_max_height)) .setMaximumHeight(resources.getDimensionPixelSize(R.dimen.suggestions_box_max_height))
......
...@@ -147,14 +147,14 @@ object ImageHelper { ...@@ -147,14 +147,14 @@ object ImageHelper {
return true return true
} }
private fun canWriteToExternalStorage(context: Context): Boolean { fun canWriteToExternalStorage(context: Context): Boolean {
return AndroidPermissionsHelper.checkPermission( return AndroidPermissionsHelper.checkPermission(
context, context,
Manifest.permission.WRITE_EXTERNAL_STORAGE Manifest.permission.WRITE_EXTERNAL_STORAGE
) )
} }
private fun checkWritingPermission(context: Context) { fun checkWritingPermission(context: Context) {
if (context is ContextThemeWrapper && context.baseContext is Activity) { if (context is ContextThemeWrapper && context.baseContext is Activity) {
val activity = context.baseContext as Activity val activity = context.baseContext as Activity
AndroidPermissionsHelper.requestPermission( AndroidPermissionsHelper.requestPermission(
......
...@@ -14,7 +14,6 @@ import kotlinx.android.synthetic.main.activity_drawing.* ...@@ -14,7 +14,6 @@ import kotlinx.android.synthetic.main.activity_drawing.*
import kotlinx.android.synthetic.main.color_palette_view.* import kotlinx.android.synthetic.main.color_palette_view.*
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
class DrawingActivity : AppCompatActivity() { class DrawingActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
...@@ -27,7 +26,7 @@ class DrawingActivity : AppCompatActivity() { ...@@ -27,7 +26,7 @@ class DrawingActivity : AppCompatActivity() {
image_send_drawing.setOnClickListener { image_send_drawing.setOnClickListener {
val bStream = ByteArrayOutputStream() val bStream = ByteArrayOutputStream()
val bitmap = custom_draw_view.getBitmap() val bitmap = custom_draw_view.getBitmap()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream) bitmap.compress(Bitmap.CompressFormat.PNG, 70, bStream)
val byteArray = bStream.toByteArray() val byteArray = bStream.toByteArray()
val returnIntent = Intent() val returnIntent = Intent()
returnIntent.putExtra("bitmap", byteArray) returnIntent.putExtra("bitmap", byteArray)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment