1010import com .vernu .sms .activities .SMSFilterActivity ;
1111import android .os .Build ;
1212import android .os .Bundle ;
13+ import android .os .Handler ;
14+ import android .os .Looper ;
15+ import android .text .Editable ;
16+ import android .text .TextWatcher ;
1317import android .util .Log ;
1418import android .view .View ;
1519import android .widget .Button ;
@@ -56,6 +60,9 @@ public class MainActivity extends AppCompatActivity {
5660 private RadioGroup defaultSimSlotRadioGroup ;
5761 private static final int SCAN_QR_REQUEST_CODE = 49374 ;
5862 private static final int PERMISSION_REQUEST_CODE = 0 ;
63+ private static final long SMS_DELAY_SAVE_DEBOUNCE_MS = 3000L ;
64+ private final Handler smsDelaySaveHandler = new Handler (Looper .getMainLooper ());
65+ private Runnable smsDelaySaveRunnable ;
5966 private String deviceId = null ;
6067 private static final String TAG = "MainActivity" ;
6168
@@ -257,16 +264,26 @@ public void onFailure(Call<RegisterDeviceResponseDTO> call, Throwable t) {
257264 startActivity (filterIntent );
258265 });
259266
260- // SMS Send Delay setting
267+ // SMS Send Delay setting: save 3 seconds after user stops typing
261268 int currentDelay = SharedPreferenceHelper .getSharedPreferenceInt (
262- mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , 1 );
269+ mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , AppConstants . DEFAULT_SMS_SEND_DELAY_SECONDS );
263270 smsSendDelayEditText .setText (String .valueOf (currentDelay ));
264- smsSendDelayEditText .setOnFocusChangeListener ((v , hasFocus ) -> {
265- if (!hasFocus ) {
266- saveSendDelay ();
271+ smsDelaySaveRunnable = this ::saveSendDelay ;
272+ smsSendDelayEditText .addTextChangedListener (new TextWatcher () {
273+ @ Override
274+ public void beforeTextChanged (CharSequence s , int start , int count , int after ) {}
275+
276+ @ Override
277+ public void onTextChanged (CharSequence s , int start , int before , int count ) {}
278+
279+ @ Override
280+ public void afterTextChanged (Editable s ) {
281+ smsDelaySaveHandler .removeCallbacks (smsDelaySaveRunnable );
282+ smsDelaySaveHandler .postDelayed (smsDelaySaveRunnable , SMS_DELAY_SAVE_DEBOUNCE_MS );
267283 }
268284 });
269285 smsSendDelayEditText .setOnEditorActionListener ((v , actionId , event ) -> {
286+ smsDelaySaveHandler .removeCallbacks (smsDelaySaveRunnable );
270287 saveSendDelay ();
271288 return false ;
272289 });
@@ -275,25 +292,33 @@ public void onFailure(Call<RegisterDeviceResponseDTO> call, Throwable t) {
275292 private void saveSendDelay () {
276293 String text = smsSendDelayEditText .getText ().toString ().trim ();
277294 if (text .isEmpty ()) {
278- smsSendDelayEditText .setText ("1" );
279- SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , 1 );
295+ int defaultDelay = AppConstants .DEFAULT_SMS_SEND_DELAY_SECONDS ;
296+ smsSendDelayEditText .setText (String .valueOf (defaultDelay ));
297+ SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , defaultDelay );
298+ Snackbar .make (smsSendDelayEditText , "SMS send delay saved (" + defaultDelay + " sec)" , Snackbar .LENGTH_SHORT ).show ();
280299 return ;
281300 }
282301 try {
283302 int value = Integer .parseInt (text );
284303 if (value < 0 ) {
285304 value = 0 ;
286305 smsSendDelayEditText .setText ("0" );
287- Snackbar .make (smsSendDelayEditText , "Minimum delay is 0 seconds" , Snackbar .LENGTH_SHORT ).show ();
306+ SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , 0 );
307+ Snackbar .make (smsSendDelayEditText , "Minimum delay is 0 seconds. Saved." , Snackbar .LENGTH_SHORT ).show ();
288308 } else if (value > 3600 ) {
289309 value = 3600 ;
290310 smsSendDelayEditText .setText ("3600" );
291- Snackbar .make (smsSendDelayEditText , "Maximum delay is 3600 seconds" , Snackbar .LENGTH_SHORT ).show ();
311+ SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , 3600 );
312+ Snackbar .make (smsSendDelayEditText , "Maximum delay is 3600 seconds. Saved." , Snackbar .LENGTH_SHORT ).show ();
313+ } else {
314+ SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , value );
315+ Snackbar .make (smsSendDelayEditText , "SMS send delay saved (" + value + " sec)" , Snackbar .LENGTH_SHORT ).show ();
292316 }
293- SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , value );
294317 } catch (NumberFormatException e ) {
295- smsSendDelayEditText .setText ("1" );
296- SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , 1 );
318+ int defaultDelay = AppConstants .DEFAULT_SMS_SEND_DELAY_SECONDS ;
319+ smsSendDelayEditText .setText (String .valueOf (defaultDelay ));
320+ SharedPreferenceHelper .setSharedPreferenceInt (mContext , AppConstants .SHARED_PREFS_SMS_SEND_DELAY_SECONDS_KEY , defaultDelay );
321+ Snackbar .make (smsSendDelayEditText , "Invalid value. Reset to " + defaultDelay + " sec." , Snackbar .LENGTH_SHORT ).show ();
297322 }
298323 }
299324
0 commit comments