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.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.DbAdapterTvShowEpisodes; import com.miz.functions.MizLib; import com.miz.mizuu.MizuuApplication; import com.miz.mizuu.R; import com.miz.mizuu.TvShowEpisode; import com.miz.utils.LocalBroadcastUtils; import com.miz.utils.TypefaceUtils; import java.util.Calendar; @SuppressLint("InflateParams") public class EditTvShowEpisodeFragment extends Fragment { private TvShowEpisode mEpisode; private Toolbar mToolbar; private EditText mTitle, mDescription, mDirector, mWriter, mGuestStars; private Button mRating, mReleaseDate; public EditTvShowEpisodeFragment() {} // Empty constructor public static EditTvShowEpisodeFragment newInstance(String showId, int season, int episode) { EditTvShowEpisodeFragment fragment = new EditTvShowEpisodeFragment(); Bundle args = new Bundle(); args.putString("showId", showId); args.putInt("season", season); args.putInt("episode", episode); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); setRetainInstance(true); // Load the show details loadTvShowEpisode(getArguments().getString("showId"), getArguments().getInt("season"), getArguments().getInt("episode")); // 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_episode, 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); mDirector = (EditText) v.findViewById(R.id.edit_director); mWriter = (EditText) v.findViewById(R.id.edit_writer); mGuestStars = (EditText) v.findViewById(R.id.edit_guest_stars); // Buttons mRating = (Button) v.findViewById(R.id.edit_rating); mReleaseDate = (Button) v.findViewById(R.id.edit_release_date); setupValues(true); } private void setupValues(boolean resetTextFields) { if (resetTextFields) { // Set title mTitle.setText(mEpisode.getTitle()); mTitle.setTypeface(TypefaceUtils.getRobotoBold(getActivity())); mTitle.setSelection(mEpisode.getTitle().length()); // Set description if (!mEpisode.getDescription().equals(getString(R.string.stringNoPlot))) mDescription.setText(mEpisode.getDescription()); // Set director mDirector.setText(mEpisode.getDirector()); // Set writer mWriter.setText(mEpisode.getWriter()); // Set guest stars mGuestStars.setText(mEpisode.getGuestStars()); } // Set rating if (!mEpisode.getRating().equals("0.0")) { try { int rating = (int) (Double.parseDouble(mEpisode.getRating()) * 10); mRating.setText(rating + " %"); } catch (NumberFormatException e) { mRating.setText(mEpisode.getRating()); } } else { mRating.setText(R.string.stringNA); } mRating.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showRatingDialog(mEpisode.getRawRating()); } }); // Set release date mReleaseDate.setText(MizLib.getPrettyDatePrecise(getActivity(), mEpisode.getReleasedate())); mReleaseDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showDatePickerDialog(mEpisode.getReleasedate()); } }); } private void loadTvShowEpisode(String showId, int season, int episode) { Cursor cursor = MizuuApplication.getTvEpisodeDbAdapter().getEpisode(showId, season, episode); if (cursor.moveToFirst()) { try { mEpisode = new TvShowEpisode(getActivity(), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_SHOW_ID)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_TITLE)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_PLOT)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_SEASON)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_AIRDATE)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_DIRECTOR)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_WRITER)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_GUESTSTARS)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE_RATING)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_HAS_WATCHED)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_FAVOURITE)) ); mEpisode.setFilepaths(MizuuApplication.getTvShowEpisodeMappingsDbAdapter().getFilepathsForEpisode( cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_SHOW_ID)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_SEASON)), cursor.getString(cursor.getColumnIndex(DbAdapterTvShowEpisodes.KEY_EPISODE)) )); } catch (Exception e) {} finally { cursor.close(); } } if (mEpisode == null) { Toast.makeText(getActivity(), R.string.errorSomethingWentWrong, Toast.LENGTH_LONG).show(); getActivity().finish(); } } 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 mEpisode.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 mEpisode.setReleaseDate(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 saveChanges() { MizuuApplication.getTvEpisodeDbAdapter().editEpisode(mEpisode.getShowId(), MizLib.getInteger(mEpisode.getSeason()), MizLib.getInteger(mEpisode.getEpisode()), mTitle.getText().toString(), mDescription.getText().toString(), mDirector.getText().toString(), mWriter.getText().toString(), mGuestStars.getText().toString(), mEpisode.getRating(), mEpisode.getReleasedate()); LocalBroadcastUtils.updateTvShowEpisodesOverview(getActivity()); LocalBroadcastUtils.updateTvShowEpisodeDetailsView(getActivity()); 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); } } }