package com.abewy.android.apps.klyph.app;
import java.util.ArrayList;
import java.util.List;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import com.abewy.android.apps.klyph.KlyphBundleExtras;
import com.abewy.android.apps.klyph.KlyphPreferences;
import com.abewy.android.apps.klyph.R;
import com.abewy.android.apps.klyph.core.fql.Photo;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
import com.abewy.android.apps.klyph.core.request.RequestError;
import com.abewy.android.apps.klyph.core.request.Response;
import com.abewy.android.apps.klyph.fragment.IToggleBarVisibility;
import com.abewy.android.apps.klyph.fragment.ImageFragment;
import com.abewy.android.apps.klyph.request.AsyncRequest;
import com.abewy.android.apps.klyph.request.AsyncRequest.Query;
import com.abewy.android.apps.klyph.view.ListEmptyView;
public class AlbumActivity extends TitledViewPagerActivity implements IToggleBarVisibility
{
private TabsAdapter adapter;
@Override
protected int getCustomTheme()
{
return KlyphPreferences.getProfileTheme();
}
@Override
public void onCreate(Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
super.onCreate(savedInstanceState);
getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ab_background_transparent_gradient));
getWindow().setBackgroundDrawableResource(R.drawable.image_background);
setTitle("");
setLoadingView(findViewById(R.id.progress_bar));
ArrayList<Photo> photos = getIntent().getParcelableArrayListExtra(KlyphBundleExtras.ALBUM_PHOTOS);
List<String> imageIds = getIntent().getStringArrayListExtra(KlyphBundleExtras.PHOTO_LIST_ID);
if (photos != null)
{
List<GraphObject> list = new ArrayList<GraphObject>();
for (Photo photo : photos)
{
list.add(photo);
}
((TabsAdapter) getPagerAdapter()).setPhotos(list);
int startPosition = getIntent().getIntExtra(KlyphBundleExtras.START_POSITION, 0);
getViewPager().setCurrentItem(startPosition);
showViewPager();
((TabsAdapter) getPagerAdapter()).show();
setLoadingViewVisible(false);
}
else if (imageIds != null)
{
String id = "";
int n = imageIds.size();
for (int i = 0; i < n; i++)
{
if (i < n - 1)
{
id += "\"" + imageIds.get(i) + "\", ";
}
else
{
id += "\"" + imageIds.get(i) + "\"";
}
}
new AsyncRequest(Query.PHOTO_LIST, id, "", new AsyncRequest.Callback() {
@Override
public void onComplete(final Response response)
{
runOnUiThread(new Runnable() {
@Override
public void run()
{
if (response.getError() == null)
{
onPhotoListRequestSuccess(response.getGraphObjectList());
}
else
{
onPhotoListRequestError(response.getError());
}
}
});
}
}).execute();
}
else
{
Log.d("AlbumActivity", "else");
String id = getIntent().getStringExtra(KlyphBundleExtras.ALBUM_ID);
// String name =
// getIntent().getStringExtra(CkoobafeBundleExtras.ALBUM_NAME);
// showPageIndicator();
showViewPager();
// ((TabsAdapter) getPagerAdapter()).show();
new AsyncRequest(Query.ALBUM_PHOTOS, id, "", new AsyncRequest.Callback() {
@Override
public void onComplete(final Response response)
{
runOnUiThread(new Runnable() {
@Override
public void run()
{
if (response.getError() == null)
{
onAlbumPhotosRequestSuccess(response.getGraphObjectList());
}
else
{
onAlbumPhotosRequestError(response.getError());
}
}
});
}
}).execute();
}
}
private void onPhotoListRequestSuccess(List<GraphObject> photos)
{
final String firstVisibleId = getIntent().getStringExtra(KlyphBundleExtras.PHOTO_ID);
int n = photos.size();
int startPosition = 0;
for (int i = 0; i < n; i++)
{
Photo photo = (Photo) photos.get(i);
if (firstVisibleId.equals(photo.getPid()))
{
startPosition = i;
break;
}
}
((TabsAdapter) getPagerAdapter()).setPhotos(photos);
getViewPager().setCurrentItem(startPosition);
showViewPager();
setLoadingViewVisible(false);
}
private void onPhotoListRequestError(RequestError error)
{
Log.d("AlbumActivity", "request error " + error);
showError();
}
private void onAlbumPhotosRequestSuccess(List<GraphObject> photos)
{
((TabsAdapter) getPagerAdapter()).setPhotos(photos);
showViewPager();
setLoadingViewVisible(false);
}
private void onAlbumPhotosRequestError(RequestError error)
{
Log.d("AlbumActivity", "request error " + error);
showError();
}
private void showError()
{
ListEmptyView lev = new ListEmptyView(this);
lev.setText(R.string.request_error);
addContentView(lev, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
setLoadingViewVisible(false);
}
@Override
protected int getLayout()
{
return R.layout.activity_album;
}
@Override
protected FragmentPagerAdapter getPagerAdapter()
{
if (adapter == null)
adapter = new TabsAdapter(getFragmentManager(), getViewPager());
return adapter;
}
@Override
public void onDestroy()
{
super.onDestroy();
if (adapter != null)
{
adapter.destroy();
adapter = null;
}
}
private static class TabsAdapter extends FragmentPagerAdapter implements OnPageChangeListener
{
private List<GraphObject> photos;
private ImageFragment[] fragments;
public TabsAdapter(FragmentManager fm, ViewPager viewPager)
{
super(fm);
fragments = new ImageFragment[0];
photos = new ArrayList<GraphObject>();
viewPager.setOnPageChangeListener(this);
}
public void show()
{
notifyDataSetChanged();
}
public void setPhotos(List<GraphObject> photos)
{
this.photos = photos;
fragments = new ImageFragment[photos.size()];
for (int i = 0; i < photos.size(); i++)
{
Photo photo = (Photo) photos.get(i);
fragments[i] = new ImageFragment(i);
fragments[i].setElementId(photo.getObject_id());
}
notifyDataSetChanged();
}
@Override
public int getCount()
{
if (photos != null)
return photos.size();
return 0;
}
@Override
public Fragment getItem(int position)
{
return fragments[position];
}
@Override
public CharSequence getPageTitle(int position)
{
return "";
}
private boolean barVisibility = true;
public void setBarVisibility(Fragment fragment, boolean visible)
{
barVisibility = visible;
for (ImageFragment imageFragment : fragments)
{
if (imageFragment != fragment)
{
imageFragment.setBarVisibility(visible);
}
}
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageSelected(int position)
{
fragments[position].setBarVisibility(barVisibility);
}
public void destroy()
{
photos = null;
fragments = null;
}
}
private boolean barVisibility = true;
@Override
public boolean toggleBarVisibility(Fragment fragment)
{
barVisibility = !barVisibility;
if (barVisibility == true)
{
getActionBar().show();
}
else
{
getActionBar().hide();
}
((TabsAdapter) getPagerAdapter()).setBarVisibility(fragment, barVisibility);
return barVisibility;
}
@Override
public boolean isBarVisible()
{
return barVisibility;
}
}