Android Open Source - storage_room_android_example Restaurant List View Activity






From Project

Back to project page storage_room_android_example.

License

The source code is released under:

Copyright (c) 2011 Till Simon http://www.tillsimon.com mail@tillsimon.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation f...

If you think the Android project storage_room_android_example listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.tillsimon.storageroom_example.activities;
/*ww w  . ja v a2  s  .  c o  m*/
import java.io.IOException;
import java.net.URI;

import org.json.JSONException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.SimpleCursorAdapter.ViewBinder;
import android.widget.TextView;
import android.widget.Toast;

import com.commonsware.cwac.thumbnail.ThumbnailAdapter;
import com.tillsimon.storageroom_example.R;
import com.tillsimon.storageroom_example.application.AppConfigInterface;
import com.tillsimon.storageroom_example.application.RestaurantApplication;
import com.tillsimon.storageroom_example.model.database.RestaurantsDatabaseHelper;
import com.tillsimon.storageroom_example.model.database.RestaurantsTableInterface;
import com.tillsimon.storageroom_example.model.webconnect.AnnouncementDownloader;
import com.tillsimon.storageroom_example.model.webconnect.AnnouncementDownloaderDelegate;
import com.tillsimon.storageroom_example.model.webconnect.RestaurantsDownloader;
import com.tillsimon.storageroom_example.model.webconnect.RestaurantsDownloaderDelegate;

public class RestaurantListViewActivity extends Activity implements OnItemClickListener, OnClickListener, RestaurantsDownloaderDelegate, AnnouncementDownloaderDelegate {
  
  private static final String[] LOADED_DB_ATTRIBUTES = {"_id", RestaurantsTableInterface.COLUMN_NAME, RestaurantsTableInterface.COLUMN_TEXT, RestaurantsTableInterface.COLUMN_IMAGE_PREVIEW_URL};
  private static final String QUERY_ORDERBY_ARGUMENT = RestaurantsTableInterface.COLUMN_NAME + " ASC";
  private static final String[] ADAPTER_DB_ATTRIBUTES = {RestaurantsTableInterface.COLUMN_NAME, RestaurantsTableInterface.COLUMN_TEXT, RestaurantsTableInterface.COLUMN_IMAGE_PREVIEW_URL};
  private static final int[] ADAPTER_LISTVIEW_WIDGETS = {R.id.listItemName, R.id.listItemDesc, R.id.listItemPic};
  private static final int[] THUMBNAIL_ADAPTER_IMAGE_IDS={R.id.listItemPic};
  
  private RestaurantApplication mApp;
  private RestaurantsDatabaseHelper mRestaurantsDatabaseHelper;
  private SQLiteDatabase mDatabase;
  private RestaurantsDownloader mRestaurantsDownloader;
  private AnnouncementDownloader mAnnouncementDownloader;
  private ThumbnailAdapter mThumbnailAdapter;
  private SimpleCursorAdapter mSimpleCursorAdapter;
  private Cursor mCursor = null;
  
