package com.PP.LunarTabsAndroid.APIs; import android.content.Context; import android.media.AudioManager; import com.PP.LunarTabsAndroid.Activities.MainActivity; import com.PP.LunarTabsAndroid.UI.DataModel; import com.root.gast.speech.activation.WordActivator; public class WordActivatorAPI { //Word Activator object and parent protected MainActivity parent; protected volatile WordActivator wa = null; //on stop/resume state protected volatile boolean onStop_state = false; //singleton protected WordActivatorAPI(){} protected static WordActivatorAPI instance=null; public static WordActivatorAPI getInstance() { if(instance==null) { instance = new WordActivatorAPI(); } return instance; } /** * Init * @param targetWords Words to track * @param parent Main Activity parent (that implements speech listener) */ public void init(String[] targetWords, MainActivity parent) { //do only once if(wa==null) { //preempt beeping noise of speech recognizer by turning it off AudioManager amanager=(AudioManager)parent.getApplicationContext().getSystemService(Context.AUDIO_SERVICE); amanager.setStreamMute(AudioManager.STREAM_SYSTEM, true); } //store parent this.parent = parent; //initialize word activator boolean needGC = (wa!=null); wa = new WordActivator(parent,parent,targetWords); if(needGC) { System.gc(); } } /** * Wrapper for start */ public void start() { if(parent!=null) { parent.runOnUiThread(new Runnable() { @Override public void run() { if(wa!=null) { wa.detectActivation(); } } }); } } /** * Wrapper for stoping listening */ public void stopListening() { if(parent!=null) { parent.runOnUiThread(new Runnable() { @Override public void run() { if(wa!=null) { wa.stopListening(); } } }); } } /** * Disable for a period of time (used for speech) */ public void disableFor(final int ms_wait) { //make mechanism inactive and //make reactive after wait Thread t = new Thread() { @Override public void run() { try { WordActivatorAPI.getInstance().stopListening(); Thread.sleep(ms_wait); if(DataModel.getInstance().isVoiceActionsEnabled()) { WordActivatorAPI.getInstance().start(); } } catch(Exception e) { e.printStackTrace(); } } }; t.start(); } public void onStop() { onStop_state = DataModel.getInstance().isVoiceActionsEnabled(); if(onStop_state) { DataModel.getInstance().setVoiceActionsEnabled(false); WordActivatorAPI.getInstance().stopListening(); } } public void onResume() { if(onStop_state) { //start voice actions DataModel.getInstance().setVoiceActionsEnabled(true); WordActivatorAPI.getInstance().start(); } } }