[h2]CaasKitHelper.java
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
*
*/
package com.huawei.caaskitdemo.caaskit;
import android.content.Context;
import android.util.Log;
import com.huawei.caas.caasservice.CustomDisplayInfo;
import com.huawei.caas.caasservice.HwCaasHandler;
import com.huawei.caas.caasservice.HwCaasServiceCallBack;
import com.huawei.caas.caasservice.HwCaasServiceManager;
import com.huawei.caas.caasservice.HwCaasUtils;
import com.huawei.caas.caasservice.HwCallAbilityCallBack;
import com.huawei.caas.caasservice.HwMakeCallCallBack;
import com.huawei.caaskitdemo.CaasKitApplication;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
/**
* CaasKit Helper.
*
* @since 2020-3-21
*/
public class CaasKitHelper {
private static final String TAG = "CaasKitHelper";
private static CaasKitHelper mCaasKitHelper;
private HwCaasServiceManager mHwCaasServiceManager;
private HwCaasHandler mHwCaasHandler;
private Context mContext;
private boolean mIsCaasKitInit;
private CaasKitHelper() {
mContext = CaasKitApplication.getContext();
}
public static CaasKitHelper getInstance() {
if (mCaasKitHelper == null) {
synchronized (CaasKitHelper.class) {
if (mCaasKitHelper == null) {
mCaasKitHelper = new CaasKitHelper();
}
}
}
return mCaasKitHelper;
}
public void caasKitInit(HwCaasServiceCallBack callback) {
Log.d(TAG, "caasKitInit.");
if (!mIsCaasKitInit) {
/** Initialize mHwCaasServiceManager instance. */
mHwCaasServiceManager = HwCaasServiceManager.init();
/** Initialize HwCaasHandler instance through handlerType. */
mHwCaasServiceManager.initHandler(mContext, HwCaasUtils.HIDE_NUMBER_TYPE, callback);
mIsCaasKitInit = true;
}
}
public void setHwCaasHandler(HwCaasHandler handler) {
Log.d(TAG, "setHwCaasHandler.");
mHwCaasHandler = handler;
}
public void queryHiCallAbility(String phoneNumber) {
Log.d(TAG, "queryHiCallAbility.");
//需Sha256加密后查询 phoneNumber的格式必须是带国家码的号码例:+861320750xxxx
String phoneNumberSha256 = Sha256Util.encryptNumber(phoneNumber);
if (mHwCaasHandler != null) {
mHwCaasHandler.queryCallAbility(phoneNumberSha256, HwCaasUtils.CallAbilityType.HIDE_NUMBER);
}
}
public void setCallAbilityCallBack(HwCallAbilityCallBack callback) {
Log.d(TAG, "setCallAbilityCallBack.");
if (mHwCaasHandler != null) {
mHwCaasHandler.setCallAbilityCallBack(callback);
}
}
public void setMakeCallCallBack(HwMakeCallCallBack callback) {
Log.d(TAG, "setMakeCallCallBack.");
if (mHwCaasHandler != null) {
mHwCaasHandler.setMakeCallCallBack(callback);
}
}
public int makeCall(String phoneNumber, HwCaasUtils.CallType callType) {
Log.d(TAG, "makeCall.");
if (mHwCaasHandler != null) {
CustomDisplayInfo info = new CustomDisplayInfo
//被叫界面显示的主叫应用名 - 被叫界面显示的主叫字段1(例:主叫名称) - 主叫界面显示的字段(例:被叫名称)
.Builder("Application","Jane", "Andy")
//被叫界面显示的主叫字段2(例:公司职位)
.setCallerDisplayInfo2("Company X, CDO")
.build();
//需Sha256加密后呼出 phoneNumber的格式必须是带国家码的号码例:+861320750xxxx
String phoneNumberSha256 = Sha256Util.encryptNumber(phoneNumber);
int retCode = mHwCaasHandler.makeCall(phoneNumberSha256, callType, info);
Log.d(TAG, "makeCall retCode: " + retCode);
return retCode;
}
return -1;
}
public void caasKitRelease() {
Log.d(TAG, "caasKitRelease." + mIsCaasKitInit);
if (mIsCaasKitInit) {
if (mHwCaasServiceManager != null) {
/** Source release */
mHwCaasServiceManager.release();
mHwCaasServiceManager = null;
}
mIsCaasKitInit = false;
}
}
} [h2]CaasKitApplication.java
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
*/
package com.huawei.caaskitdemo;
import android.app.Application;
import android.content.Context;
import android.util.Log;
/**
* Main application.
*
* @since 2019-10-21
*/
public class CaasKitApplication extends Application {
private static final String TAG = "CaasKitApplication";
private static CaasKitApplication sApplication;
@Override
public void onCreate() {
Log.i(TAG, "onCreate.");
super.onCreate();
setApp(this);
}
public static CaasKitApplication getInstance() {
return sApplication;
}
public static Context getContext() {
return sApplication.getApplicationContext();
}
private static synchronized void setApp(CaasKitApplication app) {
sApplication = app;
}
} [h2]CaasKitActivity.java
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
*
*/
package com.huawei.caaskitdemo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.huawei.caas.caasservice.HwCaasHandler;
import com.huawei.caas.caasservice.HwCaasServiceCallBack;
import com.huawei.caas.caasservice.HwCaasUtils;
import com.huawei.caas.caasservice.HwCallAbilityCallBack;
import com.huawei.caas.caasservice.HwMakeCallCallBack;
import com.huawei.caaskitdemo.caaskit.CaasKitHelper;
import java.util.regex.Pattern;
public class CaasKitActivity extends AppCompatActivity {
private static final String TAG = "CaasKitActivity";
private static final int PHONE_NOT_SUPPORT_HICALL = 3002;
private static final int SHOW_TOAST = 0;
private static final int SET_ALL_VISIBALE = 1;
private static final int SET_ALL_INVISIBALE = 2;
private static final int SET_AUDIO_VISIBALE = 3;
private static final int SET_AUDIO_INVISIBALE = 4;
private EditText mPhoneNumber;
private Button mStartQuery;
private Button mMakeVideoCall;
private Button mMakeAudioCall;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int index = msg.what;
switch (index) {
case SHOW_TOAST:
toast("caas not support.");
break;
case SET_ALL_VISIBALE:
setVisibility(true, 0);
break;
case SET_ALL_INVISIBALE:
setVisibility(false, 0);
break;
case SET_AUDIO_VISIBALE:
setVisibility(true, 1);
break;
case SET_AUDIO_INVISIBALE:
setVisibility(false, 1);
break;
default:
break;
}
}
};
private HwCaasServiceCallBack mCallBack = new HwCaasServiceCallBack() {
@Override
public void initSuccess(HwCaasHandler handler) {
Log.i(TAG, "HwCaasServiceCallBack:initSuccess.");
/** Callback after successful initialization of HwCaasHandler. */
CaasKitHelper.getInstance().setHwCaasHandler(handler);
CaasKitHelper.getInstance().setCallAbilityCallBack(mAbilityCallBack);
CaasKitHelper.getInstance().setMakeCallCallBack(new HwMakeCallCallBack() {
@Override
public void makeCallResult(String number, int retCode) {
Log.d(TAG, "number: " + number + " retCode: " + retCode);
}
});
}
@Override
public void initFail(int retCode) {
/** Callback if init Handler fail. */
Log.i(TAG, "HwCaasServiceCallBack:initFail:retCode: " + retCode);
setVisibility(false, 0);
toast("HwCaasServiceCallBack initFail");
}
@Override
public void releaseSuccess() {
/** Callback after successful release of mHwCaasServiceManager. */
Log.i(TAG, "HwCaasServiceCallBack:releaseSuccess");
CaasKitHelper.getInstance().setHwCaasHandler(null);
}
};
private HwCallAbilityCallBack mAbilityCallBack = new HwCallAbilityCallBack() {
@Override
public void callAbilityResult(String phoneNumberSha256, int retCode) {
Log.i(TAG, "HwCallAbilityCallBack:phoneNumberSha256:" + phoneNumberSha256 + " retCode:" + retCode);
if (retCode == 0) {
handler.sendMessage(handler.obtainMessage(SET_ALL_VISIBALE));
} else if (retCode == 1) {
handler.sendMessage(handler.obtainMessage(SET_AUDIO_VISIBALE));
} else if (retCode == PHONE_NOT_SUPPORT_HICALL) {
handler.sendMessage(handler.obtainMessage(SHOW_TOAST));
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_caaskitquickcall);
initView();
initData();
CaasKitHelper.getInstance().caasKitInit(mCallBack);
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause.");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume.");
}
private void initView() {
mPhoneNumber = (EditText) findViewById(R.id.phone_number);
mStartQuery = (Button) findViewById(R.id.start_query);
mMakeVideoCall = (Button) findViewById(R.id.make_video_call);
mMakeAudioCall = (Button) findViewById(R.id.make_audio_call);
}
private void initData() {
mPhoneNumber.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
setVisibility(false, 0);
}
});
mStartQuery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CaasKitHelper.getInstance().queryHiCallAbility(mPhoneNumber.getText().toString());
}
});
mMakeVideoCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
makeCall(HwCaasUtils.CallType.VIDEO_CALL);
}
});
mMakeAudioCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
makeCall(HwCaasUtils.CallType.VOICE_CALL);
}
});
setVisibility(false, 0);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy.");
CaasKitHelper.getInstance().caasKitRelease();
}
private void makeCall(HwCaasUtils.CallType callType) {
int retCode = CaasKitHelper.getInstance().makeCall(mPhoneNumber.getText().toString(), callType);
Log.d(TAG, "makeCall:retCode: " + retCode);
}
private void setVisibility(boolean visible, int callType) {
int videoCallState = mMakeVideoCall.getVisibility();
int audioCallState = mMakeAudioCall.getVisibility();
if (callType == 0) {
if (visible && (videoCallState != 0 || audioCallState != 0)) {
mMakeVideoCall.setVisibility(View.VISIBLE);
mMakeAudioCall.setVisibility(View.VISIBLE);
} else if (!visible && (videoCallState == 0 || audioCallState == 0)) {
mMakeVideoCall.setVisibility(View.INVISIBLE);
mMakeAudioCall.setVisibility(View.INVISIBLE);
}
} else if (callType == 1) {
if (visible && (audioCallState != 0)) {
mMakeAudioCall.setVisibility(View.VISIBLE);
} else if (!visible && (audioCallState == 0)) {
mMakeAudioCall.setVisibility(View.INVISIBLE);
}
}
}
/**
* show toast
*
* @param msg show msg
*/
private void toast(String msg) {
if (!TextUtils.isEmpty(msg)) {
Toast.makeText(CaasKitApplication.getContext(), msg, Toast.LENGTH_SHORT).show();
}
}
} [h2]Sha256Util.java
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
*/
package com.huawei.caaskitdemo.caaskit;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Sha256Util
*
* @since 2019-02-12
*/
public class Sha256Util {
private static final int DEFAULT_STRING_BUILDER_LENGTH = 128;
private static final int HEX_LENGTH = 2;
private static final int BYTE = 0xFF;
private Sha256Util() {
}
/**
* sha256 encryption
*
* @param strSrc the string to be encrypted
* @return encrypted string
*/
public static String encryptNumber(String strSrc) {
if (strSrc == null) {
return null;
}
MessageDigest md;
String strDes;
String encName = "SHA-256";
try {
md = MessageDigest.getInstance(encName);
byte[] bt = strSrc.getBytes(StandardCharsets.UTF_8);
md.update(bt);
strDes = getString(md.digest()); // to HexString
} catch (NoSuchAlgorithmException e) {
return null;
}
return strDes;
}
private static String getString(byte[] b) {
StringBuffer sb = new StringBuffer(DEFAULT_STRING_BUILDER_LENGTH);
String hex;
for (byte b1 : b) {
hex = Integer.toHexString(b1 & BYTE);
if (hex.length() < HEX_LENGTH) {
sb.append(0);
}
sb.append(hex);
}
return sb.toString();
}
}