  private ListView mListView;
  private MenuInflater mMenuInflater;
  private ProgressDialog mDownloadProgressDialog;
  private LinearLayout mAnnouncementLayout;
  private TextView mAnnouncementText;
  private ImageView mAnnouncementCloseButtonImageView;
  private Animation mAnnouncementFadeInAnimation;
  private Animation mAnnouncementFadeOutAnimation;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.restaurantslistview);
    mApp = (RestaurantApplication) getApplication();
    mRestaurantsDatabaseHelper = new RestaurantsDatabaseHelper(this);
    mThumbnailAdapter = null;
    mSimpleCursorAdapter = null;
    
    mListView = (ListView) findViewById(R.id.restaurants_listView);
    mListView.setOnItemClickListener(this);
    mListView.setTextFilterEnabled(true);
    mAnnouncementLayout = (LinearLayout) findViewById(R.id.announcement_view);
    mAnnouncementText = (TextView) findViewById(R.id.announcement_text);
    mAnnouncementCloseButtonImageView = (ImageView) findViewById(R.id.announcement_close);
    mAnnouncementCloseButtonImageView.setOnClickListener(this);
    
    //at initial launch download should be started
    if (mApp.mIsInitialLaunch) {
      Log.d(AppConfigInterface.TAG,"Initial app launch");
      try {
        mRestaurantsDownloader = new RestaurantsDownloader(this);
        mAnnouncementDownloader = new AnnouncementDownloader(this);
        mRestaurantsDownloader.execute();
        mAnnouncementDownloader.execute();
        }
      catch (IllegalStateException e) {
          Toast.makeText(this, getResources().getString(R.string.error_asyncTaskExecuteException), Toast.LENGTH_LONG).show();
          Log.e(AppConfigInterface.TAG, "IllegalStateException" ,e);            
        }
      mApp.mIsInitialLaunch=false;
    }    
  }
  
  @Override
  protected void onResume() {
    super.onResume();
    loadRestaurantsToListView();
    Log.d(AppConfigInterface.TAG, "onResume");
  }

  @Override
  protected void onStop() {
    super.onStop();
    if (mRestaurantsDownloader!=null) {
      mRestaurantsDownloader.cancel(true);
      mRestaurantsDownloader=null;
    }
    if (mAnnouncementDownloader!=null) {
      mAnnouncementDownloader.cancel(true);
      mAnnouncementDownloader = null;
    }
    if ((mDownloadProgressDialog != null) && (mDownloadProgressDialog.isShowing())) {
      mDownloadProgressDialog.dismiss();
    }
    mRestaurantsDatabaseHelper.close();
    Log.d(AppConfigInterface.TAG,"Activity stopped");
  }
  
    @Override
  public void onDestroy() {
    super.onDestroy();    
    mThumbnailAdapter.close();
  }
  
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      super.onCreateOptionsMenu(menu);
      mMenuInflater = getMenuInflater();
      mMenuInflater.inflate(R.menu.menulist, menu);
      return true;
    }
    
  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
        case R.id.gotomap:
          Intent intent = new Intent(this,RestaurantMapActivity.class);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
          startActivity(intent);
          return true;
        case R.id.listrefresh:
          if (mRestaurantsDownloader==null) {
            try {
              mRestaurantsDownloader = new RestaurantsDownloader(this);
              mRestaurantsDownloader.execute();
            }
            catch (IllegalStateException e) {              
              Toast.makeText(this, getResources().getString(R.string.error_asyncTaskExecuteException), Toast.LENGTH_LONG).show();
              Log.e(AppConfigInterface.TAG, "IllegalStateException", e);            
            }
          }          
          return true;
      }
      return false;
    }

  @Override
  public void onItemClick(AdapterView<?> listview, View rowview, int viewposition, long rowid) {
    Log.d(AppConfigInterface.TAG, String.valueOf(rowid));
    Intent intentDetails = new Intent(this, RestaurantDetailActivity.class);
    intentDetails.putExtra("clickedItemId", (int)rowid);
    startActivity(intentDetails);
  }  

  @Override
  public void onClick(View closeView) {
    hideAnnouncement();
  }  

  @Override
  public void onAnnouncementDownloadStart(AnnouncementDownloader downloader) {}

  @Override
  public void onAnnouncementDownloadProgress(AnnouncementDownloader downloader, Integer... progress) {}

  @Override
  public void onAnnouncementDownloadSuccess(AnnouncementDownloader downloader, String announcementText, String announcementUrl) {
    if ((mAnnouncementLayout!=null) && (mAnnouncementText!=null) && (announcementText!="null")) {
      showAnnouncement(announcementText, announcementUrl);
    }
    mAnnouncementDownloader = null;
  }

  @Override
  public void onAnnouncementDownloadFailure(AnnouncementDownloader downloader, Exception exception) {
    mAnnouncementDownloader = null;
    Log.e(AppConfigInterface.TAG, exception.toString());    
  }

  @Override
  public void onRestaurantDownloadStart(RestaurantsDownloader downloader) {
    mDownloadProgressDialog = new ProgressDialog(this);
    mDownloadProgressDialog.setOwnerActivity(this);
    mDownloadProgressDialog.setMessage(getResources().getString(R.string.progressDialogMessage));
    mDownloadProgressDialog.setCancelable(false);
    mDownloadProgressDialog.show();
    Log.d(AppConfigInterface.TAG,"start delegated");    
  }

  @Override
  public void onRestaurantDownloadProgress(RestaurantsDownloader downloader, Integer... progress) {}

  @Override
  public void onRestaurantDownloadSuccess(RestaurantsDownloader downloader, Integer numberOfLoadedItems) {
    Log.d(AppConfigInterface.TAG,"onSuccess");
    String toastSuccessMessage;
    
    mRestaurantsDownloader = null;
    if (numberOfLoadedItems == 1) {
      toastSuccessMessage = String.valueOf(numberOfLoadedItems) + " " + getResources().getString(R.string.toastInsertSingle);
    }
    else {
      toastSuccessMessage = String.valueOf(numberOfLoadedItems)+ " " + getResources().getString(R.string.toastInsertMultiple);
    }
    Toast.makeText(this, toastSuccessMessage, Toast.LENGTH_LONG).show();
    mDownloadProgressDialog.dismiss();
    mCursor.requery();
    mThumbnailAdapter.notifyDataSetChanged();
  }

  @Override
  public void onRestaurantDownloadFailure(RestaurantsDownloader downloader, Exception exception) {
    String toastErrorString;
    
    mRestaurantsDownloader = null;
    mDownloadProgressDialog.dismiss();
    
    if (exception instanceof IOException) {
      toastErrorString = getResources().getString(R.string.error_webException);
    }
    else if (exception instanceof SQLiteException) {
      toastErrorString = getResources().getString(R.string.error_sqliteException);
    }
    else if (exception instanceof SQLException) {
      toastErrorString = getResources().getString(R.string.error_sqlException);
    }
    else if (exception instanceof JSONException) {
      toastErrorString = getResources().getString(R.string.error_jsonException);
    }    
    else {
      toastErrorString = getResources().getString(R.string.error_unknown);
    }    
    Toast.makeText(this, toastErrorString, Toast.LENGTH_LONG).show();
    Log.e(AppConfigInterface.TAG, exception.toString());
  }
  
    private void loadRestaurantsToListView() {
      try {
      mDatabase = mRestaurantsDatabaseHelper.getReadableDatabase();
      mCursor = mDatabase.query(RestaurantsTableInterface.TABLE_NAME, LOADED_DB_ATTRIBUTES, null, null, null, null, QUERY_ORDERBY_ARGUMENT);
      startManagingCursor(mCursor);
    }
    catch (SQLiteException e) {
      Log.e(AppConfigInterface.TAG,"SQLiteException", e);
    }

    mSimpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.listview_item, mCursor, ADAPTER_DB_ATTRIBUTES, ADAPTER_LISTVIEW_WIDGETS);
    mSimpleCursorAdapter.setViewBinder(VIEW_BINDER);
    mThumbnailAdapter = new ThumbnailAdapter(this, mSimpleCursorAdapter, ((RestaurantApplication)getApplication()).getCache(), THUMBNAIL_ADAPTER_IMAGE_IDS);
    mListView.setAdapter(mThumbnailAdapter);
  }

  static final ViewBinder VIEW_BINDER = new ViewBinder() {
    @Override
    public boolean setViewValue(View view, Cursor cursor, int column) {
      if (view.getId() != R.id.listItemPic) {
        return false;
      }      
      URI url = URI.create(cursor.getString(column));
      view.setTag(url);
      return true;
    }    
  };
  
  private void hideAnnouncement() {
    mAnnouncementFadeOutAnimation = new AlphaAnimation(1, 0);
    mAnnouncementFadeOutAnimation.setDuration(800);
    mAnnouncementLayout.startAnimation(mAnnouncementFadeOutAnimation);
    mAnnouncementLayout.setVisibility(View.GONE);
  }
  
  private void showAnnouncement(String announcementText, String announcementUrl) {
    if (announcementUrl != "null") {
      announcementText = announcementText.concat("\n" + announcementUrl);  
    }    
    mAnnouncementText.setText(announcementText);
    mAnnouncementFadeInAnimation = new AlphaAnimation(0,1);
    mAnnouncementFadeInAnimation.setDuration(800);
    mAnnouncementLayout.startAnimation(mAnnouncementFadeInAnimation);
    mAnnouncementLayout.setVisibility(View.VISIBLE);
  }

} //class





