NumDialog.java 7.68 KB
package com.naji.xiaotao.tangshi.ui;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

import com.naji.xiaotao.App;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.ui.CookBookMainActivity;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.tangshi.entity.OrderEntity;
import com.naji.xiaotao.tangshi.entity.TableItem;
import com.naji.xiaotao.tangshi.service.TangshiApiService;
import com.naji.xiaotao.util.DialogUtil;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.MaterialDialogUtils;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;


public class NumDialog extends DialogFragment {

    private Dialog dialog;
    private EditText eatingNumEdt;
    private View rootView;//activity的根视图
    int rootViewVisibleHeight;//纪录根视图的显示高度
    private TableItem item;
    private Context context;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(getArguments()!=null){
            item=getArguments().getParcelable("table");
        }
        context=getActivity();
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // 使用不带Theme的构造器, 获得的dialog边框距离屏幕仍有几毫米的缝隙。
        dialog = new Dialog(context, R.style.NumDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置Content前设定
        View contentView = View.inflate(context, R.layout.dialog_eating_num, null);
        eatingNumEdt=contentView.findViewById(R.id.eating_num_edt);
        if(item!=null){
            eatingNumEdt.setText(item.getTable_pnum());
            eatingNumEdt.setSelection(item.getTable_pnum().length());
        }else{
            eatingNumEdt.setText("2");
            eatingNumEdt.setSelection(1);
        }
        eatingNumEdt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                if(actionId== EditorInfo.IME_ACTION_NEXT){
                    if(TextUtils.isEmpty(eatingNumEdt.getText().toString())){
                        ToastUtils.showShort("用餐人数不能为空");
                        return false;
                    }
                    dialog.dismiss();
                    createOrder();
            }
                return false;
            }
        });
        rootView=dialog.getWindow().getDecorView();
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                rootView.getWindowVisibleDisplayFrame(r);

                int visibleHeight = r.height();
                System.out.println(""+visibleHeight);
                if (rootViewVisibleHeight == 0) {
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

                //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变
                if (rootViewVisibleHeight == visibleHeight) {
                    return;
                }

                //根视图显示高度变小超过200,可以看作软键盘显示了
                if (rootViewVisibleHeight - visibleHeight > 200) {
                    KLog.d("软键盘显示");
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

                //根视图显示高度变大超过200,可以看作软键盘隐藏了
                if (visibleHeight - rootViewVisibleHeight > 200) {
                    KLog.d("软键盘隐藏");
                    dialog.dismiss();
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }
            }
        });
        contentView.findViewById(R.id.exit).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
        dialog.setContentView(contentView);
        dialog.setCanceledOnTouchOutside(true); // 外部点击取消

        // 设置宽度为屏宽, 靠近屏幕底部。
        Window window = dialog.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.gravity = Gravity.BOTTOM; // 紧贴底部
        lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
        window.setAttributes(lp);
        window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        return dialog;
    }

    private void createOrder(){
        Map<String,String> params=new HashMap<>();
        params.put("sellerid",SPUtils.getInstance("user_info").getString("sellerid"));
        params.put("openid", SPUtils.getInstance("user_info").getString("openid"));
        params.put("tableid",item==null?"":item.getId());
        params.put("pnum",eatingNumEdt.getText().toString());
        RetrofitClient.getInstance().create(TangshiApiService.class)
                .createOrder(params)
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        DialogUtil.showDialog(context);
                    }
                })
                .subscribe(new Consumer<BaseResponse<List<OrderEntity>>>() {

                    @Override
                    public void accept(BaseResponse<List<OrderEntity>> baseResponse) throws Exception {
                        DialogUtil.dismissDialog();
                        if (baseResponse.getRet()==200){
                            KLog.d("context",context);
                            Intent intent=new Intent(context,CookBookMainActivity.class);
                            intent.putExtra("orderid",baseResponse.getData().get(0).getId());
                            intent.putExtra("isFast",getArguments().getBoolean("isFast",false));
                            context.startActivity(intent);
                        }else{
                            ToastUtils.showShort(baseResponse.getMsg());
                        }
                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable throwable) throws Exception {
                        DialogUtil.dismissDialog();
                        throwable.printStackTrace();
                        ToastUtils.showShort(throwable.msg);
                    }
                });
    }
}