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 830fd5c..97beeea 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 { public static final String PATH_KAIYAN_DETAIL = "/module/kaiyanDetail"; public static final String PATH_DOUBAN = "/module/douban"; public static final String PATH_ZHIHU_DAILY_NEWS = "/module/zhiHuDailyNews"; + public static final String PATH_Q_DAILY = "/module/qdaily"; public static final String PATH_GARBAGE_CLASSIFY = "/module/garbageClassify"; public static final String PATH_H5 = "/module/h5"; public static final String PATH_MODULE_PROVIDER = "/module/main/service"; diff --git a/module/src/main/AndroidManifest.xml b/module/src/main/AndroidManifest.xml index 9a97aaa..a030131 100644 --- a/module/src/main/AndroidManifest.xml +++ b/module/src/main/AndroidManifest.xml @@ -49,5 +49,8 @@ + diff --git a/module/src/main/debug/AndroidManifest.xml b/module/src/main/debug/AndroidManifest.xml index d168e02..d7ce66d 100644 --- a/module/src/main/debug/AndroidManifest.xml +++ b/module/src/main/debug/AndroidManifest.xml @@ -65,6 +65,9 @@ + diff --git a/module/src/main/java/com/heyongrui/module/ModuleFragment.java b/module/src/main/java/com/heyongrui/module/ModuleFragment.java index 2562967..a9176dd 100644 --- a/module/src/main/java/com/heyongrui/module/ModuleFragment.java +++ b/module/src/main/java/com/heyongrui/module/ModuleFragment.java @@ -88,6 +88,9 @@ private void initRecyclerView(RecyclerView recyclerView) { case 6://知乎日报 ARouter.getInstance().build(ConfigConstants.PATH_ZHIHU_DAILY_NEWS).navigation(); break; + case 7://好奇心日报 + ARouter.getInstance().build(ConfigConstants.PATH_Q_DAILY).navigation(); + break; } }); dataList.add(new ModuleSectionEntity(ModuleSectionEntity.MENU_CARD, new MenuCardDto(getString(R.string.tea), R.drawable.ic_tea, 1))); @@ -96,6 +99,7 @@ private void initRecyclerView(RecyclerView recyclerView) { dataList.add(new ModuleSectionEntity(ModuleSectionEntity.MENU_CARD, new MenuCardDto(getString(R.string.kaiyan), R.drawable.ic_kaiyan, 4))); dataList.add(new ModuleSectionEntity(ModuleSectionEntity.MENU_CARD, new MenuCardDto(getString(R.string.movie), R.drawable.ic_movie, 5))); dataList.add(new ModuleSectionEntity(ModuleSectionEntity.MENU_CARD, new MenuCardDto(getString(R.string.zhihu_daily), R.drawable.ic_zhihu, 6))); + dataList.add(new ModuleSectionEntity(ModuleSectionEntity.MENU_CARD, new MenuCardDto(getString(R.string.qdaily), R.drawable.ic_qdaily, 7))); monoAdapter.replaceData(dataList); } } diff --git a/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionAdapter.java b/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionAdapter.java index 981461b..89e14db 100644 --- a/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionAdapter.java +++ b/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionAdapter.java @@ -52,6 +52,7 @@ import com.heyongrui.module.data.dto.PoemGroupDetailDto; import com.heyongrui.module.data.dto.PoemGroupDto; import com.heyongrui.module.data.dto.PoemSearchDto; +import com.heyongrui.module.data.dto.Post; import com.heyongrui.module.data.dto.TodayRecommendPoemDto; import com.heyongrui.module.data.dto.ZhiHuDailyNewsDto; import com.heyongrui.module.mono.view.MonoTeaActivity; @@ -88,6 +89,8 @@ public ModuleSectionAdapter(int sectionHeadResId, List data addItemType(ModuleSectionEntity.POEM_GROUP, R.layout.recycle_item_poem_group); addItemType(ModuleSectionEntity.DOUBAN_MOVIE, R.layout.recycle_item_douban_movie); addItemType(ModuleSectionEntity.ZHIHU_NEWS, R.layout.recycle_item_zhihu_news); + addItemType(ModuleSectionEntity.Q_DAILY_ONE, R.layout.recycle_item_q_daily_one); + addItemType(ModuleSectionEntity.Q_DAILY_TWO, R.layout.recycle_item_q_daily_two); } @Override @@ -612,6 +615,36 @@ public void onItemClick(Context context, int position, RatioImageView ratioImage GlideUtil.loadImage(mContext, cover, ivCover, ContextCompat.getDrawable(mContext, R.drawable.placeholder)); } break; + case ModuleSectionEntity.Q_DAILY_ONE: { + UiUtil.setOnclickFeedBack(mContext, ContextCompat.getColor(mContext, R.color.background), ContextCompat.getColor(mContext, R.color.gray), helper.itemView); + + String cover = "", title = "", desc = ""; + Post post = item.getPost(); + if (null != post) { + cover = post.getImage(); + title = post.getTitle(); + desc = post.getDescription(); + } + ImageView ivCover = helper.getView(R.id.iv_cover); + GlideUtil.loadImage(mContext, cover, ivCover, null); + helper.setText(R.id.tv_title, title); + helper.setText(R.id.tv_desc, desc); + } + break; + case ModuleSectionEntity.Q_DAILY_TWO: { + UiUtil.setOnclickFeedBack(mContext, ContextCompat.getColor(mContext, R.color.background), ContextCompat.getColor(mContext, R.color.gray), helper.itemView); + + String cover = "", title = ""; + Post post = item.getPost(); + if (null != post) { + cover = post.getImage(); + title = post.getTitle(); + } + ImageView ivCover = helper.getView(R.id.iv_cover); + GlideUtil.loadImage(mContext, cover, ivCover, null); + helper.setText(R.id.tv_title, title); + } + break; } } } diff --git a/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionEntity.java b/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionEntity.java index 9e0a0b8..68d584a 100644 --- a/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionEntity.java +++ b/module/src/main/java/com/heyongrui/module/adapter/ModuleSectionEntity.java @@ -12,6 +12,7 @@ import com.heyongrui.module.data.dto.PoemGroupDetailDto; import com.heyongrui.module.data.dto.PoemGroupDto; import com.heyongrui.module.data.dto.PoemSearchDto; +import com.heyongrui.module.data.dto.Post; import com.heyongrui.module.data.dto.TodayRecommendPoemDto; import com.heyongrui.module.data.dto.ZhiHuDailyNewsDto; @@ -36,6 +37,8 @@ public class ModuleSectionEntity extends SectionMultiEntity implements MultiItem public static final int POEM_GROUP = 111; public static final int DOUBAN_MOVIE = 112; public static final int ZHIHU_NEWS = 113; + public static final int Q_DAILY_ONE = 114; + public static final int Q_DAILY_TWO = 115; private int itemType; private int spanSize; @@ -53,6 +56,7 @@ public class ModuleSectionEntity extends SectionMultiEntity implements MultiItem private PoemGroupDetailDto.DataBean groupPoemDataBean; private DouBanDto.SubjectsBean subjectsBean; private ZhiHuDailyNewsDto.StoryBean storyBean; + private Post post; public ModuleSectionEntity(boolean isHeader, String header, boolean isShow) { super(isHeader, header); @@ -97,6 +101,8 @@ public ModuleSectionEntity(int itemType, int spanSize, Object object) { this.subjectsBean = (DouBanDto.SubjectsBean) object; } else if (object instanceof ZhiHuDailyNewsDto.StoryBean) { this.storyBean = (ZhiHuDailyNewsDto.StoryBean) object; + } else if (object instanceof Post) { + this.post = (Post) object; } } } @@ -221,4 +227,12 @@ public ZhiHuDailyNewsDto.StoryBean getStoryBean() { public void setStoryBean(ZhiHuDailyNewsDto.StoryBean storyBean) { this.storyBean = storyBean; } + + public Post getPost() { + return post; + } + + public void setPost(Post post) { + this.post = post; + } } diff --git a/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java b/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java index a2d9155..2a550ef 100644 --- a/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java +++ b/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java @@ -9,6 +9,7 @@ import com.heyongrui.module.ModuleFragment; import com.heyongrui.module.douban.presenter.DouBanPresenter; import com.heyongrui.module.douban.view.DouBanActivity; +import com.heyongrui.module.qdaily.presenter.QDailyPresenter; import com.heyongrui.module.textword.view.SmartRobotActivity; import com.heyongrui.module.zhihu.presenter.ZhiHuDailyNewsPresenter; @@ -36,4 +37,6 @@ public interface ModuleComponent { void inject(SmartRobotActivity smartRobotActivity); void inject(ZhiHuDailyNewsPresenter zhiHuDailyNewsPresenter); + + void inject(QDailyPresenter zhiHuDailyNewsPresenter); } diff --git a/module/src/main/java/com/heyongrui/module/data/api/DailyLifeApi.java b/module/src/main/java/com/heyongrui/module/data/api/DailyLifeApi.java index 68f0d6b..b6d758c 100644 --- a/module/src/main/java/com/heyongrui/module/data/api/DailyLifeApi.java +++ b/module/src/main/java/com/heyongrui/module/data/api/DailyLifeApi.java @@ -1,5 +1,12 @@ package com.heyongrui.module.data.api; +import com.heyongrui.module.data.dto.QDailyArticleDto; +import com.heyongrui.module.data.dto.QDailyColumnDto; +import com.heyongrui.module.data.dto.QDailyLabDetailDto; +import com.heyongrui.module.data.dto.QDailyLabsDto; +import com.heyongrui.module.data.dto.QDailyNewsDto; +import com.heyongrui.module.data.dto.QDailyResponse; +import com.heyongrui.module.data.dto.QDilyColumnInfoDto; import com.heyongrui.module.data.dto.ZhiHuDailyNewsDto; import io.reactivex.Observable; @@ -36,4 +43,64 @@ public interface DailyLifeApi { */ @GET("news/{id}") Observable getZhiHuNewsHtmlContent(@Path("id") int id); + + /** + * 获取好奇心日报首页NEWS + * + * @param pageKey 页面参数,用于分页(0.json,1558824932.json) + */ + @GET("homes/index_v2/{page_key}") + Observable> getQDailyNews(@Path("page_key") String pageKey); + + /** + * 获取好奇心日报首页LABS + * + * @param pageKey 页面参数,用于分页(0.json,1558824932.json) + */ + @GET("papers/index/{page_key}") + Observable> getQDailyLabs(@Path("page_key") String pageKey); + + /** + * 获取好奇心日报LABS详情 + * + * @param detailKey 详情键(3027.json) + */ + @GET("papers/detail/{detail_key}") + Observable> getQDailyLabDetail(@Path("detail_key") String detailKey); + + /** + * 获取好奇心日报栏目中心 + * + * @param pageKey 页面参数,用于分页(0,1558824932) + */ + @GET("columns/all_columns_index/{page_key}") + Observable> getQDailyColumns(@Path("page_key") String pageKey); + + /** + * 获取好奇心日报栏目信息 + * + * @param columnId 栏目ID(0.json,56.json) + */ + @GET("columns/info/{column_id}") + Observable> getQDailyColumnInfo(@Path("column_id") String columnId); + + /** + * 获取好奇心日报栏目下的文章列表 + * + * @param columnId 栏目ID(46) + * @param pageKey 页面参数,用于分页(0.json,1558824932.json) + */ + @GET("columns/index/{column_id}/{page_key}") + Observable> getQDailyColumnArticles(@Path("column_id") int columnId, + @Path("page_key") String pageKey); + + /** + * 获取好奇心日报不同分类的文章列表 + * + * @param category 类别(1-长文章 17-设计 16-Top15 19-时尚 3-娱乐 63-大公司头条 5-文化 18-商业 54-游戏 4-智能) + * @param pageKey 页面参数,用于分页(0.json,1558824932.json) + */ + @GET("categories/index/{category}/{page_key}") + Observable> getQDailyCategoryArticles(@Path("category") int category, + @Path("page_key") String pageKey); } diff --git a/module/src/main/java/com/heyongrui/module/data/dto/QDailyArticleDto.kt b/module/src/main/java/com/heyongrui/module/data/dto/QDailyArticleDto.kt new file mode 100644 index 0000000..2388423 --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/data/dto/QDailyArticleDto.kt @@ -0,0 +1,39 @@ +package com.heyongrui.module.data.dto + +import android.os.Parcel +import android.os.Parcelable +import java.io.Serializable + +data class QDailyArticleDto( + val feeds: List, + val has_more: Boolean, + val last_key: String +) : Parcelable, Serializable { + constructor(parcel: Parcel) : this( + parcel.createTypedArrayList(Feed), + parcel.readByte() != 0.toByte(), + parcel.readString()) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeTypedList(feeds) + parcel.writeByte(if (has_more) 1 else 0) + parcel.writeString(last_key) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + private const val serialVersionUID = 5928979654148925074L + + override fun createFromParcel(parcel: Parcel): QDailyArticleDto { + return QDailyArticleDto(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} \ No newline at end of file diff --git a/module/src/main/java/com/heyongrui/module/data/dto/QDailyColumnDto.kt b/module/src/main/java/com/heyongrui/module/data/dto/QDailyColumnDto.kt new file mode 100644 index 0000000..fe27a85 --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/data/dto/QDailyColumnDto.kt @@ -0,0 +1,40 @@ +package com.heyongrui.module.data.dto + +import android.os.Parcel +import android.os.Parcelable +import java.io.Serializable + +data class QDailyColumnDto( + var columns: List, +// var columns_ad: List, + var has_more: Boolean, + var last_key: String +) : Parcelable, Serializable { + constructor(parcel: Parcel) : this( + parcel.createTypedArrayList(Column), + parcel.readByte() != 0.toByte(), + parcel.readString()) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeTypedList(columns) + parcel.writeByte(if (has_more) 1 else 0) + parcel.writeString(last_key) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + private const val serialVersionUID = 592852979308925424L + + override fun createFromParcel(parcel: Parcel): QDailyColumnDto { + return QDailyColumnDto(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} \ No newline at end of file diff --git a/module/src/main/java/com/heyongrui/module/data/dto/QDailyLabDetailDto.kt b/module/src/main/java/com/heyongrui/module/data/dto/QDailyLabDetailDto.kt new file mode 100644 index 0000000..1cd4ddc --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/data/dto/QDailyLabDetailDto.kt @@ -0,0 +1,125 @@ +package com.heyongrui.module.data.dto + +import android.os.Parcel +import android.os.Parcelable +import java.io.Serializable + +data class QDailyLabDetailDto( + var image: String, + var post: Post, + var questions: List, + var share: Share, + var type: Int +) : Parcelable, Serializable { + constructor(parcel: Parcel) : this( + parcel.readString(), + parcel.readParcelable(Post::class.java.classLoader), + parcel.createTypedArrayList(Question), + parcel.readParcelable(Share::class.java.classLoader), + parcel.readInt()) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(image) + parcel.writeParcelable(post, flags) + parcel.writeTypedList(questions) + parcel.writeParcelable(share, flags) + parcel.writeInt(type) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + private const val serialVersionUID = 512491979308925024L + + override fun createFromParcel(parcel: Parcel): QDailyLabDetailDto { + return QDailyLabDetailDto(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} + +data class Question( + var content: String, + var genre: Int, + var id: Int, + var options: List