package com.ihateflyingbugs.kidsm.uploadphoto;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ViewFlipper;
import com.ihateflyingbugs.kidsm.ExpandableHeightGridView;
import com.ihateflyingbugs.kidsm.R;
import com.localytics.android.LocalyticsSession;
public class GetAlbumFromLocalActivity extends Activity {
Map<String, LocalAlbum> albumInfo;
ViewFlipper viewFlipper;
boolean isAlbumShowing;
ExpandableHeightGridView gridView;
PhotoWithCheckAdapter adapter;
ArrayList<PhotoWithCheck> photoList;
private LocalyticsSession localyticsSession;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_getalbumfromlocal);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.general_actionbar_function_bg));
getActionBar().setIcon(R.drawable.general_actionbar_back_btnset);
albumInfo = new HashMap<String, LocalAlbum>();
viewFlipper = (ViewFlipper)findViewById(R.id.uploadphoto_flipper);
isAlbumShowing = true;
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
getAlbumInfo();
}
});
}
}).start();
isAlbumShowing = true;
this.localyticsSession = new LocalyticsSession(this.getApplicationContext()); // Context used to access device resources
this.localyticsSession.open(); // open the session
this.localyticsSession.upload(); // upload any data
}
public void onResume() {
super.onResume();
this.localyticsSession.open();
}
public void onPause() {
this.localyticsSession.close();
this.localyticsSession.upload();
super.onPause();
}
void flipView() {
if( isAlbumShowing ) {
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(GetAlbumFromLocalActivity.this, R.anim.viewin_left));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(GetAlbumFromLocalActivity.this, R.anim.viewout_left));
viewFlipper.showNext();
}
else {
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_right));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_right));
viewFlipper.showPrevious();
}
isAlbumShowing = !isAlbumShowing;
invalidateOptionsMenu();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if( isAlbumShowing == false && keyCode == KeyEvent.KEYCODE_BACK) {
setTitle(getString(R.string.getalbumfromlocalactivity));
flipView();
return true;
}
else
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
if( isAlbumShowing ) {
}
else {
getMenuInflater().inflate(R.menu.uploadphoto_register, menu);
}
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
if( isAlbumShowing ) {
finish();
}
else {
setTitle(getString(R.string.getalbumfromlocalactivity));
flipView();
}
return true;
case R.id.uploadphoto_register:
ArrayList<String> filePaths = new ArrayList<String>();
for(int i = 0; i < photoList.size(); i++) {
if( photoList.get(i).isChecked )
filePaths.add(photoList.get(i).uri.toString());
}
if( filePaths.size() != 0 ) {
Intent data = new Intent();
data.putExtra("mode", 1);
data.putExtra("filePath", filePaths);
setResult(Activity.RESULT_OK, data);
finish();
}
else {
new AlertDialog.Builder(this)
.setMessage("������ 1�� �̻� �����ϼ���")
.setPositiveButton("Ȯ��", null)
.show();
}
return true;
}
return false;
}
void setPhotosInAlbum(String albumId) {
photoList = new ArrayList<PhotoWithCheck>();
gridView = (ExpandableHeightGridView) findViewById(R.id.uploadphoto_photolist);
String[] projection = new String[]{
MediaStore.Images.Media.BUCKET_ID,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
};
// Get the base URI for the People table in the Contacts content provider.
Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Make the query.\
Cursor cur = getContentResolver().query(images,
projection, // Which columns to return
MediaStore.Images.Media.BUCKET_ID + " = " + albumId, // Which rows to return (all rows)
null, // Selection arguments (none)
"" // Ordering
);
if (cur.moveToFirst()) {
String data;
String bucketid;
long id;
int bucketIdColumn = cur.getColumnIndex(
MediaStore.Images.Media.BUCKET_ID);
int idColumn = cur.getColumnIndex(
MediaStore.Images.Media._ID);
int dataColumn = cur.getColumnIndex(
MediaStore.Images.Media.DATA);
do {
// Get the field values
bucketid = cur.getString(bucketIdColumn);
data = cur.getString(dataColumn);
id = cur.getLong(idColumn);
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
PhotoWithCheck photoWithCheck = new PhotoWithCheck(data, uri);
photoWithCheck.bitmap = getPreview(data);
photoList.add(photoWithCheck);
} while (cur.moveToNext());
}
adapter = new PhotoWithCheckAdapter(photoList, this);
//gridView.setExpanded(true);
gridView.setAdapter(adapter);
}
private void getAlbumInfo() {
String[] projection = new String[]{
MediaStore.Images.Media._ID,
MediaStore.Images.Media.BUCKET_ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Thumbnails.DATA
};
// Get the base URI for the People table in the Contacts content provider.
Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Make the query.\
Cursor cur = getContentResolver().query(images,
projection, // Which columns to return
"", // Which rows to return (all rows)
null, // Selection arguments (none)
"" // Ordering
);
Log.i("ListingImages"," query count="+cur.getCount());
if (cur.moveToFirst()) {
String bucket;
String data;
String bucketid;
int bucketIdColumn = cur.getColumnIndex(
MediaStore.Images.Media.BUCKET_ID);
int bucketColumn = cur.getColumnIndex(
MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
int dataColumn = cur.getColumnIndex(
MediaStore.Images.Thumbnails.DATA);
do {
// Get the field values
bucketid = cur.getString(bucketIdColumn);
bucket = cur.getString(bucketColumn);
data = cur.getString(dataColumn);
LocalAlbum album = new LocalAlbum(bucketid, bucket, data);
if( albumInfo.containsKey(bucketid) ) {
int numOfPhotos = albumInfo.get(bucketid).numOfPhotos;
album.numOfPhotos = numOfPhotos + 1;
}
albumInfo.put(bucketid, album);
// Do something with the values.
} while (cur.moveToNext());
}
final ArrayList<LocalAlbum> albumArray = new ArrayList<LocalAlbum>();
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
Set<String> keySet = albumInfo.keySet();
Iterator<String> iterator = keySet.iterator();
while(iterator.hasNext()) {
try {
String key = iterator.next();
LocalAlbum album = albumInfo.get(key);
album.bitmap = getPreview(album.data);
albumArray.add(album);
Log.i("ListingImages", " bucket is " + album.getName() + " and number of photos are " + album.numOfPhotos);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
});
}
}).start();
LocalAlbumAdapter adapter = new LocalAlbumAdapter(this, albumArray);
ListView listView = (ListView)findViewById(R.id.uploadphoto_albumlist);
listView.setAdapter(adapter);
listView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View v, final int position, long id) {
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
setPhotosInAlbum(albumArray.get(position).bucketid);
setTitle(((TextView)v.findViewById(R.id.album_name)).getText().toString());
flipView();
}
});
}
}).start();
}
});
}
Bitmap getPreview(String uri) {
File image = new File(uri);
BitmapFactory.Options bounds = new BitmapFactory.Options();
bounds.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image.getPath(), bounds);
if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
return null;
int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
: bounds.outWidth;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = originalSize / 80;
Bitmap srcBmp = BitmapFactory.decodeFile(image.getPath(), opts);
Bitmap dstBmp;
if (srcBmp.getWidth() >= srcBmp.getHeight()){
dstBmp = Bitmap.createBitmap(
srcBmp,
srcBmp.getWidth()/2 - srcBmp.getHeight()/2,
0,
srcBmp.getHeight(),
srcBmp.getHeight()
);
}else{
dstBmp = Bitmap.createBitmap(
srcBmp,
0,
srcBmp.getHeight()/2 - srcBmp.getWidth()/2,
srcBmp.getWidth(),
srcBmp.getWidth()
);
}
return dstBmp;
}
}