Commit 4198c514 authored by jyx's avatar jyx

代码优化

parent 4b851896
...@@ -36,6 +36,8 @@ android { ...@@ -36,6 +36,8 @@ android {
} }
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
...@@ -175,8 +177,6 @@ dependencies { ...@@ -175,8 +177,6 @@ dependencies {
// 工具类 // 工具类
// gson // gson
// implementation files('libs/gson-2.3.1.jar')
implementation 'com.google.code.gson:gson:2.8.1' implementation 'com.google.code.gson:gson:2.8.1'
// BASE64Decoder // BASE64Decoder
// implementation files('libs/sun.misc.BASE64Decoder.jar') // implementation files('libs/sun.misc.BASE64Decoder.jar')
...@@ -254,8 +254,6 @@ dependencies { ...@@ -254,8 +254,6 @@ dependencies {
implementation 'com.just.agentweb:agentweb:4.1.2' implementation 'com.just.agentweb:agentweb:4.1.2'
// 喜马拉雅 已集成 // 喜马拉雅 已集成
// testImplementation 'junit:junit:4.13' // testImplementation 'junit:junit:4.13'
// androidTestImplementation 'androidx.test.ext:junit:1.1.2' // androidTestImplementation 'androidx.test.ext:junit:1.1.2'
// androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' // androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
android:name="com.mints.goodmoney.permission.JPUSH_MESSAGE" android:name="com.mints.goodmoney.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" /> android:protectionLevel="signature" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="com.mints.goodmoney.permission.JPUSH_MESSAGE" /> <uses-permission android:name="com.mints.goodmoney.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
...@@ -49,6 +51,14 @@ ...@@ -49,6 +51,14 @@
android:name="org.apache.http.legacy" android:name="org.apache.http.legacy"
android:required="false" /> android:required="false" />
<meta-data
android:name="app_key"
android:value="ff71a11162f20808f9f349452dd9e141" />
<meta-data
android:name="pack_id"
android:value="com.mints.goodmoney" />
<!-- 适配小米(xiaomi)刘海屏 --> <!-- 适配小米(xiaomi)刘海屏 -->
<meta-data <meta-data
android:name="android.max_aspect" android:name="android.max_aspect"
...@@ -197,10 +207,8 @@ ...@@ -197,10 +207,8 @@
android:name=".ui.activitys.XmlyAwardActivity" android:name=".ui.activitys.XmlyAwardActivity"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activitys.XmlyActivity" android:name=".ui.activitys.XmlyPlayActivity"
android:screenOrientation="portrait"> android:screenOrientation="portrait" />
</activity>
<service <service
android:name=".service.UpdateService" android:name=".service.UpdateService"
...@@ -217,7 +225,6 @@ ...@@ -217,7 +225,6 @@
android:exported="true" android:exported="true"
android:process=":player" /> android:process=":player" />
<!-- JPUSH 用户自定义的广播接收器 --> <!-- JPUSH 用户自定义的广播接收器 -->
<receiver <receiver
android:name="com.mints.goodmoney.service.JpushReceiver" android:name="com.mints.goodmoney.service.JpushReceiver"
......
...@@ -79,15 +79,6 @@ class InitAppService : IntentService("InitializeService") { ...@@ -79,15 +79,6 @@ class InitAppService : IntentService("InitializeService") {
// 变现猫 // 变现猫
initBxm(this.application) initBxm(this.application)
// // 喜马拉雅
// val mXimalaya = CommonRequest.getInstanse()
// val mAppSecret = "db3cb9e3ec5943f4987e78ddc5aec728"
// val mAppKey = "ff71a11162f20808f9f349452dd9e141"
// mXimalaya.setAppkey(mAppKey)
// mXimalaya.setPackid("com.mints.goodmoney")
// mXimalaya.init(this, mAppSecret)
// ConstantsOpenSdk.isDebug = true
} }
/** /**
......
...@@ -8,7 +8,6 @@ import android.text.TextUtils; ...@@ -8,7 +8,6 @@ import android.text.TextUtils;
import android.webkit.WebView; import android.webkit.WebView;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.multidex.MultiDex;
import androidx.multidex.MultiDexApplication; import androidx.multidex.MultiDexApplication;
import com.bun.miitmdid.core.JLibrary; import com.bun.miitmdid.core.JLibrary;
...@@ -30,6 +29,7 @@ import com.ximalaya.ting.android.opensdk.constants.ConstantsOpenSdk; ...@@ -30,6 +29,7 @@ import com.ximalaya.ting.android.opensdk.constants.ConstantsOpenSdk;
import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest; import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest;
import com.ximalaya.ting.android.opensdk.player.service.XmPlayerConfig; import com.ximalaya.ting.android.opensdk.player.service.XmPlayerConfig;
import com.ximalaya.ting.android.opensdk.util.BaseUtil; import com.ximalaya.ting.android.opensdk.util.BaseUtil;
import com.ximalaya.ting.android.player.XMediaPlayerConstants;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
...@@ -62,6 +62,22 @@ public class MintsApplication extends MultiDexApplication { ...@@ -62,6 +62,22 @@ public class MintsApplication extends MultiDexApplication {
// 判断应用是否在前台 // 判断应用是否在前台
ForegroundOrBackground.init(this); ForegroundOrBackground.init(this);
ConstantsOpenSdk.isDebug = true;
XMediaPlayerConstants.isDebug = true;
XmPlayerConfig.getInstance(this).setDefualtNotificationNickNameAndInfo("开心麻花", "开心开心,无敌开心");
if (BaseUtil.isMainProcess(this)) {
// 喜马拉雅
CommonRequest instanse = CommonRequest.getInstanse();
String mAppSecret = "db3cb9e3ec5943f4987e78ddc5aec728";
String mAppKey = "ff71a11162f20808f9f349452dd9e141";
instanse.setAppkey(mAppKey);
instanse.setAppsecret(mAppSecret);
instanse.setPackid("com.mints.goodmoney");
instanse.setUseHttps(false);
instanse.init(this, mAppSecret);
}
// 三方配置 // 三方配置
thirdConfig(); thirdConfig();
} }
...@@ -145,7 +161,7 @@ public class MintsApplication extends MultiDexApplication { ...@@ -145,7 +161,7 @@ public class MintsApplication extends MultiDexApplication {
RsNewsManager.INSTANCE.initX5Environment(this); RsNewsManager.INSTANCE.initX5Environment(this);
// 喜马拉雅 // 喜马拉雅
initXmly(); // initXmly();
} }
private void initXmly() { private void initXmly() {
......
package com.mints.goodmoney.ui.activitys
import android.util.Log
import android.view.View
import android.widget.Toast
import com.fly.scenemodule.util.GsonUtils
import com.mints.goodmoney.R
import com.mints.goodmoney.ui.activitys.base.BaseActivity
import com.mints.goodmoney.utils.LogUtil
import com.ximalaya.ting.android.opensdk.constants.DTransferConstants
import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest
import com.ximalaya.ting.android.opensdk.datatrasfer.IDataCallBack
import com.ximalaya.ting.android.opensdk.model.PlayableModel
import com.ximalaya.ting.android.opensdk.model.advertis.Advertis
import com.ximalaya.ting.android.opensdk.model.advertis.AdvertisList
import com.ximalaya.ting.android.opensdk.model.album.AlbumList
import com.ximalaya.ting.android.opensdk.model.category.CategoryList
import com.ximalaya.ting.android.opensdk.model.live.radio.Radio
import com.ximalaya.ting.android.opensdk.model.live.schedule.Schedule
import com.ximalaya.ting.android.opensdk.model.track.Track
import com.ximalaya.ting.android.opensdk.model.track.TrackList
import com.ximalaya.ting.android.opensdk.player.XmPlayerManager
import com.ximalaya.ting.android.opensdk.player.advertis.IXmAdsStatusListener
import com.ximalaya.ting.android.opensdk.player.appnotification.XmNotificationCreater
import com.ximalaya.ting.android.opensdk.player.service.IXmPlayerStatusListener
import com.ximalaya.ting.android.opensdk.player.service.XmPlayListControl
import com.ximalaya.ting.android.opensdk.player.service.XmPlayerException
import kotlinx.android.synthetic.main.activity_xmly_test.*
import kotlinx.android.synthetic.main.header_layout.*
/**
* 描述:关于我们
* 作者:孟崔广
* 时间:2020/9/23 18:39
*/
class XmlyActivity : BaseActivity(), View.OnClickListener {
private val TAG = XmlyActivity::class.java.simpleName
private val json = "{\"album_id\":4519297,\"album_intro\":\"最全最快最省时,热点新闻早知道\",\"album_title\":\"新闻早餐\",\"can_download\":true,\"category_id\":1,\"cover_url_large\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d5\\u0026upload_type\\u003dalbum\\u0026device_type\\u003dios\\u0026name\\u003dmobile_large\\u0026magick\\u003dpng\",\"cover_url_middle\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d5\\u0026upload_type\\u003dalbum\\u0026device_type\\u003dios\\u0026name\\u003dmedium\\u0026magick\\u003dpng\",\"cover_url_small\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d5\\u0026upload_type\\u003dalbum\\u0026device_type\\u003dios\\u0026name\\u003dmobile_small\\u0026magick\\u003dpng\",\"current_page\":1,\"params\":{\"count\":\"110\",\"total_page\":\"16\",\"album_id\":\"4519297\",\"page\":\"1\",\"track_base_url\":\"http://api.ximalaya.com/openapi-gateway-app/albums/browse\"},\"total_count\":1690,\"total_page\":16,\"tracks\":[{\"subordinated_album\":{\"id\":4519297,\"album_title\":\"新闻早餐\",\"cover_url_large\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d5\\u0026upload_type\\u003dalbum\\u0026device_type\\u003dios\\u0026name\\u003dmobile_large\\u0026magick\\u003dpng\",\"cover_url_middle\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d5\\u0026upload_type\\u003dalbum\\u0026device_type\\u003dios\\u0026name\\u003dmedium\\u0026magick\\u003dpng\",\"cover_url_small\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d5\\u0026upload_type\\u003dalbum\\u0026device_type\\u003dios\\u0026name\\u003dmobile_small\\u0026magick\\u003dpng\",\"serializeStatus\":0,\"uptoDateTime\":0},\"announcer\":{\"anchorGrade\":0,\"id\":52622741,\"avatar_url\":\"https://imgopen.xmcdn.com/group20/M05/19/EA/wKgJJ1eDW1_QCA5MAABNXnIlT3I433.png!op_type\\u003d3\\u0026columns\\u003d110\\u0026rows\\u003d110\",\"follower_count\":0,\"following_count\":0,\"kind\":\"user\",\"nickname\":\"东方网\",\"released_album_count\":0,\"released_track_count\":0,\"vcategory_id\":0,\"is_verified\":true,\"verifyType\":0},\"authorized\":false,\"blockIndex\":0,\"blockNum\":0,\"business_type\":0,\"can_download\":true,\"category_id\":1,\"channelId\":0,\"chargeFileSize\":0,\"comment_count\":50,\"cover_url_large\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d3\\u0026columns\\u003d640\\u0026rows\\u003d640\",\"cover_url_middle\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d3\\u0026columns\\u003d180\\u0026rows\\u003d180\",\"cover_url_small\":\"https://imgopen.xmcdn.com/group18/M01/19/DE/wKgJKleDXj2QJYOuAAFbNixU8BI237.png!op_type\\u003d3\\u0026columns\\u003d100\\u0026rows\\u003d100\",\"created_at\":1608589201000,\"discountedPrice\":0.0,\"download_count\":0,\"downloadCreated\":0,\"download_size\":1556152,\"downloadStatus\":-2,\"downloadTime\":0,\"download_url\":\"https://aod.cos.tx.xmcdn.com/storages/bd75-audiofreehighqps/CA/1F/CMCoOR8DtpvoABe-uABzoyHy.m4a\",\"downloadedSize\":0,\"duration\":501,\"extraa\":false,\"favorite_count\":215,\"is_free\":false,\"hasCopyRight\":true,\"has_sample\":false,\"insertSequence\":0,\"isAutoPaused\":false,\"isChecked\":false,\"isLike\":false,\"is_paid\":false,\"is_trailer\":false,\"isVideo\":false,\"liveRoomId\":0,\"order_num\":0,\"orderPositionInAlbum\":0,\"orderPositon\":-1,\"play_count\":154050,\"play_size_24_m4a\":\"1556152\",\"play_size_32\":2441525,\"play_size_64\":4451177,\"play_size_64_m4a\":\"4069015\",\"play_size_amr\":452166,\"play_source\":0,\"play_url_24_m4a\":\"\",\"play_url_32\":\"\",\"play_url_64\":\"\",\"play_url_64_m4a\":\"\",\"play_url_amr\":\"\",\"price\":0.0,\"priceTypeEnum\":0,\"priceTypeId\":0,\"programId\":0,\"protocolVersion\":0,\"radioId\":0,\"sample_duration\":0,\"scheduleId\":0,\"source\":1,\"templateId\":0,\"timeline\":0,\"topic_id\":0,\"trackActivityId\":0,\"track_intro\":\"\",\"trackStatus\":-1,\"track_tags\":\"\",\"track_title\":\"港媒:被通缉的罗冠聪宣称决定向英国政府申请“政治庇护” | 新闻早餐 2020.12.22\",\"type\":0,\"uid\":0,\"updateStatus\":false,\"updated_at\":1608589201000,\"vip_first_status\":\"0\",\"id\":367441649,\"isWeikeTrack\":false,\"kind\":\"track\",\"lastPlayedMills\":-1,\"weikeLessonId\":0,\"weikeRoomId\":0}]}"
private var mCategoryList: CategoryList? = null
private var mTrackList: TrackList? = null
private lateinit var mPlayerManager: XmPlayerManager
override fun getContentViewLayoutID() = R.layout.activity_xmly_test
override fun isApplyKitKatTranslucency() = false
override fun initViewsAndEvents() {
tv_title.text = "喜马拉雅测试"
iv_left_icon.visibility = View.VISIBLE
iv_left_icon.setImageResource(R.mipmap.ic_arrow_back)
mPlayerManager = XmPlayerManager.getInstance(this)
val mNotification = XmNotificationCreater.getInstanse(this).initNotification(this.applicationContext, XmlyActivity::class.java)
// 如果之前贵方使用了 `XmPlayerManager.init(int id, Notification notification)` 这个初始化的方式
// 请参考`4.8 播放器通知栏使用`重新添加新的通知栏布局,否则直接升级可能导致在部分手机播放时崩溃
// 如果不想使用sdk内部搞好的notification,或者想自建notification 可以使用下面的 init()函数进行初始化
mPlayerManager.init(System.currentTimeMillis().toInt(), mNotification)
// mPlayerManager.addPlayerStatusListener(mPlayerStatusListener)
// mPlayerManager.addAdsStatusListener(mAdsListener)
mPlayerManager.addOnConnectedListerner(object : XmPlayerManager.IConnectListener {
override fun onConnected() {
mPlayerManager.removeOnConnectedListerner(this)
mPlayerManager.setPlayMode(XmPlayListControl.PlayMode.PLAY_MODEL_LIST_LOOP)
Toast.makeText(this@XmlyActivity, "播放器初始化成功", Toast.LENGTH_SHORT).show()
}
})
initListener()
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.iv_left_icon -> finish()
R.id.btn1 -> {
val vo = hashMapOf<String, String>()
CommonRequest.getCategories(vo, object : IDataCallBack<CategoryList> {
override fun onSuccess(p0: CategoryList?) {
mCategoryList = p0
}
override fun onError(p0: Int, p1: String?) {
LogUtil.e(p1)
}
})
}
R.id.btn2 -> {
val vo = hashMapOf<String, String>()
vo[DTransferConstants.CATEGORY_ID] = "12"
vo[DTransferConstants.CALC_DIMENSION] = "1"
vo[DTransferConstants.PAGE] = "1"
vo["count"] = "10"
CommonRequest.getAlbumList(vo, object : IDataCallBack<AlbumList> {
override fun onSuccess(p0: AlbumList?) {
val toJson = GsonUtils.toJson(p0)
LogUtil.d(toJson)
}
override fun onError(p0: Int, p1: String?) {
LogUtil.e(p1)
}
})
}
R.id.btn3 -> {
val vo = hashMapOf<String, String>()
// vo[DTransferConstants.ALBUM_ID] = "4519297"
// vo[DTransferConstants.SORT] = "asc"
// vo[DTransferConstants.PAGE] = "1"
// vo["count"] = "200"
vo[DTransferConstants.ALBUM_ID] = "4519297"
vo[DTransferConstants.PAGE] = "1"
vo[DTransferConstants.PAGE_SIZE] = "200"
CommonRequest.getTracks(vo, object : IDataCallBack<TrackList> {
override fun onSuccess(p0: TrackList?) {
//// val toJson = GsonUtils.toJson(p0)
// val fromJson = GsonUtils.fromJson<TrackList>(json, TrackList::class.java)
// mTrackList = fromJson
//// LogUtil.d(toJson)
if (p0 != null && p0.getTracks() != null &&p0.getTracks().size != 0) {
if (mTrackList == null) {
mTrackList = p0
} else {
mTrackList?.getTracks()?.addAll(p0.getTracks())
}
}
println("MainFragmentActivity.mTrackList === $mTrackList")
}
override fun onError(p0: Int, p1: String?) {
LogUtil.e(p1)
}
})
}
R.id.btn4 -> {
mTrackList?.let {
mPlayerManager.playList(it.tracks, 0)
val playList = XmPlayerManager.getInstance(this).playList
LogUtil.d("MainFragmentActivity.onOptionsItemSelected === $playList")
}
}
R.id.btn5 -> {
// val track = Track()
//
// track.kind = PlayableModel.KIND_TRACK
// track.downloadedSaveFilePath = Environment.getExternalStorageDirectory().absolutePath + File.separator + "a.mp3"
// LogUtil.d("AAAAAAAAAA" + track.downloadedSaveFilePath)
// track.trackTitle = "a.mp3"
// track.dataId = (-1 * track.trackTitle.hashCode()).toLong()
// val tarcks = arrayListOf<Track>()
// tarcks.add(track)
if(mTrackList!=null&&mTrackList!!.tracks!=null){
mPlayerManager.playList(mTrackList!!.tracks, 1)
}
// val playList = XmPlayerManager.getInstance(mContext).playList
// println("MainFragmentActivity.onOptionsItemSelected === $playList")
}
}
}
private val mAdsListener: IXmAdsStatusListener = object : IXmAdsStatusListener {
override fun onStartPlayAds(ad: Advertis, position: Int) {
Log.i(TAG, "onStartPlayAds, Ad:" + ad.name + ", pos:" + position)
// if (ad != null) {
// x.image().bind(mSoundCover ,ad.getImageUrl());
// }
// mBtnPlay.setEnabled(true)
// mBtnPlay.setImageResource(R.drawable.widget_pause_normal)
}
override fun onStartGetAdsInfo() {
Log.i(TAG, "onStartGetAdsInfo")
// mBtnPlay.setEnabled(false)
// mSeekBar.setEnabled(false)
}
override fun onGetAdsInfo(ads: AdvertisList) {
Log.i(TAG, "onError what:${ads.msg}, extra:${ads.msg}")
}
override fun onError(what: Int, extra: Int) {
Log.i(TAG, "onError what:$what, extra:$extra")
}
override fun onCompletePlayAds() {
Log.i(TAG, "onCompletePlayAds")
// mBtnPlay.setEnabled(true)
// mSeekBar.setEnabled(true)
// val model = mPlayerManager.currSound
// if (model != null && model is Track) {
// x.image().bind(mSoundCover, model.coverUrlLarge)
// }
}
override fun onAdsStopBuffering() {
Log.i(TAG, "onAdsStopBuffering")
}
override fun onAdsStartBuffering() {
Log.i(TAG, "onAdsStartBuffering")
}
}
private val mPlayerStatusListener: IXmPlayerStatusListener = object : IXmPlayerStatusListener {
override fun onSoundPrepared() {
Log.i(TAG, "onSoundPrepared")
// mSeekBar.setEnabled(true)
// mProgress.setVisibility(View.GONE)
}
override fun onSoundSwitch(laModel: PlayableModel?, curModel: PlayableModel?) {
Log.i(TAG, "onSoundSwitch index:$curModel")
// val model = mPlayerManager.currSound
// if (model != null) {
// var title: String? = null
// var coverUrl: String? = null
// if (model is Track) {
// val info = model
// title = info.trackTitle
// coverUrl = info.coverUrlLarge
// } else if (model is Schedule) {
// val program = model
// title = program.relatedProgram.programName
// coverUrl = program.relatedProgram.backPicUrl
// } else if (model is Radio) {
// val radio = model
// title = radio.radioName
// coverUrl = radio.coverUrlLarge
// }
// mTextView.setText(title)
// x.image().bind(mSoundCover, coverUrl)
// }
// updateButtonStatus()
}
private fun updateButtonStatus() {
// if (mPlayerManager.hasPreSound()) {
// mBtnPreSound.setEnabled(true)
// } else {
// mBtnPreSound.setEnabled(false)
// }
// if (mPlayerManager.hasNextSound()) {
// mBtnNextSound.setEnabled(true)
// } else {
// mBtnNextSound.setEnabled(false)
// }
}
override fun onPlayStop() {
Log.i(TAG, "onPlayStop")
// mBtnPlay.setImageResource(R.drawable.widget_play_normal)
}
override fun onPlayStart() {
Log.i(TAG, "onPlayStart")
// mBtnPlay.setImageResource(R.drawable.widget_pause_normal)
}
override fun onPlayProgress(currPos: Int, duration: Int) {
var title: String? = ""
val info = mPlayerManager.currSound
if (info != null) {
if (info is Track) {
title = info.trackTitle
} else if (info is Schedule) {
title = info.relatedProgram.programName
} else if (info is Radio) {
title = info.radioName
}
}
// mTextView.setText(title)
// mTime.setText("[" + ToolUtil.formatTime(currPos).toString() + "/" + ToolUtil.formatTime(duration).toString() + "]")
// if (mUpdateProgress && duration != 0) {
// mSeekBar.setProgress((100 * currPos / duration.toFloat()).toInt())
// }
// if (info is Track) {
// println("MainFragmentActivity.onPlayProgress " + currPos + " " + duration + " " + info.duration)
// }
}
override fun onPlayPause() {
Log.i(TAG, "onPlayPause")
// mBtnPlay.setImageResource(R.drawable.widget_play_normal)
}
override fun onSoundPlayComplete() {
Log.i(TAG, "onSoundPlayComplete")
// Toast.makeText(this@MainFragmentActivity, "播放完成", Toast.LENGTH_SHORT).show()
// mBtnPlay.setImageResource(R.drawable.widget_play_normal)
}
override fun onError(exception: XmPlayerException): Boolean {
Log.i(TAG, "XmPlayerException = onError " + exception.message + " " + XmPlayerManager.getInstance(this@XmlyActivity).isPlaying)
// println("MainFragmentActivity.onError $exception")
// mBtnPlay.setImageResource(R.drawable.widget_play_normal)
// if (!NetworkType.isConnectTONetWork(mContext)) {
// Toast.makeText(this@MainFragmentActivity, "没有网络导致停止播放", Toast.LENGTH_SHORT).show()
// }
return false
}
override fun onBufferProgress(position: Int) {
// mSeekBar.setSecondaryProgress(position)
// println("MainFragmentActivity.onBufferProgress $position")
}
override fun onBufferingStart() {
Log.i(TAG, "onBufferingStart " + XmPlayerManager.getInstance(this@XmlyActivity).isPlaying)
// mSeekBar.setEnabled(false)
// mProgress.setVisibility(View.VISIBLE)
}
override fun onBufferingStop() {
Log.i(TAG, "onBufferingStop")
// mSeekBar.setEnabled(true)
// mProgress.setVisibility(View.GONE)
}
}
override fun onDestroy() {
if (mPlayerManager != null) {
mPlayerManager.removePlayerStatusListener(mPlayerStatusListener)
}
XmPlayerManager.release()
CommonRequest.release()
super.onDestroy()
}
private fun initListener() {
iv_left_icon.setOnClickListener(this)
btn1.setOnClickListener(this)
btn2.setOnClickListener(this)
btn3.setOnClickListener(this)
btn4.setOnClickListener(this)
btn5.setOnClickListener(this)
}
}
package com.mints.goodmoney.ui.activitys
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.mints.goodmoney.R
import com.mints.goodmoney.ui.activitys.base.BaseActivity
import com.mints.goodmoney.ui.adapter.XmlyPlayAdapter
import com.mints.goodmoney.utils.LogUtil
import com.mints.goodmoney.utils.ToolUtil
import com.mints.library.utils.GlideUtils
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener
import com.scwang.smartrefresh.layout.listener.OnRefreshListener
import com.ximalaya.ting.android.opensdk.constants.DTransferConstants
import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest
import com.ximalaya.ting.android.opensdk.datatrasfer.IDataCallBack
import com.ximalaya.ting.android.opensdk.model.PlayableModel
import com.ximalaya.ting.android.opensdk.model.advertis.Advertis
import com.ximalaya.ting.android.opensdk.model.advertis.AdvertisList
import com.ximalaya.ting.android.opensdk.model.live.radio.Radio
import com.ximalaya.ting.android.opensdk.model.live.schedule.Schedule
import com.ximalaya.ting.android.opensdk.model.track.Track
import com.ximalaya.ting.android.opensdk.model.track.TrackList
import com.ximalaya.ting.android.opensdk.player.XmPlayerManager
import com.ximalaya.ting.android.opensdk.player.XmPlayerManager.*
import com.ximalaya.ting.android.opensdk.player.advertis.IXmAdsStatusListener
import com.ximalaya.ting.android.opensdk.player.appnotification.XmNotificationCreater
import com.ximalaya.ting.android.opensdk.player.service.IXmPlayerStatusListener
import com.ximalaya.ting.android.opensdk.player.service.XmPlayListControl
import com.ximalaya.ting.android.opensdk.player.service.XmPlayerException
import com.ximalaya.ting.android.opensdk.util.NetworkType
import kotlinx.android.synthetic.main.activity_xmly_play.*
import kotlinx.android.synthetic.main.header_layout.*
/**
* 描述:关于我们
* 作者:孟崔广
* 时间:2020/9/23 18:39
*/
class XmlyPlayActivity : BaseActivity(), View.OnClickListener, XmlyPlayAdapter.OnItemClickListener, OnRefreshListener, OnLoadMoreListener {
private val TAG = XmlyPlayActivity::class.java.simpleName
private lateinit var mPlayerManager: XmPlayerManager
override fun getContentViewLayoutID() = R.layout.activity_xmly_play
override fun isApplyKitKatTranslucency() = false
private val mUpdateProgress = true
private lateinit var xmlyPlayAdapter: XmlyPlayAdapter
private var xmlyData: MutableList<Track> = mutableListOf()
private var mAlbumList: TrackList? = null
private var mAlbumId = 0L
// 分页
private var xmlyPage = 1
private val PAGE_SIZE = 10
companion object {
const val ALBUM_ID = "album_id"
}
override fun getBundleExtras(extras: Bundle) {
mAlbumId = extras.getLong(ALBUM_ID)
}
override fun initViewsAndEvents() {
tv_title.text = "专辑列表"
iv_left_icon.visibility = View.VISIBLE
iv_left_icon.setImageResource(R.mipmap.ic_arrow_back)
initRecyView()
initListener()
showLoading("加载中...")
mPlayerManager = getInstance(this)
val mNotification = XmNotificationCreater.getInstanse(this).initNotification(this.applicationContext, XmlyPlayActivity::class.java)
mPlayerManager.init(System.currentTimeMillis().toInt(), mNotification)
mPlayerManager.addPlayerStatusListener(mPlayerStatusListener)
// mPlayerManager.addAdsStatusListener(mAdsListener)
mPlayerManager.addOnConnectedListerner(object : IConnectListener {
override fun onConnected() {
hideLoading()
mPlayerManager.removeOnConnectedListerner(this)
mPlayerManager.playMode = XmPlayListControl.PlayMode.PLAY_MODEL_LIST_LOOP
Toast.makeText(this@XmlyPlayActivity, "播放器初始化成功", Toast.LENGTH_SHORT).show()
}
})
loadData()
}
private fun loadData() {
val vo = hashMapOf<String, String>()
// 专辑id
vo[DTransferConstants.ALBUM_ID] = mAlbumId.toString()
// 1-最火 2-最新 3-最多播放
vo[DTransferConstants.PAGE] = xmlyPage.toString()
vo[DTransferConstants.PAGE_SIZE] = PAGE_SIZE.toString()
CommonRequest.getTracks(vo, object : IDataCallBack<TrackList> {
override fun onSuccess(p0: TrackList?) {
if (p0 != null && p0.tracks != null && p0.tracks.size != 0) {
runOnUiThread {
if (xmlyPage == 1) {
tv_title.text = p0.albumTitle
GlideUtils.loadImageView(this@XmlyPlayActivity, p0.coverUrlMiddle, sound_cover)
}
mAlbumList = p0
getDataSuc(p0.tracks)
}
} else {
getDataFail()
}
}
override fun onError(p0: Int, p1: String?) {
LogUtil.e(p1)
getDataFail()
}
})
}
override fun onRefresh(refreshLayout: RefreshLayout) {
xmlyPage = 1
xmlyData.clear()
loadData()
}
override fun onLoadMore(refreshLayout: RefreshLayout) {
xmlyPage = ++xmlyPage
loadData()
}
/**
* 获取数据失败
*/
private fun getDataFail() {
srl_xmly.finishRefresh(false)
srl_xmly.finishLoadMore(false)
xmlyPage = if (xmlyPage == 1) 1 else xmlyPage - 1
}
/**
* 获取数据成功
*/
private fun getDataSuc(list: List<Track>) {
if (::xmlyPlayAdapter.isInitialized) {
xmlyData.addAll(list)
if (xmlyPage == 1) {
srl_xmly.finishRefresh(true)
xmlyPlayAdapter.notifyDataSetChanged()
} else {
if (list.size < PAGE_SIZE) {
srl_xmly.finishLoadMoreWithNoMoreData()
} else {
srl_xmly.finishLoadMore()
}
xmlyPlayAdapter.notifyItemChanged(list.size)
}
}
}
private fun initRecyView() {
val linearLayoutManager = LinearLayoutManager(context)
xmlyPageVip.layoutManager = linearLayoutManager
xmlyPageVip.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
xmlyPlayAdapter = XmlyPlayAdapter(xmlyData)
xmlyPageVip.adapter = xmlyPlayAdapter
xmlyPlayAdapter.setOnItemClickListener(this)
}
private val mPlayerStatusListener: IXmPlayerStatusListener = object : IXmPlayerStatusListener {
override fun onSoundPrepared() {
Log.i(TAG, "onSoundPrepared")
seek_bar.setEnabled(true)
buffering_progress.setVisibility(View.GONE)
}
override fun onSoundSwitch(laModel: PlayableModel, curModel: PlayableModel) {
Log.i(TAG, "onSoundSwitch index:$curModel")
val model = mPlayerManager.currSound
if (model != null) {
var title: String? = null
var coverUrl: String? = null
if (model is Track) {
val info = model
title = info.trackTitle
coverUrl = info.coverUrlLarge
} else if (model is Schedule) {
val program = model
title = program.relatedProgram.programName
coverUrl = program.relatedProgram.backPicUrl
} else if (model is Radio) {
val radio = model
title = radio.radioName
coverUrl = radio.coverUrlLarge
}
message.setText(title)
GlideUtils.loadImageView(this@XmlyPlayActivity, coverUrl, sound_cover)
}
// updateButtonStatus()
}
private fun updateButtonStatus() {
if (mPlayerManager.hasPreSound()) {
pre_sound.setEnabled(true)
} else {
pre_sound.setEnabled(false)
}
if (mPlayerManager.hasNextSound()) {
next_sound.setEnabled(true)
} else {
next_sound.setEnabled(false)
}
}
override fun onPlayStop() {
Log.i(TAG, "onPlayStop")
play_or_pause.setImageResource(R.mipmap.widget_play_normal)
}
override fun onPlayStart() {
Log.i(TAG, "onPlayStart")
play_or_pause.setImageResource(R.mipmap.widget_pause_normal)
}
override fun onPlayProgress(currPos: Int, duration: Int) {
var title: String? = ""
val info = mPlayerManager.currSound
if (info != null) {
if (info is Track) {
title = info.trackTitle
} else if (info is Schedule) {
title = info.relatedProgram.programName
} else if (info is Radio) {
title = info.radioName
}
}
message.text = title
time.text = "[" + ToolUtil.formatTime(currPos.toLong()).toString() + "/" + ToolUtil.formatTime(duration.toLong()).toString() + "]"
if (mUpdateProgress && duration != 0) {
seek_bar.progress = (100 * currPos / duration.toFloat()).toInt()
}
if (info is Track) {
println("MainFragmentActivity.onPlayProgress " + currPos + " " + duration + " " + info.duration)
}
}
override fun onPlayPause() {
Log.i(TAG, "onPlayPause")
play_or_pause.setImageResource(R.mipmap.widget_play_normal)
}
override fun onSoundPlayComplete() {
Log.i(TAG, "onSoundPlayComplete")
Toast.makeText(this@XmlyPlayActivity, "播放完成", Toast.LENGTH_SHORT).show()
play_or_pause.setImageResource(R.mipmap.widget_play_normal)
}
override fun onError(exception: XmPlayerException): Boolean {
Log.i(TAG, "XmPlayerException = onError " + exception.message + " " + getInstance(this@XmlyPlayActivity).isPlaying)
println("MainFragmentActivity.onError $exception")
play_or_pause.setImageResource(R.mipmap.widget_play_normal)
if (!NetworkType.isConnectTONetWork(mContext)) {
Toast.makeText(this@XmlyPlayActivity, "没有网络导致停止播放", Toast.LENGTH_SHORT).show()
}
return false
}
override fun onBufferProgress(position: Int) {
seek_bar.setSecondaryProgress(position)
println("MainFragmentActivity.onBufferProgress $position")
}
override fun onBufferingStart() {
Log.i(TAG, "onBufferingStart " + getInstance(this@XmlyPlayActivity).isPlaying)
seek_bar.setEnabled(false)
buffering_progress.setVisibility(View.VISIBLE)
}
override fun onBufferingStop() {
Log.i(TAG, "onBufferingStop")
seek_bar.setEnabled(true)
buffering_progress.setVisibility(View.GONE)
}
}
private val mAdsListener: IXmAdsStatusListener = object : IXmAdsStatusListener {
override fun onStartPlayAds(ad: Advertis, position: Int) {
Log.i(TAG, "onStartPlayAds, Ad:" + ad.name + ", pos:" + position)
play_or_pause.setEnabled(true)
play_or_pause.setImageResource(R.mipmap.widget_pause_normal)
}
override fun onStartGetAdsInfo() {
Log.i(TAG, "onStartGetAdsInfo")
play_or_pause.setEnabled(false)
seek_bar.setEnabled(false)
}
override fun onGetAdsInfo(ads: AdvertisList) {}
override fun onError(what: Int, extra: Int) {
Log.i(TAG, "onError what:$what, extra:$extra")
}
override fun onCompletePlayAds() {
Log.i(TAG, "onCompletePlayAds")
play_or_pause.setEnabled(true)
seek_bar.setEnabled(true)
val model = mPlayerManager.currSound
if (model != null && model is Track) {
GlideUtils.loadImageView(this@XmlyPlayActivity, model.coverUrlMiddle, sound_cover)
}
}
override fun onAdsStopBuffering() {
Log.i(TAG, "onAdsStopBuffering")
}
override fun onAdsStartBuffering() {
Log.i(TAG, "onAdsStartBuffering")
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.iv_left_icon -> finish()
R.id.play_or_pause -> {
// 播放或暂停
if (mPlayerManager.isPlaying) {
mPlayerManager.pause()
} else {
mPlayerManager.play()
}
}
R.id.next_sound -> {
// 下一首
mPlayerManager.playNext()
}
R.id.pre_sound -> {
// 上一首
mPlayerManager.playPre()
}
}
}
override fun onDestroy() {
if (::mPlayerManager.isInitialized) {
mPlayerManager.removePlayerStatusListener(mPlayerStatusListener)
}
release()
CommonRequest.release()
super.onDestroy()
}
private fun initListener() {
srl_xmly.setOnRefreshListener(this)
srl_xmly.setOnLoadMoreListener(this)
iv_left_icon.setOnClickListener(this)
play_or_pause.setOnClickListener(this)
next_sound.setOnClickListener(this)
pre_sound.setOnClickListener(this)
}
override fun onItemClick(position: Int) {
mPlayerManager.playList(mAlbumList!!.tracks, position)
}
}
...@@ -5,19 +5,19 @@ import android.view.LayoutInflater ...@@ -5,19 +5,19 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.mints.goodmoney.R import com.mints.goodmoney.R
import com.mints.library.utils.GlideUtils
import com.ximalaya.ting.android.opensdk.model.album.Album
class XmlyPageAdapter(val xmlyPageList: Any?) : class XmlyPageAdapter(val xmlyPageList: MutableList<Album>) :
RecyclerView.Adapter<XmlyPageAdapter.ViewHolder>() { RecyclerView.Adapter<XmlyPageAdapter.ViewHolder>() {
lateinit var context: Context lateinit var context: Context
lateinit var mOnItemClickListener: OnItemClickListener lateinit var mOnItemClickListener: OnItemClickListener
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val ivXmlyPage: ImageView = view.findViewById(R.id.ivXmlyPage) val ivXmlyPage: ImageView = view.findViewById(R.id.ivXmlyPage)
val tvXmlyPageContent: TextView = view.findViewById(R.id.tvXmlyPageContent) val tvXmlyPageContent: TextView = view.findViewById(R.id.tvXmlyPageContent)
...@@ -32,13 +32,19 @@ class XmlyPageAdapter(val xmlyPageList: Any?) : ...@@ -32,13 +32,19 @@ class XmlyPageAdapter(val xmlyPageList: Any?) :
} }
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val album = xmlyPageList[position]
holder.tvXmlyPageContent.text = album.recommendReason
holder.tvXmlyPagecount.text = album.playCount.toString()
GlideUtils.loadImageView(holder.itemView.context, album.coverUrlMiddle, holder.ivXmlyPage)
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
if (::mOnItemClickListener.isInitialized) {
mOnItemClickListener.onItemClick(position) mOnItemClickListener.onItemClick(position)
} }
} }
}
// override fun getItemCount() = xmlyPageList?.size override fun getItemCount() = xmlyPageList.size
override fun getItemCount() = 15
interface OnItemClickListener { interface OnItemClickListener {
fun onItemClick(position: Int) fun onItemClick(position: Int)
......
package com.mints.goodmoney.ui.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mints.goodmoney.R
import com.ximalaya.ting.android.opensdk.model.track.Track
class XmlyPlayAdapter(val xmlyPageList: MutableList<Track>) :
RecyclerView.Adapter<XmlyPlayAdapter.ViewHolder>() {
lateinit var context: Context
lateinit var mOnItemClickListener: OnItemClickListener
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val tvIndex: TextView = view.findViewById(R.id.tv_index)
val tvTitle: TextView = view.findViewById(R.id.tv_title)
val tvCount: TextView = view.findViewById(R.id.tv_count)
val tvFree: TextView = view.findViewById(R.id.tv_free)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
context = parent.context
val view = LayoutInflater.from(context).inflate(R.layout.item_rv_xmly_play, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val track = xmlyPageList[position]
holder.tvIndex.text = (position + 1).toString()
holder.tvTitle.text = track.trackTitle
holder.tvCount.text = track.playCount.toString()
holder.tvFree.text = track.isFree.toString()
holder.itemView.setOnClickListener {
if (::mOnItemClickListener.isInitialized) {
mOnItemClickListener.onItemClick(position)
}
}
}
override fun getItemCount() = xmlyPageList.size
interface OnItemClickListener {
fun onItemClick(position: Int)
}
fun setOnItemClickListener(listener: OnItemClickListener) {
mOnItemClickListener = listener
}
}
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.mints.goodmoney.ui.fragment ...@@ -2,6 +2,7 @@ package com.mints.goodmoney.ui.fragment
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.fly.scenemodule.util.GsonUtils
import com.mints.goodmoney.R import com.mints.goodmoney.R
import com.mints.goodmoney.common.AppConfig import com.mints.goodmoney.common.AppConfig
import com.mints.goodmoney.common.Constant import com.mints.goodmoney.common.Constant
...@@ -22,6 +23,8 @@ class XmlyFragment : LazyLoadBaseFragment() { ...@@ -22,6 +23,8 @@ class XmlyFragment : LazyLoadBaseFragment() {
// 听书分类数据 // 听书分类数据
private var mCategoryList: CategoryList? = null private var mCategoryList: CategoryList? = null
private var mCurrentIndex = 0
override fun getContentViewLayoutID() = R.layout.fragment_main_xmly override fun getContentViewLayoutID() = R.layout.fragment_main_xmly
override fun initViewsAndEvents() { override fun initViewsAndEvents() {
...@@ -30,9 +33,9 @@ class XmlyFragment : LazyLoadBaseFragment() { ...@@ -30,9 +33,9 @@ class XmlyFragment : LazyLoadBaseFragment() {
override fun onFragmentFirstVisible() { override fun onFragmentFirstVisible() {
super.onFragmentFirstVisible() super.onFragmentFirstVisible()
showLoading("加载中...")
// 获取tab loadData()
initView()
} }
private fun loadData() { private fun loadData() {
...@@ -40,11 +43,15 @@ class XmlyFragment : LazyLoadBaseFragment() { ...@@ -40,11 +43,15 @@ class XmlyFragment : LazyLoadBaseFragment() {
val vo = hashMapOf<String, String>() val vo = hashMapOf<String, String>()
CommonRequest.getCategories(vo, object : IDataCallBack<CategoryList> { CommonRequest.getCategories(vo, object : IDataCallBack<CategoryList> {
override fun onSuccess(p0: CategoryList?) { override fun onSuccess(p0: CategoryList?) {
hideLoading()
mCategoryList = p0 mCategoryList = p0
initView()
} }
override fun onError(p0: Int, p1: String?) { override fun onError(p0: Int, p1: String?) {
LogUtil.e(p1) LogUtil.e(p1)
hideLoading()
} }
}) })
...@@ -58,11 +65,12 @@ class XmlyFragment : LazyLoadBaseFragment() { ...@@ -58,11 +65,12 @@ class XmlyFragment : LazyLoadBaseFragment() {
} }
private fun initView() { private fun initView() {
mCategoryList?.let {
val tabs: MutableList<String> = ArrayList() val tabs: MutableList<String> = ArrayList()
val fragments: MutableList<Fragment> = ArrayList() val fragments: MutableList<Fragment> = ArrayList()
for (i in 1..10) { for (i in 0 until it.categories.size) {
tabs.add("视频" + i) tabs.add(it.categories[i].categoryName)
fragments.add(XmlyPageFragment(i)) fragments.add(XmlyPageFragment(it.categories[i].id))
} }
//去除两侧应阴影 //去除两侧应阴影
...@@ -73,4 +81,6 @@ class XmlyFragment : LazyLoadBaseFragment() { ...@@ -73,4 +81,6 @@ class XmlyFragment : LazyLoadBaseFragment() {
xtFragmentXmly.setxTabDisplayNum(tabs.size) xtFragmentXmly.setxTabDisplayNum(tabs.size)
xtFragmentXmly.setupWithViewPager(vpFragmentXmly) xtFragmentXmly.setupWithViewPager(vpFragmentXmly)
} }
}
} }
\ No newline at end of file
package com.mints.goodmoney.ui.fragment package com.mints.goodmoney.ui.fragment
import android.os.Bundle
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import com.fly.scenemodule.util.GsonUtils import com.fly.scenemodule.util.GsonUtils
import com.mints.goodmoney.R import com.mints.goodmoney.R
import com.mints.goodmoney.common.Constant
import com.mints.goodmoney.ui.activitys.AwardActivity
import com.mints.goodmoney.ui.activitys.XmlyPlayActivity
import com.mints.goodmoney.ui.adapter.XmlyPageAdapter import com.mints.goodmoney.ui.adapter.XmlyPageAdapter
import com.mints.goodmoney.ui.fragment.base.LazyLoadBaseFragment import com.mints.goodmoney.ui.fragment.base.LazyLoadBaseFragment
import com.mints.goodmoney.utils.LogUtil import com.mints.goodmoney.utils.LogUtil
...@@ -13,31 +17,29 @@ import com.ximalaya.ting.android.opensdk.model.album.AlbumList ...@@ -13,31 +17,29 @@ import com.ximalaya.ting.android.opensdk.model.album.AlbumList
import com.scwang.smartrefresh.layout.api.RefreshLayout import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener
import com.scwang.smartrefresh.layout.listener.OnRefreshListener import com.scwang.smartrefresh.layout.listener.OnRefreshListener
import com.ximalaya.ting.android.opensdk.model.album.Album
import kotlinx.android.synthetic.main.fragment_main_xmly_page.* import kotlinx.android.synthetic.main.fragment_main_xmly_page.*
/** /**
* 描述:喜马拉雅封面 * 描述:喜马拉雅封面
* 作者:孟崔广 * 作者:孟崔广
*/ */
class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(), class XmlyPageFragment(private val categoryId: Long) : LazyLoadBaseFragment(),
XmlyPageAdapter.OnItemClickListener, XmlyPageAdapter.OnItemClickListener,
OnRefreshListener, OnRefreshListener,
OnLoadMoreListener { OnLoadMoreListener {
private lateinit var xmlyPageAdapter: XmlyPageAdapter private lateinit var xmlyPageAdapter: XmlyPageAdapter
private var xmlyData: MutableList<Any> = mutableListOf() private var xmlyData: MutableList<Album> = mutableListOf()
// 分页 // 分页
private var xmlyPage = 1 private var xmlyPage = 1
private val PAGE_SIZE = 15 private val PAGE_SIZE = 10
private var mAlbumList: AlbumList? = null
private var mPage = 1
private var mCount = 10
override fun getContentViewLayoutID() = R.layout.fragment_main_xmly_page override fun getContentViewLayoutID() = R.layout.fragment_main_xmly_page
override fun initViewsAndEvents() { override fun initViewsAndEvents() {
loadData()
} }
private fun loadData() { private fun loadData() {
...@@ -46,15 +48,23 @@ class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(), ...@@ -46,15 +48,23 @@ class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(),
vo[DTransferConstants.CATEGORY_ID] = categoryId.toString() vo[DTransferConstants.CATEGORY_ID] = categoryId.toString()
// 1-最火 2-最新 3-最多播放 // 1-最火 2-最新 3-最多播放
vo[DTransferConstants.CALC_DIMENSION] = "1" vo[DTransferConstants.CALC_DIMENSION] = "1"
vo[DTransferConstants.PAGE] = mPage.toString() vo[DTransferConstants.PAGE] = xmlyPage.toString()
vo["count"] = mCount.toString() vo[DTransferConstants.PAGE_SIZE] = PAGE_SIZE.toString()
CommonRequest.getAlbumList(vo, object : IDataCallBack<AlbumList> { CommonRequest.getAlbumList(vo, object : IDataCallBack<AlbumList> {
override fun onSuccess(p0: AlbumList?) { override fun onSuccess(p0: AlbumList?) {
mAlbumList = p0 if (p0 != null && p0.albums != null && p0.albums.size != 0) {
activity?.runOnUiThread {
getDataSuc(p0.albums)
}
} else {
getDataFail()
}
} }
override fun onError(p0: Int, p1: String?) { override fun onError(p0: Int, p1: String?) {
LogUtil.e(p1) LogUtil.e(p1)
getDataFail()
} }
}) })
...@@ -68,23 +78,26 @@ class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(), ...@@ -68,23 +78,26 @@ class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(),
} }
override fun onItemClick(position: Int) { override fun onItemClick(position: Int) {
showToast("界面:视频 item:${position}") val bundle = Bundle()
bundle.putLong(XmlyPlayActivity.ALBUM_ID, xmlyData[position].id)
readyGo(XmlyPlayActivity::class.java, bundle)
} }
override fun onRefresh(refreshLayout: RefreshLayout) { override fun onRefresh(refreshLayout: RefreshLayout) {
xmlyPage = 1 xmlyPage = 1
xmlyData.clear() xmlyData.clear()
// presenter.getData(xmlyPage) loadData()
} }
override fun onLoadMore(refreshLayout: RefreshLayout) { override fun onLoadMore(refreshLayout: RefreshLayout) {
// presenter.getData(++xmlyPage,PAGE_SIZE) xmlyPage = ++xmlyPage
loadData()
} }
private fun initRvView() { private fun initRvView() {
val gridLayoutManager = GridLayoutManager(context, 2) val gridLayoutManager = GridLayoutManager(context, 2)
xmlyPageVip.layoutManager = gridLayoutManager xmlyPageVip.layoutManager = gridLayoutManager
xmlyPageAdapter = XmlyPageAdapter(null) xmlyPageAdapter = XmlyPageAdapter(xmlyData)
xmlyPageVip.adapter = xmlyPageAdapter xmlyPageVip.adapter = xmlyPageAdapter
xmlyPageAdapter.setOnItemClickListener(this) xmlyPageAdapter.setOnItemClickListener(this)
} }
...@@ -106,18 +119,20 @@ class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(), ...@@ -106,18 +119,20 @@ class XmlyPageFragment(private val categoryId: Int) : LazyLoadBaseFragment(),
/** /**
* 获取数据成功 * 获取数据成功
*/ */
private fun getDataSuc(list: Any) { private fun getDataSuc(list: List<Album>) {
// xmlyData.addAll(list) if (::xmlyPageAdapter.isInitialized) {
// if (xmlyPage == 1) { xmlyData.addAll(list)
// srl_xmly.finishRefresh(true) if (xmlyPage == 1) {
// xmlyPageAdapter?.notifyDataSetChanged() srl_xmly.finishRefresh(true)
// } else { xmlyPageAdapter.notifyDataSetChanged()
// if (list.size < PAGE_SIZE) { } else {
// srl_xmly.finishLoadMoreWithNoMoreData() if (list.size < PAGE_SIZE) {
// } else { srl_xmly.finishLoadMoreWithNoMoreData()
// srl_xmly.finishLoadMore() } else {
// } srl_xmly.finishLoadMore()
// xmlyPageAdapter?.notifyItemChanged(list.size) }
// } xmlyPageAdapter.notifyItemChanged(list.size)
}
}
} }
} }
\ No newline at end of file
/**
* ToolUtil.java
* com.chad.android.library.util
* <p/>
* <p/>
* ver date author
* ---------------------------------------
* 2015-4-9 chadwii
* <p/>
* Copyright (c) 2015, chadwii All Rights Reserved.
*/
package com.mints.goodmoney.utils;
import android.content.Context;
import android.text.TextUtils;
import com.ximalaya.ting.android.opensdk.constants.ConstantsOpenSdk;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* ClassName:ToolUtil
*
* @author chadwii
* @version
* @since Ver 1.1
* @Date 2015-4-9 5:17:32
*
* @see
*/
public class ToolUtil {
/**one hour in ms*/
private static final int ONE_HOUR = 1 * 60 * 60 * 1000;
/**one minute in ms*/
private static final int ONE_MIN = 1 * 60 * 1000;
/**one second in ms*/
private static final int ONE_SECOND = 1 * 1000;
private static int sScreenWidth;
private static int sScreenHeight;
private static float sDensity;
public static int dp2px(Context ctx, int dp) {
if (sDensity == 0) {
sDensity = ctx.getResources().getDisplayMetrics().density;
}
return (int) (dp * sDensity + 0.5f);
}
public static int px2dp(Context ctx, int px) {
if (sDensity == 0) {
sDensity = ctx.getResources().getDisplayMetrics().density;
}
return (int) (px / sDensity + 0.5f);
}
public static int getScreenWidth(Context ctx) {
if (sScreenWidth == 0) {
sScreenWidth = ctx.getResources().getDisplayMetrics().widthPixels;
}
return sScreenWidth;
}
public static int getScreenHeight(Context ctx) {
if (sScreenHeight == 0) {
sScreenHeight = ctx.getResources().getDisplayMetrics().heightPixels;
}
return sScreenHeight;
}
/**HH:mm:ss*/
public static String formatTime(long ms) {
StringBuilder sb = new StringBuilder();
int hour = (int) (ms / ONE_HOUR);
int min = (int) ((ms % ONE_HOUR) / ONE_MIN);
int sec = (int) (ms % ONE_MIN) / ONE_SECOND;
if (hour == 0) {
// sb.append("00:");
} else if (hour < 10) {
sb.append("0").append(hour).append(":");
} else {
sb.append(hour).append(":");
}
if (min == 0) {
sb.append("00:");
} else if (min < 10) {
sb.append("0").append(min).append(":");
} else {
sb.append(min).append(":");
}
if (sec == 0) {
sb.append("00");
} else if (sec < 10) {
sb.append("0").append(sec);
} else {
sb.append(sec);
}
return sb.toString();
}
public static boolean isEmpty(String str) {
if (str == null || str.trim().equals("") || str.trim().equals("null")) {
return true;
}
return false;
}
public static int isInTime(String time) throws IllegalArgumentException {
if (TextUtils.isEmpty(time) || !time.contains("-")
|| !time.contains(":")) {
if(ConstantsOpenSdk.isDebug) {
throw new IllegalArgumentException("Illegal Argument arg:" + time);
}else {
return -2;
}
}
String[] args = time.split("-");
boolean onlyHasHour = (args[0].split(":")).length == 2;
boolean hasDay = (args[0].split(":")).length == 3;
boolean hasYear = (args[0].split(":")).length == 5;
SimpleDateFormat sdf = null;
if (hasDay) {
sdf = new SimpleDateFormat("dd:HH:mm", Locale.getDefault());
} else if (hasYear) {
sdf = new SimpleDateFormat("yy:MM:dd:HH:mm", Locale.getDefault());
} else if (onlyHasHour) {
sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
}
if (sdf != null) {
String nowStr = sdf.format(new Date(System.currentTimeMillis()));
try {
long now = sdf.parse(nowStr).getTime();
long start = sdf.parse(args[0]).getTime();
if (args[1].contains("00:00") && hasDay) {
args[1] = (args[1].split(":"))[0] + ":" + "23:59";
} else if (args[1].contains("00:00") && hasYear) {
args[1] = (args[1].split(":"))[0] + ":"
+ (args[1].split(":"))[1] + ":"
+ (args[1].split(":"))[2] + ":" + "23:59";
} else if (args[1].contains("00:00") && onlyHasHour) {
args[1] = "23:59";
}
long end = sdf.parse(args[1]).getTime();
if (now >= end) {
return -1;
} else if (now >= start && now < end) {
return 0;
} else {
return 1;
}
} catch (ParseException e) {
e.printStackTrace();
if(ConstantsOpenSdk.isDebug) {
throw new IllegalArgumentException("Illegal Argument arg:"
+ time);
}else {
return -2;
}
}
}
return -2;
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/pre_icon_transparent_disable" android:state_enabled="false"></item>
<item android:drawable="@mipmap/pre_icon_transparent_pressed" android:state_enabled="true" android:state_pressed="true"></item>
<item android:drawable="@mipmap/pre_icon_transparent_normal" android:state_enabled="true" android:state_pressed="false"></item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<include layout="@layout/header_layout" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/control_bar"
android:layout_width="match_parent"
android:layout_height="120dp"
android:gravity="center"
android:padding="10dp"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="3dp">
<ImageView
android:id="@+id/sound_cover"
android:layout_width="110dp"
android:layout_height="110dp"
android:layout_alignParentLeft="true"
android:scaleType="fitCenter"
android:src="@mipmap/ic_draw_phone" />
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/sound_cover"
android:maxLines="1"
android:text="no play sound"
android:textColor="@color/color_333" />
<TextView
android:id="@+id/time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/message"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/sound_cover"
android:maxLines="1"
android:textColor="@color/color_333" />
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/time"
android:layout_alignParentRight="true"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@+id/sound_cover"
android:maxHeight="10dp"
android:minHeight="10dp" />
<ProgressBar
android:id="@+id/buffering_progress"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:visibility="gone" />
<ImageButton
android:id="@+id/pre_sound"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/seek_bar"
android:layout_alignParentBottom="true"
android:scaleType="fitCenter"
android:src="@mipmap/pre_icon_transparent_normal" />
<ImageButton
android:id="@+id/play_or_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/pre_sound"
android:layout_toRightOf="@+id/pre_sound"
android:scaleType="fitCenter"
android:src="@mipmap/widget_play_normal" />
<ImageButton
android:id="@+id/next_sound"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignTop="@+id/pre_sound"
android:layout_toRightOf="@+id/play_or_pause"
android:scaleType="fitCenter"
android:src="@mipmap/next_icon_transparent_normal" />
</RelativeLayout>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/srl_xmly"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/control_bar"
app:srlAccentColor="@color/gray"
app:srlPrimaryColor="@color/color_50E8E8E8">
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/xmlyPageVip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:overScrollMode="never" />
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
...@@ -42,12 +42,6 @@ ...@@ -42,12 +42,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="播放专辑内容" /> android:text="播放专辑内容" />
<Button
android:id="@+id/btn5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放音频" />
</LinearLayout> </LinearLayout>
</com.mints.goodmoney.ui.widgets.ElasticScrollView> </com.mints.goodmoney.ui.widgets.ElasticScrollView>
......
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
android:id="@+id/tv_title" android:id="@+id/tv_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end"
android:lines="1"
android:maxLength="12"
android:textColor="@color/color_121B32" android:textColor="@color/color_121B32"
android:textSize="18sp" android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="6dp" android:layout_margin="6dp"
...@@ -20,6 +18,7 @@ ...@@ -20,6 +18,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="6dp" android:layout_margin="6dp"
android:ellipsize="end"
android:lines="1" android:lines="1"
android:singleLine="true" android:singleLine="true"
android:text="123213112321311232131123213112321311232131123213112321311232131123213112321311232131" android:text="123213112321311232131123213112321311232131123213112321311232131123213112321311232131"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:id="@+id/tv_index"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:text="1"
android:textColor="@color/color_333"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_title"
android:layout_width="260dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:ellipsize="end"
android:maxLines="2"
android:text="111111111111111"
android:textColor="@color/color_333"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/tv_count"
app:layout_constraintStart_toEndOf="@+id/tv_index"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="5dp"
android:drawableLeft="@mipmap/ic_headset"
android:drawablePadding="6dp"
android:gravity="center_vertical"
android:text="7.2亿"
android:textColor="@color/color_AAA"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_index"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<TextView
android:id="@+id/tv_free"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center_vertical"
android:text="7.2亿"
android:textColor="@color/color_AAA"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_count"
app:layout_constraintStart_toEndOf="@+id/tv_count"
app:layout_constraintTop_toTopOf="@+id/tv_count" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -16,7 +16,7 @@ buildscript { ...@@ -16,7 +16,7 @@ buildscript {
} }
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:4.0.0' classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }
......
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