jimu-decompiled/sources/com/ubt/jimu/blockly/command/JimuJavascriptInterface.java
2025-05-13 19:24:51 +02:00

629 lines
25 KiB
Java

package com.ubt.jimu.blockly.command;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import com.ubt.jimu.JimuApplication;
import com.ubt.jimu.R;
import com.ubt.jimu.base.cache.Cache;
import com.ubt.jimu.base.cache.Constants;
import com.ubt.jimu.base.db.diy.DiyHelper;
import com.ubt.jimu.base.db.starcourse.CourseDbHandler;
import com.ubt.jimu.base.entities.ActionResult;
import com.ubt.jimu.base.entities.Constant;
import com.ubt.jimu.base.entities.Course;
import com.ubt.jimu.base.entities.Robot;
import com.ubt.jimu.blockly.JimuRobot;
import com.ubt.jimu.blockly.Utils;
import com.ubt.jimu.blockly.bean.BlocklyProject;
import com.ubt.jimu.blockly.command.interaction.AbstractBlocklyInteraction;
import com.ubt.jimu.blockly.command.interaction.BlocklyInteraction;
import com.ubt.jimu.blockly.command.interaction.BlocklyUpload;
import com.ubt.jimu.blockly.command.result.JavaResultBean;
import com.ubt.jimu.blockly.feature.audio.AudioParams;
import com.ubt.jimu.blockly.feature.audio.AudioPlayer;
import com.ubt.jimu.blockly.feature.audio.AudioRecoder;
import com.ubt.jimu.blockly.feature.course.BlocklyDomCompare;
import com.ubt.jimu.blockly.feature.sensor.SensorObservable;
import com.ubt.jimu.blockly.feature.sensor.SensorObserver;
import com.ubt.jimu.blockly.view.DialogBlocklyWebView;
import com.ubt.jimu.course.repository.JimuCourse;
import com.ubt.jimu.course.repository.JimuCourseMission;
import com.ubt.jimu.course.repository.JimuCourseTask;
import com.ubt.jimu.discover.CourseHelper;
import com.ubt.jimu.discover.IAccomplishEventListener;
import com.ubt.jimu.discover.view.AccomplishWithoutUserDialog;
import com.ubt.jimu.diy.DiyRobotDbHandler;
import com.ubt.jimu.unity.ModelType;
import com.ubt.jimu.unity.bluetooth.UnityActivity;
import com.ubt.jimu.utils.DeviceUtils;
import com.ubt.jimu.utils.JsonHelper;
import com.ubt.jimu.utils.LogUtils;
import com.ubt.jimu.utils.SPUtils;
import com.ubtech.permission.JimuPermissionRequest;
import com.ubtech.permission.PermissionRequestListener;
import com.ubtech.utils.FileHelper;
import com.ubtech.utils.PermissionHelper;
import com.ubtech.utils.XLog;
import com.ubtrobot.log.ALog;
import java.io.File;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/* loaded from: classes.dex */
public class JimuJavascriptInterface {
private Context context;
private Course course;
private DialogBlocklyWebView dialogBlocklyWebView;
private JavaScriptCommand javaScriptCommand;
private JimuRobot jimuRobot;
private WebView webView;
private final String TAG = JimuJavascriptInterface.class.getSimpleName();
private final String BLOCKLY_INTERVAL = "continueSteps";
private final String SOUND_FILE_MODEL_ID = "0";
private int platformType = 1;
private AbstractBlocklyInteraction transportAction = new BlocklyInteraction(new BlocklyUpload());
public JimuJavascriptInterface(WebView webView, Context context, JimuRobot jimuRobot) {
this.jimuRobot = jimuRobot;
this.webView = webView;
this.context = context;
this.javaScriptCommand = new JavaScriptCommand(webView, context, jimuRobot, this.transportAction);
}
private String getBlocklyProjectId(String str) {
try {
JSONObject jSONObject = new JSONObject(str);
if (jSONObject.has("xmlId")) {
return jSONObject.getString("xmlId");
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@JavascriptInterface
public String DeleteXml(String str) {
return JsonHelper.a(this.javaScriptCommand.deleteXml(getBlocklyProjectId(str)));
}
@JavascriptInterface
public String EditXml(String str) {
BlocklyProject blocklyProject = (BlocklyProject) JsonHelper.a(str, (Class<?>) BlocklyProject.class);
if (blocklyProject != null) {
return JsonHelper.a(this.javaScriptCommand.editXml(blocklyProject.getXmlName(), blocklyProject.getXmlContent(), blocklyProject.getXmlId(), blocklyProject.getBlocklyVersion(), blocklyProject.getDefaultName()));
}
JavaResultBean javaResultBean = new JavaResultBean();
javaResultBean.retCode = JavaResultBean.RESULT_EXCEPTION;
javaResultBean.retMsg = "unknow input";
return JsonHelper.a(javaResultBean);
}
@JavascriptInterface
public String ReadXml(String str) {
return JsonHelper.a(this.javaScriptCommand.readXml(getBlocklyProjectId(str)));
}
@JavascriptInterface
public String ReadXmlList() {
return JsonHelper.a(this.javaScriptCommand.xmlList());
}
@JavascriptInterface
public String SaveXml(String str) {
BlocklyProject blocklyProject = (BlocklyProject) JsonHelper.a(str, (Class<?>) BlocklyProject.class);
if (blocklyProject != null) {
return JsonHelper.a(this.javaScriptCommand.saveXml(blocklyProject.getXmlName(), blocklyProject.getXmlContent(), blocklyProject.getBlocklyVersion(), blocklyProject.getDefaultName()));
}
JavaResultBean javaResultBean = new JavaResultBean();
javaResultBean.retCode = JavaResultBean.RESULT_EXCEPTION;
javaResultBean.retMsg = "unknow input";
return JsonHelper.a(javaResultBean);
}
@JavascriptInterface
public String addCustomSound(String str) {
return JsonHelper.a(this.javaScriptCommand.addCustomSound(str));
}
@JavascriptInterface
public void cancelRecordAudio() {
AudioRecoder.getInstance().stopRecod();
File parentFile = new File(AudioRecoder.getInstance().getFileName()).getParentFile();
if (parentFile == null || !parentFile.exists()) {
return;
}
FileHelper.a(parentFile);
}
@JavascriptInterface
public void courseSuccessPopup(String str) {
LogUtils.c("courseId:" + str + " " + str);
final IAccomplishEventListener iAccomplishEventListener = new IAccomplishEventListener() { // from class: com.ubt.jimu.blockly.command.JimuJavascriptInterface.4
@Override // com.ubt.jimu.discover.IAccomplishEventListener
public void onPlayAgain(Course course) {
JimuJavascriptInterface.this.webView.reload();
}
@Override // com.ubt.jimu.discover.IAccomplishEventListener
public void onPlayContinue(Course course) {
((UnityActivity) JimuJavascriptInterface.this.context).setIsBack(true);
((UnityActivity) JimuJavascriptInterface.this.context).closeBlockly();
}
};
final AccomplishWithoutUserDialog a = AccomplishWithoutUserDialog.a(this.course);
a.a(iAccomplishEventListener);
String userId = Cache.getInstance().getUserId();
if (!"local".equals(userId) && !TextUtils.isEmpty(userId)) {
if (Course.STATUS_COMPLETED.equals(this.course.getStatus())) {
a.show(((Activity) this.context).getFragmentManager(), "course");
return;
}
CourseHelper courseHelper = new CourseHelper(new CourseHelper.IUploadCourseListener() { // from class: com.ubt.jimu.blockly.command.JimuJavascriptInterface.5
@Override // com.ubt.jimu.discover.CourseHelper.IUploadCourseListener
public void onFailed() {
JimuJavascriptInterface.this.dialogBlocklyWebView.hideWait();
JimuJavascriptInterface.this.webView.postDelayed(new Runnable() { // from class: com.ubt.jimu.blockly.command.JimuJavascriptInterface.5.1
@Override // java.lang.Runnable
public void run() {
JimuJavascriptInterface.this.dialogBlocklyWebView.commonTips(JimuJavascriptInterface.this.dialogBlocklyWebView.getString(R.string.network_error), 2);
}
}, 500L);
}
@Override // com.ubt.jimu.discover.CourseHelper.IUploadCourseListener
public void onFinished() {
JimuJavascriptInterface.this.dialogBlocklyWebView.hideWait();
}
@Override // com.ubt.jimu.discover.CourseHelper.IUploadCourseListener
public void onStart() {
}
@Override // com.ubt.jimu.discover.CourseHelper.IUploadCourseListener
public void onSuccess(ActionResult actionResult) {
if (actionResult != null && actionResult.getCourse() != null && actionResult.getFlag() == 0) {
a.show(((Activity) JimuJavascriptInterface.this.context).getFragmentManager(), "course");
return;
}
CourseDbHandler.setCourseComplete(JimuJavascriptInterface.this.course);
AccomplishWithoutUserDialog a2 = AccomplishWithoutUserDialog.a(JimuJavascriptInterface.this.course, actionResult);
a2.a(((Activity) JimuJavascriptInterface.this.context).getFragmentManager(), "course", actionResult);
a2.a(iAccomplishEventListener);
}
});
String b = SPUtils.b(Constant.SelectRobot.INTERSTELLAR_ADVENTURE_SELECT_PACKAGE_KEY);
long parseLong = Long.parseLong(str);
if (Constant.SelectRobot.INTERSTELLAR_ADVENTURE_NEW_PACKAGE_COSMOS.equals(b) || Constant.SelectRobot.INTERSTELLAR_ADVENTURE_NEW_PACKAGE_STEM.equals(b) || Constant.SelectRobot.INTERSTELLAR_ADVENTURE_NEW_PACKAGE_UPGRADED.equals(b)) {
parseLong += 24;
}
courseHelper.a(parseLong);
this.dialogBlocklyWebView.showWait();
return;
}
String storyName = this.course.getStoryName();
LogUtils.c("storyName:" + storyName + " " + str);
if (Constant.SelectRobot.ASTROBOT_MINI.equals(storyName)) {
if (!TextUtils.isEmpty(str)) {
SPUtils.b(Constant.SelectRobot.LOCAL_USER_COSMOS_FLAG_NEW, Integer.parseInt(str));
}
} else if (!TextUtils.isEmpty(str)) {
SPUtils.b(Constant.SelectRobot.LOCAL_USER_COSMOS_FLAG_OLD, Integer.parseInt(str));
}
CourseDbHandler.setCourseComplete(this.course);
a.show(((Activity) this.context).getFragmentManager(), "course");
}
@JavascriptInterface
public String customSoundList() {
return JsonHelper.a(this.javaScriptCommand.customSoundList(Cache.getInstance().getUserId()));
}
@JavascriptInterface
public String deleteCustomMotion(String str) {
return JsonHelper.a(this.javaScriptCommand.deleteCustomMotion(str));
}
@JavascriptInterface
public boolean deleteCustomSound(String str) {
return this.javaScriptCommand.deleteCustomSound(Cache.getInstance().getUserId(), str);
}
@JavascriptInterface
public String getBlocklyProjectDescription(String str) {
return FileHelper.b(this.jimuRobot.getSamplePath() + str + ".desc", "");
}
@JavascriptInterface
public String getCustomMotion(String str) {
return JsonHelper.a(this.javaScriptCommand.getCustomMotion(str));
}
@JavascriptInterface
public String getCustomMotionList() {
return JsonHelper.a(this.javaScriptCommand.getMotionList());
}
@JavascriptInterface
public String getDeviceDirection() {
return this.dialogBlocklyWebView.getDirection() == null ? "" : this.dialogBlocklyWebView.getDirection().getValue();
}
@JavascriptInterface
public String getInitProgramInfo() {
return this.jimuRobot.getProgram() == null ? "" : JsonHelper.a(this.jimuRobot.getProgram());
}
@JavascriptInterface
public String getMotionList() {
return TextUtils.isEmpty(this.jimuRobot.getMotion()) ? "{}" : this.jimuRobot.getMotion();
}
@JavascriptInterface
public String getServoID() {
StringBuilder sb = new StringBuilder();
sb.append(JimuRobot.ACTIONS);
sb.append(this.jimuRobot.getAction());
if (!TextUtils.isEmpty(this.jimuRobot.getServo())) {
sb.append("&");
sb.append(JimuRobot.SERVOS);
sb.append(this.jimuRobot.getServo());
}
if (!TextUtils.isEmpty(this.jimuRobot.getInfraredId())) {
sb.append("&");
sb.append(JimuRobot.INFRARED_ID);
sb.append(this.jimuRobot.getInfraredId());
}
if (!TextUtils.isEmpty(this.jimuRobot.getTouchId())) {
sb.append("&");
sb.append(JimuRobot.TOUCH_ID);
sb.append(this.jimuRobot.getTouchId());
}
if (!TextUtils.isEmpty(this.jimuRobot.getGyroscopeId())) {
sb.append("&");
sb.append(JimuRobot.GYROSCOPE_ID);
sb.append(this.jimuRobot.getGyroscopeId());
}
if (!TextUtils.isEmpty(this.jimuRobot.getCircleServos())) {
sb.append("&");
sb.append(JimuRobot.CIRCLE_SERVOS);
sb.append(this.jimuRobot.getCircleServos());
}
if (!TextUtils.isEmpty(this.jimuRobot.getLights())) {
sb.append("&");
sb.append(JimuRobot.LIGHTS);
sb.append(this.jimuRobot.getLights());
}
if (!TextUtils.isEmpty(this.jimuRobot.getColorId())) {
sb.append("&colorId=");
sb.append(this.jimuRobot.getColorId());
}
if (!TextUtils.isEmpty(this.jimuRobot.getUnicornId())) {
sb.append("&unicornId=");
sb.append(this.jimuRobot.getUnicornId());
}
if (!TextUtils.isEmpty(this.jimuRobot.getMotor())) {
sb.append("&motor=");
sb.append(this.jimuRobot.getMotor());
}
if (!TextUtils.isEmpty(this.jimuRobot.getIsLithium())) {
sb.append("&isLithium=");
sb.append(this.jimuRobot.getIsLithium());
}
if (!TextUtils.isEmpty(this.jimuRobot.getUltrasonicId())) {
sb.append("&ultrasonicId=");
sb.append(this.jimuRobot.getUltrasonicId());
}
if (!TextUtils.isEmpty(this.jimuRobot.getModelType())) {
sb.append("&modelType=");
sb.append(this.jimuRobot.getModelType());
}
if (!TextUtils.isEmpty(this.jimuRobot.getModelId())) {
sb.append("&modelID=");
sb.append(this.jimuRobot.getModelId());
}
String g = JimuApplication.l().g();
sb.append("&");
sb.append(JimuRobot.LANGUAGE);
sb.append(g);
sb.append("&");
sb.append(JimuRobot.BLUE_STATE);
sb.append(this.jimuRobot.getBlueState());
sb.append("&");
sb.append(JimuRobot.MODEL_TYPE);
sb.append(SPUtils.a(Constant.Black.BLACK_MODEL_TYPE_KEY, 0));
sb.append("&platformType=");
sb.append(this.platformType);
Robot robot = Cache.getInstance().getRobot();
String logPath = String.valueOf(ModelType.DEFAULT.getType()).equals(this.jimuRobot.getServerModelType()) ? robot != null ? DiyRobotDbHandler.getLogPath(ModelType.DEFAULT, robot.getModelName()) : "" : DiyHelper.getInstance().queryForUUid(this.jimuRobot.getModelId()) == null ? DiyRobotDbHandler.getLogPath(ModelType.PLAYER_DATA, this.jimuRobot.getModelId()) : DiyHelper.getInstance().queryForUUid(this.jimuRobot.getModelId()).getFilePath();
sb.append("&modelLogo=");
sb.append(logPath);
String userId = Cache.getInstance().getUserId();
if ("local".equals(userId)) {
userId = DeviceUtils.a(this.context);
}
sb.append("&");
sb.append("userId=");
sb.append(userId);
sb.append("&");
sb.append("edit=");
sb.append(((UnityActivity) this.context).code != 1007 ? 1 : 0);
if (1 == this.dialogBlocklyWebView.getModuleType()) {
JimuCourse jimuCourse = Cache.getInstance().getJimuCourse();
JimuCourseTask jimuCourseTask = Cache.getInstance().getJimuCourseTask();
JimuCourseMission courseMission = Cache.getInstance().getCourseMission();
if (robot != null && jimuCourse != null && jimuCourseTask != null && courseMission != null) {
String str = Constants.COURSE_RESOURCE_PATH + jimuCourse.getId();
sb.append("&");
sb.append("packageId=");
sb.append(Cache.getInstance().getPackageId());
sb.append("&");
sb.append("modelId=");
sb.append(robot.getModelId());
sb.append("&");
sb.append("modelID=");
sb.append(robot.getModelName());
sb.append("&");
sb.append("modelName=");
sb.append(robot.getModelDescriptionLangeage());
sb.append("&");
sb.append("moveType=");
sb.append(robot.getMoveType());
sb.append("&");
sb.append("level=");
sb.append(jimuCourse.getFolderName());
sb.append("&");
sb.append("stage=");
sb.append(jimuCourseTask.getFolderName());
sb.append("&");
sb.append("mission=");
sb.append(courseMission.getFolderName());
sb.append("&");
sb.append("missionId=");
sb.append(courseMission.getId());
sb.append("&");
sb.append("sourcePath=");
sb.append(str);
}
} else {
sb.append("&");
sb.append(JimuRobot.IS_FIRST);
sb.append(this.jimuRobot.firstOpen());
}
Course course = this.course;
if (course != null) {
String nameKey = course.getNameKey();
String replace = TextUtils.isEmpty(nameKey) ? "" : nameKey.replace("course_", "");
sb.append("&");
sb.append("courseId=");
sb.append(replace);
sb.append("&");
sb.append("serialName=");
sb.append("AstroBot");
sb.append("&");
sb.append("sourcePath=");
sb.append(Utils.getStarCourseDirPath());
}
String tTSToken = Cache.getInstance().getTTSToken();
LogUtils.c("ttsToken:" + tTSToken);
if (!TextUtils.isEmpty(tTSToken)) {
sb.append("&");
sb.append("tok=");
sb.append(tTSToken);
String valueOf = Cache.getInstance().getLoginUserIntId() > 0 ? String.valueOf(Cache.getInstance().getLoginUserIntId()) : DeviceUtils.a(this.context);
sb.append("&");
sb.append("cuid=");
sb.append(valueOf);
}
String sb2 = sb.toString();
XLog.a("Chrome", sb2);
return sb2;
}
@JavascriptInterface
public boolean hasRecordAuthority() {
if (PermissionHelper.a(this.context, "android.permission.RECORD_AUDIO")) {
return PermissionHelper.a(this.context, "android.permission.RECORD_AUDIO");
}
this.webView.post(new Runnable() { // from class: com.ubt.jimu.blockly.command.JimuJavascriptInterface.2
@Override // java.lang.Runnable
public void run() {
JimuPermissionRequest.a((Activity) JimuJavascriptInterface.this.context, (PermissionRequestListener) null);
}
});
return false;
}
@JavascriptInterface
public String helpUrl() {
String str = "https://jimu.ubtrobot.com/jimu/help_new/help_new.html?language=" + JimuApplication.l().g();
this.javaScriptCommand.helpUrl();
return str;
}
@JavascriptInterface
public boolean isTablet() {
return true;
}
@JavascriptInterface
public void playAudio(String str) {
this.javaScriptCommand.playAudio(str);
}
public void playCurrentRecordAudio() {
AudioPlayer.getInstance().play(AudioRecoder.getInstance().getFileName());
}
@JavascriptInterface
public void recordContentViewEnd(String str) {
this.javaScriptCommand.recordContentViewEnd(str);
}
@JavascriptInterface
public void recordContentViewStart(String str) {
this.javaScriptCommand.recordContentViewStart(str);
}
@JavascriptInterface
public void recordEvent(String str, String str2) {
this.javaScriptCommand.recordEvent(str, str2);
}
@JavascriptInterface
public void registerSensorObserver(String str) {
SensorObservable.getInstance().addObserver((SensorObserver) JsonHelper.a(str, (Class<?>) SensorObserver.class));
}
@JavascriptInterface
public void registerSensorObservers(String str) {
try {
JSONArray jSONArray = new JSONArray(str);
for (int i = 0; i < jSONArray.length(); i++) {
JSONObject jSONObject = jSONArray.getJSONObject(i);
if (jSONObject != null) {
SensorObservable.getInstance().addObserver((SensorObserver) JsonHelper.a(jSONObject.toString(), (Class<?>) SensorObserver.class));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@JavascriptInterface
public String renameAudio(String str) {
return JsonHelper.a(this.javaScriptCommand.renameAudio(str));
}
@JavascriptInterface
public String renameMotion(String str) {
return JsonHelper.a(this.javaScriptCommand.renameMotion(str));
}
@JavascriptInterface
public String renameProject(String str) {
return JsonHelper.a(this.javaScriptCommand.renameProject(str));
}
@JavascriptInterface
public void resignActiveBranch() {
ALog.a(this.TAG).d("重新激活分支");
SensorObservable.getInstance().reActiveObserver();
}
@JavascriptInterface
public String saveCustomMotion(String str) {
return JsonHelper.a(this.javaScriptCommand.saveCustomMotion(str));
}
public void setCourse(Course course) {
this.course = course;
}
public void setDialogBlocklyWebView(DialogBlocklyWebView dialogBlocklyWebView) {
this.dialogBlocklyWebView = dialogBlocklyWebView;
}
protected void setJSResult(String str, String... strArr) {
StringBuilder sb = new StringBuilder();
sb.append("javascript:");
sb.append(str);
sb.append("(");
if (strArr != null && strArr.length > 0) {
for (int i = 0; i < strArr.length; i++) {
sb.append("'");
sb.append(strArr[i]);
sb.append("'");
if (i < strArr.length - 1) {
sb.append(",");
}
}
}
sb.append(")");
final String sb2 = sb.toString();
Log.i(this.TAG, sb2);
this.webView.post(new Runnable() { // from class: com.ubt.jimu.blockly.command.JimuJavascriptInterface.1
@Override // java.lang.Runnable
public void run() {
JimuJavascriptInterface.this.webView.loadUrl(sb2);
}
});
}
public void setJimuRobot(JimuRobot jimuRobot) {
}
@JavascriptInterface
public boolean startRecordAudio() {
if (!PermissionHelper.a(this.context, "android.permission.RECORD_AUDIO")) {
this.webView.post(new Runnable() { // from class: com.ubt.jimu.blockly.command.JimuJavascriptInterface.3
@Override // java.lang.Runnable
public void run() {
JimuPermissionRequest.a((Activity) JimuJavascriptInterface.this.context, (PermissionRequestListener) null);
}
});
return false;
}
String formatId = Utils.getFormatId(System.currentTimeMillis());
try {
return AudioRecoder.getInstance().startRecord((this.jimuRobot.getCustomSounds() + formatId) + File.separator + formatId + AudioParams.AAC);
} catch (Exception e) {
e.printStackTrace();
Log.e(this.TAG, "录音失败");
return false;
}
}
@JavascriptInterface
public void stopPlayAudio() {
AudioPlayer.getInstance().stop();
}
@JavascriptInterface
public void stopRecordAudio() {
AudioRecoder.getInstance().stopRecod();
}
@JavascriptInterface
public void successDeal(String str) {
this.javaScriptCommand.successDeal(str);
}
@JavascriptInterface
public void unRegisterAllSensorObserver() {
ALog.a(this.TAG).d("删除所有的观察者");
SensorObservable.getInstance().deleteObservers();
SensorObservable.getInstance().clearActiveObserver();
}
@JavascriptInterface
public void unRegisterSensorObserver(String str) {
ALog.a(this.TAG).d("删除观察者:" + str);
SensorObservable.getInstance().deleteObserver((SensorObserver) JsonHelper.a(str, (Class<?>) SensorObserver.class));
}
@JavascriptInterface
public String verifyCourse(String str, String str2) {
String check = new BlocklyDomCompare().check(str, str2);
Log.i(this.TAG, check);
return check;
}
@JavascriptInterface
@Deprecated
public String versionSwitch(String str) {
return "";
}
@JavascriptInterface
public void recordEvent(String str) {
this.javaScriptCommand.recordEvent(str);
}
}