Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76e8c977 authored by Moez Bhatti's avatar Moez Bhatti Committed by Dayona Joseph
Browse files

Share photos externally

Closes #1442
parent cae9bb0f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -251,6 +251,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)
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ class GalleryActivity : QkActivity(), GalleryView {
    private val permissionResultSubject: Subject<Unit> = PublishSubject.create()

    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)
+16 −7
Original line number Diff line number Diff line
@@ -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
@@ -37,11 +38,12 @@ 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 permissionManager: PermissionManager
    private val permissions: PermissionManager
) : QkViewModel<GalleryView, GalleryState>(GalleryState()) {

    init {
@@ -60,10 +62,10 @@ class GalleryViewModel @Inject constructor(
    override fun bindView(view: GalleryView) {
        super.bindView(view)
        view.permissionResult()
                .map { permissionManager.hasStorage() }
                .map { permissions.hasStorage() }
                .autoDisposable(view.scope())
                .subscribe{
                    if(permissionManager.hasStorage())
                    if(permissions.hasStorage())
                        saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) }
                }
        // When the screen is touched, toggle the visibility of the navigation UI
@@ -76,16 +78,23 @@ class GalleryViewModel @Inject constructor(
        // Save image to device
        view.optionsItemSelected()
                .filter { itemId -> itemId == R.id.save }
                .filter { permissionManager.hasStorage().also { if (!it) view.requestStoragePermission() } }
                .filter { permissions.hasStorage().also { if (!it) view.requestStoragePermission() } }
                .withLatestFrom(view.pageChanged()) { _, part -> part.id }
                .autoDisposable(view.scope())
                .subscribe {
                    partId ->
                    if(permissionManager.hasStorage())
                    if(permissions.hasStorage())
                        saveImage.execute(partId) { context.makeToast(R.string.gallery_toast_saved) }
                    else
                        view.requestStoragePermission()
                }
        // 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) }
    }

}
+5 −1
Original line number Diff line number Diff line
@@ -23,4 +23,8 @@
        android:id="@+id/save"
        android:title="@string/menu_save" />

    <item
        android:id="@+id/share"
        android:title="@string/menu_share" />

</menu>
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,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>