package com.dozuki.ifixit.ui.gallery;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FixedFragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.ViewGroup;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.dozuki.ifixit.App;
import com.dozuki.ifixit.R;
import com.dozuki.ifixit.model.Image;
import com.dozuki.ifixit.model.user.LoginEvent;
import com.dozuki.ifixit.ui.BaseMenuDrawerActivity;
import com.dozuki.ifixit.util.Utils;
import com.google.analytics.tracking.android.Fields;
import com.google.analytics.tracking.android.MapBuilder;
import com.viewpagerindicator.TitlePageIndicator;
import java.util.ArrayList;
import java.util.HashMap;
public class GalleryActivity extends BaseMenuDrawerActivity {
public static final String MEDIA_FRAGMENT_PHOTOS = "MEDIA_FRAGMENT_PHOTOS";
public static final String ACTIVITY_RETURN_MODE = "ACTIVITY_RETURN_ID";
private static final String SHOWING_DELETE = "SHOWING_DELETE";
public static final String MEDIA_RETURN_KEY = "MEDIA_RETURN_KEY";
public static final String ATTACHED_MEDIA_IDS = "ATTACHED_MEDIA_IDS";
public static boolean showingLogout = false;
public static boolean showingHelp = false;
public static boolean showingDelete = false;
private HashMap<String, MediaFragment> mMediaCategoryFragments;
private MediaFragment mCurrentMediaFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_root);
mMediaCategoryFragments = new HashMap<String, MediaFragment>();
mMediaCategoryFragments.put(MEDIA_FRAGMENT_PHOTOS, new PhotoMediaFragment());
/*
* mMediaCategoryFragments.put(MEDIA_FRAGMENT_VIDEOS,
* new VideoMediaFragment());
* mMediaCategoryFragments.put(MEDIA_FRAGMENT_EMBEDS,
* new EmbedMediaFragment());
*/
mCurrentMediaFragment = mMediaCategoryFragments.get(MEDIA_FRAGMENT_PHOTOS);
showingHelp = false;
showingLogout = false;
showingDelete = false;
boolean getMediaItemForReturn = false;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
int returnValue = bundle.getInt(ACTIVITY_RETURN_MODE, -1);
ArrayList<Image> alreadyAttachedImages = (ArrayList<Image>)bundle.getSerializable(ATTACHED_MEDIA_IDS);
mCurrentMediaFragment.setAlreadyAttachedImages(alreadyAttachedImages);
if (returnValue != -1) {
getMediaItemForReturn = true;
}
startActionMode(new ContextualMediaSelect());
}
mCurrentMediaFragment.setForReturn(getMediaItemForReturn);
StepAdapter stepAdapter = new StepAdapter(this.getSupportFragmentManager());
ViewPager pager = (ViewPager) findViewById(R.id.gallery_view_body_pager);
pager.setAdapter(stepAdapter);
TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.gallery_view_top_bar);
titleIndicator.setViewPager(pager);
pager.setCurrentItem(1);
App.sendScreenView("/user/media/images");
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SHOWING_DELETE, showingDelete);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean isLoggedIn = ((App) getApplication()).isUserLoggedIn();
switch (item.getItemId()) {
case R.id.top_camera_button:
if (!isLoggedIn) {
return false;
}
mCurrentMediaFragment.launchCamera();
return true;
case R.id.top_gallery_button:
if (!isLoggedIn) {
return false;
}
mCurrentMediaFragment.launchImageChooser();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onLogin(LoginEvent.Login event) {
super.onLogin(event);
if (App.get().isFirstTimeGalleryUser()) {
createHelpDialog().show();
App.get().setFirstTimeGalleryUser(false);
}
}
@Override
public boolean finishActivityIfLoggedOut() {
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.gallery_menu, menu);
return super.onCreateOptionsMenu(menu);
}
/**
* Why in the world is this class called StepAdapter?
*/
public class StepAdapter extends FixedFragmentStatePagerAdapter {
public StepAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return mMediaCategoryFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return Utils.capitalize(getString(R.string.images));
/*
* switch (position) {
* case 0:
* return "Videos";
* case 1:
* return "Photos";
* case 2:
* return "Embeds";
* default:
* return "Photos";
* }
*/
}
@Override
public Fragment getItem(int position) {
return mMediaCategoryFragments.get(MEDIA_FRAGMENT_PHOTOS);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
mCurrentMediaFragment = (MediaFragment) object;
}
}
private AlertDialog createHelpDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.media_help_title)).setMessage(getString(R.string.media_help_message,
App.get().getSite().mTitle))
.setPositiveButton(getString(R.string.media_help_confirm), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
return builder.create();
}
public final class ContextualMediaSelect implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Create the menu from the xml file
getSupportMenuInflater().inflate(R.menu.gallery_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.findItem(R.id.top_camera_button).setVisible(false);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
finish();
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
boolean isLoggedIn = ((App) getApplication()).isUserLoggedIn();
if (!isLoggedIn) return false;
switch (item.getItemId()) {
case R.id.top_camera_button:
mCurrentMediaFragment.launchCamera();
break;
case R.id.top_gallery_button:
mCurrentMediaFragment.launchImageChooser();
break;
}
return true;
}
}
}