/* * Copyright (C) 2011 twocity * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.twocity.asoiaf.ui; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener; import com.twocity.asoiaf.R; import com.twocity.asoiaf.utils.DataBaseHelper; import com.twocity.asoiaf.utils.DownloadIntentService; import com.twocity.asoiaf.utils.ImageDownloader; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.database.SQLException; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.SimpleCursorAdapter; public class GridViewActivity extends BaseActivity{ private static final String TAG = "ImageViewActivity"; private static int QUERY_SUCCESS_MSG = 0; private static int QUERY_FAILED_MSG = 1; private String ACTION_FETCH_URLS = "action.fetch_urls"; private GridView gridView; private ProgressBar mProgressBar; private ImageCursorAdapter2 cursorAdapter = null; private Cursor mCursor = null; protected ImageLoader imageLoader = ImageLoader.getInstance(); private DisplayImageOptions options; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_gridview); mProgressBar = (ProgressBar)findViewById(R.id.progressbar); options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.frame) .showImageForEmptyUri(R.drawable.frame) .cacheInMemory() .cacheOnDisc() .build(); setGridView(); } private void setGridView(){ gridView = (GridView)findViewById(R.id.gridview); gridView.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView<?> parent,View v,int position,long id){ Cursor c = (Cursor)parent.getAdapter().getItem(position); Intent intent = new Intent(GridViewActivity.this,ImageViewer.class); intent.putExtra("imageurl", c.getString(c.getColumnIndex("original"))); GridViewActivity.this.startActivity(intent); } }); // int[] toViews = {R.id.imageview_item}; // String[] from = {"thumb"}; // cursorAdapter = new ImageCursorAdapter2(GridViewActivity.this, // R.layout.grid_view_item, mCursor, // from, toViews); // gridView.setAdapter(cursorAdapter); mHandler.post(fetchCursorRunnable); } @SuppressWarnings("unused") private void updateData(){ Intent intent = new Intent(GridViewActivity.this,DownloadIntentService.class); intent.setAction(ACTION_FETCH_URLS); GridViewActivity.this.startService(intent); mProgressBar.setVisibility(View.VISIBLE); } private BroadcastReceiver broadcastreceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("action_fetch_urls_complete")){ Log.d(TAG,"=== received imageurl list ==="); mHandler.post(fetchCursorRunnable); } } }; final Runnable fetchCursorRunnable = new Runnable(){ @Override public void run(){ DataBaseHelper dbHelper = new DataBaseHelper(GridViewActivity.this); try{ if(dbHelper.checkDataBase()){ dbHelper.openDataBase(); mCursor = dbHelper.queryCursor(); dbHelper.close(); } }catch(SQLException e){ Log.d(TAG,e.getMessage()); } if(mCursor != null){ mHandler.sendEmptyMessage(QUERY_SUCCESS_MSG); }else{ mHandler.sendEmptyMessage(QUERY_FAILED_MSG); } } }; final Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg){ if(msg.what == QUERY_SUCCESS_MSG){ Log.d(TAG,"=== update listview ==="); int[] toViews = {R.id.imageview_item}; String[] from = {"thumb"}; cursorAdapter = new ImageCursorAdapter2(GridViewActivity.this, R.layout.grid_view_item, mCursor, from, toViews); gridView.setAdapter(cursorAdapter); mProgressBar.setVisibility(View.INVISIBLE); }else if(msg.what == QUERY_FAILED_MSG){ Log.d(TAG,"=== query cursor from database failed ==="); } } }; @Override protected void onStart(){ IntentFilter filter = new IntentFilter(); filter.addAction("action_fetch_urls_complete"); this.registerReceiver(broadcastreceiver, filter); super.onStart(); } @Override protected void onStop(){ imageLoader.stop(); this.unregisterReceiver(broadcastreceiver); super.onStop(); } public class ImageCursorAdapter2 extends SimpleCursorAdapter { private ImageView imageview; private LayoutInflater mInflater; private final ImageDownloader imageDownloader = new ImageDownloader(); public ImageCursorAdapter2 (Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); } @Override public void bindView(View view, Context context, Cursor cursor) { LinearLayout ll = null; if (view == null) { ll = (LinearLayout) mInflater.inflate(R.layout.grid_view_item,null); } else { ll = (LinearLayout)view; } int thumbIndex = cursor.getColumnIndex("thumb"); imageview = (ImageView)ll.findViewById(R.id.imageview_item); imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); String imagelink = cursor.getString(thumbIndex); //imageDownloader.download(imagelink, (ImageView) imageview); imageLoader.displayImage(imagelink, imageview, options, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(Bitmap loadedImage) { Animation anim = AnimationUtils.loadAnimation(GridViewActivity.this, R.anim.fade_in); imageview.setAnimation(anim); anim.start(); } }); } } }