Loading data/src/main/java/com/moez/QKSMS/repository/ImageRepostoryImpl.kt +0 −26 Original line number Diff line number Diff line Loading @@ -22,14 +22,8 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Matrix import android.media.MediaScannerConnection import android.net.Uri import android.os.Environment import androidx.exifinterface.media.ExifInterface import java.io.File import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.IOException import javax.inject.Inject class ImageRepostoryImpl @Inject constructor(private val context: Context) : ImageRepository { Loading Loading @@ -58,24 +52,4 @@ class ImageRepostoryImpl @Inject constructor(private val context: Context) : Ima return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true) } override fun saveImage(uri: Uri) { val type = context.contentResolver.getType(uri)?.split("/") ?: return val dir = File(Environment.getExternalStorageDirectory(), "QKSMS/Media").apply { mkdirs() } val file = File(dir, "${type.first()}${System.currentTimeMillis()}.${type.last()}") try { FileOutputStream(file).use { outputStream -> context.contentResolver.openInputStream(uri)?.use { inputStream -> inputStream.copyTo(outputStream, 1024) } } } catch (e: FileNotFoundException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } MediaScannerConnection.scanFile(context, arrayOf(file.path), null, null) } } data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt +34 −0 Original line number Diff line number Diff line Loading @@ -25,9 +25,12 @@ import android.content.ContentValues import android.content.Context import android.content.Intent import android.content.IntentFilter import android.media.MediaScannerConnection import android.os.Build import android.os.Environment import android.provider.Telephony import android.telephony.SmsManager import android.webkit.MimeTypeMap import androidx.core.content.contentValuesOf import com.google.android.mms.ContentType import com.google.android.mms.MMSPart Loading @@ -54,6 +57,10 @@ import io.realm.Realm import io.realm.RealmResults import io.realm.Sort import timber.log.Timber import java.io.File import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.IOException import javax.inject.Inject import javax.inject.Singleton Loading Loading @@ -132,6 +139,33 @@ class MessageRepositoryImpl @Inject constructor( .findAllAsync() } override fun savePart(id: Long): File? { val part = getPart(id) ?: return null val extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(part.type) ?: return null val date = part.messages?.first()?.date val dir = File(Environment.getExternalStorageDirectory(), "QKSMS/Media").apply { mkdirs() } val fileName = part.name?.takeIf { name -> name.endsWith(extension) } ?: "${part.type.split("/").last()}_$date.$extension" val file = File(dir, fileName) try { FileOutputStream(file).use { outputStream -> context.contentResolver.openInputStream(part.getUri())?.use { inputStream -> inputStream.copyTo(outputStream, 1024) } } } catch (e: FileNotFoundException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } MediaScannerConnection.scanFile(context, arrayOf(file.path), null, null) return file.takeIf { it.exists() } } /** * Retrieves the list of messages which should be shown in the notification * for a given conversation Loading domain/src/main/java/com/moez/QKSMS/interactor/SaveImage.kt +1 −5 Original line number Diff line number Diff line Loading @@ -18,21 +18,17 @@ */ package com.moez.QKSMS.interactor import com.moez.QKSMS.repository.ImageRepository import com.moez.QKSMS.repository.MessageRepository import io.reactivex.Flowable import javax.inject.Inject class SaveImage @Inject constructor( private val imageRepository: ImageRepository, private val messageRepo: MessageRepository ) : Interactor<Long>() { override fun buildObservable(params: Long): Flowable<*> { return Flowable.just(params) .map { partId -> messageRepo.getPart(partId) } .map { part -> part.getUri() } .doOnNext { uri -> imageRepository.saveImage(uri) } .doOnNext { partId -> messageRepo.savePart(partId) } } } No newline at end of file domain/src/main/java/com/moez/QKSMS/repository/ImageRepository.kt +1 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,4 @@ interface ImageRepository { fun loadImage(uri: Uri): Bitmap? fun saveImage(uri: Uri) } domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt +4 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import com.moez.QKSMS.model.Attachment import com.moez.QKSMS.model.Message import com.moez.QKSMS.model.MmsPart import io.realm.RealmResults import java.io.File interface MessageRepository { Loading @@ -37,6 +38,8 @@ interface MessageRepository { fun getPartsForConversation(threadId: Long): RealmResults<MmsPart> fun savePart(id: Long): File? /** * Retrieves the list of messages which should be shown in the notification * for a given conversation Loading Loading
data/src/main/java/com/moez/QKSMS/repository/ImageRepostoryImpl.kt +0 −26 Original line number Diff line number Diff line Loading @@ -22,14 +22,8 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Matrix import android.media.MediaScannerConnection import android.net.Uri import android.os.Environment import androidx.exifinterface.media.ExifInterface import java.io.File import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.IOException import javax.inject.Inject class ImageRepostoryImpl @Inject constructor(private val context: Context) : ImageRepository { Loading Loading @@ -58,24 +52,4 @@ class ImageRepostoryImpl @Inject constructor(private val context: Context) : Ima return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true) } override fun saveImage(uri: Uri) { val type = context.contentResolver.getType(uri)?.split("/") ?: return val dir = File(Environment.getExternalStorageDirectory(), "QKSMS/Media").apply { mkdirs() } val file = File(dir, "${type.first()}${System.currentTimeMillis()}.${type.last()}") try { FileOutputStream(file).use { outputStream -> context.contentResolver.openInputStream(uri)?.use { inputStream -> inputStream.copyTo(outputStream, 1024) } } } catch (e: FileNotFoundException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } MediaScannerConnection.scanFile(context, arrayOf(file.path), null, null) } }
data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt +34 −0 Original line number Diff line number Diff line Loading @@ -25,9 +25,12 @@ import android.content.ContentValues import android.content.Context import android.content.Intent import android.content.IntentFilter import android.media.MediaScannerConnection import android.os.Build import android.os.Environment import android.provider.Telephony import android.telephony.SmsManager import android.webkit.MimeTypeMap import androidx.core.content.contentValuesOf import com.google.android.mms.ContentType import com.google.android.mms.MMSPart Loading @@ -54,6 +57,10 @@ import io.realm.Realm import io.realm.RealmResults import io.realm.Sort import timber.log.Timber import java.io.File import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.IOException import javax.inject.Inject import javax.inject.Singleton Loading Loading @@ -132,6 +139,33 @@ class MessageRepositoryImpl @Inject constructor( .findAllAsync() } override fun savePart(id: Long): File? { val part = getPart(id) ?: return null val extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(part.type) ?: return null val date = part.messages?.first()?.date val dir = File(Environment.getExternalStorageDirectory(), "QKSMS/Media").apply { mkdirs() } val fileName = part.name?.takeIf { name -> name.endsWith(extension) } ?: "${part.type.split("/").last()}_$date.$extension" val file = File(dir, fileName) try { FileOutputStream(file).use { outputStream -> context.contentResolver.openInputStream(part.getUri())?.use { inputStream -> inputStream.copyTo(outputStream, 1024) } } } catch (e: FileNotFoundException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } MediaScannerConnection.scanFile(context, arrayOf(file.path), null, null) return file.takeIf { it.exists() } } /** * Retrieves the list of messages which should be shown in the notification * for a given conversation Loading
domain/src/main/java/com/moez/QKSMS/interactor/SaveImage.kt +1 −5 Original line number Diff line number Diff line Loading @@ -18,21 +18,17 @@ */ package com.moez.QKSMS.interactor import com.moez.QKSMS.repository.ImageRepository import com.moez.QKSMS.repository.MessageRepository import io.reactivex.Flowable import javax.inject.Inject class SaveImage @Inject constructor( private val imageRepository: ImageRepository, private val messageRepo: MessageRepository ) : Interactor<Long>() { override fun buildObservable(params: Long): Flowable<*> { return Flowable.just(params) .map { partId -> messageRepo.getPart(partId) } .map { part -> part.getUri() } .doOnNext { uri -> imageRepository.saveImage(uri) } .doOnNext { partId -> messageRepo.savePart(partId) } } } No newline at end of file
domain/src/main/java/com/moez/QKSMS/repository/ImageRepository.kt +1 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,4 @@ interface ImageRepository { fun loadImage(uri: Uri): Bitmap? fun saveImage(uri: Uri) }
domain/src/main/java/com/moez/QKSMS/repository/MessageRepository.kt +4 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import com.moez.QKSMS.model.Attachment import com.moez.QKSMS.model.Message import com.moez.QKSMS.model.MmsPart import io.realm.RealmResults import java.io.File interface MessageRepository { Loading @@ -37,6 +38,8 @@ interface MessageRepository { fun getPartsForConversation(threadId: Long): RealmResults<MmsPart> fun savePart(id: Long): File? /** * Retrieves the list of messages which should be shown in the notification * for a given conversation Loading