Commit ddabe6c6 authored by Eugene Shapovalov's avatar Eugene Shapovalov 💬

Merge remote-tracking branch 'remotes/origin/develop' into feature/project_file_code_highlight

# Conflicts:
#	app/src/main/java/ru/terrakok/gitlabclient/Screens.kt
#	app/src/main/java/ru/terrakok/gitlabclient/presentation/mergerequest/changes/MergeRequestChangesPresenter.kt
#	app/src/main/java/ru/terrakok/gitlabclient/presentation/project/files/ProjectFilesPresenter.kt
#	app/src/main/java/ru/terrakok/gitlabclient/ui/global/list/MergeRequestChangeAdapterDelegate.kt
#	app/src/main/java/ru/terrakok/gitlabclient/ui/mergerequest/MergeRequestChangesFragment.kt
parents 34608120 7b253f8a
plugins { plugins {
id("com.android.application") id("com.android.application")
id("io.fabric") id("io.fabric")
id("org.jetbrains.kotlin.android.extensions")
kotlin("android") kotlin("android")
kotlin("kapt") kotlin("kapt")
id("org.jetbrains.kotlin.android.extensions")
} }
val buildUid = System.getenv("BUILD_COMMIT_SHA") ?: "local" val buildUid = System.getenv("BUILD_COMMIT_SHA") ?: "local"
...@@ -49,14 +49,6 @@ android { ...@@ -49,14 +49,6 @@ android {
buildConfigField("String", "OAUTH_CALLBACK", "\"app://gitlab.client/\"") buildConfigField("String", "OAUTH_CALLBACK", "\"app://gitlab.client/\"")
multiDexEnabled = true multiDexEnabled = true
javaCompileOptions {
annotationProcessorOptions {
arguments = mapOf(
"toothpick_registry_package_name" to "ru.terrakok.gitlabclient"
)
}
}
} }
signingConfigs { signingConfigs {
...@@ -94,27 +86,27 @@ android { ...@@ -94,27 +86,27 @@ android {
} }
dependencies { dependencies {
val supportLibraryVersion = "28.0.0" val moxyVersion = "1.7.0"
val moxyVersion = "1.4.6" val toothpickVersion = "2.1.0"
val toothpickVersion = "1.0.6"
val retrofitVersion = "2.2.0" val retrofitVersion = "2.2.0"
val markwonVersion = "2.0.0" val markwonVersion = "2.0.0"
val glideVersion = "4.8.0" val glideVersion = "4.8.0"
//Support //Support
implementation("com.android.support:appcompat-v7:$supportLibraryVersion") implementation("androidx.appcompat:appcompat:1.0.2")
implementation("com.android.support:design:$supportLibraryVersion") implementation("com.google.android.material:material:1.1.0-alpha06")
implementation("com.android.support:cardview-v7:$supportLibraryVersion") implementation("androidx.cardview:cardview:1.0.0")
implementation("com.android.support.constraint:constraint-layout:1.1.3") implementation("androidx.constraintlayout:constraintlayout:1.1.3")
//Kotlin //Kotlin
implementation("org.jetbrains.kotlin:kotlin-stdlib:${extra["kotlinVersion"] as String}") implementation("org.jetbrains.kotlin:kotlin-stdlib:${extra["kotlinVersion"] as String}")
//Log //Log
implementation("com.jakewharton.timber:timber:4.7.0") implementation("com.jakewharton.timber:timber:4.7.0")
//MVP Moxy //MVP Moxy
kapt("com.arello-mobile:moxy-compiler:$moxyVersion") kapt("tech.schoolhelper:moxy-x-compiler:$moxyVersion")
implementation("com.arello-mobile:moxy-app-compat:$moxyVersion") implementation("tech.schoolhelper:moxy-x:$moxyVersion")
implementation("tech.schoolhelper:moxy-x-androidx:$moxyVersion")
//Cicerone Navigation //Cicerone Navigation
implementation("ru.terrakok.cicerone:cicerone:4.0.2") implementation("ru.terrakok.cicerone:cicerone:5.0.0")
//DI //DI
implementation("com.github.stephanenicolas.toothpick:toothpick-runtime:$toothpickVersion") implementation("com.github.stephanenicolas.toothpick:toothpick-runtime:$toothpickVersion")
kapt("com.github.stephanenicolas.toothpick:toothpick-compiler:$toothpickVersion") kapt("com.github.stephanenicolas.toothpick:toothpick-compiler:$toothpickVersion")
...@@ -130,7 +122,7 @@ dependencies { ...@@ -130,7 +122,7 @@ dependencies {
implementation("io.reactivex.rxjava2:rxjava:2.2.6") implementation("io.reactivex.rxjava2:rxjava:2.2.6")
implementation("com.jakewharton.rxrelay2:rxrelay:2.1.0") implementation("com.jakewharton.rxrelay2:rxrelay:2.1.0")
//Adapter simplify //Adapter simplify
implementation("com.hannesdorfmann:adapterdelegates3:3.1.0") implementation("com.hannesdorfmann:adapterdelegates4:4.0.0")
//Image load and cache //Image load and cache
implementation("com.github.bumptech.glide:glide:$glideVersion") implementation("com.github.bumptech.glide:glide:$glideVersion")
kapt("com.github.bumptech.glide:compiler:$glideVersion") kapt("com.github.bumptech.glide:compiler:$glideVersion")
......
...@@ -7,14 +7,11 @@ import com.jakewharton.threetenabp.AndroidThreeTen ...@@ -7,14 +7,11 @@ import com.jakewharton.threetenabp.AndroidThreeTen
import io.fabric.sdk.android.Fabric import io.fabric.sdk.android.Fabric
import ru.noties.markwon.SpannableConfiguration import ru.noties.markwon.SpannableConfiguration
import ru.noties.markwon.spans.SpannableTheme import ru.noties.markwon.spans.SpannableTheme
import ru.terrakok.gitlabclient.toothpick.DI import ru.terrakok.gitlabclient.di.DI
import ru.terrakok.gitlabclient.toothpick.module.AppModule import ru.terrakok.gitlabclient.di.module.AppModule
import timber.log.Timber import timber.log.Timber
import toothpick.Toothpick import toothpick.Toothpick
import toothpick.configuration.Configuration import toothpick.configuration.Configuration
import toothpick.registries.FactoryRegistryLocator
import toothpick.registries.MemberInjectorRegistryLocator
import java.util.*
/** /**
* @author Konstantin Tskhovrebov (aka terrakok) on 26.03.17. * @author Konstantin Tskhovrebov (aka terrakok) on 26.03.17.
...@@ -23,7 +20,6 @@ class App : Application() { ...@@ -23,7 +20,6 @@ class App : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
appCode = UUID.randomUUID().toString()
initLogger() initLogger()
initFabric() initFabric()
...@@ -53,9 +49,7 @@ class App : Application() { ...@@ -53,9 +49,7 @@ class App : Application() {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Toothpick.setConfiguration(Configuration.forDevelopment().preventMultipleRootScopes()) Toothpick.setConfiguration(Configuration.forDevelopment().preventMultipleRootScopes())
} else { } else {
Toothpick.setConfiguration(Configuration.forProduction().disableReflection()) Toothpick.setConfiguration(Configuration.forProduction())
FactoryRegistryLocator.setRootRegistry(ru.terrakok.gitlabclient.FactoryRegistry())
MemberInjectorRegistryLocator.setRootRegistry(ru.terrakok.gitlabclient.MemberInjectorRegistry())
} }
} }
...@@ -77,9 +71,4 @@ class App : Application() { ...@@ -77,9 +71,4 @@ class App : Application() {
private fun initThreetenABP() { private fun initThreetenABP() {
AndroidThreeTen.init(this) AndroidThreeTen.init(this)
} }
companion object {
lateinit var appCode: String
private set
}
} }
\ No newline at end of file
...@@ -14,11 +14,11 @@ import ru.terrakok.gitlabclient.ui.drawer.DrawerFlowFragment ...@@ -14,11 +14,11 @@ import ru.terrakok.gitlabclient.ui.drawer.DrawerFlowFragment
import ru.terrakok.gitlabclient.ui.file.ProjectFileFragment import ru.terrakok.gitlabclient.ui.file.ProjectFileFragment
import ru.terrakok.gitlabclient.ui.global.StubFragment import ru.terrakok.gitlabclient.ui.global.StubFragment
import ru.terrakok.gitlabclient.ui.issue.IssueFlowFragment import ru.terrakok.gitlabclient.ui.issue.IssueFlowFragment
import ru.terrakok.gitlabclient.ui.issue.IssueFragment
import ru.terrakok.gitlabclient.ui.issue.IssueInfoFragment import ru.terrakok.gitlabclient.ui.issue.IssueInfoFragment
import ru.terrakok.gitlabclient.ui.issue.IssueNotesFragment import ru.terrakok.gitlabclient.ui.issue.IssueNotesFragment
import ru.terrakok.gitlabclient.ui.issue.MainIssueFragment
import ru.terrakok.gitlabclient.ui.libraries.LibrariesFragment import ru.terrakok.gitlabclient.ui.libraries.LibrariesFragment
import ru.terrakok.gitlabclient.ui.main.MainFlowFragment import ru.terrakok.gitlabclient.ui.main.MainFragment
import ru.terrakok.gitlabclient.ui.mergerequest.* import ru.terrakok.gitlabclient.ui.mergerequest.*
import ru.terrakok.gitlabclient.ui.my.activity.MyEventsFragment import ru.terrakok.gitlabclient.ui.my.activity.MyEventsFragment
import ru.terrakok.gitlabclient.ui.my.issues.MyIssuesContainerFragment import ru.terrakok.gitlabclient.ui.my.issues.MyIssuesContainerFragment
...@@ -28,8 +28,8 @@ import ru.terrakok.gitlabclient.ui.my.mergerequests.MyMergeRequestsFragment ...@@ -28,8 +28,8 @@ import ru.terrakok.gitlabclient.ui.my.mergerequests.MyMergeRequestsFragment
import ru.terrakok.gitlabclient.ui.my.todos.MyTodosContainerFragment import ru.terrakok.gitlabclient.ui.my.todos.MyTodosContainerFragment
import ru.terrakok.gitlabclient.ui.my.todos.MyTodosFragment import ru.terrakok.gitlabclient.ui.my.todos.MyTodosFragment
import ru.terrakok.gitlabclient.ui.privacypolicy.PrivacyPolicyFragment import ru.terrakok.gitlabclient.ui.privacypolicy.PrivacyPolicyFragment
import ru.terrakok.gitlabclient.ui.project.MainProjectFragment
import ru.terrakok.gitlabclient.ui.project.ProjectFlowFragment import ru.terrakok.gitlabclient.ui.project.ProjectFlowFragment
import ru.terrakok.gitlabclient.ui.project.ProjectFragment
import ru.terrakok.gitlabclient.ui.project.files.ProjectFilesFragment import ru.terrakok.gitlabclient.ui.project.files.ProjectFilesFragment
import ru.terrakok.gitlabclient.ui.project.info.ProjectEventsFragment import ru.terrakok.gitlabclient.ui.project.info.ProjectEventsFragment
import ru.terrakok.gitlabclient.ui.project.info.ProjectInfoContainerFragment import ru.terrakok.gitlabclient.ui.project.info.ProjectInfoContainerFragment
...@@ -50,12 +50,45 @@ import ru.terrakok.gitlabclient.ui.user.info.UserInfoFragment ...@@ -50,12 +50,45 @@ import ru.terrakok.gitlabclient.ui.user.info.UserInfoFragment
* @author Konstantin Tskhovrebov (aka terrakok) on 26.03.17. * @author Konstantin Tskhovrebov (aka terrakok) on 26.03.17.
*/ */
object Screens { object Screens {
//flows
object AuthFlow : SupportAppScreen() {
override fun getFragment() = AuthFlowFragment()
}
object DrawerFlow : SupportAppScreen() { object DrawerFlow : SupportAppScreen() {
override fun getFragment() = DrawerFlowFragment() override fun getFragment() = DrawerFlowFragment()
} }
object MainFlow : SupportAppScreen() { data class ProjectFlow(
override fun getFragment() = MainFlowFragment() val projectId: Long
) : SupportAppScreen() {
override fun getFragment() = ProjectFlowFragment.create(projectId)
}
data class UserFlow(
val userId: Long
) : SupportAppScreen() {
override fun getFragment() = UserFlowFragment.create(userId)
}
data class IssueFlow(
val projectId: Long,
val issueId: Long
) : SupportAppScreen() {
override fun getFragment() = IssueFlowFragment.create(projectId, issueId)
}
data class MergeRequestFlow(
val projectId: Long,
val mrId: Long
) : SupportAppScreen() {
override fun getFragment() = MergeRequestFlowFragment.create(projectId, mrId)
}
//screens
object Main : SupportAppScreen() {
override fun getFragment() = MainFragment()
} }
object MyEvents : SupportAppScreen() { object MyEvents : SupportAppScreen() {
...@@ -112,22 +145,12 @@ object Screens { ...@@ -112,22 +145,12 @@ object Screens {
override fun getFragment() = LibrariesFragment() override fun getFragment() = LibrariesFragment()
} }
object AuthFlow : SupportAppScreen() {
override fun getFragment() = AuthFlowFragment()
}
object Auth : SupportAppScreen() { object Auth : SupportAppScreen() {
override fun getFragment() = AuthFragment() override fun getFragment() = AuthFragment()
} }
data class ProjectFlow( object MainProject : SupportAppScreen() {
val projectId: Long override fun getFragment() = MainProjectFragment()
) : SupportAppScreen() {
override fun getFragment() = ProjectFlowFragment.create(projectId)
}
object ProjectMainFlow : SupportAppScreen() {
override fun getFragment() = ProjectFragment()
} }
object ProjectInfoContainer : SupportAppScreen() { object ProjectInfoContainer : SupportAppScreen() {
...@@ -180,25 +203,12 @@ object Screens { ...@@ -180,25 +203,12 @@ object Screens {
override fun getFragment() = ProjectFilesFragment() override fun getFragment() = ProjectFilesFragment()
} }
data class UserFlow(
val userId: Long
) : SupportAppScreen() {
override fun getFragment() = UserFlowFragment.create(userId)
}
object UserInfo : SupportAppScreen() { object UserInfo : SupportAppScreen() {
override fun getFragment() = UserInfoFragment() override fun getFragment() = UserInfoFragment()
} }
data class MergeRequestFlow( object MainMergeRequest : SupportAppScreen() {
val projectId: Long, override fun getFragment() = MainMergeRequestFragment()
val mrId: Long
) : SupportAppScreen() {
override fun getFragment() = MergeRequestFlowFragment.create(projectId, mrId)
}
object MergeRequest : SupportAppScreen() {
override fun getFragment() = MergeRequestFragment()
} }
object MergeRequestInfo : SupportAppScreen() { object MergeRequestInfo : SupportAppScreen() {
...@@ -217,15 +227,8 @@ object Screens { ...@@ -217,15 +227,8 @@ object Screens {
override fun getFragment() = MergeRequestChangesFragment() override fun getFragment() = MergeRequestChangesFragment()
} }
data class IssueFlow( object MainIssue : SupportAppScreen() {
val projectId: Long, override fun getFragment() = MainIssueFragment()
val issueId: Long
) : SupportAppScreen() {
override fun getFragment() = IssueFlowFragment.create(projectId, issueId)
}
object Issue : SupportAppScreen() {
override fun getFragment() = IssueFragment()
} }
object IssueInfo : SupportAppScreen() { object IssueInfo : SupportAppScreen() {
...@@ -248,30 +251,11 @@ object Screens { ...@@ -248,30 +251,11 @@ object Screens {
override fun getFragment() = ProjectFileFragment.create(projectId, filePath, fileReference) override fun getFragment() = ProjectFileFragment.create(projectId, filePath, fileReference)
} }
//external flows
data class ExternalBrowserFlow( data class ExternalBrowserFlow(
val url: String val url: String
) : SupportAppScreen() { ) : SupportAppScreen() {
override fun getActivityIntent(context: Context?) = override fun getActivityIntent(context: Context?) =
Intent(Intent.ACTION_VIEW, Uri.parse(url)) Intent(Intent.ACTION_VIEW, Uri.parse(url))
} }
data class ShareFlow(
val text: String
) : SupportAppScreen() {
override fun getActivityIntent(context: Context?) =
Intent.createChooser(
Intent(Intent.ACTION_SEND).apply {
putExtra(Intent.EXTRA_TEXT, text)
type = "text/plain"
},
text
)
}
data class MilestoneFlow(
val milestoneId: Long
) : SupportAppScreen() {
//todo: implement milestone flow.
override fun getFragment() = StubFragment()
}
} }
\ No newline at end of file
package ru.terrakok.gitlabclient.toothpick package ru.terrakok.gitlabclient.di
/** /**
* @author Konstantin Tskhovrebov (aka terrakok) on 09.07.17. * @author Konstantin Tskhovrebov (aka terrakok) on 09.07.17.
......
package ru.terrakok.gitlabclient.toothpick package ru.terrakok.gitlabclient.di
/** /**
* @author Konstantin Tskhovrebov (aka terrakok) on 09.07.17. * @author Konstantin Tskhovrebov (aka terrakok) on 09.07.17.
......
package ru.terrakok.gitlabclient.toothpick.module package ru.terrakok.gitlabclient.di.module
import android.content.Context import android.content.Context
import android.content.res.AssetManager import android.content.res.AssetManager
...@@ -7,6 +7,8 @@ import ru.terrakok.cicerone.Cicerone ...@@ -7,6 +7,8 @@ import ru.terrakok.cicerone.Cicerone
import ru.terrakok.cicerone.NavigatorHolder import ru.terrakok.cicerone.NavigatorHolder
import ru.terrakok.cicerone.Router import ru.terrakok.cicerone.Router
import ru.terrakok.gitlabclient.BuildConfig import ru.terrakok.gitlabclient.BuildConfig
import ru.terrakok.gitlabclient.di.*
import ru.terrakok.gitlabclient.di.provider.GsonProvider
import ru.terrakok.gitlabclient.entity.app.develop.AppInfo import ru.terrakok.gitlabclient.entity.app.develop.AppInfo
import ru.terrakok.gitlabclient.model.data.storage.RawAppData import ru.terrakok.gitlabclient.model.data.storage.RawAppData
import ru.terrakok.gitlabclient.model.interactor.app.AppInfoInteractor import ru.terrakok.gitlabclient.model.interactor.app.AppInfoInteractor
...@@ -18,12 +20,6 @@ import ru.terrakok.gitlabclient.model.system.ResourceManager ...@@ -18,12 +20,6 @@ import ru.terrakok.gitlabclient.model.system.ResourceManager
import ru.terrakok.gitlabclient.model.system.SchedulersProvider import ru.terrakok.gitlabclient.model.system.SchedulersProvider
import ru.terrakok.gitlabclient.model.system.message.SystemMessageNotifier import ru.terrakok.gitlabclient.model.system.message.SystemMessageNotifier
import ru.terrakok.gitlabclient.presentation.AppLauncher import ru.terrakok.gitlabclient.presentation.AppLauncher
import ru.terrakok.gitlabclient.toothpick.PrimitiveWrapper
import ru.terrakok.gitlabclient.toothpick.provider.GsonProvider
import ru.terrakok.gitlabclient.toothpick.qualifier.AppDevelopersPath
import ru.terrakok.gitlabclient.toothpick.qualifier.CacheLifetime
import ru.terrakok.gitlabclient.toothpick.qualifier.DefaultPageSize
import ru.terrakok.gitlabclient.toothpick.qualifier.DefaultServerPath
import toothpick.config.Module import toothpick.config.Module
/** /**
......
package ru.terrakok.gitlabclient.toothpick.module package ru.terrakok.gitlabclient.di.module
import ru.terrakok.cicerone.Cicerone import ru.terrakok.cicerone.Cicerone
import ru.terrakok.cicerone.NavigatorHolder import ru.terrakok.cicerone.NavigatorHolder
......
package ru.terrakok.gitlabclient.toothpick.module package ru.terrakok.gitlabclient.di.module
import ru.terrakok.gitlabclient.presentation.global.GlobalMenuController import ru.terrakok.gitlabclient.presentation.global.GlobalMenuController
import toothpick.config.Module import toothpick.config.Module
......
package ru.terrakok.gitlabclient.toothpick.module package ru.terrakok.gitlabclient.di.module
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import ru.terrakok.gitlabclient.BuildConfig import ru.terrakok.gitlabclient.BuildConfig
import ru.terrakok.gitlabclient.di.ServerPath
import ru.terrakok.gitlabclient.di.WithErrorHandler
import ru.terrakok.gitlabclient.di.provider.ApiProvider
import ru.terrakok.gitlabclient.di.provider.MarkDownConverterProvider
import ru.terrakok.gitlabclient.di.provider.OkHttpClientProvider
import ru.terrakok.gitlabclient.di.provider.OkHttpClientWithErrorHandlerProvider
import ru.terrakok.gitlabclient.entity.app.session.AuthHolder import ru.terrakok.gitlabclient.entity.app.session.AuthHolder
import ru.terrakok.gitlabclient.entity.app.session.OAuthParams import ru.terrakok.gitlabclient.entity.app.session.OAuthParams
import ru.terrakok.gitlabclient.entity.app.session.UserAccount import ru.terrakok.gitlabclient.entity.app.session.UserAccount
...@@ -25,12 +31,6 @@ import ru.terrakok.gitlabclient.model.repository.todo.TodoRepository ...@@ -25,12 +31,6 @@ import ru.terrakok.gitlabclient.model.repository.todo.TodoRepository
import ru.terrakok.gitlabclient.model.repository.user.UserRepository import ru.terrakok.gitlabclient.model.repository.user.UserRepository
import ru.terrakok.gitlabclient.presentation.global.ErrorHandler import ru.terrakok.gitlabclient.presentation.global.ErrorHandler
import ru.terrakok.gitlabclient.presentation.global.MarkDownConverter import ru.terrakok.gitlabclient.presentation.global.MarkDownConverter
import ru.terrakok.gitlabclient.toothpick.provider.ApiProvider
import ru.terrakok.gitlabclient.toothpick.provider.MarkDownConverterProvider
import ru.terrakok.gitlabclient.toothpick.provider.OkHttpClientProvider
import ru.terrakok.gitlabclient.toothpick.provider.OkHttpClientWithErrorHandlerProvider
import ru.terrakok.gitlabclient.toothpick.qualifier.ServerPath
import ru.terrakok.gitlabclient.toothpick.qualifier.WithErrorHandler
import toothpick.config.Module import toothpick.config.Module
/** /**
......
package ru.terrakok.gitlabclient.toothpick.provider package ru.terrakok.gitlabclient.di.provider
import com.google.gson.Gson import com.google.gson.Gson
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import ru.terrakok.gitlabclient.di.ServerPath
import ru.terrakok.gitlabclient.di.WithErrorHandler
import ru.terrakok.gitlabclient.model.data.cache.ProjectCache import ru.terrakok.gitlabclient.model.data.cache.ProjectCache
import ru.terrakok.gitlabclient.model.data.server.ApiWithCache import ru.terrakok.gitlabclient.model.data.server.ApiWithCache
import ru.terrakok.gitlabclient.model.data.server.GitlabApi import ru.terrakok.gitlabclient.model.data.server.GitlabApi
import ru.terrakok.gitlabclient.toothpick.qualifier.ServerPath
import ru.terrakok.gitlabclient.toothpick.qualifier.WithErrorHandler
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
......
package ru.terrakok.gitlabclient.toothpick.provider package ru.terrakok.gitlabclient.di.provider
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
......
package ru.terrakok.gitlabclient.toothpick.provider package ru.terrakok.gitlabclient.di.provider
import android.content.Context import android.content.Context
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
...@@ -7,10 +7,10 @@ import ru.noties.markwon.UrlProcessorRelativeToAbsolute ...@@ -7,10 +7,10 @@ import ru.noties.markwon.UrlProcessorRelativeToAbsolute
import ru.noties.markwon.il.AsyncDrawableLoader import ru.noties.markwon.il.AsyncDrawableLoader
import ru.noties.markwon.spans.SpannableTheme import ru.noties.markwon.spans.SpannableTheme
import ru.terrakok.gitlabclient.R import ru.terrakok.gitlabclient.R
import ru.terrakok.gitlabclient.di.DefaultServerPath
import ru.terrakok.gitlabclient.extension.color import ru.terrakok.gitlabclient.extension.color
import ru.terrakok.gitlabclient.model.system.SchedulersProvider import ru.terrakok.gitlabclient.model.system.SchedulersProvider
import ru.terrakok.gitlabclient.presentation.global.MarkDownConverter import ru.terrakok.gitlabclient.presentation.global.MarkDownConverter
import ru.terrakok.gitlabclient.toothpick.qualifier.DefaultServerPath
import java.util.concurrent.Executors import java.util.concurrent.Executors
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
......
package ru.terrakok.gitlabclient.toothpick.provider package ru.terrakok.gitlabclient.di.provider
import android.content.Context import android.content.Context
import okhttp3.Cache import okhttp3.Cache
......
package ru.terrakok.gitlabclient.toothpick.provider package ru.terrakok.gitlabclient.di.provider
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import ru.terrakok.gitlabclient.model.data.server.interceptor.ErrorResponseInterceptor import ru.terrakok.gitlabclient.model.data.server.interceptor.ErrorResponseInterceptor
......
package ru.terrakok.gitlabclient.toothpick.qualifier package ru.terrakok.gitlabclient.di
import javax.inject.Qualifier import javax.inject.Qualifier
......
...@@ -7,5 +7,6 @@ enum class TargetBadgeIcon { ...@@ -7,5 +7,6 @@ enum class TargetBadgeIcon {
COMMENTS, COMMENTS,
UP_VOTES, UP_VOTES,
DOWN_VOTES, DOWN_VOTES,
COMMITS; COMMITS,
RELATED_MERGE_REQUESTS;
} }
\ No newline at end of file
...@@ -29,5 +29,7 @@ data class Issue( ...@@ -29,5 +29,7 @@ data class Issue(
// This value will only be present for issues which were closed after GitLab 10.6 and // This value will only be present for issues which were closed after GitLab 10.6 and
// when the user account that closed the issue still exists. // when the user account that closed the issue still exists.
@SerializedName("closed_by") val closedBy: Author?, @SerializedName("closed_by") val closedBy: Author?,
@SerializedName("closed_at") val closedAt: LocalDateTime? @SerializedName("closed_at") val closedAt: LocalDateTime?,
// The merge_requests_count attribute was introduced in GitLab 11.9.
@SerializedName("merge_requests_count") val relatedMergeRequestCount: Int
) )
\ No newline at end of file
...@@ -26,7 +26,7 @@ class MergeRequest : Target() { ...@@ -26,7 +26,7 @@ class MergeRequest : Target() {
@SerializedName("merge_commit_sha") @SerializedName("merge_commit_sha")
val mergeCommitSha: String? = null