package com.abewy.android.apps.klyph.fragment;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageButton;
import android.widget.ImageView;
import com.abewy.android.adapter.TypeAdapter;
import com.abewy.android.apps.klyph.R;
import com.abewy.android.apps.klyph.adapter.BaseAdapterSelector;
import com.abewy.android.apps.klyph.adapter.KlyphAdapter;
import com.abewy.android.apps.klyph.adapter.MultiObjectAdapter;
import com.abewy.android.apps.klyph.core.KlyphDevice;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
import com.abewy.android.apps.klyph.core.imageloader.ImageLoader;
import com.abewy.android.apps.klyph.core.util.AttrUtil;
import com.abewy.android.apps.klyph.request.AsyncRequest.Query;
import com.abewy.android.apps.klyph.widget.CheckableGalleryLayout;
import com.abewy.android.apps.klyph.widget.KlyphGridView;
import com.abewy.util.Android;
public class PostPhotos extends KlyphFragment2
{
private PostPhotoListener listener;
public interface PostPhotoListener
{
public void onPostPhotosItemClick();
public void onPostPhotosDeleteClick();
}
public PostPhotos()
{
setRequestType(Query.GROUP_PHOTOS);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
view.setBackgroundResource(AttrUtil.getResourceId(getActivity(), R.attr.actionBarStackedBackground));
setListVisible(false);
ImageButton deleteButton = (ImageButton) view.findViewById(R.id.delete_button);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if (listener != null)
listener.onPostPhotosDeleteClick();
}
});
super.onViewCreated(view, savedInstanceState);
getGridView().setHorizontalSpacing(0);
defineEmptyText(R.string.empty_list_no_photo);
}
@Override
protected int getNumColumn()
{
return 6;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
// Do not display refresh menu icon
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
if (activity instanceof PostPhotoListener)
{
listener = (PostPhotoListener) activity;
}
}
@Override
public void onDetach()
{
super.onDetach();
listener = null;
}
public void setImages(List<String> uris)
{
MultiObjectAdapter adapter = new MultiObjectAdapter(getListView())
{
@Override
protected TypeAdapter<GraphObject> getAdapter(GraphObject object, int layoutType)
{
TypeAdapter<GraphObject> adapter = BaseAdapterSelector.getAdapter(object, layoutType);
if (adapter != null)
return adapter;
if (object instanceof Picture)
return new GalleryAdapter();
return null;
}
};
for (String uri : uris)
{
adapter.add(new Picture(uri));
}
getGridView().setAdapter(adapter);
adapter.notifyDataSetChanged();
setListVisible(true);
}
public void updateLayout()
{
if (getGridView() != null && getGridView().getAdapter() != null)
{
LayoutParams params = getGridView().getLayoutParams();
if (KlyphDevice.isLandscapeMode() || getGridView().getAdapter().getCount() <= getNumColumn())
{
params.height = (int) ((KlyphDevice.getDeviceWidth() - (48 + 8 + 2) * KlyphDevice.getDeviceDensity()) / getNumColumn());
}
else
{
params.height = (int) ((KlyphDevice.getDeviceWidth() - (48 + 8 + 2) * KlyphDevice.getDeviceDensity()) / (getNumColumn()/2));
}
getGridView().setLayoutParams(params);
}
}
@Override
public void onGridItemClick(KlyphGridView gridView, View view, int position, long id)
{
if (listener != null)
{
listener.onPostPhotosItemClick();
}
}
@Override
protected int getCustomLayout()
{
return R.layout.fragment_post_photos;
}
private static class Picture extends GraphObject
{
private static final int VIEW_TYPE = 65874126;
private String uri;
public Picture(String uri)
{
this.uri = uri;
}
public String getUri()
{
return uri;
}
@Override
public int getItemViewType()
{
return VIEW_TYPE;
}
}
private static class GalleryAdapter extends KlyphAdapter
{
private int placeHolder = -1;
public GalleryAdapter()
{
super();
}
@Override
protected int getLayout()
{
return R.layout.item_gallery;
}
@Override
protected void attachHolder(View view)
{
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
ImageView checkView = (ImageView) view.findViewById(R.id.checkmark);
checkView.setVisibility(View.GONE);
setHolder(view, new GalleryHolder(imageView));
}
@Override
protected void mergeViewWithData(View view, GraphObject data)
{
if (!Android.isMinAPI(11))
{
((CheckableGalleryLayout) view).setChecked(data.isSelected());
}
GalleryHolder holder = (GalleryHolder) getHolder(view);
Picture mi = (Picture) data;
holder.getImageView().setImageDrawable(null);
if (placeHolder == -1)
placeHolder = AttrUtil.getResourceId(holder.getImageView().getContext(), R.attr.squarePlaceHolderIcon);
String uri = "file://" + mi.getUri();
ImageLoader.display(holder.getImageView(), uri, placeHolder);
}
private class GalleryHolder
{
private ImageView imageView;
public GalleryHolder(ImageView imageView)
{
this.imageView = imageView;
}
public ImageView getImageView()
{
return imageView;
}
}
}
@Override
public void onDestroy()
{
super.onDestroy();
listener = null;
}
}