Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
android-mvvm-architecture
提交
43eaf7f6
A
android-mvvm-architecture
项目概览
门心叼龙
/
android-mvvm-architecture
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
android-mvvm-architecture
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
43eaf7f6
编写于
8月 02, 2017
作者:
A
AMIT SHEKHAR
提交者:
GitHub
8月 02, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1 from MindorksOpenSource/common_code_refactor
Refactor the common code
上级
dd0ed7cc
8874e29d
变更
28
隐藏空白更改
内联
并排
Showing
28 changed file
with
661 addition
and
405 deletion
+661
-405
app/src/main/java/com/mindorks/framework/mvvm/di/module/ActivityModule.java
...com/mindorks/framework/mvvm/di/module/ActivityModule.java
+9
-1
app/src/main/java/com/mindorks/framework/mvvm/ui/about/AboutFragment.java
...a/com/mindorks/framework/mvvm/ui/about/AboutFragment.java
+25
-22
app/src/main/java/com/mindorks/framework/mvvm/ui/base/BaseActivity.java
...ava/com/mindorks/framework/mvvm/ui/base/BaseActivity.java
+55
-2
app/src/main/java/com/mindorks/framework/mvvm/ui/base/BaseFragment.java
...ava/com/mindorks/framework/mvvm/ui/base/BaseFragment.java
+45
-15
app/src/main/java/com/mindorks/framework/mvvm/ui/base/BaseViewModel.java
...va/com/mindorks/framework/mvvm/ui/base/BaseViewModel.java
+11
-1
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/FeedActivity.java
...ava/com/mindorks/framework/mvvm/ui/feed/FeedActivity.java
+38
-17
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/FeedViewModel.java
...va/com/mindorks/framework/mvvm/ui/feed/FeedViewModel.java
+17
-0
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/blogs/BlogFragment.java
...m/mindorks/framework/mvvm/ui/feed/blogs/BlogFragment.java
+35
-30
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/blogs/BlogNavigator.java
.../mindorks/framework/mvvm/ui/feed/blogs/BlogNavigator.java
+0
-4
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/blogs/BlogViewModel.java
.../mindorks/framework/mvvm/ui/feed/blogs/BlogViewModel.java
+3
-3
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceAdapter.java
.../framework/mvvm/ui/feed/opensource/OpenSourceAdapter.java
+12
-13
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceFragment.java
...framework/mvvm/ui/feed/opensource/OpenSourceFragment.java
+36
-29
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceItemViewModel.java
...work/mvvm/ui/feed/opensource/OpenSourceItemViewModel.java
+8
-15
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceNavigator.java
...ramework/mvvm/ui/feed/opensource/OpenSourceNavigator.java
+0
-3
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceViewModel.java
...ramework/mvvm/ui/feed/opensource/OpenSourceViewModel.java
+20
-3
app/src/main/java/com/mindorks/framework/mvvm/ui/login/LoginActivity.java
...a/com/mindorks/framework/mvvm/ui/login/LoginActivity.java
+27
-13
app/src/main/java/com/mindorks/framework/mvvm/ui/login/LoginNavigator.java
.../com/mindorks/framework/mvvm/ui/login/LoginNavigator.java
+0
-4
app/src/main/java/com/mindorks/framework/mvvm/ui/login/LoginViewModel.java
.../com/mindorks/framework/mvvm/ui/login/LoginViewModel.java
+9
-9
app/src/main/java/com/mindorks/framework/mvvm/ui/main/MainActivity.java
...ava/com/mindorks/framework/mvvm/ui/main/MainActivity.java
+33
-19
app/src/main/java/com/mindorks/framework/mvvm/ui/main/MainNavigator.java
...va/com/mindorks/framework/mvvm/ui/main/MainNavigator.java
+0
-4
app/src/main/java/com/mindorks/framework/mvvm/ui/main/MainViewModel.java
...va/com/mindorks/framework/mvvm/ui/main/MainViewModel.java
+3
-3
app/src/main/java/com/mindorks/framework/mvvm/ui/splash/SplashActivity.java
...com/mindorks/framework/mvvm/ui/splash/SplashActivity.java
+24
-11
app/src/main/res/layout/activity_feed.xml
app/src/main/res/layout/activity_feed.xml
+5
-0
app/src/main/res/layout/activity_login.xml
app/src/main/res/layout/activity_login.xml
+130
-114
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+70
-53
app/src/main/res/layout/fragment_blog.xml
app/src/main/res/layout/fragment_blog.xml
+23
-8
app/src/main/res/layout/fragment_open_source.xml
app/src/main/res/layout/fragment_open_source.xml
+23
-8
app/src/main/res/layout/item_open_source_view.xml
app/src/main/res/layout/item_open_source_view.xml
+0
-1
未找到文件。
app/src/main/java/com/mindorks/framework/mvvm/di/module/ActivityModule.java
浏览文件 @
43eaf7f6
...
...
@@ -27,6 +27,7 @@ import com.mindorks.framework.mvvm.di.ActivityContext;
import
com.mindorks.framework.mvvm.di.PerActivity
;
import
com.mindorks.framework.mvvm.ui.about.AboutViewModel
;
import
com.mindorks.framework.mvvm.ui.feed.FeedPagerAdapter
;
import
com.mindorks.framework.mvvm.ui.feed.FeedViewModel
;
import
com.mindorks.framework.mvvm.ui.feed.blogs.BlogAdapter
;
import
com.mindorks.framework.mvvm.ui.feed.blogs.BlogViewModel
;
import
com.mindorks.framework.mvvm.ui.feed.opensource.OpenSourceAdapter
;
...
...
@@ -141,12 +142,19 @@ public class ActivityModule {
@Provides
OpenSourceAdapter
provideOpenSourceAdapter
()
{
return
new
OpenSourceAdapter
(
new
ArrayList
<
OpenSourceResponse
.
Repo
>()
);
return
new
OpenSourceAdapter
();
}
@Provides
LinearLayoutManager
provideLinearLayoutManager
(
AppCompatActivity
activity
)
{
return
new
LinearLayoutManager
(
activity
);
}
@Provides
@PerActivity
FeedViewModel
provideFeedViewModel
(
DataManager
dataManager
,
SchedulerProvider
schedulerProvider
,
CompositeDisposable
compositeDisposable
)
{
return
new
FeedViewModel
(
dataManager
,
schedulerProvider
,
compositeDisposable
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/about/AboutFragment.java
浏览文件 @
43eaf7f6
...
...
@@ -16,13 +16,10 @@
package
com.mindorks.framework.mvvm.ui.about
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.databinding.FragmentAboutBinding
;
import
com.mindorks.framework.mvvm.di.component.ActivityComponent
;
...
...
@@ -34,7 +31,7 @@ import javax.inject.Inject;
* Created by amitshekhar on 09/07/17.
*/
public
class
AboutFragment
extends
BaseFragment
implements
AboutNavigator
{
public
class
AboutFragment
extends
BaseFragment
<
FragmentAboutBinding
,
AboutViewModel
>
implements
AboutNavigator
{
public
static
final
String
TAG
=
"AboutFragment"
;
...
...
@@ -48,26 +45,26 @@ public class AboutFragment extends BaseFragment implements AboutNavigator {
return
fragment
;
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
FragmentAboutBinding
binding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_about
,
container
,
false
);
View
view
=
binding
.
getRoot
();
ActivityComponent
component
=
getActivityComponent
();
if
(
component
!=
null
)
{
component
.
inject
(
this
);
}
binding
.
setViewModel
(
mAboutViewModel
);
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
performDependencyInjection
();
mAboutViewModel
.
setNavigator
(
this
);
}
return
view
;
@Override
public
AboutViewModel
getViewModel
()
{
return
mAboutViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
fragment_about
;
}
@Override
...
...
@@ -80,5 +77,11 @@ public class AboutFragment extends BaseFragment implements AboutNavigator {
mAboutViewModel
.
onDestroy
();
super
.
onDestroyView
();
}
private
void
performDependencyInjection
(){
ActivityComponent
component
=
getActivityComponent
();
if
(
getActivityComponent
()
!=
null
)
{
component
.
inject
(
this
);
}
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/base/BaseActivity.java
浏览文件 @
43eaf7f6
...
...
@@ -20,8 +20,12 @@ import android.annotation.TargetApi;
import
android.app.ProgressDialog
;
import
android.content.Context
;
import
android.content.pm.PackageManager
;
import
android.databinding.DataBindingUtil
;
import
android.databinding.ViewDataBinding
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.support.annotation.IdRes
;
import
android.support.annotation.LayoutRes
;
import
android.support.annotation.Nullable
;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.View
;
...
...
@@ -41,21 +45,40 @@ import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
* Created by amitshekhar on 07/07/17.
*/
public
abstract
class
BaseActivity
extends
AppCompatActivity
implements
BaseFragment
.
Callback
{
public
abstract
class
BaseActivity
<
T
extends
ViewDataBinding
,
V
extends
BaseViewModel
>
extends
AppCompatActivity
implements
BaseFragment
.
Callback
{
private
ActivityComponent
mActivityComponent
;
// TODO
// this can probably depend on isLoading variable of BaseViewModel,
// since its going to be common for all the activities
private
ProgressDialog
mProgressDialog
;
private
T
mViewDataBinding
;
private
V
mViewModel
;
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
initializeActivityComponent
();
performDependencyInjection
();
performDataBinding
();
}
private
void
initializeActivityComponent
()
{
mActivityComponent
=
DaggerActivityComponent
.
builder
()
.
activityModule
(
new
ActivityModule
(
this
))
.
applicationComponent
(((
MvvmApp
)
getApplication
()).
getComponent
())
.
build
();
}
private
void
performDataBinding
()
{
mViewDataBinding
=
DataBindingUtil
.
setContentView
(
this
,
getLayoutId
());
this
.
mViewModel
=
mViewModel
==
null
?
getViewModel
()
:
mViewModel
;
mViewDataBinding
.
setVariable
(
getBindingVariable
(),
mViewModel
);
mViewDataBinding
.
executePendingBindings
();
}
public
ActivityComponent
getActivityComponent
()
{
return
mActivityComponent
;
}
...
...
@@ -122,5 +145,35 @@ public abstract class BaseActivity extends AppCompatActivity implements BaseFrag
}
}
public
T
getViewDataBinding
()
{
return
mViewDataBinding
;
}
/**
* Override for set view model
*
* @return view model instance
*/
public
abstract
V
getViewModel
();
/**
* Override for set binding variable
*
* @return variable id
*/
public
abstract
@IdRes
int
getBindingVariable
();
/**
* @return layout resource id
*/
public
abstract
@LayoutRes
int
getLayoutId
();
public
abstract
void
performDependencyInjection
();
}
app/src/main/java/com/mindorks/framework/mvvm/ui/base/BaseFragment.java
浏览文件 @
43eaf7f6
...
...
@@ -17,10 +17,16 @@
package
com.mindorks.framework.mvvm.ui.base
;
import
android.content.Context
;
import
android.databinding.DataBindingUtil
;
import
android.databinding.ViewDataBinding
;
import
android.os.Bundle
;
import
android.support.annotation.IdRes
;
import
android.support.annotation.LayoutRes
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.Fragment
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.mindorks.framework.mvvm.di.component.ActivityComponent
;
...
...
@@ -28,19 +34,31 @@ import com.mindorks.framework.mvvm.di.component.ActivityComponent;
* Created by amitshekhar on 09/07/17.
*/
public
abstract
class
BaseFragment
extends
Fragment
{
public
abstract
class
BaseFragment
<
T
extends
ViewDataBinding
,
V
extends
BaseViewModel
>
extends
Fragment
{
private
BaseActivity
mActivity
;
private
T
mViewDataBinding
;
private
V
mViewModel
;
private
View
mRootView
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setHasOptionsMenu
(
false
);
}
@Override
public
void
onViewCreated
(
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
mViewDataBinding
=
DataBindingUtil
.
inflate
(
inflater
,
getLayoutId
(),
container
,
false
);
mRootView
=
mViewDataBinding
.
getRoot
();
return
mRootView
;
}
@Override
public
void
onViewCreated
(
View
view
,
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
mViewModel
=
getViewModel
();
mViewDataBinding
.
setVariable
(
getBindingVariable
(),
mViewModel
);
mViewDataBinding
.
executePendingBindings
();
}
@Override
...
...
@@ -70,23 +88,15 @@ public abstract class BaseFragment extends Fragment {
return
mActivity
;
}
public
T
getViewDataBinding
(){
return
mViewDataBinding
;
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
}
public
void
showLoading
()
{
if
(
mActivity
!=
null
)
{
mActivity
.
showLoading
();
}
}
public
void
hideLoading
()
{
if
(
mActivity
!=
null
)
{
mActivity
.
hideLoading
();
}
}
public
boolean
isNetworkConnected
()
{
return
mActivity
!=
null
&&
mActivity
.
isNetworkConnected
();
}
...
...
@@ -109,4 +119,24 @@ public abstract class BaseFragment extends Fragment {
void
onFragmentDetached
(
String
tag
);
}
/**
* Override for set view model
* @return view model instance
*/
public
abstract
V
getViewModel
();
/**
* Override for set binding variable
* @return variable id
*/
public
abstract
@IdRes
int
getBindingVariable
();
/**
* @return layout resource id
*/
public
abstract
@LayoutRes
int
getLayoutId
();
}
app/src/main/java/com/mindorks/framework/mvvm/ui/base/BaseViewModel.java
浏览文件 @
43eaf7f6
...
...
@@ -16,6 +16,8 @@
package
com.mindorks.framework.mvvm.ui.base
;
import
android.databinding.ObservableBoolean
;
import
com.mindorks.framework.mvvm.data.DataManager
;
import
com.mindorks.framework.mvvm.utils.rx.SchedulerProvider
;
...
...
@@ -28,10 +30,10 @@ import io.reactivex.disposables.CompositeDisposable;
public
abstract
class
BaseViewModel
<
N
>
{
private
N
mNavigator
;
private
final
DataManager
mDataManager
;
private
final
SchedulerProvider
mSchedulerProvider
;
private
final
CompositeDisposable
mCompositeDisposable
;
private
final
ObservableBoolean
mIsLoading
=
new
ObservableBoolean
(
false
);
public
BaseViewModel
(
DataManager
dataManager
,
SchedulerProvider
schedulerProvider
,
...
...
@@ -65,4 +67,12 @@ public abstract class BaseViewModel<N> {
return
mCompositeDisposable
;
}
public
ObservableBoolean
getIsLoading
()
{
return
mIsLoading
;
}
public
void
setIsLoading
(
boolean
isLoading
)
{
mIsLoading
.
set
(
isLoading
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/FeedActivity.java
浏览文件 @
43eaf7f6
...
...
@@ -18,13 +18,12 @@ package com.mindorks.framework.mvvm.ui.feed;
import
android.content.Context
;
import
android.content.Intent
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.support.design.widget.TabLayout
;
import
android.support.v4.app.NavUtils
;
import
android.support.v4.app.TaskStackBuilder
;
import
android.view.MenuItem
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.databinding.ActivityFeedBinding
;
import
com.mindorks.framework.mvvm.ui.base.BaseActivity
;
...
...
@@ -35,12 +34,15 @@ import javax.inject.Inject;
* Created by amitshekhar on 10/07/17.
*/
public
class
FeedActivity
extends
BaseActivity
{
public
class
FeedActivity
extends
BaseActivity
<
ActivityFeedBinding
,
FeedViewModel
>
{
@Inject
FeedPagerAdapter
mPagerAdapter
;
@Inject
FeedViewModel
mFeedViewModel
;
ActivityFeedBinding
mActivityFeedBinding
;
private
ActivityFeedBinding
mBinding
;
public
static
Intent
getStartIntent
(
Context
context
)
{
Intent
intent
=
new
Intent
(
context
,
FeedActivity
.
class
);
...
...
@@ -50,17 +52,13 @@ public class FeedActivity extends BaseActivity {
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
mBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_feed
);
getActivityComponent
().
inject
(
this
);
mActivityFeedBinding
=
getViewDataBinding
();
setUp
();
}
private
void
setUp
()
{
setSupportActionBar
(
mBinding
.
toolbar
);
setSupportActionBar
(
m
ActivityFeed
Binding
.
toolbar
);
if
(
getSupportActionBar
()
!=
null
)
{
getSupportActionBar
().
setDisplayHomeAsUpEnabled
(
true
);
...
...
@@ -69,19 +67,19 @@ public class FeedActivity extends BaseActivity {
mPagerAdapter
.
setCount
(
2
);
mBinding
.
feedViewPager
.
setAdapter
(
mPagerAdapter
);
m
ActivityFeed
Binding
.
feedViewPager
.
setAdapter
(
mPagerAdapter
);
m
Binding
.
tabLayout
.
addTab
(
m
Binding
.
tabLayout
.
newTab
().
setText
(
getString
(
R
.
string
.
blog
)));
m
Binding
.
tabLayout
.
addTab
(
m
Binding
.
tabLayout
.
newTab
().
setText
(
getString
(
R
.
string
.
open_source
)));
m
ActivityFeedBinding
.
tabLayout
.
addTab
(
mActivityFeed
Binding
.
tabLayout
.
newTab
().
setText
(
getString
(
R
.
string
.
blog
)));
m
ActivityFeedBinding
.
tabLayout
.
addTab
(
mActivityFeed
Binding
.
tabLayout
.
newTab
().
setText
(
getString
(
R
.
string
.
open_source
)));
m
Binding
.
feedViewPager
.
setOffscreenPageLimit
(
m
Binding
.
tabLayout
.
getTabCount
());
m
ActivityFeedBinding
.
feedViewPager
.
setOffscreenPageLimit
(
mActivityFeed
Binding
.
tabLayout
.
getTabCount
());
m
Binding
.
feedViewPager
.
addOnPageChangeListener
(
new
TabLayout
.
TabLayoutOnPageChangeListener
(
m
Binding
.
tabLayout
));
m
ActivityFeedBinding
.
feedViewPager
.
addOnPageChangeListener
(
new
TabLayout
.
TabLayoutOnPageChangeListener
(
mActivityFeed
Binding
.
tabLayout
));
mBinding
.
tabLayout
.
addOnTabSelectedListener
(
new
TabLayout
.
OnTabSelectedListener
()
{
m
ActivityFeed
Binding
.
tabLayout
.
addOnTabSelectedListener
(
new
TabLayout
.
OnTabSelectedListener
()
{
@Override
public
void
onTabSelected
(
TabLayout
.
Tab
tab
)
{
mBinding
.
feedViewPager
.
setCurrentItem
(
tab
.
getPosition
());
m
ActivityFeed
Binding
.
feedViewPager
.
setCurrentItem
(
tab
.
getPosition
());
}
@Override
...
...
@@ -125,4 +123,27 @@ public class FeedActivity extends BaseActivity {
protected
void
onDestroy
()
{
super
.
onDestroy
();
}
@Override
public
FeedViewModel
getViewModel
()
{
return
mFeedViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
activity_feed
;
}
@Override
public
void
performDependencyInjection
()
{
getActivityComponent
().
inject
(
this
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/FeedViewModel.java
0 → 100644
浏览文件 @
43eaf7f6
package
com.mindorks.framework.mvvm.ui.feed
;
import
com.mindorks.framework.mvvm.data.DataManager
;
import
com.mindorks.framework.mvvm.ui.base.BaseViewModel
;
import
com.mindorks.framework.mvvm.utils.rx.SchedulerProvider
;
import
io.reactivex.disposables.CompositeDisposable
;
/**
* Created by Jyoti on 29/07/17.
*/
public
class
FeedViewModel
extends
BaseViewModel
{
public
FeedViewModel
(
DataManager
dataManager
,
SchedulerProvider
schedulerProvider
,
CompositeDisposable
compositeDisposable
)
{
super
(
dataManager
,
schedulerProvider
,
compositeDisposable
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/blogs/BlogFragment.java
浏览文件 @
43eaf7f6
...
...
@@ -16,15 +16,12 @@
package
com.mindorks.framework.mvvm.ui.feed.blogs
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.v7.widget.DefaultItemAnimator
;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.data.model.api.BlogResponse
;
import
com.mindorks.framework.mvvm.databinding.FragmentBlogBinding
;
...
...
@@ -39,7 +36,7 @@ import javax.inject.Inject;
* Created by amitshekhar on 10/07/17.
*/
public
class
BlogFragment
extends
BaseFragment
implements
BlogNavigator
,
BlogAdapter
.
BlogAdapterListener
{
public
class
BlogFragment
extends
BaseFragment
<
FragmentBlogBinding
,
BlogViewModel
>
implements
BlogNavigator
,
BlogAdapter
.
BlogAdapterListener
{
@Inject
BlogViewModel
mBlogViewModel
;
...
...
@@ -49,8 +46,7 @@ public class BlogFragment extends BaseFragment implements BlogNavigator, BlogAda
@Inject
LinearLayoutManager
mLayoutManager
;
private
FragmentBlogBinding
mBinding
;
FragmentBlogBinding
mFragmentBlogBinding
;
public
static
BlogFragment
newInstance
()
{
Bundle
args
=
new
Bundle
();
...
...
@@ -59,42 +55,44 @@ public class BlogFragment extends BaseFragment implements BlogNavigator, BlogAda
return
fragment
;
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
mBinding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_blog
,
container
,
false
);
View
view
=
mBinding
.
getRoot
();
ActivityComponent
component
=
getActivityComponent
();
if
(
component
!=
null
)
{
component
.
inject
(
this
);
}
mBinding
.
setViewModel
(
mBlogViewModel
);
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
performDependencyInjection
();
mBlogViewModel
.
setNavigator
(
this
);
mBlogAdapter
.
setListener
(
this
);
return
view
;
}
@Override
public
void
onViewCreated
(
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
mFragmentBlogBinding
=
getViewDataBinding
();
setUp
();
}
@Override
public
BlogViewModel
getViewModel
()
{
return
mBlogViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
fragment_blog
;
}
private
void
setUp
()
{
mLayoutManager
.
setOrientation
(
LinearLayoutManager
.
VERTICAL
);
mBinding
.
blogRecyclerView
.
setLayoutManager
(
mLayoutManager
);
mBinding
.
blogRecyclerView
.
setItemAnimator
(
new
DefaultItemAnimator
());
mBinding
.
blogRecyclerView
.
setAdapter
(
mBlogAdapter
);
m
FragmentBlog
Binding
.
blogRecyclerView
.
setLayoutManager
(
mLayoutManager
);
m
FragmentBlog
Binding
.
blogRecyclerView
.
setItemAnimator
(
new
DefaultItemAnimator
());
m
FragmentBlog
Binding
.
blogRecyclerView
.
setAdapter
(
mBlogAdapter
);
//One method one responsibility.May be we can move fetchBlogs() outside this function.
mBlogViewModel
.
fetchBlogs
();
}
...
...
@@ -118,4 +116,11 @@ public class BlogFragment extends BaseFragment implements BlogNavigator, BlogAda
public
void
onRetryClick
()
{
mBlogViewModel
.
fetchBlogs
();
}
private
void
performDependencyInjection
()
{
ActivityComponent
component
=
getActivityComponent
();
if
(
getActivityComponent
()
!=
null
)
{
component
.
inject
(
this
);
}
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/blogs/BlogNavigator.java
浏览文件 @
43eaf7f6
...
...
@@ -30,8 +30,4 @@ public interface BlogNavigator {
void
handleError
(
Throwable
throwable
);
void
showLoading
();
void
hideLoading
();
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/blogs/BlogViewModel.java
浏览文件 @
43eaf7f6
...
...
@@ -38,7 +38,7 @@ public class BlogViewModel extends BaseViewModel<BlogNavigator> {
}
public
void
fetchBlogs
()
{
getNavigator
().
showLoading
(
);
setIsLoading
(
true
);
getCompositeDisposable
().
add
(
getDataManager
()
.
getBlogApiCall
()
.
subscribeOn
(
getSchedulerProvider
().
io
())
...
...
@@ -50,13 +50,13 @@ public class BlogViewModel extends BaseViewModel<BlogNavigator> {
if
(
blogResponse
!=
null
&&
blogResponse
.
getData
()
!=
null
)
{
getNavigator
().
updateBlog
(
blogResponse
.
getData
());
}
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
}
},
new
Consumer
<
Throwable
>()
{
@Override
public
void
accept
(
@NonNull
Throwable
throwable
)
throws
Exception
{
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
handleError
(
throwable
);
}
}));
...
...
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceAdapter.java
浏览文件 @
43eaf7f6
...
...
@@ -20,6 +20,7 @@ import android.content.Intent;
import
android.net.Uri
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.mindorks.framework.mvvm.data.model.api.OpenSourceResponse
;
...
...
@@ -28,6 +29,7 @@ import com.mindorks.framework.mvvm.databinding.ItemOpenSourceViewBinding;
import
com.mindorks.framework.mvvm.ui.base.BaseViewHolder
;
import
com.mindorks.framework.mvvm.utils.AppLogger
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -39,11 +41,11 @@ public class OpenSourceAdapter extends RecyclerView.Adapter<BaseViewHolder> {
public
static
final
int
VIEW_TYPE_EMPTY
=
0
;
public
static
final
int
VIEW_TYPE_NORMAL
=
1
;
private
List
<
OpenSource
Response
.
Repo
>
mOpenSourceResponseList
;
private
List
<
OpenSource
ItemViewModel
>
mOpenSourceResponseList
;
private
OpenSourceAdapterListener
mListener
;
public
OpenSourceAdapter
(
List
<
OpenSourceResponse
.
Repo
>
openSourceResponseList
)
{
this
.
mOpenSourceResponseList
=
openSourceResponseList
;
public
OpenSourceAdapter
()
{
this
.
mOpenSourceResponseList
=
new
ArrayList
<>()
;
}
public
void
setListener
(
OpenSourceAdapterListener
listener
)
{
...
...
@@ -89,16 +91,15 @@ public class OpenSourceAdapter extends RecyclerView.Adapter<BaseViewHolder> {
}
}
public
void
addItems
(
List
<
OpenSource
Response
.
Repo
>
repoList
)
{
public
void
addItems
(
List
<
OpenSource
ItemViewModel
>
repoList
)
{
mOpenSourceResponseList
.
addAll
(
repoList
);
notifyDataSetChanged
();
}
public
class
OpenSourceViewHolder
extends
BaseViewHolder
implements
OpenSourceItemViewModel
.
OpenSourceItemViewModel
Listener
{
public
class
OpenSourceViewHolder
extends
BaseViewHolder
implements
View
.
OnClick
Listener
{
private
ItemOpenSourceViewBinding
mBinding
;
private
OpenSourceItemViewModel
mOpenSourceItemViewModel
;
public
OpenSourceViewHolder
(
ItemOpenSourceViewBinding
binding
)
{
super
(
binding
.
getRoot
());
...
...
@@ -107,10 +108,7 @@ public class OpenSourceAdapter extends RecyclerView.Adapter<BaseViewHolder> {
@Override
public
void
onBind
(
int
position
)
{
final
OpenSourceResponse
.
Repo
repo
=
mOpenSourceResponseList
.
get
(
position
);
mOpenSourceItemViewModel
=
new
OpenSourceItemViewModel
(
repo
,
this
);
final
OpenSourceItemViewModel
mOpenSourceItemViewModel
=
mOpenSourceResponseList
.
get
(
position
);
mBinding
.
setViewModel
(
mOpenSourceItemViewModel
);
// Immediate Binding
...
...
@@ -120,14 +118,15 @@ public class OpenSourceAdapter extends RecyclerView.Adapter<BaseViewHolder> {
mBinding
.
executePendingBindings
();
}
@Override
public
void
on
ItemClick
(
String
projectUrl
)
{
if
(
projectUrl
!=
null
)
{
public
void
on
Click
(
View
view
)
{
if
(
mOpenSourceResponseList
.
get
(
0
).
projectUrl
.
get
()
!=
null
)
{
try
{
Intent
intent
=
new
Intent
();
intent
.
setAction
(
Intent
.
ACTION_VIEW
);
intent
.
addCategory
(
Intent
.
CATEGORY_BROWSABLE
);
intent
.
setData
(
Uri
.
parse
(
projectUrl
));
intent
.
setData
(
Uri
.
parse
(
mOpenSourceResponseList
.
get
(
0
).
projectUrl
.
get
()
));
itemView
.
getContext
().
startActivity
(
intent
);
}
catch
(
Exception
e
)
{
AppLogger
.
d
(
"url error"
);
...
...
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceFragment.java
浏览文件 @
43eaf7f6
...
...
@@ -16,15 +16,14 @@
package
com.mindorks.framework.mvvm.ui.feed.opensource
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.v7.widget.DefaultItemAnimator
;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.data.model.api.OpenSourceResponse
;
import
com.mindorks.framework.mvvm.databinding.FragmentOpenSourceBinding
;
...
...
@@ -39,7 +38,7 @@ import javax.inject.Inject;
* Created by amitshekhar on 10/07/17.
*/
public
class
OpenSourceFragment
extends
BaseFragment
implements
OpenSourceNavigator
,
OpenSourceAdapter
.
OpenSourceAdapterListener
{
public
class
OpenSourceFragment
extends
BaseFragment
<
FragmentOpenSourceBinding
,
OpenSourceViewModel
>
implements
OpenSourceNavigator
,
OpenSourceAdapter
.
OpenSourceAdapterListener
{
@Inject
OpenSourceViewModel
mOpenSourceViewModel
;
...
...
@@ -49,8 +48,7 @@ public class OpenSourceFragment extends BaseFragment implements OpenSourceNaviga
@Inject
LinearLayoutManager
mLayoutManager
;
private
FragmentOpenSourceBinding
mBinding
;
FragmentOpenSourceBinding
mFragmentOpenSourceBinding
;
public
static
OpenSourceFragment
newInstance
()
{
Bundle
args
=
new
Bundle
();
...
...
@@ -59,41 +57,42 @@ public class OpenSourceFragment extends BaseFragment implements OpenSourceNaviga
return
fragment
;
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
mBinding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_open_source
,
container
,
false
);
View
view
=
mBinding
.
getRoot
();
ActivityComponent
component
=
getActivityComponent
();
if
(
component
!=
null
)
{
component
.
inject
(
this
);
}
mBinding
.
setViewModel
(
mOpenSourceViewModel
);
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
performDependencyInjection
();
mOpenSourceViewModel
.
setNavigator
(
this
);
mOpenSourceAdapter
.
setListener
(
this
);
return
view
;
}
@Override
public
void
onViewCreated
(
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
mFragmentOpenSourceBinding
=
getViewDataBinding
();
setUp
();
}
@Override
public
OpenSourceViewModel
getViewModel
()
{
return
mOpenSourceViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
fragment_open_source
;
}
private
void
setUp
()
{
mLayoutManager
.
setOrientation
(
LinearLayoutManager
.
VERTICAL
);
mBinding
.
openSourceRecyclerView
.
setLayoutManager
(
mLayoutManager
);
mBinding
.
openSourceRecyclerView
.
setItemAnimator
(
new
DefaultItemAnimator
());
mBinding
.
openSourceRecyclerView
.
setAdapter
(
mOpenSourceAdapter
);
m
FragmentOpenSource
Binding
.
openSourceRecyclerView
.
setLayoutManager
(
mLayoutManager
);
m
FragmentOpenSource
Binding
.
openSourceRecyclerView
.
setItemAnimator
(
new
DefaultItemAnimator
());
m
FragmentOpenSource
Binding
.
openSourceRecyclerView
.
setAdapter
(
mOpenSourceAdapter
);
mOpenSourceViewModel
.
fetchRepos
();
}
...
...
@@ -106,7 +105,8 @@ public class OpenSourceFragment extends BaseFragment implements OpenSourceNaviga
@Override
public
void
updateRepo
(
List
<
OpenSourceResponse
.
Repo
>
repoList
)
{
mOpenSourceAdapter
.
addItems
(
repoList
);
mOpenSourceViewModel
.
populateViewModel
(
repoList
);
mOpenSourceAdapter
.
addItems
(
mOpenSourceViewModel
.
openSourceItemViewModels
);
}
@Override
...
...
@@ -118,4 +118,11 @@ public class OpenSourceFragment extends BaseFragment implements OpenSourceNaviga
public
void
onRetryClick
()
{
mOpenSourceViewModel
.
fetchRepos
();
}
private
void
performDependencyInjection
()
{
ActivityComponent
component
=
getActivityComponent
();
if
(
getActivityComponent
()
!=
null
)
{
component
.
inject
(
this
);
}
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceItemViewModel.java
浏览文件 @
43eaf7f6
...
...
@@ -20,33 +20,26 @@ import android.databinding.ObservableField;
import
com.mindorks.framework.mvvm.data.model.api.OpenSourceResponse
;
import
io.reactivex.Single
;
/**
* Created by amitshekhar on 10/07/17.
*/
public
class
OpenSourceItemViewModel
{
private
OpenSourceResponse
.
Repo
mRepo
;
public
ObservableField
<
String
>
imageUrl
;
public
ObservableField
<
String
>
title
;
public
ObservableField
<
String
>
content
;
public
ObservableField
<
String
>
projectUrl
;
public
OpenSourceItemViewModelListener
mListener
;
public
OpenSourceItemViewModel
(
OpenSourceResponse
.
Repo
repo
,
OpenSourceItemViewModelListener
listener
)
{
this
.
mRepo
=
repo
;
this
.
mListener
=
listener
;
imageUrl
=
new
ObservableField
<>(
repo
.
getCoverImgUrl
());
title
=
new
ObservableField
<>(
mRepo
.
getTitle
());
content
=
new
ObservableField
<>(
mRepo
.
getDescription
());
}
public
void
onItemClick
()
{
mListener
.
onItemClick
(
mRepo
.
getProjectUrl
());
public
OpenSourceItemViewModel
(
String
imageUrl
,
String
title
,
String
content
,
String
projectUrl
)
{
this
.
imageUrl
.
set
(
imageUrl
);
this
.
title
.
set
(
title
);
this
.
content
.
set
(
content
);
this
.
projectUrl
.
set
(
projectUrl
);
}
public
interface
OpenSourceItemViewModelListener
{
void
onItemClick
(
String
projectUrl
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceNavigator.java
浏览文件 @
43eaf7f6
...
...
@@ -30,8 +30,5 @@ public interface OpenSourceNavigator {
void
handleError
(
Throwable
throwable
);
void
showLoading
();
void
hideLoading
();
}
app/src/main/java/com/mindorks/framework/mvvm/ui/feed/opensource/OpenSourceViewModel.java
浏览文件 @
43eaf7f6
...
...
@@ -16,11 +16,18 @@
package
com.mindorks.framework.mvvm.ui.feed.opensource
;
import
android.databinding.ObservableArrayList
;
import
com.mindorks.framework.mvvm.data.DataManager
;
import
com.mindorks.framework.mvvm.data.model.api.OpenSourceResponse
;
import
com.mindorks.framework.mvvm.ui.base.BaseViewModel
;
import
com.mindorks.framework.mvvm.utils.rx.SchedulerProvider
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.Callable
;
import
io.reactivex.Single
;
import
io.reactivex.annotations.NonNull
;
import
io.reactivex.disposables.CompositeDisposable
;
import
io.reactivex.functions.Consumer
;
...
...
@@ -30,6 +37,8 @@ import io.reactivex.functions.Consumer;
*/
public
class
OpenSourceViewModel
extends
BaseViewModel
<
OpenSourceNavigator
>
{
public
ObservableArrayList
<
OpenSourceItemViewModel
>
openSourceItemViewModels
=
new
ObservableArrayList
<>();
public
OpenSourceViewModel
(
DataManager
dataManager
,
SchedulerProvider
schedulerProvider
,
...
...
@@ -38,7 +47,7 @@ public class OpenSourceViewModel extends BaseViewModel<OpenSourceNavigator> {
}
public
void
fetchRepos
()
{
getNavigator
().
showLoading
(
);
setIsLoading
(
true
);
getCompositeDisposable
().
add
(
getDataManager
()
.
getOpenSourceApiCall
()
.
subscribeOn
(
getSchedulerProvider
().
io
())
...
...
@@ -50,15 +59,23 @@ public class OpenSourceViewModel extends BaseViewModel<OpenSourceNavigator> {
if
(
openSourceResponse
!=
null
&&
openSourceResponse
.
getData
()
!=
null
)
{
getNavigator
().
updateRepo
(
openSourceResponse
.
getData
());
}
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
}
},
new
Consumer
<
Throwable
>()
{
@Override
public
void
accept
(
@NonNull
Throwable
throwable
)
throws
Exception
{
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
handleError
(
throwable
);
}
}));
}
public
void
populateViewModel
(
List
<
OpenSourceResponse
.
Repo
>
repoList
){
for
(
int
i
=
0
;
i
<
repoList
.
size
();
i
++){
openSourceItemViewModels
.
add
(
new
OpenSourceItemViewModel
(
repoList
.
get
(
i
).
getCoverImgUrl
(),
repoList
.
get
(
i
).
getTitle
(),
repoList
.
get
(
i
).
getDescription
(),
repoList
.
get
(
i
).
getProjectUrl
()));
}
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/login/LoginActivity.java
浏览文件 @
43eaf7f6
...
...
@@ -18,10 +18,10 @@ package com.mindorks.framework.mvvm.ui.login;
import
android.content.Context
;
import
android.content.Intent
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.widget.Toast
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.databinding.ActivityLoginBinding
;
import
com.mindorks.framework.mvvm.ui.base.BaseActivity
;
...
...
@@ -33,12 +33,11 @@ import javax.inject.Inject;
* Created by amitshekhar on 08/07/17.
*/
public
class
LoginActivity
extends
BaseActivity
implements
LoginNavigator
{
public
class
LoginActivity
extends
BaseActivity
<
ActivityLoginBinding
,
LoginViewModel
>
implements
LoginNavigator
{
@Inject
LoginViewModel
mLoginViewModel
;
private
ActivityLoginBinding
mBinding
;
ActivityLoginBinding
mActivityLoginBinding
;
public
static
Intent
getStartIntent
(
Context
context
)
{
Intent
intent
=
new
Intent
(
context
,
LoginActivity
.
class
);
...
...
@@ -48,13 +47,7 @@ public class LoginActivity extends BaseActivity implements LoginNavigator {
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
mBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_login
);
getActivityComponent
().
inject
(
this
);
mBinding
.
setViewModel
(
mLoginViewModel
);
mActivityLoginBinding
=
getViewDataBinding
();
mLoginViewModel
.
setNavigator
(
this
);
}
...
...
@@ -79,8 +72,8 @@ public class LoginActivity extends BaseActivity implements LoginNavigator {
@Override
public
void
login
()
{
String
email
=
mBinding
.
etEmail
.
getText
().
toString
();
String
password
=
mBinding
.
etPassword
.
getText
().
toString
();
String
email
=
m
ActivityLogin
Binding
.
etEmail
.
getText
().
toString
();
String
password
=
m
ActivityLogin
Binding
.
etPassword
.
getText
().
toString
();
if
(
mLoginViewModel
.
isEmailAndPasswordValid
(
email
,
password
))
{
hideKeyboard
();
mLoginViewModel
.
login
(
email
,
password
);
...
...
@@ -88,4 +81,25 @@ public class LoginActivity extends BaseActivity implements LoginNavigator {
Toast
.
makeText
(
this
,
getString
(
R
.
string
.
invalid_email_password
),
Toast
.
LENGTH_SHORT
).
show
();
}
}
@Override
public
LoginViewModel
getViewModel
()
{
return
mLoginViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
activity_login
;
}
@Override
public
void
performDependencyInjection
()
{
getActivityComponent
().
inject
(
this
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/login/LoginNavigator.java
浏览文件 @
43eaf7f6
...
...
@@ -24,10 +24,6 @@ public interface LoginNavigator {
void
openMainActivity
();
void
showLoading
();
void
hideLoading
();
void
handleError
(
Throwable
throwable
);
void
login
();
...
...
app/src/main/java/com/mindorks/framework/mvvm/ui/login/LoginViewModel.java
浏览文件 @
43eaf7f6
...
...
@@ -43,7 +43,7 @@ public class LoginViewModel extends BaseViewModel<LoginNavigator> {
}
public
void
onGoogleLoginClick
()
{
getNavigator
().
showLoading
(
);
setIsLoading
(
true
);
getCompositeDisposable
().
add
(
getDataManager
()
.
doGoogleLoginApiCall
(
new
LoginRequest
.
GoogleLoginRequest
(
"test1"
,
"test1"
))
.
subscribeOn
(
getSchedulerProvider
().
io
())
...
...
@@ -58,20 +58,20 @@ public class LoginViewModel extends BaseViewModel<LoginNavigator> {
response
.
getUserName
(),
response
.
getUserEmail
(),
response
.
getGoogleProfilePicUrl
());
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
openMainActivity
();
}
},
new
Consumer
<
Throwable
>()
{
@Override
public
void
accept
(
Throwable
throwable
)
throws
Exception
{
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
handleError
(
throwable
);
}
}));
}
public
void
onFbLoginClick
()
{
getNavigator
().
showLoading
(
);
setIsLoading
(
true
);
getCompositeDisposable
().
add
(
getDataManager
()
.
doFacebookLoginApiCall
(
new
LoginRequest
.
FacebookLoginRequest
(
"test3"
,
"test4"
))
.
subscribeOn
(
getSchedulerProvider
().
io
())
...
...
@@ -86,20 +86,20 @@ public class LoginViewModel extends BaseViewModel<LoginNavigator> {
response
.
getUserName
(),
response
.
getUserEmail
(),
response
.
getGoogleProfilePicUrl
());
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
openMainActivity
();
}
},
new
Consumer
<
Throwable
>()
{
@Override
public
void
accept
(
Throwable
throwable
)
throws
Exception
{
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
handleError
(
throwable
);
}
}));
}
public
void
login
(
String
email
,
String
password
)
{
getNavigator
().
showLoading
(
);
setIsLoading
(
true
);
getCompositeDisposable
().
add
(
getDataManager
()
.
doServerLoginApiCall
(
new
LoginRequest
.
ServerLoginRequest
(
email
,
password
))
.
subscribeOn
(
getSchedulerProvider
().
io
())
...
...
@@ -114,13 +114,13 @@ public class LoginViewModel extends BaseViewModel<LoginNavigator> {
response
.
getUserName
(),
response
.
getUserEmail
(),
response
.
getGoogleProfilePicUrl
());
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
openMainActivity
();
}
},
new
Consumer
<
Throwable
>()
{
@Override
public
void
accept
(
Throwable
throwable
)
throws
Exception
{
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
handleError
(
throwable
);
}
}));
...
...
app/src/main/java/com/mindorks/framework/mvvm/ui/main/MainActivity.java
浏览文件 @
43eaf7f6
...
...
@@ -37,6 +37,7 @@ import android.view.View;
import
android.view.animation.Animation
;
import
android.view.animation.ScaleAnimation
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.BuildConfig
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.data.model.others.QuestionCardData
;
...
...
@@ -56,12 +57,11 @@ import java.util.List;
import
javax.inject.Inject
;
public
class
MainActivity
extends
BaseActivity
implements
MainNavigator
{
public
class
MainActivity
extends
BaseActivity
<
ActivityMainBinding
,
MainViewModel
>
implements
MainNavigator
{
@Inject
MainViewModel
mMainViewModel
;
private
ActivityMainBinding
mBinding
;
private
DrawerLayout
mDrawer
;
...
...
@@ -70,6 +70,8 @@ public class MainActivity extends BaseActivity implements MainNavigator {
private
NavigationView
mNavigationView
;
private
SwipePlaceHolderView
mCardsContainerView
;
ActivityMainBinding
mActivityMainBinding
;
public
static
Intent
getStartIntent
(
Context
context
)
{
Intent
intent
=
new
Intent
(
context
,
MainActivity
.
class
);
...
...
@@ -79,15 +81,8 @@ public class MainActivity extends BaseActivity implements MainNavigator {
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
mBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_main
);
getActivityComponent
().
inject
(
this
);
mBinding
.
setViewModel
(
mMainViewModel
);
mActivityMainBinding
=
getViewDataBinding
();
mMainViewModel
.
setNavigator
(
this
);
setUp
();
}
...
...
@@ -144,10 +139,10 @@ public class MainActivity extends BaseActivity implements MainNavigator {
private
void
setUp
()
{
mDrawer
=
mBinding
.
drawerView
;
mToolbar
=
mBinding
.
toolbar
;
mNavigationView
=
mBinding
.
navigationView
;
mCardsContainerView
=
mBinding
.
cardsContainer
;
mDrawer
=
m
ActivityMain
Binding
.
drawerView
;
mToolbar
=
m
ActivityMain
Binding
.
toolbar
;
mNavigationView
=
m
ActivityMain
Binding
.
navigationView
;
mCardsContainerView
=
m
ActivityMain
Binding
.
cardsContainer
;
setSupportActionBar
(
mToolbar
);
ActionBarDrawerToggle
mDrawerToggle
=
new
ActionBarDrawerToggle
(
...
...
@@ -210,12 +205,9 @@ public class MainActivity extends BaseActivity implements MainNavigator {
}
private
void
setupNavMenu
()
{
NavHeaderMainBinding
navHeaderMainBinding
=
DataBindingUtil
.
inflate
(
getLayoutInflater
(),
R
.
layout
.
nav_header_main
,
mBinding
.
navigationView
,
false
);
mBinding
.
navigationView
.
addHeaderView
(
navHeaderMainBinding
.
getRoot
());
R
.
layout
.
nav_header_main
,
mActivityMainBinding
.
navigationView
,
false
);
mActivityMainBinding
.
navigationView
.
addHeaderView
(
navHeaderMainBinding
.
getRoot
());
navHeaderMainBinding
.
setViewModel
(
mMainViewModel
);
mNavigationView
.
setNavigationItemSelectedListener
(
...
...
@@ -312,4 +304,26 @@ public class MainActivity extends BaseActivity implements MainNavigator {
public
void
handleError
(
Throwable
throwable
)
{
// handle error
}
@Override
public
MainViewModel
getViewModel
()
{
return
mMainViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
activity_main
;
}
@Override
public
void
performDependencyInjection
()
{
getActivityComponent
().
inject
(
this
);
}
}
app/src/main/java/com/mindorks/framework/mvvm/ui/main/MainNavigator.java
浏览文件 @
43eaf7f6
...
...
@@ -32,10 +32,6 @@ public interface MainNavigator {
void
openLoginActivity
();
void
showLoading
();
void
hideLoading
();
void
handleError
(
Throwable
throwable
);
}
app/src/main/java/com/mindorks/framework/mvvm/ui/main/MainViewModel.java
浏览文件 @
43eaf7f6
...
...
@@ -99,7 +99,7 @@ public class MainViewModel extends BaseViewModel<MainNavigator> {
}
public
void
logout
()
{
getNavigator
().
showLoading
(
);
setIsLoading
(
true
);
getCompositeDisposable
().
add
(
getDataManager
().
doLogoutApiCall
()
.
subscribeOn
(
getSchedulerProvider
().
io
())
.
observeOn
(
getSchedulerProvider
().
ui
())
...
...
@@ -107,13 +107,13 @@ public class MainViewModel extends BaseViewModel<MainNavigator> {
@Override
public
void
accept
(
LogoutResponse
response
)
throws
Exception
{
getDataManager
().
setUserAsLoggedOut
();
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
openLoginActivity
();
}
},
new
Consumer
<
Throwable
>()
{
@Override
public
void
accept
(
Throwable
throwable
)
throws
Exception
{
getNavigator
().
hideLoading
(
);
setIsLoading
(
false
);
getNavigator
().
handleError
(
throwable
);
}
}));
...
...
app/src/main/java/com/mindorks/framework/mvvm/ui/splash/SplashActivity.java
浏览文件 @
43eaf7f6
...
...
@@ -18,9 +18,8 @@ package com.mindorks.framework.mvvm.ui.splash;
import
android.content.Context
;
import
android.content.Intent
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
com.mindorks.framework.mvvm.BR
;
import
com.mindorks.framework.mvvm.R
;
import
com.mindorks.framework.mvvm.databinding.ActivitySplashBinding
;
import
com.mindorks.framework.mvvm.ui.base.BaseActivity
;
...
...
@@ -33,11 +32,12 @@ import javax.inject.Inject;
* Created by amitshekhar on 08/07/17.
*/
public
class
SplashActivity
extends
BaseActivity
implements
SplashNavigator
{
public
class
SplashActivity
extends
BaseActivity
<
ActivitySplashBinding
,
SplashViewModel
>
implements
SplashNavigator
{
@Inject
SplashViewModel
mSplashViewModel
;
public
static
Intent
getStartIntent
(
Context
context
)
{
Intent
intent
=
new
Intent
(
context
,
SplashActivity
.
class
);
return
intent
;
...
...
@@ -46,15 +46,7 @@ public class SplashActivity extends BaseActivity implements SplashNavigator {
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
ActivitySplashBinding
binding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_splash
);
getActivityComponent
().
inject
(
this
);
binding
.
setViewModel
(
mSplashViewModel
);
mSplashViewModel
.
setNavigator
(
this
);
mSplashViewModel
.
startSeeding
();
}
...
...
@@ -77,5 +69,26 @@ public class SplashActivity extends BaseActivity implements SplashNavigator {
startActivity
(
intent
);
finish
();
}
@Override
public
SplashViewModel
getViewModel
()
{
return
mSplashViewModel
;
}
@Override
public
int
getBindingVariable
()
{
return
BR
.
viewModel
;
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
activity_splash
;
}
@Override
public
void
performDependencyInjection
()
{
getActivityComponent
().
inject
(
this
);
}
}
app/src/main/res/layout/activity_feed.xml
浏览文件 @
43eaf7f6
...
...
@@ -18,7 +18,12 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
tools:context=
"com.mindorks.framework.mvvm.ui.feed.FeedActivity"
>
<data>
<variable
name=
"viewModel"
type=
"com.mindorks.framework.mvvm.ui.feed.FeedViewModel"
/>
</data>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
...
...
app/src/main/res/layout/activity_login.xml
浏览文件 @
43eaf7f6
...
...
@@ -21,139 +21,155 @@
<data>
<import
type=
"android.view.View"
/>
<variable
name=
"viewModel"
type=
"com.mindorks.framework.mvvm.ui.login.LoginViewModel"
/>
</data>
<RelativeLayout
android:id=
"@+id/activityMain"
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@drawable/bg_design"
>
android:layout_height=
"match_parent"
>
<RelativeLayout
<android.support.v7.widget.CardView
android:id=
"@+id/activityMain"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"80dp"
android:layout_marginLeft=
"16dp"
android:layout_marginRight=
"16dp"
android:layout_marginTop=
"80dp"
app:cardCornerRadius=
"7dp"
app:cardElevation=
"22dp"
>
<TextView
style=
"@style/TextStyle.Heading"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center|top"
android:layout_marginTop=
"60dp"
android:text=
"@string/login_dummy"
android:textAllCaps=
"true"
android:textSize=
"20sp"
/>
<LinearLayout
android:background=
"@drawable/bg_design"
>
<android.support.v7.widget.CardView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_margin=
"20dp"
android:orientation=
"vertical"
>
android:layout_height=
"match_parent"
android:layout_marginBottom=
"80dp"
android:layout_marginLeft=
"16dp"
android:layout_marginRight=
"16dp"
android:layout_marginTop=
"80dp"
app:cardCornerRadius=
"7dp"
app:cardElevation=
"22dp"
>
<TextView
style=
"@style/TextStyle.Heading"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center|top"
android:layout_marginTop=
"60dp"
android:text=
"@string/login_dummy"
android:textAllCaps=
"true"
android:textSize=
"20sp"
/>
<
android.support.design.widget.TextInput
Layout
<
Linear
Layout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textColorHint=
"@color/gray"
app:hintTextAppearance=
"@style/TextAppearence.App.TextInputLayout"
>
android:layout_gravity=
"center"
android:layout_margin=
"20dp"
android:orientation=
"vertical"
>
<android.support.design.widget.TextInputEditText
android:id=
"@+id/etEmail"
style=
"@style/TextStyle"
<android.support.design.widget.TextInputLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"20dp"
android:layout_marginRight=
"20dp"
android:background=
"@drawable/input_border_bottom"
android:cursorVisible=
"true"
android:gravity=
"center|left|bottom"
android:hint=
"@string/email"
android:inputType=
"textEmailAddress"
android:maxLength=
"50"
android:paddingBottom=
"10dp"
android:textColor=
"@color/black_effective"
android:textSize=
"18sp"
/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:hint=
"@string/password"
android:textColorHint=
"@color/gray"
app:hintTextAppearance=
"@style/TextAppearence.App.TextInputLayout"
app:passwordToggleEnabled=
"true"
>
<android.support.design.widget.TextInputEditText
android:id=
"@+id/etPassword"
style=
"@style/TextStyle"
android:textColorHint=
"@color/gray"
app:hintTextAppearance=
"@style/TextAppearence.App.TextInputLayout"
>
<android.support.design.widget.TextInputEditText
android:id=
"@+id/etEmail"
style=
"@style/TextStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"20dp"
android:layout_marginRight=
"20dp"
android:background=
"@drawable/input_border_bottom"
android:cursorVisible=
"true"
android:gravity=
"center|left|bottom"
android:hint=
"@string/email"
android:inputType=
"textEmailAddress"
android:maxLength=
"50"
android:paddingBottom=
"10dp"
android:textColor=
"@color/black_effective"
android:textSize=
"18sp"
/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"20dp"
android:layout_marginRight=
"20dp"
android:layout_marginTop=
"30dp"
android:background=
"@drawable/input_border_bottom"
android:cursorVisible=
"true"
android:gravity=
"center|left|bottom"
android:inputType=
"textPassword"
android:maxLength=
"50"
android:paddingBottom=
"10dp"
android:textColor=
"@color/black_effective"
android:textSize=
"18sp"
/>
</android.support.design.widget.TextInputLayout>
<Button
android:id=
"@+id/btnServerLogin"
style=
"@style/Button.Primary"
android:layout_width=
"match_parent"
android:hint=
"@string/password"
android:textColorHint=
"@color/gray"
app:hintTextAppearance=
"@style/TextAppearence.App.TextInputLayout"
app:passwordToggleEnabled=
"true"
>
<android.support.design.widget.TextInputEditText
android:id=
"@+id/etPassword"
style=
"@style/TextStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"20dp"
android:layout_marginRight=
"20dp"
android:layout_marginTop=
"30dp"
android:background=
"@drawable/input_border_bottom"
android:cursorVisible=
"true"
android:gravity=
"center|left|bottom"
android:inputType=
"textPassword"
android:maxLength=
"50"
android:paddingBottom=
"10dp"
android:textColor=
"@color/black_effective"
android:textSize=
"18sp"
/>
</android.support.design.widget.TextInputLayout>
<Button
android:id=
"@+id/btnServerLogin"
style=
"@style/Button.Primary"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_margin=
"15dp"
android:onClick=
"@{() -> viewModel.onServerLoginClick()}"
android:padding=
"10dp"
android:text=
"@string/login"
android:textSize=
"18dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_margin=
"15dp"
android:padding=
"10dp"
android:onClick=
"@{() -> viewModel.onServerLoginClick()}"
android:text=
"@string/login"
android:textSize=
"18dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom|center"
android:layout_marginBottom=
"40dp"
android:orientation=
"horizontal"
>
<ImageButton
android:id=
"@+id/ibGoogleLogin"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:background=
"@color/transparent"
android:scaleType=
"centerCrop"
android:onClick=
"@{() -> viewModel.onGoogleLoginClick()}"
app:srcCompat=
"@drawable/ic_google_plus"
/>
<ImageButton
android:id=
"@+id/ibFbLogin"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:layout_marginLeft=
"24dp"
android:background=
"@color/transparent"
android:scaleType=
"centerCrop"
android:onClick=
"@{() -> viewModel.onFbLoginClick()}"
app:srcCompat=
"@drawable/ic_facebook"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
android:layout_gravity=
"bottom|center"
android:layout_marginBottom=
"40dp"
android:orientation=
"horizontal"
>
<ImageButton
android:id=
"@+id/ibGoogleLogin"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:background=
"@color/transparent"
android:onClick=
"@{() -> viewModel.onGoogleLoginClick()}"
android:scaleType=
"centerCrop"
app:srcCompat=
"@drawable/ic_google_plus"
/>
<ImageButton
android:id=
"@+id/ibFbLogin"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:layout_marginLeft=
"24dp"
android:background=
"@color/transparent"
android:onClick=
"@{() -> viewModel.onFbLoginClick()}"
android:scaleType=
"centerCrop"
app:srcCompat=
"@drawable/ic_facebook"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
<android.support.v4.widget.ContentLoadingProgressBar
android:id=
"@+id/address_looking_up"
style=
"?android:attr/progressBarStyleLarge"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:visibility=
"@{viewModel.isLoading ? View.VISIBLE : View.GONE}"
/>
</FrameLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
浏览文件 @
43eaf7f6
...
...
@@ -20,6 +20,8 @@
<data>
<import
type=
"android.view.View"
/>
<variable
name=
"viewModel"
type=
"com.mindorks.framework.mvvm.ui.main.MainViewModel"
/>
...
...
@@ -27,74 +29,89 @@
</data>
<android.support.v4.widget.DrawerLayout
android:id=
"@+id/drawerView"
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
>
android:layout_height=
"match_parent"
>
<android.support.design.widget.CoordinatorLayout
android:id=
"@+id/clRootView"
<android.support.v4.widget.DrawerLayout
android:id=
"@+id/drawerView"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:
clipChildren=
"fals
e"
>
android:
fitsSystemWindows=
"tru
e"
>
<
Linea
rLayout
android:id=
"@+id/
activityMain
"
<
android.support.design.widget.Coordinato
rLayout
android:id=
"@+id/
clRootView
"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:
orientation=
"vertical
"
>
android:
clipChildren=
"false
"
>
<android.support.design.widget.AppBarLayout
<LinearLayout
android:id=
"@+id/activityMain"
android:layout_width=
"match_parent"
android:layout_height=
"
wrap_cont
ent"
a
pp:elevation=
"5dp
"
>
android:layout_height=
"
match_par
ent"
a
ndroid:orientation=
"vertical
"
>
<android.support.v7.widget.Toolbar
android:id=
"@+id/toolbar"
style=
"@style/Toolbar"
app:subtitleTextColor=
"@color/white"
app:title=
"@string/app_name"
app:titleTextAppearance=
"@style/Toolbar.TitleText"
app:titleTextColor=
"@color/white"
/>
<View
<android.support.design.widget.AppBarLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:elevation=
"5dp"
>
<android.support.v7.widget.Toolbar
android:id=
"@+id/toolbar"
style=
"@style/Toolbar"
app:subtitleTextColor=
"@color/white"
app:title=
"@string/app_name"
app:titleTextAppearance=
"@style/Toolbar.TitleText"
app:titleTextColor=
"@color/white"
/>
<View
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:background=
"@color/light_gray"
/>
</android.support.design.widget.AppBarLayout>
<com.mindorks.placeholderview.SwipePlaceHolderView
android:id=
"@+id/cardsContainer"
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:background=
"@color/light_gray"
/>
android:layout_height=
"match_parent"
/>
</android.support.design.widget.AppBarLayout>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
<com.mindorks.placeholderview.SwipePlaceHolderView
android:id=
"@+id/cardsContainer"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
<android.support.design.widget.NavigationView
android:id=
"@+id/navigationView"
style=
"@style/Widget.Design.NavigationView"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
android:background=
"@color/white"
app:itemBackground=
"@color/white"
app:itemIconTint=
"@color/black_effective"
app:itemTextColor=
"@color/black_effective"
app:menu=
"@menu/drawer"
>
<TextView
android:id=
"@+id/tvAppVersion"
style=
"@style/TextStyle.Title.Sub"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom|end"
android:padding=
"5dp"
android:text=
"@{viewModel.appVersion}"
/>
</android.support.design.widget.NavigationView>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.DrawerLayout>
<android.support.
design.widget.NavigationView
android:id=
"@+id/
navigationView
"
style=
"
@style/Widget.Design.NavigationView
"
<android.support.
v4.widget.ContentLoadingProgressBar
android:id=
"@+id/
address_looking_up
"
style=
"
?android:attr/progressBarStyleLarge
"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
android:background=
"@color/white"
app:itemBackground=
"@color/white"
app:itemIconTint=
"@color/black_effective"
app:itemTextColor=
"@color/black_effective"
app:menu=
"@menu/drawer"
>
<TextView
android:id=
"@+id/tvAppVersion"
style=
"@style/TextStyle.Title.Sub"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom|end"
android:text=
"@{viewModel.appVersion}"
android:padding=
"5dp"
/>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:visibility=
"@{viewModel.isLoading ? View.VISIBLE : View.GONE}"
/>
</FrameLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/fragment_blog.xml
浏览文件 @
43eaf7f6
...
...
@@ -18,24 +18,39 @@
<data>
<import
type=
"android.view.View"
/>
<variable
name=
"viewModel"
type=
"com.mindorks.framework.mvvm.ui.feed.blogs.BlogViewModel"
/>
</data>
<
Linear
Layout
<
Frame
Layout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:orientation=
"vertical"
>
android:layout_height=
"match_parent"
>
<android.support.v7.widget.RecyclerView
android:id=
"@+id/blogRecyclerView"
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:listitem=
"@layout/item_blog_view"
/>
android:gravity=
"center"
android:orientation=
"vertical"
>
<android.support.v7.widget.RecyclerView
android:id=
"@+id/blogRecyclerView"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:listitem=
"@layout/item_blog_view"
/>
</LinearLayout>
</LinearLayout>
<android.support.v4.widget.ContentLoadingProgressBar
android:id=
"@+id/address_looking_up"
style=
"?android:attr/progressBarStyleLarge"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:visibility=
"@{viewModel.isLoading ? View.VISIBLE : View.GONE}"
/>
</FrameLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/fragment_open_source.xml
浏览文件 @
43eaf7f6
...
...
@@ -18,24 +18,39 @@
<data>
<import
type=
"android.view.View"
/>
<variable
name=
"viewModel"
type=
"com.mindorks.framework.mvvm.ui.feed.opensource.OpenSourceViewModel"
/>
</data>
<
Linear
Layout
<
Frame
Layout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:orientation=
"vertical"
>
android:layout_height=
"match_parent"
>
<android.support.v7.widget.RecyclerView
android:id=
"@+id/openSourceRecyclerView"
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:listitem=
"@layout/item_blog_view"
/>
android:gravity=
"center"
android:orientation=
"vertical"
>
<android.support.v7.widget.RecyclerView
android:id=
"@+id/openSourceRecyclerView"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:listitem=
"@layout/item_blog_view"
/>
</LinearLayout>
</LinearLayout>
<android.support.v4.widget.ContentLoadingProgressBar
android:id=
"@+id/address_looking_up"
style=
"?android:attr/progressBarStyleLarge"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:visibility=
"@{viewModel.isLoading ? View.VISIBLE : View.GONE}"
/>
</FrameLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/item_open_source_view.xml
浏览文件 @
43eaf7f6
...
...
@@ -35,7 +35,6 @@
android:layout_height=
"wrap_content"
android:layout_margin=
"8dp"
android:background=
"@color/white"
android:onClick=
"@{() -> viewModel.onItemClick()}"
android:orientation=
"vertical"
app:cardCornerRadius=
"7dp"
app:cardElevation=
"4dp"
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录