/*
* Copyright 2015 Daniel Dittmar
*
* 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 dan.dit.whatsthat.system;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import java.util.Collection;
import dan.dit.whatsthat.R;
import dan.dit.whatsthat.riddle.Riddle;
import dan.dit.whatsthat.riddle.RiddleInitializer;
import dan.dit.whatsthat.riddle.TypeChooser;
import dan.dit.whatsthat.riddle.UnsolvedRiddlesChooser;
import dan.dit.whatsthat.testsubject.TestSubject;
import dan.dit.whatsthat.util.ui.GlasDialog;
/**
* Created by daniel on 05.05.15.
*/
public class RiddlePickerDialog extends DialogFragment {
private UnsolvedRiddlesChooser mChooser;
private TypeChooser mTypeChooser;
private long mIdToHide;
private UnsolvedRiddlesChooser.Callback mCallback;
private ViewGroup mContainer;
private Button mConfirm;
@Override
public void onDestroy() {
super.onDestroy();
this.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
}
@Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);
getDialog().getWindow()
.getAttributes().windowAnimations = R.style.RiddlePickerDialogAnimation;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final View baseView = getActivity().getLayoutInflater().inflate(R.layout.riddle_picker, null);
this.getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
mIdToHide = getArguments().getLong(Riddle.LAST_VISIBLE_UNSOLVED_RIDDLE_ID_KEY, Riddle.NO_ID);
Log.d("Riddle", "Showing riddle picker dialog, hiding id: " + mIdToHide);
mChooser = new UnsolvedRiddlesChooser();
mTypeChooser = new TypeChooser();
baseView.findViewById(R.id.subtitle).setVisibility(TestSubject.getInstance().canChooseNewRiddle() ? View.VISIBLE : View.GONE);
mContainer = (ViewGroup) baseView.findViewById(R.id.unsolved_and_types_container);
mTypeChooser.makeView(getActivity(), mContainer);
if (RiddleInitializer.INSTANCE.getRiddleManager().getUnsolvedRiddleCount() > (mIdToHide == Riddle.NO_ID ? 0 : 1)) {
mContainer.addView(mChooser.makeView(getActivity(), mIdToHide, new UnsolvedRiddlesChooser.UnsolvedRiddleSelectionChangeListener() {
@Override
public void onUnsolvedRiddleSelectionChanged() {
updateConfirmButton();
}
}));
}
mConfirm = (Button) baseView.findViewById(R.id.confirm);
mConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onConfirmation();
}
});
updateConfirmButton();
return new GlasDialog(getActivity(), baseView);
}
private void updateConfirmButton() {
int unsolvedSelected = mChooser != null ? mChooser.getSelectedRiddlesCount() : 0;
if (unsolvedSelected > 0) {
mConfirm.setText(getResources().getQuantityString(R.plurals.riddle_dialog_confirm_unsolveds, unsolvedSelected, unsolvedSelected));
} else {
mConfirm.setText(R.string.riddle_dialog_confirm);
}
}
private void onConfirmation() {
if (mChooser.getSelectedRiddlesCount() > 0) {
Collection<Long> riddleIds = mChooser.getSelectedRiddles();
if (riddleIds != null && !riddleIds.isEmpty()) {
mCallback.openUnsolvedRiddle(riddleIds);
}
}
dismiss();
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.setCanceledOnTouchOutside(true);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = ((UnsolvedRiddlesChooser.Callback) activity);
} catch (ClassCastException e) {
throw new IllegalArgumentException("Activity needs to implement UnsolvedRiddlesChooser callback: " + activity);
}
}
}