package com.octo.android.robospice.sample.activity; import java.util.ArrayList; import android.annotation.TargetApi; import android.app.Activity; import android.graphics.Point; import android.os.Build; import android.os.Bundle; import android.view.Display; import android.widget.GridView; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.persistence.DurationInMillis; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import com.octo.android.robospice.sample.R; import com.octo.android.robospice.sample.adapter.FlickrPhotoAdapter; import com.octo.android.robospice.sample.model.FlickrPhoto; import com.octo.android.robospice.sample.model.FlickrPhotoList; import com.octo.android.robospice.sample.request.FlickrImageRequestFactory; import com.octo.android.robospice.sample.request.FlickrInterestingPhotosRequest; import com.octo.android.robospice.sample.service.FlickrSpiceService; public class SampleActivity extends Activity { private static final String FLICKR_API_KEY = "cd3660161605453352f8839e32d2e3fc"; private static final int PHOTO_WIDTH = 150; private static final int MIN_COLUMNS = 2; private static final int MAX_COLUMNS = 4; private FlickrPhotoAdapter photoAdapter; private SpiceManager spiceManager = new SpiceManager(FlickrSpiceService.class); /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bindViews(); } private void bindViews() { GridView imageGrid = (GridView) findViewById(R.id.image_grid); int gridSize = sizeColumnsToFit(imageGrid, PHOTO_WIDTH, MIN_COLUMNS, MAX_COLUMNS); FlickrImageRequestFactory imageRequestFactory = new FlickrImageRequestFactory(this); imageRequestFactory.setPhotoFormat(FlickrImageRequestFactory.LARGE_THUMB_SQUARE).setSampleSize(gridSize, gridSize); photoAdapter = new FlickrPhotoAdapter(this, R.layout.grid_view_item, R.id.image, new ArrayList<FlickrPhoto>(), imageRequestFactory); imageGrid.setAdapter(photoAdapter); imageGrid.setOnScrollListener(photoAdapter); } @TargetApi(13) @SuppressWarnings("deprecation") private int sizeColumnsToFit(GridView grid, int minColumnWidth, int minColumns, int maxColumns) { Display display = getWindowManager().getDefaultDisplay(); int screenWidth; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) { screenWidth = display.getWidth(); } else { Point size = new Point(); display.getSize(size); screenWidth = size.x; } int numColumns = screenWidth / minColumnWidth; numColumns = Math.min(numColumns, maxColumns); numColumns = Math.max(numColumns, minColumns); int remainingSpace = screenWidth - numColumns * minColumnWidth; int columnWidth = minColumnWidth + remainingSpace / numColumns; grid.setNumColumns(numColumns); grid.setColumnWidth(columnWidth); return columnWidth; } @Override protected void onStart() { spiceManager.start(this); FlickrInterestingPhotosRequest request = new FlickrInterestingPhotosRequest(FLICKR_API_KEY); PhotoListRequestListener requestListener = new PhotoListRequestListener(); spiceManager.execute(request, requestListener); spiceManager.addListenerIfPending(FlickrPhotoList.class, FLICKR_API_KEY, requestListener); spiceManager.getFromCache(FlickrPhotoList.class, FLICKR_API_KEY, DurationInMillis.ONE_MINUTE, requestListener); super.onStart(); } @Override protected void onStop() { spiceManager.shouldStop(); super.onStop(); } void onClick() { } @Override protected void onDestroy() { spiceManager.removeDataFromCache(FlickrPhotoList.class); super.onDestroy(); } private class PhotoListRequestListener implements RequestListener<FlickrPhotoList> { @Override public void onRequestFailure(SpiceException spiceException) { // need to display refresh image } @Override public void onRequestSuccess(FlickrPhotoList flickrPhotoList) { for (FlickrPhoto photo : flickrPhotoList.getPhotos()) { photoAdapter.add(photo); } } } }