Skip to content

Commit

Permalink
修改混淆,优化删除功能
Browse files Browse the repository at this point in the history
caiyonglong committed Sep 25, 2018
1 parent b78bc8e commit de98cc1
Showing 22 changed files with 110 additions and 74 deletions.
14 changes: 1 addition & 13 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -94,7 +94,7 @@ dependencies {
api 'com.github.wendux:DSBridge-Android:x5-3.0-SNAPSHOT'

//rxpermissions 6.0权限管理
api 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
api 'com.github.tbruyelle:rxpermissions:0.10.2'
api 'net.steamcrafted:materialiconlib:1.1.5'

//黄油刀
@@ -164,16 +164,4 @@ dependencies {
//其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0
api 'com.tencent.bugly:nativecrashreport:3.3.1'

// api "com.mikepenz:materialdrawer:6.1.0-rc01"

//required support lib modules

// implementation "androidx.appcompat:appcompat:1.0.0-rc02"

// implementation "androidx.recyclerview:recyclerview:1.0.0-rc02"

// implementation "androidx.annotation:annotation:1.0.0-rc02"

// implementation "com.google.android.material:material:1.0.0-rc02"
implementation files('libs/open_sdk_r6019_lite.jar')
}
3 changes: 3 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -102,3 +102,6 @@
# tinker混淆规则
-dontwarn com.tencent.tinker.**
-keep class com.tencent.tinker.** { *; }
#x5内核
-dontwarn com.tencent.smtt.**
-keep class com.tencent.smtt.** { *; }
4 changes: 2 additions & 2 deletions app/src/main/java/com/cyl/musiclake/api/MusicUtils.kt
Original file line number Diff line number Diff line change
@@ -140,9 +140,9 @@ object MusicUtils {
music.artist = artistNames
music.artistId = artistIds
}
music.coverUri = getAlbumPic(it.album.cover, it.vendor, 150)
music.coverUri = getAlbumPic(it.album.cover, type, 150)
music.coverBig = it.album.cover
music.coverSmall = getAlbumPic(it.album.cover, it.vendor, 90)
music.coverSmall = getAlbumPic(it.album.cover, type, 90)
if (!it.cp) {
musicList.add(music)
}
Original file line number Diff line number Diff line change
@@ -297,15 +297,15 @@ object PlaylistApiServiceImpl {
/**
* 获取榜单详情
*/
fun getRankDetailInfo(ids: IntArray, limit: Int, type: String?): Observable<MutableList<Playlist>> {
fun getRankDetailInfo(ids: IntArray, limit: Int? = null, type: String?): Observable<MutableList<Playlist>> {
return if (type == Constants.PLAYLIST_WY_ID) getNeteaseRank(ids, limit)
else getQQRank(limit, ids)
}

/**
* 网易云排行榜
*/
fun getNeteaseRank(ids: IntArray, limit: Int): Observable<MutableList<Playlist>> {
fun getNeteaseRank(ids: IntArray, limit: Int? = null): Observable<MutableList<Playlist>> {
return playlistApiService.getNeteaseRank(ids, limit)
.flatMap { data ->
val list = mutableListOf<Playlist>()
@@ -330,7 +330,7 @@ object PlaylistApiServiceImpl {
/**
* 网易云排行榜
*/
fun getQQRank(limit: Int, ids: IntArray? = null): Observable<MutableList<Playlist>> {
fun getQQRank(limit: Int? = null, ids: IntArray? = null): Observable<MutableList<Playlist>> {
return playlistApiService.getQQRank(limit, ids)
.flatMap { data ->
val list = mutableListOf<Playlist>()
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ import com.cyl.musiclake.bean.Artist
import com.cyl.musiclake.bean.Music
import com.cyl.musiclake.bean.Playlist
import com.cyl.musiclake.common.Constants
import com.cyl.musiclake.data.SongLoader
import com.cyl.musiclake.net.ApiManager
import com.cyl.musiclake.utils.FileUtils
import com.cyl.musiclake.utils.LogUtil
@@ -178,7 +179,7 @@ object BaiduApiServiceImpl {
}
Observable.create(ObservableOnSubscribe<Music> { e ->
if (music.uri != null) {
music.save()
SongLoader.updateMusic(music)
e.onNext(music)
e.onComplete()
} else {
2 changes: 1 addition & 1 deletion app/src/main/java/com/cyl/musiclake/base/BaseFragment.java
Original file line number Diff line number Diff line change
@@ -148,8 +148,8 @@ public void onActivityCreated(final Bundle savedInstanceState) {
setHasOptionsMenu(true);
initToolBar();
initViews();
listener();
loadData();
listener();
}


2 changes: 1 addition & 1 deletion app/src/main/java/com/cyl/musiclake/data/SongLoader.kt
Original file line number Diff line number Diff line change
@@ -171,7 +171,7 @@ object SongLoader {
* 添加歌曲
*/
fun updateMusic(music: Music) {
DaoLitepal.saveOrUpdateMusic(music, true)
DaoLitepal.saveOrUpdateMusic(music)
}

/**
6 changes: 3 additions & 3 deletions app/src/main/java/com/cyl/musiclake/data/db/DaoLitepal.kt
Original file line number Diff line number Diff line change
@@ -116,9 +116,9 @@ object DaoLitepal {
if (FileUtils.exists(music.uri)) {
FileUtils.delFile(music.uri)
}
LitePal.deleteAll(Music::class.java, "mid=?", music.mid)
LitePal.deleteAll(TasksManagerModel::class.java, "mid=?", music.mid)
LitePal.deleteAll(MusicToPlaylist::class.java, "mid=?", music.mid)
LitePal.deleteAll(Music::class.java, "mid = ? ", music.mid)
LitePal.deleteAll(TasksManagerModel::class.java, "mid = ?", music.mid)
LitePal.deleteAll(MusicToPlaylist::class.java, "mid = ?", music.mid)
}

fun deletePlaylist(playlist: Playlist) {
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ import com.cyl.musiclake.data.db.DaoLitepal
import com.cyl.musiclake.bean.Music
import com.cyl.musiclake.common.Constants
import com.cyl.musiclake.common.NavigationHelper
import com.cyl.musiclake.data.SongLoader
import com.cyl.musiclake.utils.FileUtils
import com.cyl.musiclake.utils.LogUtil
import com.cyl.musiclake.utils.Mp3Util
@@ -29,10 +30,14 @@ object DownloadLoader {
DaoLitepal.getMusicInfo(it1)
}
music?.forEach { origin ->
if (origin.uri == null || origin.uri?.startsWith("http:")!!) {
if (origin.uri != null || origin.uri?.startsWith("http:")!!) {
origin.uri = it.path
origin.isOnline = false
}
musicList.add(origin)
SongLoader.updateMusic(music = origin)
}
if (music?.size ?: 0 > 0) {
musicList.add(music?.first()!!)
}
}
return musicList
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ private boolean setDataSourceImpl(final MediaPlayer player, final String path) {
player.setOnBufferingUpdateListener(this);
player.setOnErrorListener(this);
player.setOnCompletionListener(this);
} catch (final IOException | IllegalArgumentException todo) {
} catch (Exception todo) {
return false;
}
return true;
24 changes: 23 additions & 1 deletion app/src/main/java/com/cyl/musiclake/ui/UIUtils.kt
Original file line number Diff line number Diff line change
@@ -247,6 +247,27 @@ fun AppCompatActivity.downloadBatchMusic(downloadList: MutableList<Music>) {
}
}

/**
* 批量删除歌曲
*/
fun AppCompatActivity.deleteSingleMusic(music: Music?, success: (() -> Unit)? = null) {
if (this.isFinishing || this.isDestroyed) return
if (music == null) {
showTipsDialog(this@deleteSingleMusic, R.string.delete_local_song_empty)
return
}
showTipsDialog(this@deleteSingleMusic, R.string.delete_local_song) {
doAsync {
SongLoader.removeSong(music)
uiThread {
ToastUtils.show(MusicApp.getAppContext().getString(R.string.delete_song_success))
EventBus.getDefault().post(PlaylistEvent(Constants.PLAYLIST_LOCAL_ID))
success?.invoke()
}
}
}
}

/**
* 批量删除歌曲
*/
@@ -265,6 +286,7 @@ fun AppCompatActivity.deleteLocalMusic(deleteList: MutableList<Music>, success:
SongLoader.removeMusicList(deleteList)
uiThread {
ToastUtils.show(getString(R.string.delete_song_success))
EventBus.getDefault().post(PlaylistEvent(Constants.PLAYLIST_LOCAL_ID))
success?.invoke()
}
}
@@ -320,7 +342,7 @@ fun Context.addDownloadQueue(result: Music, isBatch: Boolean = false) {
if (!isBatch) {
ToastUtils.show(getString(R.string.download_add_success))
}
DaoLitepal.saveOrUpdateMusic(result, false)
DaoLitepal.saveOrUpdateMusic(result)
val path = FileUtils.getMusicDir() + result.artist + " - " + result.title + ".mp3"
val task = FileDownloader.getImpl()
.create(result.uri)
17 changes: 13 additions & 4 deletions app/src/main/java/com/cyl/musiclake/ui/chat/ChatListAdapter.kt
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@ package com.cyl.musiclake.ui.chat

import android.view.View
import android.widget.TextView
import com.afollestad.materialdialogs.MaterialDialog
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.cyl.musicapi.playlist.MusicInfo
@@ -182,12 +181,22 @@ class ChatListAdapter(list: List<MessageEvent>) : BaseQuickAdapter<MessageEvent,


class OnlineUserListAdapter(list: List<UserInfo>) : BaseQuickAdapter<UserInfo, BaseViewHolder>(R.layout.item_user, list) {
private var isSetOnClick = false
override fun convert(helper: BaseViewHolder, item: UserInfo) {
CoverLoader.loadImageView(mContext, item.avatar, helper.getView(R.id.user_avatar))
helper.setText(R.id.user_name, item.nickname)
helper.itemView.setOnClickListener {
MaterialDialog.Builder(mContext)
.title(item.nickname)
.show()
if (isSetOnClick) return@setOnClickListener
isSetOnClick = true
helper.getView<TextView>(R.id.user_name).visibility = View.VISIBLE
helper.getView<TextView>(R.id.user_name).scaleX = 0f
helper.getView<TextView>(R.id.user_name).scaleY = 0f
helper.getView<TextView>(R.id.user_name).animate().scaleY(1f).scaleX(1f).setDuration(300).start()
helper.getView<TextView>(R.id.user_name).postDelayed({
helper.getView<TextView>(R.id.user_name).animate().scaleY(0f).scaleX(0f).setDuration(300).start()
isSetOnClick = false
helper.getView<TextView>(R.id.user_name).postDelayed({ helper.getView<TextView>(R.id.user_name).visibility = View.GONE }, 300)
}, 3000)
}
}

Original file line number Diff line number Diff line change
@@ -26,8 +26,6 @@ public class WelcomeActivity extends BaseActivity {
private final String[] mPermissionList = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
//获取电话状态
Manifest.permission.READ_PHONE_STATE,
};

@Override
Original file line number Diff line number Diff line change
@@ -14,8 +14,6 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import com.afollestad.materialdialogs.MaterialDialog
import com.cyl.musiclake.MusicApp
import com.cyl.musiclake.R
import com.cyl.musiclake.api.MusicUtils
import com.cyl.musiclake.bean.Album
@@ -24,16 +22,13 @@ import com.cyl.musiclake.bean.Music
import com.cyl.musiclake.common.Constants
import com.cyl.musiclake.common.Extras
import com.cyl.musiclake.common.NavigationHelper
import com.cyl.musiclake.data.SongLoader
import com.cyl.musiclake.player.PlayManager
import com.cyl.musiclake.ui.OnlinePlaylistUtils
import com.cyl.musiclake.ui.deleteSingleMusic
import com.cyl.musiclake.ui.downloadMusic
import com.cyl.musiclake.ui.music.edit.EditMusicActivity
import com.cyl.musiclake.utils.ConvertUtils
import com.cyl.musiclake.utils.ToastUtils
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.support.v4.startActivity
import org.jetbrains.anko.uiThread

class BottomDialogFragment : BottomSheetDialogFragment() {
lateinit var mContext: AppCompatActivity
@@ -133,23 +128,9 @@ class BottomDialogFragment : BottomSheetDialogFragment() {
}

private fun turnToDelete(music: Music?) {
if (music?.type == Constants.LOCAL) {
activity?.let {
if (it.isFinishing || it.isDestroyed) return
MaterialDialog.Builder(it)
.title(R.string.prompt)
.content(R.string.delete_local_song)
.positiveText(R.string.sure)
.negativeText(R.string.cancel)
.onPositive { _, _ ->
doAsync {
SongLoader.removeSong(music)
uiThread {
ToastUtils.show(MusicApp.getAppContext().getString(R.string.delete_song_success))
removeSuccessListener?.invoke(music)
}
}
}.show()
if (music?.type == Constants.LOCAL || music?.isOnline == false) {
(activity as AppCompatActivity?)?.deleteSingleMusic(music) {
removeSuccessListener?.invoke(music)
}
} else {
OnlinePlaylistUtils.disCollectMusic(pid, music) {
@@ -179,11 +160,11 @@ class BottomDialogFragment : BottomSheetDialogFragment() {
itemData.remove(R.string.popup_add_to_playlist)
} else {
itemData.remove(R.string.popup_detail_edit)
if (music?.isDl == false) {
if (music?.isDl == false || music?.isOnline == false) {
itemData.remove(R.string.popup_download)
}

if (type != Constants.PLAYLIST_CUSTOM_ID && type != Constants.PLAYLIST_IMPORT_ID) {
if (type != Constants.PLAYLIST_CUSTOM_ID && type != Constants.PLAYLIST_IMPORT_ID && music?.isOnline == true) {
itemData.remove(R.string.popup_delete)
}
}
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ constructor() : BasePresenter<DiscoverContract.View>(), DiscoverContract.Present
* 加载网易排行榜(0歌曲)
*/
override fun loadNetease(tag: String) {
val observable = NeteaseApiServiceImpl.getTopPlaylists(tag, 20)
val observable = NeteaseApiServiceImpl.getTopPlaylists(tag, 30)
ApiManager.request(observable, object : RequestCallBack<MutableList<Playlist>> {
override fun success(result: MutableList<Playlist>) {
mView?.showNeteaseCharts(result)
Original file line number Diff line number Diff line change
@@ -83,7 +83,6 @@ class EditSongListActivity : BaseActivity<EditSongListPresenter>() {
deleteLocalMusic(selectMusic) {
musicList.removeAll(selectMusic)
mAdapter?.notifyDataSetChanged()
EventBus.getDefault().post(PlaylistEvent(Constants.PLAYLIST_LOCAL_ID))
}
}
}
Original file line number Diff line number Diff line change
@@ -37,7 +37,7 @@ constructor() : BasePresenter<PlaylistContract.View>(), PlaylistContract.Present

override fun loadPlaylist(idx: String, type: String?) {
mView?.showLoading()
val observable = PlaylistApiServiceImpl.getRankDetailInfo(intArrayOf(idx.toInt()), 200, type)
val observable = PlaylistApiServiceImpl.getRankDetailInfo(intArrayOf(idx.toInt()), null, type)
ApiManager.request(observable, object : RequestCallBack<MutableList<Playlist>> {
override fun success(result: MutableList<Playlist>) {
mView?.hideLoading()
Original file line number Diff line number Diff line change
@@ -69,6 +69,10 @@ class PlayerActivity : BaseActivity<PlayPresenter>(), PlayContract.View {
music?.isLove?.let {
collectIv.setImageResource(if (it) R.drawable.item_favorite_love else R.drawable.item_favorite)
}
//更新下载状态
music?.isDl?.let {
downloadIv.visibility = if (it) View.VISIBLE else View.GONE
}
//隐藏显示歌曲评论
songCommentTv.visibility = if (playingMusic?.type == Constants.XIAMI || playingMusic?.type == Constants.QQ || playingMusic?.type == Constants.NETEASE) View.VISIBLE else View.GONE

@@ -136,7 +140,6 @@ class PlayerActivity : BaseActivity<PlayPresenter>(), PlayContract.View {
operateSongIv.setOnClickListener {
BottomDialogFragment.newInstance(playingMusic)
.show(this)

}
}

Original file line number Diff line number Diff line change
@@ -120,7 +120,11 @@ class PlaylistDetailActivity : BaseActivity<PlaylistDetailPresenter>(), Playlist
}
}
mAdapter?.setOnItemChildClickListener { _, _, position ->
bottomDialogFragment = BottomDialogFragment.newInstance(musicList[position], mPlaylist?.type)
bottomDialogFragment = BottomDialogFragment.newInstance(musicList[position], mPlaylist?.type).apply {
mPlaylist?.pid?.let {
pid = it
}
}
bottomDialogFragment?.removeSuccessListener = {
removeMusic(position)
}
31 changes: 24 additions & 7 deletions app/src/main/res/layout/item_user.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<de.hdodenhof.circleimageview.CircleImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/user_avatar"
android:layout_width="@dimen/dp_48"
android:layout_height="@dimen/dp_48"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:padding="@dimen/dp_8"
android:src="@mipmap/ic_launcher_round">
android:orientation="vertical"
android:padding="@dimen/dp_4">

</de.hdodenhof.circleimageview.CircleImageView>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/user_avatar"
android:layout_width="@dimen/dp_48"
android:layout_height="@dimen/dp_48"
android:layout_gravity="center"
android:padding="@dimen/dp_8"
android:src="@mipmap/ic_launcher_round" />

<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/delete"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
android:visibility="gone" />

</LinearLayout>
8 changes: 7 additions & 1 deletion buglist.md
Original file line number Diff line number Diff line change
@@ -33,6 +33,7 @@ Retrofit retrofit = new Retrofit.Builder()
不得已,最后尝试重写GSON转换器。遇到一个大坑那就是ResponseBody //ResponseData中的流只能使用一次,我们先将流中的数据读出在byte数组中。这个方法中已经关闭了ResponseBody,所以不需要再关闭了

5、Observable<T> 转换成 Observable<S>

```
//lamba表达式
Observable.flatMap(T -> {
@@ -166,4 +167,9 @@ E/MediaPlayer: next player is not prepared

height = size.y;


20、Warning: com.tencent.smtt.export.external.DexLoader: can't find referenced class dalvik.system.VMStack
混淆问题
```
-dontwarn com.tencent.smtt.**
-keep class com.tencent.smtt.** { *; }
```
Original file line number Diff line number Diff line change
@@ -135,7 +135,7 @@ interface PlaylistApiService {
* @return
*/
@GET("music/netease/rank")
fun getNeteaseRank(@Query("ids[]") ids: IntArray, @Query("limit") limit: Int): Observable<MutableList<PlaylistInfo>>
fun getNeteaseRank(@Query("ids[]") ids: IntArray, @Query("limit") limit: Int? = null): Observable<MutableList<PlaylistInfo>>

/**
* 获取网易云排行榜
@@ -145,7 +145,7 @@ interface PlaylistApiService {
* @return
*/
@GET("music/qq/rank")
fun getQQRank(@Query("limit") limit: Int, @Query("ids[]") ids: IntArray? = null): Observable<MutableList<PlaylistInfo>>
fun getQQRank(@Query("limit") limit: Int? = null, @Query("ids[]") ids: IntArray? = null): Observable<MutableList<PlaylistInfo>>


}

0 comments on commit de98cc1

Please sign in to comment.