Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds-android
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
云深项目组
beyond-clouds-android
Commits
232a8705
Commit
232a8705
authored
Mar 16, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
动态列表接入
parent
64224296
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
593 additions
and
53 deletions
+593
-53
app/build.gradle
+2
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/DynamicListRecyclerViewAdapter.java
+44
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/CommonCategory.java
+78
-9
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/Post.java
+17
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/IPostRepository.java
+14
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/BlogRepositoryImpl.java
+2
-1
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/PostRepositoryImpl.java
+33
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/ProjectRepositoryImpl.java
+2
-1
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/remote/PostApiStore.java
+32
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/component/AppComponent.java
+8
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/component/DynamicFragmentComponent.java
+14
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/component/DynamicListFragmentComponent.java
+15
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModule.java
+7
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModuleBinds.java
+8
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/BlogListFragmentModuleBinds.java
+2
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/DynamicFragmentModuleBinds.java
+18
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/DynamicListFragmentModuleBinds.java
+18
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/HomeFragmentModuleBinds.java
+2
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/ProjectFragmentModuleBinds.java
+2
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/ProjectListFragmentModuleBinds.java
+2
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/SplashActivityModuleBinds.java
+2
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/DynamicFragment.java
+51
-6
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/common/RefreshableFragment.java
+3
-2
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/DynamicFragmentViewModel.java
+25
-12
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/DynamicListFragmentViewModel.java
+45
-0
app/src/main/res/layout/dynamic_item.xml
+122
-0
app/src/main/res/layout/fragment_dynamic.xml
+25
-6
gradle.properties
+0
-2
No files found.
app/build.gradle
View file @
232a8705
...
...
@@ -56,8 +56,8 @@ dependencies {
implementation
'com.github.hackware1993:MagicIndicator:1.5.0'
implementation
"com.squareup.retrofit2:retrofit:$retrofit_version"
implementation
"com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation
'org.jetbrains:annotations:1
5
.0'
implementation
'org.projectlombok:lombok:1.1
6.8
'
//添加lombok依赖
implementation
'org.jetbrains:annotations:1
9.0
.0'
implementation
'org.projectlombok:lombok:1.1
8.12
'
//添加lombok依赖
implementation
'org.glassfish:javax.annotation:10.0-b28'
//java注解
implementation
'com.google.dagger:dagger:2.26'
annotationProcessor
'com.google.dagger:dagger-compiler:2.26'
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/adapter/DynamicListRecyclerViewAdapter.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
adapter
;
import
com.chad.library.adapter.base.BaseQuickAdapter
;
import
com.chad.library.adapter.base.BaseViewHolder
;
import
cn.yunliyunwai.beyondclouds.data.model.Post
;
import
cn.yunliyunwai.beyondclouds.databinding.BlogItemBinding
;
import
cn.yunliyunwai.beyondclouds.util.DateUtils
;
import
cn.yunliyunwai.beyondclouds.util.GlideRoundTransform
;
public
class
DynamicListRecyclerViewAdapter
extends
BaseQuickAdapter
<
Post
,
BaseViewHolder
>
{
private
static
final
GlideRoundTransform
glideRoundTransform
=
new
GlideRoundTransform
(
3
);
public
DynamicListRecyclerViewAdapter
(
int
layoutResId
)
{
super
(
layoutResId
);
}
@Override
protected
void
convert
(
BaseViewHolder
helper
,
Post
post
)
{
BlogItemBinding
binding
=
BlogItemBinding
.
bind
(
helper
.
itemView
);
binding
.
txtTitle
.
setText
(
post
.
getContent
());
binding
.
txtAbstract
.
setText
(
post
.
getContent
());
binding
.
txtAuthor
.
setText
(
post
.
getUserNick
());
binding
.
txtCreateTime
.
setText
(
DateUtils
.
format
(
post
.
getCreateTime
()));
/*if (null != post.getCover() && !TextUtils.isEmpty(post.getCover().trim()) && post.getCover().startsWith("http")) {
binding.blogCover.setVisibility(View.VISIBLE);
RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(R.drawable.pre_load_blog)
.error(R.drawable.pre_load_blog)
.priority(Priority.HIGH)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.transform(glideRoundTransform);
Glide.with(binding.getRoot()).applyDefaultRequestOptions(options).load(post.getCover()).into(binding.blogCover);
} else {
binding.blogCover.setVisibility(View.GONE);
}*/
}
}
\ No newline at end of file
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/CommonCategory.java
View file @
232a8705
...
...
@@ -12,6 +12,16 @@ public class CommonCategory implements Parcelable {
private
static
final
String
CATEGORY_NAME_LATEST
=
"最新"
;
private
static
final
String
CATEGORY_NAME_FOLLOW
=
"关注"
;
private
static
final
String
CATEGORY_NAME_MY
=
"我的"
;
private
static
final
String
CATEGORY_NAME_WORDS
=
"文字"
;
private
static
final
String
CATEGORY_NAME_VIDEOS
=
"视频"
;
private
static
final
String
CATEGORY_NAME_PHOTOS
=
"图片"
;
private
static
final
String
CATEGORY_NAME_HOTS
=
"热门"
;
protected
CommonCategory
(
Parcel
in
)
{
...
...
@@ -46,18 +56,77 @@ public class CommonCategory implements Parcelable {
private
String
categoryName
;
private
CategoryType
categoryType
;
/**
* 推荐
* @return
*/
public
static
CommonCategory
recommend
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_RECOMMEND
,
CategoryType
.
RECOMMEND
);
}
/**
* 最新
* @return
*/
public
static
CommonCategory
latest
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_LATEST
,
CategoryType
.
LATEST
);
}
/**
* 关注
* @return
*/
public
static
CommonCategory
follow
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_FOLLOW
,
CategoryType
.
FOLLOW
);
}
/**
* 我的
* @return
*/
public
static
CommonCategory
my
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_MY
,
CategoryType
.
MY
);
}
/**
* 视频
* @return
*/
public
static
CommonCategory
videos
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_VIDEOS
,
CategoryType
.
VIDEOS
);
}
/**
* 文字
* @return
*/
public
static
CommonCategory
words
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_WORDS
,
CategoryType
.
WORDS
);
}
/**
* 图片
* @return
*/
public
static
CommonCategory
photos
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_PHOTOS
,
CategoryType
.
PHOTOS
);
}
/**
* 热门
* @return
*/
public
static
CommonCategory
hots
()
{
return
new
CommonCategory
(
null
,
CATEGORY_NAME_HOTS
,
CategoryType
.
HOTS
);
}
/**
* 实际栏目
* @param categoryId
* @param categoryName
* @return
*/
public
static
CommonCategory
real
(
Integer
categoryId
,
String
categoryName
)
{
return
new
CommonCategory
(
categoryId
,
categoryName
,
CategoryType
.
REAL
);
}
...
...
@@ -75,15 +144,15 @@ public class CommonCategory implements Parcelable {
}
public
enum
CategoryType
implements
Parcelable
{
RECOMMEND
(
0
)
,
HOTS
(
1
)
,
LATEST
(
2
)
,
REAL
(
3
);
private
int
value
;
CategoryType
(
int
value
)
{
this
.
value
=
value
;
}
RECOMMEND
,
HOTS
,
LATEST
,
FOLLOW
,
MY
,
VIDEOS
,
WORDS
,
PHOTOS
,
REAL
;
public
static
final
Creator
<
CategoryType
>
CREATOR
=
new
Creator
<
CategoryType
>()
{
@Override
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/Post.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
model
;
import
java.util.Date
;
import
java.util.List
;
import
lombok.Data
;
@Data
public
class
Post
{
private
String
postId
;
private
String
userNick
;
private
String
userAvatar
;
private
String
video
;
private
List
<
String
>
pictures
;
private
String
content
;
private
Date
createTime
;
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/IPostRepository.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
;
import
androidx.lifecycle.LiveData
;
import
cn.yunliyunwai.beyondclouds.data.model.Page
;
import
cn.yunliyunwai.beyondclouds.data.model.Post
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
public
interface
IPostRepository
{
LiveData
<
Result
<
Page
<
Post
>>>
getLatestPostList
(
Integer
type
,
Integer
page
,
int
pageSize
);
LiveData
<
Result
<
Page
<
Post
>>>
getRecommendPostList
(
Integer
page
,
int
pageSize
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/BlogRepositoryImpl.java
→
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/
impl/
BlogRepositoryImpl.java
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
;
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
.
impl
;
import
androidx.lifecycle.LiveData
;
...
...
@@ -11,6 +11,7 @@ import cn.yunliyunwai.beyondclouds.data.model.Blog;
import
cn.yunliyunwai.beyondclouds.data.model.BlogCategory
;
import
cn.yunliyunwai.beyondclouds.data.model.Page
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
import
cn.yunliyunwai.beyondclouds.data.source.IBlogRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.local.database.BlogDatabase
;
import
cn.yunliyunwai.beyondclouds.data.source.remote.BlogApiStore
;
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/PostRepositoryImpl.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
.
impl
;
import
androidx.lifecycle.LiveData
;
import
javax.inject.Inject
;
import
javax.inject.Singleton
;
import
cn.yunliyunwai.beyondclouds.data.model.Page
;
import
cn.yunliyunwai.beyondclouds.data.model.Post
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
import
cn.yunliyunwai.beyondclouds.data.source.IPostRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.remote.PostApiStore
;
@Singleton
public
class
PostRepositoryImpl
implements
IPostRepository
{
PostApiStore
postApiStore
;
@Inject
public
PostRepositoryImpl
(
PostApiStore
postApiStore
)
{
this
.
postApiStore
=
postApiStore
;
}
@Override
public
LiveData
<
Result
<
Page
<
Post
>>>
getLatestPostList
(
Integer
type
,
Integer
page
,
int
pageSize
)
{
return
postApiStore
.
getLatestPostList
(
type
,
page
,
pageSize
);
}
@Override
public
LiveData
<
Result
<
Page
<
Post
>>>
getRecommendPostList
(
Integer
page
,
int
pageSize
)
{
return
postApiStore
.
getRecommendBlogList
(
page
,
pageSize
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/ProjectRepositoryImpl.java
→
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/
impl/
ProjectRepositoryImpl.java
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
;
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
.
impl
;
import
androidx.lifecycle.LiveData
;
...
...
@@ -11,6 +11,7 @@ import cn.yunliyunwai.beyondclouds.data.model.Page;
import
cn.yunliyunwai.beyondclouds.data.model.Project
;
import
cn.yunliyunwai.beyondclouds.data.model.ProjectCategory
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
import
cn.yunliyunwai.beyondclouds.data.source.IProjectRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.local.database.ProjectDatabase
;
import
cn.yunliyunwai.beyondclouds.data.source.remote.ProjectApiStore
;
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/remote/PostApiStore.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
source
.
remote
;
import
androidx.lifecycle.LiveData
;
import
cn.yunliyunwai.beyondclouds.data.model.Page
;
import
cn.yunliyunwai.beyondclouds.data.model.Post
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
import
retrofit2.http.GET
;
import
retrofit2.http.Query
;
public
interface
PostApiStore
{
/**
* 推荐动态
* @param page
* @param pageSize
* @return
*/
@GET
(
"post/recommends"
)
LiveData
<
Result
<
Page
<
Post
>>>
getRecommendBlogList
(
@Query
(
"page"
)
Integer
page
,
@Query
(
"size"
)
int
pageSize
);
/**
* 最新动态
* @param page
* @param pageSize
* @return
*/
@GET
(
"posts"
)
LiveData
<
Result
<
Page
<
Post
>>>
getLatestPostList
(
@Query
(
"type"
)
Integer
type
,
@Query
(
"page"
)
Integer
page
,
@Query
(
"size"
)
int
pageSize
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/component/AppComponent.java
View file @
232a8705
...
...
@@ -8,6 +8,8 @@ import cn.yunliyunwai.beyondclouds.MainActivity;
import
cn.yunliyunwai.beyondclouds.di.module.AppModule
;
import
cn.yunliyunwai.beyondclouds.di.module.AppModuleBinds
;
import
cn.yunliyunwai.beyondclouds.di.module.BlogListFragmentModuleBinds
;
import
cn.yunliyunwai.beyondclouds.di.module.DynamicFragmentModuleBinds
;
import
cn.yunliyunwai.beyondclouds.di.module.DynamicListFragmentModuleBinds
;
import
cn.yunliyunwai.beyondclouds.di.module.HomeFragmentModuleBinds
;
import
cn.yunliyunwai.beyondclouds.di.module.ProjectFragmentModuleBinds
;
import
cn.yunliyunwai.beyondclouds.di.module.ProjectListFragmentModuleBinds
;
...
...
@@ -23,8 +25,10 @@ import dagger.Component;
ViewModelFactory
.
ViewModelBuilderModule
.
class
,
HomeFragmentModuleBinds
.
class
,
ProjectFragmentModuleBinds
.
class
,
DynamicFragmentModuleBinds
.
class
,
BlogListFragmentModuleBinds
.
class
,
ProjectListFragmentModuleBinds
.
class
,
DynamicListFragmentModuleBinds
.
class
,
SplashActivityModuleBinds
.
class
})
public
interface
AppComponent
{
...
...
@@ -38,6 +42,10 @@ public interface AppComponent {
ProjectFragmentComponent
.
Factory
projectFragmentComponent
();
DynamicFragmentComponent
.
Factory
dynamicFragmentComponent
();
DynamicListFragmentComponent
.
Factory
dynamicListFragmentComponent
();
SplashActivityComponent
.
Factory
splashActivityComponent
();
BlogListFragmentComponent
.
Factory
blogListFragmentComponent
();
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/di/component/DynamicFragmentComponent.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
di
.
component
;
import
cn.yunliyunwai.beyondclouds.ui.DynamicFragment
;
import
dagger.Subcomponent
;
@Subcomponent
public
interface
DynamicFragmentComponent
{
@Subcomponent
.
Factory
interface
Factory
{
DynamicFragmentComponent
create
();
}
void
inject
(
DynamicFragment
dynamicFragment
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/component/DynamicListFragmentComponent.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
di
.
component
;
import
cn.yunliyunwai.beyondclouds.ui.DynamicFragment
;
import
dagger.Subcomponent
;
@Subcomponent
public
interface
DynamicListFragmentComponent
{
@Subcomponent
.
Factory
interface
Factory
{
DynamicListFragmentComponent
create
();
}
void
inject
(
DynamicFragment
.
DynamicListFragment
dynamicListFragment
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModule.java
View file @
232a8705
...
...
@@ -21,6 +21,7 @@ import cn.yunliyunwai.beyondclouds.adapter.common.LiveDataCallAdapterFactory;
import
cn.yunliyunwai.beyondclouds.data.source.local.database.BlogDatabase
;
import
cn.yunliyunwai.beyondclouds.data.source.local.database.ProjectDatabase
;
import
cn.yunliyunwai.beyondclouds.data.source.remote.BlogApiStore
;
import
cn.yunliyunwai.beyondclouds.data.source.remote.PostApiStore
;
import
cn.yunliyunwai.beyondclouds.data.source.remote.ProjectApiStore
;
import
cn.yunliyunwai.beyondclouds.util.AppExecutors
;
import
dagger.Module
;
...
...
@@ -46,6 +47,12 @@ public class AppModule {
@Singleton
@Provides
public
PostApiStore
providePostApiRemoteDataSource
(
Retrofit
retrofit
)
{
return
retrofit
.
create
(
PostApiStore
.
class
);
}
@Singleton
@Provides
BlogDatabase
provideBlogDatabase
(
Context
context
)
{
return
Room
.
databaseBuilder
(
context
.
getApplicationContext
(),
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/AppModuleBinds.java
View file @
232a8705
...
...
@@ -4,10 +4,12 @@ import androidx.lifecycle.ViewModel;
import
javax.inject.Singleton
;
import
cn.yunliyunwai.beyondclouds.data.source.BlogRepositoryImpl
;
import
cn.yunliyunwai.beyondclouds.data.source.IBlogRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.IPostRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.IProjectRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.ProjectRepositoryImpl
;
import
cn.yunliyunwai.beyondclouds.data.source.impl.BlogRepositoryImpl
;
import
cn.yunliyunwai.beyondclouds.data.source.impl.PostRepositoryImpl
;
import
cn.yunliyunwai.beyondclouds.data.source.impl.ProjectRepositoryImpl
;
import
cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel
;
import
dagger.Binds
;
import
dagger.Module
;
...
...
@@ -25,6 +27,10 @@ public abstract class AppModuleBinds {
@Binds
abstract
IProjectRepository
bindProjectRepository
(
ProjectRepositoryImpl
projectRepository
);
@Singleton
@Binds
abstract
IPostRepository
bindPostRepository
(
PostRepositoryImpl
postRepository
);
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
MainActivityViewModel
.
class
)
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/BlogListFragmentModuleBinds.java
View file @
232a8705
...
...
@@ -9,11 +9,11 @@ import dagger.Module;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
BlogListFragmentComponent
.
class
)
public
abstract
class
BlogListFragmentModuleBinds
{
public
interface
BlogListFragmentModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
BlogListFragmentViewModel
.
class
)
abstract
ViewModel
bindBlogListFragmentViewModel
(
BlogListFragmentViewModel
blogListFragmentViewModel
);
ViewModel
bindBlogListFragmentViewModel
(
BlogListFragmentViewModel
blogListFragmentViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/DynamicFragmentModuleBinds.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
di
.
module
;
import
androidx.lifecycle.ViewModel
;
import
cn.yunliyunwai.beyondclouds.di.component.DynamicFragmentComponent
;
import
cn.yunliyunwai.beyondclouds.viewmodel.DynamicFragmentViewModel
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
DynamicFragmentComponent
.
class
)
public
interface
DynamicFragmentModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
DynamicFragmentViewModel
.
class
)
ViewModel
bindDynamicFragmentViewModel
(
DynamicFragmentViewModel
dynamicFragmentViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/DynamicListFragmentModuleBinds.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
di
.
module
;
import
androidx.lifecycle.ViewModel
;
import
cn.yunliyunwai.beyondclouds.di.component.DynamicListFragmentComponent
;
import
cn.yunliyunwai.beyondclouds.viewmodel.DynamicListFragmentViewModel
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
DynamicListFragmentComponent
.
class
)
public
interface
DynamicListFragmentModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
DynamicListFragmentViewModel
.
class
)
ViewModel
bindDynamicListFragmentViewModel
(
DynamicListFragmentViewModel
dynamicListFragmentViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/HomeFragmentModuleBinds.java
View file @
232a8705
...
...
@@ -9,11 +9,11 @@ import dagger.Module;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
HomeFragmentComponent
.
class
)
public
abstract
class
HomeFragmentModuleBinds
{
public
interface
HomeFragmentModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
HomeFragmentViewModel
.
class
)
abstract
ViewModel
bindHomeFragmentViewModel
(
HomeFragmentViewModel
homeFragmentViewModel
);
ViewModel
bindHomeFragmentViewModel
(
HomeFragmentViewModel
homeFragmentViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/ProjectFragmentModuleBinds.java
View file @
232a8705
...
...
@@ -9,11 +9,11 @@ import dagger.Module;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
ProjectFragmentComponent
.
class
)
public
abstract
class
ProjectFragmentModuleBinds
{
public
interface
ProjectFragmentModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
ProjectFragmentViewModel
.
class
)
abstract
ViewModel
bindProjectFragmentViewModel
(
ProjectFragmentViewModel
projectFragmentViewModel
);
ViewModel
bindProjectFragmentViewModel
(
ProjectFragmentViewModel
projectFragmentViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/ProjectListFragmentModuleBinds.java
View file @
232a8705
...
...
@@ -9,11 +9,11 @@ import dagger.Module;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
ProjectListFragmentComponent
.
class
)
public
abstract
class
ProjectListFragmentModuleBinds
{
public
interface
ProjectListFragmentModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
ProjectListFragmentViewModel
.
class
)
abstract
ViewModel
bindProjectListFragmentViewModel
(
ProjectListFragmentViewModel
projectListFragmentViewModel
);
ViewModel
bindProjectListFragmentViewModel
(
ProjectListFragmentViewModel
projectListFragmentViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/di/module/SplashActivityModuleBinds.java
View file @
232a8705
...
...
@@ -9,11 +9,11 @@ import dagger.Module;
import
dagger.multibindings.IntoMap
;
@Module
(
subcomponents
=
SplashActivityComponent
.
class
)
public
abstract
class
SplashActivityModuleBinds
{
public
interface
SplashActivityModuleBinds
{
@Binds
@IntoMap
@ViewModelFactory
.
ViewModelKey
(
SplashActivityViewModel
.
class
)
abstract
ViewModel
bindSplashActivityViewModel
(
SplashActivityViewModel
splashActivityViewModel
);
ViewModel
bindSplashActivityViewModel
(
SplashActivityViewModel
splashActivityViewModel
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/DynamicFragment.java
View file @
232a8705
...
...
@@ -7,32 +7,77 @@ import android.view.ViewGroup;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
androidx.lifecycle.ViewModelProvider
;
import
com.chad.library.adapter.base.BaseQuickAdapter
;
import
com.chad.library.adapter.base.BaseViewHolder
;
import
javax.inject.Inject
;
import
cn.yunliyunwai.beyondclouds.R
;
import
cn.yunliyunwai.beyondclouds.adapter.DynamicListRecyclerViewAdapter
;
import
cn.yunliyunwai.beyondclouds.base.BaseFragment
;
import
cn.yunliyunwai.beyondclouds.data.model.Post
;
import
cn.yunliyunwai.beyondclouds.databinding.FragmentDynamicBinding
;
import
cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory
;
import
cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment
;
import
cn.yunliyunwai.beyondclouds.util.CategoryViewpagerUtils
;
import
cn.yunliyunwai.beyondclouds.util.ContextUtils
;
import
cn.yunliyunwai.beyondclouds.viewmodel.DynamicFragmentViewModel
;
import
cn.yunliyunwai.beyondclouds.viewmodel.DynamicListFragmentViewModel
;
public
class
DynamicFragment
extends
BaseFragment
<
DynamicFragmentViewModel
,
FragmentDynamicBinding
>
{
@Override
public
void
onViewCreated
(
@NonNull
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
}
@Inject
ViewModelProvider
.
Factory
factory
;
@Override
protected
void
initInject
()
{
ContextUtils
.
getAppComponent
(
requireActivity
()).
dynamicFragmentComponent
().
create
().
inject
(
this
);
}
@Override
protected
DynamicFragmentViewModel
initViewModel
()
{
return
new
ViewModelProvider
(
this
,
DynamicFragmentViewModel
.
factory
).
get
(
DynamicFragmentViewModel
.
class
);
return
new
ViewModelProvider
(
this
,
factory
).
get
(
DynamicFragmentViewModel
.
class
);
}
@Override
protected
FragmentDynamicBinding
initDataBinding
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
)
{
return
FragmentDynamicBinding
.
inflate
(
inflater
,
container
,
false
);
}
@Override
public
void
onViewCreated
(
@NonNull
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
CategoryViewpagerUtils
.
bindViewPager
(
this
,
new
FragmentFactory
()
{
@Override
public
Fragment
create
()
{
return
new
DynamicListFragment
();
}
},
binding
.
magicIndicator
,
binding
.
viewPager
,
viewModel
);
}
public
static
class
DynamicListFragment
extends
RefreshableFragment
<
Post
,
DynamicListFragmentViewModel
>
{
@Inject
ViewModelProvider
.
Factory
factory
;
@Override
protected
void
initInject
()
{
ContextUtils
.
getAppComponent
(
requireActivity
()).
dynamicListFragmentComponent
().
create
().
inject
(
this
);
}
@Override
protected
DynamicListFragmentViewModel
initViewModel
()
{
return
new
ViewModelProvider
(
this
,
factory
).
get
(
DynamicListFragmentViewModel
.
class
);
}
@Override
protected
BaseQuickAdapter
<
Post
,
BaseViewHolder
>
createAdapter
()
{
return
new
DynamicListRecyclerViewAdapter
(
R
.
layout
.
dynamic_item
);
}
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/common/RefreshableFragment.java
View file @
232a8705
...
...
@@ -99,8 +99,6 @@ public abstract class RefreshableFragment<T, VM extends PageableViewModel<T>> ex
binding
.
swipeRefreshLayout
.
setOnRefreshListener
(
this
);
}
protected
abstract
BaseQuickAdapter
<
T
,
BaseViewHolder
>
createAdapter
();
@Override
public
void
onResume
()
{
super
.
onResume
();
...
...
@@ -114,4 +112,6 @@ public abstract class RefreshableFragment<T, VM extends PageableViewModel<T>> ex
public
void
onRefresh
()
{
viewModel
.
loadFirstPage
(
category
);
}
protected
abstract
BaseQuickAdapter
<
T
,
BaseViewHolder
>
createAdapter
();
}
\ No newline at end of file
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/DynamicFragmentViewModel.java
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
viewmodel
;
import
androidx.annotation.NonNull
;
import
androidx.lifecycle.ViewModel
;
import
androidx.lifecycle.ViewModelProvider
;
public
class
DynamicFragmentViewModel
extends
ViewModel
{
public
static
ViewModelProvider
.
Factory
factory
=
new
ViewModelProvider
.
Factory
()
{
@NonNull
@Override
public
<
T
extends
ViewModel
>
T
create
(
@NonNull
Class
<
T
>
modelClass
)
{
return
(
T
)
new
DynamicFragmentViewModel
();
}
};
import
java.util.Arrays
;
import
javax.inject.Inject
;
import
cn.yunliyunwai.beyondclouds.data.model.CommonCategory
;
import
cn.yunliyunwai.beyondclouds.viewmodel.common.CategoryViewModel
;
public
class
DynamicFragmentViewModel
extends
CategoryViewModel
{
@Inject
public
DynamicFragmentViewModel
()
{
}
@Override
public
void
loadCategories
()
{
refreshCategories
(
Arrays
.
asList
(
CommonCategory
.
recommend
(),
CommonCategory
.
latest
(),
CommonCategory
.
follow
(),
CommonCategory
.
my
(),
CommonCategory
.
words
(),
CommonCategory
.
photos
(),
CommonCategory
.
videos
()
));
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/DynamicListFragmentViewModel.java
0 → 100644
View file @
232a8705
package
cn
.
yunliyunwai
.
beyondclouds
.
viewmodel
;
import
androidx.lifecycle.Observer
;
import
javax.inject.Inject
;
import
cn.yunliyunwai.beyondclouds.data.model.CommonCategory
;
import
cn.yunliyunwai.beyondclouds.data.model.Page
;
import
cn.yunliyunwai.beyondclouds.data.model.Post
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
import
cn.yunliyunwai.beyondclouds.data.source.IPostRepository
;
import
cn.yunliyunwai.beyondclouds.viewmodel.common.PageableViewModel
;
public
class
DynamicListFragmentViewModel
extends
PageableViewModel
<
Post
>
{
IPostRepository
postRepository
;
@Inject
public
DynamicListFragmentViewModel
(
IPostRepository
postRepository
)
{
this
.
postRepository
=
postRepository
;
}
@Override
public
void
doRequest
(
CommonCategory
category
,
int
page
,
int
defaultPageSize
,
Observer
<
Result
<
Page
<
Post
>>>
observer
)
{
switch
(
category
.
getCategoryType
())
{
case
RECOMMEND:
postRepository
.
getRecommendPostList
(
page
,
defaultPageSize
).
observeForever
(
observer
);
break
;
case
LATEST:
case
FOLLOW:
case
MY:
postRepository
.
getLatestPostList
(
null
,
page
,
defaultPageSize
).
observeForever
(
observer
);
break
;
case
WORDS:
postRepository
.
getLatestPostList
(
0
,
page
,
defaultPageSize
).
observeForever
(
observer
);
break
;
case
PHOTOS:
postRepository
.
getLatestPostList
(
1
,
page
,
defaultPageSize
).
observeForever
(
observer
);
break
;
case
VIDEOS:
postRepository
.
getLatestPostList
(
2
,
page
,
defaultPageSize
).
observeForever
(
observer
);
break
;
}
}
}
app/src/main/res/layout/dynamic_item.xml
0 → 100644
View file @
232a8705
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/background_white_touchable"
android:clickable=
"true"
android:paddingStart=
"12dp"
android:paddingLeft=
"12dp"
android:paddingTop=
"16dp"
android:paddingEnd=
"12dp"
android:paddingRight=
"12dp"
>
<TextView
android:id=
"@+id/txt_title"
android:layout_width=
"wrap_content"
android:layout_height=
"22dp"
android:text=
"SpringBoot迭代发布JRA瘦身配置"
android:textSize=
"16sp"
android:textColor=
"@color/colorTextAccent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.constraintlayout.widget.Barrier
android:id=
"@+id/barrier_title"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:barrierDirection=
"bottom"
app:constraint_referenced_ids=
"txt_title"
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteY=
"16dp"
/>
<TextView
android:id=
"@+id/txt_abstract"
android:layout_marginTop=
"10dp"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:maxHeight=
"55dp"
android:textSize=
"12sp"
android:paddingEnd=
"10dp"
android:paddingRight=
"10dp"
android:text=
"我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代"
app:layout_constraintTop_toBottomOf=
"@id/barrier_title"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@id/blog_cover"
/>
<ImageView
android:layout_marginTop=
"10dp"
android:id=
"@+id/blog_cover"
app:layout_constraintTop_toBottomOf=
"@id/barrier_title"
app:layout_constraintEnd_toEndOf=
"parent"
android:layout_width=
"82dp"
android:layout_height=
"55dp"
android:maxWidth=
"82dp"
android:maxHeight=
"55dp"
android:src=
"@drawable/pic1"
/>
<androidx.constraintlayout.widget.Barrier
android:id=
"@+id/barrier_content"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:barrierDirection=
"bottom"
app:constraint_referenced_ids=
"txt_abstract,blog_cover"
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteY=
"16dp"
/>
<TextView
android:id=
"@+id/txt_author"
android:layout_marginTop=
"10dp"
android:text=
"段启岩"
android:textSize=
"10sp"
android:textColor=
"@color/colorText"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/barrier_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<TextView
android:id=
"@+id/txt_dot"
android:text=
"·"
android:layout_marginTop=
"10dp"
android:textSize=
"10sp"
android:textStyle=
"bold"
android:textColor=
"@color/colorText"
app:layout_constraintTop_toBottomOf=
"@id/barrier_content"
app:layout_constraintStart_toEndOf=
"@id/txt_author"
android:paddingStart=
"6dp"
android:paddingLeft=
"6dp"
android:paddingEnd=
"6dp"
android:paddingRight=
"6dp"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<TextView
android:id=
"@+id/txt_create_time"
android:layout_marginTop=
"10dp"
android:textSize=
"10sp"
android:textColor=
"@color/colorText"
android:text=
"2020-2-18 10:24:00"
app:layout_constraintTop_toBottomOf=
"@id/barrier_content"
app:layout_constraintStart_toEndOf=
"@id/txt_dot"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<androidx.constraintlayout.widget.Barrier
android:id=
"@+id/barrier_info"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:barrierDirection=
"bottom"
app:constraint_referenced_ids=
"txt_create_time,txt_author,txt_dot"
tools:layout_editor_absoluteX=
"12dp"
tools:layout_editor_absoluteY=
"16dp"
/>
<View
app:layout_constraintTop_toBottomOf=
"@id/barrier_info"
android:layout_marginTop=
"18dp"
android:layout_width=
"0dp"
android:layout_height=
"1dp"
android:background=
"#efefef"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_dynamic.xml
View file @
232a8705
...
...
@@ -5,14 +5,32 @@
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<TextView
android:id=
"@+id/textView"
android:layout_width=
"wrap_content"
<net.lucode.hackware.magicindicator.MagicIndicator
android:id=
"@+id/magic_indicator"
android:layout_width=
"match_parent"
android:layout_height=
"40dp"
android:background=
"@color/colorWhite"
android:paddingStart=
"6dp"
android:paddingLeft=
"6dp"
android:paddingEnd=
"6dp"
android:paddingRight=
"6dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<cn.yunliyunwai.beyondclouds.view.BeyondSearchBar
android:id=
"@+id/search_bar"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"动态"
android:textSize=
"24dp"
app:layout_constraintTop_toBottomOf=
"@id/magic_indicator"
app:search_input_hint=
"搜索话题/用户"
/>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/view_pager"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_to
TopOf=
"parent
"
/>
app:layout_constraintTop_to
BottomOf=
"@id/search_bar
"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
gradle.properties
View file @
232a8705
...
...
@@ -17,5 +17,3 @@ org.gradle.jvmargs=-Xmx1536m
android.useAndroidX
=
true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier
=
true
android.enableSeparateAnnotationProcessing
=
true
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment