2020-11-28 07:20:58 +00:00
|
|
|
|
package com.zlm.hp.ui;
|
|
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
import android.content.Intent;
|
|
|
|
|
import android.graphics.Bitmap;
|
|
|
|
|
import android.graphics.BitmapFactory;
|
|
|
|
|
import android.graphics.Color;
|
|
|
|
|
import android.graphics.drawable.BitmapDrawable;
|
|
|
|
|
import android.os.Build;
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
import android.os.Message;
|
2021-02-18 02:36:16 +00:00
|
|
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
|
import androidx.fragment.app.Fragment;
|
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
import androidx.viewpager.widget.ViewPager;
|
|
|
|
|
|
2020-11-28 07:20:58 +00:00
|
|
|
|
import android.text.TextUtils;
|
|
|
|
|
import android.util.DisplayMetrics;
|
|
|
|
|
import android.view.Display;
|
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
|
import android.view.View;
|
|
|
|
|
import android.view.ViewStub;
|
|
|
|
|
import android.view.ViewTreeObserver;
|
|
|
|
|
import android.view.WindowManager;
|
|
|
|
|
import android.view.animation.Animation;
|
|
|
|
|
import android.view.animation.TranslateAnimation;
|
|
|
|
|
import android.view.inputmethod.InputMethodManager;
|
|
|
|
|
import android.widget.FrameLayout;
|
|
|
|
|
import android.widget.ImageView;
|
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
|
import android.widget.RelativeLayout;
|
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
|
|
import com.dou361.dialogui.DialogUIUtils;
|
|
|
|
|
import com.dou361.dialogui.listener.DialogUIListener;
|
|
|
|
|
import com.suke.widget.SwitchButton;
|
|
|
|
|
import com.zlm.down.entity.DownloadTask;
|
|
|
|
|
import com.zlm.hp.adapter.PopPlayListAdapter;
|
|
|
|
|
import com.zlm.hp.adapter.TabFragmentAdapter;
|
|
|
|
|
import com.zlm.hp.application.HPApplication;
|
|
|
|
|
import com.zlm.hp.async.AsyncHandlerTask;
|
|
|
|
|
import com.zlm.hp.audio.utils.MediaUtil;
|
|
|
|
|
import com.zlm.hp.constants.ConfigInfo;
|
|
|
|
|
import com.zlm.hp.constants.Constants;
|
|
|
|
|
import com.zlm.hp.db.util.AudioInfoDB;
|
|
|
|
|
import com.zlm.hp.db.util.DownloadThreadInfoDB;
|
|
|
|
|
import com.zlm.hp.entity.AudioInfo;
|
|
|
|
|
import com.zlm.hp.entity.TimerInfo;
|
|
|
|
|
import com.zlm.hp.fragment.DownloadMusicFragment;
|
|
|
|
|
import com.zlm.hp.fragment.LastSongFragment;
|
|
|
|
|
import com.zlm.hp.fragment.MeFragment;
|
|
|
|
|
import com.zlm.hp.fragment.RecommendFragment;
|
|
|
|
|
import com.zlm.hp.fragment.SearchFragment;
|
|
|
|
|
import com.zlm.hp.fragment.SongFragment;
|
|
|
|
|
import com.zlm.hp.fragment.SpecialFragment;
|
|
|
|
|
import com.zlm.hp.manager.ActivityManager;
|
|
|
|
|
import com.zlm.hp.manager.AudioPlayerManager;
|
|
|
|
|
import com.zlm.hp.manager.DownloadAudioManager;
|
|
|
|
|
import com.zlm.hp.manager.LyricsManager;
|
|
|
|
|
import com.zlm.hp.manager.OnLineAudioManager;
|
|
|
|
|
import com.zlm.hp.receiver.AppSystemReceiver;
|
|
|
|
|
import com.zlm.hp.receiver.AudioBroadcastReceiver;
|
|
|
|
|
import com.zlm.hp.receiver.FragmentReceiver;
|
|
|
|
|
import com.zlm.hp.receiver.PhoneReceiver;
|
|
|
|
|
import com.zlm.hp.receiver.PhoneV4Receiver;
|
|
|
|
|
import com.zlm.hp.service.AudioPlayerService;
|
|
|
|
|
import com.zlm.hp.util.AppBarUtil;
|
|
|
|
|
import com.zlm.hp.util.AppOpsUtils;
|
|
|
|
|
import com.zlm.hp.util.ColorUtil;
|
|
|
|
|
import com.zlm.hp.util.ImageUtil;
|
|
|
|
|
import com.zlm.hp.util.IntentUtil;
|
|
|
|
|
import com.zlm.hp.util.PreferencesUtil;
|
|
|
|
|
import com.zlm.hp.util.TimeUtil;
|
|
|
|
|
import com.zlm.hp.util.ToastUtil;
|
|
|
|
|
import com.zlm.hp.widget.IconfontImageButtonTextView;
|
|
|
|
|
import com.zlm.hp.widget.IconfontIndicatorTextView;
|
|
|
|
|
import com.zlm.hp.widget.IconfontTextView;
|
|
|
|
|
import com.zlm.hp.widget.WhiteTranLinearLayout;
|
|
|
|
|
import com.zlm.hp.widget.WhiteTranRelativeLayout;
|
|
|
|
|
import com.zlm.libs.widget.MusicSeekBar;
|
|
|
|
|
import com.zlm.libs.widget.SlidingMenuLayout;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
2022-02-13 14:15:48 +00:00
|
|
|
|
import java.security.cert.CertPathValidatorException;
|
2020-11-28 07:20:58 +00:00
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description: 主界面
|
|
|
|
|
* @author: zhangliangming
|
|
|
|
|
* @date: 2018-07-29 10:21
|
|
|
|
|
**/
|
|
|
|
|
public class MainActivity extends BaseActivity {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* slidingmenu
|
|
|
|
|
*/
|
|
|
|
|
private SlidingMenuLayout mSlidingMenuLayout;
|
|
|
|
|
private SlidingMenuLayout.SlidingMenuOnListener mSlidingMenuOnListener;
|
|
|
|
|
/**
|
|
|
|
|
* 中间视图
|
|
|
|
|
*/
|
|
|
|
|
private ViewPager mViewPager;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
private LinearLayout mPlayerBarLL;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 图标按钮
|
|
|
|
|
*/
|
|
|
|
|
private IconfontImageButtonTextView mIconButton;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private IconfontImageButtonTextView mSearchButton;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* tab菜单图标按钮
|
|
|
|
|
*/
|
|
|
|
|
private IconfontIndicatorTextView[] mTabImageButton;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 选中索引
|
|
|
|
|
*/
|
|
|
|
|
private int mSelectedIndex = 0;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 保存退出时间
|
|
|
|
|
*/
|
|
|
|
|
private long mExitTime;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 设置
|
|
|
|
|
*/
|
|
|
|
|
private LinearLayout mSettingLL;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 退出
|
|
|
|
|
*/
|
|
|
|
|
private LinearLayout mExitLL;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 定时关闭
|
|
|
|
|
*/
|
|
|
|
|
private WhiteTranRelativeLayout mTimerPowerOffLL;
|
|
|
|
|
private TextView mTimerTv;
|
|
|
|
|
|
|
|
|
|
//wifi
|
|
|
|
|
private WhiteTranRelativeLayout mWifiLR;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 工具
|
|
|
|
|
*/
|
|
|
|
|
private WhiteTranLinearLayout mToolLL;
|
|
|
|
|
/**
|
|
|
|
|
* 更新歌曲
|
|
|
|
|
*/
|
|
|
|
|
private WhiteTranLinearLayout mUpdateMusic;
|
|
|
|
|
/**
|
|
|
|
|
* wifi开关
|
|
|
|
|
*/
|
|
|
|
|
private SwitchButton mWifiSwitchButton;
|
|
|
|
|
|
|
|
|
|
private WhiteTranRelativeLayout mDesktoplrcLR;
|
|
|
|
|
/**
|
|
|
|
|
* 桌面歌词开关
|
|
|
|
|
*/
|
|
|
|
|
private SwitchButton mDesktoplrcSwitchButton;
|
|
|
|
|
|
|
|
|
|
private WhiteTranRelativeLayout mLocklrcLR;
|
|
|
|
|
/**
|
|
|
|
|
* 锁屏歌词开关
|
|
|
|
|
*/
|
|
|
|
|
private SwitchButton mLocklrcSwitchButton;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 歌手头像
|
|
|
|
|
*/
|
|
|
|
|
private ImageView mArtistImageView;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 歌曲名称tv
|
|
|
|
|
*/
|
|
|
|
|
private TextView mSongNameTextView;
|
|
|
|
|
/**
|
|
|
|
|
* 歌手tv
|
|
|
|
|
*/
|
|
|
|
|
private TextView mSingerNameTextView;
|
|
|
|
|
/**
|
|
|
|
|
* 播放按钮
|
|
|
|
|
*/
|
|
|
|
|
private ImageView mPlayImageView;
|
|
|
|
|
/**
|
|
|
|
|
* 暂停按钮
|
|
|
|
|
*/
|
|
|
|
|
private ImageView mPauseImageView;
|
|
|
|
|
/**
|
|
|
|
|
* 下一首按钮
|
|
|
|
|
*/
|
|
|
|
|
private ImageView mNextImageView;
|
|
|
|
|
/**
|
|
|
|
|
* 歌曲进度
|
|
|
|
|
*/
|
|
|
|
|
private MusicSeekBar mMusicSeekBar;
|
|
|
|
|
|
|
|
|
|
///////////////////////////////歌曲列表弹出窗口布局/////////////////////////////////////////
|
|
|
|
|
private boolean mIsShowPopPlayList = false;
|
|
|
|
|
/**
|
|
|
|
|
* 播放列表全屏界面
|
|
|
|
|
*/
|
|
|
|
|
private RelativeLayout mPopPlayListRL;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 播放列表内容界面
|
|
|
|
|
*/
|
|
|
|
|
private RelativeLayout mPopPlayContentRL;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
private RecyclerView mPlayListRListView;
|
|
|
|
|
private PopPlayListAdapter mAdapter;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 当前播放列表歌曲总数
|
|
|
|
|
*/
|
|
|
|
|
private TextView mPopListSizeTv;
|
|
|
|
|
|
|
|
|
|
//播放模式
|
|
|
|
|
private IconfontTextView mModeAllTv;
|
|
|
|
|
private IconfontTextView mModeRandomTv;
|
|
|
|
|
private IconfontTextView mModeSingleTv;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 基本数据
|
|
|
|
|
*/
|
|
|
|
|
private ConfigInfo mConfigInfo;
|
|
|
|
|
/**
|
|
|
|
|
* 加载基本数据
|
|
|
|
|
*/
|
|
|
|
|
private final int LOAD_CONFIG_DATA = 1;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 更新计时器
|
|
|
|
|
*/
|
|
|
|
|
private final int MESSAGE_WHAT_TIMERUPDATE = 2;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
private FragmentReceiver mFragmentReceiver;
|
|
|
|
|
/**
|
|
|
|
|
* 音频广播
|
|
|
|
|
*/
|
|
|
|
|
private AudioBroadcastReceiver mAudioBroadcastReceiver;
|
|
|
|
|
/**
|
|
|
|
|
* app系统广播
|
|
|
|
|
*/
|
|
|
|
|
private AppSystemReceiver mAppSystemReceiver;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 线控 5.0以下
|
|
|
|
|
*/
|
|
|
|
|
private PhoneV4Receiver mPhoneV4Receiver;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 线控 5.0以上
|
|
|
|
|
*/
|
|
|
|
|
private PhoneReceiver mPhoneReceiver;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected int setContentLayoutResID() {
|
|
|
|
|
return R.layout.activity_main;
|
|
|
|
|
}
|
2022-02-13 14:15:48 +00:00
|
|
|
|
//是否第一次使用
|
|
|
|
|
private boolean isFirst=true;
|
2020-11-28 07:20:58 +00:00
|
|
|
|
@Override
|
|
|
|
|
protected void initViews(Bundle savedInstanceState) {
|
|
|
|
|
initSlidingMenu();
|
|
|
|
|
initViewPage();
|
|
|
|
|
initTitleViews();
|
|
|
|
|
initMenu();
|
|
|
|
|
initPlayBarViews();
|
|
|
|
|
initReceiver();
|
|
|
|
|
initService();
|
|
|
|
|
loadData();
|
2022-02-13 14:15:48 +00:00
|
|
|
|
AudioPlayerManager.newInstance(mContext).play(mMusicSeekBar.getProgress());
|
2020-11-28 07:20:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始服务
|
|
|
|
|
*/
|
|
|
|
|
private void initService() {
|
|
|
|
|
AudioPlayerService.startService(this);
|
|
|
|
|
}
|
2022-02-13 14:15:48 +00:00
|
|
|
|
private void ShowLrcView()
|
|
|
|
|
{
|
|
|
|
|
if (mSlidingMenuLayout.isShowingMenu()) {
|
|
|
|
|
mSlidingMenuLayout.hideMenu();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2020-11-28 07:20:58 +00:00
|
|
|
|
|
2022-02-13 14:15:48 +00:00
|
|
|
|
if (mIsShowPopPlayList) {
|
|
|
|
|
hidePopPlayListView();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(!ActivityManager.getInstance().existActivity(LrcActivity.class)) {
|
|
|
|
|
Intent intent = new Intent(MainActivity.this, LrcActivity.class);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
}
|
|
|
|
|
//去掉动画
|
|
|
|
|
overridePendingTransition(0, 0);
|
|
|
|
|
}
|
2020-11-28 07:20:58 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化广播
|
|
|
|
|
*/
|
|
|
|
|
private void initReceiver() {
|
|
|
|
|
|
|
|
|
|
//fragment广播
|
|
|
|
|
mFragmentReceiver = new FragmentReceiver(mContext);
|
|
|
|
|
mFragmentReceiver.setReceiverListener(new FragmentReceiver.FragmentReceiverListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onReceive(Context context, final Intent intent, final int code) {
|
|
|
|
|
mUIHandler.post(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
handleFragmentReceiver(intent, code);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理fragment
|
|
|
|
|
* @param intent
|
|
|
|
|
* @param code
|
|
|
|
|
*/
|
|
|
|
|
private void handleFragmentReceiver(final Intent intent, int code) {
|
|
|
|
|
|
|
|
|
|
switch (code) {
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_OPEN_RECOMMENDFRAGMENT:
|
|
|
|
|
|
|
|
|
|
//排行
|
|
|
|
|
Bundle recommendBundle = intent.getBundleExtra(SongFragment.ARGUMENTS_KEY);
|
|
|
|
|
SongFragment recommendSongFragment = SongFragment.newInstance();
|
|
|
|
|
recommendSongFragment.setArguments(recommendBundle);
|
|
|
|
|
mSlidingMenuOnListener.addAndShowFragment(recommendSongFragment);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_OPEN_SPECIALFRAGMENT:
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_OPEN_LOCALFRAGMENT:
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_OPEN_LIKEFRAGMENT:
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_OPEN_RECENTFRAGMENT:
|
|
|
|
|
|
|
|
|
|
Bundle bundle = intent.getBundleExtra(SongFragment.ARGUMENTS_KEY);
|
|
|
|
|
SongFragment songFragment = SongFragment.newInstance();
|
|
|
|
|
songFragment.setArguments(bundle);
|
|
|
|
|
|
|
|
|
|
mSlidingMenuOnListener.addAndShowFragment(songFragment);
|
|
|
|
|
break;
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_OPEN_DOWNLOADFRAGMENT:
|
|
|
|
|
|
|
|
|
|
DownloadMusicFragment downloadMusicFragment = DownloadMusicFragment.newInstance();
|
|
|
|
|
mSlidingMenuOnListener.addAndShowFragment(downloadMusicFragment);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case FragmentReceiver.ACTION_CODE_CLOSE_FRAGMENT:
|
|
|
|
|
|
|
|
|
|
mSlidingMenuOnListener.hideFragment();
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mFragmentReceiver.registerReceiver(mContext);
|
|
|
|
|
|
|
|
|
|
//音频广播
|
|
|
|
|
mAudioBroadcastReceiver = new AudioBroadcastReceiver();
|
|
|
|
|
mAudioBroadcastReceiver.setReceiverListener(new AudioBroadcastReceiver.AudioReceiverListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onReceive(Context context, final Intent intent, final int code) {
|
|
|
|
|
mUIHandler.post(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
handleAudioBroadcastReceiver(intent, code);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void handleAudioBroadcastReceiver(Intent intent, int code) {
|
|
|
|
|
switch (code) {
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_NULL:
|
|
|
|
|
|
|
|
|
|
//空数据
|
|
|
|
|
mSongNameTextView.setText(R.string.def_songName);
|
|
|
|
|
mSingerNameTextView.setText(R.string.def_artist);
|
|
|
|
|
mPauseImageView.setVisibility(View.INVISIBLE);
|
|
|
|
|
mPlayImageView.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
mMusicSeekBar.setEnabled(false);
|
|
|
|
|
mMusicSeekBar.setProgress(0);
|
|
|
|
|
mMusicSeekBar.setSecondaryProgress(0);
|
|
|
|
|
mMusicSeekBar.setMax(0);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.bpz);
|
|
|
|
|
mArtistImageView.setImageDrawable(new BitmapDrawable(bitmap));
|
|
|
|
|
mArtistImageView.setTag("");
|
|
|
|
|
|
|
|
|
|
//重置额外歌词状态
|
|
|
|
|
mConfigInfo.setExtraLrcStatus(ConfigInfo.EXTRALRCSTATUS_NOSHOWEXTRALRC);
|
|
|
|
|
|
|
|
|
|
if (mAdapter != null)
|
|
|
|
|
mAdapter.reshViewHolder(null);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_INIT:
|
|
|
|
|
Bundle initBundle = intent.getBundleExtra(AudioBroadcastReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
final AudioInfo initAudioInfo = initBundle.getParcelable(AudioBroadcastReceiver.ACTION_DATA_KEY);
|
|
|
|
|
if (initAudioInfo != null) {
|
|
|
|
|
mSongNameTextView.setText(initAudioInfo.getSongName());
|
|
|
|
|
mSingerNameTextView.setText(initAudioInfo.getSingerName());
|
|
|
|
|
mPauseImageView.setVisibility(View.INVISIBLE);
|
|
|
|
|
mPlayImageView.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
|
|
//设置进度条
|
|
|
|
|
mMusicSeekBar.setEnabled(true);
|
|
|
|
|
mMusicSeekBar.setMax((int) initAudioInfo.getDuration());
|
|
|
|
|
mMusicSeekBar.setProgress((int) initAudioInfo.getPlayProgress());
|
|
|
|
|
mMusicSeekBar.setSecondaryProgress(0);
|
|
|
|
|
|
|
|
|
|
//加载歌手头像
|
|
|
|
|
ImageUtil.loadSingerImage(mContext, mArtistImageView, initAudioInfo.getSingerName(), mConfigInfo.isWifi(), 400, 400, new AsyncHandlerTask(mUIHandler, mWorkerHandler), new ImageUtil.ImageLoadCallBack() {
|
|
|
|
|
@Override
|
|
|
|
|
public void callback(Bitmap bitmap) {
|
|
|
|
|
//if (bitmap != null) {
|
|
|
|
|
AudioBroadcastReceiver.sendNotifiyImgLoadedReceiver(mContext, initAudioInfo);
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//加载歌词
|
|
|
|
|
String keyWords = initAudioInfo.getTitle();
|
|
|
|
|
LyricsManager.newInstance(mContext).loadLyrics(initAudioInfo.getFilePath(),keyWords, keyWords, initAudioInfo.getDuration() + "", initAudioInfo.getHash(), mConfigInfo.isWifi(), new AsyncHandlerTask(mUIHandler, mWorkerHandler), null);
|
|
|
|
|
|
|
|
|
|
if (mAdapter != null) {
|
|
|
|
|
|
|
|
|
|
if (mIsShowPopPlayList) {
|
|
|
|
|
//定位
|
|
|
|
|
int position = AudioPlayerManager.newInstance(mContext).getCurSongIndex(mConfigInfo.getAudioInfos(), mConfigInfo.getPlayHash());
|
|
|
|
|
if (position != -1) {
|
|
|
|
|
((LinearLayoutManager) mPlayListRListView.getLayoutManager()).scrollToPositionWithOffset(position, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mAdapter.reshViewHolder(initAudioInfo.getHash());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (mAdapter != null)
|
|
|
|
|
mAdapter.reshViewHolder(null);
|
|
|
|
|
}
|
2022-02-13 14:15:48 +00:00
|
|
|
|
//region 加载歌词界面
|
|
|
|
|
//endregion
|
2020-11-28 07:20:58 +00:00
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_PLAY:
|
|
|
|
|
if (mPauseImageView.getVisibility() != View.VISIBLE)
|
|
|
|
|
mPauseImageView.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
|
|
if (mPlayImageView.getVisibility() != View.INVISIBLE)
|
|
|
|
|
mPlayImageView.setVisibility(View.INVISIBLE);
|
2022-02-13 14:15:48 +00:00
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_SHOWLRCVIEW:
|
|
|
|
|
ShowLrcView();
|
2020-11-28 07:20:58 +00:00
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_PLAYING:
|
|
|
|
|
|
|
|
|
|
Bundle playingBundle = intent.getBundleExtra(AudioBroadcastReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
AudioInfo playingAudioInfo = playingBundle.getParcelable(AudioBroadcastReceiver.ACTION_DATA_KEY);
|
|
|
|
|
if (playingAudioInfo != null) {
|
|
|
|
|
mMusicSeekBar.setProgress((int) playingAudioInfo.getPlayProgress());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_STOP:
|
|
|
|
|
//暂停完成
|
|
|
|
|
if (mPauseImageView.getVisibility() != View.INVISIBLE)
|
|
|
|
|
mPauseImageView.setVisibility(View.INVISIBLE);
|
|
|
|
|
|
|
|
|
|
if (mPlayImageView.getVisibility() != View.VISIBLE)
|
|
|
|
|
mPlayImageView.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_SEEKTO:
|
|
|
|
|
Bundle seektoBundle = intent.getBundleExtra(AudioBroadcastReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
AudioInfo seektoAudioInfo = seektoBundle.getParcelable(AudioBroadcastReceiver.ACTION_DATA_KEY);
|
|
|
|
|
if (seektoAudioInfo != null) {
|
|
|
|
|
mMusicSeekBar.setProgress(seektoAudioInfo.getPlayProgress());
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_DOWNLOAD_FINISH:
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_DOWNLOADONEDLINESONG:
|
|
|
|
|
if (!mIsShowPopPlayList || mAdapter == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//网络歌曲下载完成
|
|
|
|
|
Bundle downloadedBundle = intent.getBundleExtra(AudioBroadcastReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
DownloadTask downloadedTask = downloadedBundle.getParcelable(AudioBroadcastReceiver.ACTION_DATA_KEY);
|
|
|
|
|
String downloadedHash = downloadedTask.getTaskId();
|
|
|
|
|
if (downloadedTask != null && !TextUtils.isEmpty(downloadedHash)) {
|
|
|
|
|
mAdapter.reshViewHolder(downloadedHash);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_UPDATE_PLAYLIST:
|
|
|
|
|
if (!mIsShowPopPlayList || mAdapter == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置当前歌曲数据
|
|
|
|
|
List<AudioInfo> audioInfoList = mConfigInfo.getAudioInfos();
|
|
|
|
|
mPopListSizeTv.setText(audioInfoList.size() + "");
|
|
|
|
|
|
|
|
|
|
mAdapter.notifyDataSetChanged();
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_DOWNLOADONLINESONG:
|
|
|
|
|
//网络歌曲下载中
|
|
|
|
|
Bundle downloadOnlineSongBundle = intent.getBundleExtra(AudioBroadcastReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
DownloadTask downloadingTask = downloadOnlineSongBundle.getParcelable(AudioBroadcastReceiver.ACTION_DATA_KEY);
|
|
|
|
|
String hash = mConfigInfo.getPlayHash();
|
|
|
|
|
AudioInfo audioInfo = AudioPlayerManager.newInstance(mContext).getCurSong(hash);
|
|
|
|
|
if (audioInfo != null && downloadingTask != null && !TextUtils.isEmpty(hash) && hash.equals(downloadingTask.getTaskId())) {
|
|
|
|
|
int downloadedSize = DownloadThreadInfoDB.getDownloadedSize(mContext, downloadingTask.getTaskId(), OnLineAudioManager.mThreadNum);
|
|
|
|
|
double pre = downloadedSize * 1.0 / audioInfo.getFileSize();
|
|
|
|
|
int downloadProgress = (int) (mMusicSeekBar.getMax() * pre);
|
|
|
|
|
mMusicSeekBar.setSecondaryProgress(downloadProgress);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_NOTIFY_DESLRC_HIDE_ACTION:
|
|
|
|
|
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(false);
|
|
|
|
|
mConfigInfo.setShowDesktopLrc(false).save();
|
|
|
|
|
//
|
|
|
|
|
AudioBroadcastReceiver.sendReceiver(mContext, AudioBroadcastReceiver.ACTION_CODE_NOTIFY_DESLRC);
|
|
|
|
|
//关闭桌面歌词
|
|
|
|
|
HPApplication applicationTtemp = (HPApplication) getApplication();
|
|
|
|
|
applicationTtemp.stopFloatService();
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case AudioBroadcastReceiver.ACTION_CODE_NOTIFY_DESLRC_SHOW_ACTION:
|
|
|
|
|
|
|
|
|
|
if (!hasShowFloatWindowPermission()) return;
|
|
|
|
|
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(true);
|
|
|
|
|
mConfigInfo.setShowDesktopLrc(true).save();
|
|
|
|
|
//
|
|
|
|
|
AudioBroadcastReceiver.sendReceiver(mContext, AudioBroadcastReceiver.ACTION_CODE_NOTIFY_DESLRC);
|
|
|
|
|
//启动桌面歌词
|
|
|
|
|
HPApplication application = (HPApplication) getApplication();
|
|
|
|
|
application.startFloatService();
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mAudioBroadcastReceiver.registerReceiver(mContext);
|
|
|
|
|
|
|
|
|
|
//系统
|
|
|
|
|
mAppSystemReceiver = new AppSystemReceiver();
|
|
|
|
|
mAppSystemReceiver.setReceiverListener(new AppSystemReceiver.AppSystemReceiverListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onReceive(Context context, final Intent intent, final int code) {
|
|
|
|
|
mUIHandler.post(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
handleAppSystemBroadcastReceiver(intent, code);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void handleAppSystemBroadcastReceiver(Intent intent, int code) {
|
|
|
|
|
switch (code) {
|
|
|
|
|
case AppSystemReceiver.ACTION_CODE_TOAST_ERRORMSG:
|
|
|
|
|
Bundle toastErrorMSGBundle = intent.getBundleExtra(AppSystemReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
String msg = toastErrorMSGBundle.getString(AppSystemReceiver.ACTION_DATA_KEY);
|
|
|
|
|
ToastUtil.showTextToast(mContext, msg);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case AppSystemReceiver.ACTION_CODE_TIMER_SETTING:
|
|
|
|
|
mUIHandler.removeMessages(MESSAGE_WHAT_TIMERUPDATE);
|
|
|
|
|
//设置timer
|
|
|
|
|
case AppSystemReceiver.ACTION_CODE_TIMER_UPDATE:
|
|
|
|
|
Message tempMsg = Message.obtain();
|
|
|
|
|
tempMsg.what = MESSAGE_WHAT_TIMERUPDATE;
|
|
|
|
|
|
|
|
|
|
Bundle timerBundle = intent.getBundleExtra(AppSystemReceiver.ACTION_BUNDLEKEY);
|
|
|
|
|
TimerInfo timerInfo = timerBundle.getParcelable(AppSystemReceiver.ACTION_DATA_KEY);
|
|
|
|
|
mConfigInfo.setTimerInfo(timerInfo);
|
|
|
|
|
if (timerInfo != null) {
|
|
|
|
|
tempMsg.obj = timerInfo;
|
|
|
|
|
mUIHandler.sendMessageDelayed(tempMsg, 1000);
|
|
|
|
|
} else {
|
|
|
|
|
mUIHandler.sendMessage(tempMsg);
|
|
|
|
|
}
|
|
|
|
|
//更新
|
|
|
|
|
break;
|
|
|
|
|
case AppSystemReceiver.ACTION_CODE_SCREEN_OFF:
|
|
|
|
|
//关闭屏幕
|
|
|
|
|
if (mConfigInfo.isShowLockScreenLrc()) {
|
|
|
|
|
|
|
|
|
|
Intent lockIntent = new Intent(MainActivity.this,
|
|
|
|
|
LockActivity.class);
|
|
|
|
|
lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
|
|
|
|
|
|
startActivity(lockIntent);
|
|
|
|
|
//去掉动画
|
|
|
|
|
overridePendingTransition(0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mAppSystemReceiver.registerReceiver(mContext);
|
|
|
|
|
|
|
|
|
|
//线控
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
|
|
|
mPhoneReceiver = new PhoneReceiver(mContext);
|
|
|
|
|
mPhoneReceiver.registerReceiver(mContext);
|
|
|
|
|
} else {
|
|
|
|
|
mPhoneV4Receiver = new PhoneV4Receiver(mContext);
|
|
|
|
|
mPhoneV4Receiver.registerReceiver(mContext);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 加载数据
|
|
|
|
|
*/
|
|
|
|
|
private void loadData() {
|
|
|
|
|
//加载数据
|
|
|
|
|
mWorkerHandler.sendEmptyMessage(LOAD_CONFIG_DATA);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void handleUIMessage(Message msg) {
|
|
|
|
|
switch (msg.what) {
|
|
|
|
|
case LOAD_CONFIG_DATA:
|
|
|
|
|
resetMenuPageData();
|
|
|
|
|
break;
|
|
|
|
|
case MESSAGE_WHAT_TIMERUPDATE:
|
|
|
|
|
|
|
|
|
|
TimerInfo timerInfo = (TimerInfo) msg.obj;
|
|
|
|
|
if (timerInfo != null) {
|
|
|
|
|
timerInfo.setCurTime(timerInfo.getCurTime() - 1000);
|
|
|
|
|
mTimerTv.setText(TimeUtil.parseTimeToTimerString(timerInfo.getCurTime()));
|
|
|
|
|
if (timerInfo.getCurTime() <= 0) {
|
|
|
|
|
//定时关闭应用
|
|
|
|
|
ActivityManager.getInstance().exit();
|
|
|
|
|
} else {
|
|
|
|
|
AppSystemReceiver.sendTimerUpdateMsgReceiver(mContext, timerInfo);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
mTimerTv.setText("");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重新设置menu页面的数据
|
|
|
|
|
*/
|
|
|
|
|
private void resetMenuPageData() {
|
|
|
|
|
mWifiSwitchButton.setChecked(mConfigInfo.isWifi());
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(mConfigInfo.isShowDesktopLrc());
|
|
|
|
|
mLocklrcSwitchButton.setChecked(mConfigInfo.isShowLockScreenLrc());
|
|
|
|
|
|
|
|
|
|
//wifi
|
|
|
|
|
mWifiSwitchButton.setOnCheckedChangeListener(new SwitchButton.OnCheckedChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onCheckedChanged(SwitchButton view, boolean isChecked) {
|
|
|
|
|
if (mConfigInfo.isWifi() != isChecked)
|
|
|
|
|
mConfigInfo.setWifi(isChecked).save();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//桌面
|
|
|
|
|
mDesktoplrcSwitchButton.setOnCheckedChangeListener(new SwitchButton.OnCheckedChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onCheckedChanged(SwitchButton view, boolean isChecked) {
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
if (!hasShowFloatWindowPermission()) return;
|
|
|
|
|
}
|
|
|
|
|
if (mConfigInfo.isShowDesktopLrc() != isChecked) {
|
|
|
|
|
mConfigInfo.setShowDesktopLrc(isChecked).save();
|
|
|
|
|
//
|
|
|
|
|
AudioBroadcastReceiver.sendReceiver(mContext, AudioBroadcastReceiver.ACTION_CODE_NOTIFY_DESLRC);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//锁屏
|
|
|
|
|
mLocklrcSwitchButton.setOnCheckedChangeListener(new SwitchButton.OnCheckedChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onCheckedChanged(SwitchButton view, boolean isChecked) {
|
|
|
|
|
boolean askLockPermission = PreferencesUtil.getBoolean(mContext, Constants.ASK_LOCK_PERMISSION, true);
|
|
|
|
|
if (askLockPermission) {
|
|
|
|
|
//弹出窗口显示
|
|
|
|
|
|
|
|
|
|
String tipMsg = getString(R.string.locklrc_tip);
|
|
|
|
|
DialogUIUtils.showMdAlert(MainActivity.this, getString(R.string.tip_title), tipMsg, new DialogUIListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onPositive() {
|
|
|
|
|
|
|
|
|
|
PreferencesUtil.putBoolean(mContext, Constants.ASK_LOCK_PERMISSION, false);
|
|
|
|
|
|
|
|
|
|
//跳转权限设置页面
|
|
|
|
|
IntentUtil.gotoPermissionSetting(MainActivity.this);
|
|
|
|
|
mLocklrcSwitchButton.setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onNegative() {
|
|
|
|
|
mLocklrcSwitchButton.setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onCancle() {
|
|
|
|
|
mLocklrcSwitchButton.setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}).setCancelable(true, false).show();
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mConfigInfo.isShowLockScreenLrc() != isChecked)
|
|
|
|
|
mConfigInfo.setShowLockScreenLrc(isChecked).save();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void handleWorkerMessage(Message msg) {
|
|
|
|
|
switch (msg.what) {
|
|
|
|
|
case LOAD_CONFIG_DATA:
|
|
|
|
|
|
|
|
|
|
mConfigInfo = ConfigInfo.obtain();
|
|
|
|
|
AudioPlayerManager.newInstance(mContext).init();
|
|
|
|
|
|
|
|
|
|
mUIHandler.sendEmptyMessage(LOAD_CONFIG_DATA);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化slidingmenu
|
|
|
|
|
*/
|
|
|
|
|
private void initSlidingMenu() {
|
|
|
|
|
mSlidingMenuLayout = findViewById(R.id.slidingMenuLayout);
|
|
|
|
|
|
|
|
|
|
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
|
|
|
|
|
Display display = wm.getDefaultDisplay();
|
|
|
|
|
DisplayMetrics displayMetrics = new DisplayMetrics();
|
|
|
|
|
display.getMetrics(displayMetrics);
|
|
|
|
|
int screensWidth = displayMetrics.widthPixels;
|
|
|
|
|
int menuViewWidth = screensWidth / 4 * 3;
|
|
|
|
|
|
|
|
|
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, AppBarUtil.getStatusBarHeight(getApplicationContext()));
|
|
|
|
|
//菜单界面
|
|
|
|
|
LinearLayout menuView = (LinearLayout) LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_menu, null);
|
|
|
|
|
FrameLayout.LayoutParams menuLayoutParams = new FrameLayout.LayoutParams(menuViewWidth, FrameLayout.LayoutParams.MATCH_PARENT);
|
|
|
|
|
boolean isAddStatusBar = AppBarUtil.isAddStatusBar();
|
|
|
|
|
if (isAddStatusBar) {
|
|
|
|
|
View menuStatusBarView = menuView.findViewById(R.id.status_bar_view);
|
|
|
|
|
menuStatusBarView.setVisibility(View.VISIBLE);
|
|
|
|
|
menuStatusBarView.setLayoutParams(lp);
|
|
|
|
|
}
|
|
|
|
|
//主界面
|
|
|
|
|
LinearLayout mainView = (LinearLayout) LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_main, null);
|
|
|
|
|
FrameLayout.LayoutParams mainLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
|
|
|
|
|
mPlayerBarLL = findViewById(R.id.playerBar);
|
|
|
|
|
mPlayerBarLL.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
2022-02-13 14:15:48 +00:00
|
|
|
|
ShowLrcView();
|
2020-11-28 07:20:58 +00:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//mSlidingMenuLayout.addIgnoreHorizontalView(mPlayerBarLL);
|
|
|
|
|
mSlidingMenuLayout.addOnPageChangeListener(new SlidingMenuLayout.OnPageChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onMainPageScrolled(int leftx) {
|
|
|
|
|
mPlayerBarLL.setTranslationX(leftx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onHideFragment(Fragment fragment) {
|
|
|
|
|
if(fragment != null && fragment instanceof SearchFragment){
|
|
|
|
|
//强制关闭输入法
|
|
|
|
|
hideInput(mContext,mSlidingMenuLayout);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
mViewPager = mainView.findViewById(R.id.viewpage);
|
|
|
|
|
|
|
|
|
|
//添加状态栏
|
|
|
|
|
if (isAddStatusBar) {
|
|
|
|
|
View mainStatusBarView = mainView.findViewById(R.id.status_bar_view);
|
|
|
|
|
mainStatusBarView.setBackgroundColor(ColorUtil.parserColor(ContextCompat.getColor(getApplicationContext(), R.color.defColor)));
|
|
|
|
|
mainStatusBarView.setVisibility(View.VISIBLE);
|
|
|
|
|
mainStatusBarView.setLayoutParams(lp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
mSlidingMenuLayout.setFragmentPaintFade(true);
|
|
|
|
|
mSlidingMenuLayout.setAllowScale(false);
|
|
|
|
|
mSlidingMenuLayout.onAttachView(menuLayoutParams, menuView, mainLayoutParams, mainView);
|
|
|
|
|
mSlidingMenuOnListener = new SlidingMenuLayout.SlidingMenuOnListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void addAndShowFragment(Fragment fragment) {
|
|
|
|
|
mSlidingMenuLayout.addAndShowFragment(getSupportFragmentManager(), fragment);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void hideFragment() {
|
|
|
|
|
mSlidingMenuLayout.hideFragment();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 强制隐藏输入法键盘
|
|
|
|
|
*
|
|
|
|
|
* @param context Context
|
|
|
|
|
* @param view EditText
|
|
|
|
|
*/
|
|
|
|
|
private void hideInput(Context context, View view) {
|
|
|
|
|
InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
|
|
|
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化viewpage
|
|
|
|
|
*/
|
|
|
|
|
private void initViewPage() {
|
|
|
|
|
|
|
|
|
|
ArrayList<Class> fragmentsClass = new ArrayList<Class>();
|
|
|
|
|
//
|
|
|
|
|
fragmentsClass.add(MeFragment.class);
|
|
|
|
|
fragmentsClass.add(LastSongFragment.class);
|
|
|
|
|
fragmentsClass.add(RecommendFragment.class);
|
|
|
|
|
fragmentsClass.add(SpecialFragment.class);
|
|
|
|
|
|
|
|
|
|
TabFragmentAdapter adapter = new TabFragmentAdapter(getSupportFragmentManager(), fragmentsClass);
|
|
|
|
|
mViewPager.setAdapter(adapter);
|
|
|
|
|
mViewPager.setOffscreenPageLimit(fragmentsClass.size());
|
|
|
|
|
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onPageSelected(int position) {
|
|
|
|
|
|
|
|
|
|
if (position == 0) {
|
|
|
|
|
mSlidingMenuLayout.setDragType(SlidingMenuLayout.LEFT_TO_RIGHT);
|
|
|
|
|
} else {
|
|
|
|
|
mSlidingMenuLayout.setDragType(SlidingMenuLayout.NONE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (position != mSelectedIndex) {
|
|
|
|
|
mTabImageButton[mSelectedIndex].setSelected(false);
|
|
|
|
|
mTabImageButton[position].setSelected(true);
|
|
|
|
|
mSelectedIndex = position;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onPageScrollStateChanged(int state) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mViewPager.setCurrentItem(mSelectedIndex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化标题栏视图
|
|
|
|
|
*/
|
|
|
|
|
private void initTitleViews() {
|
|
|
|
|
//图标
|
|
|
|
|
mIconButton = findViewById(R.id.iconImageButton);
|
|
|
|
|
mIconButton.setConvert(true);
|
|
|
|
|
mIconButton.setPressed(false);
|
|
|
|
|
mIconButton.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
mSlidingMenuLayout.showMenu();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//初始化tab菜单
|
|
|
|
|
|
|
|
|
|
mTabImageButton = new IconfontIndicatorTextView[4];
|
|
|
|
|
int index = 0;
|
|
|
|
|
//我的tab
|
|
|
|
|
mTabImageButton[index] = findViewById(R.id.myImageButton);
|
|
|
|
|
mTabImageButton[index].setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
|
|
|
|
|
boolean selected = mTabImageButton[0].isSelected();
|
|
|
|
|
if (!selected) {
|
|
|
|
|
mViewPager.setCurrentItem(0, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mTabImageButton[index++].setSelected(false);
|
|
|
|
|
//新歌
|
|
|
|
|
mTabImageButton[index] = findViewById(R.id.lastSongImageButton);
|
|
|
|
|
mTabImageButton[index].setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
|
|
|
|
|
boolean selected = mTabImageButton[1].isSelected();
|
|
|
|
|
if (!selected) {
|
|
|
|
|
mViewPager.setCurrentItem(1, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mTabImageButton[index++].setSelected(false);
|
|
|
|
|
|
|
|
|
|
//排行
|
|
|
|
|
mTabImageButton[index] = findViewById(R.id.recommendImageButton);
|
|
|
|
|
mTabImageButton[index].setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
boolean selected = mTabImageButton[2].isSelected();
|
|
|
|
|
if (!selected) {
|
|
|
|
|
mViewPager.setCurrentItem(2, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mTabImageButton[index++].setSelected(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//歌单
|
|
|
|
|
mTabImageButton[index] = findViewById(R.id.specialImageButton);
|
|
|
|
|
mTabImageButton[index].setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
boolean selected = mTabImageButton[3].isSelected();
|
|
|
|
|
if (!selected) {
|
|
|
|
|
mViewPager.setCurrentItem(3, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mTabImageButton[index++].setSelected(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//搜索
|
|
|
|
|
mSearchButton = findViewById(R.id.searchImageButton);
|
|
|
|
|
mSearchButton.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
|
|
|
|
|
SearchFragment searchFragment = SearchFragment.newInstance();
|
|
|
|
|
mSlidingMenuOnListener.addAndShowFragment(searchFragment);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mSearchButton.setConvert(true);
|
|
|
|
|
mSearchButton.setPressed(false);
|
|
|
|
|
mTabImageButton[mSelectedIndex].setSelected(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化菜单栏
|
|
|
|
|
*/
|
|
|
|
|
private void initMenu() {
|
|
|
|
|
//工具
|
|
|
|
|
mToolLL = findViewById(R.id.tool_ll);
|
|
|
|
|
mToolLL.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
Intent intent = new Intent(MainActivity.this, ToolActivity.class);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
//去掉动画
|
|
|
|
|
overridePendingTransition(0, 0);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//更新歌曲
|
|
|
|
|
mUpdateMusic = findViewById(R.id.updateMusic);
|
|
|
|
|
mUpdateMusic.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
//1.扫描本地歌曲列表
|
|
|
|
|
Toast.makeText(getApplicationContext(), "正在更新歌曲,请耐心等待!", Toast.LENGTH_SHORT).show();
|
|
|
|
|
List<AudioInfo> audioInfos_db= AudioInfoDB.getLocalAudios(mContext);
|
|
|
|
|
for (int i = 0; i < audioInfos_db.size(); i++) {
|
|
|
|
|
AudioInfo temp = audioInfos_db.get(i);
|
|
|
|
|
try {
|
|
|
|
|
if(temp.IsOnlyMV())
|
|
|
|
|
{
|
|
|
|
|
File file = new File(temp.getMvPath());
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
|
AudioInfoDB.deleteAudio(mContext, temp.getHash(), false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
File file = new File(temp.getFilePath());
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
|
AudioInfoDB.deleteAudio(mContext, temp.getHash(), false);
|
|
|
|
|
}
|
2021-02-18 11:54:23 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if(temp.getMvPath().length()>0) {
|
|
|
|
|
File file_mv = new File(temp.getMvPath());
|
|
|
|
|
if (!file_mv.exists()) { //如果歌曲存在,但MV不存在
|
|
|
|
|
temp.setMvHash("");
|
|
|
|
|
temp.setMvPath("");
|
|
|
|
|
AudioInfoDB.updateVideo(mContext, temp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-11-28 07:20:58 +00:00
|
|
|
|
}
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//添加歌曲
|
|
|
|
|
List<AudioInfo> audioInfos = com.zlm.hp.util.MediaUtil.scanLocalMusic(getApplicationContext(), null);
|
|
|
|
|
if (audioInfos != null && audioInfos.size() > 0) {
|
|
|
|
|
AudioInfoDB.addAudioInfos2(getApplicationContext(), audioInfos);
|
|
|
|
|
}
|
|
|
|
|
//添加MV
|
|
|
|
|
List<AudioInfo> videoInfos = com.zlm.hp.util.MediaUtil.scanLocalMV(getApplicationContext(), null);
|
|
|
|
|
if (videoInfos != null && videoInfos.size() > 0) {
|
|
|
|
|
AudioInfoDB.addVideoInfos(getApplicationContext(), videoInfos);
|
|
|
|
|
}
|
|
|
|
|
AudioBroadcastReceiver.sendReceiver(getApplicationContext(), AudioBroadcastReceiver.ACTION_CODE_UPDATE_LOCAL);
|
|
|
|
|
Toast.makeText(getApplicationContext(), "歌曲更新完成。", Toast.LENGTH_SHORT).show();
|
|
|
|
|
//去掉动画
|
|
|
|
|
overridePendingTransition(0, 0);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mTimerTv = findViewById(R.id.timer_text);
|
|
|
|
|
//定时关闭
|
|
|
|
|
mTimerPowerOffLL = findViewById(R.id.timer_power_off_ll);
|
|
|
|
|
mTimerPowerOffLL.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
|
|
|
|
|
Intent intent = new Intent(MainActivity.this, TimerPowerOffActivity.class);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
//去掉动画
|
|
|
|
|
overridePendingTransition(0, 0);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//设置
|
|
|
|
|
mSettingLL = findViewById(R.id.setting_ll);
|
|
|
|
|
mSettingLL.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
|
|
|
|
|
Intent intent = new Intent(MainActivity.this, SettingActivity.class);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
//去掉动画
|
|
|
|
|
overridePendingTransition(0, 0);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//退出
|
|
|
|
|
mExitLL = findViewById(R.id.exit_ll);
|
|
|
|
|
mExitLL.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
String tipMsg = getString(R.string.exit_app_tip);
|
|
|
|
|
DialogUIUtils.showMdAlert(MainActivity.this, getString(R.string.tip_title), tipMsg, new DialogUIListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onPositive() {
|
|
|
|
|
ActivityManager.getInstance().exit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onNegative() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}).setCancelable(true, false).show();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//wifi开关
|
|
|
|
|
mWifiLR = findViewById(R.id.wifi_lr);
|
|
|
|
|
mWifiLR.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
boolean flag = mWifiSwitchButton.isChecked();
|
|
|
|
|
mWifiSwitchButton.setChecked(!flag);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mWifiSwitchButton = findViewById(R.id.wifi_switch);
|
|
|
|
|
|
|
|
|
|
//桌面歌词开关
|
|
|
|
|
mDesktoplrcLR = findViewById(R.id.desktoplrc_lr);
|
|
|
|
|
mDesktoplrcLR.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
boolean flag = mDesktoplrcSwitchButton.isChecked();
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(!flag);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mDesktoplrcSwitchButton = findViewById(R.id.desktoplrc_switch);
|
|
|
|
|
|
|
|
|
|
//锁屏歌词开关
|
|
|
|
|
mLocklrcLR = findViewById(R.id.locklrc_lr);
|
|
|
|
|
mLocklrcLR.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
boolean flag = mLocklrcSwitchButton.isChecked();
|
|
|
|
|
mLocklrcSwitchButton.setChecked(!flag);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mLocklrcSwitchButton = findViewById(R.id.locklrc_switch);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 是否有显示桌面的权限
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private boolean hasShowFloatWindowPermission() {
|
|
|
|
|
if (!AppOpsUtils.allowFloatWindow(getApplication())) {
|
|
|
|
|
|
|
|
|
|
String tipMsg = getString(R.string.desktoplrc_tip);
|
|
|
|
|
DialogUIUtils.showMdAlert(MainActivity.this, getString(R.string.tip_title), tipMsg, new DialogUIListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onPositive() {
|
|
|
|
|
//跳转权限设置页面
|
|
|
|
|
IntentUtil.gotoPermissionSetting(MainActivity.this);
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onNegative() {
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onCancle() {
|
|
|
|
|
mDesktoplrcSwitchButton.setChecked(false);
|
|
|
|
|
}
|
|
|
|
|
}).setCancelable(true, false).show();
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化底部bar视图
|
|
|
|
|
*/
|
|
|
|
|
private void initPlayBarViews() {
|
|
|
|
|
mArtistImageView = findViewById(R.id.play_bar_artist);
|
|
|
|
|
//
|
|
|
|
|
mSongNameTextView = findViewById(R.id.songName);
|
|
|
|
|
mSingerNameTextView = findViewById(R.id.singerName);
|
|
|
|
|
//播放
|
|
|
|
|
mPlayImageView = findViewById(R.id.bar_play);
|
|
|
|
|
mPlayImageView.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
AudioPlayerManager.newInstance(mContext).play(mMusicSeekBar.getProgress());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//暂停
|
|
|
|
|
mPauseImageView = findViewById(R.id.bar_pause);
|
|
|
|
|
mPauseImageView.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
AudioPlayerManager.newInstance(mContext).pause();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//下一首
|
|
|
|
|
mNextImageView = findViewById(R.id.bar_next);
|
|
|
|
|
mNextImageView.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
AudioPlayerManager.newInstance(mContext).next();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
mMusicSeekBar = findViewById(R.id.seekBar);
|
|
|
|
|
mMusicSeekBar.setOnMusicListener(new MusicSeekBar.OnMusicListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public String getTimeText() {
|
|
|
|
|
return MediaUtil.formatTime(mMusicSeekBar.getProgress());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getLrcText() {
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onProgressChanged(MusicSeekBar musicSeekBar) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onTrackingTouchStart(MusicSeekBar musicSeekBar) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onTrackingTouchFinish(MusicSeekBar musicSeekBar) {
|
|
|
|
|
int progress = mMusicSeekBar.getProgress();
|
|
|
|
|
AudioInfo audioInfo = AudioPlayerManager.newInstance(mContext).getCurSong(mConfigInfo.getPlayHash());
|
|
|
|
|
if (audioInfo != null && progress <= audioInfo.getDuration()) {
|
|
|
|
|
audioInfo.setPlayProgress(progress);
|
|
|
|
|
AudioPlayerManager.newInstance(mContext).seekto(audioInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//播放列表按钮
|
|
|
|
|
ImageView listMenuImg = findViewById(R.id.list_menu);
|
|
|
|
|
listMenuImg.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
if (mIsShowPopPlayList) {
|
|
|
|
|
hidePopPlayListView();
|
|
|
|
|
} else {
|
|
|
|
|
if (mPopPlayListRL == null) {
|
|
|
|
|
initPopPlayListViews();
|
|
|
|
|
}
|
|
|
|
|
showPopPlayListView();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化歌曲列表弹出窗口视图
|
|
|
|
|
*/
|
|
|
|
|
private void initPopPlayListViews() {
|
|
|
|
|
ViewStub stub = findViewById(R.id.viewstub_main_pop);
|
|
|
|
|
stub.inflate();
|
|
|
|
|
|
|
|
|
|
mPlayListRListView = findViewById(R.id.curplaylist_recyclerView);
|
|
|
|
|
//初始化内容视图
|
|
|
|
|
mPlayListRListView.setLayoutManager(new LinearLayoutManager(mContext));
|
|
|
|
|
mPlayListRListView.setPadding(0, 0, 0, getResources().getDimensionPixelSize(R.dimen.bar_height));
|
|
|
|
|
|
|
|
|
|
//全屏视图
|
|
|
|
|
mPopPlayListRL = findViewById(R.id.list_pop);
|
|
|
|
|
mPopPlayListRL.setVisibility(View.INVISIBLE);
|
|
|
|
|
mPopPlayListRL.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
hidePopPlayListView();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//内容布局
|
|
|
|
|
mPopPlayContentRL = findViewById(R.id.pop_content);
|
|
|
|
|
mPopListSizeTv = findViewById(R.id.list_size);
|
|
|
|
|
//播放模式
|
|
|
|
|
mModeAllTv = findViewById(R.id.modeAll);
|
|
|
|
|
mModeRandomTv = findViewById(R.id.modeRandom);
|
|
|
|
|
mModeSingleTv = findViewById(R.id.modeSingle);
|
|
|
|
|
|
|
|
|
|
mModeAllTv.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
initPlayModeView(1, mModeAllTv, mModeRandomTv, mModeSingleTv, true);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
mModeRandomTv.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
initPlayModeView(3, mModeAllTv, mModeRandomTv, mModeSingleTv, true);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
mModeSingleTv.setOnClickListener(new View.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
initPlayModeView(0, mModeAllTv, mModeRandomTv, mModeSingleTv, true);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化播放列表播放模式
|
|
|
|
|
*
|
|
|
|
|
* @param playMode
|
|
|
|
|
* @param modeAllImg
|
|
|
|
|
* @param modeRandomImg
|
|
|
|
|
* @param modeSingleImg
|
|
|
|
|
*/
|
|
|
|
|
private void initPlayModeView(int playMode, IconfontTextView modeAllImg, IconfontTextView modeRandomImg, IconfontTextView modeSingleImg, boolean isTipShow) {
|
|
|
|
|
if (playMode == 0) {
|
|
|
|
|
if (isTipShow)
|
|
|
|
|
ToastUtil.showTextToast(mContext, getString(R.string.mode_all_text));
|
|
|
|
|
modeAllImg.setVisibility(View.VISIBLE);
|
|
|
|
|
modeRandomImg.setVisibility(View.INVISIBLE);
|
|
|
|
|
modeSingleImg.setVisibility(View.INVISIBLE);
|
|
|
|
|
} else if (playMode == 1) {
|
|
|
|
|
if (isTipShow)
|
|
|
|
|
ToastUtil.showTextToast(mContext, getString(R.string.mode_random_text));
|
|
|
|
|
modeAllImg.setVisibility(View.INVISIBLE);
|
|
|
|
|
modeRandomImg.setVisibility(View.VISIBLE);
|
|
|
|
|
modeSingleImg.setVisibility(View.INVISIBLE);
|
|
|
|
|
} else {
|
|
|
|
|
if (isTipShow)
|
|
|
|
|
ToastUtil.showTextToast(mContext, getString(R.string.mode_single_text));
|
|
|
|
|
modeAllImg.setVisibility(View.INVISIBLE);
|
|
|
|
|
modeRandomImg.setVisibility(View.INVISIBLE);
|
|
|
|
|
modeSingleImg.setVisibility(View.VISIBLE);
|
|
|
|
|
}
|
|
|
|
|
//保存
|
|
|
|
|
if (isTipShow)
|
|
|
|
|
mConfigInfo.setPlayModel(playMode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 显示歌曲列表弹出窗口
|
|
|
|
|
*/
|
|
|
|
|
private void showPopPlayListView() {
|
|
|
|
|
//设置当前播放模式
|
|
|
|
|
initPlayModeView(mConfigInfo.getPlayModel(), mModeAllTv, mModeRandomTv, mModeSingleTv, false);
|
|
|
|
|
//设置当前歌曲数据
|
|
|
|
|
List<AudioInfo> audioInfoList = mConfigInfo.getAudioInfos();
|
|
|
|
|
mPopListSizeTv.setText(audioInfoList.size() + "");
|
|
|
|
|
mAdapter = new PopPlayListAdapter(mContext, audioInfoList, mUIHandler, mWorkerHandler);
|
|
|
|
|
mPlayListRListView.setAdapter(mAdapter);
|
|
|
|
|
|
|
|
|
|
//定位
|
|
|
|
|
int position = AudioPlayerManager.newInstance(mContext).getCurSongIndex(mConfigInfo.getAudioInfos(), mConfigInfo.getPlayHash());
|
|
|
|
|
if (position != -1) {
|
|
|
|
|
((LinearLayoutManager) mPlayListRListView.getLayoutManager()).scrollToPositionWithOffset(position, 0);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 如果该界面还没初始化,则监听
|
|
|
|
|
*/
|
|
|
|
|
if (mPopPlayContentRL.getHeight() == 0) {
|
|
|
|
|
mPopPlayContentRL.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onGlobalLayout() {
|
|
|
|
|
mPopPlayContentRL.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
|
|
|
|
showPopPlayListViewAnimation();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
showPopPlayListViewAnimation();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 显示动画
|
|
|
|
|
*/
|
|
|
|
|
private void showPopPlayListViewAnimation() {
|
|
|
|
|
mPopPlayListRL.setVisibility(View.VISIBLE);
|
|
|
|
|
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, mPopPlayContentRL.getHeight(), 0);
|
|
|
|
|
translateAnimation.setDuration(250);//设置动画持续时间
|
|
|
|
|
translateAnimation.setFillAfter(true);
|
|
|
|
|
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onAnimationStart(Animation animation) {
|
|
|
|
|
mIsShowPopPlayList = true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onAnimationEnd(Animation animation) {
|
|
|
|
|
mPopPlayListRL.setBackgroundColor(ColorUtil.parserColor(Color.BLACK, 120));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onAnimationRepeat(Animation animation) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
mPopPlayContentRL.clearAnimation();
|
|
|
|
|
mPopPlayContentRL.startAnimation(translateAnimation);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 隐藏歌曲列表弹出窗口
|
|
|
|
|
*/
|
|
|
|
|
private void hidePopPlayListView() {
|
|
|
|
|
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0, mPopPlayContentRL.getHeight());
|
|
|
|
|
translateAnimation.setDuration(250);//设置动画持续时间
|
|
|
|
|
translateAnimation.setFillAfter(true);
|
|
|
|
|
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onAnimationStart(Animation animation) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onAnimationEnd(Animation animation) {
|
|
|
|
|
mIsShowPopPlayList = false;
|
|
|
|
|
mPopPlayListRL.setVisibility(View.GONE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onAnimationRepeat(Animation animation) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
mPopPlayContentRL.clearAnimation();
|
|
|
|
|
mPopPlayContentRL.startAnimation(translateAnimation);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onBackPressed() {
|
|
|
|
|
if (mIsShowPopPlayList) {
|
|
|
|
|
hidePopPlayListView();
|
|
|
|
|
} else if (mSlidingMenuLayout.isShowingFragment()) {
|
|
|
|
|
mSlidingMenuLayout.hideFragment();
|
|
|
|
|
} else if (mSlidingMenuLayout.isShowingMenu()) {
|
|
|
|
|
mSlidingMenuLayout.hideMenu();
|
|
|
|
|
} else {
|
|
|
|
|
if ((System.currentTimeMillis() - mExitTime) > 2000) {
|
|
|
|
|
ToastUtil.showTextToast(getApplicationContext(), getString(R.string.back_tip));
|
|
|
|
|
mExitTime = System.currentTimeMillis();
|
|
|
|
|
} else {
|
|
|
|
|
// 跳转到桌面
|
|
|
|
|
Intent intent = new Intent(Intent.ACTION_MAIN);
|
|
|
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
|
intent.addCategory(Intent.CATEGORY_HOME);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void onDestroy() {
|
|
|
|
|
releaseData();
|
|
|
|
|
destroyService();
|
|
|
|
|
destroyReceiver();
|
|
|
|
|
super.onDestroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 销毁服务
|
|
|
|
|
*/
|
|
|
|
|
private void destroyService() {
|
|
|
|
|
AudioPlayerService.stopService(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 释放数据
|
|
|
|
|
*/
|
|
|
|
|
private void releaseData() {
|
|
|
|
|
ImageUtil.release();
|
|
|
|
|
DownloadAudioManager.newInstance(mContext).release();
|
|
|
|
|
AudioPlayerManager.newInstance(mContext).release();
|
|
|
|
|
ToastUtil.release();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 销毁广播
|
|
|
|
|
*/
|
|
|
|
|
private void destroyReceiver() {
|
|
|
|
|
if (mFragmentReceiver != null) {
|
|
|
|
|
mFragmentReceiver.unregisterReceiver(mContext);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mAudioBroadcastReceiver != null) {
|
|
|
|
|
mAudioBroadcastReceiver.unregisterReceiver(mContext);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mAppSystemReceiver != null) {
|
|
|
|
|
mAppSystemReceiver.unregisterReceiver(mContext);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
|
|
|
if (mPhoneReceiver != null) {
|
|
|
|
|
mPhoneReceiver.unregisterReceiver(mContext);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (mPhoneV4Receiver != null) {
|
|
|
|
|
mPhoneV4Receiver.unregisterReceiver(mContext);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|