ShareSelectPopupDialog.java 4.93 KB
package com.polysoft.nafmii.fragment.dialog;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;

import com.alibaba.fastjson.JSON;
import com.polysoft.nafmii.bean.Result;
import com.polysoft.nafmii.broadcast.Receiver;
import com.polysoft.nafmii.broadcast.WechatReceiver;
import com.polysoft.nafmii.utils.ToastUtils;
import com.polysoft.nafmii.wechat.QQApi;
import com.polysoft.nafmii.wechat.ShareBean;
import com.polysoft.nafmii.wechat.WechatApi;
import com.polysoft.nafmii.wechat.WechatResult;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.UiError;
import com.whaty.nafmii.R;

public class ShareSelectPopupDialog extends DialogFragment {

    private static final String DATA_KEY = "SHARE_DATA";

    public static void show(FragmentManager manager, ShareBean bean) {
        ShareSelectPopupDialog dialog = new ShareSelectPopupDialog();
        Bundle bundle = new Bundle();
        bundle.putString(DATA_KEY, JSON.toJSONString(bean));
        dialog.setArguments(bundle);
        dialog.show(manager, "sharepopup");
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setStyle(DialogFragment.STYLE_NORMAL, R.style.BottomDialog);
        super.setCancelable(true);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.share_select_dialog, container, false);
        this.initView(view);
        return view;
    }

    private void initView(View view) {
        view.findViewById(R.id.share_cancel).setOnClickListener(v -> dismiss());
        view.findViewById(R.id.share_pengyouquan).setOnClickListener(v -> callShare("0"));
        view.findViewById(R.id.share_wechat).setOnClickListener(v -> callShare("1"));
        view.findViewById(R.id.share_qq).setOnClickListener(v -> callShare("2"));
    }

    private void callShare(String scene) {
        ShareBean bean = this.getShareData();
        if (null == bean) {
            return;
        }
        bean.setScene(scene);
        if ("2".equals(bean.getScene())) { // 分享到QQ
            QQApi instance = QQApi.getInstance();
            instance.share(getActivity(), bean, new QQShareBack());
            dismiss();
        } else {
            WechatApi instance = WechatApi.getInstance(getActivity());
            if (!instance.isWXAppInstalled()) {
                ToastUtils.showLong("未安装应用");
            }
            final Receiver<Result> shareReceiver = WechatReceiver.getInstance(getContext());
            shareReceiver.addDefaultListener((action, share) -> {
                shareReceiver.addDefaultListener(null);
                showShareResult(share);
            });
            instance.share(getActivity(), bean);
        }
    }

    private void showShareResult(Result res) {
        if (Result.SUCCESS.equals(res.getStatus())) {
            ToastUtils.showLong("分享成功");
        } else if (Result.FAIL.equals(res.getStatus())) {
            ToastUtils.showLong("分享失败");
        } else if (WechatResult.CANCEL.equals(res.getStatus())) {
            ToastUtils.showLong("分享取消");
        }
        dismiss();
    }

    private ShareBean getShareData() {
        Bundle bundle = getArguments();
        if (null == bundle) {
            return null;
        }

        String json = bundle.getString(DATA_KEY);
        if (TextUtils.isEmpty(json)) {
            return null;
        }
        return JSON.parseObject(json, ShareBean.class);
    }

    @Override
    public void onStart() {
        super.onStart();
        Window window = getDialog().getWindow();

        window.setBackgroundDrawableResource(android.R.color.transparent);
        window.setGravity(Gravity.BOTTOM);

        WindowManager.LayoutParams params = window.getAttributes();
        params.width = getResources().getDisplayMetrics().widthPixels;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(params);
    }


    class QQShareBack implements IUiListener {

        @Override
        public void onComplete(Object o) {
            showShareResult(WechatResult.shareSuccess());
        }

        @Override
        public void onError(UiError uiError) {
            showShareResult(WechatResult.fail("分享失败"));
        }

        @Override
        public void onCancel() {
            showShareResult(WechatResult.cancel());
        }

        @Override
        public void onWarning(int i) {
            showShareResult(WechatResult.fail("分享失败"));
        }
    }

}