Loading presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt +11 −0 Original line number Diff line number Diff line Loading @@ -266,6 +266,17 @@ class Navigator @Inject constructor( startActivityExternal(intent) } fun shareFile(file: File) { val data = FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file) val type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(file.name.split(".").last()) val intent = Intent(Intent.ACTION_SEND) .setType(type) .putExtra(Intent.EXTRA_STREAM, data) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) startActivityExternal(intent) } fun showNotificationSettings(threadId: Long = 0) { val intent = Intent(context, NotificationPrefsActivity::class.java) intent.putExtra("threadId", threadId) Loading presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryActivity.kt +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ class GalleryActivity : QkActivity(), GalleryView { private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory)[GalleryViewModel::class.java] } override fun onCreate(savedInstanceState: Bundle?) { delegate.setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES) delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES AndroidInjection.inject(this) super.onCreate(savedInstanceState) setContentView(R.layout.gallery_activity) Loading presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryViewModel.kt +12 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ package com.moez.QKSMS.feature.gallery import android.content.Context import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkViewModel import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.extensions.mapNotNull Loading @@ -37,9 +38,10 @@ import javax.inject.Named class GalleryViewModel @Inject constructor( conversationRepo: ConversationRepository, messageRepo: MessageRepository, @Named("partId") private val partId: Long, private val context: Context, private val messageRepo: MessageRepository, private val navigator: Navigator, private val saveImage: SaveImage, private val permissions: PermissionManager ) : QkViewModel<GalleryView, GalleryState>(GalleryState()) { Loading Loading @@ -74,6 +76,14 @@ class GalleryViewModel @Inject constructor( .withLatestFrom(view.pageChanged()) { _, part -> part.id } .autoDisposable(view.scope()) .subscribe { partId -> saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) } } // Share image externally view.optionsItemSelected() .filter { itemId -> itemId == R.id.share } .filter { permissions.hasStorage().also { if (!it) view.requestStoragePermission() } } .withLatestFrom(view.pageChanged()) { _, part -> part.id } .autoDisposable(view.scope()) .subscribe { partId -> messageRepo.savePart(partId)?.let(navigator::shareFile) } } } presentation/src/main/res/menu/gallery.xml +5 −1 Original line number Diff line number Diff line Loading @@ -23,4 +23,8 @@ android:id="@+id/save" android:title="@string/menu_save" /> <item android:id="@+id/share" android:title="@string/menu_share" /> </menu> presentation/src/main/res/values/strings.xml +1 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ <string name="menu_call">Call</string> <string name="menu_info">Details</string> <string name="menu_save">Save to gallery</string> <string name="menu_share">Share</string> <string name="main_drawer_open_cd">Open navigation drawer</string> <string name="main_title_selected">%d selected</string> Loading Loading
presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt +11 −0 Original line number Diff line number Diff line Loading @@ -266,6 +266,17 @@ class Navigator @Inject constructor( startActivityExternal(intent) } fun shareFile(file: File) { val data = FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file) val type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(file.name.split(".").last()) val intent = Intent(Intent.ACTION_SEND) .setType(type) .putExtra(Intent.EXTRA_STREAM, data) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) startActivityExternal(intent) } fun showNotificationSettings(threadId: Long = 0) { val intent = Intent(context, NotificationPrefsActivity::class.java) intent.putExtra("threadId", threadId) Loading
presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryActivity.kt +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ class GalleryActivity : QkActivity(), GalleryView { private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory)[GalleryViewModel::class.java] } override fun onCreate(savedInstanceState: Bundle?) { delegate.setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES) delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES AndroidInjection.inject(this) super.onCreate(savedInstanceState) setContentView(R.layout.gallery_activity) Loading
presentation/src/main/java/com/moez/QKSMS/feature/gallery/GalleryViewModel.kt +12 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ package com.moez.QKSMS.feature.gallery import android.content.Context import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkViewModel import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.extensions.mapNotNull Loading @@ -37,9 +38,10 @@ import javax.inject.Named class GalleryViewModel @Inject constructor( conversationRepo: ConversationRepository, messageRepo: MessageRepository, @Named("partId") private val partId: Long, private val context: Context, private val messageRepo: MessageRepository, private val navigator: Navigator, private val saveImage: SaveImage, private val permissions: PermissionManager ) : QkViewModel<GalleryView, GalleryState>(GalleryState()) { Loading Loading @@ -74,6 +76,14 @@ class GalleryViewModel @Inject constructor( .withLatestFrom(view.pageChanged()) { _, part -> part.id } .autoDisposable(view.scope()) .subscribe { partId -> saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) } } // Share image externally view.optionsItemSelected() .filter { itemId -> itemId == R.id.share } .filter { permissions.hasStorage().also { if (!it) view.requestStoragePermission() } } .withLatestFrom(view.pageChanged()) { _, part -> part.id } .autoDisposable(view.scope()) .subscribe { partId -> messageRepo.savePart(partId)?.let(navigator::shareFile) } } }
presentation/src/main/res/menu/gallery.xml +5 −1 Original line number Diff line number Diff line Loading @@ -23,4 +23,8 @@ android:id="@+id/save" android:title="@string/menu_save" /> <item android:id="@+id/share" android:title="@string/menu_share" /> </menu>
presentation/src/main/res/values/strings.xml +1 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ <string name="menu_call">Call</string> <string name="menu_info">Details</string> <string name="menu_save">Save to gallery</string> <string name="menu_share">Share</string> <string name="main_drawer_open_cd">Open navigation drawer</string> <string name="main_title_selected">%d selected</string> Loading