package com.lixiangsoft.lixiang.music_player; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Bundle; import android.os.Looper; import android.os.MessageQueue; import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.design.widget.TextInputLayout; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AlertDialog; import android.support.v7.widget.CardView; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import static android.content.Context.MODE_PRIVATE; /** * A simple {@link Fragment} subclass. */ public class DownloadFragment extends Fragment { public DownloadFragment() { // Required empty public constructor } private View rootView; private EditText editText; private String input; private String filter = "name"; private String type = "netease"; private int page =1; private FloatingActionButton search_list; private String[] items = {"网易云音乐", "QQ音乐", "酷狗音乐","酷我音乐","虾米音乐","百度音乐","一听音乐","咪咕音乐","荔枝音乐","蜻蜓音乐","喜马拉雅","5Sing音乐"}; private String[] item_type = {"netease","qq","kugou","kuwo","xiami","baidu","1ting","migu","lizhi","qingting","ximalaya","5singyc"}; private String previousType = "netease"; private List<Music> musicList; private List<musicInfo> netMusicList; private SwipeRefreshLayout refresh; @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_download, container, false); refresh = (SwipeRefreshLayout) rootView.findViewById(R.id.refresh); search_list = (FloatingActionButton) rootView.findViewById(R.id.search_list); // new setDefaultTask().execute(); final TextInputLayout inputLayout = (TextInputLayout) rootView.findViewById(R.id.name_input); RadioButton name_radio = (RadioButton) rootView.findViewById(R.id.name_radio); RadioButton id_radio = (RadioButton) rootView.findViewById(R.id.id_radio); RadioButton url_radio = (RadioButton) rootView.findViewById(R.id.link_radio); name_radio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) inputLayout.setHint("例如:不要说话 陈奕迅");filter = "name"; } }); id_radio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) inputLayout.setHint("例如:25906124");filter = "id"; } }); url_radio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) inputLayout.setHint("例如:http://music.163.com/#/song?id=25906124");filter = "url"; } }); editText = (EditText) rootView.findViewById(R.id.edit_text); editText.setOnEditorActionListener(new DoneOnEditorActionListener()); refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { editText.setText(""); refresh.setRefreshing(false); } }); Button search = (Button) rootView.findViewById(R.id.search_button); search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { searchAction(); } }); return rootView; } @Override public void onStart() { super.onStart(); refresh.setColorSchemeColors(MyApplication.getColor_accent()); } @Override public void onResume() { super.onResume(); // return true会重复执行,false只执行一次 Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { SharedPreferences bundle = getActivity().getSharedPreferences("default_resource", MODE_PRIVATE); type = bundle.getString("default", "netease"); for (int i = 0; i < 12; i++) { if (type.equals(item_type[i])) { setListListener(i); break; }; } return false; } }); } private boolean hasNetwork(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null) { return networkInfo.getState() == NetworkInfo.State.CONNECTED; } } return false; } private class httpTask extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... strings) { try { OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build(); if (filter.equals("url")) { previousType = type; type = "_"; } RequestBody requestBody = new FormBody.Builder().add("input", input).add("filter", filter).add("type", type).add("page",String.valueOf(page)).build(); Request request = new Request.Builder().url("http://music.bbbbbb.me/").addHeader("X-Requested-With", "XMLHttpRequest").addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36").addHeader("Referer","http://music.bbbbbb.me/?name="+java.net.URLEncoder.encode(input,"utf-8")+"&type="+type).post(requestBody).build(); Response response = client.newCall(request).execute(); String res = response.body().string(); JSONObject jsonObject = new JSONObject(res); if (jsonObject.getInt("code") == 200) { JSONArray jsonArray = jsonObject.getJSONArray("data"); String data = jsonArray.toString(); Gson gson = new Gson(); musicList = gson.fromJson(data, new TypeToken<List<Music>>() { }.getType()); netMusicList = new ArrayList<musicInfo>(); for (int i = 0; i < musicList.size(); i++) { netMusicList.add(new musicInfo(0,0,0,musicList.get(i).getName(),musicList.get(i).getAuthor(),musicList.get(i).getMusic(),musicList.get(i).getPic(),0,musicList.get(i).getLink())); } MyApplication.setNetMusiclist(netMusicList); return "200"; } } catch (Exception e) { if (e instanceof java.net.UnknownHostException) { return "404"; }else if (e instanceof java.net.SocketTimeoutException){ return "timeout"; } e.printStackTrace(); } return "unKnown"; } @Override protected void onPostExecute(String s) { refresh.setRefreshing(false); if (filter.equals("url")) { type = previousType; } switch (s) { case "200": Bundle bundle = new Bundle(); bundle.putString("input",input); bundle.putString("filter",filter); bundle.putString("type",type); Intent intent = new Intent(getActivity(), netMusicActivity.class); intent.putExtra("info",bundle); startActivity(intent); break; case "404": if (!hasNetwork(getActivity())) { Toast.makeText(getActivity(), "请检查您的网络", Toast.LENGTH_SHORT).show(); // Snackbar.make(rootView, "请检查您的网络", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() { // @Override // public void onClick(View view) { // } // }).show(); } else { Toast.makeText(getActivity(), "服务器开小差了,请稍后再试", Toast.LENGTH_SHORT).show(); // Snackbar.make(rootView, "服务器开小差了,请稍后再试", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() { // @Override // public void onClick(View view) { // } // }).show(); } break; case "unKnown": Toast.makeText(getActivity(), "未获取到资源", Toast.LENGTH_SHORT).show(); // Snackbar.make(rootView, "未获取到资源", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() { // @Override // public void onClick(View view) { // } // }).show(); break; case "timeout": Toast.makeText(getActivity(), "服务器连接超时,请稍后再试", Toast.LENGTH_SHORT).show(); // Snackbar.make(rootView, "服务器连接超时,请稍后再试", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() { // @Override // public void onClick(View view) { // } // }).show(); break; default: } super.onPostExecute(s); } } private void searchAction() { if (MyApplication.getLocal_net_mode() == false) { input = editText.getText().toString(); if (input.equals("")) { Toast.makeText(getActivity(), "请输入内容", Toast.LENGTH_SHORT).show(); // Snackbar.make(rootView, "请输入内容", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() { // @Override // public void onClick(View view) { // } // }).show(); } else { refresh.setRefreshing(true); new httpTask().execute(input); } } else { Toast.makeText(getActivity(), "当前处于离线模式", Toast.LENGTH_SHORT).show(); } } private void setListListener(final int defaultNumber) { search_list.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("选择来源"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.setSingleChoiceItems(items, defaultNumber, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { type = item_type[i]; new Thread(new Runnable() { @Override public void run() { SharedPreferences.Editor editor = getActivity().getSharedPreferences("default_resource", MODE_PRIVATE).edit(); editor.putString("default", type); editor.apply(); } }).start(); setListListener(i); } }); builder.show(); } }); } private class DoneOnEditorActionListener implements TextView.OnEditorActionListener { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { searchAction(); InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); return true; } return false; } } // private class getColorTask extends AsyncTask { // @Override // protected Object doInBackground(Object[] objects) { // SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); // int accent_color = sharedPref.getInt("accent_color", 0); // if (accent_color != 0) { // return accent_color; // } else { // return null; // } // } // @Override // protected void onPostExecute(Object o) { // super.onPostExecute(o); // if (o != null) { // refresh.setColorSchemeColors((int) o); // } else { // refresh.setColorSchemeColors(getResources().getColor(R.color.colorAccent)); // } // } // } // private class setDefaultTask extends AsyncTask { // @Override // protected void onPostExecute(Object o) { // if (o != null) { // setListListener((int) o); // } // super.onPostExecute(o); // } // // @Override // protected Object doInBackground(Object[] objects) { // SharedPreferences bundle = getActivity().getSharedPreferences("default_resource", MODE_PRIVATE); // type = bundle.getString("default", "netease"); // for (int i = 0; i < 12; i++) { // if (type.equals(item_type[i])) return i; // } // return null; // } // } }