package com.battlelancer.seriesguide.ui.dialogs;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.os.AsyncTaskCompat;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import com.battlelancer.seriesguide.R;
import com.battlelancer.seriesguide.provider.SeriesGuideContract.Shows;
import com.battlelancer.seriesguide.util.RemoveShowWorkerFragment;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
/**
* Dialog asking if a show should be removed from the database.
*/
public class RemoveShowDialogFragment extends AppCompatDialogFragment {
private static final String KEY_SHOW_TVDB_ID = "show_tvdb_id";
public static class ShowTitleEvent {
public String showTitle;
}
/**
* Dialog to confirm the removal of a show from the database.
*
* @param showTvdbId The TVDb id of the show to remove.
*/
public static void show(FragmentManager fm, int showTvdbId) {
RemoveShowDialogFragment f = new RemoveShowDialogFragment();
Bundle args = new Bundle();
args.putInt(KEY_SHOW_TVDB_ID, showTvdbId);
f.setArguments(args);
f.show(fm, "dialog-remove-show");
}
@BindView(R.id.progressBarRemove) View progressBar;
@BindView(R.id.textViewRemove) TextView dialogText;
@BindView(R.id.buttonNegative) Button negativeButton;
@BindView(R.id.buttonPositive) Button positiveButton;
private Unbinder unbinder;
private int showTvdbId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showTvdbId = getArguments().getInt(KEY_SHOW_TVDB_ID);
if (showTvdbId <= 0) {
dismiss();
}
// hide title, use custom theme
setStyle(STYLE_NO_TITLE, 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.dialog_remove, container, false);
unbinder = ButterKnife.bind(this, v);
showProgressBar(true);
negativeButton.setText(android.R.string.cancel);
negativeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
positiveButton.setText(R.string.delete_show);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
EventBus.getDefault().register(this);
AsyncTaskCompat.executeParallel(new GetShowTitleTask(getActivity()), showTvdbId);
}
@Override
public void onDestroyView() {
super.onDestroyView();
EventBus.getDefault().unregister(this);
unbinder.unbind();
}
private static class GetShowTitleTask
extends AsyncTask<Integer, Void, ShowTitleEvent> {
private final Context context;
public GetShowTitleTask(Context context) {
this.context = context.getApplicationContext();
}
@Override
protected ShowTitleEvent doInBackground(Integer... params) {
int showTvdbId = params[0];
ShowTitleEvent result = new ShowTitleEvent();
// get show title
final Cursor show = context.getContentResolver().query(
Shows.buildShowUri(showTvdbId),
new String[] {
Shows.TITLE
}, null, null, null
);
if (show != null) {
if (show.moveToFirst()) {
result.showTitle = show.getString(0);
}
show.close();
}
return result;
}
@Override
protected void onPostExecute(ShowTitleEvent result) {
EventBus.getDefault().post(result);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(ShowTitleEvent event) {
if (event.showTitle == null) {
// failed to find show
dismiss();
return;
}
dialogText.setText(getString(R.string.confirm_delete, event.showTitle));
positiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RemoveShowWorkerFragment f = RemoveShowWorkerFragment.newInstance(showTvdbId);
getFragmentManager().beginTransaction()
.add(f, RemoveShowWorkerFragment.TAG)
.commit();
dismiss();
}
});
showProgressBar(false);
}
private void showProgressBar(boolean isVisible) {
progressBar.setVisibility(isVisible ? View.VISIBLE : View.GONE);
dialogText.setVisibility(isVisible ? View.GONE : View.VISIBLE);
positiveButton.setEnabled(!isVisible);
}
}