소스 검색

open links for files app from any screen.

With this change, all links that target files in the same nextcloud instance will be opened in the files app, no matter on which screen the link was.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 1 년 전
부모
커밋
8876718677

+ 36 - 0
app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt

@@ -10,8 +10,10 @@ package com.nextcloud.talk.activities
 
 import android.annotation.SuppressLint
 import android.content.Context
+import android.content.Intent
 import android.os.Build
 import android.os.Bundle
+import android.text.TextUtils
 import android.util.Log
 import android.view.View
 import android.view.ViewGroup
@@ -34,6 +36,9 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
 import com.nextcloud.talk.events.CertificateEvent
 import com.nextcloud.talk.ui.theme.ViewThemeUtils
 import com.nextcloud.talk.utils.DisplayUtils
+import com.nextcloud.talk.utils.FileViewerUtils
+import com.nextcloud.talk.utils.UriUtils
+import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.preferences.AppPreferences
 import com.nextcloud.talk.utils.ssl.TrustManager
 import org.greenrobot.eventbus.EventBus
@@ -65,6 +70,9 @@ open class BaseActivity : AppCompatActivity() {
     @Inject
     lateinit var context: Context
 
+    @Inject
+    lateinit var currentUserProvider: CurrentUserProviderNew
+
     open val appBarLayoutType: AppBarLayoutType
         get() = AppBarLayoutType.TOOLBAR
 
@@ -223,6 +231,34 @@ open class BaseActivity : AppCompatActivity() {
         showCertificateDialog(event.x509Certificate, event.trustManager, event.sslErrorHandler)
     }
 
+    override fun startActivity(intent: Intent) {
+        val user = currentUserProvider.currentUser.blockingGet()
+        if (intent.data != null && TextUtils.equals(intent.action, Intent.ACTION_VIEW)) {
+            val uri = intent.data.toString()
+            if (uri.startsWith(user.baseUrl!!)) {
+                if (UriUtils.isInstanceInternalFileShareUrl(user.baseUrl!!, uri)) {
+                    // https://cloud.nextcloud.com/f/41
+                    val fileViewerUtils = FileViewerUtils(applicationContext, user)
+                    fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileShareFileId(uri))
+                } else if (UriUtils.isInstanceInternalFileUrl(user.baseUrl!!, uri)) {
+                    // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
+                    val fileViewerUtils = FileViewerUtils(applicationContext, user)
+                    fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileFileId(uri))
+                } else if (UriUtils.isInstanceInternalFileUrlNew(user.baseUrl!!, uri)) {
+                    // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
+                    val fileViewerUtils = FileViewerUtils(applicationContext, user)
+                    fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileFileIdNew(uri))
+                } else {
+                    super.startActivity(intent)
+                }
+            } else {
+                super.startActivity(intent)
+            }
+        } else {
+            super.startActivity(intent)
+        }
+    }
+
     companion object {
         private val TAG = BaseActivity::class.java.simpleName
     }

+ 1 - 6
app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt

@@ -120,7 +120,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM
 import com.nextcloud.talk.utils.CapabilitiesUtil
 import com.nextcloud.talk.utils.CapabilitiesUtil.hasSpreedFeatureCapability
 import com.nextcloud.talk.utils.CapabilitiesUtil.isCallRecordingAvailable
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
 import com.nextcloud.talk.utils.power.PowerManagerUtils
 import com.nextcloud.talk.utils.registerPermissionHandlerBroadcastReceiver
