package com.kenny.openimgur.fragments;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityOptionsCompat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.kenny.openimgur.R;
import com.kenny.openimgur.activities.MemeActivity;
import com.kenny.openimgur.ui.adapters.GalleryAdapter;
import com.kenny.openimgur.api.ApiClient;
import com.kenny.openimgur.api.responses.GalleryResponse;
import com.kenny.openimgur.classes.ImgurBaseObject;
import com.kenny.openimgur.collections.SetUniqueList;
import com.kenny.openimgur.util.DBContracts;
import com.kenny.openimgur.util.FileUtil;
import com.kenny.openimgur.util.LogUtil;
import com.kenny.openimgur.util.RequestCodes;
import com.kenny.openimgur.util.SqlHelper;
import com.kennyc.view.MultiStateView;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Kenny-PC on 3/7/2015.
*/
public class MemeFragment extends BaseGridFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_gallery, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mListener != null) mListener.onUpdateActionBarTitle(getString(R.string.meme_gen));
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.meme_fragment, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh:
if (getAdapter() != null) getAdapter().clear();
mMultiStateView.setViewState(MultiStateView.VIEW_STATE_LOADING);
fetchGallery();
return true;
case R.id.importPhoto:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(intent, RequestCodes.SELECT_PHOTO);
} else {
Snackbar.make(getSnackbarView(), R.string.cant_launch_intent, Snackbar.LENGTH_LONG).show();
}
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void fetchGallery() {
super.fetchGallery();
ApiClient.getService().getDefaultMemes().enqueue(this);
}
@Override
protected void onItemSelected(View view, int position, ArrayList<ImgurBaseObject> items) {
if (isApiLevel(Build.VERSION_CODES.LOLLIPOP)) {
View v = view.findViewById(R.id.image);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), v, getString(R.string.gallery_item_transition));
startActivity(MemeActivity.createIntent(getActivity(), items.get(position)), options.toBundle());
} else {
startActivity(MemeActivity.createIntent(getActivity(), items.get(position)));
}
}
@Override
protected void onRestoreSavedInstance(Bundle savedInstanceState) {
super.onRestoreSavedInstance(savedInstanceState);
if (getAdapter() == null || getAdapter().isEmpty()) {
List<ImgurBaseObject> memes = SqlHelper.getInstance(getActivity()).getMemes();
if (!memes.isEmpty()) {
LogUtil.v(TAG, "Memes found in database");
setAdapter(new GalleryAdapter(getActivity(), SetUniqueList.decorate(memes), this, showPoints()));
mMultiStateView.setViewState(MultiStateView.VIEW_STATE_CONTENT);
mHasMore = false;
}
}
}
@Override
protected void onApiResult(GalleryResponse galleryResponse) {
super.onApiResult(galleryResponse);
mHasMore = false;
if (!galleryResponse.data.isEmpty()) {
SqlHelper sql = SqlHelper.getInstance(getActivity());
sql.deleteFromTable(DBContracts.MemeContract.TABLE_NAME);
sql.addMemes(galleryResponse.data);
}
}
@Override
protected boolean showPoints() {
return false;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RequestCodes.SELECT_PHOTO && resultCode == Activity.RESULT_OK) {
File file = FileUtil.createFile(data.getData(), getActivity());
if (FileUtil.isFileValid(file)) {
startActivity(MemeActivity.createIntent(getActivity(), file));
} else {
Snackbar.make(getSnackbarView(), R.string.upload_decode_failure, Snackbar.LENGTH_LONG).show();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}