package nliveroid.nlr.main;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.text.InputFilter;
import android.text.Spanned;
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.EditText;
import android.widget.TableRow;
import android.widget.TextView;
/**
* いろいろと実装許容
* 文字数で140超えたら""を返してるけど、確定との関係でInputFilterで綺麗に文字数制限できない
* しかもInputFilterを使うと、XMLでMaxLength指定が無意味化する+ソース側でやる術がみつからない
* チェックはなるべくわかりやすい動作にしたが、不整合が生じる場合はある
* レイアウトもクリアボタン文字サイズを10固定にしてる
* @author Owner
*
*/
public class TweetDialog extends AlertDialog{
private AlertDialog me;
private String tweet_token;
private TextView charCount;
private InputFilter[] filters;
private EditText et;
private Context context;
public TweetDialog(final Context postable,final LiveInfo liveInfo, String token,boolean isDescription) {
super(postable);
this.tweet_token = token;
me = this;
context = postable;
LayoutInflater inflater = LayoutInflater.from((Context)postable);
View parent = inflater.inflate(R.layout.tweetdialog, null);
setView(parent);
charCount = (TextView)parent.findViewById(R.id.tweet_char_count);
et = (EditText)parent.findViewById(R.id.tweet_et);
et.setLayoutParams(new TableRow.LayoutParams((int) (postable.getResources().getDisplayMetrics().widthPixels * 0.7),-1));
String defaultValue = "";
if(isDescription){
defaultValue = liveInfo.getTitle() + " "+ URLEnum.SP_WATCHBASEURL+liveInfo.getLiveID() +" #"+liveInfo.getLiveID() +" #nicolive";
et.setText(defaultValue);
}else{
defaultValue = "【ニコ生視聴中】" + liveInfo.getTitle() + " " + URLEnum.SP_WATCHBASEURL+liveInfo.getLiveID();
et.setText(defaultValue);
}
filters =new InputFilter[] { new MyFilter() };
et.setFilters(filters);
charCount.setText(String.valueOf(defaultValue.length()));
final CheckBox tweet_watching = (CheckBox)parent.findViewById(R.id.tweet_watching);
tweet_watching.setChecked(true);
tweet_watching.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
if(arg1){
String tex = et.getText().toString();
et.setText(tex + " " + "【ニコ生視聴中】");
}else{
String tex = et.getText().toString();
tex = tex.replaceAll("【ニコ生視聴中】", "");
et.setText(tex);
}
charCount.setText(String.valueOf(140-et.getText().length()));
}
});
final CheckBox tweet_title = (CheckBox)parent.findViewById(R.id.tweet_title);
tweet_title.setChecked(true);
tweet_title.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
if(arg1){
if(liveInfo == null)return;
String tex = et.getText().toString();
et.setText(tex + " " + liveInfo.getTitle());
}else{
String tex = et.getText().toString();
tex = tex.replaceAll(liveInfo.getTitle(), "");
et.setText(tex);
}
charCount.setText(String.valueOf(140-et.getText().length()));
}
});
final CheckBox tweet_url = (CheckBox)parent.findViewById(R.id.tweet_url);
tweet_url.setChecked(true);
tweet_url.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
if(arg1){
if(liveInfo == null)return;
String tex = et.getText().toString();
et.setText(tex + " " + URLEnum.SP_WATCHBASEURL + liveInfo.getLiveID());
}else{
String tex = et.getText().toString();
tex = tex.replaceAll(URLEnum.SP_WATCHBASEURL + liveInfo.getLiveID(), "");
et.setText(tex);
}
charCount.setText(String.valueOf(140-et.getText().length()));
}
});
final CheckBox tweet_co = (CheckBox)parent.findViewById(R.id.tweet_co);
tweet_co.setChecked(true);
tweet_co.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
if(liveInfo == null)return;
if(liveInfo.getCommunityID().contains(URLEnum.HYPHEN)){
MyToast.customToastShow((Context)postable, "co取得失敗");
return;
}
if(arg1){
String tex = et.getText().toString();
et.setText(tex + " #" + liveInfo.getCommunityID());
}else{
String tex = et.getText().toString();
tex = tex.replaceAll("#" + liveInfo.getCommunityID(), "");
et.setText(tex);
}
charCount.setText(String.valueOf(140-et.getText().length()));
}
});
Button tweet_clear = (Button)parent.findViewById(R.id.tweet_clear);
tweet_clear.setTextSize(10);
tweet_clear.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
et.setText("");
tweet_watching.setChecked(false);
tweet_title.setChecked(false);
tweet_url.setChecked(false);
tweet_co.setChecked(false);
charCount.setText(String.valueOf(140-et.getText().length()));
}
});
Button tweet_ok = (Button)parent.findViewById(R.id.tweet_ok);
tweet_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(et.getText().toString().length() > 140){
MyToast.customToastShow(postable, "文字数オーバー");
return;
}
me.cancel();
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
postTweet(postable,et.getText().toString());
return null;
}
}.execute();
}
});
Button tweet_cancel = (Button)parent.findViewById(R.id.tweet_cancel);
tweet_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(me != null)me.cancel();
}
});
}
class MyFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
charCount.setText(String.valueOf(140 - dest.length()));
if(dest.length() > 140)return "";
return source;
}
}
public void showSelf(){
this.show();
}
private void postTweet(final Context postable,String tweet){
if(tweet_token == null){
((Activity)postable).runOnUiThread(new Runnable(){
@Override
public void run() {
MyToast.customToastShow((Context)postable, "Tweet失敗");
}
});
return;
}
String[] tweetToken = tweet_token.split(" ");
if(tweetToken.length < 2 ){
((Activity)postable).runOnUiThread(new Runnable(){
@Override
public void run() {
MyToast.customToastShow((Context)postable, "Twitter認証できていませんでした");
}
});
return;
}
//twitterオブジェクトの作成
Twitter tw = new TwitterFactory().getInstance();
//AccessTokenオブジェクトの作成
AccessToken at = new AccessToken(tweetToken[0], tweetToken[1]);
//Consumer keyとConsumer key seacretの設定
tw.setOAuthConsumer("pNxWQdK6hY3AUk9nbEMLQ", "FE4hdC1vW4PkDjJJdBl5bkxx0rm7CSGzeOkTk5rItk");
//AccessTokenオブジェクトを設定
tw.setOAuthAccessToken(at);
try {
tw.updateStatus(tweet);
} catch (TwitterException e) {
e.printStackTrace();
if(e.isCausedByNetworkIssue()){
((Activity)postable).runOnUiThread(new Runnable(){
@Override
public void run() {
MyToast.customToastShow((Context)postable, "Twitter接続エラー");
}
});
return;
}
}((Activity)postable).runOnUiThread(new Runnable(){
@Override
public void run() {
MyToast.customToastShow((Context)postable, "Tweetしました");
}
});
}
public void onConfigChanged(Context context){
this.context = context;
if(et != null)et.setLayoutParams(new TableRow.LayoutParams((int) (context.getResources().getDisplayMetrics().widthPixels * 0.7),-1));
}
}