diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java
index 3395db70fd..edd6cc95c4 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java
@@ -18,6 +18,7 @@ import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.utils.UiThreadHandler;
+import com.mogo.utils.logger.Logger;
/**
* @author congtaowang
@@ -27,8 +28,10 @@ import com.mogo.utils.UiThreadHandler;
*/
public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsPresenter > implements ExtensionsView {
+ private static final String TAG = "ExtensionsFragment";
+
private JSurfaceView mVoiceIcon;
- private View mVoiceMsg;
+ private TextView mVoiceMsg;
private TextView mTime;
private TextView mDate;
@@ -141,4 +144,12 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP
mMsgContainer.setVisibility( hasMsg ? View.VISIBLE : View.GONE );
mMsgCounter.setText( amount > 99 ? getString( R.string.module_ext_str_dots ) : String.valueOf( amount ) );
}
+
+ @Override
+ public void renderAITipWords( String word ) {
+ if ( !TextUtils.isEmpty( word ) ) {
+ Logger.d( TAG, "current word: %s", word );
+ mVoiceMsg.setText( word );
+ }
+ }
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java
index 17572c38e0..b24bcea2b1 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsPresenter.java
@@ -4,6 +4,9 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
@@ -19,7 +22,16 @@ import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoMsgCenterListener;
import com.mogo.utils.logger.Logger;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Calendar;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import java.util.Random;
+import java.util.Set;
/**
@@ -36,6 +48,31 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements
private WeatherModel mWeatherModel;
+ public static final int MSG_SWITCH_AI_TIP_WORDS = 4000;
+ public static final long INTERVAL_TIME = 8_000L;
+ private String[] mAITipWords;
+ private int mCurrentIndex = 0;
+ private Handler mHandler = new Handler( Looper.getMainLooper() ) {
+ @Override
+ public void handleMessage( Message msg ) {
+ super.handleMessage( msg );
+ if ( msg.what == MSG_SWITCH_AI_TIP_WORDS ) {
+ if ( mView != null ) {
+ if ( mCurrentIndex < mAITipWords.length ) {
+ mView.renderAITipWords( mAITipWords[mCurrentIndex++] );
+ } else {
+ mCurrentIndex = 0;
+ mHasTipWords = generateTipWordsSequence();
+ }
+ }
+ if ( mHasTipWords ) {
+ mHandler.sendEmptyMessageDelayed( MSG_SWITCH_AI_TIP_WORDS, INTERVAL_TIME );
+ }
+ }
+ }
+ };
+ private boolean mHasTipWords = false;
+
/**
* 接收时间变化的广播
*/
@@ -52,10 +89,30 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements
private IMogoMsgCenter mMsgCenter;
+ private boolean generateTipWordsSequence() {
+ if ( mAITipWords != null && mAITipWords.length > 0 ) {
+ Random random = new Random( System.currentTimeMillis() );
+ int loop = mAITipWords.length / 2;
+ int bound = mAITipWords.length;
+ for ( int i = 0; i < loop; i++ ) {
+ int target = random.nextInt( bound );
+ int sweepTarget = random.nextInt( bound );
+ if ( target != sweepTarget ) {
+ String targetStr = mAITipWords[target];
+ mAITipWords[target] = mAITipWords[sweepTarget];
+ mAITipWords[sweepTarget] = targetStr;
+ }
+ }
+ Logger.d( TAG, "next generate sequence: " + mAITipWords );
+ return true;
+ }
+ return false;
+ }
public ExtensionsPresenter( ExtensionsView view ) {
super( view );
mWeeks = getContext().getResources().getStringArray( R.array.module_ext_str_arr_week );
+ mAITipWords = getContext().getResources().getStringArray( R.array.module_ext_str_arr_ai_tips );
mWeatherModel = new WeatherModel( getContext() );
}
@@ -68,6 +125,7 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements
refreshTimeAndDate();
mMsgCenter = ( IMogoMsgCenter ) ARouter.getInstance().build( MogoServicePaths.PATH_MSG_CENTER ).navigation();
mMsgCenter.registerMsgCenterListener( this );
+ mHasTipWords = generateTipWordsSequence();
}
/**
@@ -115,6 +173,22 @@ public class ExtensionsPresenter extends Presenter< ExtensionsView > implements
}
}
+ @Override
+ public void onResume( @NonNull LifecycleOwner owner ) {
+ super.onResume( owner );
+ if ( mHasTipWords ) {
+ mHandler.sendEmptyMessageDelayed( MSG_SWITCH_AI_TIP_WORDS, INTERVAL_TIME );
+ }
+ }
+
+ @Override
+ public void onPause( @NonNull LifecycleOwner owner ) {
+ super.onPause( owner );
+ if ( mHasTipWords ) {
+ mHandler.removeMessages( MSG_SWITCH_AI_TIP_WORDS );
+ }
+ }
+
@Override
public void onDestroy( @NonNull LifecycleOwner owner ) {
super.onDestroy( owner );
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java
index 3ab09a0b41..91f3d5e19c 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsView.java
@@ -35,4 +35,11 @@ public interface ExtensionsView extends IView {
* @param amount 消息数量
*/
void renderMsgInfo( boolean hasMsg, int amount );
+
+ /**
+ * 更换小智语音提示词
+ *
+ * @param word
+ */
+ void renderAITipWords( String word );
}
diff --git a/modules/mogo-module-extensions/src/main/res/values/strings.xml b/modules/mogo-module-extensions/src/main/res/values/strings.xml
index 784f01f88e..1d68dcdcab 100644
--- a/modules/mogo-module-extensions/src/main/res/values/strings.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/strings.xml
@@ -20,4 +20,26 @@
退出导航
继续导航
退出全览
+
+
+ - 你好小智,播放音乐
+ - 你好小智,我要听音乐
+ - 你好小智,播放赵磊的歌
+ - 你好小智,我想听成都
+ - 你好小智,打开导航
+ - 你好小智,我要去拉萨
+ - 你好小智,我要去加油站
+ - 你好小智,导航去西单商场
+ - 你好小智,打开行车记录仪
+ - 你好小智,打开收音机
+ - 你好小智,调频到97.4
+ - 你好小智,调频到103.9
+ - 你好小智,今天天气怎么样
+ - 你好小智,北京明天天气怎么样
+ - 你好小智,打开车聊聊
+ - 你好小智,我想聊天
+ - 你好小智,中关村堵不堵
+ - 你好小智,打开探路
+ - 你好小智,附近路况
+