Java Source Code List

com.readystatesoftware.mapviewballoons.BalloonItemizedOverlay.java
com.readystatesoftware.mapviewballoons.BalloonOverlayView.java
com.tillsimon.storageroom_example.activities.RestaurantDetailActivity.java
com.tillsimon.storageroom_example.activities.RestaurantListViewActivity.java
com.tillsimon.storageroom_example.activities.RestaurantMapActivity.java
com.tillsimon.storageroom_example.activities.maphelper.RestaurantOverlayItem.java
com.tillsimon.storageroom_example.activities.maphelper.RestaurantsOverlay.java
com.tillsimon.storageroom_example.application.AppConfigInterface.java
com.tillsimon.storageroom_example.application.RestaurantApplication.java
com.tillsimon.storageroom_example.model.database.RestaurantsDatabaseHelper.java
com.tillsimon.storageroom_example.model.database.RestaurantsTableInterface.java
com.tillsimon.storageroom_example.model.webconnect.AnnouncementDownloaderDelegate.java
com.tillsimon.storageroom_example.model.webconnect.AnnouncementDownloader.java
com.tillsimon.storageroom_example.model.webconnect.RestaurantsDownloaderDelegate.java
com.tillsimon.storageroom_example.model.webconnect.RestaurantsDownloader.java