package com.battlelancer.seriesguide.ui.dialogs; import android.database.Cursor; import android.os.Bundle; import android.support.design.widget.TextInputLayout; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatDialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import com.battlelancer.seriesguide.R; import com.battlelancer.seriesguide.SgApp; import com.battlelancer.seriesguide.provider.SeriesGuideContract.Lists; import com.battlelancer.seriesguide.util.ListsTools; /** * Dialog to rename or remove a list. */ public class ListManageDialogFragment extends AppCompatDialogFragment { private static final String ARG_LIST_ID = "listId"; public static ListManageDialogFragment newInstance(String listId) { ListManageDialogFragment f = new ListManageDialogFragment(); Bundle args = new Bundle(); args.putString(ARG_LIST_ID, listId); f.setArguments(args); return f; } /** * Display a dialog which allows to edit the title of this list or remove it. */ public static void show(String listId, FragmentManager fm) { // DialogFragment.show() will take care of adding the fragment // in a transaction. We also want to remove any currently showing // dialog, so make our own transaction and take care of that here. FragmentTransaction ft = fm.beginTransaction(); Fragment prev = fm.findFragmentByTag("listmanagedialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); // Create and show the dialog. DialogFragment newFragment = ListManageDialogFragment.newInstance(listId); newFragment.show(ft, "listmanagedialog"); } @BindView(R.id.textInputLayoutListManageListName) TextInputLayout textInputLayoutName; private EditText editTextName; @BindView(R.id.buttonNegative) Button buttonNegative; @BindView(R.id.buttonPositive) Button buttonPositive; private Unbinder unbinder; private String listId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // hide title, use custom theme setStyle(STYLE_NO_TITLE, 0); listId = getArguments().getString(ARG_LIST_ID); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View layout = inflater.inflate(R.layout.dialog_list_manage, container, false); unbinder = ButterKnife.bind(this, layout); editTextName = textInputLayoutName.getEditText(); // buttons buttonNegative.setEnabled(false); buttonNegative.setText(R.string.list_remove); buttonNegative.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // remove list and items ListsTools.removeList(SgApp.from(getActivity()), listId); dismiss(); } }); buttonPositive.setText(android.R.string.ok); buttonPositive.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (editTextName == null) { return; } // update title String listName = editTextName.getText().toString().trim(); ListsTools.renameList(SgApp.from(getActivity()), listId, listName); dismiss(); } }); return layout; } @Override public void onActivityCreated(Bundle arg0) { super.onActivityCreated(arg0); // pre-populate list title final Cursor list = getActivity().getContentResolver() .query(Lists.buildListUri(listId), new String[] { Lists.NAME }, null, null, null); if (list == null) { // list might have been removed, or query failed dismiss(); return; } if (!list.moveToFirst()) { // list not found list.close(); dismiss(); return; } String listName = list.getString(0); list.close(); editTextName.setText(listName); editTextName.addTextChangedListener( new AddListDialogFragment.ListNameTextWatcher(getContext(), textInputLayoutName, buttonPositive, listName)); // do only allow removing if this is NOT the last list Cursor lists = getActivity().getContentResolver().query(Lists.CONTENT_URI, new String[] { Lists._ID }, null, null, null); if (lists != null) { if (lists.getCount() > 1) { buttonNegative.setEnabled(true); } lists.close(); } } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } }