ActivityUI.java :  » UnTagged » dhillon » com » google » code » dhillon » Android Open Source

Android Open Source » UnTagged » dhillon 
dhillon » com » google » code » dhillon » ActivityUI.java
package com.google.code.dhillon;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.code.dhillon.util.Util;

public class ActivityUI extends ListActivity {
  private static final int DIALOG_LOADING = 0;

  private EditText mSearch = null;
  private Button mSubmit = null;

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

    // start searching when user presses enter
    mSearch = (EditText) findViewById(R.id.search);
    mSubmit = (Button) findViewById(R.id.search_button);
    mSubmit.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        // send to background task to find their twitter songs
        new DownloadTwitterFeed().execute(mSearch.getText());
        // hide the soft keyboard if used
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mSearch.getWindowToken(), 0);
      }
    });
  }

  @Override
  protected Dialog onCreateDialog(int id) {
    if (id == DIALOG_LOADING) {
      ProgressDialog dialog = new ProgressDialog(this);
      dialog.setMessage(getText(R.string.twitter_load));
      dialog.setIndeterminate(true);
      return dialog;
    }
    return null;
  }

  // pass in the three generic types, we are interested in the first and last
  // which are parameters to doInBackground and onPostExecute
  private class DownloadTwitterFeed extends AsyncTask<CharSequence, Void, ArrayList<String>> {
    // runs on ui thread before background task
    @Override
    protected void onPreExecute() {
      showDialog(DIALOG_LOADING);
      super.onPreExecute();
    }

    // runs off the ui thread in the background
    @Override
    protected ArrayList<String> doInBackground(CharSequence... params) {
      String username = params[0] + ""; // convert to String
      ArrayList<String> nowPlayingStatuses = new ArrayList<String>();
      // try to grab data from twitter, cancel on any error
      try {
        URL url = new URL("http://twitter.com/statuses/user_timeline/"
            + URLEncoder.encode(username, "UTF-8") + ".json?count=200");
        String response = Util.convertStreamToString(url.openStream());
        JSONArray statuses = new JSONArray(response);
        for (int i = 0; i < statuses.length(); i++) {
          JSONObject status = statuses.getJSONObject(i);
          String statusText = status.getString("text");
          // do a case insensitive search for the nowplaying hashtag
          if (statusText.toLowerCase().contains("#nowplaying")) {
            nowPlayingStatuses.add(statusText);
          }
        }
      } catch (MalformedURLException e) { // bad url
        e.printStackTrace();
        cancel(false);
      } catch (IOException e) { // could not connect
        e.printStackTrace();
        cancel(false);
      } catch (JSONException e) { // bad response
        e.printStackTrace();
        cancel(false);
      }
      return nowPlayingStatuses;
    }

    // runs on the ui thread when task is canceled
    @Override
    protected void onCancelled() {
      super.onCancelled();
      dismissDialog(DIALOG_LOADING);
      Toast.makeText(ActivityUI.this, getText(R.string.fetch_error), Toast.LENGTH_LONG)
          .show();
    }

    // runs on the ui thread after background task is completed
    protected void onPostExecute(ArrayList<String> statuses) {
      // create an adapter to fill our listview with the statuses fetched
      // from twitter
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(ActivityUI.this,
          android.R.layout.simple_list_item_1, statuses);
      // attach to our listview
      setListAdapter(adapter);
      dismissDialog(DIALOG_LOADING);
    }
  }

}
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.