/* * Copyright (C) 2013 Simon Vig Therkildsen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.simonvt.cathode.ui.dialog; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.widget.RatingBar; import android.widget.TextView; import javax.inject.Inject; import net.simonvt.cathode.CathodeApp; import net.simonvt.cathode.R; import net.simonvt.cathode.scheduler.EpisodeTaskScheduler; import net.simonvt.cathode.scheduler.MovieTaskScheduler; import net.simonvt.cathode.scheduler.ShowTaskScheduler; public class RatingDialog extends DialogFragment { public enum Type { SHOW, EPISODE, MOVIE, } private static final String ARG_TYPE = "net.simonvt.cathode.ui.dialog.RatingDialog.type"; private static final String ARG_ID = "net.simonvt.cathode.ui.dialog.RatingDialog.id"; private static final String ARG_RATING = "net.simonvt.cathode.ui.dialog.RatingDialog.rating"; @Inject ShowTaskScheduler showScheduler; @Inject EpisodeTaskScheduler episodeScheduler; @Inject MovieTaskScheduler movieScheduler; private Type type; private long id; private int rating; private String[] ratingText; public static RatingDialog newInstance(Type type, long id, int rating) { RatingDialog dialog = new RatingDialog(); Bundle args = new Bundle(); args.putSerializable(ARG_TYPE, type); args.putLong(ARG_ID, id); args.putInt(ARG_RATING, rating); dialog.setArguments(args); return dialog; } @Override public void onCreate(Bundle inState) { super.onCreate(inState); CathodeApp.inject(getActivity(), this); Bundle args = getArguments(); type = (Type) args.getSerializable(ARG_TYPE); id = args.getLong(ARG_ID); rating = args.getInt(ARG_RATING); ratingText = getResources().getStringArray(R.array.ratings); } @SuppressWarnings("InflateParams") @Override public Dialog onCreateDialog(Bundle inState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); View v = LayoutInflater.from(builder.getContext()).inflate(R.layout.dialog_rating, null); final int rating = getArguments().getInt(ARG_RATING); final TextView ratingText = (TextView) v.findViewById(R.id.ratingText); ratingText.setText(this.ratingText[this.rating]); final RatingBar ratingBar = (RatingBar) v.findViewById(R.id.rating); ratingBar.setRating(rating); ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float v, boolean b) { RatingDialog.this.rating = (int) v; ratingText.setText(RatingDialog.this.ratingText[(int) v]); } }); builder.setView(v); builder.setPositiveButton(R.string.action_rate, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { switch (type) { case SHOW: showScheduler.rate(id, (int) ratingBar.getRating()); break; case EPISODE: episodeScheduler.rate(id, (int) ratingBar.getRating()); break; case MOVIE: movieScheduler.rate(id, (int) ratingBar.getRating()); break; } } }); return builder.create(); } }