├── mvp ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── styles.xml │ │ │ │ ├── strings.xml │ │ │ │ └── ids.xml │ │ │ └── layout │ │ │ │ ├── lce_base_load.xml │ │ │ │ ├── lce_base_container.xml │ │ │ │ └── lce_base_error.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── idapgroup │ │ │ │ └── android │ │ │ │ └── mvp │ │ │ │ ├── impl │ │ │ │ ├── Utils.kt │ │ │ │ ├── PresenterDelegate.kt │ │ │ │ ├── LcePresenterActivity.kt │ │ │ │ ├── LcePresenterDialogFragment.kt │ │ │ │ ├── BasePresenter.kt │ │ │ │ ├── LcePresenterFragment.kt │ │ │ │ ├── LceViewCreator.kt │ │ │ │ ├── ViewHandler.kt │ │ │ │ ├── ViewHandlerContainer.kt │ │ │ │ ├── BasePresenterActivity.kt │ │ │ │ ├── v2 │ │ │ │ │ ├── PresenterDelegate.kt │ │ │ │ │ ├── LifecycleCallbacks.kt │ │ │ │ │ └── PresenterHandler.kt │ │ │ │ ├── BasePresenterDialogFragment.kt │ │ │ │ ├── BasePresenterFragment.kt │ │ │ │ └── LceViewHandler.kt │ │ │ │ ├── LoadView.kt │ │ │ │ ├── RawErrorView.kt │ │ │ │ ├── ProgressView.kt │ │ │ │ ├── LcView.kt │ │ │ │ ├── RawLceView.kt │ │ │ │ ├── LceView.kt │ │ │ │ └── MvpPresenter.kt │ │ └── AndroidManifest.xml │ └── androidTest │ │ ├── java │ │ └── com │ │ │ └── idapgroup │ │ │ └── android │ │ │ └── mvp │ │ │ └── impl │ │ │ ├── Utils.kt │ │ │ ├── ActivityExt.kt │ │ │ ├── FragmentPresenterViewLifecycleTest.kt │ │ │ ├── PresenterFragmentTest.kt │ │ │ └── ActivityPresenterViewLifecycleTest.kt │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── sample ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── strings.xml │ │ │ ├── colors.xml │ │ │ ├── styles.xml │ │ │ └── dimens.xml │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ └── layout │ │ │ ├── screen_sample.xml │ │ │ └── activity_main.xml │ │ ├── java │ │ └── com │ │ │ └── idapgroup │ │ │ └── android │ │ │ └── mvpsample │ │ │ ├── SampleLceMvp.kt │ │ │ ├── SampleMvp.kt │ │ │ ├── v2 │ │ │ ├── SampleLceActivityV2.kt │ │ │ ├── SampleFragmentV2.kt │ │ │ └── SampleActivityV2.kt │ │ │ ├── SampleLcePresenter.kt │ │ │ ├── SampleFragment.kt │ │ │ ├── MainActivity.kt │ │ │ ├── SamplePresenter.kt │ │ │ ├── SampleActivity.kt │ │ │ ├── SampleLceFragment.kt │ │ │ └── SampleLceActivity.kt │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── mvp-utils ├── .gitignore ├── src │ └── main │ │ ├── res │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── idapgroup │ │ └── android │ │ └── rx_mvp │ │ └── RxBasePresenter.kt └── build.gradle ├── settings.gradle ├── .gitignore ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── README.md ├── gradlew.bat ├── gradlew └── LICENSE /mvp/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /mvp-utils/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':mvp', ':mvp-utils', ':sample' 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .DS_Store 3 | .gradle 4 | .idea 5 | local.properties 6 | 7 | build/ -------------------------------------------------------------------------------- /mvp/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mvp/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mvp/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mvp-utils/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mvp-utils/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mvp-utils/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /mvp-utils/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kharchenkovitaliypt/AndroidMvp/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /sample/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/impl/Utils.kt: -------------------------------------------------------------------------------- 1 | @file:JvmName("Utils") 2 | package com.idapgroup.android.mvp.impl 3 | 4 | typealias Action = () -> Unit -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kharchenkovitaliypt/AndroidMvp/HEAD/sample/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kharchenkovitaliypt/AndroidMvp/HEAD/sample/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kharchenkovitaliypt/AndroidMvp/HEAD/sample/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mvp/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kharchenkovitaliypt/AndroidMvp/HEAD/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kharchenkovitaliypt/AndroidMvp/HEAD/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mvp/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Retry 5 | 6 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/LoadView.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | interface LoadView { 4 | fun showLoad() 5 | fun hideLoad() 6 | } 7 | -------------------------------------------------------------------------------- /mvp-utils/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/RawErrorView.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | interface RawErrorView { 4 | fun showError(error: Throwable) 5 | } 6 | 7 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/ProgressView.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | interface ProgressView { 4 | fun showProgress(progress: Float = 0F) 5 | fun hideProgress() 6 | } -------------------------------------------------------------------------------- /sample/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Sep 10 02:20:55 EEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip 7 | -------------------------------------------------------------------------------- /mvp/src/main/res/layout/lce_base_load.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /mvp/src/main/res/layout/lce_base_container.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/LcView.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | /** Represents view with two states(load, content) */ 4 | interface LcView { 5 | 6 | /** Show load view indicating process */ 7 | fun showLoad() 8 | 9 | /** Show content view */ 10 | fun showContent() 11 | } -------------------------------------------------------------------------------- /sample/src/main/java/com/idapgroup/android/mvpsample/SampleLceMvp.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvpsample 2 | 3 | import com.idapgroup.android.mvp.MvpPresenter 4 | import com.idapgroup.android.mvp.RawLceView 5 | 6 | interface SampleLceMvp { 7 | 8 | interface Presenter : MvpPresenter 9 | 10 | interface View : RawLceView 11 | } -------------------------------------------------------------------------------- /mvp/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/RawLceView.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | /** Represents view with three states(load, content, raw error with retry) */ 4 | interface RawLceView : LcView { 5 | 6 | /** 7 | * Show an error message with retry ability 8 | * @param error Raw error 9 | * @param retry Retry action 10 | */ 11 | fun showError(error: Throwable, retry: (() -> Unit)? = null) 12 | } -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/LceView.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | /** Represents view with three states(loading, contentView, error with retry) */ 4 | interface LceView : LcView { 5 | /** 6 | * Show an error message with retry ability 7 | * @param errorMessage Message representing an error. 8 | * @param retry Retry action 9 | */ 10 | fun showError(errorMessage: String, retry: (() -> Unit)? = null) 11 | } -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/MvpPresenter.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp 2 | 3 | import android.os.Bundle 4 | 5 | interface MvpPresenter { 6 | 7 | fun attachView(view : V) 8 | fun detachView() 9 | fun onAttachedView(view: V) 10 | fun onDetachedView() 11 | 12 | @Deprecated("Don't use") 13 | fun onCreate() 14 | fun onSaveState(savedState: Bundle) 15 | fun onRestoreState(savedState: Bundle) 16 | } 17 | -------------------------------------------------------------------------------- /sample/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sample/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 16dp 8 | 16dp 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/java/com/idapgroup/android/mvpsample/SampleMvp.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvpsample 2 | 3 | import com.idapgroup.android.mvp.LoadView 4 | import com.idapgroup.android.mvp.MvpPresenter 5 | import com.idapgroup.android.mvp.RawErrorView 6 | 7 | interface SampleMvp { 8 | 9 | interface Presenter : MvpPresenter { 10 | fun onAsk(question: String) 11 | fun onConfirm() 12 | fun takeUntilDetachView() 13 | } 14 | 15 | interface View : LoadView, RawErrorView { 16 | fun showMessage(message: String) 17 | fun goToMain() 18 | } 19 | } -------------------------------------------------------------------------------- /mvp/src/androidTest/java/com/idapgroup/android/mvp/impl/Utils.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp.impl 2 | 3 | import android.support.test.InstrumentationRegistry.getInstrumentation 4 | import android.support.v7.app.AppCompatActivity 5 | import com.idapgroup.android.mvp.impl.v2.mvpStrictMode 6 | 7 | fun waitForIdleSyncAfter(action: () -> Unit) { 8 | with(getInstrumentation()) { 9 | runOnMainSync { action() } 10 | waitForIdleSync() 11 | } 12 | } 13 | 14 | class TestActivity : AppCompatActivity() 15 | 16 | class TestPresenter : BasePresenter() { 17 | init { 18 | mvpStrictMode = true 19 | } 20 | } 21 | 22 | interface TestMvpView -------------------------------------------------------------------------------- /mvp/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/vitaliy/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /sample/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/vitaliy/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | -------------------------------------------------------------------------------- /mvp/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 13 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /mvp/src/main/java/com/idapgroup/android/mvp/impl/PresenterDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.idapgroup.android.mvp.impl 2 | 3 | import android.os.Bundle 4 | import com.idapgroup.android.mvp.MvpPresenter 5 | 6 | class PresenterDelegate>(val presenter : P) { 7 | 8 | var created = false 9 | 10 | fun onCreate() { 11 | if(!created) { 12 | presenter.onCreate() 13 | created = true 14 | } 15 | } 16 | 17 | fun onSaveState(savedState: Bundle) { 18 | presenter.onSaveState(savedState) 19 | savedState.putBoolean("key_delegate_created", created) 20 | } 21 | 22 | fun onRestoreState(savedState: Bundle) { 23 | created = savedState.getBoolean("key_delegate_created") 24 | presenter.onRestoreState(savedState) 25 | } 26 | 27 | fun attachView(view: V) { 28 | presenter.attachView(view) 29 | presenter.onAttachedView(view) 30 | } 31 | 32 | fun detachView() { 33 | presenter.onDetachedView() 34 | presenter.detachView() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /mvp/src/main/res/layout/lce_base_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 25 | 26 |