10
10
import static com .rudyii .pdnss .common .PdnsModeType .OFF ;
11
11
import static com .rudyii .pdnss .common .PdnsModeType .ON ;
12
12
import static com .rudyii .pdnss .common .Utils .getConnectionType ;
13
- import static com .rudyii .pdnss .common .Utils .getPDNSState ;
13
+ import static com .rudyii .pdnss .common .Utils .getPDNSStateInFloat ;
14
14
import static com .rudyii .pdnss .common .Utils .getSettingsValue ;
15
15
import static com .rudyii .pdnss .common .Utils .getSharedPrefs ;
16
16
import static com .rudyii .pdnss .common .Utils .getSharedPrefsEditor ;
39
39
import android .os .Build ;
40
40
import android .os .Bundle ;
41
41
import android .os .PowerManager ;
42
+ import android .os .VibrationEffect ;
42
43
import android .provider .Settings ;
43
44
import android .view .View ;
44
45
import android .view .inputmethod .InputMethodManager ;
53
54
import androidx .localbroadcastmanager .content .LocalBroadcastManager ;
54
55
55
56
import com .google .android .material .materialswitch .MaterialSwitch ;
57
+ import com .google .android .material .slider .Slider ;
56
58
import com .rudyii .pdnss .R ;
57
59
import com .rudyii .pdnss .common .ConnectionType ;
58
60
@@ -65,9 +67,6 @@ public class ActivityMain extends AppCompatActivity {
65
67
public static final int BACKGROUND_LOCATION_PERMISSION_REQUEST_CODE = 1133 ;
66
68
private BroadcastReceiver broadcastReceiver ;
67
69
private TextView txtCopyrights ;
68
- private Button btnOn ;
69
- private Button btnOff ;
70
- private Button btnGoogle ;
71
70
private Button btnSet ;
72
71
private Button btnInstructions ;
73
72
private Button btnPermissions ;
@@ -77,6 +76,7 @@ public class ActivityMain extends AppCompatActivity {
77
76
private MaterialSwitch switchEnableForCellular ;
78
77
private MaterialSwitch switchTrustWiFiMode ;
79
78
private EditText editTxtDnsHost ;
79
+ private Slider slider ;
80
80
private boolean activityInitInProgress ;
81
81
82
82
@ Override
@@ -180,6 +180,7 @@ private void initCheckboxes() {
180
180
switchDisableForVpn = this .findViewById (R .id .switchDisableForVpn );
181
181
switchDisableForVpn .setOnCheckedChangeListener ((compoundButton , checked ) -> {
182
182
if (!activityInitInProgress ) {
183
+ compoundButton .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
183
184
showDozeModeWarning ();
184
185
185
186
SharedPreferences .Editor editor = getSharedPrefsEditor ();
@@ -195,6 +196,7 @@ private void initCheckboxes() {
195
196
switchEnableForCellular = this .findViewById (R .id .switchEnableForCellular );
196
197
switchEnableForCellular .setOnCheckedChangeListener ((compoundButton , checked ) -> {
197
198
if (!activityInitInProgress ) {
199
+ compoundButton .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
198
200
showDozeModeWarning ();
199
201
200
202
SharedPreferences .Editor editor = getSharedPrefsEditor ();
@@ -213,57 +215,62 @@ private void showDozeModeWarning() {
213
215
}
214
216
215
217
private void initButtons () {
216
- if (btnOn == null ) {
217
- btnOn = this .findViewById (R .id .btnOn );
218
-
219
- if (isWriteSecureSettingsPermissionGranted ()) {
220
- btnOn .setEnabled (getPDNSState () != ON );
221
- } else {
222
- btnOn .setEnabled (false );
223
- }
224
-
225
- btnOn .setOnClickListener (v -> {
226
- if (isWriteSecureSettingsPermissionGranted ()) {
227
- updatePdnsModeSettings (PRIVATE_DNS_MODE_PROVIDER_HOSTNAME );
228
- updateLastPdnsState (ON );
229
- updateControlButtonsStates ();
230
- refreshQsTile ();
218
+ if (slider == null ) {
219
+ slider = this .findViewById (R .id .slider );
220
+
221
+ slider .setEnabled (isWriteSecureSettingsPermissionGranted ());
222
+ slider .setValue (getPDNSStateInFloat ());
223
+
224
+ slider .setLabelFormatter (value -> {
225
+ switch (String .valueOf (slider .getValue ())) {
226
+ case "1.0" :
227
+ return getString (R .string .txt_dns_state_off );
228
+ case "2.0" :
229
+ return getString (R .string .txt_dns_state_google );
230
+ case "3.0" :
231
+ return getString (R .string .txt_dns_state_on );
232
+ default :
233
+ return getString (R .string .txt_dns_state_unknown );
231
234
}
232
235
});
233
- }
234
- if (btnOff == null ) {
235
- btnOff = this .findViewById (R .id .btnOff );
236
236
237
- if (isWriteSecureSettingsPermissionGranted ()) {
238
- btnOff .setEnabled (getPDNSState () != OFF );
239
- } else {
240
- btnOff .setEnabled (false );
241
- }
237
+ slider .addOnChangeListener ((slider1 , value , fromUser ) ->
238
+ slider .performHapticFeedback (VibrationEffect .EFFECT_CLICK ));
242
239
243
- btnOff .setOnClickListener (v -> {
244
- if (isWriteSecureSettingsPermissionGranted ()) {
245
- updatePdnsModeSettings (PRIVATE_DNS_MODE_OFF );
246
- updateLastPdnsState (OFF );
247
- updateControlButtonsStates ();
248
- refreshQsTile ();
249
- }
250
- });
251
- }
252
- if (btnGoogle == null ) {
253
- btnGoogle = this .findViewById (R .id .btnGoogle );
240
+ slider .addOnSliderTouchListener (new Slider .OnSliderTouchListener () {
241
+ @ Override
242
+ public void onStartTrackingTouch (@ NonNull Slider slider ) {
254
243
255
- if (isWriteSecureSettingsPermissionGranted ()) {
256
- btnGoogle .setEnabled (getPDNSState () != GOOGLE );
257
- } else {
258
- btnGoogle .setEnabled (false );
259
- }
244
+ }
260
245
261
- btnGoogle .setOnClickListener (v -> {
262
- if (isWriteSecureSettingsPermissionGranted ()) {
263
- updatePdnsModeSettings (PRIVATE_DNS_MODE_OPPORTUNISTIC );
264
- updateLastPdnsState (GOOGLE );
265
- updateControlButtonsStates ();
266
- refreshQsTile ();
246
+ @ Override
247
+ public void onStopTrackingTouch (@ NonNull Slider slider ) {
248
+ switch (String .valueOf (slider .getValue ())) {
249
+ case "1.0" :
250
+ if (isWriteSecureSettingsPermissionGranted ()) {
251
+ updatePdnsModeSettings (PRIVATE_DNS_MODE_OFF );
252
+ updateLastPdnsState (OFF );
253
+ updateControlButtonsStates ();
254
+ refreshQsTile ();
255
+ }
256
+ break ;
257
+ case "2.0" :
258
+ if (isWriteSecureSettingsPermissionGranted ()) {
259
+ updatePdnsModeSettings (PRIVATE_DNS_MODE_OPPORTUNISTIC );
260
+ updateLastPdnsState (GOOGLE );
261
+ updateControlButtonsStates ();
262
+ refreshQsTile ();
263
+ }
264
+ break ;
265
+ case "3.0" :
266
+ if (isWriteSecureSettingsPermissionGranted ()) {
267
+ updatePdnsModeSettings (PRIVATE_DNS_MODE_PROVIDER_HOSTNAME );
268
+ updateLastPdnsState (ON );
269
+ updateControlButtonsStates ();
270
+ refreshQsTile ();
271
+ }
272
+ break ;
273
+ }
267
274
}
268
275
});
269
276
}
@@ -273,6 +280,7 @@ private void initButtons() {
273
280
btnSet .setEnabled (isWriteSecureSettingsPermissionGranted ());
274
281
275
282
btnSet .setOnClickListener (v -> {
283
+ v .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
276
284
if (isWriteSecureSettingsPermissionGranted ()) {
277
285
InputMethodManager imm = (InputMethodManager ) getSystemService (Context .INPUT_METHOD_SERVICE );
278
286
imm .hideSoftInputFromWindow (v .getWindowToken (), 0 );
@@ -289,6 +297,7 @@ private void initButtons() {
289
297
btnInstructions = this .findViewById (R .id .btnInstructions );
290
298
291
299
btnInstructions .setOnClickListener (v -> {
300
+ v .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
292
301
AlertDialog .Builder alert = new AlertDialog .Builder (this );
293
302
alert .setTitle (getString (R .string .txt_instructions_title ));
294
303
alert .setMessage (R .string .txt_instructions );
@@ -305,21 +314,17 @@ private void initButtons() {
305
314
if (btnPermissions == null ) {
306
315
btnPermissions = this .findViewById (R .id .btnPermissions );
307
316
317
+ btnPermissions .setEnabled (!isAllNeededLocationPermissionsGranted ());
308
318
btnPermissions .setOnClickListener (v -> {
319
+ v .performHapticFeedback (VibrationEffect .EFFECT_TICK );
309
320
checkPermissions ();
310
321
});
311
322
}
312
323
}
313
324
314
325
private void updateControlButtonsStates () {
315
- if (btnOn != null ) {
316
- btnOn .setEnabled (getPDNSState () != ON );
317
- }
318
- if (btnOff != null ) {
319
- btnOff .setEnabled (getPDNSState () != OFF );
320
- }
321
- if (btnGoogle != null ) {
322
- btnGoogle .setEnabled (getPDNSState () != GOOGLE );
326
+ if (slider != null ) {
327
+ slider .setValue (getPDNSStateInFloat ());
323
328
}
324
329
}
325
330
@@ -334,6 +339,7 @@ public void initSensitiveControls() {
334
339
335
340
switchTrustWiFiMode .setOnCheckedChangeListener ((compoundButton , checked ) -> {
336
341
if (!activityInitInProgress ) {
342
+ compoundButton .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
337
343
showDozeModeWarning ();
338
344
339
345
SharedPreferences .Editor editor = getSharedPrefsEditor ();
@@ -359,6 +365,7 @@ public void initSensitiveControls() {
359
365
switchTrustAp .setEnabled (ConnectionType .WIFI .equals (getConnectionType ()) && sharedPrefForInit .getBoolean (getString (R .string .settings_name_trust_wifi ), false ));
360
366
switchTrustAp .setText (getString (R .string .txt_connected_ap_name , apName ));
361
367
switchTrustAp .setOnClickListener (v -> {
368
+ v .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
362
369
showDozeModeWarning ();
363
370
364
371
switchTrustAp .setText (getString (R .string .txt_connected_ap_name , apName ));
@@ -380,6 +387,7 @@ public void initSensitiveControls() {
380
387
381
388
382
389
btnApList .setOnClickListener (v -> {
390
+ v .performHapticFeedback (VibrationEffect .EFFECT_CLICK );
383
391
Set <String > apsCopy = new HashSet <>(getSharedPrefs ().getStringSet (getContext ().getString (R .string .settings_name_trust_wifi_ap_set ), Collections .emptySet ()));
384
392
if (apsCopy .isEmpty ()) {
385
393
showWarning (getString (R .string .txt_empty_ap_list ));
0 commit comments