package com.secondworld.sdk; 
 | 
  
 | 
  
 | 
import android.Manifest; 
 | 
import android.app.Activity; 
 | 
import android.app.AlertDialog; 
 | 
import android.content.DialogInterface; 
 | 
import android.content.Intent; 
 | 
import android.content.pm.PackageManager; 
 | 
import android.net.Uri; 
 | 
import android.provider.Settings; 
 | 
import android.support.v4.app.ActivityCompat; 
 | 
import android.support.v4.content.ContextCompat; 
 | 
import android.widget.Toast; 
 | 
  
 | 
import com.secondworld.sdk.utils.CodeA2U; 
 | 
import com.secondworld.sdk.utils.LogUtil; 
 | 
import com.secondworld.sdk.utils.RequestCode; 
 | 
import com.smwl.smsdk.abstrat.SMInitListener; 
 | 
import com.smwl.smsdk.abstrat.SMLoginListener; 
 | 
import com.smwl.smsdk.abstrat.SMPayListener; 
 | 
import com.smwl.smsdk.app.SMPlatformManager; 
 | 
import com.smwl.smsdk.bean.PayInfo; 
 | 
import com.smwl.smsdk.bean.RoleInfo; 
 | 
import com.smwl.smsdk.bean.SMUserInfo; 
 | 
import com.unity3d.player.UnityPlayer; 
 | 
import com.secondworld.sdk.PlatformDiff; 
 | 
  
 | 
import org.json.JSONException; 
 | 
import org.json.JSONObject; 
 | 
  
 | 
public class QuickSdkMgr extends PlatformSdkMgr { 
 | 
  
 | 
    public static QuickSdkMgr I = new QuickSdkMgr(); 
 | 
  
 | 
    String productCode; 
 | 
    String productKey; 
 | 
    int REQUEST_RECORD_PERMISSION_SETTING = 110; 
 | 
  
