package bf.io.openshop.ux.dialogs;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import org.json.JSONException;
import org.json.JSONObject;
import bf.io.openshop.CONST;
import bf.io.openshop.MyApplication;
import bf.io.openshop.R;
import bf.io.openshop.SettingsMy;
import bf.io.openshop.api.EndPoints;
import bf.io.openshop.api.JsonRequest;
import bf.io.openshop.entities.User;
import bf.io.openshop.interfaces.RequestListener;
import bf.io.openshop.utils.JsonUtils;
import bf.io.openshop.utils.MsgUtils;
import timber.log.Timber;
/**
* Dialog provides a discount adding functionality.
*/
public class DiscountDialogFragment extends DialogFragment {
private RequestListener requestListener;
private TextInputLayout discountCodeInput;
private View progressLayout;
/**
* Creates dialog which handles the discount adding functionality.
*
* @param requestListener listener indicating events that occurred.
* @return new instance of dialog.
*/
public static DiscountDialogFragment newInstance(RequestListener requestListener) {
DiscountDialogFragment frag = new DiscountDialogFragment();
frag.requestListener = requestListener;
return frag;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.dialogNoTitle);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), getTheme()) {
@Override
public void dismiss() {
// Remove soft keyboard
if (getActivity() != null && getView() != null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}
requestListener = null;
super.dismiss();
}
};
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.getWindow().setWindowAnimations(R.style.dialogFragmentAnimation);
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Timber.d("%s - OnCreateView", this.getClass().getSimpleName());
View view = inflater.inflate(R.layout.dialog_discount_fragment, container, false);
progressLayout = view.findViewById(R.id.discount_code_progress);
discountCodeInput = (TextInputLayout) view.findViewById(R.id.discount_code_input_wrapper);
Button confirmDiscountCode = (Button) view.findViewById(R.id.discount_code_confirm);
confirmDiscountCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRequiredFieldsOk()) {
sendDiscountCode(discountCodeInput.getEditText());
}
}
});
View closeBtn = view.findViewById(R.id.discount_code_close);
closeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return view;
}
private void sendDiscountCode(EditText discountCodeInput) {
User user = SettingsMy.getActiveUser();
if (user != null) {
String url = String.format(EndPoints.CART_DISCOUNTS, SettingsMy.getActualNonNullShop(getActivity()).getId());
JSONObject jo = new JSONObject();
try {
jo.put(JsonUtils.TAG_CODE, discountCodeInput.getText().toString().trim());
} catch (JSONException e) {
Timber.e(e, "Creating code json failed");
MsgUtils.showToast(getActivity(), MsgUtils.TOAST_TYPE_INTERNAL_ERROR, null, MsgUtils.ToastLength.SHORT);
return;
}
Timber.d("Sending discount code: %s", jo.toString());
progressLayout.setVisibility(View.VISIBLE);
final JsonRequest req = new JsonRequest(Request.Method.POST, url, jo, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Timber.d("Update item in cart: %s", response.toString());
MsgUtils.showToast(getActivity(), MsgUtils.TOAST_TYPE_MESSAGE, getString(R.string.Ok), MsgUtils.ToastLength.SHORT);
if (requestListener != null) requestListener.requestSuccess(0);
// Don't have to hide progress, because of dismiss.
dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (requestListener != null) requestListener.requestFailed(error);
// Don't have to hide progress, because of dismiss.
dismiss();
}
}, getFragmentManager(), user.getAccessToken());
req.setRetryPolicy(MyApplication.getDefaultRetryPolice());
req.setShouldCache(false);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
MyApplication.getInstance().addToRequestQueue(req, CONST.CART_DISCOUNTS_REQUESTS_TAG);
}
}, 150);
} else {
LoginExpiredDialogFragment loginExpiredDialogFragment = new LoginExpiredDialogFragment();
loginExpiredDialogFragment.show(getFragmentManager(), "loginExpiredDialogFragment");
}
}
/**
* Check if user set all required fields.
*
* @return true if ok.
*/
private boolean isRequiredFieldsOk() {
boolean discountCode = false;
if (discountCodeInput.getEditText() == null || discountCodeInput.getEditText().getText().toString().equalsIgnoreCase("")) {
discountCodeInput.setErrorEnabled(true);
discountCodeInput.setError(getString(R.string.Required_field));
} else {
Timber.d("Some fields are required.");
discountCodeInput.setErrorEnabled(false);
discountCode = true;
}
return discountCode;
}
@Override
public void onStop() {
MyApplication.getInstance().getRequestQueue().cancelAll(CONST.CART_DISCOUNTS_REQUESTS_TAG);
super.onStop();
}
}