| @@ -33,6 +33,7 @@ import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.Timer; | |||
| import java.util.TimerTask; | |||
| import java.util.concurrent.ConcurrentHashMap; | |||
| import okhttp3.MediaType; | |||
| import okhttp3.RequestBody; | |||
| @@ -41,6 +42,7 @@ public class ConfigManager { | |||
| private static final String TAG = "ConfigManager"; | |||
| private volatile static ConfigManager mInstance; | |||
| private long mUserTimeStamp = 0; | |||
| private ConcurrentHashMap<String, Skill> mSkillHashMap = new ConcurrentHashMap<>(); | |||
| private ConfigManager() { | |||
| @@ -268,6 +270,7 @@ public class ConfigManager { | |||
| if (obj.has("data")) { | |||
| JSONArray array = obj.getJSONArray("data"); | |||
| MessageUtils.sendSkills(array.toString()); | |||
| mSkillHashMap.clear(); | |||
| for (int i = 0; i < array.length(); i++) { | |||
| JSONObject jsonObject = array.getJSONObject(i); | |||
| Skill skill = new Skill(); | |||
| @@ -280,6 +283,7 @@ public class ConfigManager { | |||
| skill.motionId = jsonObject.optString("motionId"); | |||
| skill.motionName = jsonObject.optString("motionName"); | |||
| SkillDbHelper.getInstance().add(skill); | |||
| mSkillHashMap.put(skill.skillCode, skill); | |||
| } | |||
| if (obj.has("timestamp")) { | |||
| mUserTimeStamp = obj.optLong("timestamp"); | |||
| @@ -342,6 +346,10 @@ public class ConfigManager { | |||
| if(jsonObject.has("background")){ | |||
| MessageUtils.sendBackground(model.background.url); | |||
| } | |||
| if(jsonObject.has("direction")){ | |||
| model.direction = jsonObject.optInt("direction", 0); | |||
| FaceManager.getInstance().setGreetingLeaveType(model.direction); | |||
| } | |||
| if(jsonObject.has("icon")){ | |||
| MessageUtils.sendIcon(model.icon.url, model.icon.type); | |||
| } | |||
| @@ -508,4 +516,15 @@ public class ConfigManager { | |||
| // MqttManager.getInstance(MainActivity.instance).getFileUploadPath(Config.ErrorEvent.ERROR_UPLOAD_WARNING, Config.ErrorEvent.ERROR_LEVEL_URGENT, "process_status", TAG); | |||
| } | |||
| } | |||
| public Skill getSkillByTag(String type) { | |||
| if (mSkillHashMap.get(type) != null) { | |||
| return mSkillHashMap.get(type); | |||
| } | |||
| Skill skill = SkillDbHelper.getInstance().getBySkillCode(type); | |||
| if (skill != null) { | |||
| mSkillHashMap.put(skill.skillCode, skill); | |||
| } | |||
| return skill; | |||
| } | |||
| } | |||
| @@ -18,6 +18,7 @@ public class SkillBuilder implements DatabaseBuilder<Skill>{ | |||
| skill.skillCode = (query.getString(query.getColumnIndex("skill_code"))); | |||
| skill.info = (query.getString(query.getColumnIndex("info"))); | |||
| skill.resp = (query.getString(query.getColumnIndex("resp"))); | |||
| skill.leavingResp = (query.getString(query.getColumnIndex("leavingResp"))); | |||
| skill.motionId = (query.getString(query.getColumnIndex("motionId"))); | |||
| skill.motionName = (query.getString(query.getColumnIndex("motionName"))); | |||
| return skill; | |||
| @@ -32,6 +33,7 @@ public class SkillBuilder implements DatabaseBuilder<Skill>{ | |||
| contentValues.put("skill_code",skill.skillCode); | |||
| contentValues.put("info",skill.info); | |||
| contentValues.put("resp",skill.resp); | |||
| contentValues.put("leavingResp",skill.leavingResp); | |||
| contentValues.put("motionId",skill.motionId); | |||
| contentValues.put("motionName",skill.motionName); | |||
| return contentValues; | |||
| @@ -12,6 +12,7 @@ public class Model implements Serializable { | |||
| public String name; | |||
| public String updateTime; | |||
| public String nickName; | |||
| public int direction = 0; | |||
| public int manCode; | |||
| public Background background; | |||
| public Icon icon; | |||
| @@ -14,6 +14,7 @@ public class Skill implements Serializable { | |||
| public String skillCode; | |||
| public String info; | |||
| public String resp; | |||
| public String leavingResp; | |||
| public String motionId; | |||
| public String motionName; | |||
| @@ -13,9 +13,11 @@ public interface ChatMode { | |||
| void changeGreetingDelay(long delay); | |||
| void changeGreetingLeaveDuration(int greetingLeaveDuration); | |||
| long getGreetingDelay(); | |||
| void setGreetingLeaveType(int greetingLeaveType, String greetingLeaveResp, int greetingLeaveDuration); | |||
| void setGreetingLeaveType(int greetingLeaveType); | |||
| List<PersonInfo> getPersonInScreen(); | |||
| } | |||
| @@ -9,6 +9,7 @@ import android.util.Log; | |||
| import com.aispeech.nativedemo.MainActivity; | |||
| import com.aispeech.nativedemo.asr.observer.DuiMessageObserver; | |||
| import com.aispeech.nativedemo.config.Config; | |||
| import com.aispeech.nativedemo.config.ConfigManager; | |||
| import com.aispeech.nativedemo.db.EmpStrongDbHelper; | |||
| import com.aispeech.nativedemo.db.ModelDbHelper; | |||
| import com.aispeech.nativedemo.db.SkillDbHelper; | |||
| @@ -160,16 +161,19 @@ public class FaceChatGreetingQueueMode implements ChatMode { | |||
| UNKNOWN_GREETING_DURATION = delay; | |||
| } | |||
| @Override | |||
| public void changeGreetingLeaveDuration(int greetingLeaveDuration) { | |||
| PersonInfo.LEAVE_DURATION = greetingLeaveDuration; | |||
| } | |||
| @Override | |||
| public long getGreetingDelay() { | |||
| return UNKNOWN_GREETING_DURATION; | |||
| } | |||
| @Override | |||
| public void setGreetingLeaveType(int greetingLeaveType, String greetingLeaveResp, int greetingLeaveDuration) { | |||
| public void setGreetingLeaveType(int greetingLeaveType) { | |||
| this.greetingLeaveType = greetingLeaveType; | |||
| this.greetingLeaveResp = greetingLeaveResp; | |||
| PersonInfo.LEAVE_DURATION = greetingLeaveDuration; | |||
| } | |||
| @Override | |||
| @@ -653,11 +657,15 @@ public class FaceChatGreetingQueueMode implements ChatMode { | |||
| public void greeting() { | |||
| int greetingType = greetingLeaveType; | |||
| String greetingResp = greetingLeaveResp; | |||
| for (PersonInfo value : mPersonsInScreen) { | |||
| // 是否有脸 | |||
| long time = System.currentTimeMillis(); | |||
| int type = value.hasDirectionByHD(greetingType); | |||
| Skill skill = ConfigManager.getInstance().getSkillByTag(value.tag); | |||
| String greetingResp = null; | |||
| if (skill != null) { | |||
| greetingResp = skill.leavingResp; | |||
| } | |||
| if (type == NEED_LEAVE_GREETING_CUSTOM && TextUtils.isEmpty(greetingResp)) { | |||
| continue; | |||
| } | |||
| @@ -668,7 +676,7 @@ public class FaceChatGreetingQueueMode implements ChatMode { | |||
| if (type != NEED_LEAVE_GREETING_CUSTOM) { | |||
| greetingResp = null; | |||
| } | |||
| sendGreeting(value, greetingResp); | |||
| sendGreeting(value, skill, greetingResp); | |||
| return; | |||
| } | |||
| } | |||
| @@ -676,6 +684,11 @@ public class FaceChatGreetingQueueMode implements ChatMode { | |||
| // 是否有脸 | |||
| long time = System.currentTimeMillis(); | |||
| int type = value.hasDirectionByHD(greetingType); | |||
| Skill skill = ConfigManager.getInstance().getSkillByTag(value.tag); | |||
| String greetingResp = null; | |||
| if (skill != null) { | |||
| greetingResp = skill.leavingResp; | |||
| } | |||
| if (type == NEED_LEAVE_GREETING_CUSTOM && TextUtils.isEmpty(greetingResp)) { | |||
| continue; | |||
| } | |||
| @@ -687,13 +700,13 @@ public class FaceChatGreetingQueueMode implements ChatMode { | |||
| if (type != NEED_LEAVE_GREETING_CUSTOM) { | |||
| greetingResp = null; | |||
| } | |||
| sendGreeting(value, greetingResp); | |||
| sendGreeting(value, skill, greetingResp); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| public void sendGreeting(PersonInfo message, String greetingLeaveResp) { | |||
| public void sendGreeting(PersonInfo message, Skill skill, String greetingLeaveResp) { | |||
| try { | |||
| JSONObject obj = new JSONObject(); | |||
| obj.put("type", "greeting"); | |||
| @@ -712,7 +725,6 @@ public class FaceChatGreetingQueueMode implements ChatMode { | |||
| person.put("lastInTime", message.last_in_time); // 进入屏幕的时间 | |||
| person.put("lastGreetTime", message.last_greet_time); // 打招呼的时间 | |||
| person.put("directionType", message.hd_position_type.ordinal()); // 运动的方向 | |||
| Skill skill = SkillDbHelper.getInstance().getByType(message.tag); | |||
| if (skill != null) { | |||
| person.put("skillStatus", skill.status); | |||
| if (TextUtils.isEmpty(greetingLeaveResp)) { | |||
| @@ -1150,13 +1150,18 @@ public class FaceChatMode implements ChatMode{ | |||
| } | |||
| @Override | |||
| public void changeGreetingLeaveDuration(int greetingLeaveDuration) { | |||
| } | |||
| @Override | |||
| public long getGreetingDelay() { | |||
| return 0; | |||
| } | |||
| @Override | |||
| public void setGreetingLeaveType(int greetingLeaveType, String greetingLeaveResp, int greetingLeaveDuration) { | |||
| public void setGreetingLeaveType(int greetingLeaveType) { | |||
| } | |||
| @@ -226,16 +226,22 @@ public class FaceManager implements ChatMode { | |||
| mFaceChatReasonMode.greetingReset(id, trackId); | |||
| } | |||
| @Override | |||
| public void changeGreetingDelay(long delay) { | |||
| mFaceChatReasonMode.changeGreetingDelay(delay); | |||
| } | |||
| @Override | |||
| public void changeGreetingLeaveDuration(int greetingLeaveDuration) { | |||
| mFaceChatReasonMode.changeGreetingLeaveDuration(greetingLeaveDuration); | |||
| } | |||
| public long getGreetingDelay() { | |||
| return mFaceChatReasonMode.getGreetingDelay(); | |||
| } | |||
| public void setGreetingLeaveType(int greetingLeaveType, String greetingLeaveResp, int greetingLeaveDuration) { | |||
| mFaceChatReasonMode.setGreetingLeaveType(greetingLeaveType, greetingLeaveResp, greetingLeaveDuration); | |||
| public void setGreetingLeaveType(int greetingLeaveType) { | |||
| mFaceChatReasonMode.setGreetingLeaveType(greetingLeaveType); | |||
| } | |||
| public List<PersonInfo> getPersonInScreen() { | |||
| @@ -109,13 +109,18 @@ public class FaceReceptionClearByTimeMode implements ChatMode { | |||
| } | |||
| @Override | |||
| public void changeGreetingLeaveDuration(int greetingLeaveDuration) { | |||
| } | |||
| @Override | |||
| public long getGreetingDelay() { | |||
| return 0; | |||
| } | |||
| @Override | |||
| public void setGreetingLeaveType(int greetingLeaveType, String greetingLeaveResp, int greetingLeaveDuration) { | |||
| public void setGreetingLeaveType(int greetingLeaveType) { | |||
| } | |||
| @@ -482,13 +482,18 @@ public class FaceReceptionMode implements ChatMode { | |||
| } | |||
| @Override | |||
| public void changeGreetingLeaveDuration(int greetingLeaveDuration) { | |||
| } | |||
| @Override | |||
| public long getGreetingDelay() { | |||
| return 0; | |||
| } | |||
| @Override | |||
| public void setGreetingLeaveType(int greetingLeaveType, String greetingLeaveResp, int greetingLeaveDuration) { | |||
| public void setGreetingLeaveType(int greetingLeaveType) { | |||
| } | |||
| @@ -155,12 +155,10 @@ public class DigiWebSocketServer extends WebSocketServer { | |||
| String trackId = obj.optString("trackId"); | |||
| FaceManager.getInstance().greetingReset(id, trackId); | |||
| } else if (type.equals("H5Setting")) { | |||
| int greetingLeaveType = obj.optInt("greetingLeaveType", 0); | |||
| String greetingLeaveResp = obj.optString("greetingLeaveResp", ""); | |||
| int greetingLeaveDuration = obj.optInt("greetingLeaveDuration", 15*1000); | |||
| int greetingUndeterminedDelay = obj.optInt("greetingUndeterminedDelay", 2000); | |||
| FaceManager.getInstance().setGreetingLeaveType(greetingLeaveType, greetingLeaveResp, greetingLeaveDuration); | |||
| FaceManager.getInstance().changeGreetingDelay(greetingUndeterminedDelay); | |||
| FaceManager.getInstance().changeGreetingLeaveDuration(greetingLeaveDuration); | |||
| } | |||
| } catch (JSONException e) { | |||
| throw new RuntimeException(e); | |||
| @@ -79,7 +79,7 @@ public class SettingDialog extends Dialog { | |||
| FaceManager.getInstance().changeGreetingDelay(delay); | |||
| } | |||
| if (duration != null) { | |||
| FaceManager.getInstance().setGreetingLeaveType(1, "您慢走", duration); | |||
| FaceManager.getInstance().changeGreetingLeaveDuration(duration); | |||
| } | |||
| Toast.makeText(getContext(), "修改成功", Toast.LENGTH_LONG).show(); | |||
| dismiss(); | |||