Commit 0db7d983 authored by mengcuiguang's avatar mengcuiguang

短剧首页开发

parent 4e2e7482
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="15" />
<bytecodeTargetLevel target="11" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_15" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
......
......@@ -9,6 +9,7 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.Priority
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.FitCenter
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.load.resource.gif.GifDrawable
import com.bumptech.glide.request.RequestOptions
......@@ -78,6 +79,32 @@ object GlideUtils {
).dontAnimate().into(mImageView!!)
}
fun loadImageViewGifForFitCenter(mContext: Context, drawable: String, imageView: ImageView) {
val options = RequestOptions()
.transform(
FitCenter(),
RoundedCorners(BubbleUtils.dp2px(5))
)
.diskCacheStrategy(DiskCacheStrategy.DATA)
Glide.with(mContext)
.load(drawable)
.apply(options)
.into(imageView)
}
fun loadImageViewGifForCenterCrop(mContext: Context, drawable: String, imageView: ImageView) {
val options = RequestOptions()
.transform(
CenterCrop(),
RoundedCorners(BubbleUtils.dp2px(5))
)
.diskCacheStrategy(DiskCacheStrategy.DATA)
Glide.with(mContext)
.load(drawable)
.apply(options)
.into(imageView)
}
//设置加载中图片
fun loadImageViewLoding(
mContext: Context?,
......
......@@ -10,23 +10,22 @@ object Constant {
* 首次弹出权限声明
*/
const val LOAN_PERMISSION_FLAG = "loan_permission_flag"
const val FIRST_GUILD = "first_guild"
const val FIRST_SPLASH = "first_splash"
const val IS_FIRST_AGREE_BTN = "is_first_agree_btn"
const val TAG_NAME = "SUN"
const val MINTS_APP_NAME = "乐看短剧"
const val MINTS_APP_NAME = "河狸短视频"
const val MINTS_PKG_NAME = "com.mints.wisdomclean"
const val ACTION_EXIT_APP = "package.exit"
/**
* app应用首页 0-主页 1-赚赚 2-我
* app应用首页 0-主页 1-中间 2-我
*/
const val FRAGMENT_CLICK_ONE = 0
const val FRAGMENT_CLICK_TWO = 1
const val FRAGMENT_CLICK_THREE = 2
// 协议地址
var REGISTER_URL = "http://mints-web.mints-id.com/agreements/wisdomclean/yhxy.html"//注册协议
var PRIVACY_URL = "http://mints-web.mints-id.com/agreements/wisdomclean/syzc.html"//隐私协议
var MEMBERS_URL = "https://mints-web.mints-id.com/agreements/wisdomclean/gmxy.html"//会员付费服务协议
var REGISTER_URL = "http://mints-web.mints-id.com/agreements/helivideo/yhxy.html"//注册协议
var PRIVACY_URL = "http://mints-web.mints-id.com/agreements/helivideo/syzc.html"//隐私协议
var MEMBERS_URL = "https://mints-web.mints-id.com/agreements/helivideo/gmxy.html"//会员付费服务协议
}
\ No newline at end of file
......@@ -56,7 +56,7 @@ public class UserManager {
private static final String VIP_FOREVER = "VIP_FOREVER";
private static final String VIP_DATE = "VIP_DATE";
private static final String CODE_ID = "codeId";
// 新人专享
// 匹配用户
private static final String NEW_FLAG = "new_flag";
public static UserManager getInstance() {
......
......@@ -5,12 +5,6 @@ import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
import java.io.Serializable
/**
*
* @author jyx
* @date 2021/4/20
* @des
*/
data class HotStyleListBean(
val list: List<HotStyleBean>
) : Serializable
......@@ -29,11 +23,6 @@ data class HotStyleBean(
var typeId: Int = 0,
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
data class HotStyleTypesListBean(
val list: List<HotStyleTypesBean>
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
......@@ -42,22 +31,4 @@ data class HotStyleTypesBean(
var title: String = "",
var id: Int = 0,
var imageCount: Int = -1,
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
data class PreStyleBean(
var type: Int? = 1,
var effectUrl: String? = null,
var imageUrl: String? = null,
var imageid: Int? = 0,
var lock: Boolean? = false,
var name: String? = null,
var remark: String? = null,
var isOriginal: Boolean? = false
) : Parcelable
data class HotStyleMsgBean(
val images: List<HotStyleBean>,
val types: List<HotStyleTypesBean>
) : Serializable
\ No newline at end of file
) : Parcelable
\ No newline at end of file
......@@ -60,7 +60,7 @@ class SettingsActivity : BaseActivity(), View.OnClickListener {
item_back.setOnClickListener(this)
item_phone.setOnClickListener(this)
item_invitedCode.findViewById<TextView>(R.id.tv_title).text = "乐看短剧ID"
item_invitedCode.findViewById<TextView>(R.id.tv_title).text = "河狸短视频ID"
val invitedCode = ContextCompat.getDrawable(this, R.mipmap.icon_settings_invite)
invitedCode?.setBounds(0, 0, 56, 56)
item_invitedCode.findViewById<TextView>(R.id.tv_title)
......
......@@ -143,13 +143,14 @@ class SplashActivity : BaseActivity() {
* 跳转到主页面
*/
private fun goToMainActivity() {
if (UserManager.getInstance().vipFlag) {
readyGoThenKill(MainActivity::class.java)
} else {
val bundle = Bundle()
bundle.putBoolean(VipActivity.IS_GUIDE, true)
readyGoThenKill(VipActivity::class.java, bundle)
}
readyGoThenKill(MainActivity::class.java)
// if (UserManager.getInstance().vipFlag) {
// readyGoThenKill(MainActivity::class.java)
// } else {
// val bundle = Bundle()
// bundle.putBoolean(VipActivity.IS_GUIDE, true)
// readyGoThenKill(VipActivity::class.java, bundle)
// }
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
......
......@@ -52,7 +52,6 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
}
private var breathAnim: YoYo.YoYoString? = null
private var breathBotAnim: YoYo.YoYoString? = null
private var payAgreementDialog: PayAgreementDialog? = null
private var payYesDialog: PayYesDialog? = null
private var ruleAgreementDialog: RuleAgreementDialog? = null
......@@ -77,10 +76,6 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
}
override fun initViewsAndEvents() {
tv_title.text = "支付中心"
iv_left_icon.visibility = View.VISIBLE
iv_left_icon.setImageResource(R.mipmap.ic_arrow_back)
vipPresenter.attachView(this)
if (!TextUtils.isEmpty(UserManager.getInstance().userID)) {
vipPresenter.getVipProducts(isAliPayInstalled())
......@@ -95,7 +90,6 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
override fun onDestroy() {
super.onDestroy()
breathAnim?.stop()
breathBotAnim?.stop()
vipPresenter.detachView()
}
......@@ -149,11 +143,9 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
if (!TextUtils.isEmpty(bean.buttonText)) {
tvVipPay.text = bean.buttonText
tvVipBottom.text = bean.buttonText
tvVipAgreement.text = "点击购买即表示您同意《自动续费协议》"
} else {
tvVipPay.text = "立即开通"
tvVipBottom.text = "立即开通"
tvVipAgreement.text = "点击购买即表示您同意《会员付费协议》"
}
}
......@@ -226,7 +218,7 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
if (AntiShake.check(v?.id)) return
when (v?.id) {
R.id.iv_left_icon -> {
R.id.ic_vip_quit -> {
if (!UserManager.getInstance().vipFlag && vipList != null && vipList!!.size > 0) {
vipAdapter.setPosition(0)
vipAdapter.notifyDataSetChanged()
......@@ -247,7 +239,7 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
}
}
}
R.id.tvVipPay, R.id.tvVipBottom -> {
R.id.tvVipPay -> {
if (vipList != null && vipList!!.size > 0) {
val vipBean = vipList!![vipAdapter.getPosition()]
......@@ -288,7 +280,7 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
}
R.id.ll_vip_wx -> {
payType = WEIXIN_PAY
iv_vip_wx.setImageResource(R.mipmap.ic_vip_enable)
iv_vip_wx.setImageResource(R.mipmap.ic_vip_enable_blue)
iv_vip_alipay.setImageResource(R.mipmap.ic_vip_none)
}
}
......@@ -320,15 +312,9 @@ class VipActivity : BaseActivity(), VipView, View.OnClickListener, VipAdapter.On
breathAnim =
YoYo.with(Techniques.Pulse).duration(700).repeat(-1).playOn(shimmer_text)
}, 200)
shimmer_bottom?.postDelayed({
shimmer_bottom?.startShimmerAnimation()
breathBotAnim =
YoYo.with(Techniques.Pulse).duration(700).repeat(-1).playOn(shimmer_bottom)
}, 200)
iv_left_icon.setOnClickListener(this)
ic_vip_quit.setOnClickListener(this)
tvVipPay.setOnClickListener(this)
tvVipBottom.setOnClickListener(this)
tvVipAgreement.setOnClickListener(this)
ll_vip_alipay.setOnClickListener(this)
ll_vip_wx.setOnClickListener(this)
......
package com.mints.wisdomclean.ui.adapter
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
......@@ -7,71 +8,74 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.airbnb.lottie.*
import com.daimajia.androidanimations.library.Techniques
import com.daimajia.androidanimations.library.YoYo
import com.itheima.roundedimageview.RoundedImageView
import com.mints.library.utils.GlideUtils
import com.mints.wisdomclean.R
import com.mints.wisdomclean.mvp.model.HotStyleBean
import com.mints.wisdomclean.ui.adapter.base.OnItemClickListener
class HotStyleAdapter(val context: Context, val dataList: ArrayList<HotStyleBean>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
RecyclerView.Adapter<HotStyleAdapter.ViewHolder>() {
lateinit var mOnItemClickListener: OnItemClickListener
private var showAnim = true
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val rivXmlyPage: RoundedImageView = view.findViewById(R.id.riv_img)
val ivXmlyPage: ImageView = view.findViewById(R.id.iv_img)
val tvTitle: TextView = view.findViewById(R.id.tv_title)
val tvHotBtn: TextView = view.findViewById(R.id.tv_hot_btn)
val ivVedioItem: ImageView = view.findViewById(R.id.ivVedioItem)
val tvVedioItemCount: TextView = view.findViewById(R.id.tvVedioItemCount)
val tvVedioItemTitle: TextView = view.findViewById(R.id.tvVedioItemTitle)
val tvVedioItemText: TextView = view.findViewById(R.id.tvVedioItemText)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.item_hot_style, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val viewHolder = holder as ViewHolder
if (dataList.size > 0) {
val data = dataList[position]
if (position == 0 && showAnim) {
val lottieDrawable = LottieDrawable()
LottieCompositionFactory.fromAsset(context, "guide_template_category.json")
.addListener { result: LottieComposition? ->
lottieDrawable.setImagesAssetsFolder("guild_template_category/")
lottieDrawable.composition = result
lottieDrawable.loop(true)
lottieDrawable.playAnimation()
}
holder.ivXmlyPage.setImageDrawable(lottieDrawable)
holder.ivXmlyPage.visibility = View.VISIBLE
holder.tvHotBtn.visibility = View.VISIBLE
holder.rivXmlyPage.visibility = View.GONE
holder.tvHotBtn.postDelayed({
YoYo.with(Techniques.Pulse).duration(500).repeat(-1).playOn(holder.tvHotBtn)
}, 300)
} else {
// GlideUtils.loadRoundImageViewGif(
// holder.itemView.context,
// data.imageUrl!!,
// holder.rivXmlyPage
// )
holder.ivXmlyPage.visibility = View.GONE
holder.tvHotBtn.visibility = View.GONE
holder.rivXmlyPage.visibility = View.VISIBLE
}
viewHolder.tvTitle.text = data.name
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// if (dataList.size > 0) {
// val data = dataList[position]
// if (position == 0 && showAnim) {
// val lottieDrawable = LottieDrawable()
// LottieCompositionFactory.fromAsset(context, "guide_template_category.json")
// .addListener { result: LottieComposition? ->
// lottieDrawable.setImagesAssetsFolder("guild_template_category/")
// lottieDrawable.composition = result
// lottieDrawable.loop(true)
// lottieDrawable.playAnimation()
// }
// holder.ivXmlyPage.setImageDrawable(lottieDrawable)
// holder.ivXmlyPage.visibility = View.VISIBLE
// holder.tvHotBtn.visibility = View.VISIBLE
// holder.rivXmlyPage.visibility = View.GONE
// holder.tvHotBtn.postDelayed({
// YoYo.with(Techniques.Pulse).duration(500).repeat(-1).playOn(holder.tvHotBtn)
// }, 300)
// } else {
//// GlideUtils.loadRoundImageViewGif(
//// holder.itemView.context,
//// data.imageUrl!!,
//// holder.rivXmlyPage
//// )
// holder.ivXmlyPage.visibility = View.GONE
// holder.tvHotBtn.visibility = View.GONE
// holder.rivXmlyPage.visibility = View.VISIBLE
// }
// viewHolder.tvTitle.text = data.name
//
viewHolder.itemView.setOnClickListener {
if (::mOnItemClickListener.isInitialized) {
mOnItemClickListener.onItemClick(holder.itemView, position)
}
}
// }
// GlideUtils.loadImageViewGifForFitCenter(
// context,
// "https://mints-pkg.oss-cn-beijing.aliyuncs.com/pkg-bcurd/img/bg_vip_top3.png",
// holder.ivVedioItem
// )
holder.itemView.setOnClickListener {
mOnItemClickListener.onItemClick(holder.itemView, position)
}
holder.itemView.setTag(position)
}
override fun getItemCount(): Int = 30
......@@ -79,8 +83,4 @@ class HotStyleAdapter(val context: Context, val dataList: ArrayList<HotStyleBean
fun setOnItemClickListener(listener: OnItemClickListener) {
mOnItemClickListener = listener
}
fun setShowAnim(showAnim: Boolean) {
this.showAnim = showAnim
}
}
\ No newline at end of file
package com.mints.wisdomclean.ui.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mints.library.utils.GlideUtils
import com.mints.wisdomclean.R
import com.mints.wisdomclean.mvp.model.VipBean
class TopAdapter(val vipList: MutableList<VipBean.ListBean>?) :
RecyclerView.Adapter<TopAdapter.ViewHolder>() {
lateinit var context: Context
lateinit var mOnItemClickListener: OnItemClickListener
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val rlTopItemRoot: LinearLayout = view.findViewById(R.id.rlTopItemRoot)
val ivTopItem: ImageView = view.findViewById(R.id.ivTopItem)
val tvTopItemLable: TextView = view.findViewById(R.id.tvTopItemLable)
val tvTopItemCount: TextView = view.findViewById(R.id.tvTopItemCount)
val tvTopItemTitle: TextView = view.findViewById(R.id.tvTopItemTitle)
val tvTopItemText: TextView = view.findViewById(R.id.tvTopItemText)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
context = parent.context
val view = LayoutInflater.from(context).inflate(R.layout.item_rv_top, parent, false)
val viewHolder = ViewHolder(view)
return viewHolder
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// val vipBean = vipList[position]
holder.tvTopItemLable.text = "${position + 1}"
GlideUtils.loadImageViewGifForFitCenter(context,"https://mints-pkg.oss-cn-beijing.aliyuncs.com/pkg-bcurd/img/bg_vip_top1.png",holder.ivTopItem)
when (position) {
0 -> {
holder.tvTopItemLable.setBackgroundResource(R.mipmap.y43)
}
1 -> {
holder.tvTopItemLable.setBackgroundResource(R.mipmap.y42)
}
2 -> {
holder.tvTopItemLable.setBackgroundResource(R.mipmap.y41)
}
else -> {
holder.tvTopItemLable.setBackgroundResource(R.mipmap.y4)
}
}
holder.rlTopItemRoot.setOnClickListener {
mOnItemClickListener.onItemClick(position)
}
holder.itemView.setTag(position)
}
// override fun getItemCount() = vipList?.size
override fun getItemCount() = 20
interface OnItemClickListener {
fun onItemClick(position: Int)
}
fun setOnItemClickListener(listener: OnItemClickListener) {
mOnItemClickListener = listener
}
}
\ No newline at end of file
package com.mints.wisdomclean.ui.adapter.base
import android.view.View
interface OnItemChildClickListener {
fun onItemChildClick(view: View?, position: Int)
}
\ No newline at end of file
package com.mints.wisdomclean.ui.adapter.listener
import android.view.View
interface OnItemChildClickListener {
fun onItemChildClick(view: View?, position: Int)
}
\ No newline at end of file
package com.mints.wisdomclean.ui.adapter.listener
import android.view.View
//define interface
interface OnItemClickListener {
fun onItemClick(view: View?, position: Int)
}
\ No newline at end of file
......@@ -6,9 +6,11 @@ import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.mints.library.utils.GlideUtils
import com.mints.library.utils.nodoubleclick.AntiShake
import com.mints.wisdomclean.R
import com.mints.wisdomclean.common.AppConfig
......@@ -19,6 +21,7 @@ import com.mints.wisdomclean.mvp.model.UserBean
import com.mints.wisdomclean.mvp.presenters.HomePresenter
import com.mints.wisdomclean.mvp.views.HomeView
import com.mints.wisdomclean.ui.adapter.HomeVideoPageAdapter
import com.mints.wisdomclean.ui.adapter.TopAdapter
import com.mints.wisdomclean.ui.fragment.base.BaseFragment
import com.mints.wisdomclean.video.VideoActivity
import com.scwang.smartrefresh.layout.api.RefreshLayout
......@@ -27,7 +30,7 @@ import com.youth.banner.Banner
import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
import com.youth.banner.indicator.CircleIndicator
import kotlinx.android.synthetic.main.fragment_main_first2.*
import kotlinx.android.synthetic.main.fragment_main.*
import java.util.*
import kotlin.concurrent.schedule
......@@ -47,12 +50,13 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
private var mSelectTabIndex = -1
private val tabsData = mutableListOf<HotStyleTypesBean>()
private var vpAdapter: HomeVideoPageAdapter? = null
private var topAdapter: TopAdapter? = null
private val homePresenter by lazy { HomePresenter() }
private val userManager by lazy { UserManager.getInstance() }
override fun getContentViewLayoutID() = R.layout.fragment_main_first2
override fun getContentViewLayoutID() = R.layout.fragment_main
override fun initViewsAndEvents() {
homePresenter.attachView(this)
......@@ -60,7 +64,7 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
initView()
initListener()
initVp()
loadData()
}
......@@ -88,6 +92,7 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
homePresenter.getMyInfo()
}
banner?.start()
setWatchingStatus(Any())
}
}
......@@ -111,9 +116,7 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
size: Int
) {
holder.imageView.scaleType = ImageView.ScaleType.FIT_XY
Glide.with(activity!!)
.load(data)
.into(holder.imageView)
GlideUtils.loadImageViewGifForFitCenter(activity!!, data, holder.imageView)
}
})
setOnBannerListener { data, position ->
......@@ -125,10 +128,13 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
}
}
initVp()
}
private fun initListener() {
tv_test.setOnClickListener(this)
iv_main_watching_close.setOnClickListener(this)
tv_main_watching_goto.setOnClickListener(this)
}
override fun onClick(v: View?) {
......@@ -138,6 +144,12 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
R.id.tv_test -> {
readyGo(VideoActivity::class.java)
}
R.id.iv_main_watching_close -> {
ll_main_watching_root.visibility = View.GONE
}
R.id.tv_main_watching_goto -> {
}
}
}
......@@ -159,6 +171,18 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
}
private fun initVp() {
topAdapter = TopAdapter(null)
val ma = LinearLayoutManager(requireContext())
ma.orientation = LinearLayoutManager.HORIZONTAL
rv_main_list.layoutManager = ma
rv_main_list.adapter = topAdapter
topAdapter?.setOnItemClickListener(object : TopAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
showToast(position.toString())
}
})
vpAdapter = HomeVideoPageAdapter(tabsData, this)
vp2.adapter = vpAdapter
TabLayoutMediator(tablayout, vp2) { tab, position ->
......@@ -187,11 +211,11 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
tab?.customView?.let {
val text = it.findViewById<TextView>(R.id.item_tv)
if (isSelected) {
text.setTextColor(ContextCompat.getColor(requireContext(), R.color.white))
text.setBackgroundResource(R.drawable.shape_bg_home_selected)
text.setTextColor(ContextCompat.getColor(requireContext(), R.color.red))
// text.setBackgroundResource(R.drawable.shape_bg_home_selected)
} else {
text.setTextColor(ContextCompat.getColor(requireContext(), R.color.color_8D8F90))
text.setBackgroundResource(R.drawable.shape_bg_home_unselected)
// text.setBackgroundResource(R.drawable.shape_bg_home_unselected)
}
}
}
......@@ -206,8 +230,10 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
vpAdapter?.run {
if (getFragments().isNotEmpty()) {
val fragment = getFragments()[mSelectTabIndex]
(fragment as MovieFragment).onRefresh()
refreshLayout.finishRefresh()
if (fragment != null) {
(fragment as MovieFragment).onRefresh()
refreshLayout.finishRefresh()
}
}
}
}
......@@ -216,6 +242,14 @@ class MainFragment : BaseFragment(), HomeView, View.OnClickListener, OnRefreshLi
}
fun setWatchingStatus(bean: Any) {
GlideUtils.loadImageViewGifForFitCenter(
requireContext(),
"https://mints-pkg.oss-cn-beijing.aliyuncs.com/pkg-bcurd/img/bg_vip_top1.png",
iv_main_watching_pic
)
// tv_main_watching_name.text=""
// tv_main_watching_text1.text=""
// tv_main_watching_text2.text=""
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import com.mints.wisdomclean.R
import com.mints.wisdomclean.mvp.model.*
import com.mints.wisdomclean.ui.adapter.HotStyleAdapter
import com.mints.wisdomclean.ui.adapter.base.OnItemClickListener
import com.mints.wisdomclean.ui.fragment.base.LazyLoadBaseFragment
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener
......@@ -114,15 +115,15 @@ class MovieFragment : LazyLoadBaseFragment(), OnLoadMoreListener {
val gridLayoutManager = GridLayoutManager(context, 3)
rv_pic_list.layoutManager = gridLayoutManager
hotStyleAdapter = HotStyleAdapter(requireContext(), hotList)
hotStyleAdapter.setShowAnim(mPosition == 0)
rv_pic_list.adapter = hotStyleAdapter
// hotStyleAdapter.setOnItemClickListener(object : OnItemClickListener {
// override fun onItemClick(view: View?, position: Int) {
hotStyleAdapter.setOnItemClickListener(object : OnItemClickListener {
override fun onItemClick(view: View?, position: Int) {
// if (hotList.size > 0) {
//
// }
// }
// })
showToast(position.toString())
}
})
}
private fun initListener() {
......
package com.mints.wisdomclean.ui.widgets
import android.app.Dialog
import android.content.Context
import android.graphics.Bitmap
import android.text.Spanned
import android.text.TextUtils
import android.view.*
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import cn.sharesdk.framework.Platform
import cn.sharesdk.framework.Platform.ShareParams
import cn.sharesdk.framework.PlatformActionListener
import cn.sharesdk.framework.ShareSDK
import cn.sharesdk.wechat.friends.Wechat
import cn.sharesdk.wechat.moments.WechatMoments
import com.bumptech.glide.Glide
import com.mints.wisdomclean.BuildConfig
import com.mints.wisdomclean.R
import com.mints.wisdomclean.manager.UserManager
import com.mints.wisdomclean.utils.QRCodeUtil
import com.mints.wisdomclean.utils.ToastUtil
import com.mints.library.utils.GlideUtils
import kotlinx.android.synthetic.main.fragment_main_my.*
import java.util.*
class ShareSingleDialog(context: Context, val imgBitmap: Bitmap, imgBottom: Boolean) :
Dialog(context, R.style.dialog) {
private val llDialogShareWx: LinearLayout
private val llDialogShareQq: LinearLayout
private val tvDialogShareNext: TextView
private val tvDialogShareTips: TextView
private var mOnShareOKListener: OnShareOKListener? = null
private var mOnShareCompleteListener: OnShareCompleteListener? = null
private val wechat by lazy { ShareSDK.getPlatform(Wechat.NAME) }
private val wechatMoments by lazy { ShareSDK.getPlatform(WechatMoments.NAME) }
init {
setContentView(R.layout.dialog_single_share)
// 设置window属性
window?.let {
val lp = it.attributes
lp.gravity = Gravity.BOTTOM
lp.width = WindowManager.LayoutParams.MATCH_PARENT
lp.height = WindowManager.LayoutParams.WRAP_CONTENT
lp.windowAnimations = R.style.DialogAnimBottom
it.attributes = lp
}
// 设置外部不可关闭
setCancelable(false)
setCanceledOnTouchOutside(false)
setOnKeyListener { _, i, _ ->
i == KeyEvent.KEYCODE_BACK
}
llDialogShareWx = findViewById<View>(R.id.llDialogShareWx) as LinearLayout
llDialogShareQq = findViewById<View>(R.id.llDialogShareQq) as LinearLayout
tvDialogShareNext = findViewById<View>(R.id.tvDialogShareNext) as TextView
tvDialogShareTips = findViewById<View>(R.id.tvDialogShareTips) as TextView
// Glide.with(context)
// .load(imgBitmap)
// .into(object : SimpleTarget<Drawable?>() {
// override fun onResourceReady(
// resource: Drawable,
// transition: Transition<in Drawable?>?
// ) {
// findViewById<View>(R.id.item_iv_bg).setBackgroundDrawable(resource)
// }
// })
val itemIvBg = findViewById<View>(R.id.item_iv_bg) as ImageView
if (imgBottom) {
itemIvBg.setPadding(0, 0, 0, 300)
}
Glide.with(context)
.load(imgBitmap)
.into(itemIvBg)
val SHARE_URL: String =
BuildConfig.MainIp + "wxShare/toShare?shareId=" + UserManager.getInstance().getUserID()
val QRCode = QRCodeUtil.createQRCode(SHARE_URL, 50)
findViewById<ImageView>(R.id.item_iv_qrcode).setImageBitmap(QRCode)
llDialogShareWx.setOnClickListener {
shareWechat()
}
llDialogShareQq.setOnClickListener {
shareWechatFavoite()
}
tvDialogShareNext.setOnClickListener {
dismiss()
}
}
fun setOnShareOKListener(onShareOKListener: OnShareOKListener) {
mOnShareOKListener = onShareOKListener
}
interface OnShareOKListener {
fun onShareOk()
}
fun setOnShareCompleteListener(onShareCompleteListener: OnShareCompleteListener) {
mOnShareCompleteListener = onShareCompleteListener
}
interface OnShareCompleteListener {
fun onShareComplete()
}
fun setShareAvatar(imgSrc: String?) {
val avatar = findViewById<ImageView>(R.id.item_iv_avatar)
if (TextUtils.isEmpty(imgSrc)) {
avatar.setImageResource(R.mipmap.ic_my_avat)
} else {
GlideUtils.loadImageViewLoding(
context,
imgSrc,
avatar,
R.mipmap.ic_avatar,
R.mipmap.ic_avatar
)
}
}
fun setShareTitle(title: String) {
findViewById<TextView>(R.id.item_tv_name).text = title
}
fun setShareContent(content: String) {
findViewById<TextView>(R.id.item_tv_info).text = content
}
fun setShareContent(content: Spanned) {
findViewById<TextView>(R.id.item_tv_info).text = content
}
fun setShareWithNoWechatFavoiter(flag: Boolean) {
if (flag) {
llDialogShareWx.visibility = View.GONE
}
}
fun setShareTips(tips: String) {
if (!TextUtils.isEmpty(tips)) {
tvDialogShareTips.visibility = View.VISIBLE
tvDialogShareTips.text = tips
}
}
private fun shareWechat() {
val child = findViewById<View>(R.id.fl_container)
child.isDrawingCacheEnabled = true
child.drawingCacheQuality = View.DRAWING_CACHE_QUALITY_HIGH
child.buildDrawingCache()
val bitmap: Bitmap = child.drawingCache
val wechatSp = ShareParams()
wechatSp.shareType = Platform.SHARE_IMAGE
wechatSp.imageData = bitmap
if (wechat.isClientValid) {
wechat.platformActionListener = object : PlatformActionListener {
override fun onComplete(p0: Platform?, p1: Int, p2: HashMap<String, Any>?) {
mOnShareCompleteListener?.onShareComplete()
bitmap.recycle()
dismiss()
}
override fun onError(p0: Platform?, p1: Int, p2: Throwable?) {
}
override fun onCancel(p0: Platform?, p1: Int) {
}
}
mOnShareOKListener?.onShareOk()
wechat.share(wechatSp)
} else {
ToastUtil.show(context, "请先安装微信")
}
// Timer().schedule(2000) {
// bitmap.recycle()
// dismiss()
// }
}
private fun shareWechatFavoite() {
val child = findViewById<View>(R.id.fl_container)
child.isDrawingCacheEnabled = true
child.drawingCacheQuality = View.DRAWING_CACHE_QUALITY_HIGH
child.buildDrawingCache()
val bitmap: Bitmap = child.drawingCache
val wechatSp = ShareParams()
wechatSp.shareType = Platform.SHARE_IMAGE
wechatSp.imageData = bitmap
if (wechatMoments.isClientValid) {
wechatMoments.platformActionListener = object : PlatformActionListener {
override fun onComplete(p0: Platform?, p1: Int, p2: HashMap<String, Any>?) {
mOnShareCompleteListener?.onShareComplete()
bitmap.recycle()
dismiss()
}
override fun onError(p0: Platform?, p1: Int, p2: Throwable?) {
}
override fun onCancel(p0: Platform?, p1: Int) {
}
}
mOnShareOKListener?.onShareOk()
wechatMoments.share(wechatSp)
} else {
ToastUtil.show(context, "请先安装微信")
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#95000000" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="5dip" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="@color/my_color_gray" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="5dip" />
</shape>
\ No newline at end of file
......@@ -17,7 +17,7 @@
android:layout_height="wrap_content"
android:layout_above="@id/progressBar"
android:layout_centerHorizontal="true"
android:text="正在适配手机型号..."
android:text="正在加载功能模块..."
android:textColor="@color/black"
android:textSize="16sp" />
......
......@@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:text="乐看短剧自动续费协议"
android:text="河狸短视频自动续费协议"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold"></TextView>
......
......@@ -37,7 +37,7 @@
android:layout_marginTop="20dp"
android:layout_marginRight="26dp"
android:layout_marginBottom="30dp"
android:text="乐看短剧将读取、写入(包括保存、下载、备份、上传、清理/删除、修改、扫描、检测)照片、媒体内容和文件,用于垃圾清理及加速、安全检测、文件风险扫描、本地照片、媒体内容和文件上传和备份,软件管理、下载安装、视频压缩。(使用场景以您实际触发为准)"
android:text="河狸短视频将读取、写入(包括保存、下载、备份、上传、清理/删除、修改、扫描、检测)照片、媒体内容和文件,用于垃圾清理及加速、安全检测、文件风险扫描、本地照片、媒体内容和文件上传和备份,软件管理、下载安装、视频压缩。(使用场景以您实际触发为准)"
android:textSize="14sp" />
<TextView
......
......@@ -17,7 +17,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="欢迎使用乐看短剧"
android:text="欢迎使用河狸短视频"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />
......@@ -38,7 +38,7 @@
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:text="欢迎使用乐看短剧,我们非常重视对您的个人信息保护,在您使用乐看短剧服务之前,请您认真阅读《用户注册协议》及《隐私政策》"
android:text="欢迎使用河狸短视频,我们非常重视对您的个人信息保护,在您使用河狸短视频服务之前,请您认真阅读《用户注册协议》及《隐私政策》"
android:textColor="@color/black"
android:textSize="14sp" />
......
......@@ -38,7 +38,7 @@
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:text="我们依据最新的法律,向您说明乐看短剧软件的隐私政策,特向您推送本提示。请您阅读并充分理解相关条款。"
android:text="我们依据最新的法律,向您说明河狸短视频软件的隐私政策,特向您推送本提示。请您阅读并充分理解相关条款。"
android:textColor="@color/black"
android:textSize="14sp" />
......
This diff is collapsed.
......@@ -11,17 +11,23 @@
app:srlAccentColor="@color/black"
app:srlPrimaryColor="@color/color_FDFDFD">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pic_list"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="600dp"
android:overScrollMode="never" />
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pic_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:overScrollMode="never" />
</FrameLayout>
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srlAccentColor="@color/black"
app:srlPrimaryColor="@color/color_FDFDFD"/>
app:srlPrimaryColor="@color/color_FDFDFD" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlVedioItemRoot"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:background="@color/red"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="6dp"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="235dp"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp">
android:layout_width="110dp"
android:layout_height="150dp">
<ImageView
android:id="@+id/iv_img"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:id="@+id/ivVedioItem"
android:layout_width="110dp"
android:layout_height="150dp"
android:scaleType="fitXY"
android:background="#0ff" />
<TextView
android:id="@+id/tv_hot_btn"
android:layout_width="134dp"
android:layout_height="28dp"
android:textSize="14sp"
android:visibility="gone"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginBottom="24dp"
android:id="@+id/tvVedioItemCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_marginRight="6dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:textStyle="bold"
android:text="143.2万"
android:textColor="@color/white"
android:text="点击做同款"></TextView>
<com.itheima.roundedimageview.RoundedImageView
android:id="@+id/riv_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
app:riv_corner_radius="5dp" />
android:textSize="12sp" />
</FrameLayout>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:id="@+id/tvVedioItemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="我去平行时空"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="14sp" />
<TextView
android:id="@+id/tvVedioItemText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:ellipsize="end"
android:lines="1"
android:singleLine="true"
android:textColor="#A7A8AA"
android:textSize="14sp"
android:textStyle="bold" />
android:text="重生 虐恋"
android:textColor="@color/color_939AA3"
android:textSize="12sp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlTopItemRoot"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:orientation="vertical">
<FrameLayout
android:layout_width="110dp"
android:layout_height="150dp">
<ImageView
android:id="@+id/ivTopItem"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tvTopItemLable"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginLeft="10dp"
android:background="@mipmap/y4"
android:gravity="center"
android:textStyle="bold"
android:paddingBottom="2dp"
android:text="1"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tvTopItemCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="6dp"
android:layout_marginBottom="8dp"
android:drawableLeft="@mipmap/ic_load"
android:drawablePadding="4dp"
android:gravity="center"
android:text="143.2万"
android:textColor="@color/white"
android:textSize="12sp" />
</FrameLayout>
<TextView
android:id="@+id/tvTopItemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="我去平行时空"
android:textStyle="bold"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="14sp" />
<TextView
android:id="@+id/tvTopItemText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="重生 虐恋"
android:textColor="@color/color_939AA3"
android:textSize="12sp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<TextView
android:id="@+id/item_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_8D8F90"
android:background="@drawable/shape_bg_home_unselected"
android:paddingLeft="14dp"
android:textStyle="bold"
android:paddingRight="14dp"
android:paddingLeft="2dp"
android:paddingTop="6dp"
android:paddingRight="5dp"
android:paddingBottom="6dp"
android:textSize="14sp" />
android:textColor="@color/color_8D8F90"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
\ No newline at end of file
<resources>
<string name="app_name">乐看短剧</string>
<string name="app_name">河狸短视频</string>
<string name="netfail">网络异常,请检查网络</string>
<string name="notifyTitle">提示</string>
<string name="setting">设置</string>
......@@ -23,21 +23,21 @@
<string name="url_falil">获取URL地址失败</string>
<string name="str_agreement_vip">尊敬的乐看短剧用户:\n
鉴于本协议是乐看短剧用户(下称“用户”或“您”)(下称 “本公司”或“我们”)关于使用乐看短剧产品提供的自动续费委托扣款服务(下称“本服务”)所订立的协议。您使用本服务前,已经注册成为乐看短剧的用户,且已同意为使用乐看短剧及本服务的相关用户协议及其它平台规则。\n
<string name="str_agreement_vip">尊敬的河狸短视频用户:\n
鉴于本协议是河狸短视频用户(下称“用户”或“您”)(下称 “本公司”或“我们”)关于使用河狸短视频产品提供的自动续费委托扣款服务(下称“本服务”)所订立的协议。您使用本服务前,已经注册成为河狸短视频的用户,且已同意为使用河狸短视频及本服务的相关用户协议及其它平台规则。\n
本协议描述我们与用户之间关于本服务的使用及相关方面的权利义务。本协议构成用户使用我们所提供的本服务之先决条件,除非用户接受本协议条款,否则用户无法使用本服务,用户选择使用本服务的行为将视为同意接受本协议当中的各项条款约束。\n
本协议未约定的内容,以用户在使用乐看短剧时同意的相关用户协议及其它平台规则为准。 【注意】如您未满18周岁,请在监护人陪同下仔细阅读并充分理解本协议,并征得监护人的同意后使用本产品及相关服务。\n
本协议未约定的内容,以用户在使用河狸短视频时同意的相关用户协议及其它平台规则为准。 【注意】如您未满18周岁,请在监护人陪同下仔细阅读并充分理解本协议,并征得监护人的同意后使用本产品及相关服务。\n
本公司有权根据需要不定时地制定、修改本协议或各类规则,经修订的协议、规则一经公布,立即自动生效。对新协议、规则生效之后注册的用户发生法律效力,对于协议、规则生效之前注册的用户,若用户在新规则生效后继续使用本产品提供的各项服务,则表明用户已充分阅读并认可和同意遵守新的协议或规则。\n
若用户拒绝接受新的协议和规则,用户有权放弃或终止继续使用本产品提供的各项服务,但该用户应承担在本产品已经进行的交易下所应承担的任何法律责任,且应遵循该用户发生交易时有效的协议或规则内容。\n
您点击同意、接受或下一步,或您购买/开通自动续费会员服务的行为均视为您已阅读、理解并同意签署本协议。\n\n
一、连续包月服务条款确认及接纳\n
本公司提供的连续包月服务涉及到的相关知识产权均归本公司所有,受中华人民共和国法律及国际公约的依法保护。本服务协议项下的条款效力范围及于本公司的一切网络服务,用户在完成注册程序并开始使用乐看短剧所提供的自动续费服务时,均应当受本服务协议下的各项条款约束。\n
本公司提供的连续包月服务涉及到的相关知识产权均归本公司所有,受中华人民共和国法律及国际公约的依法保护。本服务协议项下的条款效力范围及于本公司的一切网络服务,用户在完成注册程序并开始使用河狸短视频所提供的自动续费服务时,均应当受本服务协议下的各项条款约束。\n
一旦本协议发生修改,本公司将通过系统提示和/或信息推送和/或后台公告等形式发布,请您务必仔细阅读。如您对本协议的修改有任何问题,可以停止使用本服务并咨询客服,但需要提醒您的是,更新后的本协议自更新版本发布之日起生效。\n\n
二、自动续费服务相关说明\n
2.1 本服务是基于用户对自动续费需求,在用户已开通本服务的前提下,为避免用户因疏忽或其他原因导致未能及时续费造成损失而推出的服务。用户开通该服务后,即授权本公司可在会员自动续费期限到期前48小时和到期后,委托支付渠道(如支付宝、微信等)代扣下一个计费周期的费用,部分由运营商或支付渠道根据实际情况自行决定扣费周期的以实际扣费时间为准,如手机话费渠道、ios渠道等。选择自动续费的用户,即同意支付渠道在不验证账户密码、支付密码、短信校验码等信息的情况下从账户中扣划下一个计费周期的费用。一旦扣款成功,本公司将开通下一个计费周期的服务,并同时相应延长服务期限。该服务实现的前提是用户已将其乐看短剧用户账号与上述账户绑定,且可成功从其上述账户中扣款。计费周期:如月度、季度、年度等(具体以乐看短剧订购页面提供的为准),会员可自行选择。\n
2.1 本服务是基于用户对自动续费需求,在用户已开通本服务的前提下,为避免用户因疏忽或其他原因导致未能及时续费造成损失而推出的服务。用户开通该服务后,即授权本公司可在会员自动续费期限到期前48小时和到期后,委托支付渠道(如支付宝、微信等)代扣下一个计费周期的费用,部分由运营商或支付渠道根据实际情况自行决定扣费周期的以实际扣费时间为准,如手机话费渠道、ios渠道等。选择自动续费的用户,即同意支付渠道在不验证账户密码、支付密码、短信校验码等信息的情况下从账户中扣划下一个计费周期的费用。一旦扣款成功,本公司将开通下一个计费周期的服务,并同时相应延长服务期限。该服务实现的前提是用户已将其河狸短视频用户账号与上述账户绑定,且可成功从其上述账户中扣款。计费周期:如月度、季度、年度等(具体以河狸短视频订购页面提供的为准),会员可自行选择。\n
2.2 自动续费具体指基于2.1的前提下,本公司通过上述账户收取用户下一计费周期费用的扣费方式。用户需保证本公司可以从上述账户扣款成功,如因账户可扣款余额不足等其他用户自身原因导致的续费失败,应由用户自行承担责任。\n
2.3 自动续费服务所涉及或可能衍生的相关一切知识产权权利均由本公司依法所有,用户不得因使用自动续费服务而自动获得其任一或全部权利。\n
2.4 本公司将根据自身产品和服务的调整以及中华人民共和国有关法律、法规的变化,不断地完善服务质量并依此修改服务条款。本公司有权就服务协议随时更新,并在乐看短剧产品相应服务页面进行显著、及时的提示。\n
2.4 本公司将根据自身产品和服务的调整以及中华人民共和国有关法律、法规的变化,不断地完善服务质量并依此修改服务条款。本公司有权就服务协议随时更新,并在河狸短视频产品相应服务页面进行显著、及时的提示。\n
2.5 本公司建议用户,定期关注本服务协议的条款。当用户认为本服务协议之任一或全部条款的调整不可接受时,请及时终止对本公司所提供之相关服务。\n\n
三、自动续费服务协议有效期限及终止\n
3.1 本协议自用户选择接受并使用本服务后生效。除非本公司或用户主动明确地取消了自动续费,否则用户获得的自动续费服务视为持续有效、不受次数限制。\n
......@@ -46,7 +46,7 @@
四、自动续费服务双方的权利和义务\n
4.1 本公司扣除的下一计费周期费用,并同时延长对应服务有效期。\n
4.2 如在扣费过程出现问题,本公司应与用户密切配合查明原因,各自承担己方过错造成的损失;若因双方各自存在不均等过错造成损失,应由双方按过错程度承担对应程度的责任;双方共负责任的,由双方均摊责任。\n
4.3 本公司可根据自身业务开展或技术升级等情况变更或修改本协议的有关服务内容、规则及条款。本公司在做出上述变更或修改前,在乐看短剧产品相应服务页面进行显著、及时的提示。\n
4.3 本公司可根据自身业务开展或技术升级等情况变更或修改本协议的有关服务内容、规则及条款。本公司在做出上述变更或修改前,在河狸短视频产品相应服务页面进行显著、及时的提示。\n
4.4 本服务由用户自主选择是否取消,若用户未取消服务,则视为用户同意本公司继续按照一定规则进行续费扣款(长期有效、不受次数限制)。一旦完成扣款,本公司将为用户开通下一个计费周期服务。\n
4.5 对于所选择的支付渠道,用户有义务定期关注并确保该支付方式的账户下有充足的余额用于满足自动续费服务的应用。如因前述原因(包括但不限于余额不足)而导致无法完成自动续费服务,则本公司有权在不再作另行通知的前提下,暂停用户通过自动续费服务所接入的相关服务。\n\n
五、退费\n
......
......@@ -25,10 +25,10 @@ android.nonTransitiveRClass=true
DEBUG_URL="https://api.mints-tech.cn/camera-api/"
RELEASE_URL="https://api.mints-tech.cn/camera-api/"
RELEASE_KEY_PASSWORD=mintswisdomclean
RELEASE_KEY_ALIAS=mints_wisdomclean
RELEASE_STORE_PASSWORD=mintswisdomclean
RELEASE_STORE_FILE=mints_wisdomclean.jks
RELEASE_KEY_PASSWORD=mintshelivideo
RELEASE_KEY_ALIAS=mints_helivideo
RELEASE_STORE_PASSWORD=mintshelivideo
RELEASE_STORE_FILE=mints_helivideo.jks
#ShareSDK
RELEASE_SHARESDK_KEY=381ca97ef616d
......@@ -42,9 +42,6 @@ WEIXIN_APP_SECRET =91f91c0721bd989cf8b9c9b8dc8a5e9c
#umeng
RELEASE_UMENG_KEY=63c0fd97d64e68613917170f
#TalkingData
RELEASE_TALKING_DATA_KEY="8B400B45ABBB47D882B2C2E69E6A3662"
GROMORE_APP_ID="5404192"
GROMORE_SPLASH_CODE="102371299"
GROMORE_VIDEO_CODE="1"
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment