package com.jparkie.aizoban.views.fragments;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.jparkie.aizoban.R;
import com.jparkie.aizoban.presenters.MarkReadPresenter;
import com.jparkie.aizoban.presenters.MarkReadPresenterOfflineImpl;
import com.jparkie.aizoban.presenters.MarkReadPresenterOnlineImpl;
import com.jparkie.aizoban.presenters.mapper.MarkReadMapper;
import com.jparkie.aizoban.utils.wrappers.RequestWrapper;
import com.jparkie.aizoban.views.MarkReadView;
public class MarkReadFragment extends DialogFragment implements MarkReadView, MarkReadMapper {
public static final String TAG = MarkReadFragment.class.getSimpleName();
public static final String PRESENTER_ARGUMENT_KEY = TAG + ":" + "PresenterArgumentKey";
public static final String REQUEST_ARGUMENT_KEY = TAG + ":" + "RequestArgumentKey";
private MarkReadPresenter mMarkReadPresenter;
private ListView mListView;
private RelativeLayout mEmptyRelativeLayout;
private Button mToggleButton;
public static MarkReadFragment newOnlineInstance(RequestWrapper mangaRequest) {
MarkReadFragment newInstance = new MarkReadFragment();
Bundle arguments = new Bundle();
arguments.putString(PRESENTER_ARGUMENT_KEY, MarkReadPresenterOnlineImpl.TAG);
arguments.putParcelable(REQUEST_ARGUMENT_KEY, mangaRequest);
newInstance.setArguments(arguments);
return newInstance;
}
public static MarkReadFragment newOfflineInstance(RequestWrapper mangaRequest) {
MarkReadFragment newInstance = new MarkReadFragment();
Bundle arguments = new Bundle();
arguments.putString(PRESENTER_ARGUMENT_KEY, MarkReadPresenterOfflineImpl.TAG);
arguments.putParcelable(REQUEST_ARGUMENT_KEY, mangaRequest);
newInstance.setArguments(arguments);
return newInstance;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle arguments = getArguments();
if (arguments != null) {
if (arguments.containsKey(PRESENTER_ARGUMENT_KEY)) {
String presenterType = arguments.getString(PRESENTER_ARGUMENT_KEY);
if (presenterType.equals(MarkReadPresenterOnlineImpl.TAG)) {
mMarkReadPresenter = new MarkReadPresenterOnlineImpl(this, this);
} else if (presenterType.equals(MarkReadPresenterOfflineImpl.TAG)) {
mMarkReadPresenter = new MarkReadPresenterOfflineImpl(this, this);
}
}
}
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View addToQueueView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_mark_read, null);
mListView = (ListView)addToQueueView.findViewById(R.id.listView);
mEmptyRelativeLayout = (RelativeLayout)addToQueueView.findViewById(R.id.emptyRelativeLayout);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
dialogBuilder.setView(addToQueueView)
.setPositiveButton(R.string.mark_read_dialog_button_mark, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mMarkReadPresenter.onQueueButtonClick();
}
})
.setNeutralButton(R.string.mark_read_dialog_button_toggle_all, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do Nothing.
}
})
.setNegativeButton(R.string.mark_read_dialog_button_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MarkReadFragment.this.getDialog().cancel();
}
});
return dialogBuilder.create();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
mMarkReadPresenter.restoreState(savedInstanceState);
} else {
mMarkReadPresenter.handleInitialArguments(getArguments());
}
mMarkReadPresenter.initializeViews();
mMarkReadPresenter.initializeDataFromDatabase();
}
@Override
public void onStart() {
super.onStart();
mMarkReadPresenter.overrideDialogButtons();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMarkReadPresenter.saveState(outState);
}
@Override
public void onDestroy() {
super.onDestroy();
mMarkReadPresenter.destroyAllSubscriptions();
mMarkReadPresenter.releaseAllResources();
}
// MarkReadView:
@Override
public void initializeEmptyRelativeLayout() {
if (mEmptyRelativeLayout != null) {
((ImageView) mEmptyRelativeLayout.findViewById(R.id.emptyImageView)).setImageResource(R.drawable.ic_history_white_48dp);
((ImageView) mEmptyRelativeLayout.findViewById(R.id.emptyImageView)).setColorFilter(getResources().getColor(R.color.accentPinkA200), PorterDuff.Mode.MULTIPLY);
((TextView) mEmptyRelativeLayout.findViewById(R.id.emptyTextView)).setText(R.string.no_available_chapters);
((TextView) mEmptyRelativeLayout.findViewById(R.id.instructionsTextView)).setText(R.string.available_chapters_instructions);
}
}
@Override
public void hideEmptyRelativeLayout() {
if (mEmptyRelativeLayout != null) {
mEmptyRelativeLayout.setVisibility(View.GONE);
}
}
@Override
public void showEmptyRelativeLayout() {
if (mEmptyRelativeLayout != null) {
mEmptyRelativeLayout.setVisibility(View.VISIBLE);
}
}
@Override
public void overrideToggleButton() {
AlertDialog currentDialog = (AlertDialog)getDialog();
if (currentDialog != null) {
mToggleButton = currentDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
mToggleButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
mMarkReadPresenter.onToggleButtonClick();
}
});
}
}
@Override
public void selectAll() {
if (mListView != null) {
for (int index = 0; index < mListView.getCount(); index++) {
mListView.setItemChecked(index, true);
}
}
}
@Override
public void clear() {
if (mListView != null) {
for (int index = 0; index < mListView.getCount(); index++) {
mListView.setItemChecked(index, false);
}
}
}
@Override
public Context getContext() {
return getActivity();
}
// MarkReadMapper:
@Override
public void registerAdapter(BaseAdapter adapter) {
if (mListView != null) {
mListView.setAdapter(adapter);
}
}
@Override
public int getCheckedItemCount() {
if (mListView != null) {
return mListView.getCheckedItemCount();
} else {
return 0;
}
}
@Override
public SparseBooleanArray getCheckedItemPositions() {
if (mListView != null) {
return mListView.getCheckedItemPositions();
} else {
return null;
}
}
@Override
public Parcelable getPositionState() {
if (mListView != null) {
return mListView.onSaveInstanceState();
} else {
return null;
}
}
@Override
public void setPositionState(Parcelable state) {
if (mListView != null) {
mListView.onRestoreInstanceState(state);
}
}
}