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.AddToQueuePresenter;
import com.jparkie.aizoban.presenters.AddToQueuePresenterImpl;
import com.jparkie.aizoban.presenters.mapper.AddToQueueMapper;
import com.jparkie.aizoban.utils.wrappers.RequestWrapper;
import com.jparkie.aizoban.views.AddToQueueView;
public class AddToQueueFragment extends DialogFragment implements AddToQueueView, AddToQueueMapper {
public static final String TAG = AddToQueueFragment.class.getSimpleName();
public static final String REQUEST_ARGUMENT_KEY = TAG + ":" + "RequestArgumentKey";
private AddToQueuePresenter mAddToQueuePresenter;
private ListView mListView;
private RelativeLayout mEmptyRelativeLayout;
private Button mToggleButton;
public static AddToQueueFragment newInstance(RequestWrapper mangaRequest) {
AddToQueueFragment newInstance = new AddToQueueFragment();
Bundle arguments = new Bundle();
arguments.putParcelable(REQUEST_ARGUMENT_KEY, mangaRequest);
newInstance.setArguments(arguments);
return newInstance;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAddToQueuePresenter = new AddToQueuePresenterImpl(this, this);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View addToQueueView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_add_to_queue, 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.add_to_queue_dialog_button_queue, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mAddToQueuePresenter.onQueueButtonClick();
}
})
.setNeutralButton(R.string.add_to_queue_dialog_button_toggle_all, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do Nothing.
}
})
.setNegativeButton(R.string.catalogue_filter_dialog_button_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AddToQueueFragment.this.getDialog().cancel();
}
});
return dialogBuilder.create();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
mAddToQueuePresenter.restoreState(savedInstanceState);
} else {
mAddToQueuePresenter.handleInitialArguments(getArguments());
}
mAddToQueuePresenter.initializeViews();
mAddToQueuePresenter.initializeDataFromDatabase();
}
@Override
public void onStart() {
super.onStart();
mAddToQueuePresenter.overrideDialogButtons();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mAddToQueuePresenter.saveState(outState);
}
@Override
public void onDestroy() {
super.onDestroy();
mAddToQueuePresenter.destroyAllSubscriptions();
mAddToQueuePresenter.releaseAllResources();
}
// AddToQueueView:
@Override
public void initializeEmptyRelativeLayout() {
if (mEmptyRelativeLayout != null) {
((ImageView) mEmptyRelativeLayout.findViewById(R.id.emptyImageView)).setImageResource(R.drawable.ic_file_download_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_downloads);
((TextView) mEmptyRelativeLayout.findViewById(R.id.instructionsTextView)).setText(R.string.available_downloads_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) {
mAddToQueuePresenter.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();
}
// AddToQueueMapper:
@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);
}
}
}