/*
* Copyright (C) 2014 Freddie (Musenkishi) Lust-Hed
*
* 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 com.musenkishi.wally.fragments;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewStub;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
import com.musenkishi.wally.R;
/**
* A dialog matching the Material Design specified in the preview documents.
*
* Created by Freddie (Musenkishi) Lust-Hed on 2014-09-23.
*/
public class MaterialDialogFragment extends DialogFragment {
public static final String TAG = "MaterialDialogFragment";
private static final String STATE_PRIMARY_COLOR = TAG + ".state.primaryColor";
private static final String STATE_BUTTON_POSITIVE_TEXT_ID = TAG + ".state.button.positive.textId";
private static final String STATE_BUTTON_NEGATIVE_TEXT_ID = TAG + ".state.button.negative.textId";
private static final String STATE_TITLE_TEXT_ID = TAG + ".state.title.textId";
private static final String STATE_TITLE_TEXT_STRING = TAG + ".state.title.textString";
private static final String STATE_LAYOUT_RES_ID = TAG + ".state.layout.resId";
private static final String STATE_MESSAGE_TEXT_ID = TAG + ".state.message.resId";
private static final String STATE_MESSAGE_TEXT_STRING = TAG + ".state.message.resString";
private int primaryColor;
private Button buttonPositive;
private Button buttonNegative;
private int positiveButtonTextResourceId;
private int negativeButtonTextResourceId;
private DialogInterface.OnClickListener positiveButtonOnClickListener;
private DialogInterface.OnClickListener negativeButtonOnClickListener;
private TextView textViewTitle;
private int titleResourceId;
private String titleString;
private ScrollView scrollView;
private int layoutResourceId;
private ViewStub viewStub;
private String message;
private int messageResourceId;
public MaterialDialogFragment(){
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(STATE_PRIMARY_COLOR)) {
primaryColor = savedInstanceState.getInt(STATE_PRIMARY_COLOR);
}
if (savedInstanceState.containsKey(STATE_BUTTON_POSITIVE_TEXT_ID)) {
positiveButtonTextResourceId = savedInstanceState.getInt(STATE_BUTTON_POSITIVE_TEXT_ID);
}
if (savedInstanceState.containsKey(STATE_BUTTON_NEGATIVE_TEXT_ID)) {
negativeButtonTextResourceId = savedInstanceState.getInt(STATE_BUTTON_NEGATIVE_TEXT_ID);
}
if (savedInstanceState.containsKey(STATE_TITLE_TEXT_ID)) {
titleResourceId = savedInstanceState.getInt(STATE_TITLE_TEXT_ID);
}
if (savedInstanceState.containsKey(STATE_TITLE_TEXT_STRING)) {
titleString = savedInstanceState.getString(STATE_TITLE_TEXT_STRING);
}
if (savedInstanceState.containsKey(STATE_LAYOUT_RES_ID)) {
layoutResourceId = savedInstanceState.getInt(STATE_LAYOUT_RES_ID);
}
if (savedInstanceState.containsKey(STATE_MESSAGE_TEXT_ID)) {
messageResourceId = savedInstanceState.getInt(STATE_MESSAGE_TEXT_ID);
}
if (savedInstanceState.containsKey(STATE_MESSAGE_TEXT_STRING)) {
message = savedInstanceState.getString(STATE_MESSAGE_TEXT_STRING);
}
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (getActivity() != null) {
final Dialog dialog = new Dialog(getActivity(), android.support.v7.appcompat.R.style.Base_Theme_AppCompat_Light_Dialog );
// android.R.style.Theme_DeviceDefault_Light_Dialog);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setContentView(R.layout.dialog_base_material);
textViewTitle = (TextView) dialog.findViewById(R.id.dialog_title);
buttonNegative = (Button) dialog.findViewById(R.id.dialog_button_negative);
buttonPositive = (Button) dialog.findViewById(R.id.dialog_button_positive);
scrollView = (ScrollView) dialog.findViewById(R.id.dialog_scrollview);
viewStub = (ViewStub) dialog.findViewById(R.id.dialog_viewstub);
setupViews(dialog.getContext());
hideEmptyViews();
if (!isCancelable()) {
buttonNegative.setVisibility(View.GONE);
}
return dialog;
} else {
return null;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (primaryColor != 0) {
outState.putInt(STATE_PRIMARY_COLOR, primaryColor);
}
if (positiveButtonTextResourceId != 0) {
outState.putInt(STATE_BUTTON_POSITIVE_TEXT_ID, positiveButtonTextResourceId);
}
if (negativeButtonTextResourceId != 0) {
outState.putInt(STATE_BUTTON_NEGATIVE_TEXT_ID, negativeButtonTextResourceId);
}
if (titleResourceId != 0) {
outState.putInt(STATE_TITLE_TEXT_ID, titleResourceId);
}
if (titleString != null) {
outState.putString(STATE_TITLE_TEXT_STRING, titleString);
}
if (layoutResourceId != 0) {
outState.putInt(STATE_LAYOUT_RES_ID, layoutResourceId);
}
if (messageResourceId != 0) {
outState.putInt(STATE_MESSAGE_TEXT_ID, messageResourceId);
}
if (message != null) {
outState.putString(STATE_MESSAGE_TEXT_STRING, message);
}
super.onSaveInstanceState(outState);
}
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
public void setContentView(int layoutResourceId) {
this.layoutResourceId = layoutResourceId;
}
public void setPositiveButton(int textResourceId, DialogInterface.OnClickListener onClickListener) {
this.positiveButtonTextResourceId = textResourceId;
this.positiveButtonOnClickListener = onClickListener;
}
public void setNegativeButton(int textResourceId, DialogInterface.OnClickListener onClickListener) {
this.negativeButtonTextResourceId = textResourceId;
this.negativeButtonOnClickListener = onClickListener;
}
public void setTitle(int titleResourceId) {
this.titleResourceId = titleResourceId;
}
public void setTitle(String title) {
this.titleString = title;
}
public void setMessage(String message) {
this.message = message;
}
public void setMessage(int stringResourceId) {
this.messageResourceId = stringResourceId;
}
public void setPrimaryColor(int color) {
this.primaryColor = color;
}
public int getPrimaryColor() {
return primaryColor;
}
/**
* Prepare views to be hidden if they don't have any content.
*/
private void hideEmptyViews() {
if (titleResourceId == 0 && titleString == null) {
textViewTitle.setVisibility(View.GONE);
}
if (layoutResourceId == 0 && message == null && messageResourceId == 0) {
scrollView.setVisibility(View.GONE);
}
}
protected void setupViews(Context context) {
if (titleResourceId != 0) {
textViewTitle.setText(titleResourceId);
} else if (titleString != null) {
textViewTitle.setText(titleString);
}
if (primaryColor != 0) {
buttonPositive.setTextColor(primaryColor);
}
if (positiveButtonTextResourceId != 0) {
buttonPositive.setText(positiveButtonTextResourceId);
}
if (negativeButtonTextResourceId != 0) {
buttonNegative.setText(negativeButtonTextResourceId);
}
buttonNegative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (negativeButtonOnClickListener != null) {
negativeButtonOnClickListener.onClick(null, 1);
}
dismiss();
}
});
buttonPositive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (positiveButtonOnClickListener != null) {
positiveButtonOnClickListener.onClick(null, 0);
}
dismiss();
}
});
if (layoutResourceId != 0) {
viewStub.setLayoutResource(layoutResourceId);
viewStub.inflate();
} else if (message != null || messageResourceId != 0) {
TextView textView = new TextView(context);
if (messageResourceId != 0) {
textView.setText(messageResourceId);
} else {
textView.setText(message);
}
textView.setTextColor(getResources().getColor(R.color.Black_Light));
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
textView.setLineSpacing(1f, 1.2f);
scrollView.removeAllViews();
scrollView.addView(textView);
}
}
}