diff --git a/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java b/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java
index cc2fde9..b31975d 100644
--- a/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java
+++ b/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java
@@ -44,6 +44,7 @@ public class ConfigConstants {
//module2模块路由路径
public static final String PATH_MODULE2_PROVIDER = "/module2/main/service";
public static final String PATH_GANK = "/module2/gank";
+ public static final String PATH_LEISURE_READ = "/module2/leisureRead";
public static final String PATH_WELFARE = "/module2/welfare";
public static final String PATH_ABOUT = "/module2/about";
public static final String PATH_ENCOURAGE = "/module2/encourage";
diff --git a/base/src/main/res/drawable-xhdpi/ic_close.png b/base/src/main/res/drawable-xhdpi/ic_close.png
new file mode 100644
index 0000000..3a10f32
Binary files /dev/null and b/base/src/main/res/drawable-xhdpi/ic_close.png differ
diff --git a/base/src/main/res/layout/layout_spinner_dropdown_item.xml b/base/src/main/res/layout/layout_spinner_dropdown_item.xml
index eaebe17..a5319d3 100644
--- a/base/src/main/res/layout/layout_spinner_dropdown_item.xml
+++ b/base/src/main/res/layout/layout_spinner_dropdown_item.xml
@@ -8,6 +8,6 @@
android:padding="@dimen/dp_10"
android:singleLine="true"
android:textColor="@color/text_color"
- android:textSize="@dimen/sp_14">
+ android:textSize="@dimen/sp_16">
\ No newline at end of file
diff --git a/main/src/main/java/com/heyongrui/main/HomeFragment.java b/main/src/main/java/com/heyongrui/main/HomeFragment.java
index cddc4c1..624cbb4 100644
--- a/main/src/main/java/com/heyongrui/main/HomeFragment.java
+++ b/main/src/main/java/com/heyongrui/main/HomeFragment.java
@@ -27,8 +27,7 @@ protected void initView(Bundle savedInstanceState) {
addOnClickListeners(view -> {
int id = view.getId();
if (id == R.id.tv_home) {
-// ARouter.getInstance().build(ConfigConstants.PATH_USER).withBoolean(ConfigConstants.IS_NEED_INTERCEPT, true).navigation();
- ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", "https://ys.juan8014.cn/yin/").navigation();
+ ARouter.getInstance().build(ConfigConstants.PATH_USER).withBoolean(ConfigConstants.IS_NEED_INTERCEPT, true).navigation();
}
}, R.id.tv_home);
}
diff --git a/module/src/main/java/com/heyongrui/module/ModuleFragment.java b/module/src/main/java/com/heyongrui/module/ModuleFragment.java
index 7a371e6..59bd601 100644
--- a/module/src/main/java/com/heyongrui/module/ModuleFragment.java
+++ b/module/src/main/java/com/heyongrui/module/ModuleFragment.java
@@ -82,6 +82,7 @@ private void initRecyclerView(RecyclerView recyclerView) {
case 4://探索
break;
case 5://音乐
+ ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", "https://ys.juan8014.cn/yin/").navigation();
break;
case 6://开眼
ARouter.getInstance().build(ConfigConstants.PATH_KAIYAN_LIST).withInt("type", 1).navigation();
diff --git a/module/src/main/java/com/heyongrui/module/h5/X5WebViewFragment.java b/module/src/main/java/com/heyongrui/module/h5/X5WebViewFragment.java
index 2d407df..f3c8a7b 100644
--- a/module/src/main/java/com/heyongrui/module/h5/X5WebViewFragment.java
+++ b/module/src/main/java/com/heyongrui/module/h5/X5WebViewFragment.java
@@ -64,8 +64,10 @@ protected void initView(Bundle savedInstanceState) {
int id = view.getId();
if (id == R.id.iv_back) {
backLogic();
+ } else if (id == R.id.iv_close) {
+ mActivity.finish();
}
- }, R.id.iv_back);
+ }, R.id.iv_back, R.id.iv_close);
}
@Override
diff --git a/module/src/main/res/layout/fragment_x5webview.xml b/module/src/main/res/layout/fragment_x5webview.xml
index 87bdfe2..205a3b5 100644
--- a/module/src/main/res/layout/fragment_x5webview.xml
+++ b/module/src/main/res/layout/fragment_x5webview.xml
@@ -28,12 +28,24 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
diff --git a/module2/src/main/AndroidManifest.xml b/module2/src/main/AndroidManifest.xml
index 23f4244..c92cbf2 100644
--- a/module2/src/main/AndroidManifest.xml
+++ b/module2/src/main/AndroidManifest.xml
@@ -14,5 +14,8 @@
+
diff --git a/module2/src/main/debug/AndroidManifest.xml b/module2/src/main/debug/AndroidManifest.xml
index b48cbb0..22db8ff 100644
--- a/module2/src/main/debug/AndroidManifest.xml
+++ b/module2/src/main/debug/AndroidManifest.xml
@@ -30,6 +30,9 @@
+
diff --git a/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java b/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java
index 513674d..1fd21d6 100644
--- a/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java
+++ b/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java
@@ -137,6 +137,9 @@ private void initBalls() {
case 6://拓展资源
ARouter.getInstance().build(ConfigConstants.PATH_GANK).withString("category", "拓展资源").navigation();
break;
+ case 8://瞎推荐
+ ARouter.getInstance().build(ConfigConstants.PATH_LEISURE_READ).navigation();
+ break;
case 9://关于
ARouter.getInstance().build(ConfigConstants.PATH_ABOUT).navigation();
break;
diff --git a/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionAdapter.java b/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionAdapter.java
index 165f345..21e9b51 100644
--- a/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionAdapter.java
+++ b/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionAdapter.java
@@ -22,6 +22,7 @@
import com.heyongrui.base.utils.UiUtil;
import com.heyongrui.module2.R;
import com.heyongrui.module2.data.dto.GankDto;
+import com.heyongrui.module2.data.dto.LeisureReadDto;
import java.util.List;
@@ -40,6 +41,7 @@ public Module2SectionAdapter(int sectionHeadResId, List da
super(sectionHeadResId, data);
addItemType(Module2SectionEntity.WELFARE, R.layout.recycle_item_welfare);
addItemType(Module2SectionEntity.GANK, R.layout.recycle_item_android);
+ addItemType(Module2SectionEntity.LEISURE_READ, R.layout.recycle_item_leisure_read);
}
@Override
@@ -55,9 +57,9 @@ protected void convert(BaseViewHolder helper, Module2SectionEntity item) {
case Module2SectionEntity.WELFARE: {
ConstraintLayout content = helper.getView(R.id.content);
ImageView coverIv = helper.getView(R.id.iv);
- GankDto.GankBean gankBean = item.getGankBean();
- if (gankBean == null) return;
- String url = gankBean.getUrl();
+ GankDto gankDto = item.getGankDto();
+ if (gankDto == null) return;
+ String url = gankDto.getUrl();
RequestOptions options = new RequestOptions()
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder_fail)
@@ -82,11 +84,11 @@ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition sup
TextView tvDate = helper.getView(R.id.tv_date);
String title = "", type = "", date = "";
- GankDto.GankBean gankBean = item.getGankBean();
- if (null != gankBean) {
- title = gankBean.getDesc();
- type = gankBean.getType();
- String publishedAt = gankBean.getPublishedAt();
+ GankDto gankDto = item.getGankDto();
+ if (null != gankDto) {
+ title = gankDto.getDesc();
+ type = gankDto.getType();
+ String publishedAt = gankDto.getPublishedAt();
date = TimeUtil.getDateString(publishedAt, TimeUtil.ISO8601, TimeUtil.DAY_ONE);
}
tvTitle.setText(TextUtils.isEmpty(title) ? "" : title);
@@ -94,6 +96,37 @@ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition sup
tvDate.setText(TextUtils.isEmpty(date) ? "" : date);
}
break;
+ case Module2SectionEntity.LEISURE_READ: {
+ UiUtil.setOnclickFeedBack(mContext, ContextCompat.getColor(mContext, R.color.background), ContextCompat.getColor(mContext, R.color.gray), helper.itemView);
+ ConstraintLayout content = helper.getView(R.id.content);
+ ImageView ivCover = helper.getView(R.id.iv_cover);
+ TextView tvTitle = helper.getView(R.id.tv_title);
+
+ String cover = "", title = "";
+ LeisureReadDto leisureReadDto = item.getLeisureReadDto();
+ if (null != leisureReadDto) {
+ cover = leisureReadDto.getCover();
+ title = leisureReadDto.getTitle();
+ }
+
+ RequestOptions options = new RequestOptions()
+ .placeholder(R.drawable.placeholder)
+ .error(R.drawable.placeholder_fail)
+ .diskCacheStrategy(DiskCacheStrategy.NONE);
+ GlideApp.with(mContext).asBitmap().load(cover).apply(options).into(new SimpleTarget() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
+ float ratio = (float) resource.getWidth() / resource.getHeight();
+ ConstraintSet constraintSet = new ConstraintSet();
+ constraintSet.clone(content);
+ constraintSet.setDimensionRatio(ivCover.getId(), ratio + "");
+ constraintSet.applyTo(content);
+ ivCover.setImageBitmap(resource);
+ }
+ });
+ tvTitle.setText(TextUtils.isEmpty(title) ? "" : title);
+ }
+ break;
}
}
}
diff --git a/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionEntity.java b/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionEntity.java
index 3e9bc21..314be9d 100644
--- a/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionEntity.java
+++ b/module2/src/main/java/com/heyongrui/module2/adapter/Module2SectionEntity.java
@@ -3,6 +3,7 @@
import com.chad.library.adapter.base.entity.MultiItemEntity;
import com.chad.library.adapter.base.entity.SectionMultiEntity;
import com.heyongrui.module2.data.dto.GankDto;
+import com.heyongrui.module2.data.dto.LeisureReadDto;
import java.util.List;
@@ -11,15 +12,17 @@
* 2019/6/25 18:13
*/
public class Module2SectionEntity extends SectionMultiEntity implements MultiItemEntity {
-
+
public static final int WELFARE = 100;
public static final int GANK = 101;
+ public static final int LEISURE_READ = 102;
private int itemType;
private int spanSize;
private Object object;
- private GankDto.GankBean gankBean;
+ private GankDto gankDto;
+ private LeisureReadDto leisureReadDto;
public Module2SectionEntity(boolean isHeader, String header, boolean isShow) {
super(isHeader, header);
@@ -40,8 +43,10 @@ public Module2SectionEntity(int itemType, int spanSize, Object object) {
// if (o instanceof BannerDto) {
// this.bannerDtoList = (List) object;
// }
- } else if (object instanceof GankDto.GankBean) {
- this.gankBean = (GankDto.GankBean) object;
+ } else if (object instanceof GankDto) {
+ this.gankDto = (GankDto) object;
+ } else if (object instanceof LeisureReadDto) {
+ this.leisureReadDto = (LeisureReadDto) object;
}
}
}
@@ -71,11 +76,19 @@ public void setObject(Object object) {
this.object = object;
}
- public GankDto.GankBean getGankBean() {
- return gankBean;
+ public GankDto getGankDto() {
+ return gankDto;
+ }
+
+ public void setGankDto(GankDto gankDto) {
+ this.gankDto = gankDto;
+ }
+
+ public LeisureReadDto getLeisureReadDto() {
+ return leisureReadDto;
}
- public void setGankBean(GankDto.GankBean gankBean) {
- this.gankBean = gankBean;
+ public void setLeisureReadDto(LeisureReadDto leisureReadDto) {
+ this.leisureReadDto = leisureReadDto;
}
}
diff --git a/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java b/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java
index 43d6a58..c6d2eaa 100644
--- a/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java
+++ b/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java
@@ -7,6 +7,7 @@
import com.heyongrui.base.dagger.AppComponent;
import com.heyongrui.base.dagger.PerActivity;
import com.heyongrui.module2.gank.presenter.GankPresenter;
+import com.heyongrui.module2.gank.presenter.LeisureReadPresenter;
import dagger.Component;
@@ -24,4 +25,6 @@ public interface Module2Component {
Fragment getFragment();
void inject(GankPresenter gankPresenter);
+
+ void inject(LeisureReadPresenter leisureReadPresenter);
}
diff --git a/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java b/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java
index f5c1e74..33cd756 100644
--- a/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java
+++ b/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java
@@ -1,6 +1,12 @@
package com.heyongrui.module2.data.api;
import com.heyongrui.module2.data.dto.GankDto;
+import com.heyongrui.module2.data.dto.GankResponse;
+import com.heyongrui.module2.data.dto.LeisureReadCategoryDto;
+import com.heyongrui.module2.data.dto.LeisureReadDto;
+import com.heyongrui.module2.data.dto.LeisureReadSubCategoryDto;
+
+import java.util.List;
import io.reactivex.Observable;
import retrofit2.http.GET;
@@ -13,10 +19,34 @@
public interface GankApi {
/**
+ * 获取分类数据
+ *
* @param category 数据类型: 福利 | Android | iOS | 休息视频 | 拓展资源 | 前端 | all
* @param per_page 请求个数: 数字,大于0
* @param page 第几页:数字,大于0
*/
@GET("data/{category}/{per_page}/{page}")
- Observable getGankCategory(@Path("category") String category, @Path("per_page") int per_page, @Path("page") int page);
+ Observable>> getGankCategory(@Path("category") String category, @Path("per_page") int per_page, @Path("page") int page);
+
+ /**
+ * 获取闲读主分类
+ */
+ @GET("/api/xiandu/categories")
+ Observable>> getLeisureReadCategory();
+
+ /**
+ * 获取闲读子分类
+ */
+ @GET("/api/xiandu/category/{subCategory}")
+ Observable>> getLeisureReadSubCategory(@Path("subCategory") String subCategory);
+
+ /**
+ * 获取闲读数据
+ *
+ * @param id 后面可接受参数为子分类返回的id
+ * @param perPage 每页的个数
+ * @param page 第几页,从1开始
+ */
+ @GET("/api/xiandu/data/id/{id}/count/{perPage}/page/{page}")
+ Observable>> getLeisureRead(@Path("id") String id, @Path("perPage") int perPage, @Path("page") int page);
}
diff --git a/module2/src/main/java/com/heyongrui/module2/data/dto/GankDto.java b/module2/src/main/java/com/heyongrui/module2/data/dto/GankDto.java
index f306675..b63fab3 100644
--- a/module2/src/main/java/com/heyongrui/module2/data/dto/GankDto.java
+++ b/module2/src/main/java/com/heyongrui/module2/data/dto/GankDto.java
@@ -1,114 +1,89 @@
package com.heyongrui.module2.data.dto;
-import java.util.List;
-
/**
* Created by Mr.He on 2019/3/10.
*/
public class GankDto {
-
- private boolean error;
- private List results;
-
- public boolean isError() {
- return error;
+ private String _id;
+ private String createdAt;
+ private String desc;
+ private String publishedAt;
+ private String source;
+ private String type;
+ private String url;
+ private boolean used;
+ private String who;
+
+ public String get_id() {
+ return _id;
}
- public void setError(boolean error) {
- this.error = error;
+ public void set_id(String _id) {
+ this._id = _id;
}
- public List getResults() {
- return results;
+ public String getCreatedAt() {
+ return createdAt;
}
- public void setResults(List results) {
- this.results = results;
+ public void setCreatedAt(String createdAt) {
+ this.createdAt = createdAt;
}
- public static class GankBean {
-
- private String _id;
- private String createdAt;
- private String desc;
- private String publishedAt;
- private String source;
- private String type;
- private String url;
- private boolean used;
- private String who;
-
- public String get_id() {
- return _id;
- }
-
- public void set_id(String _id) {
- this._id = _id;
- }
-
- public String getCreatedAt() {
- return createdAt;
- }
-
- public void setCreatedAt(String createdAt) {
- this.createdAt = createdAt;
- }
-
- public String getDesc() {
- return desc;
- }
+ public String getDesc() {
+ return desc;
+ }
- public void setDesc(String desc) {
- this.desc = desc;
- }
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
- public String getPublishedAt() {
- return publishedAt;
- }
+ public String getPublishedAt() {
+ return publishedAt;
+ }
- public void setPublishedAt(String publishedAt) {
- this.publishedAt = publishedAt;
- }
+ public void setPublishedAt(String publishedAt) {
+ this.publishedAt = publishedAt;
+ }
- public String getSource() {
- return source;
- }
+ public String getSource() {
+ return source;
+ }
- public void setSource(String source) {
- this.source = source;
- }
+ public void setSource(String source) {
+ this.source = source;
+ }
- public String getType() {
- return type;
- }
+ public String getType() {
+ return type;
+ }
- public void setType(String type) {
- this.type = type;
- }
+ public void setType(String type) {
+ this.type = type;
+ }
- public String getUrl() {
- return url;
- }
+ public String getUrl() {
+ return url;
+ }
- public void setUrl(String url) {
- this.url = url;
- }
+ public void setUrl(String url) {
+ this.url = url;
+ }
- public boolean isUsed() {
- return used;
- }
+ public boolean isUsed() {
+ return used;
+ }
- public void setUsed(boolean used) {
- this.used = used;
- }
+ public void setUsed(boolean used) {
+ this.used = used;
+ }
- public String getWho() {
- return who;
- }
+ public String getWho() {
+ return who;
+ }
- public void setWho(String who) {
- this.who = who;
- }
+ public void setWho(String who) {
+ this.who = who;
}
}
diff --git a/module2/src/main/java/com/heyongrui/module2/data/dto/GankResponse.kt b/module2/src/main/java/com/heyongrui/module2/data/dto/GankResponse.kt
new file mode 100644
index 0000000..69052a9
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/data/dto/GankResponse.kt
@@ -0,0 +1,6 @@
+package com.heyongrui.module2.data.dto
+
+class GankResponse {
+ var error: Boolean? = false
+ var results: T? = null
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadCategoryDto.kt b/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadCategoryDto.kt
new file mode 100644
index 0000000..42dd2c6
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadCategoryDto.kt
@@ -0,0 +1,37 @@
+package com.heyongrui.module2.data.dto
+
+import android.os.Parcel
+import android.os.Parcelable
+
+data class LeisureReadCategoryDto(var _id: String? = "",
+ var en_name: String? = "",
+ var name: String? = "",
+ var rank: Int? = 0) : Parcelable {
+ constructor(parcel: Parcel) : this(
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readValue(Int::class.java.classLoader) as? Int) {
+ }
+
+ override fun writeToParcel(parcel: Parcel, flags: Int) {
+ parcel.writeString(_id)
+ parcel.writeString(en_name)
+ parcel.writeString(name)
+ parcel.writeValue(rank)
+ }
+
+ override fun describeContents(): Int {
+ return 0
+ }
+
+ companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(parcel: Parcel): LeisureReadCategoryDto {
+ return LeisureReadCategoryDto(parcel)
+ }
+
+ override fun newArray(size: Int): Array {
+ return arrayOfNulls(size)
+ }
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadDto.kt b/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadDto.kt
new file mode 100644
index 0000000..73645e2
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadDto.kt
@@ -0,0 +1,114 @@
+package com.heyongrui.module2.data.dto
+
+import android.os.Parcel
+import android.os.Parcelable
+
+data class LeisureReadDto(
+ var _id: String? = "",
+ var content: String? = "",
+ var cover: String? = "",
+ var crawled: Long,
+ var created_at: String? = "",
+ var deleted: Boolean,
+ var published_at: String? = "",
+ var raw: String? = "",
+ var site: Site? = null,
+ var title: String? = "",
+ var uid: String? = "",
+ var url: String? = "") : Parcelable {
+ constructor(parcel: Parcel) : this(
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readLong(),
+ parcel.readString(),
+ parcel.readByte() != 0.toByte(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readParcelable(Site::class.java.classLoader),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString()) {
+ }
+
+ override fun writeToParcel(parcel: Parcel, flags: Int) {
+ parcel.writeString(_id)
+ parcel.writeString(content)
+ parcel.writeString(cover)
+ parcel.writeLong(crawled)
+ parcel.writeString(created_at)
+ parcel.writeByte(if (deleted) 1 else 0)
+ parcel.writeString(published_at)
+ parcel.writeString(raw)
+ parcel.writeParcelable(site, flags)
+ parcel.writeString(title)
+ parcel.writeString(uid)
+ parcel.writeString(url)
+ }
+
+ override fun describeContents(): Int {
+ return 0
+ }
+
+ companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(parcel: Parcel): LeisureReadDto {
+ return LeisureReadDto(parcel)
+ }
+
+ override fun newArray(size: Int): Array {
+ return arrayOfNulls(size)
+ }
+ }
+
+ data class Site(
+ var cat_cn: String? = "",
+ var cat_en: String? = "",
+ var desc: String? = "",
+ var feed_id: String? = "",
+ var icon: String? = "",
+ var id: String? = "",
+ var name: String? = "",
+ var subscribers: Int,
+ var type: String? = "",
+ var url: String? = "") : Parcelable {
+ constructor(parcel: Parcel) : this(
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readInt(),
+ parcel.readString(),
+ parcel.readString()) {
+ }
+
+ override fun writeToParcel(parcel: Parcel, flags: Int) {
+ parcel.writeString(cat_cn)
+ parcel.writeString(cat_en)
+ parcel.writeString(desc)
+ parcel.writeString(feed_id)
+ parcel.writeString(icon)
+ parcel.writeString(id)
+ parcel.writeString(name)
+ parcel.writeInt(subscribers)
+ parcel.writeString(type)
+ parcel.writeString(url)
+ }
+
+ override fun describeContents(): Int {
+ return 0
+ }
+
+ companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(parcel: Parcel): Site {
+ return Site(parcel)
+ }
+
+ override fun newArray(size: Int): Array {
+ return arrayOfNulls(size)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadSubCategoryDto.kt b/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadSubCategoryDto.kt
new file mode 100644
index 0000000..9ea5d03
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/data/dto/LeisureReadSubCategoryDto.kt
@@ -0,0 +1,40 @@
+package com.heyongrui.module2.data.dto
+
+import android.os.Parcel
+import android.os.Parcelable
+
+data class LeisureReadSubCategoryDto(var _id: String? = "",
+ var created_at: String? = "",
+ var icon: String? = "",
+ var id: String? = "",
+ var title: String? = "") : Parcelable {
+ constructor(parcel: Parcel) : this(
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString(),
+ parcel.readString()) {
+ }
+
+ override fun writeToParcel(parcel: Parcel, flags: Int) {
+ parcel.writeString(_id)
+ parcel.writeString(created_at)
+ parcel.writeString(icon)
+ parcel.writeString(id)
+ parcel.writeString(title)
+ }
+
+ override fun describeContents(): Int {
+ return 0
+ }
+
+ companion object CREATOR : Parcelable.Creator {
+ override fun createFromParcel(parcel: Parcel): LeisureReadSubCategoryDto {
+ return LeisureReadSubCategoryDto(parcel)
+ }
+
+ override fun newArray(size: Int): Array {
+ return arrayOfNulls(size)
+ }
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java b/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java
index a3e5a5a..021428e 100644
--- a/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java
+++ b/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java
@@ -2,9 +2,15 @@
import com.heyongrui.module2.data.api.GankApi;
import com.heyongrui.module2.data.dto.GankDto;
+import com.heyongrui.module2.data.dto.GankResponse;
+import com.heyongrui.module2.data.dto.LeisureReadCategoryDto;
+import com.heyongrui.module2.data.dto.LeisureReadDto;
+import com.heyongrui.module2.data.dto.LeisureReadSubCategoryDto;
import com.heyongrui.network.configure.RxHelper;
import com.heyongrui.network.service.ApiService;
+import java.util.List;
+
import io.reactivex.Observable;
/**
@@ -20,13 +26,48 @@ public GankService() {
}
/**
+ * 获取分类数据
+ *
* @param category 数据类型: 福利 | Android | iOS | 休息视频 | 拓展资源 | 前端 | all
* @param perPage 请求个数: 数字,大于0
* @param page 第几页:数字,大于0
*/
- public Observable getGankCategory(String category, int perPage, int page) {
+ public Observable>> getGankCategory(String category, int perPage, int page) {
return ApiService.createApi(GankApi.class, BASE_URL_GANK)
.getGankCategory(category, perPage, page)
.compose(RxHelper.rxSchedulerHelper());
}
+
+ /**
+ * 获取闲读主分类
+ */
+ public Observable>> getLeisureReadCategory() {
+ return ApiService.createApi(GankApi.class, BASE_URL_GANK)
+ .getLeisureReadCategory()
+ .compose(RxHelper.rxSchedulerHelper());
+ }
+
+ /**
+ * 获取闲读子分类
+ *
+ * @param subCategory 后面可接受参数为主分类返回的en_name,例如【apps, wow, android,iOS】
+ */
+ public Observable>> getLeisureReadSubCategory(String subCategory) {
+ return ApiService.createApi(GankApi.class, BASE_URL_GANK)
+ .getLeisureReadSubCategory(subCategory)
+ .compose(RxHelper.rxSchedulerHelper());
+ }
+
+ /**
+ * 获取闲读数据
+ *
+ * @param id 后面可接受参数为子分类返回的id
+ * @param perPage 每页的个数
+ * @param page 第几页,从1开始
+ */
+ public Observable>> getLeisureRead(String id, int perPage, int page) {
+ return ApiService.createApi(GankApi.class, BASE_URL_GANK)
+ .getLeisureRead(id, perPage, page)
+ .compose(RxHelper.rxSchedulerHelper());
+ }
}
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt b/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt
index 53e6b44..c7c143f 100644
--- a/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt
+++ b/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt
@@ -12,7 +12,7 @@ import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
interface GankContract {
interface View : BaseView {
- fun getGankCategorySuccess(gankDto: GankDto)
+ fun getGankCategorySuccess(gankDtoList: List)
fun getGankCategoryFail(errorCode: Int, errorMsg: String)
}
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/contract/LeisureReadContract.kt b/module2/src/main/java/com/heyongrui/module2/gank/contract/LeisureReadContract.kt
new file mode 100644
index 0000000..57dc37b
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/gank/contract/LeisureReadContract.kt
@@ -0,0 +1,46 @@
+package com.heyongrui.module2.gank.contract
+
+import android.widget.AdapterView
+import android.widget.Spinner
+import androidx.recyclerview.widget.RecyclerView
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.google.android.material.tabs.TabLayout
+import com.heyongrui.base.base.BasePresenter
+import com.heyongrui.base.base.BaseView
+import com.heyongrui.module2.adapter.Module2SectionAdapter
+import com.heyongrui.module2.data.dto.LeisureReadCategoryDto
+import com.heyongrui.module2.data.dto.LeisureReadDto
+import com.heyongrui.module2.data.dto.LeisureReadSubCategoryDto
+import com.scwang.smartrefresh.header.StoreHouseHeader
+import com.scwang.smartrefresh.layout.SmartRefreshLayout
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
+
+interface LeisureReadContract {
+ interface View : BaseView {
+ fun onSpinnerItemSelected(adapterView: AdapterView<*>, t: T?, position: Int)
+
+ fun getLeisureReadCategorySuccess(leisureReadCategoryList: List)
+
+ fun getLeisureReadSubCategorySuccess(leisureReadSubCategoryList: List)
+
+ fun getLeisureReadSuccess(leisureReadList: List)
+
+ fun getLeisureReadFail(errorCode: Int, errorMsg: String)
+ }
+
+ abstract class Presenter : BasePresenter() {
+ abstract fun initSpinner(spinner: Spinner, dataList: List)
+
+ abstract fun initSwipeRefresh(smartRefreshLayout: SmartRefreshLayout, storeHouseHeader: StoreHouseHeader, onRefreshLoadMoreListener: OnRefreshLoadMoreListener)
+
+ abstract fun initRecyclerView(recyclerView: RecyclerView, listener: BaseQuickAdapter.OnItemClickListener): Module2SectionAdapter
+
+ abstract fun setTagsData(tabLayout: TabLayout, tagsList: List, tabSelectedListener: TabLayout.BaseOnTabSelectedListener)
+
+ abstract fun getLeisureReadCategory()
+
+ abstract fun getLeisureReadSubCategory(subCategory: String)
+
+ abstract fun getLeisureRead(id: String, perPage: Int, page: Int)
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/contract/WelfareContract.java b/module2/src/main/java/com/heyongrui/module2/gank/contract/WelfareContract.java
index 3b4426c..9ac6fba 100644
--- a/module2/src/main/java/com/heyongrui/module2/gank/contract/WelfareContract.java
+++ b/module2/src/main/java/com/heyongrui/module2/gank/contract/WelfareContract.java
@@ -5,9 +5,11 @@
import com.heyongrui.base.widget.imagewatcher.ImageWatcherHelper;
import com.heyongrui.module2.data.dto.GankDto;
+import java.util.List;
+
public interface WelfareContract {
interface View extends BaseView {
- void getWelfareSuccess(GankDto gankDto);
+ void getWelfareSuccess(List gankDtoList);
void getWelfareFail(int errorCode, String errorMsg);
}
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt b/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt
index 687de5c..f14f0e1 100644
--- a/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt
+++ b/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt
@@ -13,6 +13,7 @@ import com.heyongrui.module2.adapter.Module2SectionEntity
import com.heyongrui.module2.dagger.DaggerModule2Component
import com.heyongrui.module2.dagger.Module2Module
import com.heyongrui.module2.data.dto.GankDto
+import com.heyongrui.module2.data.dto.GankResponse
import com.heyongrui.module2.data.service.GankService
import com.heyongrui.module2.gank.contract.GankContract
import com.heyongrui.network.configure.ResponseDisposable
@@ -57,10 +58,10 @@ class GankPresenter : GankContract.Presenter() {
override fun getGankCategory(category: String, perPage: Int, page: Int) {
mRxManager.add(mGankService.getGankCategory(category, perPage, page).subscribeWith(
- object : ResponseDisposable(mContext, true) {
- override fun onSuccess(gankDto: GankDto) {
+ object : ResponseDisposable>>(mContext, true) {
+ override fun onSuccess(gankDtoList: GankResponse>) {
if (mView != null) {
- mView.getGankCategorySuccess(gankDto)
+ gankDtoList.results?.let { mView.getGankCategorySuccess(it) }
}
}
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/presenter/LeisureReadPresenter.kt b/module2/src/main/java/com/heyongrui/module2/gank/presenter/LeisureReadPresenter.kt
new file mode 100644
index 0000000..f6d42c2
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/gank/presenter/LeisureReadPresenter.kt
@@ -0,0 +1,172 @@
+package com.heyongrui.module2.gank.presenter
+
+import android.graphics.Color
+import android.view.View
+import android.widget.AdapterView
+import android.widget.ArrayAdapter
+import android.widget.Spinner
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.blankj.utilcode.util.ConvertUtils
+import com.blankj.utilcode.util.ToastUtils
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.google.android.material.tabs.TabLayout
+import com.heyongrui.base.app.BaseApplication
+import com.heyongrui.base.widget.ReSpinner
+import com.heyongrui.base.widget.itemdecoration.RecycleViewItemDecoration
+import com.heyongrui.module2.R
+import com.heyongrui.module2.adapter.Module2SectionAdapter
+import com.heyongrui.module2.adapter.Module2SectionEntity
+import com.heyongrui.module2.dagger.DaggerModule2Component
+import com.heyongrui.module2.dagger.Module2Module
+import com.heyongrui.module2.data.dto.GankResponse
+import com.heyongrui.module2.data.dto.LeisureReadCategoryDto
+import com.heyongrui.module2.data.dto.LeisureReadDto
+import com.heyongrui.module2.data.dto.LeisureReadSubCategoryDto
+import com.heyongrui.module2.data.service.GankService
+import com.heyongrui.module2.gank.contract.LeisureReadContract
+import com.heyongrui.network.configure.ResponseDisposable
+import com.scwang.smartrefresh.header.StoreHouseHeader
+import com.scwang.smartrefresh.layout.SmartRefreshLayout
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
+import java.util.*
+import javax.inject.Inject
+
+class LeisureReadPresenter : LeisureReadContract.Presenter() {
+
+ @Inject
+ lateinit var mGankService: GankService
+
+ init {
+ DaggerModule2Component.builder().appComponent(BaseApplication.getAppComponent()).module2Module(Module2Module()).build().inject(this)
+ }
+
+ override fun initSpinner(spinner: Spinner, dataList: List) {
+ val stringList = ArrayList()
+ if (null != dataList) {
+ for (t in dataList) {
+ if (t is String) {
+ stringList.add(t as String)
+ } else if (t is LeisureReadCategoryDto) {
+ t.name?.let { stringList.add(it) }
+ }
+ }
+ }
+ val adapter = ArrayAdapter(mContext, R.layout.layout_spinner_dropdown_item, stringList)
+ adapter.setDropDownViewResource(R.layout.layout_spinner_dropdown_item)
+ spinner.adapter = adapter
+ spinner.onItemSelectedListener = object : ReSpinner.OnReItemSelectedListener(true) {
+ override fun onReItemSelected(adapterView: AdapterView<*>, view: View, i: Int, l: Long) {
+ var t: T? = null
+ if (i >= 0) {
+ if (null != dataList) {
+ t = dataList[i]
+ }
+ }
+ if (null != mView) {
+ mView.onSpinnerItemSelected(adapterView, t, i)
+ }
+ }
+ }
+ spinner.post {
+ // spinner.dropDownWidth = spinner.width;
+ spinner.dropDownVerticalOffset = spinner.height
+ }
+ }
+
+ override fun initSwipeRefresh(smartRefreshLayout: SmartRefreshLayout, storeHouseHeader: StoreHouseHeader, onRefreshLoadMoreListener: OnRefreshLoadMoreListener) {
+ storeHouseHeader.setTextColor(ContextCompat.getColor(mContext, R.color.white))
+ smartRefreshLayout.setPrimaryColors(ContextCompat.getColor(mContext, R.color.colorPrimaryDark))
+ smartRefreshLayout.setDisableContentWhenRefresh(true)//是否在刷新的时候禁止列表的操作
+ smartRefreshLayout.setDisableContentWhenLoading(true)//是否在加载的时候禁止列表的操作
+ smartRefreshLayout.setEnableNestedScroll(true)
+ smartRefreshLayout.setEnableLoadMoreWhenContentNotFull(true)
+ smartRefreshLayout.setOnRefreshLoadMoreListener(onRefreshLoadMoreListener)
+ }
+
+ override fun initRecyclerView(recyclerView: RecyclerView, listener: BaseQuickAdapter.OnItemClickListener): Module2SectionAdapter {
+ val data = ArrayList()
+ val moduleSectionAdapter = Module2SectionAdapter(data)
+ recyclerView.layoutManager = LinearLayoutManager(mContext)
+ moduleSectionAdapter.bindToRecyclerView(recyclerView)
+ val dp1 = ConvertUtils.dp2px(1f)
+ recyclerView.addItemDecoration(RecycleViewItemDecoration(mContext, dp1, Color.TRANSPARENT))
+ moduleSectionAdapter.setSpanSizeLookup({ gridLayoutManager, position -> data[position].getSpanSize() })
+ if (null != listener) {
+ moduleSectionAdapter.setOnItemClickListener(listener)
+ }
+ return moduleSectionAdapter
+ }
+
+ override fun setTagsData(tabLayout: TabLayout, tagsList: List, tabSelectedListener: TabLayout.BaseOnTabSelectedListener) {
+ if (tagsList == null) return
+ if (null != tabSelectedListener) {
+ tabLayout.addOnTabSelectedListener(tabSelectedListener)
+ }
+ tabLayout.removeAllTabs()
+ for (t in tagsList) {
+ tabLayout.addTab(creatTab(tabLayout, t))
+ }
+ }
+
+ private fun creatTab(tabLayout: TabLayout, tag: Any?): TabLayout.Tab {
+ val tagTab = tabLayout.newTab()
+ var title: String = ""
+ if (tag != null && tag is LeisureReadSubCategoryDto) {
+ title = tag?.title.toString()
+ } else if (tag != null && tag is String) {
+ title = tag
+ }
+ tagTab.text = title
+ tagTab.tag = tag
+ return tagTab
+ }
+
+ override fun getLeisureReadCategory() {
+ mRxManager.add(mGankService.getLeisureReadCategory().subscribeWith(
+ object : ResponseDisposable>>(mContext, true) {
+ override fun onSuccess(leisureReadList: GankResponse>) {
+ if (mView != null) {
+ leisureReadList.results?.let { mView.getLeisureReadCategorySuccess(it) }
+ }
+ }
+
+ override fun onFailure(errorCode: Int, errorMsg: String) {
+ ToastUtils.showShort(errorMsg)
+ }
+ }))
+ }
+
+ override fun getLeisureReadSubCategory(subCategory: String) {
+ mRxManager.add(mGankService.getLeisureReadSubCategory(subCategory).subscribeWith(
+ object : ResponseDisposable>>(mContext, true) {
+ override fun onSuccess(leisureReadSubCategoryList: GankResponse>) {
+ if (mView != null) {
+ leisureReadSubCategoryList.results?.let { mView.getLeisureReadSubCategorySuccess(it) }
+ }
+ }
+
+ override fun onFailure(errorCode: Int, errorMsg: String) {
+ ToastUtils.showShort(errorMsg)
+ }
+ }))
+ }
+
+ override fun getLeisureRead(id: String, perPage: Int, page: Int) {
+ mRxManager.add(mGankService.getLeisureRead(id, perPage, page).subscribeWith(
+ object : ResponseDisposable>>(mContext, true) {
+ override fun onSuccess(leisureReadList: GankResponse>) {
+ if (mView != null) {
+ leisureReadList.results?.let { mView.getLeisureReadSuccess(it) }
+ }
+ }
+
+ override fun onFailure(errorCode: Int, errorMsg: String) {
+ if (mView != null) {
+ mView.getLeisureReadFail(errorCode, errorMsg)
+ }
+ }
+ }))
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/presenter/WelfarePresenter.java b/module2/src/main/java/com/heyongrui/module2/gank/presenter/WelfarePresenter.java
index 51fc37a..e8f8487 100644
--- a/module2/src/main/java/com/heyongrui/module2/gank/presenter/WelfarePresenter.java
+++ b/module2/src/main/java/com/heyongrui/module2/gank/presenter/WelfarePresenter.java
@@ -14,10 +14,13 @@
import com.heyongrui.base.widget.imagewatcher.ImageWatcherHelper;
import com.heyongrui.module2.adapter.Module2SectionEntity;
import com.heyongrui.module2.data.dto.GankDto;
+import com.heyongrui.module2.data.dto.GankResponse;
import com.heyongrui.module2.data.service.GankService;
import com.heyongrui.module2.gank.contract.WelfareContract;
import com.heyongrui.network.configure.ResponseDisposable;
+import java.util.List;
+
public class WelfarePresenter extends WelfareContract.Presenter {
private GankService mGankService;
@@ -35,9 +38,9 @@ public ImageWatcherHelper getImageWatcher() {
public void load(Context context, Object o, ImageWatcher.LoadCallback lc) {
if (o == null) return;
if (o instanceof Module2SectionEntity) {
- GankDto.GankBean gankBean = ((Module2SectionEntity) o).getGankBean();
- if (gankBean == null) return;
- String url = gankBean.getUrl();
+ GankDto gankDto = ((Module2SectionEntity) o).getGankDto();
+ if (gankDto == null) return;
+ String url = gankDto.getUrl();
GlideApp.with(context).load(url)
.into(new SimpleTarget() {
@Override
@@ -65,11 +68,11 @@ public void onLoadStarted(@Nullable Drawable placeholder) {
@Override
public void getWelfare(int perPage, int page) {
mRxManager.add(mGankService.getGankCategory("福利", perPage, page).subscribeWith(
- new ResponseDisposable(mContext, true) {
+ new ResponseDisposable>>(mContext, true) {
@Override
- protected void onSuccess(GankDto gankDto) {
+ protected void onSuccess(GankResponse> gankDto) {
if (mView != null) {
- mView.getWelfareSuccess(gankDto);
+ mView.getWelfareSuccess(gankDto.getResults());
}
}
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt b/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt
index 467490d..a7b64c0 100644
--- a/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt
+++ b/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt
@@ -82,35 +82,32 @@ class GankActivity : BaseActivity(), GankContract.View,
}
override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
- val gankBean = mGankAdapter.data.get(position).gankBean
+ val gankBean = mGankAdapter.data.get(position).gankDto
ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", gankBean.url).navigation()
}
- override fun getGankCategorySuccess(gankDto: GankDto) {
+ override fun getGankCategorySuccess(gankDtoList: List) {
resetRefreshLayout(true, true, false)
val addDataList = ArrayList()
- if (!gankDto.isError) {
- val gankBeanList = gankDto.results
- mIsLastPage = gankBeanList.size < mPerPage
- for (gankBean in gankBeanList) {
- var itemType: Int = Module2SectionEntity.GANK
- when (gankBean.type) {
- "Android" -> {
- itemType = Module2SectionEntity.GANK
- }
- "iOS" -> {
- }
- "休息视频" -> {
- }
- "拓展资源" -> {
- }
- "前端" -> {
- }
- "all" -> {
- }
+ mIsLastPage = gankDtoList.size < mPerPage
+ for (gankBean in gankDtoList) {
+ var itemType: Int = Module2SectionEntity.GANK
+ when (gankBean.type) {
+ "Android" -> {
+ itemType = Module2SectionEntity.GANK
+ }
+ "iOS" -> {
+ }
+ "休息视频" -> {
+ }
+ "拓展资源" -> {
+ }
+ "前端" -> {
+ }
+ "all" -> {
}
- addDataList.add(Module2SectionEntity(itemType, gankBean))
}
+ addDataList.add(Module2SectionEntity(itemType, gankBean))
}
if (1 == mPage) {
mGankAdapter.replaceData(addDataList)
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/view/LeisureReadActivity.kt b/module2/src/main/java/com/heyongrui/module2/gank/view/LeisureReadActivity.kt
new file mode 100644
index 0000000..afcc110
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/gank/view/LeisureReadActivity.kt
@@ -0,0 +1,156 @@
+package com.heyongrui.module2.gank.view
+
+import android.os.Bundle
+import android.view.View
+import android.widget.AdapterView
+import androidx.core.content.ContextCompat
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.alibaba.android.arouter.launcher.ARouter
+import com.blankj.utilcode.util.ToastUtils
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.google.android.material.tabs.TabLayout
+import com.heyongrui.base.assist.ConfigConstants
+import com.heyongrui.base.base.BaseActivity
+import com.heyongrui.base.utils.DrawableUtil
+import com.heyongrui.module2.R
+import com.heyongrui.module2.adapter.Module2SectionAdapter
+import com.heyongrui.module2.adapter.Module2SectionEntity
+import com.heyongrui.module2.data.dto.LeisureReadCategoryDto
+import com.heyongrui.module2.data.dto.LeisureReadDto
+import com.heyongrui.module2.data.dto.LeisureReadSubCategoryDto
+import com.heyongrui.module2.gank.contract.LeisureReadContract
+import com.heyongrui.module2.gank.presenter.LeisureReadPresenter
+import com.scwang.smartrefresh.layout.api.RefreshLayout
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
+import kotlinx.android.synthetic.main.activity_leisure_read.*
+import java.util.*
+
+@Route(path = ConfigConstants.PATH_LEISURE_READ)
+class LeisureReadActivity : BaseActivity(),
+ LeisureReadContract.View,
+ View.OnClickListener,
+ OnRefreshLoadMoreListener,
+ BaseQuickAdapter.OnItemClickListener {
+
+ private val mPerPage = 10
+ private var mPage = 1
+ private lateinit var mId: String
+ private var mIsLastPage: Boolean = false
+ lateinit var mLeisureReadAdapter: Module2SectionAdapter
+
+ override fun getLayoutId(): Int {
+ return R.layout.activity_leisure_read
+ }
+
+ override fun setPresenter(): LeisureReadContract.Presenter {
+ return LeisureReadPresenter()
+ }
+
+ override fun onClick(p0: View?) {
+ if (p0 != null) {
+ if (p0 == iv_back) {
+ finish()
+ }
+ }
+ }
+
+ override fun init(savedInstanceState: Bundle?) {
+ addOnClickListeners(this@LeisureReadActivity, iv_back)
+
+ val tintDrawable = DrawableUtil.tintDrawable(this@LeisureReadActivity, R.drawable.ic_back, ContextCompat.getColor(this@LeisureReadActivity, R.color.background))
+ iv_back.setImageDrawable(tintDrawable)
+
+ mPresenter?.initSwipeRefresh(refresh_layout, store_house_header, this@LeisureReadActivity)
+ mLeisureReadAdapter = mPresenter.initRecyclerView(rlv_leisure_read, this@LeisureReadActivity)
+
+ mPresenter?.getLeisureReadCategory()
+ }
+
+ override fun onLoadMore(refreshLayout: RefreshLayout) {
+ if (mIsLastPage) {
+ resetRefreshLayout(true, true, true)
+ } else {
+ loadData(false)
+ }
+ }
+
+ override fun onRefresh(refreshLayout: RefreshLayout) {
+ loadData(true)
+ }
+
+ override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
+ val leisureReadDto = mLeisureReadAdapter.data.get(position).leisureReadDto
+ ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", leisureReadDto.url).navigation()
+ }
+
+ override fun onSpinnerItemSelected(adapterView: AdapterView<*>, t: T?, position: Int) {
+ val id = adapterView.id
+ if (id == R.id.spinner_category) {
+ if (null != t && t is LeisureReadCategoryDto) {
+ t.en_name?.let { mPresenter?.getLeisureReadSubCategory(it) }
+ }
+ }
+ }
+
+ override fun getLeisureReadCategorySuccess(leisureReadCategoryList: List) {
+ mPresenter?.initSpinner(spinner_category, leisureReadCategoryList)
+ }
+
+ override fun getLeisureReadSubCategorySuccess(leisureReadSubCategoryList: List) {
+ mPresenter?.setTagsData(tab_layout, leisureReadSubCategoryList, object : TabLayout.OnTabSelectedListener {
+ override fun onTabReselected(p0: TabLayout.Tab?) {
+
+ }
+
+ override fun onTabUnselected(p0: TabLayout.Tab?) {
+ }
+
+ override fun onTabSelected(p0: TabLayout.Tab?) {
+ val tag = p0?.tag
+ if (tag is LeisureReadSubCategoryDto) {
+ mId = tag.id.toString()
+ loadData(true)
+ }
+ }
+ })
+ }
+
+ override fun getLeisureReadSuccess(leisureReadList: List) {
+ resetRefreshLayout(true, true, false)
+ val addDataList = ArrayList()
+ mIsLastPage = leisureReadList.size < mPerPage
+ for (leisureReadDto in leisureReadList) {
+ addDataList.add(Module2SectionEntity(Module2SectionEntity.LEISURE_READ, leisureReadDto))
+ }
+ if (1 == mPage) {
+ rlv_leisure_read.smoothScrollToPosition(0)
+ mLeisureReadAdapter.replaceData(addDataList)
+ } else {
+ mLeisureReadAdapter.addData(addDataList)
+ }
+ }
+
+ override fun getLeisureReadFail(errorCode: Int, errorMsg: String) {
+ ToastUtils.showShort(errorMsg)
+ resetRefreshLayout(true, true, false)
+ }
+
+ private fun loadData(isClearData: Boolean) {
+ if (isClearData) {
+ mPage = 1
+ } else {
+ mPage += 1
+ }
+ mPresenter?.getLeisureRead(mId, mPerPage, mPage)
+ }
+
+ private fun resetRefreshLayout(isFinishLoadMore: Boolean, isFinishRefresh: Boolean, noMoreData: Boolean) {
+ if (isFinishLoadMore) {
+ refresh_layout.finishLoadMore()
+ }
+ if (isFinishRefresh) {
+ refresh_layout.finishRefresh()
+ }
+ refresh_layout.setNoMoreData(noMoreData)
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/view/WelfareActivity.java b/module2/src/main/java/com/heyongrui/module2/gank/view/WelfareActivity.java
index ddad44c..5d69c4d 100644
--- a/module2/src/main/java/com/heyongrui/module2/gank/view/WelfareActivity.java
+++ b/module2/src/main/java/com/heyongrui/module2/gank/view/WelfareActivity.java
@@ -138,25 +138,20 @@ private void getWelfare(boolean isClearData) {
}
@Override
- public void getWelfareSuccess(GankDto gankDto) {
+ public void getWelfareSuccess(List gankDtoList) {
refreshLayout.finishLoadMore();
refreshLayout.finishRefresh();
refreshLayout.setNoMoreData(false);
List addDataList = new ArrayList<>();
- if (gankDto != null) {
- if (!gankDto.isError()) {
- List gankBeanList = gankDto.getResults();
- if (gankBeanList != null && !gankBeanList.isEmpty()) {
- if (gankBeanList.size() < mPerPage) {
- mIsLastPage = true;
- }
- for (GankDto.GankBean gankBean : gankBeanList) {
- addDataList.add(new Module2SectionEntity(Module2SectionEntity.WELFARE, gankBean));
- }
- } else {
- mIsLastPage = true;
- }
+ if (gankDtoList != null && !gankDtoList.isEmpty()) {
+ if (gankDtoList.size() < mPerPage) {
+ mIsLastPage = true;
}
+ for (GankDto gankBean : gankDtoList) {
+ addDataList.add(new Module2SectionEntity(Module2SectionEntity.WELFARE, gankBean));
+ }
+ } else {
+ mIsLastPage = true;
}
mGankAdapter.addData(addDataList);
}
diff --git a/module2/src/main/res/layout/activity_leisure_read.xml b/module2/src/main/res/layout/activity_leisure_read.xml
new file mode 100644
index 0000000..18c63ce
--- /dev/null
+++ b/module2/src/main/res/layout/activity_leisure_read.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/module2/src/main/res/layout/recycle_item_leisure_read.xml b/module2/src/main/res/layout/recycle_item_leisure_read.xml
new file mode 100644
index 0000000..c94aab3
--- /dev/null
+++ b/module2/src/main/res/layout/recycle_item_leisure_read.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
\ No newline at end of file