diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryActivity.kt index ce7b851a781c392fb92bd8a31e63e5f8db55efa4..2b121b1f232a9738821af9b3f355be4752cec00f 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryActivity.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryActivity.kt @@ -18,9 +18,12 @@ */ package com.moez.QKSMS.feature.gallery +import android.Manifest import android.os.Bundle import android.view.Menu import android.view.MenuItem +import androidx.annotation.NonNull +import androidx.core.app.ActivityCompat import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProviders @@ -50,6 +53,7 @@ class GalleryActivity : QkActivity(), GalleryView { private val optionsItemSubject: Subject = PublishSubject.create() private val pageChangedSubject: Subject = PublishSubject.create() private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory)[GalleryViewModel::class.java] } + private val permissionResultSubject: Subject = PublishSubject.create() override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) @@ -112,9 +116,28 @@ class GalleryActivity : QkActivity(), GalleryView { return true } + override fun onStart() { + super.onStart() + } + + override fun onPause() { + super.onPause() + } + override fun onDestroy() { super.onDestroy() pagerAdapter.destroy() } + override fun requestStoragePermission() { + ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 0) + } + + override fun onRequestPermissionsResult(requestCode: Int, @NonNull permissions: Array, @NonNull grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + permissionResultSubject.onNext(Unit) + } + + override fun permissionResult(): Observable<*> = permissionResultSubject + } \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryView.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryView.kt index 2d1f2e5152a01b52fb63e06b30e5f6d540c0012d..0e78aa8fda5e74aa1d37862967bb8dd5291fe193 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryView.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryView.kt @@ -27,5 +27,6 @@ interface GalleryView : QkView { fun optionsItemSelected(): Observable fun screenTouched(): Observable<*> fun pageChanged(): Observable - + fun requestStoragePermission() + fun permissionResult(): Observable<*> } \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryViewModel.kt index 5c233c990ad4e24ecc0ef9ce745d867ad3426148..fea79fed68c04f7d3dbf759fc544c16734017507 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryViewModel.kt @@ -25,6 +25,7 @@ import com.moez.QKSMS.common.base.QkViewModel import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.extensions.mapNotNull import com.moez.QKSMS.interactor.SaveImage +import com.moez.QKSMS.manager.PermissionManager import com.moez.QKSMS.repository.ConversationRepository import com.moez.QKSMS.repository.MessageRepository import com.uber.autodispose.kotlin.autoDisposable @@ -39,7 +40,8 @@ class GalleryViewModel @Inject constructor( messageRepo: MessageRepository, @Named("partId") private val partId: Long, private val context: Context, - private val saveImage: SaveImage + private val saveImage: SaveImage, + private val permissionManager: PermissionManager ) : QkViewModel(GalleryState()) { init { @@ -53,7 +55,13 @@ class GalleryViewModel @Inject constructor( override fun bindView(view: GalleryView) { super.bindView(view) - + view.permissionResult() + .map { permissionManager.hasStorage() } + .autoDisposable(view.scope()) + .subscribe{ + if(permissionManager.hasStorage()) + saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) } + } // When the screen is touched, toggle the visibility of the navigation UI view.screenTouched() .withLatestFrom(state) { _, state -> state.navigationVisible } @@ -66,7 +74,13 @@ class GalleryViewModel @Inject constructor( .filter { itemId -> itemId == R.id.save } .withLatestFrom(view.pageChanged()) { _, part -> part.id } .autoDisposable(view.scope()) - .subscribe { partId -> saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) } } + .subscribe { + partId -> + if(permissionManager.hasStorage()) + saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) } + else + view.requestStoragePermission() + } } } \ No newline at end of file