实例介绍
【实例简介】
mosby:用于现代Android应用的Model-View-Presenter / Model-View-Intent库源码下载。Mosby是一个用于Android应用的Model-View-Presenter和Model-View-Intent库。
【实例截图】
【核心代码】
文件清单
└── mosby-c234625fdfb46ce7fe2a0695a6272953db20865f
├── build.gradle
├── circle.yml
├── deploy_javadoc.sh
├── findbugs.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── maven-push.gradle
├── maven-push-java-lib.gradle
├── mvi
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ ├── ActivityMviDelegateImpl.java
│ ├── ActivityMviDelegate.java
│ ├── FragmentMviDelegateImpl.java
│ ├── FragmentMviDelegate.java
│ ├── mvi
│ │ ├── layout
│ │ │ ├── MviFrameLayout.java
│ │ │ ├── MviLinearLayout.java
│ │ │ └── MviRelativeLayout.java
│ │ ├── MviActivity.java
│ │ ├── MviDialogFragment.java
│ │ └── MviFragment.java
│ ├── MviDelegateCallback.java
│ ├── ViewGroupMviDelegateCallback.java
│ ├── ViewGroupMviDelegateImpl.java
│ └── ViewGroupMviDelegate.java
├── mvi-common
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvi
│ │ ├── DisposableIntentObserver.java
│ │ ├── DisposableViewStateObserver.java
│ │ ├── MviBasePresenter.java
│ │ └── MviPresenter.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvi
│ ├── DisposableIntentObserverTest.java
│ ├── EagerObservableTest.java
│ ├── EagerViewStartWithTest.java
│ └── MviBasePresenterTest.java
├── mvi-integration-test
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── README.md
│ └── src
│ ├── androidTest
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvi
│ │ ├── backstack
│ │ │ └── BackstackActivityTest.java
│ │ ├── eager
│ │ │ └── EagerActivityTest.java
│ │ └── integrationtest
│ │ └── lifecycle
│ │ ├── activity
│ │ │ ├── MviFinishInOnCreateActivityTest.java
│ │ │ ├── MviFinishInOnStartActivityTest.java
│ │ │ └── MviLifecycleActivityTest.java
│ │ ├── fragment
│ │ │ ├── childfragment
│ │ │ │ └── MviLifecycleChildFragmentActivityTest.java
│ │ │ ├── MviFinishFragmentOnCreateTest.java
│ │ │ ├── MviFinishFragmentOnStartTest.java
│ │ │ ├── RetainingFragmentContainerActivityTest.java
│ │ │ └── SimpleFragmentContainerActivityTest.java
│ │ └── viewgroup
│ │ ├── MviViewGroupContainerActivityTest2.java
│ │ ├── MviViewGroupContainerActivityTest.java
│ │ ├── MviViewGroupFinishOnCreateTest.java
│ │ └── MviViewGroupFinishOnStartTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvi
│ │ └── integrationtest
│ │ ├── backstack
│ │ │ ├── BackstackActivity.java
│ │ │ ├── first
│ │ │ │ ├── FirstMviFragment.java
│ │ │ │ ├── FirstPresenter.java
│ │ │ │ └── FirstView.java
│ │ │ └── second
│ │ │ ├── SecondMviFragment.java
│ │ │ ├── SecondPresenter.java
│ │ │ └── SecondView.java
│ │ ├── eager
│ │ │ ├── EagerPresenter.java
│ │ │ ├── EagerViewActivity.java
│ │ │ └── EagerView.java
│ │ └── lifecycle
│ │ ├── activity
│ │ │ ├── MviFinishInOnCreateActivity.java
│ │ │ ├── MviFinishInOnStartActivity.java
│ │ │ └── MviLifecycleActivity.java
│ │ ├── fragment
│ │ │ ├── backstack
│ │ │ │ ├── FirstBackstackMviLifecycleFragment.java
│ │ │ │ ├── MviLifecycleBackstackActivity.java
│ │ │ │ └── SecondBackstackMviLifecycleFragment.java
│ │ │ ├── childfragment
│ │ │ │ ├── ContainerMviLifecycleFragment.java
│ │ │ │ ├── MviLifecycleChildFragmentActivity.java
│ │ │ │ └── MviLifecycleChildFragment.java
│ │ │ ├── MviFinishOnCreateContainerActivity.java
│ │ │ ├── MviFinishOnCreateFragment.java
│ │ │ ├── MviFinishOnStartContainerActivity.java
│ │ │ ├── MviFinishOnStartFragment.java
│ │ │ ├── RetainingFragmentContainerActivity.java
│ │ │ ├── SimpleFragmentContainerActivity.java
│ │ │ ├── SimpleMviLifecycleFragment.java
│ │ │ └── SimpleRetainingMviLifecycleFragment.java
│ │ ├── LifecycleTestPresenter.java
│ │ ├── LifecycleTestView.java
│ │ └── viewgroup
│ │ ├── MviViewGroupContainerActivity.java
│ │ ├── TestMviFrameLayout.java
│ │ ├── ViewGroupFinishOnCreateContainerActivity.java
│ │ ├── ViewGroupFinishOnCreateLayout.java
│ │ └── ViewGroupFinishOnStartContainerActivity.java
│ └── res
│ ├── layout
│ │ ├── activity_backstack_mvi_container.xml
│ │ ├── activity_backstack.xml
│ │ ├── activity_child_mvi_container.xml
│ │ ├── activity_eager_view.xml
│ │ ├── activity_lifecycle.xml
│ │ ├── activity_view_group_finish_on_create_container.xml
│ │ ├── activity_viewgroup_mvi.xml
│ │ ├── content_backstack.xml
│ │ ├── fragment_backstack_first.xml
│ │ ├── fragment_backstack_second.xml
│ │ ├── fragment_child_mvi_container.xml
│ │ └── fragment_mvi.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
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp
│ └── dimens.xml
├── mvp
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvp
│ │ ├── delegate
│ │ │ ├── ActivityMvpDelegateImpl.java
│ │ │ ├── ActivityMvpDelegate.java
│ │ │ ├── FragmentMvpDelegateImpl.java
│ │ │ ├── FragmentMvpDelegate.java
│ │ │ ├── MvpDelegateCallback.java
│ │ │ ├── ViewGroupDelegateCallback.java
│ │ │ ├── ViewGroupMvpDelegateImpl.java
│ │ │ └── ViewGroupMvpDelegate.java
│ │ ├── layout
│ │ │ ├── MvpFrameLayout.java
│ │ │ ├── MvpLinearLayout.java
│ │ │ └── MvpRelativeLayout.java
│ │ ├── MvpActivity.java
│ │ ├── MvpBasePresenter.java
│ │ ├── MvpDialogFragment.java
│ │ └── MvpFragment.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── delegate
│ │ ├── ActivityMvpDelegateImplTest.java
│ │ ├── BundleMocker.java
│ │ ├── FragmentMvpDelegateImplTest.java
│ │ ├── FragmentMvpDelegateUiLessMvpFragmentTest.java
│ │ ├── PartialMvpDelegateCallbackImpl.java
│ │ ├── PartialViewGroupMvpDelegateCallbackImpl.java
│ │ └── ViewGroupMvpDelegateImplTest.java
│ └── MvpBasePresenterTest.java
├── mvp-common
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ └── main
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── MvpPresenter.java
│ └── MvpView.java
├── mvp-lce
│ ├── build.gradle
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── mvp
│ │ │ ├── lce
│ │ │ │ ├── LceAnimator.java
│ │ │ │ ├── MvpLceActivity.java
│ │ │ │ ├── MvpLceDialogFragment.java
│ │ │ │ ├── MvpLceFragment.java
│ │ │ │ └── MvpLceView.java
│ │ │ └── viewstate
│ │ │ └── lce
│ │ │ ├── AbsLceViewState.java
│ │ │ ├── AbsParcelableLceViewState.java
│ │ │ ├── data
│ │ │ │ ├── ArrayListLceViewState.java
│ │ │ │ ├── CastedArrayListLceViewState.java
│ │ │ │ ├── ParcelableDataLceViewState.java
│ │ │ │ ├── ParcelableListLceViewState.java
│ │ │ │ ├── RetainingLceViewState.java
│ │ │ │ ├── SerializeableLceViewState.java
│ │ │ │ └── VoidViewState.java
│ │ │ ├── LceViewState.java
│ │ │ ├── MvpLceViewStateActivity.java
│ │ │ ├── MvpLceViewStateDialogFragment.java
│ │ │ ├── MvpLceViewStateFragment.java
│ │ │ └── ParcelableLceViewState.java
│ │ └── res
│ │ └── values
│ │ ├── dimen.xml
│ │ ├── ids.xml
│ │ └── integers.xml
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ └── viewstate
│ └── LceViewStateTest.java
├── mvp-nullobject-presenter
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── mvp
│ │ │ ├── Defaults.java
│ │ │ ├── MvpNullObjectBasePresenter.java
│ │ │ └── NoOp.java
│ │ └── resources
│ │ └── META-INF
│ │ └── proguard
│ │ └── mvp-nullobject-presenter.pro
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── MvpNullObjectBasePresenterTest.java
│ ├── regression159
│ │ ├── Article.java
│ │ ├── BaseDataPresenter.java
│ │ ├── BaseListArticlesPresenter.java
│ │ ├── BaseListMvp.java
│ │ ├── BaseMvpView.java
│ │ ├── BasePresenter.java
│ │ ├── MvpNullObjectBasePresenterRegression159Test.java
│ │ ├── RecentArticles.java
│ │ └── RecentArticlesPresenter.java
│ └── test
│ ├── data
│ │ └── TestData.java
│ ├── interfaces
│ │ ├── BarInterface.java
│ │ └── FooInterface.java
│ ├── presenter
│ │ ├── NullObjectMvpPresenter.java
│ │ ├── ParameterlessConstructorMvpPresenter.java
│ │ ├── SubMvpPresenter.java
│ │ ├── SubParameterlessConstructorMvpPresenter.java
│ │ └── UselessGenericParamsMvpPresenter.java
│ └── view
│ ├── AnotherMvpView.java
│ ├── SubMvpView.java
│ ├── TestMvpView.java
│ └── TestMvpViewWithMultipleInterfaces.java
├── mvp-queuing-presenter
│ ├── build.gradle
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvp
│ │ └── MvpQueuingBasePresenter.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── MvpQueuingBasePresenterTest.java
│ ├── TestPresenter.java
│ └── TestView.java
├── presentermanager
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ ├── ActivityScopedCache.java
│ │ ├── MosbySavedState.java
│ │ └── PresenterManager.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ ├── MockApplication.java
│ └── PresenterManagerTest.java
├── README.md
├── sample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── README.md
│ └── src
│ ├── debug
│ │ └── res
│ │ ├── drawable-hdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-mdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── leak_canary_icon.png
│ │ └── values
│ │ └── strings.xml
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── sample
│ │ ├── FragmentContainerActivity.java
│ │ ├── MainActivity.java
│ │ ├── mvp
│ │ │ ├── CountriesAdapter.java
│ │ │ ├── CountriesErrorMessage.java
│ │ │ ├── CountriesPresenter.java
│ │ │ ├── CountriesView.java
│ │ │ ├── customviewstate
│ │ │ │ ├── MyCustomActivity.java
│ │ │ │ ├── MyCustomFragment.java
│ │ │ │ ├── MyCustomPresenter.java
│ │ │ │ ├── MyCustomView.java
│ │ │ │ └── MyCustomViewState.java
│ │ │ ├── lce
│ │ │ │ ├── activity
│ │ │ │ │ └── CountriesActivity.java
│ │ │ │ ├── fragment
│ │ │ │ │ └── CountriesFragment.java
│ │ │ │ ├── layout
│ │ │ │ │ ├── CountriesLayoutActivity.java
│ │ │ │ │ └── CountriesLayout.java
│ │ │ │ ├── SimpleCountriesPresenter.java
│ │ │ │ ├── viewpager
│ │ │ │ │ └── ViewPagerActivity.java
│ │ │ │ └── viewstate
│ │ │ │ ├── nested
│ │ │ │ │ ├── NestedFragment.java
│ │ │ │ │ └── NestedViewPagerFragment.java
│ │ │ │ ├── NotRetainingCountriesActivity.java
│ │ │ │ ├── NotRetainingCountriesFragment.java
│ │ │ │ ├── RetainingCountriesActivity.java
│ │ │ │ ├── RetainingCountriesFragmentEmbededInXmlActivity.java
│ │ │ │ └── RetainingCountriesFragment.java
│ │ │ └── model
│ │ │ ├── CountriesAsyncLoader.java
│ │ │ ├── CountryApi.java
│ │ │ ├── Country.java
│ │ │ └── custom
│ │ │ ├── A.java
│ │ │ └── B.java
│ │ └── SampleApplication.java
│ └── res
│ ├── drawable-hdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-mdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-xhdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-xxhdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-xxxhdpi
│ │ └── ic_cloud_off.png
│ ├── layout
│ │ ├── activity_embedded_fragment.xml
│ │ ├── activity_fragment_container.xml
│ │ ├── activity_main.xml
│ │ ├── activity_viewpager.xml
│ │ ├── countries_list.xml
│ │ ├── countries_mvp_layout.xml
│ │ ├── error_view.xml
│ │ ├── fragment_nested_container.xml
│ │ ├── fragment_nested_viewpager.xml
│ │ ├── loading_view.xml
│ │ ├── my_custom_view.xml
│ │ └── row_text.xml
│ ├── menu
│ │ └── menu_main.xml
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ ├── values
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp
│ └── dimens.xml
├── sample-mail
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── libs
│ │ └── easyandroidanimationslibrary-v0.5.jar
│ ├── proguard-rules.pro
│ ├── README.md
│ └── src
│ ├── debug
│ │ └── res
│ │ ├── drawable-hdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-mdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── leak_canary_icon.png
│ │ └── values
│ │ └── strings.xml
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── sample
│ │ │ └── mail
│ │ │ ├── base
│ │ │ │ ├── presenter
│ │ │ │ │ ├── BaseRxAuthPresenter.java
│ │ │ │ │ ├── BaseRxLcePresenter.java
│ │ │ │ │ └── BaseRxMailPresenter.java
│ │ │ │ └── view
│ │ │ │ ├── AuthFragment.java
│ │ │ │ ├── AuthRefreshFragment.java
│ │ │ │ ├── AuthRefreshRecyclerFragment.java
│ │ │ │ ├── AuthView.java
│ │ │ │ ├── BaseActivity.java
│ │ │ │ ├── BaseFragment.java
│ │ │ │ ├── BaseLceActivity.java
│ │ │ │ ├── BaseLceFragment.java
│ │ │ │ ├── BaseMailsFragment.java
│ │ │ │ ├── BaseMailView.java
│ │ │ │ ├── BaseViewStateActivity.java
│ │ │ │ ├── BaseViewStateFragment.java
│ │ │ │ ├── ListAdapter.java
│ │ │ │ └── viewstate
│ │ │ │ ├── AuthCastedArrayListViewState.java
│ │ │ │ ├── AuthParcelableDataViewState.java
│ │ │ │ └── AuthViewState.java
│ │ │ ├── dagger
│ │ │ │ ├── ContacsModule.java
│ │ │ │ ├── MailAppComponent.java
│ │ │ │ ├── MailModule.java
│ │ │ │ └── NavigationModule.java
│ │ │ ├── details
│ │ │ │ ├── DetailsActivity.java
│ │ │ │ ├── DetailsComponent.java
│ │ │ │ ├── DetailsFragment.java
│ │ │ │ ├── DetailsPresenter.java
│ │ │ │ └── DetailsView.java
│ │ │ ├── IntentStarter.java
│ │ │ ├── label
│ │ │ │ ├── LabelAdapter.java
│ │ │ │ ├── LabelLayoutComponent.java
│ │ │ │ ├── LabelLayout.java
│ │ │ │ ├── LabelPresenter.java
│ │ │ │ ├── LabelView.java
│ │ │ │ └── LabelViewState.java
│ │ │ ├── login
│ │ │ │ ├── LoginActivity.java
│ │ │ │ ├── LoginComponent.java
│ │ │ │ ├── LoginFragment.java
│ │ │ │ ├── LoginPresenter.java
│ │ │ │ ├── LoginView.java
│ │ │ │ └── LoginViewState.java
│ │ │ ├── MailApplication.java
│ │ │ ├── mails
│ │ │ │ ├── MailsAdapter.java
│ │ │ │ ├── MailsComponent.java
│ │ │ │ ├── MailsFragment.java
│ │ │ │ ├── MailsPresenter.java
│ │ │ │ └── MailsView.java
│ │ │ ├── MainActivityComponent.java
│ │ │ ├── MainActivity.java
│ │ │ ├── menu
│ │ │ │ ├── MenuAdapter.java
│ │ │ │ ├── MenuComponent.java
│ │ │ │ ├── MenuFragment.java
│ │ │ │ ├── MenuPresenter.java
│ │ │ │ ├── MenuView.java
│ │ │ │ └── MenuViewState.java
│ │ │ ├── model
│ │ │ │ ├── account
│ │ │ │ │ ├── Account.java
│ │ │ │ │ ├── AccountManager.java
│ │ │ │ │ ├── AuthCredentials.java
│ │ │ │ │ ├── DefaultAccountManager.java
│ │ │ │ │ ├── LoginException.java
│ │ │ │ │ └── NotAuthenticatedException.java
│ │ │ │ ├── contact
│ │ │ │ │ ├── ContactsManager.java
│ │ │ │ │ ├── Person.java
│ │ │ │ │ └── ProfileScreen.java
│ │ │ │ ├── event
│ │ │ │ │ ├── LoginSuccessfulEvent.java
│ │ │ │ │ ├── MailLabelChangedEvent.java
│ │ │ │ │ ├── MailReadEvent.java
│ │ │ │ │ ├── MailReceivedEvent.java
│ │ │ │ │ ├── MailSentErrorEvent.java
│ │ │ │ │ ├── MailSentEvent.java
│ │ │ │ │ ├── MailStaredEvent.java
│ │ │ │ │ ├── MailUnstaredEvent.java
│ │ │ │ │ └── NotAuthenticatedEvent.java
│ │ │ │ └── mail
│ │ │ │ ├── Label.java
│ │ │ │ ├── MailComparator.java
│ │ │ │ ├── MailGenerator.java
│ │ │ │ ├── Mail.java
│ │ │ │ ├── MailProvider.java
│ │ │ │ ├── NotFoundException.java
│ │ │ │ ├── RandomMailGenerator.java
│ │ │ │ ├── receiver
│ │ │ │ │ └── MailReceiver.java
│ │ │ │ ├── service
│ │ │ │ │ ├── GcmFakeIntentService.java
│ │ │ │ │ ├── SendMailService.java
│ │ │ │ │ └── ServiceComponent.java
│ │ │ │ └── statistics
│ │ │ │ ├── MailsCount.java
│ │ │ │ └── MailStatistics.java
│ │ │ ├── profile
│ │ │ │ ├── about
│ │ │ │ │ └── AboutFragment.java
│ │ │ │ ├── mails
│ │ │ │ │ ├── ProfileMailsComponent.java
│ │ │ │ │ ├── ProfileMailsFragment.java
│ │ │ │ │ ├── ProfileMailsPresenter.java
│ │ │ │ │ └── ProfileMailsView.java
│ │ │ │ ├── ProfileActivity.java
│ │ │ │ ├── ProfileComponent.java
│ │ │ │ ├── ProfilePresenter.java
│ │ │ │ ├── ProfileScreensAdapter.java
│ │ │ │ └── ProfileView.java
│ │ │ ├── search
│ │ │ │ ├── SearchActivity.java
│ │ │ │ ├── SearchComponent.java
│ │ │ │ ├── SearchFragment.java
│ │ │ │ ├── SearchPresenter.java
│ │ │ │ ├── SearchResultAdapter.java
│ │ │ │ ├── SearchView.java
│ │ │ │ └── SearchViewState.java
│ │ │ ├── statistics
│ │ │ │ ├── StatisticsAdapter.java
│ │ │ │ ├── StatisticsComponent.java
│ │ │ │ ├── StatisticsDialog.java
│ │ │ │ ├── StatisticsPresenter.java
│ │ │ │ └── StatisticsView.java
│ │ │ ├── ui
│ │ │ │ ├── event
│ │ │ │ │ ├── ShowMailDetailsEvent.java
│ │ │ │ │ └── ShowMailsOfLabelEvent.java
│ │ │ │ ├── transition
│ │ │ │ │ ├── ExcludedExplodeTransition.java
│ │ │ │ │ ├── ExplodeFadeEnterTransition.java
│ │ │ │ │ ├── ExplodeFadeExitTransition.java
│ │ │ │ │ ├── PauseableAnimator.java
│ │ │ │ │ ├── RevealTransition.java
│ │ │ │ │ ├── RevealVisibilityTransition.java
│ │ │ │ │ ├── TextSizeEnterSharedElementCallback.java
│ │ │ │ │ └── TextSizeTransition.java
│ │ │ │ └── view
│ │ │ │ └── StarView.java
│ │ │ ├── utils
│ │ │ │ ├── BuildUtils.java
│ │ │ │ ├── DimensUtils.java
│ │ │ │ ├── KeyboardUtils.java
│ │ │ │ ├── MathUtils.java
│ │ │ │ └── SimpleAdapter.java
│ │ │ └── write
│ │ │ ├── WriteActivity.java
│ │ │ ├── WriteComponent.java
│ │ │ ├── WritePresenter.java
│ │ │ ├── WriteView.java
│ │ │ └── WriteViewState.java
│ │ └── res
│ │ ├── anim
│ │ │ ├── fade_in.xml
│ │ │ ├── fade_out.xml
│ │ │ ├── pulse.xml
│ │ │ ├── shake_interpolator.xml
│ │ │ ├── shake.xml
│ │ │ └── zoom_out.xml
│ │ ├── color
│ │ │ └── label_layout_button.xml
│ │ ├── drawable
│ │ │ ├── barney.jpeg
│ │ │ ├── label_view_background.xml
│ │ │ ├── lily.jpg
│ │ │ ├── marshall.jpeg
│ │ │ ├── menu_unread_count.xml
│ │ │ ├── profile_background.jpg
│ │ │ ├── robin.jpg
│ │ │ ├── ted.jpg
│ │ │ ├── text_cursor.xml
│ │ │ └── unknown.jpg
│ │ ├── drawable-hdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-mdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-xhdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-xxhdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-xxxhdpi
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ └── ic_username.png
│ │ ├── layout
│ │ │ ├── activity_login.xml
│ │ │ ├── activity_mail_details.xml
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_profile.xml
│ │ │ ├── activity_search.xml
│ │ │ ├── activity_write.xml
│ │ │ ├── fragment_about.xml
│ │ │ ├── fragment_login.xml
│ │ │ ├── fragment_mail_details.xml
│ │ │ ├── fragment_mails_base.xml
│ │ │ ├── fragment_mails.xml
│ │ │ ├── fragment_menu.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_statistics.xml
│ │ │ ├── list_labelview_item.xml
│ │ │ ├── list_load_more.xml
│ │ │ ├── list_mail_item.xml
│ │ │ ├── list_menu_item.xml
│ │ │ ├── list_menu_statistics.xml
│ │ │ ├── list_statistics.xml
│ │ │ ├── merge_mails.xml
│ │ │ ├── merge_main_split_pane.xml
│ │ │ ├── view_authentication_required.xml
│ │ │ ├── view_error.xml
│ │ │ ├── view_label_layout.xml
│ │ │ └── view_loading.xml
│ │ ├── layout-sw600dp
│ │ │ ├── activity_mail_details.xml
│ │ │ └── merge_main_split_pane.xml
│ │ ├── menu
│ │ │ └── search_menu.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
│ │ │ ├── booleans.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-land
│ │ │ └── dimens.xml
│ │ ├── values-sw360dp
│ │ │ └── dimens.xml
│ │ ├── values-sw384dp
│ │ │ └── dimens.xml
│ │ ├── values-sw600dp
│ │ │ ├── booleans.xml
│ │ │ ├── dimens.xml
│ │ │ └── values.xml
│ │ ├── values-v21
│ │ │ └── styles.xml
│ │ └── values-w820dp
│ │ └── dimens.xml
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── sample
│ └── mail
│ ├── login
│ │ └── LoginViewStateTest.java
│ └── model
│ ├── account
│ │ └── DefaultAccountManagerTest.java
│ └── mail
│ ├── MailProviderTest.java
│ ├── TestAccountManager.java
│ └── TestMailGenerator.java
├── sample-mvi
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── README.md
│ ├── server
│ │ ├── api
│ │ │ ├── products0.json
│ │ │ ├── products1.json
│ │ │ ├── products2.json
│ │ │ ├── products3.json
│ │ │ └── products4.json
│ │ └── images
│ │ ├── 10.jpg
│ │ ├── 11.jpg
│ │ ├── 12.jpg
│ │ ├── 13.jpg
│ │ ├── 14.jpg
│ │ ├── 15.jpg
│ │ ├── 16.jpg
│ │ ├── 17.jpg
│ │ ├── 18.jpg
│ │ ├── 19.jpg
│ │ ├── -1.jpg
│ │ ├── 1.jpg
│ │ ├── 20.jpg
│ │ ├── 21.jpg
│ │ ├── 22.jpg
│ │ ├── 23.jpg
│ │ ├── 24.jpg
│ │ ├── 25.jpg
│ │ ├── 26.jpg
│ │ ├── 27.jpg
│ │ ├── 28.jpg
│ │ ├── 29.jpg
│ │ ├── -2.jpg
│ │ ├── 2.jpg
│ │ ├── 30.jpg
│ │ ├── 31.jpg
│ │ ├── 32.jpg
│ │ ├── 33.jpg
│ │ ├── 34.jpg
│ │ ├── -3.jpg
│ │ ├── 3.jpg
│ │ ├── -4.jpg
│ │ ├── 4.jpg
│ │ ├── -5.jpg
│ │ ├── 5.jpg
│ │ ├── -6.jpg
│ │ ├── 6.jpg
│ │ ├── 7.jpg
│ │ ├── 8.jpg
│ │ └── 9.jpg
│ └── src
│ ├── debug
│ │ └── res
│ │ ├── drawable-hdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-mdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── leak_canary_icon.png
│ │ └── values
│ │ └── strings.xml
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── sample
│ │ │ └── mvi
│ │ │ ├── businesslogic
│ │ │ │ ├── feed
│ │ │ │ │ ├── GroupedPagedFeedLoader.java
│ │ │ │ │ ├── HomeFeedLoader.java
│ │ │ │ │ └── PagingFeedLoader.java
│ │ │ │ ├── http
│ │ │ │ │ ├── ProductBackendApiDecorator.java
│ │ │ │ │ └── ProductBackendApi.java
│ │ │ │ ├── interactor
│ │ │ │ │ ├── details
│ │ │ │ │ │ ├── DetailsInteractor.java
│ │ │ │ │ │ └── ProductDetailsViewState.java
│ │ │ │ │ └── search
│ │ │ │ │ ├── SearchInteractor.java
│ │ │ │ │ └── SearchViewState.java
│ │ │ │ ├── model
│ │ │ │ │ ├── AdditionalItemsLoadable.java
│ │ │ │ │ ├── FeedItem.java
│ │ │ │ │ ├── MainMenuItem.java
│ │ │ │ │ ├── ProductDetail.java
│ │ │ │ │ ├── Product.java
│ │ │ │ │ └── SectionHeader.java
│ │ │ │ ├── searchengine
│ │ │ │ │ └── SearchEngine.java
│ │ │ │ └── ShoppingCart.java
│ │ │ ├── dependencyinjection
│ │ │ │ └── DependencyInjection.java
│ │ │ ├── MainActivity.java
│ │ │ ├── SampleApplication.java
│ │ │ └── view
│ │ │ ├── category
│ │ │ │ ├── CategoryAdapter.java
│ │ │ │ ├── CategoryFragment.java
│ │ │ │ ├── CategoryPresenter.java
│ │ │ │ ├── CategoryView.java
│ │ │ │ └── CategoryViewState.java
│ │ │ ├── checkoutbutton
│ │ │ │ ├── CheckoutButton.java
│ │ │ │ ├── CheckoutButtonPresenter.java
│ │ │ │ └── CheckoutButtonView.java
│ │ │ ├── detail
│ │ │ │ ├── ProductDetailsActivity.java
│ │ │ │ ├── ProductDetailsPresenter.java
│ │ │ │ └── ProductDetailsView.java
│ │ │ ├── home
│ │ │ │ ├── HomeAdapter.java
│ │ │ │ ├── HomeFragment.java
│ │ │ │ ├── HomePresenter.java
│ │ │ │ ├── HomeView.java
│ │ │ │ ├── HomeViewState.java
│ │ │ │ └── PartialStateChanges.java
│ │ │ ├── menu
│ │ │ │ ├── MainMenuAdapter.java
│ │ │ │ ├── MainMenuLayout.java
│ │ │ │ ├── MainMenuPresenter.java
│ │ │ │ ├── MainMenuView.java
│ │ │ │ └── MenuViewState.java
│ │ │ ├── search
│ │ │ │ ├── SearchAdapter.java
│ │ │ │ ├── SearchFragment.java
│ │ │ │ ├── SearchPresenter.java
│ │ │ │ └── SearchView.java
│ │ │ ├── selectedcounttoolbar
│ │ │ │ ├── SelectedCountToolbar.java
│ │ │ │ ├── SelectedCountToolbarPresenter.java
│ │ │ │ └── SelectedCountToolbarView.java
│ │ │ ├── shoppingcartlabel
│ │ │ │ ├── ShoppingCartLabel.java
│ │ │ │ ├── ShoppingCartLabelPresenter.java
│ │ │ │ └── ShoppingCartLabelView.java
│ │ │ ├── shoppingcartoverview
│ │ │ │ ├── ShoppingCartOverviewAdapter.java
│ │ │ │ ├── ShoppingCartOverviewFragment.java
│ │ │ │ ├── ShoppingCartOverviewItem.java
│ │ │ │ ├── ShoppingCartOverviewPresenter.java
│ │ │ │ └── ShoppingCartOverviewView.java
│ │ │ └── ui
│ │ │ ├── AspectRatioImageView.java
│ │ │ ├── GridSpacingItemDecoration.java
│ │ │ └── viewholder
│ │ │ ├── LoadingViewHolder.java
│ │ │ ├── MainMenuViewHolder.java
│ │ │ ├── MoreItemsViewHolder.java
│ │ │ ├── ProductViewHolder.java
│ │ │ ├── SectionHederViewHolder.java
│ │ │ └── ShoppingCartItemViewHolder.java
│ │ └── res
│ │ ├── drawable
│ │ │ ├── main_menu_item_background.xml
│ │ │ └── side_nav_bar.xml
│ │ ├── drawable-hdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ ├── ic_shopping_enabled.png
│ │ │ └── search_big.png
│ │ ├── drawable-mdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ └── ic_shopping_enabled.png
│ │ ├── drawable-v21
│ │ │ ├── ic_menu_camera.xml
│ │ │ ├── ic_menu_gallery.xml
│ │ │ ├── ic_menu_manage.xml
│ │ │ ├── ic_menu_send.xml
│ │ │ ├── ic_menu_share.xml
│ │ │ └── ic_menu_slideshow.xml
│ │ ├── drawable-xhdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ ├── ic_shopping_enabled.png
│ │ │ └── search_big.png
│ │ ├── drawable-xxhdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ ├── ic_shopping_enabled.png
│ │ │ └── search_big.png
│ │ ├── drawable-xxxhdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ └── search_big.png
│ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_product_detail.xml
│ │ │ ├── fragment_category.xml
│ │ │ ├── fragment_home.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_shopping_cart.xml
│ │ │ ├── include_errorview.xml
│ │ │ ├── item_loading.xml
│ │ │ ├── item_main_menu.xml
│ │ │ ├── item_more_available.xml
│ │ │ ├── item_product.xml
│ │ │ ├── item_section_header.xml
│ │ │ ├── item_shopping_cart.xml
│ │ │ └── view_mainmenu.xml
│ │ ├── menu
│ │ │ ├── activity_main_toolbar.xml
│ │ │ └── shopping_cart_toolbar.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
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── drawables.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-land
│ │ │ └── integers.xml
│ │ ├── values-v21
│ │ │ └── styles.xml
│ │ └── values-w820dp
│ │ └── dimens.xml
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── sample
│ └── mvi
│ └── view
│ └── home
│ ├── HomePresenterTest.java
│ └── HomeViewRobot.java
├── settings.gradle
├── utils-fragment
│ ├── build.gradle
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── android
│ └── support
│ └── v4
│ └── app
│ └── BackstackAccessor.java
├── utils-fragment-integration-test
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ ├── androidTest
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── utils
│ │ └── fragment
│ │ └── integrationtest
│ │ └── backstack
│ │ ├── AddFragmentTransactionActivityTest.java
│ │ ├── BackstackActivityWithChildFragmentsTest.java
│ │ └── ReplaceFragmentTransactionActivityTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── utils
│ │ └── fragment
│ │ └── integrationtest
│ │ └── backstack
│ │ ├── AddFragmentTransactionActivity.java
│ │ ├── AddTransactionFragment.java
│ │ ├── BackstackActivityWithChildFragments.java
│ │ ├── ChildChildFragmentOnBackstack.java
│ │ ├── ChildFragmentOnBackstack.java
│ │ ├── FragmentOnBackstack.java
│ │ ├── ReplaceFragmentTransactionActivity.java
│ │ ├── ReplaceTransactionFragment.java
│ │ ├── SimpleChildChildFragmentNotOnBackstack.java
│ │ ├── SimpleChildFragmentNotOnBackstack.java
│ │ └── SimpleFragmentNotOnBackstack.java
│ └── res
│ ├── layout
│ │ ├── activity_backstack.xml
│ │ ├── activity_container.xml
│ │ ├── fragment_child_child.xml
│ │ └── fragment_child.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
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp
│ └── dimens.xml
└── viewstate
├── build.gradle
├── findbugs-filter.xml
├── gradle.properties
├── proguard-rules.pro
└── src
├── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── delegate
│ │ ├── ActivityMvpViewStateDelegateImpl.java
│ │ ├── FragmentMvpViewStateDelegateImpl.java
│ │ ├── MosbyViewStateSavedState.java
│ │ ├── MvpViewStateDelegateCallback.java
│ │ ├── ViewGroupMvpViewStateDelegateCallback.java
│ │ └── ViewGroupMvpViewStateDelegateImpl.java
│ └── viewstate
│ ├── layout
│ │ ├── MvpViewStateFrameLayout.java
│ │ ├── MvpViewStateLinearLayout.java
│ │ └── MvpViewStateRelativeLayout.java
│ ├── MvpViewStateActivity.java
│ ├── MvpViewStateFragment.java
│ ├── RestorableParcelableViewState.java
│ ├── RestorableViewState.java
│ └── ViewState.java
└── test
└── java
└── com
└── hannesdorfmann
└── mosby3
└── mvp
└── delegate
├── ActivityMvpViewStateDelegateImplTestNew.java
├── BundleMocker.java
├── FragmentMvpViewStateDelegateImplTest.java
├── PartialMvpViewStateDelegateCallbackImpl.java
├── PartialViewGroupMvpViewStateDelegateCallbackImpl.java
├── SimpleRestorableViewState.java
└── ViewGroupMvpViewStateDelegateImplTest.java
410 directories, 841 files
mosby:用于现代Android应用的Model-View-Presenter / Model-View-Intent库源码下载。Mosby是一个用于Android应用的Model-View-Presenter和Model-View-Intent库。
【实例截图】
【核心代码】
文件清单
└── mosby-c234625fdfb46ce7fe2a0695a6272953db20865f
├── build.gradle
├── circle.yml
├── deploy_javadoc.sh
├── findbugs.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── maven-push.gradle
├── maven-push-java-lib.gradle
├── mvi
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ ├── ActivityMviDelegateImpl.java
│ ├── ActivityMviDelegate.java
│ ├── FragmentMviDelegateImpl.java
│ ├── FragmentMviDelegate.java
│ ├── mvi
│ │ ├── layout
│ │ │ ├── MviFrameLayout.java
│ │ │ ├── MviLinearLayout.java
│ │ │ └── MviRelativeLayout.java
│ │ ├── MviActivity.java
│ │ ├── MviDialogFragment.java
│ │ └── MviFragment.java
│ ├── MviDelegateCallback.java
│ ├── ViewGroupMviDelegateCallback.java
│ ├── ViewGroupMviDelegateImpl.java
│ └── ViewGroupMviDelegate.java
├── mvi-common
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvi
│ │ ├── DisposableIntentObserver.java
│ │ ├── DisposableViewStateObserver.java
│ │ ├── MviBasePresenter.java
│ │ └── MviPresenter.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvi
│ ├── DisposableIntentObserverTest.java
│ ├── EagerObservableTest.java
│ ├── EagerViewStartWithTest.java
│ └── MviBasePresenterTest.java
├── mvi-integration-test
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── README.md
│ └── src
│ ├── androidTest
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvi
│ │ ├── backstack
│ │ │ └── BackstackActivityTest.java
│ │ ├── eager
│ │ │ └── EagerActivityTest.java
│ │ └── integrationtest
│ │ └── lifecycle
│ │ ├── activity
│ │ │ ├── MviFinishInOnCreateActivityTest.java
│ │ │ ├── MviFinishInOnStartActivityTest.java
│ │ │ └── MviLifecycleActivityTest.java
│ │ ├── fragment
│ │ │ ├── childfragment
│ │ │ │ └── MviLifecycleChildFragmentActivityTest.java
│ │ │ ├── MviFinishFragmentOnCreateTest.java
│ │ │ ├── MviFinishFragmentOnStartTest.java
│ │ │ ├── RetainingFragmentContainerActivityTest.java
│ │ │ └── SimpleFragmentContainerActivityTest.java
│ │ └── viewgroup
│ │ ├── MviViewGroupContainerActivityTest2.java
│ │ ├── MviViewGroupContainerActivityTest.java
│ │ ├── MviViewGroupFinishOnCreateTest.java
│ │ └── MviViewGroupFinishOnStartTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvi
│ │ └── integrationtest
│ │ ├── backstack
│ │ │ ├── BackstackActivity.java
│ │ │ ├── first
│ │ │ │ ├── FirstMviFragment.java
│ │ │ │ ├── FirstPresenter.java
│ │ │ │ └── FirstView.java
│ │ │ └── second
│ │ │ ├── SecondMviFragment.java
│ │ │ ├── SecondPresenter.java
│ │ │ └── SecondView.java
│ │ ├── eager
│ │ │ ├── EagerPresenter.java
│ │ │ ├── EagerViewActivity.java
│ │ │ └── EagerView.java
│ │ └── lifecycle
│ │ ├── activity
│ │ │ ├── MviFinishInOnCreateActivity.java
│ │ │ ├── MviFinishInOnStartActivity.java
│ │ │ └── MviLifecycleActivity.java
│ │ ├── fragment
│ │ │ ├── backstack
│ │ │ │ ├── FirstBackstackMviLifecycleFragment.java
│ │ │ │ ├── MviLifecycleBackstackActivity.java
│ │ │ │ └── SecondBackstackMviLifecycleFragment.java
│ │ │ ├── childfragment
│ │ │ │ ├── ContainerMviLifecycleFragment.java
│ │ │ │ ├── MviLifecycleChildFragmentActivity.java
│ │ │ │ └── MviLifecycleChildFragment.java
│ │ │ ├── MviFinishOnCreateContainerActivity.java
│ │ │ ├── MviFinishOnCreateFragment.java
│ │ │ ├── MviFinishOnStartContainerActivity.java
│ │ │ ├── MviFinishOnStartFragment.java
│ │ │ ├── RetainingFragmentContainerActivity.java
│ │ │ ├── SimpleFragmentContainerActivity.java
│ │ │ ├── SimpleMviLifecycleFragment.java
│ │ │ └── SimpleRetainingMviLifecycleFragment.java
│ │ ├── LifecycleTestPresenter.java
│ │ ├── LifecycleTestView.java
│ │ └── viewgroup
│ │ ├── MviViewGroupContainerActivity.java
│ │ ├── TestMviFrameLayout.java
│ │ ├── ViewGroupFinishOnCreateContainerActivity.java
│ │ ├── ViewGroupFinishOnCreateLayout.java
│ │ └── ViewGroupFinishOnStartContainerActivity.java
│ └── res
│ ├── layout
│ │ ├── activity_backstack_mvi_container.xml
│ │ ├── activity_backstack.xml
│ │ ├── activity_child_mvi_container.xml
│ │ ├── activity_eager_view.xml
│ │ ├── activity_lifecycle.xml
│ │ ├── activity_view_group_finish_on_create_container.xml
│ │ ├── activity_viewgroup_mvi.xml
│ │ ├── content_backstack.xml
│ │ ├── fragment_backstack_first.xml
│ │ ├── fragment_backstack_second.xml
│ │ ├── fragment_child_mvi_container.xml
│ │ └── fragment_mvi.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
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp
│ └── dimens.xml
├── mvp
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvp
│ │ ├── delegate
│ │ │ ├── ActivityMvpDelegateImpl.java
│ │ │ ├── ActivityMvpDelegate.java
│ │ │ ├── FragmentMvpDelegateImpl.java
│ │ │ ├── FragmentMvpDelegate.java
│ │ │ ├── MvpDelegateCallback.java
│ │ │ ├── ViewGroupDelegateCallback.java
│ │ │ ├── ViewGroupMvpDelegateImpl.java
│ │ │ └── ViewGroupMvpDelegate.java
│ │ ├── layout
│ │ │ ├── MvpFrameLayout.java
│ │ │ ├── MvpLinearLayout.java
│ │ │ └── MvpRelativeLayout.java
│ │ ├── MvpActivity.java
│ │ ├── MvpBasePresenter.java
│ │ ├── MvpDialogFragment.java
│ │ └── MvpFragment.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── delegate
│ │ ├── ActivityMvpDelegateImplTest.java
│ │ ├── BundleMocker.java
│ │ ├── FragmentMvpDelegateImplTest.java
│ │ ├── FragmentMvpDelegateUiLessMvpFragmentTest.java
│ │ ├── PartialMvpDelegateCallbackImpl.java
│ │ ├── PartialViewGroupMvpDelegateCallbackImpl.java
│ │ └── ViewGroupMvpDelegateImplTest.java
│ └── MvpBasePresenterTest.java
├── mvp-common
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ └── main
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── MvpPresenter.java
│ └── MvpView.java
├── mvp-lce
│ ├── build.gradle
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── mvp
│ │ │ ├── lce
│ │ │ │ ├── LceAnimator.java
│ │ │ │ ├── MvpLceActivity.java
│ │ │ │ ├── MvpLceDialogFragment.java
│ │ │ │ ├── MvpLceFragment.java
│ │ │ │ └── MvpLceView.java
│ │ │ └── viewstate
│ │ │ └── lce
│ │ │ ├── AbsLceViewState.java
│ │ │ ├── AbsParcelableLceViewState.java
│ │ │ ├── data
│ │ │ │ ├── ArrayListLceViewState.java
│ │ │ │ ├── CastedArrayListLceViewState.java
│ │ │ │ ├── ParcelableDataLceViewState.java
│ │ │ │ ├── ParcelableListLceViewState.java
│ │ │ │ ├── RetainingLceViewState.java
│ │ │ │ ├── SerializeableLceViewState.java
│ │ │ │ └── VoidViewState.java
│ │ │ ├── LceViewState.java
│ │ │ ├── MvpLceViewStateActivity.java
│ │ │ ├── MvpLceViewStateDialogFragment.java
│ │ │ ├── MvpLceViewStateFragment.java
│ │ │ └── ParcelableLceViewState.java
│ │ └── res
│ │ └── values
│ │ ├── dimen.xml
│ │ ├── ids.xml
│ │ └── integers.xml
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ └── viewstate
│ └── LceViewStateTest.java
├── mvp-nullobject-presenter
│ ├── build.gradle
│ ├── gradle.properties
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── mvp
│ │ │ ├── Defaults.java
│ │ │ ├── MvpNullObjectBasePresenter.java
│ │ │ └── NoOp.java
│ │ └── resources
│ │ └── META-INF
│ │ └── proguard
│ │ └── mvp-nullobject-presenter.pro
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── MvpNullObjectBasePresenterTest.java
│ ├── regression159
│ │ ├── Article.java
│ │ ├── BaseDataPresenter.java
│ │ ├── BaseListArticlesPresenter.java
│ │ ├── BaseListMvp.java
│ │ ├── BaseMvpView.java
│ │ ├── BasePresenter.java
│ │ ├── MvpNullObjectBasePresenterRegression159Test.java
│ │ ├── RecentArticles.java
│ │ └── RecentArticlesPresenter.java
│ └── test
│ ├── data
│ │ └── TestData.java
│ ├── interfaces
│ │ ├── BarInterface.java
│ │ └── FooInterface.java
│ ├── presenter
│ │ ├── NullObjectMvpPresenter.java
│ │ ├── ParameterlessConstructorMvpPresenter.java
│ │ ├── SubMvpPresenter.java
│ │ ├── SubParameterlessConstructorMvpPresenter.java
│ │ └── UselessGenericParamsMvpPresenter.java
│ └── view
│ ├── AnotherMvpView.java
│ ├── SubMvpView.java
│ ├── TestMvpView.java
│ └── TestMvpViewWithMultipleInterfaces.java
├── mvp-queuing-presenter
│ ├── build.gradle
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── mvp
│ │ └── MvpQueuingBasePresenter.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── MvpQueuingBasePresenterTest.java
│ ├── TestPresenter.java
│ └── TestView.java
├── presentermanager
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ ├── ActivityScopedCache.java
│ │ ├── MosbySavedState.java
│ │ └── PresenterManager.java
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ ├── MockApplication.java
│ └── PresenterManagerTest.java
├── README.md
├── sample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── README.md
│ └── src
│ ├── debug
│ │ └── res
│ │ ├── drawable-hdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-mdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── leak_canary_icon.png
│ │ └── values
│ │ └── strings.xml
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── sample
│ │ ├── FragmentContainerActivity.java
│ │ ├── MainActivity.java
│ │ ├── mvp
│ │ │ ├── CountriesAdapter.java
│ │ │ ├── CountriesErrorMessage.java
│ │ │ ├── CountriesPresenter.java
│ │ │ ├── CountriesView.java
│ │ │ ├── customviewstate
│ │ │ │ ├── MyCustomActivity.java
│ │ │ │ ├── MyCustomFragment.java
│ │ │ │ ├── MyCustomPresenter.java
│ │ │ │ ├── MyCustomView.java
│ │ │ │ └── MyCustomViewState.java
│ │ │ ├── lce
│ │ │ │ ├── activity
│ │ │ │ │ └── CountriesActivity.java
│ │ │ │ ├── fragment
│ │ │ │ │ └── CountriesFragment.java
│ │ │ │ ├── layout
│ │ │ │ │ ├── CountriesLayoutActivity.java
│ │ │ │ │ └── CountriesLayout.java
│ │ │ │ ├── SimpleCountriesPresenter.java
│ │ │ │ ├── viewpager
│ │ │ │ │ └── ViewPagerActivity.java
│ │ │ │ └── viewstate
│ │ │ │ ├── nested
│ │ │ │ │ ├── NestedFragment.java
│ │ │ │ │ └── NestedViewPagerFragment.java
│ │ │ │ ├── NotRetainingCountriesActivity.java
│ │ │ │ ├── NotRetainingCountriesFragment.java
│ │ │ │ ├── RetainingCountriesActivity.java
│ │ │ │ ├── RetainingCountriesFragmentEmbededInXmlActivity.java
│ │ │ │ └── RetainingCountriesFragment.java
│ │ │ └── model
│ │ │ ├── CountriesAsyncLoader.java
│ │ │ ├── CountryApi.java
│ │ │ ├── Country.java
│ │ │ └── custom
│ │ │ ├── A.java
│ │ │ └── B.java
│ │ └── SampleApplication.java
│ └── res
│ ├── drawable-hdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-mdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-xhdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-xxhdpi
│ │ └── ic_cloud_off.png
│ ├── drawable-xxxhdpi
│ │ └── ic_cloud_off.png
│ ├── layout
│ │ ├── activity_embedded_fragment.xml
│ │ ├── activity_fragment_container.xml
│ │ ├── activity_main.xml
│ │ ├── activity_viewpager.xml
│ │ ├── countries_list.xml
│ │ ├── countries_mvp_layout.xml
│ │ ├── error_view.xml
│ │ ├── fragment_nested_container.xml
│ │ ├── fragment_nested_viewpager.xml
│ │ ├── loading_view.xml
│ │ ├── my_custom_view.xml
│ │ └── row_text.xml
│ ├── menu
│ │ └── menu_main.xml
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ ├── values
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp
│ └── dimens.xml
├── sample-mail
│ ├── build.gradle
│ ├── findbugs-filter.xml
│ ├── libs
│ │ └── easyandroidanimationslibrary-v0.5.jar
│ ├── proguard-rules.pro
│ ├── README.md
│ └── src
│ ├── debug
│ │ └── res
│ │ ├── drawable-hdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-mdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── leak_canary_icon.png
│ │ └── values
│ │ └── strings.xml
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── sample
│ │ │ ├── base
│ │ │ │ ├── presenter
│ │ │ │ │ ├── BaseRxAuthPresenter.java
│ │ │ │ │ ├── BaseRxLcePresenter.java
│ │ │ │ │ └── BaseRxMailPresenter.java
│ │ │ │ └── view
│ │ │ │ ├── AuthFragment.java
│ │ │ │ ├── AuthRefreshFragment.java
│ │ │ │ ├── AuthRefreshRecyclerFragment.java
│ │ │ │ ├── AuthView.java
│ │ │ │ ├── BaseActivity.java
│ │ │ │ ├── BaseFragment.java
│ │ │ │ ├── BaseLceActivity.java
│ │ │ │ ├── BaseLceFragment.java
│ │ │ │ ├── BaseMailsFragment.java
│ │ │ │ ├── BaseMailView.java
│ │ │ │ ├── BaseViewStateActivity.java
│ │ │ │ ├── BaseViewStateFragment.java
│ │ │ │ ├── ListAdapter.java
│ │ │ │ └── viewstate
│ │ │ │ ├── AuthCastedArrayListViewState.java
│ │ │ │ ├── AuthParcelableDataViewState.java
│ │ │ │ └── AuthViewState.java
│ │ │ ├── dagger
│ │ │ │ ├── ContacsModule.java
│ │ │ │ ├── MailAppComponent.java
│ │ │ │ ├── MailModule.java
│ │ │ │ └── NavigationModule.java
│ │ │ ├── details
│ │ │ │ ├── DetailsActivity.java
│ │ │ │ ├── DetailsComponent.java
│ │ │ │ ├── DetailsFragment.java
│ │ │ │ ├── DetailsPresenter.java
│ │ │ │ └── DetailsView.java
│ │ │ ├── IntentStarter.java
│ │ │ ├── label
│ │ │ │ ├── LabelAdapter.java
│ │ │ │ ├── LabelLayoutComponent.java
│ │ │ │ ├── LabelLayout.java
│ │ │ │ ├── LabelPresenter.java
│ │ │ │ ├── LabelView.java
│ │ │ │ └── LabelViewState.java
│ │ │ ├── login
│ │ │ │ ├── LoginActivity.java
│ │ │ │ ├── LoginComponent.java
│ │ │ │ ├── LoginFragment.java
│ │ │ │ ├── LoginPresenter.java
│ │ │ │ ├── LoginView.java
│ │ │ │ └── LoginViewState.java
│ │ │ ├── MailApplication.java
│ │ │ ├── mails
│ │ │ │ ├── MailsAdapter.java
│ │ │ │ ├── MailsComponent.java
│ │ │ │ ├── MailsFragment.java
│ │ │ │ ├── MailsPresenter.java
│ │ │ │ └── MailsView.java
│ │ │ ├── MainActivityComponent.java
│ │ │ ├── MainActivity.java
│ │ │ ├── menu
│ │ │ │ ├── MenuAdapter.java
│ │ │ │ ├── MenuComponent.java
│ │ │ │ ├── MenuFragment.java
│ │ │ │ ├── MenuPresenter.java
│ │ │ │ ├── MenuView.java
│ │ │ │ └── MenuViewState.java
│ │ │ ├── model
│ │ │ │ ├── account
│ │ │ │ │ ├── Account.java
│ │ │ │ │ ├── AccountManager.java
│ │ │ │ │ ├── AuthCredentials.java
│ │ │ │ │ ├── DefaultAccountManager.java
│ │ │ │ │ ├── LoginException.java
│ │ │ │ │ └── NotAuthenticatedException.java
│ │ │ │ ├── contact
│ │ │ │ │ ├── ContactsManager.java
│ │ │ │ │ ├── Person.java
│ │ │ │ │ └── ProfileScreen.java
│ │ │ │ ├── event
│ │ │ │ │ ├── LoginSuccessfulEvent.java
│ │ │ │ │ ├── MailLabelChangedEvent.java
│ │ │ │ │ ├── MailReadEvent.java
│ │ │ │ │ ├── MailReceivedEvent.java
│ │ │ │ │ ├── MailSentErrorEvent.java
│ │ │ │ │ ├── MailSentEvent.java
│ │ │ │ │ ├── MailStaredEvent.java
│ │ │ │ │ ├── MailUnstaredEvent.java
│ │ │ │ │ └── NotAuthenticatedEvent.java
│ │ │ │ ├── Label.java
│ │ │ │ ├── MailComparator.java
│ │ │ │ ├── MailGenerator.java
│ │ │ │ ├── Mail.java
│ │ │ │ ├── MailProvider.java
│ │ │ │ ├── NotFoundException.java
│ │ │ │ ├── RandomMailGenerator.java
│ │ │ │ ├── receiver
│ │ │ │ │ └── MailReceiver.java
│ │ │ │ ├── service
│ │ │ │ │ ├── GcmFakeIntentService.java
│ │ │ │ │ ├── SendMailService.java
│ │ │ │ │ └── ServiceComponent.java
│ │ │ │ └── statistics
│ │ │ │ ├── MailsCount.java
│ │ │ │ └── MailStatistics.java
│ │ │ ├── profile
│ │ │ │ ├── about
│ │ │ │ │ └── AboutFragment.java
│ │ │ │ ├── mails
│ │ │ │ │ ├── ProfileMailsComponent.java
│ │ │ │ │ ├── ProfileMailsFragment.java
│ │ │ │ │ ├── ProfileMailsPresenter.java
│ │ │ │ │ └── ProfileMailsView.java
│ │ │ │ ├── ProfileActivity.java
│ │ │ │ ├── ProfileComponent.java
│ │ │ │ ├── ProfilePresenter.java
│ │ │ │ ├── ProfileScreensAdapter.java
│ │ │ │ └── ProfileView.java
│ │ │ ├── search
│ │ │ │ ├── SearchActivity.java
│ │ │ │ ├── SearchComponent.java
│ │ │ │ ├── SearchFragment.java
│ │ │ │ ├── SearchPresenter.java
│ │ │ │ ├── SearchResultAdapter.java
│ │ │ │ ├── SearchView.java
│ │ │ │ └── SearchViewState.java
│ │ │ ├── statistics
│ │ │ │ ├── StatisticsAdapter.java
│ │ │ │ ├── StatisticsComponent.java
│ │ │ │ ├── StatisticsDialog.java
│ │ │ │ ├── StatisticsPresenter.java
│ │ │ │ └── StatisticsView.java
│ │ │ ├── ui
│ │ │ │ ├── event
│ │ │ │ │ ├── ShowMailDetailsEvent.java
│ │ │ │ │ └── ShowMailsOfLabelEvent.java
│ │ │ │ ├── transition
│ │ │ │ │ ├── ExcludedExplodeTransition.java
│ │ │ │ │ ├── ExplodeFadeEnterTransition.java
│ │ │ │ │ ├── ExplodeFadeExitTransition.java
│ │ │ │ │ ├── PauseableAnimator.java
│ │ │ │ │ ├── RevealTransition.java
│ │ │ │ │ ├── RevealVisibilityTransition.java
│ │ │ │ │ ├── TextSizeEnterSharedElementCallback.java
│ │ │ │ │ └── TextSizeTransition.java
│ │ │ │ └── view
│ │ │ │ └── StarView.java
│ │ │ ├── utils
│ │ │ │ ├── BuildUtils.java
│ │ │ │ ├── DimensUtils.java
│ │ │ │ ├── KeyboardUtils.java
│ │ │ │ ├── MathUtils.java
│ │ │ │ └── SimpleAdapter.java
│ │ │ └── write
│ │ │ ├── WriteActivity.java
│ │ │ ├── WriteComponent.java
│ │ │ ├── WritePresenter.java
│ │ │ ├── WriteView.java
│ │ │ └── WriteViewState.java
│ │ └── res
│ │ ├── anim
│ │ │ ├── fade_in.xml
│ │ │ ├── fade_out.xml
│ │ │ ├── pulse.xml
│ │ │ ├── shake_interpolator.xml
│ │ │ ├── shake.xml
│ │ │ └── zoom_out.xml
│ │ ├── color
│ │ │ └── label_layout_button.xml
│ │ ├── drawable
│ │ │ ├── barney.jpeg
│ │ │ ├── label_view_background.xml
│ │ │ ├── lily.jpg
│ │ │ ├── marshall.jpeg
│ │ │ ├── menu_unread_count.xml
│ │ │ ├── profile_background.jpg
│ │ │ ├── robin.jpg
│ │ │ ├── ted.jpg
│ │ │ ├── text_cursor.xml
│ │ │ └── unknown.jpg
│ │ ├── drawable-hdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-mdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-xhdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-xxhdpi
│ │ │ ├── ic_action_back.png
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ ├── ic_username.png
│ │ │ └── vertical_shadow_separator.9.png
│ │ ├── drawable-xxxhdpi
│ │ │ ├── ic_all_done.png
│ │ │ ├── ic_cloud_off.png
│ │ │ ├── ic_create.png
│ │ │ ├── ic_delete.png
│ │ │ ├── ic_inbox.png
│ │ │ ├── ic_password.png
│ │ │ ├── ic_reply.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_send.png
│ │ │ ├── ic_spam.png
│ │ │ ├── ic_star.png
│ │ │ ├── ic_statistics.png
│ │ │ └── ic_username.png
│ │ ├── layout
│ │ │ ├── activity_login.xml
│ │ │ ├── activity_mail_details.xml
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_profile.xml
│ │ │ ├── activity_search.xml
│ │ │ ├── activity_write.xml
│ │ │ ├── fragment_about.xml
│ │ │ ├── fragment_login.xml
│ │ │ ├── fragment_mail_details.xml
│ │ │ ├── fragment_mails_base.xml
│ │ │ ├── fragment_mails.xml
│ │ │ ├── fragment_menu.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_statistics.xml
│ │ │ ├── list_labelview_item.xml
│ │ │ ├── list_load_more.xml
│ │ │ ├── list_mail_item.xml
│ │ │ ├── list_menu_item.xml
│ │ │ ├── list_menu_statistics.xml
│ │ │ ├── list_statistics.xml
│ │ │ ├── merge_mails.xml
│ │ │ ├── merge_main_split_pane.xml
│ │ │ ├── view_authentication_required.xml
│ │ │ ├── view_error.xml
│ │ │ ├── view_label_layout.xml
│ │ │ └── view_loading.xml
│ │ ├── layout-sw600dp
│ │ │ ├── activity_mail_details.xml
│ │ │ └── merge_main_split_pane.xml
│ │ ├── menu
│ │ │ └── search_menu.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
│ │ │ ├── booleans.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-land
│ │ │ └── dimens.xml
│ │ ├── values-sw360dp
│ │ │ └── dimens.xml
│ │ ├── values-sw384dp
│ │ │ └── dimens.xml
│ │ ├── values-sw600dp
│ │ │ ├── booleans.xml
│ │ │ ├── dimens.xml
│ │ │ └── values.xml
│ │ ├── values-v21
│ │ │ └── styles.xml
│ │ └── values-w820dp
│ │ └── dimens.xml
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── sample
│ ├── login
│ │ └── LoginViewStateTest.java
│ └── model
│ ├── account
│ │ └── DefaultAccountManagerTest.java
│ ├── MailProviderTest.java
│ ├── TestAccountManager.java
│ └── TestMailGenerator.java
├── sample-mvi
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── README.md
│ ├── server
│ │ ├── api
│ │ │ ├── products0.json
│ │ │ ├── products1.json
│ │ │ ├── products2.json
│ │ │ ├── products3.json
│ │ │ └── products4.json
│ │ └── images
│ │ ├── 10.jpg
│ │ ├── 11.jpg
│ │ ├── 12.jpg
│ │ ├── 13.jpg
│ │ ├── 14.jpg
│ │ ├── 15.jpg
│ │ ├── 16.jpg
│ │ ├── 17.jpg
│ │ ├── 18.jpg
│ │ ├── 19.jpg
│ │ ├── -1.jpg
│ │ ├── 1.jpg
│ │ ├── 20.jpg
│ │ ├── 21.jpg
│ │ ├── 22.jpg
│ │ ├── 23.jpg
│ │ ├── 24.jpg
│ │ ├── 25.jpg
│ │ ├── 26.jpg
│ │ ├── 27.jpg
│ │ ├── 28.jpg
│ │ ├── 29.jpg
│ │ ├── -2.jpg
│ │ ├── 2.jpg
│ │ ├── 30.jpg
│ │ ├── 31.jpg
│ │ ├── 32.jpg
│ │ ├── 33.jpg
│ │ ├── 34.jpg
│ │ ├── -3.jpg
│ │ ├── 3.jpg
│ │ ├── -4.jpg
│ │ ├── 4.jpg
│ │ ├── -5.jpg
│ │ ├── 5.jpg
│ │ ├── -6.jpg
│ │ ├── 6.jpg
│ │ ├── 7.jpg
│ │ ├── 8.jpg
│ │ └── 9.jpg
│ └── src
│ ├── debug
│ │ └── res
│ │ ├── drawable-hdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-mdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxhdpi
│ │ │ └── leak_canary_icon.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── leak_canary_icon.png
│ │ └── values
│ │ └── strings.xml
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ └── hannesdorfmann
│ │ │ └── mosby3
│ │ │ └── sample
│ │ │ └── mvi
│ │ │ ├── businesslogic
│ │ │ │ ├── feed
│ │ │ │ │ ├── GroupedPagedFeedLoader.java
│ │ │ │ │ ├── HomeFeedLoader.java
│ │ │ │ │ └── PagingFeedLoader.java
│ │ │ │ ├── http
│ │ │ │ │ ├── ProductBackendApiDecorator.java
│ │ │ │ │ └── ProductBackendApi.java
│ │ │ │ ├── interactor
│ │ │ │ │ ├── details
│ │ │ │ │ │ ├── DetailsInteractor.java
│ │ │ │ │ │ └── ProductDetailsViewState.java
│ │ │ │ │ └── search
│ │ │ │ │ ├── SearchInteractor.java
│ │ │ │ │ └── SearchViewState.java
│ │ │ │ ├── model
│ │ │ │ │ ├── AdditionalItemsLoadable.java
│ │ │ │ │ ├── FeedItem.java
│ │ │ │ │ ├── MainMenuItem.java
│ │ │ │ │ ├── ProductDetail.java
│ │ │ │ │ ├── Product.java
│ │ │ │ │ └── SectionHeader.java
│ │ │ │ ├── searchengine
│ │ │ │ │ └── SearchEngine.java
│ │ │ │ └── ShoppingCart.java
│ │ │ ├── dependencyinjection
│ │ │ │ └── DependencyInjection.java
│ │ │ ├── MainActivity.java
│ │ │ ├── SampleApplication.java
│ │ │ └── view
│ │ │ ├── category
│ │ │ │ ├── CategoryAdapter.java
│ │ │ │ ├── CategoryFragment.java
│ │ │ │ ├── CategoryPresenter.java
│ │ │ │ ├── CategoryView.java
│ │ │ │ └── CategoryViewState.java
│ │ │ ├── checkoutbutton
│ │ │ │ ├── CheckoutButton.java
│ │ │ │ ├── CheckoutButtonPresenter.java
│ │ │ │ └── CheckoutButtonView.java
│ │ │ ├── detail
│ │ │ │ ├── ProductDetailsActivity.java
│ │ │ │ ├── ProductDetailsPresenter.java
│ │ │ │ └── ProductDetailsView.java
│ │ │ ├── home
│ │ │ │ ├── HomeAdapter.java
│ │ │ │ ├── HomeFragment.java
│ │ │ │ ├── HomePresenter.java
│ │ │ │ ├── HomeView.java
│ │ │ │ ├── HomeViewState.java
│ │ │ │ └── PartialStateChanges.java
│ │ │ ├── menu
│ │ │ │ ├── MainMenuAdapter.java
│ │ │ │ ├── MainMenuLayout.java
│ │ │ │ ├── MainMenuPresenter.java
│ │ │ │ ├── MainMenuView.java
│ │ │ │ └── MenuViewState.java
│ │ │ ├── search
│ │ │ │ ├── SearchAdapter.java
│ │ │ │ ├── SearchFragment.java
│ │ │ │ ├── SearchPresenter.java
│ │ │ │ └── SearchView.java
│ │ │ ├── selectedcounttoolbar
│ │ │ │ ├── SelectedCountToolbar.java
│ │ │ │ ├── SelectedCountToolbarPresenter.java
│ │ │ │ └── SelectedCountToolbarView.java
│ │ │ ├── shoppingcartlabel
│ │ │ │ ├── ShoppingCartLabel.java
│ │ │ │ ├── ShoppingCartLabelPresenter.java
│ │ │ │ └── ShoppingCartLabelView.java
│ │ │ ├── shoppingcartoverview
│ │ │ │ ├── ShoppingCartOverviewAdapter.java
│ │ │ │ ├── ShoppingCartOverviewFragment.java
│ │ │ │ ├── ShoppingCartOverviewItem.java
│ │ │ │ ├── ShoppingCartOverviewPresenter.java
│ │ │ │ └── ShoppingCartOverviewView.java
│ │ │ └── ui
│ │ │ ├── AspectRatioImageView.java
│ │ │ ├── GridSpacingItemDecoration.java
│ │ │ └── viewholder
│ │ │ ├── LoadingViewHolder.java
│ │ │ ├── MainMenuViewHolder.java
│ │ │ ├── MoreItemsViewHolder.java
│ │ │ ├── ProductViewHolder.java
│ │ │ ├── SectionHederViewHolder.java
│ │ │ └── ShoppingCartItemViewHolder.java
│ │ └── res
│ │ ├── drawable
│ │ │ ├── main_menu_item_background.xml
│ │ │ └── side_nav_bar.xml
│ │ ├── drawable-hdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ ├── ic_shopping_enabled.png
│ │ │ └── search_big.png
│ │ ├── drawable-mdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ └── ic_shopping_enabled.png
│ │ ├── drawable-v21
│ │ │ ├── ic_menu_camera.xml
│ │ │ ├── ic_menu_gallery.xml
│ │ │ ├── ic_menu_manage.xml
│ │ │ ├── ic_menu_send.xml
│ │ │ ├── ic_menu_share.xml
│ │ │ └── ic_menu_slideshow.xml
│ │ ├── drawable-xhdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ ├── ic_shopping_enabled.png
│ │ │ └── search_big.png
│ │ ├── drawable-xxhdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_back_selection_count_toolbar.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_in_shopping_cart.png
│ │ │ ├── ic_remove.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_search_toolbar.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ ├── ic_shopping_disabled.png
│ │ │ ├── ic_shopping_enabled.png
│ │ │ └── search_big.png
│ │ ├── drawable-xxxhdpi
│ │ │ ├── ic_add_shopping_cart.png
│ │ │ ├── ic_error.png
│ │ │ ├── ic_search.png
│ │ │ ├── ic_shopping_cart_label.png
│ │ │ └── search_big.png
│ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── activity_product_detail.xml
│ │ │ ├── fragment_category.xml
│ │ │ ├── fragment_home.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_shopping_cart.xml
│ │ │ ├── include_errorview.xml
│ │ │ ├── item_loading.xml
│ │ │ ├── item_main_menu.xml
│ │ │ ├── item_more_available.xml
│ │ │ ├── item_product.xml
│ │ │ ├── item_section_header.xml
│ │ │ ├── item_shopping_cart.xml
│ │ │ └── view_mainmenu.xml
│ │ ├── menu
│ │ │ ├── activity_main_toolbar.xml
│ │ │ └── shopping_cart_toolbar.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
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── drawables.xml
│ │ │ ├── integers.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-land
│ │ │ └── integers.xml
│ │ ├── values-v21
│ │ │ └── styles.xml
│ │ └── values-w820dp
│ │ └── dimens.xml
│ └── test
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── sample
│ └── mvi
│ └── view
│ └── home
│ ├── HomePresenterTest.java
│ └── HomeViewRobot.java
├── settings.gradle
├── utils-fragment
│ ├── build.gradle
│ ├── gradle.properties
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── android
│ └── support
│ └── v4
│ └── app
│ └── BackstackAccessor.java
├── utils-fragment-integration-test
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ ├── androidTest
│ │ └── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── utils
│ │ └── fragment
│ │ └── integrationtest
│ │ └── backstack
│ │ ├── AddFragmentTransactionActivityTest.java
│ │ ├── BackstackActivityWithChildFragmentsTest.java
│ │ └── ReplaceFragmentTransactionActivityTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── hannesdorfmann
│ │ └── mosby3
│ │ └── utils
│ │ └── fragment
│ │ └── integrationtest
│ │ └── backstack
│ │ ├── AddFragmentTransactionActivity.java
│ │ ├── AddTransactionFragment.java
│ │ ├── BackstackActivityWithChildFragments.java
│ │ ├── ChildChildFragmentOnBackstack.java
│ │ ├── ChildFragmentOnBackstack.java
│ │ ├── FragmentOnBackstack.java
│ │ ├── ReplaceFragmentTransactionActivity.java
│ │ ├── ReplaceTransactionFragment.java
│ │ ├── SimpleChildChildFragmentNotOnBackstack.java
│ │ ├── SimpleChildFragmentNotOnBackstack.java
│ │ └── SimpleFragmentNotOnBackstack.java
│ └── res
│ ├── layout
│ │ ├── activity_backstack.xml
│ │ ├── activity_container.xml
│ │ ├── fragment_child_child.xml
│ │ └── fragment_child.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
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-w820dp
│ └── dimens.xml
└── viewstate
├── build.gradle
├── findbugs-filter.xml
├── gradle.properties
├── proguard-rules.pro
└── src
├── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── hannesdorfmann
│ └── mosby3
│ └── mvp
│ ├── delegate
│ │ ├── ActivityMvpViewStateDelegateImpl.java
│ │ ├── FragmentMvpViewStateDelegateImpl.java
│ │ ├── MosbyViewStateSavedState.java
│ │ ├── MvpViewStateDelegateCallback.java
│ │ ├── ViewGroupMvpViewStateDelegateCallback.java
│ │ └── ViewGroupMvpViewStateDelegateImpl.java
│ └── viewstate
│ ├── layout
│ │ ├── MvpViewStateFrameLayout.java
│ │ ├── MvpViewStateLinearLayout.java
│ │ └── MvpViewStateRelativeLayout.java
│ ├── MvpViewStateActivity.java
│ ├── MvpViewStateFragment.java
│ ├── RestorableParcelableViewState.java
│ ├── RestorableViewState.java
│ └── ViewState.java
└── test
└── java
└── com
└── hannesdorfmann
└── mosby3
└── mvp
└── delegate
├── ActivityMvpViewStateDelegateImplTestNew.java
├── BundleMocker.java
├── FragmentMvpViewStateDelegateImplTest.java
├── PartialMvpViewStateDelegateCallbackImpl.java
├── PartialViewGroupMvpViewStateDelegateCallbackImpl.java
├── SimpleRestorableViewState.java
└── ViewGroupMvpViewStateDelegateImplTest.java
410 directories, 841 files
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论