package me.wcy.music.activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import me.wcy.music.R; import me.wcy.music.adapter.OnMoreClickListener; import me.wcy.music.adapter.PlaylistAdapter; import me.wcy.music.model.Music; import me.wcy.music.service.AudioPlayer; import me.wcy.music.service.OnPlayerEventListener; import me.wcy.music.utils.binding.Bind; /** * 播放列表 */ public class PlaylistActivity extends BaseActivity implements AdapterView.OnItemClickListener, OnMoreClickListener, OnPlayerEventListener { @Bind(R.id.lv_playlist) private ListView lvPlaylist; private PlaylistAdapter adapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_playlist); } @Override protected void onServiceBound() { adapter.setIsPlaylist(true); adapter.setOnMoreClickListener(this); lvPlaylist.setAdapter(adapter); lvPlaylist.setOnItemClickListener(this); AudioPlayer.get().addOnPlayEventListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { AudioPlayer.get().play(position); } @Override public void onMoreClick(int position) { String[] items = new String[]{"移除"}; Music music = AudioPlayer.get().getMusicList().get(position); AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle(music.getTitle()); dialog.setItems(items, (dialog1, which) -> { AudioPlayer.get().delete(position); adapter.notifyDataSetChanged(); }); dialog.show(); } @Override public void onChange(Music music) { adapter.notifyDataSetChanged(); } @Override public void onPlayerStart() { } @Override public void onPlayerPause() { } @Override public void onPublish(int progress) { } @Override public void onBufferingUpdate(int percent) { } @Override protected void onDestroy() { AudioPlayer.get().removeOnPlayEventListener(this); super.onDestroy(); } }
package me.wcy.music.activity; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import me.wcy.music.R; import me.wcy.music.adapter.OnMoreClickListener; import me.wcy.music.adapter.SearchMusicAdapter; import me.wcy.music.enums.LoadStateEnum; import me.wcy.music.executor.DownloadSearchedMusic; import me.wcy.music.executor.PlaySearchedMusic; import me.wcy.music.executor.ShareOnlineMusic; import me.wcy.music.http.HttpCallback; import me.wcy.music.http.HttpClient; import me.wcy.music.model.Music; import me.wcy.music.model.SearchMusic; import me.wcy.music.service.AudioPlayer; import me.wcy.music.utils.FileUtils; import me.wcy.music.utils.ToastUtils; import me.wcy.music.utils.ViewUtils; import me.wcy.music.utils.binding.Bind; public class SearchMusicActivity extends BaseActivity implements SearchView.OnQueryTextListener , AdapterView.OnItemClickListener, OnMoreClickListener { @Bind(R.id.lv_search_music_list) private ListView lvSearchMusic; @Bind(R.id.ll_loading) private LinearLayout llLoading; @Bind(R.id.ll_load_fail) private LinearLayout llLoadFail; private List<SearchMusic.Song> searchMusicList = new ArrayList<>(); private SearchMusicAdapter mAdapter = new SearchMusicAdapter(searchMusicList); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search_music); } @Override protected void onServiceBound() { lvSearchMusic.setAdapter(mAdapter); TextView tvLoadFail = llLoadFail.findViewById(R.id.tv_load_fail_text); tvLoadFail.setText(R.string.search_empty); lvSearchMusic.setOnItemClickListener(this); mAdapter.setOnMoreClickListener(this); } @Override protected int getDarkTheme() { return R.style.AppThemeDark_Search; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search_music, menu); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setMaxWidth(Integer.MAX_VALUE); searchView.onActionViewExpanded(); searchView.setQueryHint(getString(R.string.search_tips)); searchView.setOnQueryTextListener(this); searchView.setSubmitButtonEnabled(true); try { Field field = searchView.getClass().getDeclaredField("mGoButton"); field.setAccessible(true); ImageView mGoButton = (ImageView) field.get(searchView); mGoButton.setImageResource(R.drawable.ic_menu_search); } catch (Exception e) { e.printStackTrace(); } return super.onCreateOptionsMenu(menu); } @Override public boolean onQueryTextSubmit(String query) { ViewUtils.changeViewState(lvSearchMusic, llLoading, llLoadFail, LoadStateEnum.LOADING); searchMusic(query); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } private void searchMusic(String keyword) { HttpClient.searchMusic(keyword, new HttpCallback<SearchMusic>() { @Override public void onSuccess(SearchMusic response) { if (response == null || response.getSong() == null) { ViewUtils.changeViewState(lvSearchMusic, llLoading, llLoadFail, LoadStateEnum.LOAD_FAIL); return; } ViewUtils.changeViewState(lvSearchMusic, llLoading, llLoadFail, LoadStateEnum.LOAD_SUCCESS); searchMusicList.clear(); searchMusicList.addAll(response.getSong()); mAdapter.notifyDataSetChanged(); lvSearchMusic.requestFocus(); handler.post(() -> lvSearchMusic.setSelection(0)); } @Override public void onFail(Exception e) { ViewUtils.changeViewState(lvSearchMusic, llLoading, llLoadFail, LoadStateEnum.LOAD_FAIL); } }); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { new PlaySearchedMusic(this, searchMusicList.get(position)) { @Override public void onPrepare() { showProgress(); } @Override public void onExecuteSuccess(Music music) { cancelProgress(); AudioPlayer.get().addAndPlay(music); ToastUtils.show("已添加到播放列表"); } @Override public void onExecuteFail(Exception e) { cancelProgress(); ToastUtils.show(R.string.unable_to_play); } }.execute(); } @Override public void onMoreClick(int position) { final SearchMusic.Song song = searchMusicList.get(position); AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle(song.getSongname()); String path = FileUtils.getMusicDir() + FileUtils.getMp3FileName(song.getArtistname(), song.getSongname()); File file = new File(path); int itemsId = file.exists() ? R.array.search_music_dialog_no_download : R.array.search_music_dialog; dialog.setItems(itemsId, (dialog1, which) -> { switch (which) { case 0:// 分享 share(song); break; case 1:// 下载 download(song); break; } }); dialog.show(); } private void share(SearchMusic.Song song) { new ShareOnlineMusic(this, song.getSongname(), song.getSongid()) { @Override public void onPrepare() { showProgress(); } @Override public void onExecuteSuccess(Void aVoid) { cancelProgress(); } @Override public void onExecuteFail(Exception e) { cancelProgress(); } }.execute(); } private void download(final SearchMusic.Song song) { new DownloadSearchedMusic(this, song) { @Override public void onPrepare() { showProgress(); } @Override public void onExecuteSuccess(Void aVoid) { cancelProgress(); ToastUtils.show(getString(R.string.now_download, song.getSongname())); } @Override public void onExecuteFail(Exception e) { cancelProgress(); ToastUtils.show(R.string.unable_to_download); } }.execute(); } }