1717import android .text .Spanned ;
1818import android .text .method .ScrollingMovementMethod ;
1919import android .text .style .TabStopSpan ;
20+ import android .util .Log ;
2021import android .util .TypedValue ;
2122import android .view .View ;
2223import android .view .WindowManager ;
@@ -34,7 +35,6 @@ public class MyChrono implements BigTextView.GetCenter, MyTimeKeeper {
3435 TextView angleView ;
3536 public long baseTime ;
3637 public long pauseTime ;
37- int vibrateAfterCountDown = 100 ;
3838 public boolean paused = false ;
3939 public boolean active = false ;
4040 boolean quiet = false ;
@@ -46,8 +46,7 @@ public class MyChrono implements BigTextView.GetCenter, MyTimeKeeper {
4646 public int precision = 100 ;
4747 private TextToSpeech tts = null ;
4848 private boolean ttsMode ;
49- int STREAM = AudioManager .STREAM_ALARM ;;
50- private boolean boostAudio = false ;
49+ static final int STREAM = AudioManager .STREAM_ALARM ;;
5150 private static final int GAIN = 2000 ;
5251 HashMap <String ,String > ttsParams = new HashMap <String ,String >();
5352 private LoudnessEnhancer loudnessEnhancer = null ;
@@ -57,6 +56,7 @@ public class MyChrono implements BigTextView.GetCenter, MyTimeKeeper {
5756 private double lastAngle = 0 ;
5857 private AudioTrack shortTone ;
5958 private AudioTrack longTone ;
59+ private long lastAnnouncement = 0 ;
6060
6161 @ SuppressLint ("NewApi" )
6262 public MyChrono (Activity context , SharedPreferences options , BigTextView mainView , TextView fractionView , View mainContainer ) {
@@ -82,51 +82,26 @@ public long getTime() {
8282 }
8383
8484 private void announce (long t ) {
85- // long vibrate = Options.getVibration(options);
86- if (/*(quiet && vibrate == 0) || */ !active || paused )
85+ if (!active || paused || quiet || t < (lastAnnouncement +10 )/10 *10 )
8786 return ;
88- if (t < -3000 || t >= 1000 ) {
89- lastAnnounced = floorDiv (t , 1000 )*1000 ;
90- }
91- else if (t < 0 ) {
92- if (tts != null && ttsMode ) {
93- String msg ;
94- if (-1000 <= t ) {
95- msg = "1" ;
96- }
97- else if (-2000 <= t ) {
98- msg = "2" ;
99- }
100- else {
101- msg = "3" ;
102- }
103- StopWatch .debug ("say: " +msg );
104- tts .speak (msg ,TextToSpeech .QUEUE_FLUSH , ttsParams );
105- }
106- else if (!quiet ) {
107- shortTone .stop ();
108- shortTone .reloadStaticData ();
109- shortTone .play ();
110- }
111- lastAnnounced = floorDiv (t , 1000 )*1000 ;
87+
88+
89+ if (tts != null && ttsMode ) {
90+ String msg = "" + t ;
91+ StopWatch .debug ("say: " +msg );
92+ tts .speak (msg ,TextToSpeech .QUEUE_FLUSH , ttsParams );
11293 }
113- else if (t >= 0 ) {
114- if (!quiet ) {
115- longTone .stop ();
116- longTone .reloadStaticData ();
117- longTone .play ();
118- }
119- ShowTime .vibrate (context , vibrateAfterCountDown );
120- lastAnnounced = 0 ;
94+ else if (!quiet ) {
95+ shortTone .stop ();
96+ shortTone .reloadStaticData ();
97+ shortTone .play ();
12198 }
99+ lastAnnouncement = t ;
122100 }
123101
124102 public void updateViews () {
125103 long t = getTime ();
126- if (lastAnnounced < 0 && lastAnnounced + 1000 <= t ) {
127- announce (t +10 );
128- }
129-
104+ announce (t /1000 );
130105 mainView .setText (formatTime (t ,mainView .getHeight () > mainView .getWidth ()));
131106 }
132107
@@ -195,6 +170,7 @@ else if (precision == 1)
195170
196171 public void reset () {
197172 active = false ;
173+ lastAnnouncement = 0 ;
198174 stopUpdating ();
199175 }
200176
@@ -240,11 +216,6 @@ else if (!active) {
240216 }
241217
242218 public void setAudio (String soundMode ) {
243- boostAudio = Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP && options .getBoolean (Options .PREF_BOOST , false );
244- STREAM = Options .getStream (options );
245-
246- vibrateAfterCountDown = options .getBoolean (Options .PREF_VIBRATE_AFTER_COUNTDOWN , true ) ? (int )LONG_TONE_LENGTH /2 : 0 ;
247-
248219 if (soundMode .equals ("none" )) {
249220 quiet = true ;
250221 ttsMode = false ;
@@ -273,23 +244,6 @@ public void setAudio(String soundMode) {
273244 if (options .getBoolean (Options .PREF_BOOST , false ))
274245 am .setStreamVolume (STREAM , am .getStreamMaxVolume (STREAM ), 0 );
275246
276- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP && boostAudio ) {
277- try {
278- StopWatch .debug ("trying to boost" );
279- loudnessEnhancer = new LoudnessEnhancer (sessionId );
280- loudnessEnhancer .setTargetGain (GAIN );
281- loudnessEnhancer .setEnabled (true );
282- if (!loudnessEnhancer .getEnabled ()) {
283- loudnessEnhancer = null ;
284- }
285- else {
286- StopWatch .debug ("loudness success" );
287- }
288- }
289- catch (Exception e ) {
290- }
291- }
292-
293247 if (soundMode .equals ("voice" )) {
294248 ttsMode = true ;
295249 ttsParams .put (TextToSpeech .Engine .KEY_PARAM_STREAM , String .valueOf (STREAM ));
@@ -317,7 +271,7 @@ public void restore() {
317271 pauseTime = options .getLong (Options .PREF_PAUSED_TIME , 0 );
318272 active = options .getBoolean (Options .PREF_ACTIVE , false );
319273 paused = options .getBoolean (Options .PREF_PAUSED , false );
320- lastAnnounced = options .getLong (Options .PREF_LAST_ANNOUNCED , 0 );
274+ lastAnnouncement = options .getLong (Options .PREF_LAST_ANNOUNCED , 0 );
321275 setAudio (options .getString (Options .PREF_SOUND , "voice" ));
322276
323277 precision = Integer .parseInt (options .getString (Options .PREF_PRECISION , "100" ));
@@ -364,7 +318,7 @@ public void save() {
364318 ed .putLong (Options .PREF_PAUSED_TIME , pauseTime );
365319 ed .putBoolean (Options .PREF_ACTIVE , active );
366320 ed .putBoolean (Options .PREF_PAUSED , paused );
367- ed .putLong (Options .PREF_LAST_ANNOUNCED , lastAnnounced );
321+ ed .putLong (Options .PREF_LAST_ANNOUNCED , lastAnnouncement );
368322 ed .putLong (Options .PREF_BOOT_TIME , getBootTime ());
369323
370324 apply (ed );
@@ -391,7 +345,7 @@ public void run() {
391345 }
392346 }, 0 , precision <=10 ? precision : 50 ); // avoid off-by-1 errors at lower precisions, at cost of some battery life
393347 }
394- if (options .getBoolean (Options .PREF_SCREEN_ON , false ))
348+ if (options .getBoolean (Options .PREF_SCREEN_ON , true ))
395349 ((Activity )context ).getWindow ().addFlags (WindowManager .LayoutParams .FLAG_KEEP_SCREEN_ON );
396350 else
397351 ((Activity )context ).getWindow ().clearFlags (WindowManager .LayoutParams .FLAG_KEEP_SCREEN_ON );
@@ -469,6 +423,8 @@ public float getCenter() {
469423
470424 public void setAngle (double angle ) {
471425 this .lastAngle = angle ;
472- setAngleView (String .format ("%.1f\u00B0 " ,lastAngle ));
426+ String f = String .format ("%.1f\u00B0 " ,lastAngle );
427+ if (!f .equals (angleView .getText ()))
428+ setAngleView (f );
473429 }
474430}
0 commit comments