@@ -183,10 +182,6 @@ class CallActivity : CallBaseActivity() {
     @Inject
     var ncApi: NcApi? = null
 
-    @JvmField
-    @Inject
-    var currentUserProvider: CurrentUserProviderNew? = null
-
     @JvmField
     @Inject
     var userManager: UserManager? = null
@@ -375,7 +370,7 @@ class CallActivity : CallBaseActivity() {
         binding = CallActivityBinding.inflate(layoutInflater)
         setContentView(binding!!.root)
         hideNavigationIfNoPipAvailable()
-        conversationUser = currentUserProvider!!.currentUser.blockingGet()
+        conversationUser = currentUserProvider.currentUser.blockingGet()
         val extras = intent.extras
         roomId = extras!!.getString(KEY_ROOM_ID, "")
         roomToken = extras.getString(KEY_ROOM_TOKEN, "")

+ 0 - 33
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -195,7 +195,6 @@ import com.nextcloud.talk.utils.Mimetype
 import com.nextcloud.talk.utils.NotificationUtils
 import com.nextcloud.talk.utils.ParticipantPermissions
 import com.nextcloud.talk.utils.SpreedFeatures
-import com.nextcloud.talk.utils.UriUtils
 import com.nextcloud.talk.utils.VibrationUtils
 import com.nextcloud.talk.utils.bundle.BundleKeys
 import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CALL_VOICE_ONLY
@@ -209,7 +208,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
 import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
 import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_START_CALL_AFTER_ROOM_SWITCH
 import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
 import com.nextcloud.talk.utils.rx.DisposableSet
 import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder
@@ -267,9 +265,6 @@ class ChatActivity :
     @Inject
     lateinit var ncApi: NcApi
 
-    @Inject
-    lateinit var currentUserProvider: CurrentUserProviderNew
-
     @Inject
     lateinit var permissionUtil: PlatformPermissionUtil
 
@@ -3300,34 +3295,6 @@ class ChatActivity :
         )
     }
 
