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);
}
}
}
}