 | 
    private boolean hasPermissions(Activity activity) { 
 | 
        return (ContextCompat.checkSelfPermission(activity, 
 | 
                Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) 
 | 
                && (ContextCompat.checkSelfPermission(activity, 
 | 
                Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); 
 | 
    } 
 | 
  
 | 
    public void requestPermissions(Activity activity) { 
 | 
        try { 
 | 
            // check权限 
 | 
            if (!hasPermissions(activity)) { 
 | 
                // 没有则申请权限 
 | 
                ActivityCompat.requestPermissions(activity, new String[]{ 
 | 
                        Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); 
 | 
            } else { 
 | 
                QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); 
 | 
                QuickSdkMgr.I.init(activity); 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            //QuickSdkMgr.I.init(activity); 
 | 
            ActivityCompat.requestPermissions(activity, new String[]{ 
 | 
                    Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { 
 | 
        if (requestCode != RequestCode.QUICK) return; 
 | 
        if (hasPermissions(activity)) { 
 | 
            //申请成功 
 | 
            QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); 
 | 
            QuickSdkMgr.I.init(activity); 
 | 
            return; 
 | 
        } 
 | 
        final AlertDialog.Builder normalDialog = new AlertDialog.Builder(activity); 
 | 
        normalDialog.setTitle("权限设置"); 
 | 
        normalDialog.setMessage("游戏需要部分权限才能正常运行,请前往设置中打开电话权限与存储权限"); 
 | 
        normalDialog.setPositiveButton("前往设置", new DialogInterface.OnClickListener() { 
 | 
            @Override 
 | 
            public void onClick(DialogInterface dialog, int which) { 
 | 
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
 | 
                Uri uri = Uri.fromParts("package", activity.getPackageName(), null); 
 | 
                intent.setData(uri); 
 | 
                activity.startActivityForResult(intent, REQUEST_RECORD_PERMISSION_SETTING); 
 | 
                dialog.dismiss(); 
 | 
            } 
 | 
        }); 
 | 
        normalDialog.setNegativeButton("退出", new DialogInterface.OnClickListener() { 
 | 
            @Override 
 | 
            public void onClick(DialogInterface dialog, int which) { 
 | 
                GameAppProxy.appExit(); 
 | 
            } 
 | 
        }); 
 | 
        // 显示 
 | 
        normalDialog.show(); 
 | 
    } 
 | 
  
 | 
    public void onActivityResult(Activity activity, int requestCode) { 
 | 
        if (requestCode == REQUEST_RECORD_PERMISSION_SETTING) 
 | 
            requestPermissions(activity); 
 | 
    } 
 | 
  
 | 
    public void init(Activity activity) { 
 | 
        sdkInitState = SdkInitState.LOADING; 
 | 
  
 | 
    } 
 | 
  
 | 
    public void login() { 
 | 
        switch (sdkInitState) { 
 | 
            case FAILED: 
 | 
            case UNKNOWN: { 
 | 
                if (GameActivityProxy.I.activity == null) 
 | 
                    return; 
 | 
                if (hasPermissions(GameActivityProxy.I.activity)) { 
 | 
                    Toast.makeText(GameAppProxy.app, "异常请重启游戏", Toast.LENGTH_LONG).show(); 
 | 
                } 
 | 
                break; 
 | 
            } 
 | 
            case SUCCEED: { 
 | 
                GameActivityProxy.I.activity.runOnUiThread(new Runnable() 
 | 
                { 
 | 
                    @Override 
 | 
                    public void run() 
 | 
                    { 
 | 
                        //用户登陆进入游戏和用户登出退出游戏的回调 
 | 
                        SMPlatformManager.getInstance ().login (GameActivityProxy.I.activity, new SMLoginListener() { 
 | 
                            @Override 
 | 
                            public void onLoginSuccess(SMUserInfo loginInfo) { 
 | 
                                //客户端登录成功后,会通过如下方式得到token值,游戏客户端传token给自己服务器 
 | 
                                LogUtil.e("SdkManager", "登录成功"); 
 | 
                                try { 
 | 
                                    args.clear(); 
 | 
                                    JSONObject info = new JSONObject(); 
 | 
                                    info.put("token", loginInfo.getTokenkey()); 
 | 
                                    args.put("info", info); 
 | 
                                    UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); 
 | 
                                } catch (JSONException e) { 
 | 
                                    e.printStackTrace(); 
 | 
                                    LogUtil.e("SdkManager 登录成功", e); 
 | 
                                } 
 | 
  
 | 
                            } 
 | 
  
 | 
                            @Override 
 | 
                            public void onLoginFailed(String reason) { 
 | 
                                LogUtil.e("SdkManager", "登录失败:"); 
 | 
                                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); 
 | 
                            } 
 | 
  
 | 
                            @Override 
 | 
                            public void onLoginCancell(String reason) { 
 | 
                                //登陆取消 
 | 
                                LogUtil.e("SdkManager", "登录失败:"); 
 | 
                                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); 
 | 
                            } 
 | 
  
 | 
                            @Override 
 | 
                            public void onLogoutSuccess() { 
 | 
                                //登出的前提是:已经登录成功了 
 | 
                                UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); 
 | 
                            } 
 | 
                        }); 
 | 
                    } 
 | 
                }); 
 | 
                break; 
 | 
            } 
 | 
            case LOADING: { 
 | 
                Toast.makeText(GameAppProxy.app, "正在初始化中,请稍等!", Toast.LENGTH_LONG).show(); 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void setGameRoleInfo(RoleInfo roleInfo) { 
 | 
        if (GameActivityProxy.I.activity == null) 
 | 
            return; 
 | 
  
 | 
        GameActivityProxy.I.activity.runOnUiThread(new Runnable() 
 | 
        { 
 | 
            @Override 
 | 
            public void run() 
 | 
            { 
 | 
                SMPlatformManager.getInstance().smAfterChooseRoleSendInfo(GameActivityProxy.I.activity, roleInfo); 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
  
 | 
    public void pay(PayInfo payInfo) { 
 | 
        if (GameActivityProxy.I.activity == null) 
 | 
            return; 
 | 
        GameActivityProxy.I.activity.runOnUiThread(new Runnable() 
 | 
        { 
 | 
            @Override 
 | 
            public void run() 
 | 
            { 
 | 
                SMPlatformManager.getInstance ().Pay (GameActivityProxy.I.activity, payInfo, new SMPayListener() { 
 | 
                    @Override 
 | 
                    public void onPaySuccess(Object obj) { 
 | 
                        //支付成功 
 | 
                        //sdkOrderID:quick订单号 cpOrderID:游戏订单号 
 | 
                        UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); 
 | 
                    } 
 | 
  
 | 
                    @Override 
 | 
                    public void onPayFailed(Object obj) { 
 | 
                        //支付失败 
 | 
                        UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); 
 | 
                    } 
 | 
  
 | 
                    @Override 
 | 
                    public void onPayCancell(Object obj) { 
 | 
                        //支付取消 
 | 
                        UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayCancel); 
 | 
                    } 
 | 
                }); 
 | 
            } 
 | 
        }); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    public void register(String productCode, String productKey) { 
 | 
        this.productCode = productCode; 
 | 
        this.productKey = productKey; 
 | 
        //程序的入口执行初始化操作:一般放在游戏入口的activity里面用主线程调用 
 | 
        SMPlatformManager.getInstance().init(GameActivityProxy.I.activity, 
 | 
                productCode, new SMInitListener() { 
 | 
                @Override 
 | 
                public void onSuccess() { 
 | 
                    sdkInitState = SdkInitState.SUCCEED; 
 | 
                    LogUtil.debug("SdkManager", "初始化成功"); 
 | 
                    UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); 
 | 
                } 
 | 
  
 | 
                @Override 
 | 
                public void onFail(String reason) { 
 | 
                    //初始化失败 
 | 
                    sdkInitState = SdkInitState.FAILED; 
 | 
                    LogUtil.e("SdkManager", "初始化失败 msg:" + reason); 
 | 
                    UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); 
 | 
                } 
 | 
            }); 
 | 
    } 
 | 
  
 | 
} 
 |