AskQuestionActivity.java :  » UnTagged » non-intrusive-questions » com » nonintrusive » client » tabs » askquestion » Android Open Source

Android Open Source » UnTagged » non intrusive questions 
non intrusive questions » com » nonintrusive » client » tabs » askquestion » AskQuestionActivity.java
package com.nonintrusive.client.tabs.askquestion;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.nonintrusive.client.GlobalNonIntrusive;
import com.nonintrusive.client.database.ClientDB;
import com.nonintrusive.client.send.R;

public class AskQuestionActivity extends Activity {

  private static final String TAG = "NonIntrusiveClientSend";
  protected static final String ENCODING = "UTF-8";
  private static final String SERVER_URL = null;

  // preferences
  private SharedPreferences mPref;
  private Editor mEditor;

  // client
  private String mSimId;
  private boolean mIsNewClient = true;

  // question
  private ArrayList<EditText> mAnswersListView;
  private int mAnswersNo = 3;
  private String qMessage;
  private String[] qAnswers;
  private String qTags;

  // GUI
  private EditText mQuestion;
  private EditText mTags;
  private Handler mHandler;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ask_question);

    initState();
    // if is the first time when we open the application
    // send ID to the server
    if (mIsNewClient) {
      new Thread(new Runnable() {
        @Override
        public void run() {

          try {
            sendToServer("id="
                + URLEncoder.encode(mSimId, ENCODING));
            mEditor.putBoolean("isNew", false);
          } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
          }
        }
      }).start();
    }

    loadGui();
  }

  /**
   * Initiates the GUI elements
   */
  private void loadGui() {
    mQuestion = (EditText) findViewById(R.id.editTextQuestion);
    mTags = (EditText) findViewById(R.id.editTextTags);

    Button addButton = (Button) findViewById(R.id.buttonAdd);
    addButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mAnswersNo > GlobalNonIntrusive.MAX_ANSWERS) {
          mHandler.post(new Runnable() {
            @Override
            public void run() {
              Toast.makeText(
                  AskQuestionActivity.this,
                  "You've reached maximum answers per question!",
                  Toast.LENGTH_SHORT).show();
            }
          });
          return;
        }
        Context ctx = AskQuestionActivity.this;

        TextView labelA = new TextView(ctx);
        labelA.setText("A" + mAnswersNo++);
        labelA.setLayoutParams(new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        EditText answerText = new EditText(ctx);
        answerText.setLayoutParams(new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mAnswersListView.add(answerText);

        LinearLayout layout = new LinearLayout(ctx);
        layout.setOrientation(LinearLayout.HORIZONTAL);

        layout.addView(labelA);
        layout.addView(answerText);

        LinearLayout parent = (LinearLayout) findViewById(R.id.answersLayout);
        parent.addView(layout, new LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
      }
    });

    Button sendButton = (Button) findViewById(R.id.buttonSend);
    sendButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String message = buildMessage();
        sendToServer(message);
      }
    });

    Button clearButton = (Button) findViewById(R.id.clearForm);
    clearButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        mQuestion.setText("");
        mTags.setText("");
        for (EditText answer : mAnswersListView) {
          answer.setText("");
        }
      }
    });
  }

  /**
   * Load the initial state
   */
  private void initState() {
    mPref = PreferenceManager.getDefaultSharedPreferences(this);
    TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    mIsNewClient = mPref.getBoolean("isNew", true);
    mSimId = tManager.getSimSerialNumber();
    mEditor = mPref.edit();
    mHandler = new Handler();
    mAnswersListView = new ArrayList<EditText>();
    mAnswersListView.add((EditText) findViewById(R.id.editTextA1));
    mAnswersListView.add((EditText) findViewById(R.id.editTextA2));
    qAnswers = new String[GlobalNonIntrusive.MAX_ANSWERS];
  }

  /**
   * Builds the message to send to server
   * 
   * @return message for server
   */
  private String buildMessage() {
    StringBuilder message = new StringBuilder();
    final String next = "&";
    try {
      message.append("id=" + URLEncoder.encode(mSimId, ENCODING) + next);
      qMessage = mQuestion.getText().toString();
      if (qMessage.equals(""))
        return null;
      message.append("text=" + URLEncoder.encode(qMessage, ENCODING)
          + next);
      int size = mAnswersListView.size();
      int k = 0;
      for (int i = 0; i < size; i++) {
        EditText editText = mAnswersListView.get(i - k);
        String textA = editText.getText().toString();
        if (textA.equals("")) {
          k++;
          continue;
        }
        qAnswers[i - k] = textA;
        message.append("answer_" + (i - k) + "="
            + URLEncoder.encode(textA, ENCODING) + next);
      }
      qTags = "";
      String[] tags = mTags.getText().toString().split(" ");
      size = tags.length;
      for (int i = 0; i < size; i++) {
        message.append("tag_" + i + "="
            + URLEncoder.encode(tags[i], ENCODING) + next);
        qTags += tags[i] + " ";
      }
      Log.d(TAG, "message " + message);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
      Log.d(TAG, "UnsupportedEncodingException");
      return null;
    }
    return message.toString();
  }

  /**
   * Sends the message to server
   * 
   * @param message
   */
  private boolean sendToServer(String message) {
    HttpClient client = new DefaultHttpClient();
    String params = buildMessage();

    if (message == null) {
      mHandler.post(new Runnable() {
        @Override
        public void run() {
          Toast.makeText(AskQuestionActivity.this,
              "Message failed to build!", Toast.LENGTH_SHORT)
              .show();
        }
      });
      Log.d(TAG, "Message failed to build!");
      return false;
    }

    // TODO: move this down after we have the server
    addQuestionToDB();

    // TODO: add clear button; save last unsend question
    if (SERVER_URL == null) {
      mHandler.post(new Runnable() {
        @Override
        public void run() {
          // Toast.makeText(AskQuestionActivity.this,
          // "Server address not set", Toast.LENGTH_SHORT)
          // .show();
        }
      });
      return false;
    }
    HttpGet request = new HttpGet(SERVER_URL + "?" + params);
    try {
      HttpResponse response = client.execute(request);
      int status = response.getStatusLine().getStatusCode();
      if (status != HttpStatus.SC_OK) {
        Log.d(TAG, "HttpStatus not ok (" + status + ")");
        return false;
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
      return false;
    } catch (IOException e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /**
   * It should be called only after buildMessage()
   */
  private void addQuestionToDB() {
    if (qMessage == null || qMessage.equals(""))
      return;
    ContentResolver cr = getContentResolver();
    ContentValues values = new ContentValues();

    values.put(ClientDB.MESSAGE, qMessage);
    values.put(ClientDB.ANSWER1, qAnswers[0]);
    values.put(ClientDB.ANSWER2, qAnswers[1]);
    if (qAnswers[2] != null) {
      values.put(ClientDB.ANSWER3, qAnswers[2]);
      if (qAnswers[3] != null) {
        values.put(ClientDB.ANSWER4, qAnswers[3]);
        if (qAnswers[4] != null)
          values.put(ClientDB.ANSWER5, qAnswers[4]);
      }
    }
    values.put(ClientDB.TAGS, qTags);
    values.put(ClientDB.IS_MY_QUESTION, true);
    values.put(ClientDB.TIMESTAMP, System.currentTimeMillis());
    cr.insert(ClientDB.CONTENT_URI, values);
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.