package nliveroid.nlr.main; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.LinkedHashMap; import nliveroid.nlr.main.parser.NsenParser; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Configuration; import android.os.AsyncTask; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; public class ConfigPlayerDialog extends AlertDialog.Builder{ private AlertDialog me; protected ConfigPlayerDialog(final CommentPostable postable,final byte[] setting_byte,final boolean[] setting_boolean){ super((Context)postable); View parent = LayoutInflater.from((Context)postable).inflate(R.layout.config_player_dialog, null); setView(parent); final Button player_change = (Button)parent.findViewById(R.id.config_playerchange); final CheckBox player_comment_disable = (CheckBox)parent.findViewById(R.id.config_comment_disable); final CheckBox player_184_disable = (CheckBox)parent.findViewById(R.id.config_184_disable); final CheckBox player_184_disable_bsp = (CheckBox)parent.findViewById(R.id.config_184_disable_bsp_enable); final CheckBox player_mute = (CheckBox)parent.findViewById(R.id.config_mute); final CheckBox player_command_movie = (CheckBox)parent.findViewById(R.id.config_playmovie); final SeekBar subvolume = (SeekBar)parent.findViewById(R.id.config_subvolume); final CheckBox is_fullscreen = (CheckBox)parent.findViewById(R.id.config_fullscreen); final Button player_position = (Button)parent.findViewById(R.id.config_playerposition); //項目の有効無効を設定する switch(setting_byte[31]){ case 3://コメントのみ player_change.setEnabled(false); break; } if(setting_byte[43] == 0){ player_comment_disable.setChecked(!setting_boolean[14]);//[14]はshowcommentだからtrueなら非表示はfalse player_184_disable.setChecked(setting_boolean[15]); player_184_disable_bsp.setChecked(setting_boolean[16]); player_mute.setChecked(setting_boolean[17]); player_command_movie.setChecked(setting_boolean[18]); subvolume.setProgress(setting_byte[30]); is_fullscreen.setChecked(setting_boolean[21]); }else{//PC版 if(setting_byte[43]==2)player_change.setVisibility(View.GONE); player_comment_disable.setVisibility(View.GONE); player_184_disable.setVisibility(View.GONE); player_184_disable_bsp.setVisibility(View.GONE); player_mute.setVisibility(View.GONE); player_command_movie.setVisibility(View.GONE); subvolume.setVisibility(View.GONE); TextView subvol_text = (TextView)parent.findViewById(R.id.config_player_subtext); subvol_text.setVisibility(View.GONE); } player_change.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { me.cancel(); if(setting_byte[43] == 2){ MyToast.customToastShow((Context)postable, "HLSは切り替えに対応させていません"); return; } postable.setSpPlayerOperation((byte)10,(byte)-1); } }); if(postable.isNsen()){ Button nsen = (Button)parent.findViewById(R.id.config_nsenchange); nsen.setVisibility(View.VISIBLE); nsen.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View arg0) { me.cancel(); new AlertDialog.Builder((Context)postable) .setItems(new CharSequence[]{"VOCALOID","東方","ニコニコインディーズ","歌ってみた","演奏してみた","PV","蛍の光","オールジャンル"}, new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface arg0, int arg1) { String extension = ""; switch(arg1){ case 0: extension = "vocaloid"; break; case 1: extension = "toho"; break; case 2: extension = "nicoindies"; break; case 3: extension = "sing"; break; case 4: extension = "play"; break; case 5: extension = "pv"; break; case 6: extension = "hotaru"; break; case 7: extension = "allgenre"; break; } new GetNsenLVTask(postable).execute(URLEnum.NSENURL + extension); } }).create().show(); } }); } player_position.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final boolean isPortLayt = me.getContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; CharSequence[] items; if(isPortLayt){ items = new CharSequence[]{"上","下"}; }else{ if(setting_boolean[4]){ items = new CharSequence[]{"左","右","全面"}; }else{ items = new CharSequence[]{"左","右"}; } } new AlertDialog.Builder((Context)postable) .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { me.cancel(); if(isPortLayt){ setting_byte[22] = (byte)which; }else{ setting_byte[23] = (byte)which; } postable.settingChange(11, (byte) -1 , setting_byte); } }).create().show(); } }); is_fullscreen.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { postable.setFullScreen(isChecked); } }); player_comment_disable.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { postable.setSpPlayerOperation((byte)0,isChecked? (byte)1:(byte)0); } }); player_184_disable.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { postable.setSpPlayerOperation((byte)1,isChecked? (byte)1:(byte)0); } }); player_184_disable_bsp.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { postable.setSpPlayerOperation((byte)2,isChecked? (byte)1:(byte)0); } }); player_mute.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { postable.setSpPlayerOperation((byte)3,isChecked? (byte)1:(byte)0); } }); player_command_movie.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { postable.setSpPlayerOperation((byte)4,isChecked? (byte)1:(byte)0); } }); subvolume.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ @Override public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { postable.setSpPlayerOperation((byte)5, (byte)arg1); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO 自動生成されたメソッド・スタブ } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO 自動生成されたメソッド・スタブ } }); } public void showSelf(){ this.create(); me = this.show(); } class GetNsenLVTask extends AsyncTask<String,Void,Void> implements FinishCallBacks{ ErrorCode error; String lv; private boolean ENDFLAG = true; private CommentPostable postable; protected GetNsenLVTask(CommentPostable postable){ this.postable = postable; } @Override protected Void doInBackground(String... arg) { error = ((NLiveRoid)((Context)postable).getApplicationContext()).getError(); try { URL url = new URL(arg[0]); HttpURLConnection con = (HttpURLConnection) url.openConnection(); InputStream response = con.getInputStream(); if(response == null){ error.setErrorCode(-27); return null; }else if(error.getErrorCode() == -7) { // ここで-7でメンテか別の失敗かわからない return null; } org.ccil.cowan.tagsoup.Parser parser = new org.ccil.cowan.tagsoup.Parser(); ContentHandler sHandler = new NsenParser(this,error); parser.setContentHandler(sHandler); parser.parse(new InputSource(response)); long startT = System.currentTimeMillis(); while(ENDFLAG ){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); ENDFLAG = false; break; }catch(IllegalArgumentException e1){ e1.printStackTrace(); Log.d("NLiveRoid","IllegalArgumentException at SearchingTask"); ENDFLAG = false; break; } if(System.currentTimeMillis() - startT > 30000){ error.setErrorCode(-10); ENDFLAG = false; return null; } } } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (SAXException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void arg){ if(error.getErrorCode() != 0){ error.showErrorToast(); }else{ if(lv == null){ MyToast.customToastShow((Context)postable, "Nsenの放送IDの取得に失敗しました"); }else{ postable.getLiveInfo().setLiveID(lv); postable.allUpdate(); } } } @Override public void finishCallBack(ArrayList<LiveInfo> infos) { ENDFLAG = false; lv = infos.get(0).getLiveID(); } @Override public void finishCallBack(ArrayList<LiveInfo> info, LinkedHashMap<String, String> generate) {//呼ばれることは無い } @Override public void finishCallBack(ArrayList<LiveInfo> liveInfos, String pager) { // TODO 自動生成されたメソッド・スタブ } } }