forked from GitHub-Mirror/riotX-android
Dagger: continue reworking on app and sdk [WIP]
This commit is contained in:
@ -173,7 +173,7 @@ dependencies {
|
||||
implementation 'com.airbnb.android:mvrx:1.0.1'
|
||||
|
||||
// Work
|
||||
implementation "android.arch.work:work-runtime-ktx:1.0.0"
|
||||
implementation "androidx.work:work-runtime-ktx:2.1.0-beta01"
|
||||
|
||||
// FP
|
||||
implementation "io.arrow-kt:arrow-core:$arrow_version"
|
||||
|
@ -34,7 +34,6 @@ import im.vector.riotredesign.features.notifications.NotifiableEventResolver
|
||||
import im.vector.riotredesign.features.notifications.NotifiableMessageEvent
|
||||
import im.vector.riotredesign.features.notifications.NotificationDrawerManager
|
||||
import im.vector.riotredesign.features.notifications.SimpleNotifiableEvent
|
||||
import org.koin.android.ext.android.inject
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
@ -42,7 +41,7 @@ import timber.log.Timber
|
||||
*/
|
||||
class VectorFirebaseMessagingService : FirebaseMessagingService() {
|
||||
|
||||
val notificationDrawerManager by inject<NotificationDrawerManager>()
|
||||
@Inject lateinit var notificationDrawerManager: NotificationDrawerManager
|
||||
|
||||
private val notifiableEventResolver by lazy {
|
||||
NotifiableEventResolver(this)
|
||||
|
@ -4,7 +4,9 @@ import android.graphics.Typeface
|
||||
import androidx.core.provider.FontsContractCompat
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class EmojiCompatFontProvider @Inject constructor(): FontsContractCompat.FontRequestCallback() {
|
||||
|
||||
var typeface: Typeface? = null
|
||||
|
@ -31,6 +31,7 @@ import com.github.piasy.biv.BigImageViewer
|
||||
import com.github.piasy.biv.loader.glide.GlideImageLoader
|
||||
import com.jakewharton.threetenabp.AndroidThreeTen
|
||||
import im.vector.matrix.android.api.Matrix
|
||||
import im.vector.matrix.android.api.MatrixConfiguration
|
||||
import im.vector.riotredesign.core.di.DaggerVectorComponent
|
||||
import im.vector.riotredesign.core.di.HasInjector
|
||||
import im.vector.riotredesign.core.di.VectorComponent
|
||||
@ -42,7 +43,7 @@ import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
|
||||
class VectorApplication : Application(), HasInjector<VectorComponent> {
|
||||
class VectorApplication : Application(), HasInjector<VectorComponent>, MatrixConfiguration.Provider, androidx.work.Configuration.Provider {
|
||||
|
||||
lateinit var appContext: Context
|
||||
//font thread handler
|
||||
@ -67,8 +68,6 @@ class VectorApplication : Application(), HasInjector<VectorComponent> {
|
||||
BigImageViewer.initialize(GlideImageLoader.with(applicationContext))
|
||||
EpoxyController.defaultDiffingHandler = EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
||||
EpoxyController.defaultModelBuildingHandler = EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
||||
|
||||
Matrix.getInstance().setApplicationFlavor(BuildConfig.FLAVOR_DESCRIPTION)
|
||||
registerActivityLifecycleCallbacks(VectorActivityLifecycleCallbacks())
|
||||
val fontRequest = FontRequest(
|
||||
"com.google.android.gms.fonts",
|
||||
@ -80,6 +79,10 @@ class VectorApplication : Application(), HasInjector<VectorComponent> {
|
||||
vectorConfiguration.initConfiguration()
|
||||
}
|
||||
|
||||
override fun providesMatrixConfiguration() = MatrixConfiguration(BuildConfig.FLAVOR_DESCRIPTION)
|
||||
|
||||
override fun getWorkManagerConfiguration() = androidx.work.Configuration.Builder().build()
|
||||
|
||||
override fun injector(): VectorComponent {
|
||||
return vectorComponent
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import im.vector.fragments.keysbackup.restore.KeysBackupRestoreFromPassphraseFragment
|
||||
import im.vector.riotredesign.core.platform.SimpleFragmentActivity
|
||||
import im.vector.riotredesign.features.MainActivity
|
||||
import im.vector.riotredesign.features.crypto.keysbackup.restore.KeysBackupRestoreFromKeyFragment
|
||||
import im.vector.riotredesign.features.crypto.keysbackup.restore.KeysBackupRestoreSuccessFragment
|
||||
import im.vector.riotredesign.features.crypto.keysbackup.settings.KeysBackupSettingsFragment
|
||||
@ -40,6 +41,7 @@ import im.vector.riotredesign.features.home.room.detail.timeline.action.MessageM
|
||||
import im.vector.riotredesign.features.home.room.detail.timeline.action.QuickReactionFragment
|
||||
import im.vector.riotredesign.features.home.room.detail.timeline.action.ViewReactionBottomSheet
|
||||
import im.vector.riotredesign.features.home.room.list.RoomListFragment
|
||||
import im.vector.riotredesign.features.login.LoginActivity
|
||||
import im.vector.riotredesign.features.reactions.EmojiReactionPickerActivity
|
||||
import im.vector.riotredesign.features.roomdirectory.PublicRoomsFragment
|
||||
import im.vector.riotredesign.features.roomdirectory.createroom.CreateRoomFragment
|
||||
@ -66,7 +68,7 @@ interface ScreenComponent {
|
||||
fun inject(roomDirectoryPickerFragment: RoomDirectoryPickerFragment)
|
||||
|
||||
fun inject(roomPreviewNoPreviewFragment: RoomPreviewNoPreviewFragment)
|
||||
|
||||
|
||||
fun inject(keysBackupSettingsFragment: KeysBackupSettingsFragment)
|
||||
|
||||
fun inject(homeDrawerFragment: HomeDrawerFragment)
|
||||
@ -103,6 +105,10 @@ interface ScreenComponent {
|
||||
|
||||
fun inject(emojiReactionPickerActivity: EmojiReactionPickerActivity)
|
||||
|
||||
fun inject(loginActivity: LoginActivity)
|
||||
|
||||
fun inject(mainActivity: MainActivity)
|
||||
|
||||
|
||||
@Component.Factory
|
||||
interface Factory {
|
||||
|
@ -21,7 +21,9 @@ import android.content.res.Resources
|
||||
import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import im.vector.matrix.android.api.Matrix
|
||||
import im.vector.matrix.android.api.auth.Authenticator
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.riotredesign.EmojiCompatFontProvider
|
||||
import im.vector.riotredesign.VectorApplication
|
||||
import im.vector.riotredesign.features.configuration.VectorConfiguration
|
||||
import im.vector.riotredesign.features.crypto.keysrequest.KeyRequestHandler
|
||||
@ -49,6 +51,8 @@ interface VectorComponent {
|
||||
|
||||
fun vectorConfiguration(): VectorConfiguration
|
||||
|
||||
fun emojiCompatFontProvider(): EmojiCompatFontProvider
|
||||
|
||||
fun navigator(): Navigator
|
||||
|
||||
fun homeNavigator(): HomeNavigator
|
||||
@ -63,6 +67,8 @@ interface VectorComponent {
|
||||
|
||||
fun inject(vectorApplication: VectorApplication)
|
||||
|
||||
fun authenticator(): Authenticator
|
||||
|
||||
@Component.Factory
|
||||
interface Factory {
|
||||
fun create(@BindsInstance context: Context): VectorComponent
|
||||
|
@ -24,6 +24,7 @@ import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.api.Matrix
|
||||
import im.vector.matrix.android.api.auth.Authenticator
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.riotredesign.features.navigation.DefaultNavigator
|
||||
import im.vector.riotredesign.features.navigation.Navigator
|
||||
@ -48,8 +49,8 @@ abstract class VectorModule {
|
||||
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesMatrix(): Matrix {
|
||||
return Matrix.getInstance()
|
||||
fun providesMatrix(context: Context): Matrix {
|
||||
return Matrix.getInstance(context)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@ -58,6 +59,12 @@ abstract class VectorModule {
|
||||
//TODO: handle session injection better
|
||||
return matrix.currentSession!!
|
||||
}
|
||||
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesAuthenticator(matrix: Matrix): Authenticator{
|
||||
return matrix.authenticator()
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
|
@ -21,10 +21,13 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import im.vector.matrix.android.api.Matrix
|
||||
import im.vector.matrix.android.api.MatrixCallback
|
||||
import im.vector.matrix.android.api.auth.Authenticator
|
||||
import im.vector.riotredesign.core.di.ScreenComponent
|
||||
import im.vector.riotredesign.core.platform.VectorBaseActivity
|
||||
import im.vector.riotredesign.features.home.HomeActivity
|
||||
import im.vector.riotredesign.features.login.LoginActivity
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
|
||||
class MainActivity : VectorBaseActivity() {
|
||||
@ -44,16 +47,18 @@ class MainActivity : VectorBaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private val authenticator = Matrix.getInstance().authenticator()
|
||||
@Inject lateinit var matrix: Matrix
|
||||
@Inject lateinit var authenticator: Authenticator
|
||||
|
||||
override fun injectWith(injector: ScreenComponent) {
|
||||
injector.inject(this)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val session = Matrix.getInstance().currentSession
|
||||
|
||||
val clearCache = intent.getBooleanExtra(EXTRA_CLEAR_CACHE, false)
|
||||
val clearCredentials = intent.getBooleanExtra(EXTRA_CLEAR_CREDENTIALS, false)
|
||||
|
||||
val session = matrix.currentSession
|
||||
if (session == null) {
|
||||
start()
|
||||
} else {
|
||||
|
@ -44,7 +44,7 @@ class IncomingVerificationRequestHandler @Inject constructor(val context: Contex
|
||||
when (tx.state) {
|
||||
SasVerificationTxState.OnStarted -> {
|
||||
//Add a notification for every incoming request
|
||||
val session = Matrix.getInstance().currentSession!!
|
||||
val session = Matrix.getInstance(context).currentSession!!
|
||||
val name = session.getUser(tx.otherUserId)?.displayName
|
||||
?: tx.otherUserId
|
||||
|
||||
|
@ -20,7 +20,6 @@ import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.widget.ImageView
|
||||
import androidx.annotation.AnyThread
|
||||
import androidx.annotation.ColorRes
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.amulyakhare.textdrawable.TextDrawable
|
||||
@ -79,7 +78,7 @@ object AvatarRenderer {
|
||||
name
|
||||
}
|
||||
val placeholder = getPlaceholderDrawable(context, identifier, displayName)
|
||||
buildGlideRequest(glideRequest, avatarUrl)
|
||||
buildGlideRequest(context, glideRequest, avatarUrl)
|
||||
.placeholder(placeholder)
|
||||
.into(target)
|
||||
}
|
||||
@ -116,8 +115,8 @@ object AvatarRenderer {
|
||||
// return AVATAR_COLOR_LIST[colorIndex.toInt()]
|
||||
// }
|
||||
|
||||
private fun buildGlideRequest(glideRequest: GlideRequests, avatarUrl: String?): GlideRequest<Drawable> {
|
||||
val resolvedUrl = Matrix.getInstance().currentSession!!.contentUrlResolver()
|
||||
private fun buildGlideRequest(context: Context, glideRequest: GlideRequests, avatarUrl: String?): GlideRequest<Drawable> {
|
||||
val resolvedUrl = Matrix.getInstance(context).currentSession!!.contentUrlResolver()
|
||||
.resolveThumbnail(avatarUrl, THUMBNAIL_SIZE, THUMBNAIL_SIZE, ContentUrlResolver.ThumbnailMethod.SCALE)
|
||||
|
||||
return glideRequest
|
||||
|
@ -140,7 +140,7 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable {
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.sliding_menu_sign_out -> {
|
||||
SignOutUiWorker(this).perform(Matrix.getInstance().currentSession!!)
|
||||
SignOutUiWorker(this).perform(Matrix.getInstance(this).currentSession!!)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
@ -78,6 +78,11 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro
|
||||
val fragment: RoomDetailFragment = (viewModelContext as FragmentViewModelContext).fragment()
|
||||
return fragment.roomDetailViewModelFactory.create(state)
|
||||
}
|
||||
|
||||
override fun initialState(viewModelContext: ViewModelContext): RoomDetailViewState? {
|
||||
|
||||
return super.initialState(viewModelContext)
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
|
@ -36,7 +36,7 @@ object ContentUploadStateTrackerBinder {
|
||||
mediaData: ImageContentRenderer.Data,
|
||||
progressLayout: ViewGroup) {
|
||||
|
||||
Matrix.getInstance().currentSession?.also { session ->
|
||||
Matrix.getInstance(progressLayout.context).currentSession?.also { session ->
|
||||
val uploadStateTracker = session.contentUploadProgressTracker()
|
||||
val updateListener = ContentMediaProgressUpdater(progressLayout, mediaData)
|
||||
updateListeners[eventId] = updateListener
|
||||
@ -44,8 +44,8 @@ object ContentUploadStateTrackerBinder {
|
||||
}
|
||||
}
|
||||
|
||||
fun unbind(eventId: String) {
|
||||
Matrix.getInstance().currentSession?.also { session ->
|
||||
fun unbind(eventId: String, progressLayout: ViewGroup) {
|
||||
Matrix.getInstance(progressLayout.context).currentSession?.also { session ->
|
||||
val uploadStateTracker = session.contentUploadProgressTracker()
|
||||
updateListeners[eventId]?.also {
|
||||
uploadStateTracker.untrack(eventId, it)
|
||||
|
@ -17,8 +17,10 @@
|
||||
package im.vector.riotredesign.features.home.room.detail.timeline.helper
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import im.vector.riotredesign.core.di.ScreenScope
|
||||
import javax.inject.Inject
|
||||
|
||||
@ScreenScope
|
||||
class TimelineMediaSizeProvider @Inject constructor() {
|
||||
|
||||
lateinit var recyclerView: RecyclerView
|
||||
|
@ -50,7 +50,7 @@ abstract class MessageImageVideoItem : AbsMessageItem<MessageImageVideoItem.Hold
|
||||
}
|
||||
|
||||
override fun unbind(holder: Holder) {
|
||||
ContentUploadStateTrackerBinder.unbind(informationData.eventId)
|
||||
ContentUploadStateTrackerBinder.unbind(informationData.eventId, holder.progressLayout)
|
||||
super.unbind(holder)
|
||||
}
|
||||
|
||||
|
@ -25,10 +25,12 @@ import arrow.core.Try
|
||||
import com.jakewharton.rxbinding2.widget.RxTextView
|
||||
import im.vector.matrix.android.api.Matrix
|
||||
import im.vector.matrix.android.api.MatrixCallback
|
||||
import im.vector.matrix.android.api.auth.Authenticator
|
||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.session.sync.FilterService
|
||||
import im.vector.riotredesign.R
|
||||
import im.vector.riotredesign.core.di.ScreenComponent
|
||||
import im.vector.riotredesign.core.extensions.showPassword
|
||||
import im.vector.riotredesign.core.platform.VectorBaseActivity
|
||||
import im.vector.riotredesign.features.home.HomeActivity
|
||||
@ -36,6 +38,7 @@ import io.reactivex.Observable
|
||||
import io.reactivex.functions.Function3
|
||||
import io.reactivex.rxkotlin.subscribeBy
|
||||
import kotlinx.android.synthetic.main.activity_login.*
|
||||
import javax.inject.Inject
|
||||
|
||||
private const val DEFAULT_HOME_SERVER_URI = "https://matrix.org"
|
||||
private const val DEFAULT_IDENTITY_SERVER_URI = "https://vector.im"
|
||||
@ -43,10 +46,14 @@ private const val DEFAULT_ANTIVIRUS_SERVER_URI = "https://matrix.org"
|
||||
|
||||
class LoginActivity : VectorBaseActivity() {
|
||||
|
||||
private val authenticator = Matrix.getInstance().authenticator()
|
||||
@Inject lateinit var authenticator: Authenticator
|
||||
|
||||
private var passwordShown = false
|
||||
|
||||
override fun injectWith(injector: ScreenComponent) {
|
||||
injector.inject(this)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_login)
|
||||
@ -71,7 +78,7 @@ class LoginActivity : VectorBaseActivity() {
|
||||
progressBar.visibility = View.VISIBLE
|
||||
authenticator.authenticate(homeServerConnectionConfig, login, password, object : MatrixCallback<Session> {
|
||||
override fun onSuccess(data: Session) {
|
||||
Matrix.getInstance().currentSession = data
|
||||
Matrix.getInstance(this@LoginActivity).currentSession = data
|
||||
data.open()
|
||||
data.setFilter(FilterService.FilterPreset.RiotFilter)
|
||||
data.startSync()
|
||||
|
@ -57,7 +57,7 @@ object ImageContentRenderer {
|
||||
val (width, height) = processSize(data, mode)
|
||||
imageView.layoutParams.height = height
|
||||
imageView.layoutParams.width = width
|
||||
val contentUrlResolver = Matrix.getInstance().currentSession!!.contentUrlResolver()
|
||||
val contentUrlResolver = Matrix.getInstance(imageView.context).currentSession!!.contentUrlResolver()
|
||||
val resolvedUrl = when (mode) {
|
||||
Mode.FULL_SIZE -> contentUrlResolver.resolveFullSize(data.url)
|
||||
Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE)
|
||||
@ -76,7 +76,7 @@ object ImageContentRenderer {
|
||||
|
||||
fun render(data: Data, imageView: BigImageView) {
|
||||
val (width, height) = processSize(data, Mode.THUMBNAIL)
|
||||
val contentUrlResolver = Matrix.getInstance().currentSession!!.contentUrlResolver()
|
||||
val contentUrlResolver = Matrix.getInstance(imageView.context).currentSession!!.contentUrlResolver()
|
||||
val fullSize = contentUrlResolver.resolveFullSize(data.url)
|
||||
val thumbnail = contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE)
|
||||
imageView.showImage(
|
||||
|
@ -32,7 +32,7 @@ object VideoContentRenderer {
|
||||
) : Parcelable
|
||||
|
||||
fun render(data: Data, thumbnailView: ImageView, videoView: VideoView) {
|
||||
val contentUrlResolver = Matrix.getInstance().currentSession!!.contentUrlResolver()
|
||||
val contentUrlResolver = Matrix.getInstance(videoView.context).currentSession!!.contentUrlResolver()
|
||||
val resolvedUrl = contentUrlResolver.resolveFullSize(data.videoUrl)
|
||||
videoView.setVideoPath(resolvedUrl)
|
||||
videoView.start()
|
||||
|
@ -195,7 +195,7 @@ object BugReporter {
|
||||
var matrixSdkVersion = "undefined"
|
||||
var olmVersion = "undefined"
|
||||
|
||||
Matrix.getInstance().currentSession?.let { session ->
|
||||
Matrix.getInstance(context).currentSession?.let { session ->
|
||||
userId = session.sessionParams.credentials.userId
|
||||
deviceId = session.sessionParams.credentials.deviceId ?: "undefined"
|
||||
// TODO matrixSdkVersion = session.getVersion(true);
|
||||
@ -207,7 +207,7 @@ object BugReporter {
|
||||
val builder = BugReporterMultipartBody.Builder()
|
||||
.addFormDataPart("text", "[RiotX] $bugDescription")
|
||||
.addFormDataPart("app", "riot-android")
|
||||
.addFormDataPart("user_agent", Matrix.getInstance().getUserAgent())
|
||||
.addFormDataPart("user_agent", Matrix.getInstance(context).getUserAgent())
|
||||
.addFormDataPart("user_id", userId)
|
||||
.addFormDataPart("device_id", deviceId)
|
||||
// TODO .addFormDataPart("version", Matrix.getInstance(context).getVersion(true, false))
|
||||
|
Reference in New Issue
Block a user