-    override fun startActivity(intent: Intent) {
-        val user = currentUserProvider.currentUser.blockingGet()
-        if (intent.data != null && TextUtils.equals(intent.action, Intent.ACTION_VIEW)) {
-            val uri = intent.data.toString()
-            if (uri.startsWith(user.baseUrl!!)) {
-                if (UriUtils.isInstanceInternalFileShareUrl(user.baseUrl!!, uri)) {
-                    // https://cloud.nextcloud.com/f/41
-                    val fileViewerUtils = FileViewerUtils(applicationContext, user)
-                    fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileShareFileId(uri))
-                } else if (UriUtils.isInstanceInternalFileUrl(user.baseUrl!!, uri)) {
-                    // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
-                    val fileViewerUtils = FileViewerUtils(applicationContext, user)
-                    fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileFileId(uri))
-                } else if (UriUtils.isInstanceInternalFileUrlNew(user.baseUrl!!, uri)) {
-                    // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
-                    val fileViewerUtils = FileViewerUtils(applicationContext, user)
-                    fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileFileIdNew(uri))
-                } else {
-                    super.startActivity(intent)
-                }
-            } else {
-                super.startActivity(intent)
-            }
-        } else {
-            super.startActivity(intent)
-        }
-    }
-
     fun sendSelectLocalFileIntent() {
         if (!permissionUtil.isFilesPermissionGranted()) {
             requestReadFilesPermissions()

+ 0 - 4
app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt

@@ -76,7 +76,6 @@ import com.nextcloud.talk.utils.DateUtils
 import com.nextcloud.talk.utils.ShareUtils
 import com.nextcloud.talk.utils.SpreedFeatures
 import com.nextcloud.talk.utils.bundle.BundleKeys
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
@@ -103,9 +102,6 @@ class ConversationInfoActivity :
     @Inject
     lateinit var ncApi: NcApi
 
-    @Inject
-    lateinit var currentUserProvider: CurrentUserProviderNew
-
     @Inject
     lateinit var conversationsRepository: ConversationsRepository
 

+ 0 - 4
app/src/main/java/com/nextcloud/talk/conversationinfoedit/ConversationInfoEditActivity.kt

@@ -41,7 +41,6 @@ import com.nextcloud.talk.utils.ApiUtils
 import com.nextcloud.talk.utils.CapabilitiesUtil
 import com.nextcloud.talk.utils.PickImage
 import com.nextcloud.talk.utils.bundle.BundleKeys
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import io.reactivex.Observer
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
@@ -57,9 +56,6 @@ class ConversationInfoEditActivity : BaseActivity() {
     @Inject
     lateinit var ncApi: NcApi
 
-    @Inject
-    lateinit var currentUserProvider: CurrentUserProviderNew
-
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 

+ 0 - 4
app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseActivity.kt

@@ -43,7 +43,6 @@ import com.nextcloud.talk.utils.NotificationUtils
 import com.nextcloud.talk.utils.PushUtils.Companion.LATEST_PUSH_REGISTRATION_AT_PUSH_PROXY
 import com.nextcloud.talk.utils.PushUtils.Companion.LATEST_PUSH_REGISTRATION_AT_SERVER
 import com.nextcloud.talk.utils.UserIdUtils
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
 import com.nextcloud.talk.utils.power.PowerManagerUtils
 import javax.inject.Inject
@@ -62,9 +61,6 @@ class DiagnoseActivity : BaseActivity() {
     @Inject
     lateinit var userManager: UserManager
 
-    @Inject
-    lateinit var currentUserProvider: CurrentUserProviderNew
-
     @Inject
     lateinit var platformPermissionUtil: PlatformPermissionUtil
 

+ 1 - 5
app/src/main/java/com/nextcloud/talk/invitation/InvitationsActivity.kt

@@ -27,7 +27,6 @@ import com.nextcloud.talk.invitation.data.ActionEnum
 import com.nextcloud.talk.invitation.data.Invitation
 import com.nextcloud.talk.invitation.viewmodels.InvitationsViewModel
 import com.nextcloud.talk.utils.bundle.BundleKeys
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import javax.inject.Inject
 
 @AutoInjector(NextcloudTalkApplication::class)
@@ -41,9 +40,6 @@ class InvitationsActivity : BaseActivity() {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
-    @Inject
-    lateinit var userProvider: CurrentUserProviderNew
-
     lateinit var invitationsViewModel: InvitationsViewModel
 
     lateinit var adapter: InvitationsAdapter
@@ -63,7 +59,7 @@ class InvitationsActivity : BaseActivity() {
 
         invitationsViewModel = ViewModelProvider(this, viewModelFactory)[InvitationsViewModel::class.java]
 
-        currentUser = userProvider.currentUser.blockingGet()
+        currentUser = currentUserProvider.currentUser.blockingGet()
         invitationsViewModel.fetchInvitations(currentUser)
 
         binding = ActivityInvitationsBinding.inflate(layoutInflater)

+ 1 - 5
app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt

@@ -29,7 +29,6 @@ import com.nextcloud.talk.conversationlist.ConversationsListActivity
 import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.ActivityMessageSearchBinding
 import com.nextcloud.talk.utils.bundle.BundleKeys
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.rx.SearchViewObservable.Companion.observeSearchView
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
@@ -47,9 +46,6 @@ class MessageSearchActivity : BaseActivity() {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
-    @Inject
-    lateinit var userProvider: CurrentUserProviderNew
-
     private lateinit var binding: ActivityMessageSearchBinding
     private lateinit var searchView: SearchView
 
@@ -77,7 +73,7 @@ class MessageSearchActivity : BaseActivity() {
         setupSystemColors()
 
         viewModel = ViewModelProvider(this, viewModelFactory)[MessageSearchViewModel::class.java]
-        user = userProvider.currentUser.blockingGet()
+        user = currentUserProvider.currentUser.blockingGet()
         val roomToken = intent.getStringExtra(BundleKeys.KEY_ROOM_TOKEN)!!
         viewModel.initialize(roomToken)
         setupStateObserver()

+ 1 - 5
app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt

@@ -23,7 +23,6 @@ import com.nextcloud.talk.openconversations.adapters.OpenConversationsAdapter
 import com.nextcloud.talk.openconversations.data.OpenConversation
 import com.nextcloud.talk.openconversations.viewmodels.OpenConversationsViewModel
 import com.nextcloud.talk.utils.bundle.BundleKeys
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import javax.inject.Inject
 
 @AutoInjector(NextcloudTalkApplication::class)
@@ -37,9 +36,6 @@ class ListOpenConversationsActivity : BaseActivity() {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
-    @Inject
-    lateinit var userProvider: CurrentUserProviderNew
-
     lateinit var openConversationsViewModel: OpenConversationsViewModel
 
     lateinit var adapter: OpenConversationsAdapter
@@ -57,7 +53,7 @@ class ListOpenConversationsActivity : BaseActivity() {
         setContentView(binding.root)
         setupSystemColors()
 
-        val user = userProvider.currentUser.blockingGet()
+        val user = currentUserProvider.currentUser.blockingGet()
 
         adapter = OpenConversationsAdapter(user) { conversation -> adapterOnClick(conversation) }
         binding.openConversationsRecyclerView.adapter = adapter

+ 0 - 4
app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt

@@ -75,7 +75,6 @@ import com.nextcloud.talk.utils.NotificationUtils.getCallRingtoneUri
 import com.nextcloud.talk.utils.NotificationUtils.getMessageRingtoneUri
 import com.nextcloud.talk.utils.SecurityUtils
 import com.nextcloud.talk.utils.SpreedFeatures
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
 import com.nextcloud.talk.utils.power.PowerManagerUtils
 import com.nextcloud.talk.utils.preferences.AppPreferencesImpl
@@ -107,9 +106,6 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
     @Inject
     lateinit var userManager: UserManager
 
-    @Inject
-    lateinit var currentUserProvider: CurrentUserProviderNew
-
     @Inject
     lateinit var platformPermissionUtil: PlatformPermissionUtil
 

+ 2 - 10
app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt

@@ -13,7 +13,6 @@ import android.os.Bundle
 import android.util.Log
 import android.view.MenuItem
 import android.view.View
-import androidx.appcompat.app.AppCompatActivity
 import androidx.core.content.res.ResourcesCompat
 import androidx.lifecycle.ViewModelProvider
 import androidx.recyclerview.widget.GridLayoutManager
@@ -22,31 +21,24 @@ import androidx.recyclerview.widget.RecyclerView
 import autodagger.AutoInjector
 import com.google.android.material.tabs.TabLayout
 import com.nextcloud.talk.R
+import com.nextcloud.talk.activities.BaseActivity
 import com.nextcloud.talk.application.NextcloudTalkApplication
 import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.ActivitySharedItemsBinding
 import com.nextcloud.talk.shareditems.adapters.SharedItemsAdapter
 import com.nextcloud.talk.shareditems.model.SharedItemType
 import com.nextcloud.talk.shareditems.viewmodels.SharedItemsViewModel
-import com.nextcloud.talk.ui.theme.ViewThemeUtils
 import com.nextcloud.talk.utils.DisplayUtils
 import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME
 import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
-import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import javax.inject.Inject
 
 @AutoInjector(NextcloudTalkApplication::class)
-class SharedItemsActivity : AppCompatActivity() {
-
-    @Inject
-    lateinit var currentUserProvider: CurrentUserProviderNew
+class SharedItemsActivity : BaseActivity() {
 
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
-    @Inject
-    lateinit var viewThemeUtils: ViewThemeUtils
-
     private lateinit var binding: ActivitySharedItemsBinding
     private lateinit var viewModel: SharedItemsViewModel
 

+ 1 - 0
app/src/main/java/com/nextcloud/talk/utils/UriUtils.kt

@@ -22,6 +22,7 @@ class UriUtils {
 
         fun isInstanceInternalFileShareUrl(baseUrl: String, url: String): Boolean {
             // https://cloud.nextcloud.com/f/41
+            // https://cloud.nextcloud.com/index.php/f/41
             return (url.startsWith("$baseUrl/f/") || url.startsWith("$baseUrl/index.php/f/")) &&
                 Regex(".*/f/\\d*").matches(url)
         }