Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Room Park Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vladislav Bogdashkin
Room Park Android
Commits
d8e14f50
Commit
d8e14f50
authored
Oct 10, 2019
by
Vladislav Bogdashkin
🎣
Browse files
Options
Browse Files
Download
Plain Diff
Base MVI pipeline developed and tested
parents
2bcdb6fa
aa875bfc
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
583 additions
and
55 deletions
+583
-55
build.gradle
app/build.gradle
+6
-0
RoomParkApplication.kt
...a/com/biganto/visual/roompark/base/RoomParkApplication.kt
+13
-3
RoomParkMainActivity.kt
.../com/biganto/visual/roompark/base/RoomParkMainActivity.kt
+21
-10
BigantoBaseController.kt
...iganto/visual/roompark/conductor/BigantoBaseController.kt
+22
-13
ActivityModule.kt
...a/com/biganto/visual/roompark/di/dagger/ActivityModule.kt
+9
-6
AppComponent.kt
...ava/com/biganto/visual/roompark/di/dagger/AppComponent.kt
+7
-7
ContextModule.kt
...va/com/biganto/visual/roompark/di/dagger/ContextModule.kt
+20
-0
PerScreen.kt
...n/java/com/biganto/visual/roompark/di/dagger/PerScreen.kt
+6
-1
auth.kt
...ava/com/biganto/visual/roompark/domain/interactor/auth.kt
+17
-0
splash.kt
...a/com/biganto/visual/roompark/domain/interactor/splash.kt
+14
-0
authUseCase.kt
...om/biganto/visual/roompark/domain/use_case/authUseCase.kt
+8
-4
ScreenContract.kt
...isual/roompark/presentation/screen/auth/ScreenContract.kt
+14
-0
ScreenController.kt
...ual/roompark/presentation/screen/auth/ScreenController.kt
+104
-0
ScreenDI.kt
...anto/visual/roompark/presentation/screen/auth/ScreenDI.kt
+44
-0
ScreenPresenter.kt
...sual/roompark/presentation/screen/auth/ScreenPresenter.kt
+31
-0
ScreenViewState.kt
...sual/roompark/presentation/screen/auth/ScreenViewState.kt
+15
-0
ScreenContract.kt
...ual/roompark/presentation/screen/splash/ScreenContract.kt
+11
-0
ScreenController.kt
...l/roompark/presentation/screen/splash/ScreenController.kt
+83
-0
ScreenDI.kt
...to/visual/roompark/presentation/screen/splash/ScreenDI.kt
+52
-0
ScreenPresenter.kt
...al/roompark/presentation/screen/splash/ScreenPresenter.kt
+27
-0
ScreenViewState.kt
...al/roompark/presentation/screen/splash/ScreenViewState.kt
+13
-0
SnackBarModule.kt
...nto/visual/roompark/view_utils/snackbar/SnackBarModule.kt
+2
-2
ic_onlyr.xml
app/src/main/res/drawable/ic_onlyr.xml
+9
-0
activity_main.xml
app/src/main/res/layout/activity_main.xml
+4
-4
authentication_screen.xml
app/src/main/res/layout/authentication_screen.xml
+1
-0
splash_screen.xml
app/src/main/res/layout/splash_screen.xml
+29
-4
dependencies.gradle
dependencies.gradle
+1
-1
No files found.
app/build.gradle
View file @
d8e14f50
...
...
@@ -110,7 +110,13 @@ dependencies {
//Rx Relay
implementation
"com.jakewharton.rxrelay2:rxrelay:$rxRelayVersion"
//Assist Injected
compileOnly
'com.squareup.inject:assisted-inject-annotations-dagger2:0.5.0'
kapt
'com.squareup.inject:assisted-inject-processor-dagger2:0.5.0'
//RxBinding
implementation
"com.jakewharton.rxbinding3:rxbinding:$rxBindingVersion"
implementation
"com.jakewharton.rxbinding3:rxbinding-recyclerview:$rxBindingVersion"
//Tests
testImplementation
'junit:junit:4.12'
...
...
app/src/main/java/com/biganto/visual/roompark/base/RoomParkApplication.kt
View file @
d8e14f50
...
...
@@ -2,6 +2,7 @@ package com.biganto.visual.roompark.base
import
android.util.Log
import
com.biganto.visual.roompark.BuildConfig
import
com.biganto.visual.roompark.di.dagger.AppComponent
import
com.biganto.visual.roompark.di.dagger.DaggerAppComponent
import
com.crashlytics.android.Crashlytics
import
com.squareup.picasso.Picasso
...
...
@@ -14,10 +15,19 @@ import timber.log.Timber
*/
class
RoomParkApplication
:
DaggerApplication
()
{
companion
object
{
lateinit
var
component
:
AppComponent
private
set
}
override
fun
applicationInjector
():
AndroidInjector
<
out
DaggerApplication
>
{
return
DaggerAppComponent
.
builder
()
.
context
(
this
)
.
build
()
component
=
DaggerAppComponent
.
factory
()
.
create
(
this
)
as
AppComponent
// .context(this)
// .build()
return
component
}
override
fun
onCreate
()
{
...
...
app/src/main/java/com/biganto/visual/roompark/base/RoomParkMainActivity.kt
View file @
d8e14f50
...
...
@@ -9,16 +9,18 @@ import butterknife.BindView
import
butterknife.ButterKnife
import
com.biganto.visual.roompark.BuildConfig
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.presentation.screen.splash.SplashScreenController
import
com.biganto.visual.roompark.view_utils.app_bar.DragControlAppBarLayoutBehaviour
import
com.biganto.visual.roompark.view_utils.snackbar.ISnackBarProvider
import
com.bluelinelabs.conductor.Conductor
import
com.bluelinelabs.conductor.Router
import
com.bluelinelabs.conductor.RouterTransaction
import
com.crashlytics.android.Crashlytics
import
com.google.android.material.appbar.AppBarLayout
import
com.google.android.material.appbar.CollapsingToolbarLayout
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
io.fabric.sdk.android.Fabric
import
javax.inject.Inject
import
kotlinx.android.synthetic.main.activity_main.*
import
timber.log.Timber
class
RoomParkMainActivity
(
)
:
BaseRoomParkActivity
()
...
...
@@ -26,8 +28,10 @@ class RoomParkMainActivity(
,
IConductorActivity
,
IBottomNavigation
{
@Inject
lateinit
var
snackbarProvider
:
ISnackBarProvider
// @Inject
// lateinit var snackbarProvider: ISnackBarProvider
private
lateinit
var
router
:
Router
...
...
@@ -38,6 +42,8 @@ class RoomParkMainActivity(
@BindView
(
R
.
id
.
conductor_container
)
override
lateinit
var
conductorContainer
:
ViewGroup
@BindView
(
R
.
id
.
bottom_navigation_view
)
override
lateinit
var
bottomNavigation
:
BottomNavigationView
@BindView
(
R
.
id
.
bottom_view_divider
)
lateinit
var
bottomShadow
:
View
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
setTheme
(
R
.
style
.
AppTheme
)
super
.
onCreate
(
savedInstanceState
)
...
...
@@ -50,9 +56,11 @@ class RoomParkMainActivity(
setSupportActionBar
(
topAppBar
)
hideAll
()
router
=
Conductor
.
attachRouter
(
this
,
conductorContainer
,
savedInstanceState
)
snackbarProvider
.
bindRootView
(
rootView
=
coordinatorLayout
)
router
.
setRoot
(
RouterTransaction
.
with
(
SplashScreenController
())
)
}
override
fun
displayBackButton
(
show
:
Boolean
)
{
...
...
@@ -61,22 +69,25 @@ class RoomParkMainActivity(
override
fun
hideAll
()
{
appBar
.
visibility
=
Toolbar
.
INVISIBLE
bottomNavigation
.
visibility
=
Toolbar
.
GONE
val
params
=
coordinatorLayout
.
layoutParams
as
CoordinatorLayout
.
LayoutParams
bottomNavigation
.
visibility
=
BottomNavigationView
.
GONE
bottomShadow
.
visibility
=
View
.
GONE
Timber
.
e
(
" lay params : ${appBar.layoutParams.javaClass}"
)
val
params
:
CoordinatorLayout
.
LayoutParams
=
conductor_container
.
layoutParams
as
CoordinatorLayout
.
LayoutParams
params
.
behavior
=
null
co
ordinatorLayout
.
requestLayout
()
co
nductor_container
.
requestLayout
()
}
override
fun
showAll
()
{
appBar
.
setExpanded
(
false
,
false
)
collapsingToolbarLayout
.
visibility
=
View
.
VISIBLE
bottomNavigation
.
visibility
=
Toolbar
.
VISIBLE
bottomShadow
.
visibility
=
View
.
VISIBLE
appBar
.
visibility
=
View
.
VISIBLE
topAppBar
.
visibility
=
View
.
VISIBLE
val
params
=
co
ordinatorLayout
.
layoutParams
as
CoordinatorLayout
.
LayoutParams
val
params
=
co
nductor_container
.
layoutParams
as
CoordinatorLayout
.
LayoutParams
params
.
behavior
=
AppBarLayout
.
ScrollingViewBehavior
()
co
ordinatorLayout
.
requestLayout
()
co
nductor_container
.
requestLayout
()
}
override
fun
appBarScrollable
(
allow
:
Boolean
)
{
...
...
app/src/main/java/com/biganto/visual/roompark/conductor/BigantoBaseController.kt
View file @
d8e14f50
...
...
@@ -14,17 +14,15 @@ import com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.base.ICollapsingToolBar
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.conductor.mosby.mvi.BigantoMviController
import
com.biganto.visual.roompark.di.dagger.
PerScreen
import
com.biganto.visual.roompark.di.dagger.
ActivityModule
import
com.biganto.visual.roompark.view_utils.snackbar.ISnackBarProvider
import
com.hannesdorfmann.mosby3.mvi.MviBasePresenter
import
io.reactivex.disposables.CompositeDisposable
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 28.05.2018.
*/
@PerScreen
abstract
class
BigantoBaseController
<
VS
:
BigantoBaseViewState
,
V
:
BigantoBaseContract
<
VS
>,
P
:
MviBasePresenter
<
V
,
VS
>>
:
BigantoMviController
<
V
,
P
>
{
...
...
@@ -32,33 +30,44 @@ abstract class BigantoBaseController<VS : BigantoBaseViewState,V: BigantoBaseCon
constructor
(
args
:
Bundle
):
super
(
args
)
protected
val
detachDisposable
=
CompositeDisposable
()
val
inject
by
lazy
{
injectDependencies
()
}
abstract
override
fun
createPresenter
():
P
protected
abstract
fun
injectDependencies
()
@LayoutRes
protected
abstract
fun
getLayoutId
():
Int
protected
val
detachDisposable
=
CompositeDisposable
()
@StringRes
protected
abstract
fun
getToolbarTitleId
():
Int
abstract
var
injectedPresenter
:
P
override
fun
createPresenter
():
P
=
injectedPresenter
@
Inject
pr
ivate
lateinit
var
roomParkActivity
:
RoomParkMainActivity
@
LayoutRes
pr
otected
abstract
fun
getLayoutId
():
Int
protected
val
toolBar
:
ICollapsingToolBar
=
roomParkActivity
protected
val
snackbar
:
ISnackBarProvider
=
roomParkActivity
.
snackb
arProvider
lateinit
var
toolBar
:
ICollapsingToolBar
lateinit
var
snackbar
:
ISnackB
arProvider
override
fun
onDetach
(
view
:
View
)
{
detachDisposable
.
clear
()
super
.
onDetach
(
view
)
}
private
var
isInjected
=
false
override
fun
onContextAvailable
(
context
:
Context
)
{
super
.
onContextAvailable
(
context
)
inject
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
):
View
{
val
view
=
inflater
.
inflate
(
getLayoutId
(),
container
,
false
)
// instantiate the view
ButterKnife
.
bind
(
this
,
view
)
(
activity
as
RoomParkMainActivity
).
let
{
snackbar
=
ActivityModule
.
provideSnackBar
(
it
)
toolBar
=
it
snackbar
.
bindRootView
(
toolBar
.
coordinatorLayout
)
}
return
view
}
...
...
app/src/main/java/com/biganto/visual/roompark/di/dagger/ActivityModule.kt
View file @
d8e14f50
...
...
@@ -4,6 +4,7 @@ import android.app.Activity
import
android.content.Context
import
android.content.res.Resources
import
com.biganto.visual.roompark.base.BaseRoomParkActivity
import
com.biganto.visual.roompark.base.ICollapsingToolBar
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.view_utils.snackbar.ISnackBarProvider
import
com.biganto.visual.roompark.view_utils.snackbar.SnackBarProvider
...
...
@@ -30,28 +31,30 @@ abstract class ActivityModule {
@JvmStatic
@Provides
fun
provideSnackBar
(
activity
:
Activity
):
ISnackBarProvider
{
fun
provideSnackBar
(
activity
:
Activity
):
ISnackBarProvider
{
return
SnackBarProvider
(
activity
)
}
}
}
@Module
abstract
class
AppActivityModule
{
@Module
internal
interface
MainActivityModule
{
@Binds
fun
bindMainActivity
(
activity
:
RoomParkMainActivity
):
Activity
}
fun
bindMainActivity
(
activity
:
RoomParkMainActivity
):
BaseRoomParkActivity
@Binds
fun
bindMainActivityToolbar
(
activity
:
RoomParkMainActivity
):
ICollapsingToolBar
}
@Module
internal
interface
BaseActivityModule
{
@Binds
fun
bindBaseActivity
(
activity
:
BaseRoomParkActivity
):
Activity
fun
bindBaseActivity
(
activity
:
BaseRoomParkActivity
):
BaseRoomParkActivity
}
...
...
app/src/main/java/com/biganto/visual/roompark/di/dagger/AppComponent.kt
View file @
d8e14f50
package
com.biganto.visual.roompark.di.dagger
import
android.app.Application
import
com.biganto.visual.roompark.base.RoomParkApplication
import
dagger.BindsInstance
import
dagger.Component
import
dagger.android.AndroidInjectionModule
import
dagger.android.AndroidInjector
...
...
@@ -25,14 +23,15 @@ import javax.inject.Singleton
AndroidSupportInjectionModule
::
class
,
// MappingProvider::class,
ActivityModule
::
class
,
AppActivityModule
::
class
])
interface
AppComponent
:
AndroidInjector
<
RoomParkApplication
>{
@Component
.
Builder
interface
Builder
{
@Component
.
Factory
interface
Factory
:
AndroidInjector
.
Factory
<
RoomParkApplication
>
{
@BindsInstance
fun
context
(
application
:
Application
):
Builder
//
@BindsInstance
// fun context(application: Application): Factory
// @BindsInstance
// fun retrofitModule(retrofit: RetrofitModule):Builder
...
...
@@ -43,8 +42,9 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{
// fun retrofit(
// retorfitModule: RetrofitModule):Builder
//
// fun build(): AppComponent
fun
build
():
AppComponent
}
...
...
app/src/main/java/com/biganto/visual/roompark/di/dagger/ContextModule.kt
View file @
d8e14f50
package
com.biganto.visual.roompark.di.dagger
import
com.biganto.visual.roompark.domain.contract.AuthContract
import
com.biganto.visual.roompark.domain.model.AuthInfoModel
import
dagger.Module
import
dagger.Provides
import
io.reactivex.rxjava3.core.Completable
import
io.reactivex.rxjava3.core.Observable
import
javax.inject.Inject
import
javax.inject.Singleton
/**
* Created by Vladislav Bogdashkin on 13.06.2018.
...
...
@@ -26,11 +32,25 @@ class AppModule() {
}
class
AuthContractModule
@Inject
constructor
():
AuthContract
{
override
fun
signOut
():
Completable
=
Completable
.
complete
()
override
fun
signIn
(
email
:
String
,
password
:
String
):
Observable
<
AuthInfoModel
>
{
return
Observable
.
just
(
AuthInfoModel
(
"some tokan zzaza"
,
1488
,
"hi4"
,
"biganto@demo.ru"
))
}
fun
validateAuthState
():
Observable
<
Boolean
>
=
Observable
.
just
(
false
)
}
@Module
()
class
DataModule
()
{
@Provides
@Singleton
fun
provideAuthContract
()
:
AuthContract
=
AuthContractModule
()
/*
@Provides
@Singleton
...
...
app/src/main/java/com/biganto/visual/roompark/di/dagger/PerScreen.kt
View file @
d8e14f50
...
...
@@ -12,4 +12,9 @@ import javax.inject.Scope
*/
@Scope
@Retention
(
AnnotationRetention
.
RUNTIME
)
annotation
class
PerScreen
\ No newline at end of file
annotation
class
PerScreen
@Scope
@Retention
(
AnnotationRetention
.
RUNTIME
)
annotation
class
ActivityScope
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/interactor/auth.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.domain.interactor
import
com.biganto.visual.roompark.domain.use_case.AuthUseCase
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 09.10.2019.
*/
class
AuthInteractor
@Inject
constructor
(
private
val
uc
:
AuthUseCase
){
fun
getAuth
()
=
uc
.
validateAuth
()
fun
authorizate
(
login
:
String
,
password
:
String
)
=
uc
.
authorizate
(
login
,
password
)
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/interactor/splash.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.domain.interactor
import
com.biganto.visual.roompark.domain.use_case.AuthUseCase
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 09.10.2019.
*/
class
SplashInteractor
@Inject
constructor
(
private
val
uc
:
AuthUseCase
){
fun
getAuth
()
=
uc
.
validateAuth
()
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/domain/use_case/authUseCase.kt
View file @
d8e14f50
package
com.biganto.visual.roompark.domain.use_case
import
com.biganto.visual.roompark.di.dagger.PerScreen
import
com.biganto.visual.roompark.domain.contract.AuthContract
import
io.reactivex.Observable
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 24.09.2019.
*/
@PerScreen
class
AuthUseCase
(
val
authContract
:
AuthContract
class
AuthUseCase
@Inject
constructor
(
private
val
authContract
:
AuthContract
){
fun
validateAuth
()
=
Observable
.
just
(
true
)
fun
authorizate
(
login
:
String
,
pwd
:
String
)
=
authContract
.
signIn
(
login
,
pwd
)
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/auth/ScreenContract.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.auth
import
com.biganto.visual.roompark.conductor.BigantoBaseContract
import
io.reactivex.Observable
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
interface
AuthScreen
:
BigantoBaseContract
<
AuthScreenViewState
>
{
fun
tryAuth
():
Observable
<
AuthInputModel
>
}
data class
AuthInputModel
(
val
login
:
String
,
val
pwd
:
String
)
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/auth/ScreenController.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.auth
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
butterknife.BindView
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.conductor.BigantoBaseController
import
com.google.android.material.button.MaterialButton
import
com.google.android.material.snackbar.Snackbar
import
com.google.android.material.textfield.TextInputLayout
import
com.jakewharton.rxbinding3.view.clicks
import
io.reactivex.Observable
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
class
AuthScreenController
:
BigantoBaseController
<
AuthScreenViewState
,
AuthScreen
,
AuthScreenPresenter
>()
,
AuthScreen
{
@BindView
(
R
.
id
.
login_text_input
)
lateinit
var
loginInput
:
TextInputLayout
@BindView
(
R
.
id
.
password_text_input
)
lateinit
var
pwdInput
:
TextInputLayout
@BindView
(
R
.
id
.
sign_in_button
)
lateinit
var
signInButton
:
MaterialButton
override
fun
tryAuth
():
Observable
<
AuthInputModel
>
=
signInButton
.
clicks
()
.
map
<
AuthInputModel
>{
AuthInputModel
(
loginInput
.
editText
?.
text
?.
toString
()
?:
""
,
pwdInput
.
editText
?.
text
?.
toString
()
?:
""
)}
override
fun
injectDependencies
()
{
getComponent
()
}
@Inject
override
lateinit
var
injectedPresenter
:
AuthScreenPresenter
// @Inject
// lateinit var snacky:ISnackBarProvider
lateinit
var
rpActivity
:
RoomParkMainActivity
fun
getComponent
()
=
DaggerAuthScreenComponent
.
factory
()
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
)
.
inject
(
this
)
// @Inject
// lateinit var ac: RoomParkMainActivity
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
):
View
{
val
v
=
super
.
onCreateView
(
inflater
,
container
)
return
v
}
override
fun
render
(
viewState
:
AuthScreenViewState
)
{
when
(
viewState
){
is
AuthScreenViewState
.
Idle
->
render
(
viewState
)
is
AuthScreenViewState
.
Authorization
->
render
(
viewState
)
is
AuthScreenViewState
.
SignedIn
->
render
(
viewState
)
is
AuthScreenViewState
.
SignInError
->
render
(
viewState
)
}
}
private
fun
render
(
viewState
:
AuthScreenViewState
.
Idle
){
}
private
fun
render
(
viewState
:
AuthScreenViewState
.
Authorization
){
toolBar
.
hideAll
()
// snacky.showSnackBar("lul")
}
private
fun
render
(
viewState
:
AuthScreenViewState
.
SignedIn
){
// snacky.showSnackBar("lul")
}
private
fun
render
(
viewState
:
AuthScreenViewState
.
SignInError
){
snackbar
.
showSnackBar
(
viewState
.
message
,
Snackbar
.
LENGTH_LONG
)
toolBar
.
hideAll
()
// snacky.showSnackBar("lul")
}
override
fun
getLayoutId
():
Int
=
R
.
layout
.
authentication_screen
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/auth/ScreenDI.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.auth
import
android.content.Context
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.di.dagger.AppComponent
import
com.biganto.visual.roompark.di.dagger.AuthContractModule
import
com.biganto.visual.roompark.di.dagger.PerScreen
import
com.biganto.visual.roompark.domain.contract.AuthContract
import
dagger.Binds
import
dagger.BindsInstance
import
dagger.Component
import
dagger.Module
@PerScreen
@Component
(
modules
=
[
AuthScreenModule
::
class
],
dependencies
=
[
AppComponent
::
class
])
interface
AuthScreenComponent
{
@Component
.
Factory
interface
Factory
{
fun
create
(
appComponent
:
AppComponent
,
@BindsInstance
activity
:
RoomParkMainActivity
):
AuthScreenComponent
}
val
presenter
:
AuthScreenPresenter
fun
inject
(
controller
:
AuthScreenController
)
}
@Module
abstract
class
AuthScreenModule
{
@PerScreen
@Binds
abstract
fun
provideContext
(
activity
:
RoomParkMainActivity
):
Context
@PerScreen
@Binds
abstract
fun
provideAuth
(
contract
:
AuthContractModule
):
AuthContract
}
app/src/main/java/com/biganto/visual/roompark/presentation/screen/auth/ScreenPresenter.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.auth
import
com.biganto.visual.roompark.conductor.BigantoBasePresenter
import
com.biganto.visual.roompark.domain.interactor.AuthInteractor
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
class
AuthScreenPresenter
@Inject
constructor
(
private
val
interactor
:
AuthInteractor
)
:
BigantoBasePresenter
<
AuthScreen
,
AuthScreenViewState
>()
{
override
fun
bindIntents
()
{
val
onAuth
=
intent
(
AuthScreen
::
tryAuth
)
.
flatMap
{
interactor
.
getAuth
()
}
val
state
=
restoreStateObservable
.
mergeWith
(
interactor
.
getAuth
()
.
map
{
AuthScreenViewState
.
ToScreen
(
it
.
toString
())
})
subscribeViewState
(
state
.
cast
(
AuthScreenViewState
::
class
.
java
),
AuthScreen
::
render
)
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/auth/ScreenViewState.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.auth
import
com.biganto.visual.roompark.conductor.BigantoBaseViewState
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
sealed
class
AuthScreenViewState
:
BigantoBaseViewState
()
{
class
Idle
:
AuthScreenViewState
()
class
Authorization
:
AuthScreenViewState
()
class
SignedIn
:
AuthScreenViewState
()
class
SignInError
(
val
message
:
String
)
:
AuthScreenViewState
()
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/splash/ScreenContract.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.splash
import
com.biganto.visual.roompark.conductor.BigantoBaseContract
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
interface
SplashScreen
:
BigantoBaseContract
<
SplashScreenViewState
>
{
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/splash/ScreenController.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.splash
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.base.ICollapsingToolBar
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.conductor.BigantoBaseController
import
com.biganto.visual.roompark.presentation.screen.auth.AuthScreenController
import
com.bluelinelabs.conductor.RouterTransaction
import
com.bluelinelabs.conductor.changehandler.FadeChangeHandler
import
com.google.android.material.snackbar.Snackbar
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
class
SplashScreenController
:
BigantoBaseController
<
SplashScreenViewState
,
SplashScreen
,
SplashScreenPresenter
>()
,
SplashScreen
{
override
fun
injectDependencies
()
{
getComponent
()
}
@Inject
lateinit
var
tb
:
ICollapsingToolBar
@Inject
override
lateinit
var
injectedPresenter
:
SplashScreenPresenter
// @Inject
// lateinit var snacky:ISnackBarProvider
lateinit
var
rpActivity
:
RoomParkMainActivity
fun
getComponent
()
=
DaggerSplashScreenComponent
.
factory
()
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
)
.
inject
(
this
)
// @Inject
// lateinit var ac: RoomParkMainActivity
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
):
View
{
val
v
=
super
.
onCreateView
(
inflater
,
container
)
return
v
}
override
fun
render
(
viewState
:
SplashScreenViewState
)
{
when
(
viewState
){
is
SplashScreenViewState
.
Idle
->
render
(
viewState
)
is
SplashScreenViewState
.
ToScreen
->
render
(
viewState
)
}
}
private
fun
render
(
viewState
:
SplashScreenViewState
.
Idle
){
}
private
fun
render
(
viewState
:
SplashScreenViewState
.
ToScreen
){
snackbar
.
showSnackBar
(
viewState
.
message
,
Snackbar
.
LENGTH_LONG
)
tb
.
hideAll
()
router
.
pushController
(
RouterTransaction
.
with
(
AuthScreenController
())
.
popChangeHandler
(
FadeChangeHandler
())
.
pushChangeHandler
(
FadeChangeHandler
())
)
// snacky.showSnackBar("lul")
}
override
fun
getLayoutId
():
Int
=
R
.
layout
.
splash_screen
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/splash/ScreenDI.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.splash
import
android.content.Context
import
com.biganto.visual.roompark.base.ICollapsingToolBar
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.di.dagger.AppComponent
import
com.biganto.visual.roompark.di.dagger.AuthContractModule
import
com.biganto.visual.roompark.di.dagger.PerScreen
import
com.biganto.visual.roompark.domain.contract.AuthContract
import
dagger.Binds
import
dagger.BindsInstance
import
dagger.Component
import
dagger.Module
///**
// * Created by Vladislav Bogdashkin on 30.09.2019.
// */
@PerScreen
@Component
(
modules
=
[
SplashScreenModule
::
class
],
dependencies
=
[
AppComponent
::
class
])
interface
SplashScreenComponent
{
@Component
.
Factory
interface
Factory
{
fun
create
(
appComponent
:
AppComponent
,
@BindsInstance
activity
:
RoomParkMainActivity
):
SplashScreenComponent
}
val
presenter
:
SplashScreenPresenter
fun
inject
(
controller
:
SplashScreenController
)
}
@Module
abstract
class
SplashScreenModule
{
@PerScreen
@Binds
abstract
fun
provideContext
(
activity
:
RoomParkMainActivity
):
Context
@PerScreen
@Binds
abstract
fun
provideAuth
(
contract
:
AuthContractModule
):
AuthContract
@PerScreen
@Binds
abstract
fun
provideToolbar
(
activitiy
:
RoomParkMainActivity
):
ICollapsingToolBar
}
app/src/main/java/com/biganto/visual/roompark/presentation/screen/splash/ScreenPresenter.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.splash
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.conductor.BigantoBasePresenter
import
com.biganto.visual.roompark.domain.interactor.SplashInteractor
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
class
SplashScreenPresenter
@Inject
constructor
(
private
val
acitivityContext
:
RoomParkMainActivity
,
private
val
interactor
:
SplashInteractor
// ,var context:Context
)
:
BigantoBasePresenter
<
SplashScreen
,
SplashScreenViewState
>()
{
override
fun
bindIntents
()
{
val
state
=
restoreStateObservable
.
mergeWith
(
interactor
.
getAuth
()
.
map
{
SplashScreenViewState
.
ToScreen
(
it
.
toString
())
})
subscribeViewState
(
state
.
cast
(
SplashScreenViewState
::
class
.
java
),
SplashScreen
::
render
)
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/splash/ScreenViewState.kt
0 → 100644
View file @
d8e14f50
package
com.biganto.visual.roompark.presentation.screen.splash
import
com.biganto.visual.roompark.conductor.BigantoBaseViewState
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
*/
sealed
class
SplashScreenViewState
:
BigantoBaseViewState
()
{
class
Idle
:
SplashScreenViewState
()
class
ToScreen
(
val
message
:
String
)
:
SplashScreenViewState
()
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/view_utils/snackbar/SnackBarModule.kt
View file @
d8e14f50
...
...
@@ -6,14 +6,14 @@ import androidx.core.content.ContextCompat
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.view_utils.snackbar.SnackBarMessageType.*
import
com.google.android.material.snackbar.Snackbar
import
javax.inject.Inject
/**
* Created by Vladislav Bogdashkin on 06.05.2019.
*/
class
SnackBarProvider
constructor
(
val
activity
:
Activity
)
:
ISnackBarProvider
{
class
SnackBarProvider
@Inject
constructor
(
val
activity
:
Activity
)
:
ISnackBarProvider
{
override
val
isRootBounded
:
Boolean
get
()
=
rootView
!=
null
...
...
app/src/main/res/drawable/ic_onlyr.xml
0 → 100644
View file @
d8e14f50
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"21.3dp"
android:height=
"38.5dp"
android:viewportWidth=
"21.3"
android:viewportHeight=
"38.5"
>
<path
android:pathData=
"M8.6,8.6h4.3V21.4H8.6ZM2.1,2.1H19.2V27.8H8.6V23.5H15V6.4H6.4V23.5H2.1ZM0,0V25.7H6.4V38.5H8.5V29.9H21.3V0Z"
android:fillColor=
"#217f79"
/>
</vector>
app/src/main/res/layout/activity_main.xml
View file @
d8e14f50
...
...
@@ -86,7 +86,8 @@
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/bottom_gradient_height"
android:layout_gravity=
"bottom"
android:background=
"@drawable/botttom_bar_shadow"
/>
android:background=
"@drawable/botttom_bar_shadow"
android:visibility=
"invisible"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
...
...
@@ -97,14 +98,13 @@
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
android:fitsSystemWindows=
"true"
android:visibility=
"
visibl
e"
android:visibility=
"
gon
e"
app:elevation=
"0dp"
app:itemBackground=
"@color/colorCommonBackground"
app:itemHorizontalTranslationEnabled=
"false"
app:itemIconTint=
"@drawable/bottom_navigation_icon_selector"
app:labelVisibilityMode=
"labeled"
app:menu=
"@menu/bottom_navigation_menu"
tools:visibility=
"invisible"
>
app:menu=
"@menu/bottom_navigation_menu"
>
</com.google.android.material.bottomnavigation.BottomNavigationView>
...
...
app/src/main/res/layout/authentication_screen.xml
View file @
d8e14f50
...
...
@@ -109,6 +109,7 @@
</FrameLayout>
<com.google.android.material.button.MaterialButton
android:id=
"@+id/sign_in_button"
style=
"@style/AuthButton.Enable"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
app/src/main/res/layout/splash_screen.xml
View file @
d8e14f50
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:orientation=
"vertical"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:id=
"@+id/linearLayout"
>
</LinearLayout>
\ No newline at end of file
<ImageView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:id=
"@+id/splashBackground"
tools:layout_editor_absoluteX=
"174dp"
tools:layout_editor_absoluteY=
"540dp"
android:scaleType=
"centerCrop"
/>
<ImageView
android:layout_width=
"32dp"
android:layout_height=
"wrap_content"
app:srcCompat=
"@drawable/ic_onlyr"
android:id=
"@+id/imageView3"
app:layout_constraintEnd_toEndOf=
"@+id/splashBackground"
app:layout_constraintStart_toStartOf=
"@+id/splashBackground"
app:layout_constraintBottom_toBottomOf=
"parent"
android:layout_marginTop=
"8dp"
app:layout_constraintTop_toTopOf=
"@+id/splashBackground"
android:layout_marginBottom=
"8dp"
android:layout_marginEnd=
"8dp"
/>
<TextView
style=
"@style/Header_TextView.Main_Header"
android:text=
"РУМЯНЦЕВО-ПАРК"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:id=
"@+id/logo_header"
android:layout_marginBottom=
"8dp"
app:layout_constraintBottom_toBottomOf=
"parent"
android:layout_marginTop=
"8dp"
app:layout_constraintTop_toBottomOf=
"@+id/imageView3"
app:layout_constraintStart_toStartOf=
"@+id/imageView3"
app:layout_constraintEnd_toEndOf=
"@+id/imageView3"
app:layout_constraintVertical_bias=
"0.0"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
dependencies.gradle
View file @
d8e14f50
...
...
@@ -11,7 +11,7 @@ ext {
// supportLibraryVersion = '1.1.0-alpha05'
constrainLayoutVersion
=
'1.1.3'
// requeryVersion = '1.5.1'
// rxBindingVersion = '2.1.1
'
rxBindingVersion
=
'3.0.0
'
conductorVersion
=
'3.0.0-rc1'
materialVersion
=
'1.1.0-alpha10'
gradleVersion
=
'3.5.0'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment