package nliveroid.nlr.main;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import nliveroid.nlr.main.parser.BSPTokenParser;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class CommandDialog extends AlertDialog.Builder{
private CommentPostable postable;
private View parent;
private CheckBox bsp;
private Spinner bspColorSpinner;
private TextView bspNameTX;
private EditText bspNameET;
private Button bspNameCommitBT;
private TextView bspColorTX;
private TableRow parentRow;
public CommandDialog(final CommentPostable postable, boolean isOwner,final String sessionid,final String lv) {
super((Context)postable);
this.postable = postable;
this.setTitle("コマンド");
LayoutInflater inflater = LayoutInflater.from((Context)postable);
parent = inflater.inflate(R.layout.commanddialog, null);
this.setView(parent);
//主コメチェックボックス
CheckBox ownerCheck = (CheckBox)parent.findViewById(R.id.command_owner);
if(isOwner){
ownerCheck.setVisibility(View.VISIBLE);
if(postable.getCmd().isOwner()){
ownerCheck.setChecked(true);
}else{
ownerCheck.setChecked(false);
}
}else{
ownerCheck.setEnabled(false);
}
ownerCheck.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton compoundbutton,
boolean flag) {//タップした後の値が返ってってくる
postable.getCmd().setOwner(flag);
}
});
//BSP
//BSP確認ボタン
Button bspCheck = (Button)parent.findViewById(R.id.command_bsp_check);
bspCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
parentRow = (TableRow)parent.findViewById(R.id.bsp_check_parent);
parentRow.removeAllViews();
TableLayout tl = new TableLayout((Context)postable);
tl.setStretchAllColumns(true);
//ビューをプログレスバーに変更する
ProgressBar p = new ProgressBar((Context)postable);
TextView dummy0 = new TextView((Context)postable);
dummy0.setText("権限情報確認中");
TextView dummy1 = new TextView((Context)postable);
TableRow childrow = new TableRow((Context)postable);
childrow.addView(p,-1,-2);
childrow.addView(dummy0,-1,-2);
childrow.addView(dummy1,-1,-2);
tl.addView(childrow);
parentRow.addView(tl,-1,-2);
new GetBSPToken().execute(sessionid,lv);
}
});
if(postable.getCmd().isBSPEnable()&&postable.getCmd().getBSPToken() != null &&!postable.getCmd().getBSPToken().equals("")){
bspCheck.setVisibility(View.GONE);
enableBSP();
}
ArrayAdapter<String> posAdp = new ArrayAdapter<String>((Context)postable, android.R.layout.simple_spinner_item);
posAdp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// アイテムを追加します
posAdp.add("naka");
posAdp.add("ue");
posAdp.add("shita");
posAdp.add("migi");
posAdp.add("hidari");
String cmdValue = postable.getCmd().getValue(CommandKey.Align);
int aPos = 0;
if(cmdValue.equals("")){
aPos = 0;
}else if(cmdValue.equals("ue")){
aPos = 1;
}else if(cmdValue.equals("shita")){
aPos = 2;
}else if(cmdValue.equals("migi")){
aPos = 3;
}else if(cmdValue.equals("hidari")){
aPos = 4;
}
Spinner alignsp = (Spinner) parent.findViewById(R.id.position);
// アダプターを設定します
alignsp.setAdapter(posAdp);
alignsp.setSelection(aPos);
// スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します
alignsp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Spinner pos = (Spinner) parent;
if(((String)pos.getSelectedItem()).equals("naka")){
postable.setCmd(CommandKey.Align,"");
}else{
postable.setCmd(CommandKey.Align,((String) pos.getSelectedItem()));
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
ArrayAdapter<String> sizeAdp = new ArrayAdapter<String>((Context)postable, android.R.layout.simple_spinner_item);
sizeAdp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// アイテムを追加します
sizeAdp.add("midium");
sizeAdp.add("small");
sizeAdp.add("big");
cmdValue = postable.getCmd().getValue(CommandKey.Size);
int sPos = 0;
if(cmdValue.equals("")){
sPos = 0;
}else if(cmdValue.equals("small")){
sPos = 1;
}else if(cmdValue.equals("big")){
sPos = 2;
}
Spinner size = (Spinner) parent.findViewById(R.id.size);
size.setAdapter(sizeAdp);
size.setSelection(sPos);
// スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します
size.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Spinner size = (Spinner) parent;
// 選択されたアイテムを取得します
if(((String)size.getSelectedItem()).equals("midium")){//midiumってのが入らないように
postable.setCmd(CommandKey.Size,"");
}else{
postable.setCmd(CommandKey.Size,((String) size.getSelectedItem()));
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
ArrayAdapter<String> colAdp = new ArrayAdapter<String>((Context)postable, android.R.layout.simple_spinner_item);
colAdp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// アイテムを追加します
colAdp.add("white");
colAdp.add("red");
colAdp.add("pink");
colAdp.add("orange");
colAdp.add("yellow");
colAdp.add("green");
colAdp.add("cyan");
colAdp.add("blue");
colAdp.add("purple");
colAdp.add("black");
colAdp.add("white2");
colAdp.add("red2");
colAdp.add("orange2");
colAdp.add("yellow2");
colAdp.add("green2");
colAdp.add("blue2");
colAdp.add("purple2");
cmdValue = postable.getCmd().getValue(CommandKey.Color);
int cPos = 0;
if(cmdValue.equals("")){
cPos = 0;
}else if(cmdValue.equals("red")){
cPos = 1;
}else if(cmdValue.equals("pink")){
cPos = 2;
}else if(cmdValue.equals("orange")){
cPos = 3;
}else if(cmdValue.equals("yellow")){
cPos = 4;
}else if(cmdValue.equals("green")){
cPos = 5;
}else if(cmdValue.equals("cyan")){
cPos = 6;
}else if(cmdValue.equals("blue")){
cPos = 7;
}else if(cmdValue.equals("purple")){
cPos = 8;
}else if(cmdValue.equals("black")){
cPos = 9;
}else if(cmdValue.equals("white2")){
cPos = 10;
}else if(cmdValue.equals("red2")){
cPos = 11;
}else if(cmdValue.equals("orange2")){
cPos = 12;
}else if(cmdValue.equals("yellow2")){
cPos = 13;
}else if(cmdValue.equals("green2")){
cPos = 14;
}else if(cmdValue.equals("blue2")){
cPos = 15;
}else if(cmdValue.equals("purple2")){
cPos = 16;
}
Spinner color = (Spinner) parent.findViewById(R.id.color);
// アダプターを設定します
color.setAdapter(colAdp);
color.setSelection(cPos);
// スピナーのアイテムが選択された時に呼び出されるコールバックリスナーを登録します
color.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Spinner color = (Spinner) parent;
if(((String)color.getSelectedItem()).equals("white")){
postable.setCmd(CommandKey.Color,"");
}else{
postable.setCmd(CommandKey.Color,((String) color.getSelectedItem()));
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
this.setPositiveButton("CLOSE", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface arg0, int arg1) {
arg0.dismiss();
}
});
}
private void enableBSP(){
postable.getCmd().setBSPEnable(true);
bsp = (CheckBox)parent.findViewById(R.id.command_bsp);
bspNameET = (EditText)parent.findViewById(R.id.bsp_name);
bspNameTX = (TextView)parent.findViewById(R.id.bsp_name_label);
bspColorTX = (TextView)parent.findViewById(R.id.bsp_color_label);
bspColorSpinner = (Spinner)parent.findViewById(R.id.bsp_color);
bspNameCommitBT = (Button)parent.findViewById(R.id.bsp_name_commit_bt);
ArrayAdapter<String> bspColorAdapter = new ArrayAdapter<String>((Context)postable, android.R.layout.simple_spinner_item);
bspColorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
bspColorAdapter.add("white");//色は投稿時文字列で欲しいから
bspColorAdapter.add("red");
bspColorAdapter.add("green");
bspColorAdapter.add("blue");
bspColorAdapter.add("cyan");
bspColorAdapter.add("yellow");
bspColorAdapter.add("purple");
bspColorAdapter.add("pink");
bspColorAdapter.add("orange");
bspColorAdapter.add("niconicowhite");
String bspColor = postable.getCmd().getBSPColor();
int setBSPColorValue = 0;
if(bspColor.equals("white")){
//0のまま
}else if(bspColor.equals("red")){
setBSPColorValue = 1;
}else if(bspColor.equals("green")){
setBSPColorValue = 2;
}else if(bspColor.equals("blue")){
setBSPColorValue = 3;
}else if(bspColor.equals("cyan")){
setBSPColorValue = 4;
}else if(bspColor.equals("yellow")){
setBSPColorValue = 5;
}else if(bspColor.equals("purple")){
setBSPColorValue = 6;
}else if(bspColor.equals("pink")){
setBSPColorValue = 7;
}else if(bspColor.equals("orange")){
setBSPColorValue = 8;
}else if(bspColor.equals("niconicowhite")){
setBSPColorValue = 9;
}
bspColorSpinner.setAdapter(bspColorAdapter);
bspColorSpinner.setSelection(setBSPColorValue);
//BSPが有効だった
bsp.setVisibility(View.VISIBLE);
bsp.setChecked(true);
bspNameET.setVisibility(View.VISIBLE);
bspNameTX.setVisibility(View.VISIBLE);
bspColorTX.setVisibility(View.VISIBLE);
bspColorSpinner.setVisibility(View.VISIBLE);
bspColorSpinner.setSelection(setBSPColorValue);
bspColorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String selectedItem = (String) bspColorSpinner.getItemAtPosition(position);
Log.d("Log","SELECTED COLOR "+selectedItem);
postable.getCmd().setBSPColor(selectedItem);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
bspNameCommitBT.setVisibility(View.VISIBLE);
if(postable.getCmd().getBSPName() != null&& !postable.getCmd().getBSPName().equals("")){
bspNameET.setHint(postable.getCmd().getBSPName());
}
bspNameCommitBT.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!bspNameET.getText().toString().equals("")){
postable.getCmd().setBSPName(bspNameET.getText().toString());
}
}
});
bsp.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton compoundbutton,
boolean flag) {//タップした後の値が返ってってくる
postable.getCmd().setBSPEnable(flag);
}
});
}
public class GetBSPToken extends AsyncTask<String,Void,Integer>{
private boolean ENDFLAG = true;
private String token;
private boolean isFailed;
@Override
protected Integer doInBackground(String... params) {
HttpURLConnection con=null;
try {
con = (HttpURLConnection)new URL(URLEnum.PC_WATCHBASEURL+params[1]).openConnection();
con.setRequestProperty("Cookie", params[0]);
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24");
con.setInstanceFollowRedirects(false);
InputStream source1 = con.getInputStream();
BSPTokenParser handler = new BSPTokenParser(this);
org.ccil.cowan.tagsoup.Parser parser = new org.ccil.cowan.tagsoup.Parser();
parser.setContentHandler(handler);
parser.parse(new InputSource(source1));
} catch (MalformedURLException e) {
e.printStackTrace();
return -3;
} catch (IOException e) {
e.printStackTrace();
return -2;
} catch (SAXException e) {
e.printStackTrace();
}
con.disconnect();
long startT1 = System.currentTimeMillis();
while(ENDFLAG){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
ENDFLAG = false;
e.printStackTrace();
return 1;//キャンセル
}catch(IllegalArgumentException e){
Log.d("NLiveRoid","IllegalArgumentException at CommandDialog GetBSPToken");
e.printStackTrace();
ENDFLAG = false;
return 1;//キャンセル
}
if(System.currentTimeMillis()-startT1>60000){
//タイムアウト
ENDFLAG = false;
return -2;
}
}
return 0;
}
public void finishCallBack(String token){
this.token = token;
postable.getCmd().setBSPToken(token);
ENDFLAG = false;
}
public void finishCallBack() {
//トークン無くて、footerがあった
isFailed = true;
ENDFLAG = false;
}
@Override
protected void onPostExecute(Integer arg){
if(parentRow != null){
parentRow.removeAllViews();
}
if(isFailed){
MyToast.customToastShow((Context)postable, "権限がないようです");
}else{
switch(arg){
case -2:
MyToast.customToastShow((Context)postable, "接続タイムアウト");
break;
case -3:
MyToast.customToastShow((Context)postable, "アクセスURLが間違い\n仕様変更されたようです");
break;
case 0:
if(token == null){
MyToast.customToastShow((Context)postable, "BSP権限が確認できませんでした");
}else{
enableBSP();
}
break;
}
}
}
}
}