Skip to content

Instantly share code, notes, and snippets.

View ntngel1's full-sized avatar
🌻
Chilling

Kirill Shepelev ntngel1

🌻
Chilling
  • Kinoplan
  • Rostov-on-Don, Russia
View GitHub Profile
@ntngel1
ntngel1 / User.kt
Created February 20, 2019 14:49
What to do?
interface UserGateway {
/*
Может вернуть response code 201, 400 или 404.
201 - все отлично, создали нового пользователя, нам возвращается UserModel созданого пользователя
400 - все хреново, возвращается обычный String с ошибкой
404 - все хреново, тоже возвращается String
Так вот, как все это обобщить?
Возвращать Single<Any> или Single<UserModel>??? Или что-то другое?
*/
@ntngel1
ntngel1 / task.kt
Last active February 27, 2019 13:27
// Задача состоит в том, чтобы получать через даггер одну и тот же фрагмент, но с презентером,
// у которого разные аргументы в конструкторе
@Module
class PhotosViewModule {
@Provides
@Named("PopularPhotos")
fun providePopularPhotosView(): PhotosView.View {
val fragment: Photos.View = PhotosFragment()
// Здесь бы должны как-то заинжектить вручную Presenter с определенными аргументами в конструкторе
fragment.inject(PhotosPresenter(popular = true, new = false))
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services'
// Top-level build file where you can add configuration options common to all sub-projects/modules.
ext {
rxJava = '2.2.6'
rxAndroid = '2.1.1'
retrofit = '2.5.0'
retrofitRx = '2.5.0'
retrofitGson = '2.5.0'
loggingInterceptor = '3.12.1'
threeTenABP = '1.1.2'
override fun getEcgListWithOffset(offset: Int): Single<DeviceEcgList> {
val request = ru.cardiomarker.p1.rpc.ecg.list.Request.newBuilder()
.addLeads(Lead.II)
.addLeads(Lead.CM5)
.apply {
if (offset != 0) {
setOffset(offset)
}
}
.build()
override fun getAntropometricData(): Single<AnthropometricModel> = Single.create { emitter ->
val weightDataType = DataType.TYPE_WEIGHT
val heightDataType = DataType.TYPE_HEIGHT
val weightSubscription = Fitness.getRecordingClient(context, account)
.subscribe(weightDataType)
Tasks.await(weightSubscription)
val heightSubscription = Fitness.getRecordingClient(context, account)
abstract class UseCase <in P, out T> {
abstract fun execute(param: P): T
}
class FooUseCase : UseCase<Unit, Unit>() {
override fun execute(param: Unit) {
}
}
@InjectViewState
class MainPresenter : MvpPresenter<MainView>() {
private val uploadFragment = UploadFragment.newInstance().apply {
// Задаем callback на нажатие кнопки Show после загрузки фото
onShowPhoto = { photoModel ->
viewState.openScreen(newPhotosFragment)
currentFragment = newPhotosFragment
viewState.setNavigationSelection(R.id.navigation_new)
newPhotosFragment.presenter.onHighlightPhoto(photoModel)
}
interface FragmentTransactionHandler {
// withBackstack - логично, закинуть в стэк фрагментов, immediately - ждать пока фрагмент полностью не откроется
fun openFragment(fragment: Fragment, withBackstack: Boolean = false, immediately: Boolean = false)
}
interface MainView : MvpView, FragmentTransactionHandler {
@StateStrategyType(OneExecutionStateStrategy::class)
override fun openFragment(fragment: Fragment, withBackstack: Boolean = false, immediately: Boolean = false)
val clas = KotlinClass(
name = "Kek",
modifiers = arrayListOf("open", "internal", "private"),
annotations = arrayListOf(
KotlinAnnotation(name = "WithoutArgs"),
KotlinAnnotation(name = "WithArgs", arguments = arrayListOf(
KotlinArgument(value = "someValue"), KotlinArgument(parameterName = "someName", value = "someValue")
))
),
classInheritance = KotlinClassInheritance(className = "SomeClass", arguments = arrayListOf(