Commit e7807ffb authored by zhenghongbin's avatar zhenghongbin

add 删除无用代码

parent 03cb3b39
...@@ -57,12 +57,9 @@ dependencies { ...@@ -57,12 +57,9 @@ dependencies {
implementation rootProject.ext.dependencies.publicImplementation implementation rootProject.ext.dependencies.publicImplementation
testImplementation rootProject.ext.dependencies.testImplementation testImplementation rootProject.ext.dependencies.testImplementation
androidTestImplementation rootProject.ext.dependencies.androidTestImplementation androidTestImplementation rootProject.ext.dependencies.androidTestImplementation
kapt 'com.yidian.chameleon:annotationcompiler:0.3.29'
implementation 'com.yidian.chameleon:annotation:0.3.29'
api deps.yac.core api deps.yac.core
api deps.xarc.xbrid api deps.xarc.xbrid
api "com.yidian.xarc:xevent:0.0.3" api "com.yidian.xarc:xevent:0.0.3"
// api project(':flutter')
api "com.yidian.xpage:xpagenative:0.0.1" api "com.yidian.xpage:xpagenative:0.0.1"
implementation files('libs/openDefault-10.10.0.aar') implementation files('libs/openDefault-10.10.0.aar')
} }
\ No newline at end of file
...@@ -3,9 +3,5 @@ ...@@ -3,9 +3,5 @@
package="com.yidian.common"> package="com.yidian.common">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
<activity android:name=".activity.OneKeyLoginActivity"/>
<activity android:name=".activity.LoginActivity" />
</application>
</manifest> </manifest>
package com.yidian.common
class WebConfig {
companion object{
const val ADD_COMMENT: String = "addComment"
const val GET_GIF_DATA: String = "getGifData"
const val GO_TO_COMMENT_DETAIL: String = "gotoCommentDetail"
const val REPLY_DETAIL_COMMENT: String = "replyDetailComment"
const val UPDATE_LIKE: String = "updateLike"
const val GET_DOCID: String = "getDocId"
const val WEB_URL: String = "http://10.60.100.23:3100/"
}
}
\ No newline at end of file
package com.yidian.common
class Constants {
companion object{
const val ITEM_TYPE_CHAMELEON = -1
const val CHAMELEON_ID = "chameleon_id"
const val CHAMELEON_D_TYPE = "dtype"
}
}
\ No newline at end of file
...@@ -7,28 +7,14 @@ class XRouterPathConstants { ...@@ -7,28 +7,14 @@ class XRouterPathConstants {
companion object { companion object {
const val ParamsKey = "ParamsMap" const val ParamsKey = "ParamsMap"
const val FLASH = "/flash"
const val LOGIN = "/loginPhone"
const val LOGIN_LIFE_CIRCLE = "/loginLifeCircle"
const val ONE_KEY_LOGIN = "/common/oneKeyLogin"
const val LOGIN_NATIVE = "/loginNative"
const val USER_INFO = "/fragment/userInfo"
const val NEWS_MAIN = "/MainActivity" const val NEWS_MAIN = "/MainActivity"
const val HOME = "/Home"
const val NEWS_CONTENT = "/news" const val NEWS_CONTENT = "/news"
const val GALLERY = "/imageGallery" const val GALLERY = "/imageGallery"
const val PROTOCOL = "/protocol" const val PROTOCOL = "/protocol"
const val SUPPORT = "/productSupport" const val SUPPORT = "/productSupport"
const val AUTHOR_HOME_PAGE = "/authorhome"
const val BROWSING_HISTORY = "/mine/BrowsingHistoryActivity" const val FLASH = "/flash"
const val COLLECTION = "/favorites" const val LOGIN_LIFE_CIRCLE = "/loginLifeCircle"
const val SUBSCRIPTION = "/subscribe"
const val SEARCH_CHANNEL = "/newscontent/SearchChannelActivity"
const val SEARCH_RESULT = "/newscontent/SearchResultPageActivity"
const val AUDIO_DETAIL = "/newscontent/AudioDetailActivity"
const val VIDEO_COMMENT_DETAIL = "/newscontent/VideoDetailActivity"
const val COMMENT_TEST = "/newscontent/CommentTestActivity"
const val MINE = "/mine"
const val LIFE_ACCOUNT_IDENTITY = "/lifeAccountIdentity" const val LIFE_ACCOUNT_IDENTITY = "/lifeAccountIdentity"
const val LIFE_ACCOUNT_AUTH = "/lifeAccountAuth" const val LIFE_ACCOUNT_AUTH = "/lifeAccountAuth"
const val ID_CARD_TEST = "/idCardTest" const val ID_CARD_TEST = "/idCardTest"
......
package com.yidian.common.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import com.orhanobut.hawk.Hawk
import com.umeng.socialize.UMAuthListener
import com.umeng.socialize.UMShareAPI
import com.umeng.socialize.UMShareConfig
import com.umeng.socialize.bean.SHARE_MEDIA
import com.yidian.common.HawkConfig
import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity
import com.yidian.common.databinding.ActivityLoginBinding
import com.yidian.common.http.HttpResult
import com.yidian.common.http.httpbean.IApiCallback
import com.yidian.common.http.httpbean.LoginBean
import com.yidian.xpage.XPageViewProtocol
import kotlinx.android.synthetic.main.activity_login.*
class LoginActivity : BaseActivity<ActivityLoginBinding>(), XPageViewProtocol, IApiCallback {
override fun createViewBinding(): ActivityLoginBinding {
return ActivityLoginBinding.inflate(layoutInflater)
}
override fun getXPageName(): String {
return XRouterPathConstants.LOGIN_NATIVE
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
setClickListener()
}
private fun setClickListener(){
lly_wechat.setOnClickListener{
loginByUmeng(SHARE_MEDIA.WEIXIN)
}
lly_qq.setOnClickListener{
loginByUmeng(SHARE_MEDIA.QQ)
}
lly_sina.setOnClickListener{
loginByUmeng(SHARE_MEDIA.SINA)
}
}
private fun loginByUmeng(platform: SHARE_MEDIA){
val config = UMShareConfig()
config.isNeedAuthOnGetUserInfo(true)
val mShareAPI = UMShareAPI.get(this@LoginActivity)
mShareAPI.setShareConfig(config)
mShareAPI.getPlatformInfo(this@LoginActivity, platform, object : UMAuthListener {
override fun onStart(platform: SHARE_MEDIA?) {
}
override fun onComplete(platform: SHARE_MEDIA?, action: Int, data: MutableMap<String, String>) {
val uid = data["uid"]
val name = data["name"]
val gender = data["gender"]
val iconurl = data["iconurl"]
Log.e("zhb-yd", "登录成功:uid->$uid,name->$name,gender->$gender,iconurl->$iconurl")
Hawk.put(HawkConfig.LoginStatus, true)
setResult(1, intent.putExtra("token", uid))
finish()
}
override fun onError(platform: SHARE_MEDIA?, action: Int, t: Throwable) {
Log.e("zhb-yd", "登录失败:" + t.message)
}
override fun onCancel(platform: SHARE_MEDIA?, action: Int) {
Log.e("zhb-yd", "登录取消")
}
})
}
override fun loginCallBack(t: HttpResult<LoginBean.Response?>?) {
Hawk.put(HawkConfig.LoginStatus, true)
val token = t?.result?.token
setResult(1, intent.putExtra("token", token))
finish()
}
override val context: Context
get() = this@LoginActivity
override fun showLoading(message: String?) {
TODO("Not yet implemented")
}
override fun showLoading() {
TODO("Not yet implemented")
}
override fun dismissLoading() {
TODO("Not yet implemented")
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data)
}
}
\ No newline at end of file
package com.yidian.common.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import cn.jiguang.verifysdk.api.JVerificationInterface
import com.orhanobut.hawk.Hawk
import com.yidian.common.HawkConfig
import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity
import com.yidian.common.databinding.ActivityOneKeyLoginBinding
import com.yidian.common.http.HttpResult
import com.yidian.common.http.httpbean.IApiCallback
import com.yidian.common.http.httpbean.LoginBean
import com.yidian.utils.ToastUtil
import com.yidian.xpage.XPageViewProtocol
import kotlinx.android.synthetic.main.activity_one_key_login.*
class OneKeyLoginActivity: BaseActivity<ActivityOneKeyLoginBinding>(), XPageViewProtocol, IApiCallback {
private lateinit var token: String
private lateinit var operator: String
override fun createViewBinding(): ActivityOneKeyLoginBinding {
return ActivityOneKeyLoginBinding.inflate(layoutInflater)
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
initJVerification()
setClickListener()
}
override fun getXPageName(): String {
return XRouterPathConstants.ONE_KEY_LOGIN
}
private fun initJVerification(){
JVerificationInterface.getToken(this, 5000) { code, content, operator ->
if(code == 2000){
this.token = content
this.operator = operator
Log.e("zhb-yd", "token=$content, operator=$operator")
}else{
Log.e("zhb-yd", "code=$code, message=$content")
}
}
}
private fun setClickListener(){
btn_oneKeyLogin.setOnClickListener{
ToastUtil.showToast(this, "极光一键登录")
Hawk.put(HawkConfig.LoginStatus, true)
setResult(1, intent.putExtra("token", token))
finish()
}
tv_login.setOnClickListener{
startActivityForResult(Intent(this, LoginActivity::class.java),0)
}
}
override fun loginCallBack(t: HttpResult<LoginBean.Response?>?) {
TODO("Not yet implemented")
}
override val context: Context
get() = this@OneKeyLoginActivity
override fun showLoading(message: String?) {
TODO("Not yet implemented")
}
override fun showLoading() {
TODO("Not yet implemented")
}
override fun dismissLoading() {
TODO("Not yet implemented")
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == 1){
setResult(resultCode, data)
finish()
}
}
}
\ No newline at end of file
package com.yidian.common.base
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.OnLifecycleEvent
import java.lang.ref.WeakReference
abstract class BaseActivityRepository<V : IBaseView>(view:V):IRepository {
private var viewReference:WeakReference<out IBaseView> = WeakReference(view)
init {
view.lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume(){}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause(){}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy(){
viewReference.get()?.lifecycle?.removeObserver(this)
}
}
\ No newline at end of file
package com.yidian.common.base
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.OnLifecycleEvent
import java.lang.ref.WeakReference
abstract class BaseFragmentRepository<V : IBaseView>(view:V):IRepository{
protected val viewReference:WeakReference<V> = WeakReference(view)
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume(){}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause(){}
}
\ No newline at end of file
package com.yidian.common.base
import android.os.Bundle
import androidx.viewbinding.ViewBinding
abstract class BaseRepositoryFragment<R : BaseActivityRepository<out IBaseView>,VB :ViewBinding> :BaseFragment<VB>() {
protected val repository :R = createRepository()
abstract fun createRepository(): R
/**
* 此处为了处理Fragment复用后ARepository的生命周期丢失问题
*/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycle.addObserver(repository)
}
override fun onDestroy() {
super.onDestroy()
lifecycle.removeObserver(repository)
}
}
\ No newline at end of file
package com.yidian.common.base
import androidx.lifecycle.LifecycleOwner
interface IBaseView :LifecycleOwner{
}
\ No newline at end of file
package com.yidian.common.base
import androidx.lifecycle.LifecycleObserver
interface IRepository: LifecycleObserver
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.yidian.chameleon.ChameleonParser
import org.json.JSONObject
class CardFactory {
companion object{
fun createChameleonCard(parent: ViewGroup, cardType: Int, chameleonViewUtils: ChameleonViewUtils, bean: JSONObject): View{
val chameleonParser = ChameleonParser(parent.context)
val chameleonView: View = chameleonViewUtils.createChameleonView(cardType, chameleonParser)
chameleonParser.bindTemplateData(chameleonView, bean)
return chameleonView
}
fun createViewHolder(parent: ViewGroup, cardType: Int, chameleonViewUtils: ChameleonViewUtils): RecyclerView.ViewHolder {
return ChameleonCard(parent, cardType, chameleonViewUtils).getYdViewHolder()
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.View
import android.view.ViewGroup
import com.yidian.chameleon.ChameleonParser
import com.yidian.common.cardutils.bean.CommonCardBean
import org.json.JSONObject
class ChameleonCard(parent: ViewGroup, cardType: Int, chameleonViewUtils: ChameleonViewUtils): CommonCard() {
private val chameleonParser = ChameleonParser(parent.context)
private val chameleonView: View = chameleonViewUtils.createChameleonView(cardType, chameleonParser)
init {
setCardView(chameleonView)
setClickListener()
}
override fun setData(bean: Any) {
bean as CommonCardBean
chameleonParser.bindTemplateData(chameleonView, JSONObject(bean.content as Map<*, *>))
}
private fun setClickListener() {
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import com.yidian.chameleon.ChameleonParser
import com.yidian.common.R
import com.yidian.common.YdBaseApplication.Companion.context
class ChameleonViewUtils(context: Context) {
var chameleonParser: ChameleonParser = ChameleonParser(context)
fun createChameleonView(chameleonId: Int, chameleonParser: ChameleonParser = this.chameleonParser): View {
if (chameleonId == 800001) {
val params = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT,200)
return TextView(context).apply {
text = "测试数据 80001"
textSize = 17f
gravity = Gravity.CENTER
layoutParams = params
}
} else {
return chameleonParser.createView(chameleonId.toString())
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.View
abstract class CommonCard: IHolderData {
private lateinit var viewHolder: YdViewHolder
private lateinit var cardView: View
fun setCardView(cardView: View){
this.cardView = cardView
viewHolder = YdViewHolder(cardView, this)
}
fun getCardView(): View{
return cardView
}
fun getYdViewHolder(): YdViewHolder{
return viewHolder
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.yidian.common.R
import com.yidian.common.XRouterPathConstants
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.services.XEventService
import com.yidian.nightmode.widget.YdCheckedBox
import com.yidian.nightmode.widget.YdImageView
import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xpage.XPageManager
class CommonDailyCard(val parent: ViewGroup): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_common_daily_card, parent, false)
private val cbChecked = rootView.findViewById<YdCheckedBox>(R.id.cb_checked)
private val ivClose = rootView.findViewById<YdImageView>(R.id.iv_close)
private lateinit var polymerCommonCardBean: PolymerCommonCardBean
init {
setCardView(rootView)
setClickListener()
}
override fun setData(bean: Any) {
bean as PolymerCommonCardBean
polymerCommonCardBean = bean
if(polymerCommonCardBean.isShowChecked){
cbChecked.visibility = View.VISIBLE
cbChecked.isChecked = polymerCommonCardBean.isChecked
}else{
cbChecked.visibility = View.GONE
}
}
private fun setClickListener(){
rootView.setOnClickListener{
XPageManager.push(XRouterPathConstants.AUTHOR_HOME_PAGE, null)
}
ivClose.setOnClickListener {
val xBaseEvent = XBaseEvent("feedback", "CommonDailyCard")
XEventService.postEvent(xBaseEvent)
}
cbChecked.setOnClickListener {
polymerCommonCardBean.isChecked = cbChecked.isChecked
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.yidian.common.R
import com.yidian.nightmode.widget.YdLinearLayout
import com.yidian.nightmode.widget.YdRelativeLayout
class DailyHeadCard(parent: ViewGroup): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_daily_head_card, parent, false)
private val rlyNewsBroadcast = rootView.findViewById<YdRelativeLayout>(R.id.rly_newsBroadcast)
private val llySubscribe = rootView.findViewById<YdLinearLayout>(R.id.lly_subscribe)
init {
setCardView(rootView)
setClickListener()
}
override fun setData(bean: Any) {
}
private fun setClickListener(){
rlyNewsBroadcast.setOnClickListener {
}
llySubscribe.setOnClickListener {
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.yidian.common.R
import com.yidian.common.cardutils.adapter.FlashAdapter
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.nightmode.widget.YdRecyclerView
class FlashHeadCard(var parent: ViewGroup): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_flash_head_card, parent, false)
private val rvHead = rootView.findViewById<YdRecyclerView>(R.id.rv_head)
val adapter: FlashAdapter by lazy { FlashAdapter(parent.context) }
init {
initView()
setCardView(rootView)
}
private fun initView(){
val layoutManager = LinearLayoutManager(parent.context)
layoutManager.orientation = LinearLayoutManager.HORIZONTAL
rvHead.layoutManager = layoutManager
rvHead.adapter = adapter
}
override fun setData(bean: Any) {
bean as PolymerCommonCardBean
// adapter.update(bean.flashHeadBeanList)
}
}
\ No newline at end of file
package com.yidian.common.cardutils
interface IHolderData {
fun setData(bean: Any)
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.yidian.common.R
class LoadNoMoreCard(val parent: ViewGroup): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_load_no_more, parent, false)
init {
setCardView(rootView)
}
override fun setData(bean: Any) {
}
}
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.yidian.common.R
import com.yidian.common.XRouterPathConstants
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.nightmode.widget.YdCheckedBox
import com.yidian.xpage.XPageManager
class PodcastDailyCard(parent: ViewGroup): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_podcast_daily_card, parent, false)
private val cbChecked = rootView.findViewById<YdCheckedBox>(R.id.cb_checked)
private val tvHomeName = rootView.findViewById<TextView>(R.id.tv_itemHomeName)
private val tvHomeContent = rootView.findViewById<TextView>(R.id.tv_itemHomeContent)
private lateinit var polymerCommonCardBean: PolymerCommonCardBean
init {
setCardView(rootView)
setClickListener()
}
override fun setData(bean: Any) {
bean as PolymerCommonCardBean
polymerCommonCardBean = bean
if(polymerCommonCardBean.isShowChecked){
cbChecked.visibility = View.VISIBLE
cbChecked.isChecked = polymerCommonCardBean.isChecked
}else{
cbChecked.visibility = View.GONE
}
// tvHomeName.text = polymerCommonCardBean.name
// tvHomeContent.text = polymerCommonCardBean.content
}
private fun setClickListener(){
rootView.setOnClickListener{
XPageManager.push(XRouterPathConstants.NEWS_CONTENT, null)
}
cbChecked.setOnClickListener {
polymerCommonCardBean.isChecked = cbChecked.isChecked
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
class PolymerCardFactory {
companion object{
const val LoadNoMoreCard = -200 //加载更多无数据卡
const val SubscribeHead = 902 //订阅头部卡
const val SubscribeHeadNull = 903 //无订阅头部卡
const val CommonPolymerCard = 100 //普通聚合卡
fun createViewHolder(parent: ViewGroup, cardType: Int, chameleonViewUtils: ChameleonViewUtils): RecyclerView.ViewHolder {
return when(cardType){
LoadNoMoreCard -> LoadNoMoreCard(parent).getYdViewHolder()
SubscribeHead -> SubscribeHeadCard(parent).getYdViewHolder()
SubscribeHeadNull -> SubscribeHeadTextCard(parent, chameleonViewUtils).getYdViewHolder()
else -> PolymerNormalCard(parent, chameleonViewUtils).getYdViewHolder()
}
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.yidian.common.R
import com.yidian.common.cardutils.adapter.CommonAdapter
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.widget.YdMaxRecyclerView
import com.yidian.nightmode.widget.YdCheckedBox
import com.yidian.nightmode.widget.YdFrameLayout
import com.yidian.nightmode.widget.YdView
import org.json.JSONObject
class PolymerNormalCard(var parent: ViewGroup, var chameleonViewUtils: ChameleonViewUtils): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_polymer_chameleon_card, parent, false)
private val headerParent = rootView.findViewById<YdFrameLayout>(R.id.fly_header)
private val rvCard = rootView.findViewById<YdMaxRecyclerView>(R.id.rv_card)
private val cbChecked = rootView.findViewById<YdCheckedBox>(R.id.cb_checked)
private val vManage = rootView.findViewById<YdView>(R.id.v_manage)
private val cardAdapter = CommonAdapter(chameleonViewUtils)
private lateinit var polymerCommonCardBean: PolymerCommonCardBean
init {
setCardView(rootView)
initRecyclerView()
setClickListener()
}
private fun initRecyclerView(){
rvCard.layoutManager = LinearLayoutManager(parent.context)
rvCard.adapter = cardAdapter
rvCard.isNestedScrollingEnabled = false
}
override fun setData(bean: Any) {
polymerCommonCardBean = bean as PolymerCommonCardBean
if(polymerCommonCardBean.isShowChecked){
cbChecked.visibility = View.VISIBLE
vManage.visibility = View.VISIBLE
}else{
cbChecked.visibility = View.GONE
vManage.visibility = View.GONE
}
cbChecked.isChecked = polymerCommonCardBean.isChecked
val header = bean.header
if(header != null){
val headerView = CardFactory.createChameleonCard(headerParent, header.card_type_id, chameleonViewUtils, JSONObject(header.content as Map<*, *>))
headerParent.removeAllViews()
headerParent.addView(headerView)
}else{
headerParent.removeAllViews()
}
val cardList = bean.card_list
if(cardList != null){
cardAdapter.update(cardList)
}
}
private fun setClickListener() {
vManage.setOnClickListener {
cbChecked.isChecked = !cbChecked.isChecked
polymerCommonCardBean.isChecked = cbChecked.isChecked
}
}
}
\ No newline at end of file
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.yidian.common.R
import com.yidian.common.XRouterPathConstants
import com.yidian.common.YdBaseApplication
import com.yidian.common.cardutils.adapter.OnItemClickListener
import com.yidian.common.cardutils.adapter.SubscribeAdapter
import com.yidian.common.cardutils.bean.CommonCardBean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.cardutils.bean.SubscribeHeadBean
import com.yidian.nightmode.widget.YdRecyclerView
import com.yidian.utils.ToastUtil
import com.yidian.xpage.XPageManager
import org.json.JSONArray
class SubscribeHeadCard(val parent: ViewGroup): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_subscribe_head_card, parent, false)
private val rvSubscribe = rootView.findViewById<YdRecyclerView>(R.id.rv_subscribe)
val adapter: SubscribeAdapter by lazy { SubscribeAdapter(parent.context) }
private val subscribeHeadBeanList: ArrayList<SubscribeHeadBean> by lazy { ArrayList<SubscribeHeadBean>() }
private var lastClickTime = 0L
init {
initView()
setCardView(rootView)
setClickListener()
}
private fun initView(){
val layoutManager = LinearLayoutManager(parent.context)
layoutManager.orientation = LinearLayoutManager.HORIZONTAL
rvSubscribe.layoutManager = layoutManager
rvSubscribe.adapter = adapter
}
override fun setData(bean: Any) {
bean as PolymerCommonCardBean
val commonCardBean = bean.card_list?.get(0)
subscribeHeadBeanList.clear()
subscribeHeadBeanList.add(SubscribeHeadBean("nativeAdd", "添加", null).setViewType(SubscribeAdapter.headType))
val gson = Gson()
val beanJson = gson.toJson(commonCardBean?.content)
val headerResultList = gson.fromJson<ArrayList<SubscribeHeadBean>>(beanJson, object: TypeToken<ArrayList<SubscribeHeadBean>>(){}.type)
subscribeHeadBeanList.addAll(headerResultList)
subscribeHeadBeanList.add(SubscribeHeadBean("nativeAll", "全部", null).setViewType(SubscribeAdapter.footerType))
adapter.update(subscribeHeadBeanList)
}
private fun setClickListener(){
adapter.setOnItemClickListener(object : OnItemClickListener<SubscribeHeadBean> {
override fun onClick(view: View?, position: Int, item: SubscribeHeadBean?) {
val currentClickTime = System.currentTimeMillis()
if(currentClickTime - lastClickTime < 1000) return
lastClickTime = currentClickTime
item?.let {
when (item.wm_id) {
"nativeAdd" -> ToastUtil.showToast(YdBaseApplication.context, "该功能暂未开放")
"nativeAll" -> {
XPageManager.push(XRouterPathConstants.SUBSCRIPTION, null)
}
else -> {
val paramsMap = hashMapOf<String, Any>(Pair("fromId", item.wm_id!!))
XPageManager.push(XRouterPathConstants.AUTHOR_HOME_PAGE, paramsMap)
}
}
}
}
})
}
}
package com.yidian.common.cardutils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.yidian.common.R
import com.yidian.common.cardutils.adapter.OnItemClickListener
import com.yidian.common.cardutils.adapter.SubscribeAdapter
import com.yidian.common.cardutils.bean.CommonCardBean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.cardutils.bean.SubscribeHeadBean
import com.yidian.nightmode.widget.YdFrameLayout
import com.yidian.nightmode.widget.YdRecyclerView
import com.yidian.utils.ToastUtil
import org.json.JSONArray
import org.json.JSONObject
class SubscribeHeadTextCard(val parent: ViewGroup, var chameleonViewUtils: ChameleonViewUtils): CommonCard() {
private val rootView: View = LayoutInflater.from(parent.context).inflate(R.layout.item_subscribe_head_text_card, parent, false)
private val flyRoot = rootView.findViewById<YdFrameLayout>(R.id.fly_root)
init {
setCardView(rootView)
}
override fun setData(bean: Any) {
bean as PolymerCommonCardBean
val commonCardBean = bean.card_list?.get(0)
val cardType = commonCardBean?.card_type_id
if(cardType != null){
val cardView = CardFactory.createChameleonCard(flyRoot, cardType, chameleonViewUtils, JSONObject(commonCardBean.content as Map<*, *>))
flyRoot.addView(cardView)
}
}
}
package com.yidian.common.cardutils
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class YdViewHolder(itemView: View, var holderData: IHolderData): RecyclerView.ViewHolder(itemView){
fun setData(data: Any){
holderData.setData(data)
}
}
\ No newline at end of file
package com.yidian.common.cardutils.adapter
import android.util.Log
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.yidian.common.cardutils.CardFactory
import com.yidian.common.cardutils.ChameleonViewUtils
import com.yidian.common.cardutils.YdViewHolder
import com.yidian.common.cardutils.bean.CommonCardBean
class CommonAdapter(var chameleonViewUtils: ChameleonViewUtils): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val dataList: ArrayList<CommonCardBean> by lazy { ArrayList<CommonCardBean>() }
override fun getItemCount(): Int {
return dataList.size
}
override fun getItemViewType(position: Int): Int {
return dataList[position].card_type_id
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return CardFactory.createViewHolder(parent, viewType, chameleonViewUtils)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder as YdViewHolder
holder.setData(dataList[position])
}
fun update(newData: ArrayList<CommonCardBean>){
newData.let {
dataList.clear()
dataList.addAll(it)
notifyDataSetChanged()
}
}
}
package com.yidian.common.cardutils.adapter
import android.annotation.SuppressLint
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.yidian.common.R
import com.yidian.common.YdBaseApplication.Companion.context
import com.yidian.common.cardutils.bean.FlashHeadBean
import com.yidian.common.utils.ViewHolderUtil.Companion.createItemView
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.item_flash_head.*
class FlashAdapter(var context: Context): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val dataList: ArrayList<FlashHeadBean> by lazy { ArrayList<FlashHeadBean>() }
private lateinit var mOnItemClickListener: OnItemClickListener<FlashHeadBean>
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ViewHolder(createItemView(parent, R.layout.item_flash_head))
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder as ViewHolder
holder.setData(dataList[position])
holder.itemView.setOnClickListener{
mOnItemClickListener.onClick(it, position, dataList[position])
}
}
fun update(newData: ArrayList<FlashHeadBean>){
newData.let {
dataList.clear()
dataList.addAll(it)
notifyDataSetChanged()
}
}
override fun getItemCount(): Int {
return dataList.size
}
fun setOnItemClickListener(onItemClickListener: OnItemClickListener<FlashHeadBean>) {
mOnItemClickListener = onItemClickListener
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), LayoutContainer {
override val containerView: View
get() = itemView
@SuppressLint("ResourceAsColor")
fun setData(flashHeadBean: FlashHeadBean) {
tv_tab.text = flashHeadBean.tab
if(flashHeadBean.isChecked){
tv_tab.setTextColor(context.resources.getColor(R.color.secondTabSelectColor))
tv_tab.setBackgroundResource(R.drawable.bg_checked_radio)
}else{
tv_tab.setTextColor(context.resources.getColor(R.color.secondTabUnSelectColor))
tv_tab.setBackgroundResource(R.drawable.bg_unchecked_radio)
}
}
}
}
package com.yidian.common.cardutils.adapter package com.yidian.common.cardutils.adapter
import android.view.View import android.view.View
import com.yidian.common.cardutils.bean.SubscribeHeadBean
interface OnItemClickListener<T> { interface OnItemClickListener<T> {
fun onClick(view: View?, position: Int, item: T?) fun onClick(view: View?, position: Int, item: T?)
......
package com.yidian.common.cardutils.adapter
import android.content.Context
import android.util.Log
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.yidian.common.cardutils.ChameleonViewUtils
import com.yidian.common.cardutils.PolymerCardFactory
import com.yidian.common.cardutils.YdViewHolder
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
class PolymerCardAdapter(context: Context): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val dataList: ArrayList<PolymerCommonCardBean> by lazy { ArrayList<PolymerCommonCardBean>() }
private val chameleonViewUtils: ChameleonViewUtils = ChameleonViewUtils(context)
override fun getItemCount(): Int {
return dataList.size
}
override fun getItemViewType(position: Int): Int {
return dataList[position].aggregation_card_type_id
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return PolymerCardFactory.createViewHolder(parent, viewType, chameleonViewUtils)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder as YdViewHolder
holder.setData(dataList[position])
}
fun update(newData: ArrayList<PolymerCommonCardBean>){
newData.let {
dataList.clear()
dataList.addAll(it)
notifyDataSetChanged()
}
}
fun loadMore(newData: ArrayList<PolymerCommonCardBean>){
newData.let {
dataList.addAll(it)
notifyDataSetChanged()
}
}
fun clear(){
dataList.clear()
notifyDataSetChanged()
}
}
package com.yidian.common.cardutils.adapter
import android.annotation.SuppressLint
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.yidian.common.R
import com.yidian.common.cardutils.bean.SubscribeHeadBean
import com.yidian.common.utils.ViewHolderUtil.Companion.createItemView
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.item_subscribe_head.*
class SubscribeAdapter(val context: Context): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object{
const val commonType = 0
const val headType = -1
const val footerType = -2
}
private val dataList: ArrayList<SubscribeHeadBean> by lazy { ArrayList<SubscribeHeadBean>() }
private lateinit var mOnItemClickListener: OnItemClickListener<SubscribeHeadBean>
override fun getItemViewType(position: Int): Int {
return dataList[position].getViewType()
}
override fun getItemCount(): Int {
return dataList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ViewHolder(context, createItemView(parent, R.layout.item_subscribe_head), viewType)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder as ViewHolder
holder.setData(dataList[position])
holder.itemView.setOnClickListener{
mOnItemClickListener.onClick(it, position, dataList[position])
}
}
fun update(newData: ArrayList<SubscribeHeadBean>){
newData.let {
dataList.clear()
dataList.addAll(it)
notifyDataSetChanged()
}
}
fun setOnItemClickListener(onItemClickListener: OnItemClickListener<SubscribeHeadBean>) {
mOnItemClickListener = onItemClickListener
}
class ViewHolder(val context: Context, itemView: View, private val viewType: Int) : RecyclerView.ViewHolder(itemView), LayoutContainer {
override val containerView: View
get() = itemView
@SuppressLint("ResourceAsColor")
fun setData(subscribeHeadBean: SubscribeHeadBean) {
tv_content.text = subscribeHeadBean.name
if(viewType == commonType){
iv_add.visibility = View.GONE
iv_more.visibility = View.GONE
iv_icon.visibility = View.VISIBLE
iv_point.visibility = View.VISIBLE
Glide.with(context).load(subscribeHeadBean.image).into(iv_icon)
}else{
iv_icon.visibility = View.GONE
iv_point.visibility = View.GONE
if(viewType == headType){
iv_add.visibility = View.VISIBLE
iv_more.visibility = View.GONE
}else if(viewType == footerType){
iv_more.visibility = View.VISIBLE
iv_add.visibility = View.GONE
}
}
}
}
}
package com.yidian.common.cardutils.bean
class CommonCardBean(
var flow_type_id: Int = 0,
var card_type_id: Int = 0,
var chameleon_id: String = "",
var content: Any
)
\ No newline at end of file
package com.yidian.common.cardutils.bean
class FlashHeadBean(var tabId: Int, var tab: String, var isChecked: Boolean)
\ No newline at end of file
package com.yidian.common.cardutils.bean
class PolymerCommonCardBean(var aggregation_card_type_id: Int, var header: CommonCardBean?, var card_list: ArrayList<CommonCardBean>?){
var isShowChecked: Boolean = false
var isChecked: Boolean = false
}
\ No newline at end of file
package com.yidian.common.cardutils.bean
import com.yidian.common.cardutils.adapter.SubscribeAdapter
class SubscribeHeadBean(var wm_id: String?, var name: String?, var image: String?){
private var viewType = SubscribeAdapter.commonType
fun setViewType(viewType: Int): SubscribeHeadBean{
this.viewType = viewType
return this
}
fun getViewType(): Int{
return this.viewType
}
}
\ No newline at end of file
package com.yidian.common.chameleon
import org.json.JSONObject
data class ChameleonEvent (
var module:String?,
var action:String?,
var params:JSONObject?,
var options:JSONObject?
)
\ No newline at end of file
package com.yidian.common.chameleon
interface ChameleonEventService {
fun dispatchEvent(event:ChameleonEvent)
}
\ No newline at end of file
package com.yidian.common.chameleon
object ChameleonServiceManager {
private val services:MutableSet<ChameleonEventService> = mutableSetOf()
fun registerChameleonService(service:ChameleonEventService){
services.add(service)
}
fun unregisterChameleonService(service:ChameleonEventService){
services.remove(service)
}
fun unregisterAllChameleonService(){
services.clear()
}
fun dispatchEvent(event:ChameleonEvent){
services.forEach{
it.dispatchEvent(event)
}
}
}
\ No newline at end of file
package com.yidian.common.chameleon
import com.yidian.chameleon.js.BridgeService
import com.yidian.chameleon.js.BridgeService.IAppDispatcher
import io.reactivex.Observable
import org.json.JSONObject
class ChameleonServiceRouter: IAppDispatcher {
override fun connectEventReceiver(eventReceiver: IAppDispatcher.IServiceEventReceiver?): String {
return ""
}
override fun dispatchCall(
module: String?,
action: String?,
params: JSONObject?,
options: JSONObject?
): Observable<BridgeService.JsResult> {
ChameleonServiceManager.dispatchEvent(ChameleonEvent(module,action,params,options))
val jsResult = BridgeService.JsResult(params)
return Observable.just(jsResult)
}
override fun disconnectEventReceiver(evToken: String?) {}
}
\ No newline at end of file
...@@ -18,25 +18,25 @@ class HttpParamsUtils{ ...@@ -18,25 +18,25 @@ class HttpParamsUtils{
queryParamsMap["distribution"] = AppConfig.distribution queryParamsMap["distribution"] = AppConfig.distribution
queryParamsMap["net"] = networkType queryParamsMap["net"] = networkType
queryParamsMap["platform"] = AppConfig.platform queryParamsMap["platform"] = AppConfig.platform
queryParamsMap["equipment_id"] = getEquipmentId() queryParamsMap["device_finger"] = getDeviceFinger()
queryParamsMap["reqid"] = getRequestId(timeStamp) queryParamsMap["reqid"] = getRequestId(timeStamp)
return queryParamsMap return queryParamsMap
} }
private fun getEquipmentId(): String{ private fun getDeviceFinger(): String{
var equipmentId = "" var deviceFinger = ""
val tempId = FtDeviceFingerManager.getEquipmentId() val tempId = FtDeviceFingerManager.getDeviceFinger()
if(tempId != null){ if(tempId != null){
equipmentId = tempId deviceFinger = tempId
} }
return equipmentId return deviceFinger
} }
private fun getRequestId(timeStamp: Long): String{ private fun getRequestId(timeStamp: Long): String{
val sb = StringBuilder() val sb = StringBuilder()
sb.append(AppConfig.appid) sb.append(AppConfig.appid)
sb.append('_') sb.append('_')
sb.append(getEquipmentId()) sb.append(getDeviceFinger())
sb.append('_') sb.append('_')
sb.append(timeStamp) sb.append(timeStamp)
return sb.toString() return sb.toString()
...@@ -46,7 +46,7 @@ class HttpParamsUtils{ ...@@ -46,7 +46,7 @@ class HttpParamsUtils{
val sb = StringBuilder() val sb = StringBuilder()
sb.append(AppConfig.appid) sb.append(AppConfig.appid)
sb.append(AppConfig.platform) sb.append(AppConfig.platform)
sb.append(getEquipmentId()) sb.append(getDeviceFinger())
sb.append(getRequestId(timeStamp)) sb.append(getRequestId(timeStamp))
sb.append("ydapp-metro") sb.append("ydapp-metro")
val signMD5 = EncryptUtil.getMD5(sb.toString()) val signMD5 = EncryptUtil.getMD5(sb.toString())
......
...@@ -3,11 +3,14 @@ package com.yidian.common.http ...@@ -3,11 +3,14 @@ package com.yidian.common.http
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.google.gson.Gson
import com.google.gson.JsonParseException import com.google.gson.JsonParseException
import com.google.gson.reflect.TypeToken
import com.yidian.common.YdBaseApplication import com.yidian.common.YdBaseApplication
import com.yidian.utils.ToastUtil import com.yidian.utils.ToastUtil
import io.reactivex.rxjava3.core.Observer import io.reactivex.rxjava3.core.Observer
import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.disposables.Disposable
import kotlin.reflect.typeOf
abstract class HttpResultSubscriber<T>(private var showProgress: Boolean = false) : Observer<HttpResult<T>?> { abstract class HttpResultSubscriber<T>(private var showProgress: Boolean = false) : Observer<HttpResult<T>?> {
private var isShowErrorMsg = true private var isShowErrorMsg = true
...@@ -45,12 +48,20 @@ abstract class HttpResultSubscriber<T>(private var showProgress: Boolean = false ...@@ -45,12 +48,20 @@ abstract class HttpResultSubscriber<T>(private var showProgress: Boolean = false
onRequestFailure(Exception(e.toString())) onRequestFailure(Exception(e.toString()))
} }
override fun onNext(result: HttpResult<T>?) { override fun onNext(res: HttpResult<T>?) {
if (result?.code == 0) { if (res?.code == 0) {
onRequestSuccess(result) // val result = res.result as String
// val resultObj = Gson().fromJson<T>(result, object: TypeToken<T>(){}.type)
// val decodeResult = HttpResult<T>()
// decodeResult.code = res.code
// decodeResult.reason = res.reason
// decodeResult.status = res.status
// decodeResult.result = resultObj
// onRequestSuccess(decodeResult)
onRequestSuccess(res)
}else{ }else{
onFailer(result) onFailer(res)
ToastUtil.showToast(YdBaseApplication.context, result?.reason) ToastUtil.showToast(YdBaseApplication.context, res?.reason)
} }
} }
......
package com.yidian.common.http
import android.content.Context
interface IBaseView {
object LifeEvent {
const val CREATE = 0x01
const val START = 0x02
const val RESUME = 0x03
const val PAUSE = 0x04
const val STOP = 0x05
const val DESTROY = 0x06
}
/**
* 获取上下文对象
*
* @return
*/
val context: Context
/**
* 显示进度条
*
* @param message 要显示的信息
*/
fun showLoading(message: String?)
/**
* 显示进度条
*/
fun showLoading()
/**
* 隐藏进度条
*/
fun dismissLoading()
}
\ No newline at end of file
...@@ -17,32 +17,11 @@ class URLs { ...@@ -17,32 +17,11 @@ class URLs {
} }
} }
const val guestLogin = "/login/login/guest"
const val sendSmsCode = "/login/login/send_sms_code"
const val videoCommentList = "/content/comment/list"
const val videoAddComment = "/content/comment/add"
const val addCollection = "/user/collect/add"
const val delCollection = "/user/collect/del"
const val logout = "/login/login/logout"
const val userInfo = "/user/user/info" const val userInfo = "/user/user/info"
const val userInfoAll = "/user/user/info_all"
const val getExpression = "/content/comment/expression"
const val likeComment = "/content/comment/like"
const val contentDetail = "/content/content/get"
const val articleLike = "/content/thumbsup/thumbsup"
const val authorInfo = "/wemedia/profile/info"
const val authorFlow = "/wemedia/flow/homepage"
const val addSubscribe = "/user/subscribe/add"
const val deleteSubscribe = "/user/subscribe/delete"
const val subscribeFlow = "/flow/subscribe/wm_list"
const val recommendFlow = "/flow/recommend/list"
const val modifyNickname = "/user/user/modify_nickname"
const val uploadFile = "/user/user/modify_profile"
const val collectList = "/user/collect/list"
const val subscribeAuthorList = "/user/subscribe/list"
const val pushTokenAndroid = "/push/token/android"
// 生活圈B端 // 生活圈B端
const val uploadFile = "/user/user/modify_profile"
const val pushTokenAndroid = "/push/token/android"
const val authPersonalGetToken = "/Identify/IdOcr/getBizToken" const val authPersonalGetToken = "/Identify/IdOcr/getBizToken"
const val getKSYunToken = "/ksy/Ksyun/getToken" const val getKSYunToken = "/ksy/Ksyun/getToken"
const val getIDCardOCR = "Identify/IdOcr/idCardOcr" const val getIDCardOCR = "Identify/IdOcr/idCardOcr"
......
package com.yidian.common.http.httpbean
import com.yidian.common.http.HttpResult
import com.yidian.common.http.IBaseView
interface IApiCallback: IBaseView {
fun loginCallBack(t: HttpResult<LoginBean.Response?>?)
}
\ No newline at end of file
package com.yidian.common.http.httpbean
class LoginBean (var request : Request,var response : Response){
data class Request(var mobileNo : String, var smsCode : String)
data class Response(var hasBindGatheringCard : String, var token : String)
}
package com.yidian.common.http.httpbean
/**
* FileName: WebResult
* Author: sym
* Date: 2021/3/5 2:26 PM
*/
class WebResult<T>(action: String, data: T) {
var action = action
var params: T? = data
}
\ No newline at end of file
package com.yidian.common.ui.widget
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
/**
* @date : 2019-11-19 19:20
* @depiction : 可设置是否滑动的ViewPager
*/
class ScrollViewPager : ViewPager {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
private var scrollable = false
fun setScrollable(isScrollable: Boolean) {
scrollable = isScrollable
}
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
return if (scrollable) {
super.onInterceptTouchEvent(ev)
} else {
scrollable
}
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(ev: MotionEvent?): Boolean {
return if (scrollable) {
super.onTouchEvent(ev)
} else {
scrollable
}
}
}
\ No newline at end of file
package com.yidian.common.utils
class ImageConstants {
companion object{
const val IMAGE_SERVER_NEW = "http://i3.go2yd.com/image/"
const val IMAGE_SERVER_SHORT_I3 = "i3.go2yd.com"
const val IMAGE_SERVER_SHORT_I1 = "i1.go2yd.com"
}
}
\ No newline at end of file
...@@ -15,7 +15,6 @@ import com.orhanobut.hawk.Hawk ...@@ -15,7 +15,6 @@ import com.orhanobut.hawk.Hawk
import com.yidian.common.AppConfig import com.yidian.common.AppConfig
import com.yidian.common.HawkConfig import com.yidian.common.HawkConfig
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
import com.yidian.common.http.httpbean.WebResult
import com.yidian.common.services.XEventService import com.yidian.common.services.XEventService
import com.yidian.utils.MD5Util import com.yidian.utils.MD5Util
import com.yidian.xarc.xbrid.XBridManager import com.yidian.xarc.xbrid.XBridManager
...@@ -127,25 +126,6 @@ object ToolsUtil { ...@@ -127,25 +126,6 @@ object ToolsUtil {
} else false } else false
} }
//web交互
fun directSend(str: String, content: String, webView: XWebView) {
val tempData = Gson().fromJson(content, JsonObject::class.java)
val webResult = WebResult(str, tempData)
val temp = JSONObject(Gson().toJson(webResult))
XBridManager.postEvent("CommentService", temp, webView)
}
fun isLogin(): Boolean {
return if (Hawk.get(HawkConfig.LoginStatus, false)) {
true
} else {
val paramsMap = HashMap<String, String>()
paramsMap["popName"] = XRouterPathConstants.NEWS_CONTENT
XPageManager.push(XRouterPathConstants.LOGIN, paramsMap)
false
}
}
fun getYDEncryptionToken(): String { fun getYDEncryptionToken(): String {
val temp = StringBuilder() val temp = StringBuilder()
//架构组提供的设备指纹 //架构组提供的设备指纹
......
package com.yidian.common.utils
import android.content.Context
import android.graphics.Typeface
import com.yidian.common.YdBaseApplication
import kotlin.concurrent.thread
class TypefaceUtil {
companion object{
val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED){
TypefaceUtil()
}
}
var typeface:Typeface? = null
fun initTypeface(context: Context) {
// typeface= Typeface.createFromAsset(context.assets,"font/SourceHanSerifCN-Bold-2.otf")
// typeface= Typeface.createFromAsset(context.assets,"font/DIN Alternate Bold.ttf")
}
}
\ No newline at end of file
package com.yidian.common.widget
import android.content.Context
import android.content.res.AssetManager
import android.graphics.Typeface
import android.util.AttributeSet
import com.yidian.nightmode.widget.YdTextView
class NumberFontTextView @JvmOverloads constructor(
context: Context,
attributeSet: AttributeSet? = null,
defStyle: Int = 0
) : YdTextView(context, attributeSet, defStyle) {
init {
val typeface= Typeface.createFromAsset(context.assets,"font/DINPro-Bold.ttf")
setTypeface(typeface)
}
}
\ No newline at end of file
package com.yidian.common.widget
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
import android.util.AttributeSet
import com.yidian.common.R
import com.yidian.common.utils.TypefaceUtil
import com.yidian.common.utils.YdUiUtils
import com.yidian.nightmode.widget.YdTextView
class TextFontTextView @JvmOverloads constructor(
context: Context,
attributeSet: AttributeSet? = null,
defStyle: Int = 0
) : YdTextView(context, attributeSet, defStyle) {
private val TAG = "TextFontTextView"
private val rect by lazy { Rect() }
private var showUnderLine = false
var underLineHeight = YdUiUtils.dip2px(9,context)
set(value) {
field = YdUiUtils.dip2px(value,context)
}
private val underRect:Rect by lazy { Rect() }
private val underPaint:Paint by lazy { Paint() }
init {
typeface = TypefaceUtil.instance.typeface
}
fun showUnderLine(){
showUnderLine = true
invalidate()
}
fun hideUnderLine(){
showUnderLine = false
invalidate()
}
override fun onDraw(canvas: Canvas?) {
if (showUnderLine) {
paint.getTextBounds(text.toString(),0,text.length,rect)
underPaint.color = context.resources.getColor(R.color.mainYellowColor)
underPaint.style = Paint.Style.FILL
underRect.bottom = baseline+paint.fontMetrics.descent.toInt()
underRect.left = 0
underRect.top = baseline+paint.fontMetrics.descent.toInt()-underLineHeight
underRect.right = rect.right
canvas?.drawRect(underRect,underPaint)
}
super.onDraw(canvas)
}
}
\ No newline at end of file
package com.yidian.common.widget.chameleon;
import android.content.Context;
import com.yidian.chameleon.annotation.BindingData;
import com.yidian.chameleon.annotation.SetAttribute;
import com.yidian.chameleon.annotation.ViewParserFactory;
import com.yidian.chameleon.value.base.BooleanValueParser;
import com.yidian.chameleon.value.base.IntegerValueParser;
import com.yidian.chameleon.value.common.CommonColorValueParser;
import com.yidian.chameleon.value.common.CommonTextViewStringValueParser;
import com.yidian.nightmode_basic_widget.helper.NMTextColorResHelper;
import com.yidian.nightmode_basic_widget.parser.NMBaseViewParser;
@ViewParserFactory(viewName = "SubwayRichLabel", category = "YDSubway")
public class SubwayRichParser extends NMBaseViewParser<SubwayRichTextViewGroup> {
@BindingData
public void bindData(SubwayRichTextViewGroup view, String value, CommonTextViewStringValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setValue(valueParser.apply(value));
}
}
@SetAttribute("clickable")
public void setClickable(SubwayRichTextViewGroup view, String value, BooleanValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setViewClickable(valueParser.apply(value));
}
}
@SetAttribute("textColor")
public void setTextColor(SubwayRichTextViewGroup view, String value, CommonColorValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
if (valueParser.canAppliedTo(value)) {
view.setViewTextColor(valueParser.apply(value));
((NMTextColorResHelper.IResSetter) view).setTextColorResValue(value);
}
}
}
@SetAttribute("textSize")
public void setTextSize(SubwayRichTextViewGroup view, String value, IntegerValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setViewTextSize(valueParser.apply(value));
}
}
@SetAttribute("fontStyle")
public void setFontStyle(SubwayRichTextViewGroup view, String value, CommonTextViewStringValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setViewFontStyle(valueParser.apply(value));
}
}
@SetAttribute("cornerText")
public void setCornerText(SubwayRichTextViewGroup view, String value, CommonTextViewStringValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setViewCornerText(valueParser.apply(value));
}
}
@SetAttribute("cornerTextColor")
public void setCornerTextColor(SubwayRichTextViewGroup view, String value, CommonColorValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setViewCornerTextColor(valueParser.apply(value));
}
}
@SetAttribute("cornerTextSize")
public void setCornerTextSize(SubwayRichTextViewGroup view, String value, IntegerValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setViewCornerTextSize(valueParser.apply(value));
}
}
@SetAttribute("maxLines")
public void setMaxLines(SubwayRichTextViewGroup view, String value, IntegerValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setMaxLines(valueParser.apply(value));
}
}
@SetAttribute("showCornerAlways")
public void setShowCornerAlways(SubwayRichTextViewGroup view, String value, BooleanValueParser valueParser) {
if (valueParser.canAppliedTo(value)) {
view.setShowCornerAlways(valueParser.apply(value));
}
}
@Override
public SubwayRichTextViewGroup createView(Context context) {
return new SubwayRichTextViewGroup(context);
}
}
package com.yidian.common.widget.chameleon;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Typeface;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.style.ClickableSpan;
import android.text.style.TextAppearanceSpan;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.yidian.common.R;
import com.yidian.nightmode.widget.YdFrameLayout;
import com.yidian.nightmode_basic_widget.helper.NMBgResHelper;
import com.yidian.nightmode_basic_widget.helper.NMTextColorResHelper;
import com.yidian.nightmode_basic_widget.parser.value.NMColorResValueParser;
public class SubwayRichTextViewGroup extends YdFrameLayout implements NMTextColorResHelper.IResSetter, NMBgResHelper.IResSetter {
private static final String TAG = "SubwayRichTextViewGroup";
private SubwayRichTextView richTextView;
public SubwayRichTextViewGroup(Context context) {
super(context);
init(context, null);
}
public SubwayRichTextViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public SubwayRichTextViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
public void init(Context context, AttributeSet attrs) {
richTextView = new SubwayRichTextView(context);
LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
richTextView.setLayoutParams(layoutParams);
addView(richTextView);
}
private String data;
public void setValue(String data) {
this.data = data;
richTextView.setMaxLines( richTextView.getMaxLines());
richTextView.setEllipsize(TextUtils.TruncateAt.END);
setContent(data);
}
private void setContent(String data) {
richTextView.setOriginalData(data);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(data);
ColorStateList contentColorStateList;
contentColorStateList = ColorStateList.valueOf(richTextView.getTextColor());
TextAppearanceSpan contentSpan = new TextAppearanceSpan("default", Typeface.NORMAL,
(int) richTextView.getTextSize(),
contentColorStateList,
null);
strBuilder.setSpan(contentSpan, 0, strBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (richTextView.isClickable()) {
addSuffix(strBuilder);
}
richTextView.setText(strBuilder);
}
private void addSuffix(SpannableStringBuilder strBuilder) {
SpannableString suffix = new SpannableString(richTextView.getSUFFIX());
TextAppearanceSpan suffixSpan = new TextAppearanceSpan("default", Typeface.NORMAL,
(int) richTextView.getViewCornerTextSize(),
ColorStateList.valueOf(richTextView.getCornerTextColor()),
null);
suffix.setSpan(suffixSpan, 0, suffix.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ExpandSpan clickSpan = new ExpandSpan(richTextView.getCornerTextColor());
suffix.setSpan(clickSpan,0, suffix.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
richTextView.setSuffix(suffix);
strBuilder.append(" ");
strBuilder.append(suffix);
clickSpan.setOnRichClickListener(() -> {
Log.e(TAG, "addSuffix: 折叠 展开 " );
});
}
public void setViewClickable(Boolean apply) {
richTextView.setViewClickable(apply);
}
public void setViewTextColor(Integer apply) {
if (apply != 0) {
richTextView.setViewTextColor(apply);
}
}
public void setViewTextSize(Integer apply) {
richTextView.setViewTextSize(apply);
}
public void setViewFontStyle(String apply) {
}
public void setViewCornerText(String apply) {
richTextView.setViewCornerText(apply);
}
public void setViewCornerTextColor(Integer apply) {
richTextView.setViewCornerTextColor(apply);
}
public void setViewCornerTextSize(Integer apply) {
richTextView.setViewCornerTextSize(apply);
}
public void setMaxLines(Integer apply) {
richTextView.setMaxLines(apply);
}
private void setViewShowCornerAlways(Boolean apply) {
richTextView.setViewShowCornerAlways(apply);
}
NMColorResValueParser nmColorResValueParser;
String valueStr;
@Override
public void setTextColorResValue(String s) {
if (!TextUtils.isEmpty(s) && s.contains("@")) {
this.valueStr = s;
nmColorResValueParser = new NMColorResValueParser();
setViewTextColor(nmColorResValueParser.apply(valueStr));
}
}
@Override
public void setBgResValue(String s, String s1, String s2) {
}
@Override
public void setTheme(Resources.Theme themeId) {
super.setTheme(themeId);
if (nmColorResValueParser != null) {
setViewTextColor(nmColorResValueParser.apply(valueStr));
setValue(data);
}
}
public void setShowCornerAlways(Boolean apply) {
setViewShowCornerAlways(apply);
}
private static class ExpandSpan extends ClickableSpan {
private int color;
private RichClickListener listener;
public ExpandSpan(int color) {
this.color = color;
}
public void setOnRichClickListener(RichClickListener l){
listener =l;
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(color);
ds.setUnderlineText(false);
}
@Override
public void onClick(@NonNull View widget) {
if (widget instanceof TextView) {
((TextView) widget).setHighlightColor(Color.TRANSPARENT);
if (listener!=null){
listener.onClick();
}
}
}
}
interface RichClickListener{
void onClick();
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.LoginActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/et_username"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="20dp"
android:hint="请输入账号"
android:text="18900000000"
android:inputType="phone"
android:textSize="18sp"/>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="20dp"
android:text="123456"
android:hint="请输入密码"
android:textSize="18sp"/>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="20dp"
android:textSize="18sp"
android:text="登录"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/lly_wechat"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher_round"
app:civ_border_width="2dp"
app:civ_border_color="#FF000000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="16sp"
android:text="微信"/>
</LinearLayout>
<LinearLayout
android:id="@+id/lly_qq"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher_round"
app:civ_border_width="2dp"
app:civ_border_color="#FF000000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="16sp"
android:text="QQ"/>
</LinearLayout>
<LinearLayout
android:id="@+id/lly_sina"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher_round"
app:civ_border_width="2dp"
app:civ_border_color="#FF000000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="16sp"
android:text="微博"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.OneKeyLoginActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="150dp"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_phoneNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textColor="#000000"
android:textSize="22sp"
android:text="189****0000" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#a9a9a9"
android:textSize="12sp"
android:text="中国移动提供认证服务" />
<Button
android:id="@+id/btn_oneKeyLogin"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_margin="20dp"
android:background="#1e90ff"
android:textColor="#ffffff"
android:textSize="16sp"
android:text="本机号码一键登录"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#a9a9a9"
android:textSize="14sp"
android:text="不是此号码?使用其他账号" />
<TextView
android:id="@+id/tv_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textColor="#1e90ff"
android:textSize="14sp"
android:text="登录" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
...@@ -68,13 +68,8 @@ dependencies { ...@@ -68,13 +68,8 @@ dependencies {
implementation project(it) implementation project(it)
} }
implementation rootProject.ext.dependencies.publicImplementation implementation rootProject.ext.dependencies.publicImplementation
implementation ('com.yidian.framework.mobile:ydvideo:1.0.0-SNAPSHOT') {
exclude group: 'com.github.bumptech.glide'
}
testImplementation rootProject.ext.dependencies.testImplementation testImplementation rootProject.ext.dependencies.testImplementation
androidTestImplementation rootProject.ext.dependencies.androidTestImplementation androidTestImplementation rootProject.ext.dependencies.androidTestImplementation
implementation 'com.yidian.chameleon:annotation:0.3.29'
kapt 'com.yidian.chameleon:annotationcompiler:0.3.29'
implementation files('libs/meglive_still.aar') implementation files('libs/meglive_still.aar')
implementation project(':idcard_quality') implementation project(':idcard_quality')
implementation files('libs/ks3-androidsdk-1.4.9.jar') implementation files('libs/ks3-androidsdk-1.4.9.jar')
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
package="com.yidian.shenghuoquan.newscontent"> package="com.yidian.shenghuoquan.newscontent">
<application> <application>
<activity android:name=".ui.CommonDetailActivity" />
<activity <activity
android:name=".ui.FlashActivity" android:name=".ui.FlashActivity"
android:theme="@style/FlashTheme"> android:theme="@style/FlashTheme">
...@@ -17,10 +16,6 @@ ...@@ -17,10 +16,6 @@
<activity <activity
android:name=".ui.MainActivity" android:name=".ui.MainActivity"
android:launchMode="singleTask" /> android:launchMode="singleTask" />
<activity
android:name=".ui.HomeActivity"
android:launchMode="singleTask"
android:theme="@style/HomePageTheme"/>
<activity android:name=".ui.DeepLinkActivity"> <activity android:name=".ui.DeepLinkActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
...@@ -37,42 +32,11 @@ ...@@ -37,42 +32,11 @@
android:name=".ui.NewsContentActivity" android:name=".ui.NewsContentActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" /> android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" />
<activity android:name=".ui.author.AuthorHomePageActivity" />
<activity
android:name=".ui.mine.MineActivity"
android:theme="@style/FlutterTransparent">
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@android:color/transparent" />
</activity>
<activity android:name=".ui.mine.BrowsingHistoryActivity" />
<activity android:name=".ui.mine.CollectionActivity" />
<activity android:name=".ui.mine.SubscriptionActivity" />
<activity
android:name=".ui.search.SearchChannelActivity"
android:launchMode="singleTask"
android:theme="@style/Transparent" />
<activity
android:name=".ui.search.SearchResultPageActivity"
android:theme="@style/Transparent" />
<service <service
android:name=".audio.AudioService" android:name=".audio.AudioService"
android:enabled="true" android:enabled="true"
android:exported="true" /> android:exported="true" />
<activity
android:name=".ui.comment.VideoCommentDetailActivity"
android:launchMode="singleTask"
android:theme="@style/Transparent" />
<activity
android:name=".ui.comment.CommentTestActivity"
android:theme="@style/Transparent" />
<activity <activity
android:name=".ui.alive.AliveTestActivity" android:name=".ui.alive.AliveTestActivity"
android:theme="@style/Transparent" /> android:theme="@style/Transparent" />
......
package com.yidian.shenghuoquan.newscontent.action
import com.yidian.common.XRouterPathConstants
import com.yidian.common.YdBaseApplication
import com.yidian.common.chameleon.ChameleonEvent
import com.yidian.common.chameleon.ChameleonEventService
import com.yidian.shenghuoquan.newscontent.ui.NewsContentActivity
import com.yidian.xpage.XPageManager
class ChameleonActionExecutor:ChameleonEventService {
companion object{
const val MODULE_GENERAL = "generalAction"
const val MODULE_CARD = "card"
const val ACTION_SHARE = "share"
const val ACTION_COMMENT = "comment"
const val ACTION_THUMB_UP = "thumb_up"
const val ACTION_GOTO_AUTHOR = "goto_author"
const val ACTION_VIDEO_DETAIL = "video_detail"
const val ACTION_DOC = "doc"
}
private var lastClickTime = 0L
override fun dispatchEvent(event: ChameleonEvent) {
when{
event.module == MODULE_GENERAL && event.action == ACTION_DOC->{
val currentClickTime = System.currentTimeMillis()
if(currentClickTime - lastClickTime < 1000) return
lastClickTime = currentClickTime
if (YdBaseApplication.activityList.isEmpty()) return
val activity = YdBaseApplication.activityList[YdBaseApplication.activityList.size - 1]
activity.runOnUiThread {
val paramsMap = hashMapOf<String, Any>(
Pair(NewsContentActivity.ContentType, NewsContentActivity.TextType),
Pair( NewsContentActivity.DocId, event.params?.optString("docid")?:"" )
)
XPageManager.push(XRouterPathConstants.NEWS_CONTENT, paramsMap)
}
}
event.module == MODULE_GENERAL && event.action == ACTION_VIDEO_DETAIL->{
val currentClickTime = System.currentTimeMillis()
if(currentClickTime - lastClickTime < 1000) return
lastClickTime = currentClickTime
if (YdBaseApplication.activityList.isEmpty()) return
val activity = YdBaseApplication.activityList[YdBaseApplication.activityList.size - 1]
activity.runOnUiThread {
val paramsMap = hashMapOf<String, Any>(
Pair(NewsContentActivity.ContentType, NewsContentActivity.VideoType),
Pair( NewsContentActivity.DocId, event.params?.optString("docid")?:"" )
)
XPageManager.push(XRouterPathConstants.NEWS_CONTENT, paramsMap)
}
}
event.module == MODULE_CARD && event.action == ACTION_GOTO_AUTHOR->{
val currentClickTime = System.currentTimeMillis()
if(currentClickTime - lastClickTime < 1000) return
lastClickTime = currentClickTime
if (YdBaseApplication.activityList.isEmpty()) return
val activity = YdBaseApplication.activityList[YdBaseApplication.activityList.size - 1]
activity.runOnUiThread {
val paramsMap = hashMapOf<String, Any>(
Pair( "fromId", event.params?.optString("fromId")?:"" )
)
XPageManager.push(XRouterPathConstants.AUTHOR_HOME_PAGE, paramsMap)
}
}
}
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.adapter
import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.bean.DynamicExpressionBean
import com.yidian.shenghuoquan.newscontent.ui.comment.EmotionGifPanelView
class GifGridViewAdapter(emotionList: List<DynamicExpressionBean.Result>, page: Int) : BaseAdapter() {
private var emotionList = ArrayList<DynamicExpressionBean.Result>()
init {
var start = page * EmotionGifPanelView.ITEM_GRID_NUM
val end = start + EmotionGifPanelView.ITEM_GRID_NUM
while (start < emotionList.size && start < end) {
this.emotionList.add(emotionList[start])
start++
}
}
override fun getCount(): Int {
return emotionList.size
}
override fun getItem(p0: Int): Any {
return emotionList[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
@SuppressLint("InflateParams")
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view: View?
val myHolder: MyHolder?
if (convertView == null) {
myHolder = MyHolder()
view = LayoutInflater.from(parent!!.context).inflate(R.layout.item_gif_gridview, null)
myHolder.image = view.findViewById(R.id.iv_img)
myHolder.text = view.findViewById(R.id.gif_text)
view.tag = myHolder
} else {
view = convertView
myHolder = view.tag as MyHolder
}
Glide.with(parent!!.context)
.setDefaultRequestOptions(RequestOptions().frame(1000000))
.load(emotionList[position].url)
.into(myHolder.image)
myHolder.text.text = emotionList[position].content.replace("#GIF#", "")
return view!!
}
inner class MyHolder {
lateinit var image: ImageView
lateinit var text: TextView
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.adapter
import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import com.yidian.nightmode.widget.YdImageView
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.ui.comment.Emotion
import com.yidian.shenghuoquan.newscontent.ui.comment.EmotionHelper
import com.yidian.shenghuoquan.newscontent.ui.comment.EmotionPanelView
class GridViewAdapter(emotionList: ArrayList<Emotion>, page: Int, private var dir: String) : BaseAdapter() {
private var emotionList = ArrayList<Emotion>()
init {
var start = page * EmotionPanelView.ITEM_GRID_NUM
val end = start + EmotionPanelView.ITEM_GRID_NUM
while (start < emotionList.size && start < end) {
this.emotionList.add(emotionList[start])
start++
}
}
override fun getCount(): Int {
return emotionList.size
}
override fun getItem(p0: Int): Any {
return emotionList[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
@SuppressLint("InflateParams")
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view: View?
val myHolder: MyHolder?
if (convertView == null) {
myHolder = MyHolder()
view = LayoutInflater.from(parent!!.context).inflate(R.layout.item_gridview, null)
myHolder.image = view.findViewById(R.id.iv_img)
view.tag = myHolder
} else {
view = convertView
myHolder = view.tag as MyHolder
}
when {
emotionList[position].getRes().equals("delete") -> {
myHolder.image.setBackgroundResource(R.mipmap.delete_emotion)
}
emotionList[position].getRes().equals("null") -> {
}
else -> {
if (emotionList[position].getRes() != null) {
val path = dir + "/" + emotionList[position].getRes()
myHolder.image.setImageDrawable(EmotionHelper.getDrawable(path))
emotionList[position].path = path
}
}
}
return view!!
}
inner class MyHolder {
lateinit var image: YdImageView
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.adapter
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.bean.SearchHintBean
import com.yidian.shenghuoquan.newscontent.holder.NormalHintViewHolder
import com.yidian.shenghuoquan.newscontent.ui.search.SearchChannelActivity
import com.yidian.shenghuoquan.newscontent.ui.search.SearchChannelActivity.Companion.SEARCH_TAG
import com.yidian.shenghuoquan.newscontent.ui.search.SearchResultPageActivity
import com.yidian.common.utils.ToolsUtil
class SearchHintAdapter(val context: Context) :
RecyclerView.Adapter<NormalHintViewHolder>() {
private var hintDataList: MutableList<SearchHintBean> = mutableListOf()
private lateinit var addDataListener: SearchChannelActivity.HintListener
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NormalHintViewHolder {
val view = LayoutInflater.from(context).inflate(
R.layout.item_view_search_hint,
parent,
false
)
return NormalHintViewHolder(view)
}
override fun onBindViewHolder(holder: NormalHintViewHolder, position: Int) {
val channel = hintDataList[position]
holder.setData(channel)
holder.setOnItemListener(object : HolderListener {
override fun itemClick() {
if (ToolsUtil.isFastClick) {
if (context is SearchChannelActivity) {
val intent = Intent(context, SearchResultPageActivity::class.java)
intent.putExtra(SEARCH_TAG, hintDataList[position].content)
context.startActivity(intent)
}
addDataListener.itemClick(hintDataList[position].content)
}
}
})
}
override fun getItemCount(): Int {
return hintDataList.size
}
fun setData(hintDataList: MutableList<SearchHintBean>) {
this.hintDataList = hintDataList
notifyDataSetChanged()
}
fun setHintListener(addDataListener: SearchChannelActivity.HintListener) {
this.addDataListener = addDataListener
}
interface HolderListener {
fun itemClick()
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.adapter
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.orhanobut.hawk.Hawk
import com.yidian.common.HawkConfig
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.holder.SearchHistoryViewHolder
import com.yidian.shenghuoquan.newscontent.ui.search.SearchChannelActivity
import com.yidian.shenghuoquan.newscontent.ui.search.SearchChannelActivity.Companion.SEARCH_TAG
import com.yidian.shenghuoquan.newscontent.ui.search.SearchResultPageActivity
import com.yidian.common.utils.ToolsUtil
class SearchHistoryAdapter(val context: Context) : RecyclerView.Adapter<SearchHistoryViewHolder>() {
private lateinit var historyListener: SearchChannelActivity.HistoryListener
var dataList: MutableList<String> = mutableListOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchHistoryViewHolder {
val view = LayoutInflater.from(context).inflate(
R.layout.item_view_search_history,
parent,
false
)
return SearchHistoryViewHolder(view)
}
override fun onBindViewHolder(holder: SearchHistoryViewHolder, position: Int) {
if (dataList.isNotEmpty()) {
val itemData = dataList[position]
holder.setData(itemData)
holder.setOnItemListener(object : HolderListener {
override fun delete() {
dataList.removeAt(position)
if (dataList.isEmpty()) {
historyListener.dismiss()
Hawk.delete(HawkConfig.SearchHistory)
} else {
historyListener.deleteData(dataList)
}
notifyDataSetChanged()
}
override fun itemClick() {
if (ToolsUtil.isFastClick) {
if (context is SearchChannelActivity) {
val intent = Intent(context, SearchResultPageActivity::class.java)
intent.putExtra(SEARCH_TAG, dataList[position])
context.startActivity(intent)
}
historyListener.itemClick(dataList[position])
}
}
})
}
}
override fun getItemCount(): Int {
return if (dataList.size > 5) 5 else dataList.size
}
@JvmName("setData1")
fun setData(searchData: MutableList<String>) {
this.dataList = searchData
notifyDataSetChanged()
}
fun setHistoryListener(historyListener: SearchChannelActivity.HistoryListener) {
this.historyListener = historyListener
}
interface HolderListener {
fun delete()
fun itemClick()
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.holder
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.yidian.shenghuoquan.newscontent.adapter.SearchHintAdapter
import com.yidian.shenghuoquan.newscontent.bean.SearchHintBean
import kotlinx.android.synthetic.main.item_view_search_hint.view.*
class NormalHintViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private var currentData: SearchHintBean? = null
private lateinit var listener: SearchHintAdapter.HolderListener
init {
itemView.setOnClickListener {
listener.itemClick()
}
}
fun setData(data: SearchHintBean) {
// itemView.search_test.text = channel.title
this.currentData = data
itemView.search_hint_content.text = data.content
}
fun setOnItemListener(listener: SearchHintAdapter.HolderListener) {
this.listener = listener
}
}
package com.yidian.shenghuoquan.newscontent.holder
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.yidian.shenghuoquan.newscontent.adapter.SearchHistoryAdapter
import kotlinx.android.synthetic.main.item_view_search_history.view.*
class SearchHistoryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private lateinit var listener: SearchHistoryAdapter.HolderListener
init {
itemView.imv_icon.setOnClickListener {
listener.delete()
}
itemView.setOnClickListener {
listener.itemClick()
}
}
fun setData(data: String) {
itemView.txv_channel_name.text = data
}
fun setOnItemListener(deleteListener: SearchHistoryAdapter.HolderListener) {
listener = deleteListener
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http package com.yidian.shenghuoquan.newscontent.http
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult import com.yidian.common.http.HttpResult
import com.yidian.common.http.URLs import com.yidian.common.http.URLs
import com.yidian.shenghuoquan.newscontent.bean.CreateLifeAccountBean import com.yidian.shenghuoquan.newscontent.bean.CreateLifeAccountBean
...@@ -11,86 +10,6 @@ import retrofit2.Call ...@@ -11,86 +10,6 @@ import retrofit2.Call
import retrofit2.http.* import retrofit2.http.*
interface CommonService { interface CommonService {
@Headers("Content-Type: application/json")
@POST(URLs.guestLogin)
fun guestLogin(@QueryMap commonParams: Map<String, String>, @Body requestParams: GuestLoginBean.Request): Observable<HttpResult<GuestLoginBean.Response?>>
@GET(URLs.sendSmsCode)
fun sendSmsCode(@QueryMap commonParams: Map<String, String>, @QueryMap requestParams: Map<String, String>): Observable<HttpResult<Any?>>
@GET(URLs.logout)
fun logout(@QueryMap commonParams: Map<String, String>): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.videoCommentList)
fun videoCommentList(@QueryMap commonParams: Map<String, String>, @Body requestParams: VideoCommentBean.Request): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.videoAddComment)
fun videoAddComment(@QueryMap commonParams: Map<String, String>, @Body requestParams: VideoAddCommentBean.Request): Observable<HttpResult<Any?>>
@GET(URLs.addCollection)
fun collection(@QueryMap commonParams: Map<String, String>, @QueryMap requestParams: Map<String, String>): Observable<HttpResult<Any?>>
@GET(URLs.delCollection)
fun delCollection(@QueryMap commonParams: Map<String, String>, @QueryMap requestParams: Map<String, String>): Observable<HttpResult<Any?>>
@GET(URLs.userInfo)
fun userInfo(@QueryMap commonParams: Map<String, String>): Observable<HttpResult<Any?>>
@GET(URLs.userInfoAll)
fun userInfoAll(@QueryMap commonParams: Map<String, String>): Observable<HttpResult<Any?>>
@GET(URLs.getExpression)
fun getExpression(@QueryMap commonParams: Map<String, String>): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.likeComment)
fun likeComment(@QueryMap commonParams: Map<String, String>, @Body requestParams: LikeCommentBean.Request): Observable<HttpResult<LikeCommentBean.Response?>>
@GET(URLs.contentDetail)
fun getContentDetail(@QueryMap commonParams: Map<String, String>, @QueryMap requestParams: Map<String, String>): Observable<HttpResult<Any?>>
@GET(URLs.contentDetail)
fun getVideoContentDetail(@QueryMap commonParams: Map<String, String>,@QueryMap requestParams: Map<String, String>): Observable<HttpResult<MutableList<VideoContentDetailBean>?>>
@GET(URLs.articleLike)
fun articleLike(@QueryMap commonParams: Map<String, String>, @QueryMap requestParams: Map<String, String>): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.authorInfo)
fun getAuthorInfo(@QueryMap commonParams: Map<String, String>, @Body requestParams: AuthorInfoBean.Request): Observable<HttpResult<AuthorInfoBean.Response?>>
@Headers("Content-Type: application/json")
@POST(URLs.authorFlow)
fun getAuthorFlow(@QueryMap commonParams: Map<String, String>, @Body requestParams: AuthorFlowBean.Request): Observable<HttpResult<ArrayList<PolymerCommonCardBean>?>>
@Headers("Content-Type: application/json")
@POST(URLs.addSubscribe)
fun addSubscribe(@QueryMap commonParams: Map<String, String>, @Body requestParams: AddSubscribeBean.Request): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.deleteSubscribe)
fun deleteSubscribe(@QueryMap commonParams: Map<String, String>, @Body requestParams: DeleteSubscribeBean.Request): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.subscribeFlow)
fun getSubscribeFlow(@QueryMap commonParams: Map<String, String>, @Body requestParams: FlowBean.Request): Observable<HttpResult<ArrayList<PolymerCommonCardBean>?>>
@Headers("Content-Type: application/json")
@POST(URLs.recommendFlow)
fun getRecommendFlow(@QueryMap commonParams: Map<String, String>, @Body requestParams: FlowBean.Request): Observable<HttpResult<ArrayList<PolymerCommonCardBean>?>>
@GET(URLs.modifyNickname)
fun modifyNickname(@QueryMap commonParams: Map<String, String>, @QueryMap requestParams: Map<String, String>): Observable<HttpResult<Any?>>
@Headers("Content-Type: application/json")
@POST(URLs.collectList)
fun getCollectList(@QueryMap commonParams: Map<String, String>, @Body requestParams: FlowBean.Request): Observable<HttpResult<ArrayList<PolymerCommonCardBean>?>>
@Headers("Content-Type: application/json")
@POST(URLs.subscribeAuthorList)
fun getSubscribeAuthorList(@QueryMap commonParams: Map<String, String>, @Body requestParams: SubscribeAuthorFlowBean.Request): Observable<HttpResult<ArrayList<PolymerCommonCardBean>?>>
@Multipart @Multipart
@POST(URLs.uploadFile) @POST(URLs.uploadFile)
fun uploadFile(@QueryMap commonParams: Map<String, String>, @Part part: MultipartBody.Part): Observable<HttpResult<Any?>> fun uploadFile(@QueryMap commonParams: Map<String, String>, @Part part: MultipartBody.Part): Observable<HttpResult<Any?>>
......
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.chameleon.control.ResourceManager
class AuthorFlowBean(var request: Request) {
data class Request(
var wm_id: String, var nav: String, var page: Int,
var package_version: String = ResourceManager.getInstance().currentVersion
)
}
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.chameleon.control.ResourceManager
class FlowBean(var request: Request) {
data class Request(
var action_type: Int,
var page: Int,
var page_size: Int,
var package_version: String = ResourceManager.getInstance().currentVersion
)
}
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.common.http.HttpResult
import com.yidian.common.http.httpbean.LoginBean
interface IApiCallback {
fun loginCallBack(t: HttpResult<LoginBean.Response?>?)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult
interface IAuthorFlowCallback {
fun authorFlowCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult
interface ICollectionListCallback {
fun collectionListCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult
interface IFlowCallback {
fun subscribeFlowCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?)
fun recommendFlowFlowCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult
interface ISubscribeAuthorListCallback {
fun subscribeAuthorFlowCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult
interface ISubscribeListCallback {
fun subscribeListCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.http.httpbean
import com.yidian.chameleon.control.ResourceManager
class SubscribeAuthorFlowBean(var request: Request) {
data class Request(
var type: String,
var page: Int,
var page_size: Int,
var package_version: String = ResourceManager.getInstance().currentVersion
)
}
package com.yidian.shenghuoquan.newscontent.service
import com.yidian.common.XEventConfig
import com.yidian.common.YdBaseApplication
import com.yidian.common.services.XEventService
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthorBean
import com.yidian.shenghuoquan.newscontent.subscription.subscriptionManager
import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xrouter.ResultResolver
import com.yidian.yac.core.zap.ZapService
import org.json.JSONObject
class ArticleService: ZapService(){
companion object{
const val serviceName: String = "ArticleService"
}
private lateinit var resolver: ResultResolver
override fun onAction(name: String, action: String, params: Any, options: Any, resolver: ResultResolver) {
this.resolver = resolver
params as JSONObject
when(action){
"scrollSettingBarInfo" -> scrollSettingBar(params)
"updateBarSubscribeStatus" -> setBarSubscribeStatus(params)
"scrollSettingBottomBarInfo" -> scrollSettingBottomBarInfo(params)
}
}
override fun onExit() {
}
override fun onInit() {
}
private fun scrollSettingBar(params: JSONObject){
val status = params.optBoolean("status")
val xbaseEvent = XBaseEvent(XEventConfig.SCROLL_SETTING_BAR, status)
XEventService.postEvent(xbaseEvent)
}
private fun setBarSubscribeStatus(params: JSONObject){
val status = params.optBoolean("status")
val fromId = params.optString("fromId")
val avatar = params.optString("avatar")
if (YdBaseApplication.activityList.isEmpty()) return
val activity = YdBaseApplication.activityList[YdBaseApplication.activityList.size - 1]
activity.runOnUiThread {
subscriptionManager.getAuthorSubscribedListFromLocal(status, AuthorBean(wm_id = fromId,image = avatar))
}
}
private fun scrollSettingBottomBarInfo(params: JSONObject){
val status = params.optBoolean("status")
val xbaseEvent = XBaseEvent(XEventConfig.SCROLL_SETTING_BOTTOM_BAR_STATUS, status)
XEventService.postEvent(xbaseEvent)
}
}
\ No newline at end of file
...@@ -2,7 +2,6 @@ package com.yidian.shenghuoquan.newscontent.service ...@@ -2,7 +2,6 @@ package com.yidian.shenghuoquan.newscontent.service
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
import com.yidian.shenghuoquan.newscontent.ui.NewsContentActivity import com.yidian.shenghuoquan.newscontent.ui.NewsContentActivity
import com.yidian.shenghuoquan.newscontent.ui.author.AuthorHomePageActivity
import com.yidian.xarc.xrouter.ResultResolver import com.yidian.xarc.xrouter.ResultResolver
import com.yidian.xpage.XPageManager import com.yidian.xpage.XPageManager
import com.yidian.yac.core.zap.ZapService import com.yidian.yac.core.zap.ZapService
...@@ -53,7 +52,5 @@ class DeepLinkService: ZapService(){ ...@@ -53,7 +52,5 @@ class DeepLinkService: ZapService(){
private fun jumpAuthorHomePage(params: JSONObject){ private fun jumpAuthorHomePage(params: JSONObject){
val fromId = params.optString("fromid") val fromId = params.optString("fromid")
val paramsMap = HashMap<String, Any?>() val paramsMap = HashMap<String, Any?>()
paramsMap[AuthorHomePageActivity.FromId] = fromId
XPageManager.push(XRouterPathConstants.AUTHOR_HOME_PAGE, paramsMap)
} }
} }
\ No newline at end of file
...@@ -2,17 +2,11 @@ package com.yidian.shenghuoquan.newscontent.service ...@@ -2,17 +2,11 @@ package com.yidian.shenghuoquan.newscontent.service
import android.graphics.Bitmap import android.graphics.Bitmap
import com.google.gson.Gson import com.google.gson.Gson
import com.orhanobut.hawk.Hawk
import com.yidian.common.AppConfig
import com.yidian.common.HawkConfig
import com.yidian.common.YdBaseApplication import com.yidian.common.YdBaseApplication
import com.yidian.common.http.HttpResult import com.yidian.common.http.HttpResult
import com.yidian.common.http.URLs
import com.yidian.common.utils.ToolsUtil
import com.yidian.shenghuoquan.newscontent.http.ApiService import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.httpbean.* import com.yidian.shenghuoquan.newscontent.http.httpbean.IUploadFileCallback
import com.yidian.shenghuoquan.newscontent.subscription.subscriptionManager import com.yidian.shenghuoquan.newscontent.http.httpbean.IUserInfoCallback
import com.yidian.shenghuoquan.newscontent.utils.AccountUtil
import com.yidian.shenghuoquan.newscontent.utils.UploadFileUtils import com.yidian.shenghuoquan.newscontent.utils.UploadFileUtils
import com.yidian.xarc.xrouter.ResultResolver import com.yidian.xarc.xrouter.ResultResolver
import com.yidian.yac.core.zap.ZapService import com.yidian.yac.core.zap.ZapService
...@@ -61,37 +55,6 @@ class RequestService : ZapService() { ...@@ -61,37 +55,6 @@ class RequestService : ZapService() {
} }
private val guestLoginImpl = object : IGuestLoginCallback {
override fun guestLoginCallBack(t: HttpResult<GuestLoginBean.Response?>?) {
if (t?.code == 0) {
val loginBean = t.result
Hawk.put(HawkConfig.GuestAccountUsername, loginBean?.username)
Hawk.put(HawkConfig.Username, loginBean?.username)
Hawk.put(HawkConfig.Nickname, loginBean?.nickname)
Hawk.put(HawkConfig.ProfileUrl, loginBean?.profile_url)
}
}
}
private fun guestLogin() {
val username = AccountUtil.getGuestUsername()
val password = AccountUtil.getPassword(username)
val tok = AccountUtil.getToken(username, password)
val requestBean = GuestLoginBean.Request(username, password, tok)
ApiService.guestLogin(guestLoginImpl, requestBean)
}
private val videoContentImpl = object : IVideoContentCallback {
override fun videoContentDetailCallback(t: HttpResult<MutableList<VideoContentDetailBean>?>?) {
}
override fun videoCommentCallback(t: HttpResult<Any?>?) {
val params = Gson().toJson(t)
resolver.success(JSONObject(params))
}
}
private val userInfoImpl = object : IUserInfoCallback { private val userInfoImpl = object : IUserInfoCallback {
override fun userInfoCallback(t: HttpResult<Any?>?) { override fun userInfoCallback(t: HttpResult<Any?>?) {
val params = Gson().toJson(t) val params = Gson().toJson(t)
...@@ -104,64 +67,44 @@ class RequestService : ZapService() { ...@@ -104,64 +67,44 @@ class RequestService : ZapService() {
} }
} }
private val likeCommentImpl = object : GeneralCallback {
override fun generalCallback(t: HttpResult<LikeCommentBean.Response?>?) {
val params = Gson().toJson(t)
resolver.success(JSONObject(params))
}
}
private val subscribeImpl = object : ISubscribeCallback {
override fun addSubscribeCallBack(t: HttpResult<Any?>?, bean: AuthorBean?) {
val params = Gson().toJson(t)
resolver.success(JSONObject(params))
}
override fun deleteCallBack(t: HttpResult<Any?>?, bean: AuthorBean?) {
val params = Gson().toJson(t)
resolver.success(JSONObject(params))
}
}
private fun requestApi(path: String, params: JSONObject) { private fun requestApi(path: String, params: JSONObject) {
when (path) { // when (path) {
URLs.videoCommentList -> { // URLs.videoCommentList -> {
val docId = params.optString("docid") // val docId = params.optString("docid")
val pageSize = params.optInt("page_size") // val pageSize = params.optInt("page_size")
val page = params.optInt("page") // val page = params.optInt("page")
val videoCommentRequest = VideoCommentBean.Request(docId, pageSize, page) // val videoCommentRequest = VideoCommentBean.Request(docId, pageSize, page)
ApiService.videoCommentList(videoContentImpl, videoCommentRequest) // ApiService.videoCommentList(videoContentImpl, videoCommentRequest)
} // }
URLs.userInfo -> { // URLs.userInfo -> {
ApiService.userInfo(userInfoImpl) // ApiService.userInfo(userInfoImpl)
} // }
URLs.modifyNickname -> { // URLs.modifyNickname -> {
val nickname = params.optString("nickname") // val nickname = params.optString("nickname")
val requestMap = HashMap<String, String>() // val requestMap = HashMap<String, String>()
requestMap["nickname"] = nickname // requestMap["nickname"] = nickname
ApiService.modifyNickname(userInfoImpl, requestMap) // ApiService.modifyNickname(userInfoImpl, requestMap)
} // }
URLs.likeComment -> { // URLs.likeComment -> {
val docId = params.optString("docid") // val docId = params.optString("docid")
val commentId = params.optString("comment_id") // val commentId = params.optString("comment_id")
val status = params.optInt("status") // val status = params.optInt("status")
val likeRequest = LikeCommentBean.Request(docId, commentId, status) // val likeRequest = LikeCommentBean.Request(docId, commentId, status)
ApiService.likeComment(likeCommentImpl, likeRequest) // ApiService.likeComment(likeCommentImpl, likeRequest)
} // }
URLs.addSubscribe -> { // URLs.addSubscribe -> {
val type = params.optInt("type") // val type = params.optInt("type")
val subscribeId = params.optString("subscribe_id") // val subscribeId = params.optString("subscribe_id")
val subscribeBean = AddSubscribeBean.Request(type, subscribeId) // val subscribeBean = AddSubscribeBean.Request(type, subscribeId)
ApiService.addSubscribe(subscribeImpl, subscribeBean) // ApiService.addSubscribe(subscribeImpl, subscribeBean)
} // }
URLs.deleteSubscribe -> { // URLs.deleteSubscribe -> {
val type = params.optInt("type") // val type = params.optInt("type")
val subscribeIds = params.optString("subscribe_ids") // val subscribeIds = params.optString("subscribe_ids")
val subscribeBean = DeleteSubscribeBean.Request(type, subscribeIds) // val subscribeBean = DeleteSubscribeBean.Request(type, subscribeIds)
ApiService.deleteSubscribe(subscribeImpl, subscribeBean) // ApiService.deleteSubscribe(subscribeImpl, subscribeBean)
} // }
} // }
} }
private val uploadFileCallback = object : IUploadFileCallback { private val uploadFileCallback = object : IUploadFileCallback {
......
package com.yidian.shenghuoquan.newscontent.subscription
interface AuthorSubscription<T> {
/**
* 作者订阅
*/
fun subscribeAuthor(bean:T){}
/**
* 取消订阅
*/
fun unsubscribeAuthor(bean:T){}
fun updateSubscribeStatus(bean:T)
fun needUpdateSubscribeStatus(bean:T):Boolean
fun getAuthorBean():T?
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.subscription
import com.google.gson.Gson
import com.yidian.common.YdBaseApplication
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.common.http.HttpResult
import com.yidian.common.utils.YdToastUtil
import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.httpbean.*
import java.util.*
val subscriptionManager: SubscriptionManager by lazy { SubscriptionManager.instance }
class SubscriptionManager private constructor() {
companion object {
val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { SubscriptionManager() }
private const val STATUS_DEFAULT = 0
private const val STATUS_LOADING = 1
private const val STATUS_FAILED = 2
private const val STATUS_SUCCESS = 3
}
private val authorSubscriptionList: ArrayList<AuthorSubscription<AuthorBean>> by lazy { ArrayList<AuthorSubscription<AuthorBean>>() }
private val authorBeanList = LinkedList<AuthorBean>()
private var needUpdateListEveryTime = false
private var currentStatus = STATUS_DEFAULT
private val subCallback = object : ISubscribeCallback {
override fun addSubscribeCallBack(t: HttpResult<Any?>?, bean: AuthorBean?) {
if (t?.code == 0) {
//订阅成功
getAuthorSubscribedList(true, bean)
}
}
override fun deleteCallBack(t: HttpResult<Any?>?, bean: AuthorBean?) {
if (t?.code == 0) {
//取消订阅成功
getAuthorSubscribedList(false, bean)
}
}
}
fun initAuthorSubscribeList() {
getAuthorSubscribedListFromNet()
}
fun addAuthorSubscription(authorSubscription: AuthorSubscription<AuthorBean>) {
if (authorSubscriptionList.contains(authorSubscription)) return
authorSubscriptionList.add(authorSubscription)
val authorBean = authorSubscription.getAuthorBean() ?: return
val target = authorBeanList.find { authorBean.wm_id == it.wm_id }
?: AuthorBean(wm_id = authorBean.wm_id)
val needUpdateSubscribeStatus =authorSubscription.needUpdateSubscribeStatus(target)
if (needUpdateSubscribeStatus) {
authorSubscription.updateSubscribeStatus(target)
}
}
fun removeAuthorSubscription(authorSubscription: AuthorSubscription<*>) {
authorSubscriptionList.remove(authorSubscription)
}
fun getAuthorSubscribedList(isSubscribe: Boolean, bean: AuthorBean?) {
//是否有多端登录的情况,暂时先维护本地列表来处理
if (needUpdateListEveryTime) {
getAuthorSubscribedListFromNet()
} else {
getAuthorSubscribedListFromLocal(isSubscribe, bean)
}
}
fun getAuthorSubscribedListFromLocal(subscribe: Boolean, bean: AuthorBean?) {
if (bean == null || bean.wm_id.isNullOrEmpty()) return
if (subscribe) {
val newBean = bean.clone().also { it.is_subscribed = true }
authorBeanList.add(newBean)
YdToastUtil.showToast(YdBaseApplication.context,"感谢您的订阅!", bean.image ?:"")
} else {
val target = authorBeanList.find { it.wm_id == bean.wm_id } ?: return
authorBeanList.remove(target)
}
updateSubscribeStatus()
}
private fun updateSubscribeStatus() {
authorSubscriptionList.forEach { authorSubscriber ->
val authorBean = authorSubscriber.getAuthorBean() ?: return@forEach
val target = authorBeanList.find { authorBean.wm_id == it.wm_id }
?: AuthorBean(wm_id = authorBean.wm_id,image = authorBean.image)
val needUpdateSubscribeStatus =
authorSubscriber.needUpdateSubscribeStatus(target)
if (needUpdateSubscribeStatus) {
authorSubscriber.updateSubscribeStatus(target)
}
}
}
private val subscribeAuthorListCallbackImpl = object : ISubscribeAuthorListCallback {
override fun subscribeAuthorFlowCallback(t: HttpResult<ArrayList<PolymerCommonCardBean>?>?) {
currentStatus =if (t?.code == 0) STATUS_SUCCESS else STATUS_FAILED
val dataList = t?.result
dataList?.size?.let { size ->
val gson = Gson()
authorBeanList.clear()
repeat(size) {
val content = dataList[it].card_list?.get(0)?.content as Map<*, *>? ?: return@repeat
val jsonString = gson.toJson(content)
val authorBean = gson.fromJson<AuthorBean>(jsonString, AuthorBean::class.java)
authorBeanList.add(authorBean)
}
}
updateSubscribeStatus()
}
}
private fun getAuthorSubscribedListFromNet() {
val requestParams = SubscribeAuthorFlowBean.Request("10", 1, 1000)
ApiService.getSubscribeAuthorList(subscribeAuthorListCallbackImpl, requestParams)
}
fun findAuthor(authorId: String): AuthorBean? {
if (authorBeanList.isNotEmpty()) return authorBeanList.find { it.wm_id == authorId}
when(currentStatus){
STATUS_DEFAULT , STATUS_FAILED ->{
currentStatus = STATUS_LOADING
getAuthorSubscribedListFromNet()
}
}
return null
}
fun findAuthor(bean: AuthorBean?): AuthorBean? {
if (authorBeanList.isNotEmpty()) return authorBeanList.find {
it.wm_id == bean?.wm_id
}
when(currentStatus){
STATUS_DEFAULT , STATUS_FAILED ->{
currentStatus = STATUS_LOADING
getAuthorSubscribedListFromNet()
}
}
return null
}
fun subscribeAuthor(bean: AuthorBean) {
//发起订阅 同一多次订阅处理
ApiService.addSubscribe(subCallback, AddSubscribeBean.Request(10, bean.wm_id?:""),bean)
}
fun unsubscribeAuthor(bean: AuthorBean) {
//取消订阅 同一多次取消订阅处理
ApiService.deleteSubscribe(subCallback, DeleteSubscribeBean.Request(10, bean.wm_id?:""),bean)
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.thumbUp
interface DocThumbUp<T> {
/**
* 点赞
*/
fun thumbUpDoc(docId:String){}
/**
* 取消点赞
*/
fun unThumbUpDoc(docId:String){}
fun updateThumbUpStatus(bean:T)
fun needUpdateThumbUpStatus(bean:T):Boolean
fun getThumbUpBean(): T?
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.thumbUp
import com.yidian.common.cardutils.PolymerCardFactory
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
import com.yidian.shenghuoquan.newscontent.bean.ThumbUpBean
import com.yidian.shenghuoquan.newscontent.http.ApiService
import java.util.*
val thumbUpManager by lazy { ThumbUpManager.instance }
class ThumbUpManager private constructor() {
companion object {
val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { ThumbUpManager() }
}
private val thumbUpBeanList by lazy { LinkedList<ThumbUpBean>() }
private val thumbUpDocList by lazy { LinkedList<DocThumbUp<ThumbUpBean>>() }
fun updateUpManage(dataList: ArrayList<PolymerCommonCardBean>){
for(polymerCommonCardBean in dataList){
if(polymerCommonCardBean.aggregation_card_type_id == PolymerCardFactory.CommonPolymerCard){
val cardList = polymerCommonCardBean.card_list
if(cardList != null){
val upStatusList = ArrayList<ThumbUpBean>()
for(commonCardBean in cardList){
when(commonCardBean.card_type_id){
in 300001..300005 -> {
val content = commonCardBean.content as Map<*, *>
val docId = content["docid"] as String
val isUp = content["is_thumbsup"] as Boolean
val tempUpCount = content["origin_up"] as Number
val upCount = tempUpCount.toInt()
upStatusList.add(ThumbUpBean(docId, isUp, upCount))
}
}
}
if(upStatusList.isNotEmpty()){
updateThumbUpBeanIfChange(upStatusList)
}
}
}
}
}
/**
* 单条数据更新
*/
fun updateThumbUpBeanIfChange(source: ThumbUpBean){
if(thumbUpBeanList.isEmpty()) return
val target = thumbUpBeanList.find { source.docId == it.docId } ?:return
if (target.dataEquals(source)) return
target.copyData(source)
updateThumbUpStatus()
}
/**
* 数据列表更新
*/
fun updateThumbUpBeanIfChange(sourceList: List<ThumbUpBean>){
if(thumbUpBeanList.isEmpty()) return
sourceList.forEach { bean->
val target = thumbUpBeanList.find { bean.docId == it.docId } ?:return@forEach
if (target.dataEquals(bean)) return@forEach
target.copyData(bean)
}
updateThumbUpStatus()
}
/**
* 点赞数据更新
*/
fun updateThumbUpBeanIfChange(docId: String?,isUp: Boolean,count: Int){
if(thumbUpBeanList.isEmpty()) return
if (docId.isNullOrEmpty()) return
val target = thumbUpBeanList.find { docId == it.docId } ?:return
if (target.isUp == isUp && target.count == count) return
target.isUp = isUp
target.count = count
updateThumbUpStatus()
}
private fun updateOrAddThumbUpBean(bean: ThumbUpBean) {
if (thumbUpBeanList.isEmpty()) {
thumbUpBeanList.add(bean)
updateThumbUpStatus()
return
}
val find = thumbUpBeanList.find { bean.docId == it.docId }
if (find == null) {
thumbUpBeanList.add(bean)
updateThumbUpStatus()
return
}
find.copyData(bean)
updateThumbUpStatus()
}
fun addThumbUpDoc(thumbUpDoc: DocThumbUp<ThumbUpBean>) {
if (thumbUpDocList.contains(thumbUpDoc)) return
thumbUpDocList.add(thumbUpDoc)
updateThumbUpStatus(thumbUpDoc)
}
fun removeThumbUpDoc(thumbUpDoc: DocThumbUp<ThumbUpBean>) {
thumbUpDocList.remove(thumbUpDoc)
}
private fun updateThumbUpStatus() {
thumbUpDocList.forEach { thumbUpDoc ->
updateThumbUpStatus(thumbUpDoc)
}
}
private fun updateThumbUpStatus(thumbUpDoc: DocThumbUp<ThumbUpBean>) {
val bean = thumbUpDoc.getThumbUpBean() ?: return
val target =thumbUpBeanList.find { bean.docId == it.docId } ?: return
val needUpdateThumbUpStatus = thumbUpDoc.needUpdateThumbUpStatus(target)
if (needUpdateThumbUpStatus) {
thumbUpDoc.updateThumbUpStatus(target)
}
}
fun thumbUpDoc(docId: String, count: Int) {
val requestMap = hashMapOf(Pair("docid", docId))
ApiService.articleLike(requestMap) {
val realCount = if (it) count + 1 else count
updateOrAddThumbUpBean(ThumbUpBean(docId, it, realCount))
}
}
fun cancelThumbUpDoc(docId: String, count: Int) {
val requestMap = hashMapOf(Pair("docid", docId))
ApiService.articleLike(requestMap) {
val realCount = if (it) {
if ((count - 1) < 0) 0 else count - 1
} else count
updateOrAddThumbUpBean(ThumbUpBean(docId, !it, realCount))
}
}
fun findThumbUpBean(temp: ThumbUpBean): ThumbUpBean? {
if (temp.docId.isNullOrEmpty()) return null
return thumbUpBeanList.find { temp.docId == it.docId }
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.ui
import androidx.viewbinding.ViewBinding
import com.yidian.common.base.BaseFragment
abstract class AChannelFragment<VB:ViewBinding> :BaseFragment<VB>() {
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.ui
import android.os.Bundle
import com.yidian.common.XRouterPathConstants.Companion.AUDIO_DETAIL
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.databinding.ActivityAudioDetailBinding
import com.yidian.shenghuoquan.newscontent.utils.audioManager
class AudioDetailActivity :BaseActivity<ActivityAudioDetailBinding>(){
private val audioList:MutableList<String> by lazy {
val list = mutableListOf<String>()
val url1 = "http://m801.music.126.net/20210128192529/c5d3a950d5b14f6afc5b15f1491e0a05/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/7136640173/99bd/5b7a/f5d9/a4a150f41f59153eeb55a7126928ce45.mp3"
val url2 ="http://m801.music.126.net/20210128192553/390f7d5a2ac348b727449db82cb2f44f/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/7119541036/6294/e1d1/dd59/862ba690be88fed2c34fd0886171f6f0.mp3"
val url3 ="http://m801.music.126.net/20210128194736/52de12d5a13e707273745c151ce5d084/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/5258591663/61bf/33cf/e6a5/da47602351f7f71aea8c1e88de587411.mp3"
repeat(30){
when(it%3){
0->list.add(url1)
1->list.add(url2)
2->list.add(url3)
}
}
list
}
override fun createViewBinding(): ActivityAudioDetailBinding {
return ActivityAudioDetailBinding.inflate(layoutInflater)
}
override fun getXPageName(): String {
return AUDIO_DETAIL
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
audioManager.setAudioList(audioList)
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.ui
import com.yidian.common.base.IBaseView
import com.yidian.common.cardutils.bean.PolymerCommonCardBean
interface ChannelView :IBaseView{
fun showData(dataList:List<PolymerCommonCardBean>)
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.ui
import android.os.Bundle
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.databinding.ActivityCommonDetailBinding
class CommonDetailActivity : BaseActivity<ActivityCommonDetailBinding>() {
companion object{
}
override fun createViewBinding(): ActivityCommonDetailBinding {
return ActivityCommonDetailBinding.inflate(layoutInflater)
}
override fun getXPageName(): String {
return ""
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
setStatusBarTextColor(true)
}
}
\ No newline at end of file
...@@ -42,10 +42,6 @@ class NewsContentActivity : BaseActivity<ActivityNewsContentBinding>() { ...@@ -42,10 +42,6 @@ class NewsContentActivity : BaseActivity<ActivityNewsContentBinding>() {
val commentFragment = CommentWebFragment.newInstance(paramsMap) val commentFragment = CommentWebFragment.newInstance(paramsMap)
supportFragmentManager.beginTransaction().replace(R.id.fly_webContainer, commentFragment).commit() supportFragmentManager.beginTransaction().replace(R.id.fly_webContainer, commentFragment).commit()
} }
VideoType -> {
val videoDetailFragment = VideoDetailFragment.newInstance(paramsMap)
supportFragmentManager.beginTransaction().replace(R.id.fly_webContainer, videoDetailFragment).commit()
}
} }
} }
......
This diff is collapsed.
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