diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt index dc304b8db..432dbc807 100644 --- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt +++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.kt @@ -213,7 +213,6 @@ class NextcloudTalkApplication : MultiDexApplication(), LifecycleObserver { .contextModule(ContextModule(applicationContext)) .databaseModule(DatabaseModule()) .restModule(RestModule(applicationContext)) - .userModule(UserModule()) .arbitraryStorageModule(ArbitraryStorageModule()) .build() } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index dccabdd6c..e17b0d218 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -2547,7 +2547,6 @@ class ChatController(args: Bundle) : val intent = Intent(activity, MessageSearchActivity::class.java) intent.putExtra(KEY_CONVERSATION_NAME, currentConversation?.displayName) intent.putExtra(KEY_ROOM_TOKEN, roomToken) - intent.putExtra(KEY_USER_ENTITY, conversationUser as Parcelable) startActivityForResult(intent, REQUEST_CODE_MESSAGE_SEARCH) } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index de5e006ce..dcd3194ea 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -326,7 +326,7 @@ public class ConversationsListController extends BaseController implements Flexi return; } - searchHelper = new MessageSearchHelper(currentUser, unifiedSearchRepository); + searchHelper = new MessageSearchHelper(unifiedSearchRepository); credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken()); if (getActivity() != null && getActivity() instanceof MainActivity) { diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt b/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt index 79d3489de..0e62a8645 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt @@ -26,6 +26,7 @@ import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepositoryImpl import com.nextcloud.talk.shareditems.repositories.SharedItemsRepository import com.nextcloud.talk.shareditems.repositories.SharedItemsRepositoryImpl +import com.nextcloud.talk.utils.database.user.CurrentUserProvider import dagger.Module import dagger.Provides @@ -37,7 +38,7 @@ class RepositoryModule { } @Provides - fun provideUnifiedSearchRepository(ncApi: NcApi): UnifiedSearchRepository { - return UnifiedSearchRepositoryImpl(ncApi) + fun provideUnifiedSearchRepository(ncApi: NcApi, userProvider: CurrentUserProvider): UnifiedSearchRepository { + return UnifiedSearchRepositoryImpl(ncApi, userProvider) } } diff --git a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt index 4fb9cd087..ac2501522 100644 --- a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchActivity.kt @@ -43,6 +43,7 @@ import com.nextcloud.talk.databinding.ActivityMessageSearchBinding import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.bundle.BundleKeys +import com.nextcloud.talk.utils.database.user.CurrentUserProvider import com.nextcloud.talk.utils.rx.SearchViewObservable.Companion.observeSearchView import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem @@ -60,6 +61,9 @@ class MessageSearchActivity : BaseActivity() { @Inject lateinit var viewModelFactory: ViewModelProvider.Factory + @Inject + lateinit var userProvider: CurrentUserProvider + private lateinit var binding: ActivityMessageSearchBinding private lateinit var searchView: SearchView @@ -80,9 +84,9 @@ class MessageSearchActivity : BaseActivity() { setContentView(binding.root) viewModel = ViewModelProvider(this, viewModelFactory)[MessageSearchViewModel::class.java] - user = intent.getParcelableExtra(BundleKeys.KEY_USER_ENTITY)!! + user = userProvider.currentUser!! val roomToken = intent.getStringExtra(BundleKeys.KEY_ROOM_TOKEN)!! - viewModel.initialize(user, roomToken) + viewModel.initialize(roomToken) setupStateObserver() binding.swipeRefreshLayout.setOnRefreshListener { diff --git a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchHelper.kt b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchHelper.kt index 0350a9f73..e303f1d2d 100644 --- a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchHelper.kt +++ b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchHelper.kt @@ -22,14 +22,12 @@ package com.nextcloud.talk.messagesearch import android.util.Log -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.domain.SearchMessageEntry import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository import io.reactivex.Observable import io.reactivex.disposables.Disposable class MessageSearchHelper @JvmOverloads constructor( - private val user: UserEntity, private val unifiedSearchRepository: UnifiedSearchRepository, private val fromRoom: String? = null ) { @@ -84,7 +82,6 @@ class MessageSearchHelper @JvmOverloads constructor( return when { fromRoom != null -> { unifiedSearchRepository.searchInRoom( - userEntity = user, roomToken = fromRoom, searchTerm = search, cursor = cursor @@ -92,7 +89,6 @@ class MessageSearchHelper @JvmOverloads constructor( } else -> { unifiedSearchRepository.searchMessages( - userEntity = user, searchTerm = search, cursor = cursor ) diff --git a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchViewModel.kt b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchViewModel.kt index fce06e2c2..1864070e8 100644 --- a/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/messagesearch/MessageSearchViewModel.kt @@ -26,11 +26,9 @@ import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.domain.SearchMessageEntry import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import javax.inject.Inject @@ -66,10 +64,8 @@ class MessageSearchViewModel @Inject constructor(private val unifiedSearchReposi val state: LiveData get() = _state - private var searchDisposable: Disposable? = null - - fun initialize(user: UserEntity, roomToken: String) { - messageSearchHelper = MessageSearchHelper(user, unifiedSearchRepository, roomToken) + fun initialize(roomToken: String) { + messageSearchHelper = MessageSearchHelper(unifiedSearchRepository, roomToken) } @SuppressLint("CheckResult") // handled by helper diff --git a/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepository.kt b/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepository.kt index 4d91e1219..a24e86bdd 100644 --- a/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepository.kt @@ -1,6 +1,5 @@ package com.nextcloud.talk.repositories.unifiedsearch -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.domain.SearchMessageEntry import io.reactivex.Observable @@ -12,14 +11,12 @@ interface UnifiedSearchRepository { ) fun searchMessages( - userEntity: UserEntity, searchTerm: String, cursor: Int = 0, limit: Int = DEFAULT_PAGE_SIZE ): Observable> fun searchInRoom( - userEntity: UserEntity, roomToken: String, searchTerm: String, cursor: Int = 0, diff --git a/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepositoryImpl.kt index 1f0d072c3..39623b3a2 100644 --- a/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/repositories/unifiedsearch/UnifiedSearchRepositoryImpl.kt @@ -27,18 +27,25 @@ import com.nextcloud.talk.models.domain.SearchMessageEntry import com.nextcloud.talk.models.json.unifiedsearch.UnifiedSearchEntry import com.nextcloud.talk.models.json.unifiedsearch.UnifiedSearchResponseData import com.nextcloud.talk.utils.ApiUtils +import com.nextcloud.talk.utils.database.user.CurrentUserProvider import io.reactivex.Observable -class UnifiedSearchRepositoryImpl(private val api: NcApi) : UnifiedSearchRepository { +class UnifiedSearchRepositoryImpl(private val api: NcApi, private val userProvider: CurrentUserProvider) : + UnifiedSearchRepository { + + private val userEntity: UserEntity + get() = userProvider.currentUser!! + + private val credentials: String + get() = ApiUtils.getCredentials(userEntity.username, userEntity.token) override fun searchMessages( - userEntity: UserEntity, searchTerm: String, cursor: Int, limit: Int ): Observable> { val apiObservable = api.performUnifiedSearch( - ApiUtils.getCredentials(userEntity.username, userEntity.token), + credentials, ApiUtils.getUrlForUnifiedSearch(userEntity.baseUrl, PROVIDER_TALK_MESSAGE), searchTerm, null, @@ -49,14 +56,13 @@ class UnifiedSearchRepositoryImpl(private val api: NcApi) : UnifiedSearchReposit } override fun searchInRoom( - userEntity: UserEntity, roomToken: String, searchTerm: String, cursor: Int, limit: Int ): Observable> { val apiObservable = api.performUnifiedSearch( - ApiUtils.getCredentials(userEntity.username, userEntity.token), + credentials, ApiUtils.getUrlForUnifiedSearch(userEntity.baseUrl, PROVIDER_TALK_MESSAGE_CURRENT), searchTerm, fromUrlForRoom(roomToken), diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/CurrentUserProvider.kt b/app/src/main/java/com/nextcloud/talk/utils/database/user/CurrentUserProvider.kt new file mode 100644 index 000000000..31200ab34 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/CurrentUserProvider.kt @@ -0,0 +1,27 @@ +/* + * Nextcloud Talk application + * + * @author Álvaro Brey + * Copyright (C) 2022 Álvaro Brey + * Copyright (C) 2022 Nextcloud GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.nextcloud.talk.utils.database.user + +import com.nextcloud.talk.models.database.UserEntity + +interface CurrentUserProvider { + val currentUser: UserEntity? +} diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.kt similarity index 54% rename from app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java rename to app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.kt index a2bfee62c..aad73490a 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.kt @@ -17,28 +17,25 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.nextcloud.talk.utils.database.user; +package com.nextcloud.talk.utils.database.user -import autodagger.AutoInjector; -import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.dagger.modules.DatabaseModule; -import dagger.Module; -import dagger.Provides; -import io.requery.Persistable; -import io.requery.reactivex.ReactiveEntityStore; +import com.nextcloud.talk.dagger.modules.DatabaseModule +import dagger.Binds +import dagger.Module +import dagger.Provides +import io.requery.Persistable +import io.requery.reactivex.ReactiveEntityStore -import javax.inject.Inject; +@Module(includes = [DatabaseModule::class]) +abstract class UserModule { -@Module(includes = DatabaseModule.class) -@AutoInjector(NextcloudTalkApplication.class) -public class UserModule { + @Binds + abstract fun bindCurrentUserProvider(userUtils: UserUtils): CurrentUserProvider - @Inject - public UserModule() { - } - - @Provides - public UserUtils provideUserUtils(ReactiveEntityStore dataStore) { - return new UserUtils(dataStore); + companion object { + @Provides + fun provideUserUtils(dataStore: ReactiveEntityStore?): UserUtils { + return UserUtils(dataStore) + } } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java index 670f40a41..8ee5a347c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java @@ -36,7 +36,7 @@ import io.requery.Persistable; import io.requery.query.Result; import io.requery.reactivex.ReactiveEntityStore; -public class UserUtils { +public class UserUtils implements CurrentUserProvider { private ReactiveEntityStore dataStore; UserUtils(ReactiveEntityStore dataStore) { @@ -83,6 +83,7 @@ public class UserUtils { return null; } + @Override public @Nullable UserEntity getCurrentUser() { Result findUserQueryResult = dataStore.select(User.class).where(UserEntity.CURRENT.eq(Boolean.TRUE) .and(UserEntity.SCHEDULED_FOR_DELETION.notEqual(Boolean.TRUE))) diff --git a/app/src/test/java/com/nextcloud/talk/test/fakes/FakeUnifiedSearchRepository.kt b/app/src/test/java/com/nextcloud/talk/test/fakes/FakeUnifiedSearchRepository.kt index 2a216e69e..33d34f772 100644 --- a/app/src/test/java/com/nextcloud/talk/test/fakes/FakeUnifiedSearchRepository.kt +++ b/app/src/test/java/com/nextcloud/talk/test/fakes/FakeUnifiedSearchRepository.kt @@ -21,7 +21,6 @@ package com.nextcloud.talk.test.fakes -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.domain.SearchMessageEntry import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository import io.reactivex.Observable @@ -32,7 +31,6 @@ class FakeUnifiedSearchRepository : UnifiedSearchRepository { var lastRequestedCursor = -1 override fun searchMessages( - userEntity: UserEntity, searchTerm: String, cursor: Int, limit: Int @@ -42,7 +40,6 @@ class FakeUnifiedSearchRepository : UnifiedSearchRepository { } override fun searchInRoom( - userEntity: UserEntity, roomToken: String, searchTerm: String, cursor: Int,