Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
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