diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index f9b6036..1360cca 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -70,4 +70,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * Banner + */ + @POST("/appBannerInfo/listPage") + suspend fun obtainBanner( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index f9b6036..1360cca 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -70,4 +70,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * Banner + */ + @POST("/appBannerInfo/listPage") + suspend fun obtainBanner( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index aa23977..83784fc 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -162,4 +162,17 @@ ) return api.updateAddressById(AuthenticationHelper.token!!, requestBody) } + + /** + * Banner + */ + suspend fun obtainBanner(): String { + val paramObject = JSONObject() + paramObject.put("limit", 5) + paramObject.put("offset", 1) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index f9b6036..1360cca 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -70,4 +70,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * Banner + */ + @POST("/appBannerInfo/listPage") + suspend fun obtainBanner( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index aa23977..83784fc 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -162,4 +162,17 @@ ) return api.updateAddressById(AuthenticationHelper.token!!, requestBody) } + + /** + * Banner + */ + suspend fun obtainBanner(): String { + val paramObject = JSONObject() + paramObject.put("limit", 5) + paramObject.put("offset", 1) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/WebsiteActivity.kt b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt new file mode 100644 index 0000000..a7c6195 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt @@ -0,0 +1,88 @@ +package com.casic.br.view + +import android.graphics.Bitmap +import android.view.ViewGroup +import android.webkit.WebView +import android.widget.LinearLayout +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.just.agentweb.AgentWeb +import com.just.agentweb.WebViewClient +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_web.* + +class WebsiteActivity : KotlinBaseActivity() { + + private lateinit var agentWeb: AgentWeb + private lateinit var url: String + + override fun initLayoutView(): Int = R.layout.activity_web + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + leftBackView.setOnClickListener { finish() } + titleView.text = "北京市燃气集团有限责任公司" + } + + override fun initData() { + url = intent.getStringExtra(Constant.INTENT_PARAM)!! + agentWeb = AgentWeb.with(this) + .setAgentWebParent( + containerView, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT + ) + ) + .useDefaultIndicator() + .setWebViewClient(object : WebViewClient() { + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + + } + + override fun onPageFinished(view: WebView?, url: String?) { + + } + }) + .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) + .interceptUnkownUrl() + .createAgentWeb() + .ready() + .go(url) + val webView = agentWeb.webCreator.webView + webView.settings.useWideViewPort = true + webView.settings.builtInZoomControls = true + webView.settings.setSupportZoom(true) + webView.settings.displayZoomControls = false + webView.setInitialScale(4) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + rightOptionView.setOnClickListener { + agentWeb.webCreator.webView.loadUrl(url) + } + } + + override fun onResume() { + agentWeb.webLifeCycle.onResume() + super.onResume() + } + + override fun onPause() { + agentWeb.webLifeCycle.onPause() + super.onPause() + } + + override fun onDestroy() { + agentWeb.webLifeCycle.onDestroy() + super.onDestroy() + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index f9b6036..1360cca 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -70,4 +70,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * Banner + */ + @POST("/appBannerInfo/listPage") + suspend fun obtainBanner( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index aa23977..83784fc 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -162,4 +162,17 @@ ) return api.updateAddressById(AuthenticationHelper.token!!, requestBody) } + + /** + * Banner + */ + suspend fun obtainBanner(): String { + val paramObject = JSONObject() + paramObject.put("limit", 5) + paramObject.put("offset", 1) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/WebsiteActivity.kt b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt new file mode 100644 index 0000000..a7c6195 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt @@ -0,0 +1,88 @@ +package com.casic.br.view + +import android.graphics.Bitmap +import android.view.ViewGroup +import android.webkit.WebView +import android.widget.LinearLayout +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.just.agentweb.AgentWeb +import com.just.agentweb.WebViewClient +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_web.* + +class WebsiteActivity : KotlinBaseActivity() { + + private lateinit var agentWeb: AgentWeb + private lateinit var url: String + + override fun initLayoutView(): Int = R.layout.activity_web + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + leftBackView.setOnClickListener { finish() } + titleView.text = "北京市燃气集团有限责任公司" + } + + override fun initData() { + url = intent.getStringExtra(Constant.INTENT_PARAM)!! + agentWeb = AgentWeb.with(this) + .setAgentWebParent( + containerView, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT + ) + ) + .useDefaultIndicator() + .setWebViewClient(object : WebViewClient() { + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + + } + + override fun onPageFinished(view: WebView?, url: String?) { + + } + }) + .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) + .interceptUnkownUrl() + .createAgentWeb() + .ready() + .go(url) + val webView = agentWeb.webCreator.webView + webView.settings.useWideViewPort = true + webView.settings.builtInZoomControls = true + webView.settings.setSupportZoom(true) + webView.settings.displayZoomControls = false + webView.setInitialScale(4) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + rightOptionView.setOnClickListener { + agentWeb.webCreator.webView.loadUrl(url) + } + } + + override fun onResume() { + agentWeb.webLifeCycle.onResume() + super.onResume() + } + + override fun onPause() { + agentWeb.webLifeCycle.onPause() + super.onPause() + } + + override fun onDestroy() { + agentWeb.webLifeCycle.onDestroy() + super.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt new file mode 100644 index 0000000..908ed91 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.BannerImageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class BannerViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainBanner() = launch({ + val response = RetrofitServiceManager.obtainBanner() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index f9b6036..1360cca 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -70,4 +70,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * Banner + */ + @POST("/appBannerInfo/listPage") + suspend fun obtainBanner( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index aa23977..83784fc 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -162,4 +162,17 @@ ) return api.updateAddressById(AuthenticationHelper.token!!, requestBody) } + + /** + * Banner + */ + suspend fun obtainBanner(): String { + val paramObject = JSONObject() + paramObject.put("limit", 5) + paramObject.put("offset", 1) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/WebsiteActivity.kt b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt new file mode 100644 index 0000000..a7c6195 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt @@ -0,0 +1,88 @@ +package com.casic.br.view + +import android.graphics.Bitmap +import android.view.ViewGroup +import android.webkit.WebView +import android.widget.LinearLayout +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.just.agentweb.AgentWeb +import com.just.agentweb.WebViewClient +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_web.* + +class WebsiteActivity : KotlinBaseActivity() { + + private lateinit var agentWeb: AgentWeb + private lateinit var url: String + + override fun initLayoutView(): Int = R.layout.activity_web + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + leftBackView.setOnClickListener { finish() } + titleView.text = "北京市燃气集团有限责任公司" + } + + override fun initData() { + url = intent.getStringExtra(Constant.INTENT_PARAM)!! + agentWeb = AgentWeb.with(this) + .setAgentWebParent( + containerView, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT + ) + ) + .useDefaultIndicator() + .setWebViewClient(object : WebViewClient() { + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + + } + + override fun onPageFinished(view: WebView?, url: String?) { + + } + }) + .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) + .interceptUnkownUrl() + .createAgentWeb() + .ready() + .go(url) + val webView = agentWeb.webCreator.webView + webView.settings.useWideViewPort = true + webView.settings.builtInZoomControls = true + webView.settings.setSupportZoom(true) + webView.settings.displayZoomControls = false + webView.setInitialScale(4) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + rightOptionView.setOnClickListener { + agentWeb.webCreator.webView.loadUrl(url) + } + } + + override fun onResume() { + agentWeb.webLifeCycle.onResume() + super.onResume() + } + + override fun onPause() { + agentWeb.webLifeCycle.onPause() + super.onPause() + } + + override fun onDestroy() { + agentWeb.webLifeCycle.onDestroy() + super.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt new file mode 100644 index 0000000..908ed91 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.BannerImageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class BannerViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainBanner() = launch({ + val response = RetrofitServiceManager.obtainBanner() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_reload.xml b/app/src/main/res/drawable/ic_reload.xml new file mode 100644 index 0000000..0cd7b0e --- /dev/null +++ b/app/src/main/res/drawable/ic_reload.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 5837c6e..f6ac707 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ //推送SDK implementation 'com.getui:gtsdk:3.2.10.0' //个推SDK implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 + //WebView + implementation 'com.just.agentweb:agentweb-androidx:4.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88090c0..ecbed59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ + diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 2cb3f45..8fc6c8c 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -1,5 +1,6 @@ package com.casic.br.fragment +import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.casic.br.R import com.casic.br.adapter.ConnectGridAdapter @@ -11,9 +12,10 @@ import com.casic.br.utils.LocaleConstant import com.casic.br.view.LoginActivity import com.casic.br.view.MainActivity +import com.casic.br.view.WebsiteActivity +import com.casic.br.vm.BannerViewModel import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.navigatePageTo -import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.PageNavigationManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -27,6 +29,8 @@ class HomePageFragment : KotlinBaseFragment() { + private lateinit var bannerViewModel: BannerViewModel + override fun initLayoutView(): Int = R.layout.fragment_home override fun setupTopBarLayout() { @@ -34,38 +38,9 @@ } override fun initData() { - //TODO 模拟数据 - val imageModels = ArrayList() - for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" - - imageModels.add(model) - } - - val banner = homeBannerView - as Banner> - banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { - override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int - ) { - Glide.with(holder.itemView) - .load(data.imageLink) - .placeholder(R.mipmap.load_image_error) - .into(holder.imageView) - } - }) - indicator = CircleIndicator(requireContext()) - addPageTransformer(AlphaPageTransformer()) - addBannerLifecycleObserver(this@HomePageFragment) - - //Banner点击事件 - setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) - } - } + bannerViewModel = ViewModelProvider(this)[BannerViewModel::class.java] + //初始化轮播图 + initBanner() val homeAdapter = HomeGridAdapter(requireContext(), LocaleConstant.HOME_FUNC_OPERATE) homeRecyclerView.addItemDecoration(GridItemDecoration(requireContext())) @@ -89,6 +64,40 @@ }) } + private fun initBanner() { + bannerViewModel.obtainBanner() + bannerViewModel.listModel.observe(this, { + if (it.code == 200) { + val banner = homeBannerView as Banner> + banner.apply { + setAdapter(object : + BannerImageAdapter(it.data.rows) { + override fun onBindView( + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int + ) { + Glide.with(holder.itemView) + .load(data.bannerPicture) + .placeholder(R.mipmap.load_image_error) + .into(holder.imageView) + } + }) + indicator = CircleIndicator(requireContext()) + addPageTransformer(AlphaPageTransformer()) + addBannerLifecycleObserver(this@HomePageFragment) + + //Banner点击事件 + setOnBannerListener { imageModel, _ -> + requireContext().navigatePageTo(imageModel.skipUrl) + } + } + } + }) + } + override fun observeRequestState() { } diff --git a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt index 6caa727..e396c5f 100644 --- a/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/shop/FavoriteFragment.kt @@ -28,24 +28,28 @@ override fun initData() { //TODO 模拟数据 - val imageModels = ArrayList() + val imageModels = ArrayList() for (i in 0..4) { - val model = BannerImageModel() - model.imageTitle = "测试轮播图" - model.imageLink = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" + val model = BannerImageModel.DataModel.RowsModel() + model.bannerName = "测试轮播图" + model.bannerPicture = "https://img95.699pic.com/photo/40006/1412.jpg_wh860.jpg" imageModels.add(model) } - val banner = shopBannerView - as Banner> + val banner = shopBannerView as Banner> banner.apply { - setAdapter(object : BannerImageAdapter(imageModels) { + setAdapter(object : + BannerImageAdapter(imageModels) { override fun onBindView( - holder: BannerImageHolder, data: BannerImageModel, position: Int, size: Int + holder: BannerImageHolder, + data: BannerImageModel.DataModel.RowsModel, + position: Int, + size: Int ) { Glide.with(holder.itemView) - .load(data.imageLink) + .load(data.bannerPicture) .placeholder(R.mipmap.load_image_error) .into(holder.imageView) } @@ -56,7 +60,7 @@ //Banner点击事件 setOnBannerListener { imageModel, _ -> - "${imageModel.imageTitle}被点击了".show(requireContext()) + "${imageModel.bannerName}被点击了".show(requireContext()) } } diff --git a/app/src/main/java/com/casic/br/model/BannerImageModel.java b/app/src/main/java/com/casic/br/model/BannerImageModel.java index bd4ce3c..10c9417 100644 --- a/app/src/main/java/com/casic/br/model/BannerImageModel.java +++ b/app/src/main/java/com/casic/br/model/BannerImageModel.java @@ -1,32 +1,157 @@ package com.casic.br.model; +import java.util.List; + public class BannerImageModel { - private String imageLink; - private String imageTitle; - private String webPageLink; + private int code; + private DataModel data; + private String message; + private boolean success; - public String getImageLink() { - return imageLink; + public int getCode() { + return code; } - public void setImageLink(String imageLink) { - this.imageLink = imageLink; + public void setCode(int code) { + this.code = code; } - public String getImageTitle() { - return imageTitle; + public DataModel getData() { + return data; } - public void setImageTitle(String imageTitle) { - this.imageTitle = imageTitle; + public void setData(DataModel data) { + this.data = data; } - public String getWebPageLink() { - return webPageLink; + public String getMessage() { + return message; } - public void setWebPageLink(String webPageLink) { - this.webPageLink = webPageLink; + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String bannerModule; + private String bannerModuleName; + private String bannerName; + private String bannerPicture; + private int bannerSort; + private String createTime; + private String id; + private String ids; + private String skipUrl; + private String updateTime; + + public String getBannerModule() { + return bannerModule; + } + + public void setBannerModule(String bannerModule) { + this.bannerModule = bannerModule; + } + + public String getBannerModuleName() { + return bannerModuleName; + } + + public void setBannerModuleName(String bannerModuleName) { + this.bannerModuleName = bannerModuleName; + } + + public String getBannerName() { + return bannerName; + } + + public void setBannerName(String bannerName) { + this.bannerName = bannerName; + } + + public String getBannerPicture() { + return bannerPicture; + } + + public void setBannerPicture(String bannerPicture) { + this.bannerPicture = bannerPicture; + } + + public int getBannerSort() { + return bannerSort; + } + + public void setBannerSort(int bannerSort) { + this.bannerSort = bannerSort; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getSkipUrl() { + return skipUrl; + } + + public void setSkipUrl(String skipUrl) { + this.skipUrl = skipUrl; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c4c92ee..be1986d 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -62,7 +62,6 @@ * String * ============================================================================================= * */ - const val PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB" const val PUSH_CLIENT_ID = "clientId" const val COUNTRY_CODE = "86" const val USER_IS_LOGIN = "isLogin" diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index f9b6036..1360cca 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -70,4 +70,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * Banner + */ + @POST("/appBannerInfo/listPage") + suspend fun obtainBanner( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index aa23977..83784fc 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -162,4 +162,17 @@ ) return api.updateAddressById(AuthenticationHelper.token!!, requestBody) } + + /** + * Banner + */ + suspend fun obtainBanner(): String { + val paramObject = JSONObject() + paramObject.put("limit", 5) + paramObject.put("offset", 1) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/WebsiteActivity.kt b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt new file mode 100644 index 0000000..a7c6195 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/WebsiteActivity.kt @@ -0,0 +1,88 @@ +package com.casic.br.view + +import android.graphics.Bitmap +import android.view.ViewGroup +import android.webkit.WebView +import android.widget.LinearLayout +import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar +import com.just.agentweb.AgentWeb +import com.just.agentweb.WebViewClient +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_web.* + +class WebsiteActivity : KotlinBaseActivity() { + + private lateinit var agentWeb: AgentWeb + private lateinit var url: String + + override fun initLayoutView(): Int = R.layout.activity_web + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + + leftBackView.setOnClickListener { finish() } + titleView.text = "北京市燃气集团有限责任公司" + } + + override fun initData() { + url = intent.getStringExtra(Constant.INTENT_PARAM)!! + agentWeb = AgentWeb.with(this) + .setAgentWebParent( + containerView, + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT + ) + ) + .useDefaultIndicator() + .setWebViewClient(object : WebViewClient() { + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + + } + + override fun onPageFinished(view: WebView?, url: String?) { + + } + }) + .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) + .interceptUnkownUrl() + .createAgentWeb() + .ready() + .go(url) + val webView = agentWeb.webCreator.webView + webView.settings.useWideViewPort = true + webView.settings.builtInZoomControls = true + webView.settings.setSupportZoom(true) + webView.settings.displayZoomControls = false + webView.setInitialScale(4) + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + rightOptionView.setOnClickListener { + agentWeb.webCreator.webView.loadUrl(url) + } + } + + override fun onResume() { + agentWeb.webLifeCycle.onResume() + super.onResume() + } + + override fun onPause() { + agentWeb.webLifeCycle.onPause() + super.onPause() + } + + override fun onDestroy() { + agentWeb.webLifeCycle.onDestroy() + super.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt new file mode 100644 index 0000000..908ed91 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.BannerImageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class BannerViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainBanner() = launch({ + val response = RetrofitServiceManager.obtainBanner() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_reload.xml b/app/src/main/res/drawable/ic_reload.xml new file mode 100644 index 0000000..0cd7b0e --- /dev/null +++ b/app/src/main/res/drawable/ic_reload.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml new file mode 100644 index 0000000..ebc39c1 --- /dev/null +++ b/app/src/main/res/layout/activity_web.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + \ No newline at end of file