package com.tuit.ar.activities; import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.tuit.ar.R; import com.tuit.ar.api.Twitter; import com.tuit.ar.api.TwitterAccountRequestsObserver; import com.tuit.ar.api.TwitterRequest; import com.tuit.ar.api.request.Options; import com.tuit.ar.models.User; public class NewDirectMessage extends Activity implements OnClickListener, TwitterAccountRequestsObserver { static private final int MAX_CHARS = 140; private String toUser; private EditText messageField; private TextView charCount; private Timer autocompleter = new Timer(false); private AutoCompleteTextView userSelect = null; private ArrayAdapter<String> usersAdapter = null; private TimerTask autocompleterTask = null; private Button send = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.new_direct_message); send = (Button)findViewById(R.id.send); send.setOnClickListener(this); Twitter.getInstance().getDefaultAccount().addRequestObserver(this); Intent intent = getIntent(); toUser = intent.getStringExtra("to_user"); TextView username = (TextView)findViewById(R.id.toUser); userSelect = (AutoCompleteTextView)findViewById(R.id.toUserSelect); if (toUser != null) { username.setText("To @" + toUser); userSelect.setVisibility(View.INVISIBLE); } else { username.setVisibility(View.INVISIBLE); usersAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, new String[]{}); userSelect.setAdapter(usersAdapter); userSelect.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } public void afterTextChanged(Editable arg0) { if (autocompleterTask != null) autocompleterTask.cancel(); autocompleterTask = new UpdateUsernameToSelect(); autocompleter.schedule(autocompleterTask, 1000); } }); } messageField = (EditText) findViewById(R.id.tweetMessage); charCount = (TextView) findViewById(R.id.charCount); messageField.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { updateCharCount(); return false; } }); } private void updateCharCount() { charCount.setText(String.valueOf(MAX_CHARS - messageField.getText().toString().length())); } public void onClick(View v) { if (toUser == null) { String user = userSelect.getText().toString(); toUser = user; } if (toUser == null) { // FIXME: improve error message? sendFailed(null); return; } String message = messageField.getText().toString(); if (message == null || message.length() == 0) { // FIXME: improve error message? sendFailed(null); return; } try { ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("text", message)); params.add(new BasicNameValuePair("screen_name", toUser)); int method = TwitterRequest.METHOD_POST; Twitter.getInstance().getDefaultAccount().requestUrl(Options.SEND_DIRECT_MESSAGE, params, method); } catch (Exception e) { sendFailed(e.getLocalizedMessage()); } } public void sendFailed(String message) { if (message == null) Toast.makeText(this, getString(R.string.unableToPost), Toast.LENGTH_SHORT).show(); else Toast.makeText(this, getString(R.string.unableToPost) + " (" + message + ")", Toast.LENGTH_SHORT).show(); } public void requestHasStarted(TwitterRequest request) { setProgressBarIndeterminateVisibility(true); } public void requestHasFinished(TwitterRequest request) { setProgressBarIndeterminateVisibility(false); if (request.getUrl().equals(Options.SEND_DIRECT_MESSAGE)) { if (request.getStatusCode() >= 200 && request.getStatusCode() < 400) { Toast.makeText(this, getString(R.string.messageSent), Toast.LENGTH_SHORT).show(); finish(); } else sendFailed(request.getErrorMessage()); } } public void onDestroy() { super.onDestroy(); send.setOnClickListener(null); messageField.setOnKeyListener(null); Twitter.getInstance().getDefaultAccount().removeRequestObserver(this); } protected class UpdateUsernameToSelect extends TimerTask { public void run() { String username = userSelect.getText().toString(); ArrayList<User> users = User.select("substr(screen_name,0," + username.length() + ") LIKE ?", new String[]{username}, null, null, null, "5"); usersAdapter.clear(); for (User u : users) { usersAdapter.add(u.getScreenName()); } usersAdapter.notifyDataSetChanged(); } } }