package com.miz.mizuu.fragments; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.content.DialogInterface; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.NumberPicker; import android.widget.TextView; import android.widget.Toast; import com.miz.base.MizActivity; import com.miz.db.DbAdapterTvShows; import com.miz.functions.MizLib; import com.miz.mizuu.MizuuApplication; import com.miz.mizuu.R; import com.miz.mizuu.TvShow; import com.miz.utils.TypefaceUtils; import java.util.ArrayList; import java.util.Calendar; @SuppressLint("InflateParams") public class EditTvShowFragment extends Fragment { private TvShow mShow; private Toolbar mToolbar; private EditText mTitle, mDescription, mGenres; private Button mRuntime, mRating, mReleaseDate, mCertification; public EditTvShowFragment() {} // Empty constructor public static EditTvShowFragment newInstance(String showId) { EditTvShowFragment fragment = new EditTvShowFragment(); Bundle args = new Bundle(); args.putString("showId", showId); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setRetainInstance(true); // Load the show details loadTvShow(getArguments().getString("showId")); // Hide the keyboard when the Activity starts getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.edit_movie, container, false); } @Override public void onViewCreated(View v, Bundle savedInstanceState) { super.onViewCreated(v, savedInstanceState); mToolbar = (Toolbar) v.findViewById(R.id.toolbar); ((MizActivity) getActivity()).setSupportActionBar(mToolbar); // Text fields mTitle = (EditText) v.findViewById(R.id.edit_title); mDescription = (EditText) v.findViewById(R.id.edit_description); mGenres = (EditText) v.findViewById(R.id.edit_genres); // Buttons mRuntime = (Button) v.findViewById(R.id.edit_runtime); mRating = (Button) v.findViewById(R.id.edit_rating); mReleaseDate = (Button) v.findViewById(R.id.edit_release_date); mCertification = (Button) v.findViewById(R.id.edit_certification); // Hide tagline stuff v.findViewById(R.id.edit_tagline).setVisibility(View.GONE); v.findViewById(R.id.textView2).setVisibility(View.GONE); // Change "Release date" to "First aired" ((TextView) v.findViewById(R.id.TextView02)).setText(R.string.detailsFirstAired); setupValues(true); } private void setupValues(boolean resetTextFields) { if (resetTextFields) { // Set title mTitle.setText(mShow.getTitle()); mTitle.setTypeface(TypefaceUtils.getRobotoBold(getActivity())); mTitle.setSelection(mShow.getTitle().length()); // Set description if (!mShow.getDescription().equals(getString(R.string.stringNoPlot))) mDescription.setText(mShow.getDescription()); // Set genres mGenres.setText(mShow.getGenres()); } // Set runtime mRuntime.setText(MizLib.getPrettyRuntime(getActivity(), MizLib.getInteger(mShow.getRuntime()))); mRuntime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showRuntimeDialog(MizLib.getInteger(mShow.getRuntime())); } }); // Set rating if (!mShow.getRating().equals("0.0")) { try { int rating = (int) (Double.parseDouble(mShow.getRating()) * 10); mRating.setText(rating + " %"); } catch (NumberFormatException e) { mRating.setText(mShow.getRating()); } } else { mRating.setText(R.string.stringNA); } mRating.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showRatingDialog(mShow.getRawRating()); } }); // Set release date mReleaseDate.setText(MizLib.getPrettyDatePrecise(getActivity(), mShow.getFirstAirdate())); mReleaseDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showDatePickerDialog(mShow.getFirstAirdate()); } }); // Set certification if (!TextUtils.isEmpty(mShow.getCertification())) { mCertification.setText(mShow.getCertification()); } else { mCertification.setText(R.string.stringNA); } mCertification.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showCertificationDialog(); } }); } private void loadTvShow(String showId) { Cursor cursor = MizuuApplication.getTvDbAdapter().getShow(showId); if (cursor.moveToFirst()) { try { mShow = new TvShow(getActivity(), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_ID)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_TITLE)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_PLOT)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_RATING)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_GENRES)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_ACTORS)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_CERTIFICATION)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_FIRST_AIRDATE)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_RUNTIME)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_FAVOURITE)), MizuuApplication.getTvEpisodeDbAdapter().getLatestEpisodeAirdate(cursor.getString(cursor.getColumnIndex(DbAdapterTvShows.KEY_SHOW_ID))) ); } catch (Exception e) {} finally { cursor.close(); } } if (mShow == null) { Toast.makeText(getActivity(), R.string.errorSomethingWentWrong, Toast.LENGTH_LONG).show(); getActivity().finish(); } } private void showRuntimeDialog(int initialValue) { final View numberPickerLayout = getActivity().getLayoutInflater().inflate(R.layout.number_picker_dialog, null, false); final NumberPicker numberPicker = (NumberPicker) numberPickerLayout.findViewById(R.id.number_picker); numberPicker.setMaxValue(600); numberPicker.setMinValue(0); numberPicker.setValue(initialValue); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.set_runtime); builder.setView(numberPickerLayout); builder.setNeutralButton(R.string.set, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Update the runtime mShow.setRuntime(numberPicker.getValue()); // Update the UI with the new value setupValues(false); // Dismiss the dialog dialog.cancel(); } }); builder.show(); } private void showRatingDialog(double initialValue) { final View numberPickerLayout = getActivity().getLayoutInflater().inflate(R.layout.number_picker_dialog, null, false); final NumberPicker numberPicker = (NumberPicker) numberPickerLayout.findViewById(R.id.number_picker); numberPicker.setMaxValue(100); numberPicker.setMinValue(0); numberPicker.setValue((int) (initialValue * 10)); final TextView numberPickerText = (TextView) numberPickerLayout.findViewById(R.id.number_picker_text); numberPickerText.setText("%"); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.set_rating); builder.setView(numberPickerLayout); builder.setNeutralButton(R.string.set, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Update the rating mShow.setRating(numberPicker.getValue()); // Update the UI with the new value setupValues(false); // Dismiss the dialog dialog.cancel(); } }); builder.show(); } private void showDatePickerDialog(String initialValue) { String[] dateArray = initialValue.split("-"); Calendar cal = Calendar.getInstance(); cal.set(Integer.parseInt(dateArray[0]), Integer.parseInt(dateArray[1]) - 1, Integer.parseInt(dateArray[2])); DatePickerDialog dialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // Update the date mShow.setFirstAiredDate(year, monthOfYear + 1, dayOfMonth); // Update the UI with the new value setupValues(false); } }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); dialog.show(); } private void showCertificationDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.set_certification); ArrayList<String> temp = MizuuApplication.getTvDbAdapter().getCertifications(); final CharSequence[] items = new CharSequence[temp.size() + 1]; items[0] = getString(R.string.create_new_certification); for (int i = 0; i < temp.size(); i++) { items[i + 1] = temp.get(i); } builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { // Create new certification dialog showNewCertificationDialog(); } else { // Set certification mShow.setCertification(items[which].toString()); // Update the UI with the new value setupValues(false); // Dismiss the dialog dialog.cancel(); } } }); builder.show(); } private void showNewCertificationDialog() { final EditText input = new EditText(getActivity()); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.create_new_certification); builder.setView(input); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Set certification mShow.setCertification(input.getText().toString()); // Update the UI with the new value setupValues(false); // Dismiss the dialog dialog.cancel(); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); } }); builder.show(); } private void saveChanges() { MizuuApplication.getTvDbAdapter().editShow(mShow.getId(), mTitle.getText().toString(), mDescription.getText().toString(), mGenres.getText().toString(), mShow.getRuntime(), mShow.getRating(), mShow.getFirstAirdate(), mShow.getCertification()); getActivity().setResult(Activity.RESULT_OK); getActivity().finish(); } @Override public void onStart() { super.onStart(); ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.edit_movie_and_tv_show, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: case R.id.cancel_editing: getActivity().finish(); return true; case R.id.done_editing: saveChanges(); return true; default: return super.onOptionsItemSelected(item); } } }