Skip to content

Commit

Permalink
- updated libraries
Browse files Browse the repository at this point in the history
- rearranged UI: made UI a little bit more friendly for one-hand operations
- added haptic feedback
  • Loading branch information
rudoyeugene committed Dec 14, 2024
1 parent c9eacb9 commit d67fa59
Show file tree
Hide file tree
Showing 6 changed files with 194 additions and 165 deletions.
8 changes: 6 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
applicationId "com.rudyii.pdnss"
minSdk 29
targetSdk 34
versionCode 176
versionName "1.7.6"
versionCode 180
versionName "1.8.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand All @@ -27,6 +27,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

buildFeatures {
compose true
}
}

dependencies {
Expand Down
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />

<application
android:name=".PrivateDnsSwitcherApplication"
Expand Down
122 changes: 65 additions & 57 deletions app/src/main/java/com/rudyii/pdnss/activities/ActivityMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import static com.rudyii.pdnss.common.PdnsModeType.OFF;
import static com.rudyii.pdnss.common.PdnsModeType.ON;
import static com.rudyii.pdnss.common.Utils.getConnectionType;
import static com.rudyii.pdnss.common.Utils.getPDNSState;
import static com.rudyii.pdnss.common.Utils.getPDNSStateInFloat;
import static com.rudyii.pdnss.common.Utils.getSettingsValue;
import static com.rudyii.pdnss.common.Utils.getSharedPrefs;
import static com.rudyii.pdnss.common.Utils.getSharedPrefsEditor;
Expand Down Expand Up @@ -39,6 +39,7 @@
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.VibrationEffect;
import android.provider.Settings;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
Expand All @@ -53,6 +54,7 @@
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import com.google.android.material.materialswitch.MaterialSwitch;
import com.google.android.material.slider.Slider;
import com.rudyii.pdnss.R;
import com.rudyii.pdnss.common.ConnectionType;

Expand All @@ -65,9 +67,6 @@ public class ActivityMain extends AppCompatActivity {
public static final int BACKGROUND_LOCATION_PERMISSION_REQUEST_CODE = 1133;
private BroadcastReceiver broadcastReceiver;
private TextView txtCopyrights;
private Button btnOn;
private Button btnOff;
private Button btnGoogle;
private Button btnSet;
private Button btnInstructions;
private Button btnPermissions;
Expand All @@ -77,6 +76,7 @@ public class ActivityMain extends AppCompatActivity {
private MaterialSwitch switchEnableForCellular;
private MaterialSwitch switchTrustWiFiMode;
private EditText editTxtDnsHost;
private Slider slider;
private boolean activityInitInProgress;

@Override
Expand Down Expand Up @@ -180,6 +180,7 @@ private void initCheckboxes() {
switchDisableForVpn = this.findViewById(R.id.switchDisableForVpn);
switchDisableForVpn.setOnCheckedChangeListener((compoundButton, checked) -> {
if (!activityInitInProgress) {
compoundButton.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
showDozeModeWarning();

SharedPreferences.Editor editor = getSharedPrefsEditor();
Expand All @@ -195,6 +196,7 @@ private void initCheckboxes() {
switchEnableForCellular = this.findViewById(R.id.switchEnableForCellular);
switchEnableForCellular.setOnCheckedChangeListener((compoundButton, checked) -> {
if (!activityInitInProgress) {
compoundButton.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
showDozeModeWarning();

SharedPreferences.Editor editor = getSharedPrefsEditor();
Expand All @@ -213,57 +215,62 @@ private void showDozeModeWarning() {
}

private void initButtons() {
if (btnOn == null) {
btnOn = this.findViewById(R.id.btnOn);

if (isWriteSecureSettingsPermissionGranted()) {
btnOn.setEnabled(getPDNSState() != ON);
} else {
btnOn.setEnabled(false);
}

btnOn.setOnClickListener(v -> {
if (isWriteSecureSettingsPermissionGranted()) {
updatePdnsModeSettings(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
updateLastPdnsState(ON);
updateControlButtonsStates();
refreshQsTile();
if (slider == null) {
slider = this.findViewById(R.id.slider);

slider.setEnabled(isWriteSecureSettingsPermissionGranted());
slider.setValue(getPDNSStateInFloat());

slider.setLabelFormatter(value -> {
switch (String.valueOf(slider.getValue())) {
case "1.0":
return getString(R.string.txt_dns_state_off);
case "2.0":
return getString(R.string.txt_dns_state_google);
case "3.0":
return getString(R.string.txt_dns_state_on);
default:
return getString(R.string.txt_dns_state_unknown);
}
});
}
if (btnOff == null) {
btnOff = this.findViewById(R.id.btnOff);

if (isWriteSecureSettingsPermissionGranted()) {
btnOff.setEnabled(getPDNSState() != OFF);
} else {
btnOff.setEnabled(false);
}
slider.addOnChangeListener((slider1, value, fromUser) ->
slider.performHapticFeedback(VibrationEffect.EFFECT_CLICK));

btnOff.setOnClickListener(v -> {
if (isWriteSecureSettingsPermissionGranted()) {
updatePdnsModeSettings(PRIVATE_DNS_MODE_OFF);
updateLastPdnsState(OFF);
updateControlButtonsStates();
refreshQsTile();
}
});
}
if (btnGoogle == null) {
btnGoogle = this.findViewById(R.id.btnGoogle);
slider.addOnSliderTouchListener(new Slider.OnSliderTouchListener() {
@Override
public void onStartTrackingTouch(@NonNull Slider slider) {

if (isWriteSecureSettingsPermissionGranted()) {
btnGoogle.setEnabled(getPDNSState() != GOOGLE);
} else {
btnGoogle.setEnabled(false);
}
}

btnGoogle.setOnClickListener(v -> {
if (isWriteSecureSettingsPermissionGranted()) {
updatePdnsModeSettings(PRIVATE_DNS_MODE_OPPORTUNISTIC);
updateLastPdnsState(GOOGLE);
updateControlButtonsStates();
refreshQsTile();
@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
switch (String.valueOf(slider.getValue())) {
case "1.0":
if (isWriteSecureSettingsPermissionGranted()) {
updatePdnsModeSettings(PRIVATE_DNS_MODE_OFF);
updateLastPdnsState(OFF);
updateControlButtonsStates();
refreshQsTile();
}
break;
case "2.0":
if (isWriteSecureSettingsPermissionGranted()) {
updatePdnsModeSettings(PRIVATE_DNS_MODE_OPPORTUNISTIC);
updateLastPdnsState(GOOGLE);
updateControlButtonsStates();
refreshQsTile();
}
break;
case "3.0":
if (isWriteSecureSettingsPermissionGranted()) {
updatePdnsModeSettings(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
updateLastPdnsState(ON);
updateControlButtonsStates();
refreshQsTile();
}
break;
}
}
});
}
Expand All @@ -273,6 +280,7 @@ private void initButtons() {
btnSet.setEnabled(isWriteSecureSettingsPermissionGranted());

btnSet.setOnClickListener(v -> {
v.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
if (isWriteSecureSettingsPermissionGranted()) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
Expand All @@ -289,6 +297,7 @@ private void initButtons() {
btnInstructions = this.findViewById(R.id.btnInstructions);

btnInstructions.setOnClickListener(v -> {
v.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(getString(R.string.txt_instructions_title));
alert.setMessage(R.string.txt_instructions);
Expand All @@ -305,21 +314,17 @@ private void initButtons() {
if (btnPermissions == null) {
btnPermissions = this.findViewById(R.id.btnPermissions);

btnPermissions.setEnabled(!isAllNeededLocationPermissionsGranted());
btnPermissions.setOnClickListener(v -> {
v.performHapticFeedback(VibrationEffect.EFFECT_TICK);
checkPermissions();
});
}
}

private void updateControlButtonsStates() {
if (btnOn != null) {
btnOn.setEnabled(getPDNSState() != ON);
}
if (btnOff != null) {
btnOff.setEnabled(getPDNSState() != OFF);
}
if (btnGoogle != null) {
btnGoogle.setEnabled(getPDNSState() != GOOGLE);
if (slider != null) {
slider.setValue(getPDNSStateInFloat());
}
}

Expand All @@ -334,6 +339,7 @@ public void initSensitiveControls() {

switchTrustWiFiMode.setOnCheckedChangeListener((compoundButton, checked) -> {
if (!activityInitInProgress) {
compoundButton.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
showDozeModeWarning();

SharedPreferences.Editor editor = getSharedPrefsEditor();
Expand All @@ -359,6 +365,7 @@ public void initSensitiveControls() {
switchTrustAp.setEnabled(ConnectionType.WIFI.equals(getConnectionType()) && sharedPrefForInit.getBoolean(getString(R.string.settings_name_trust_wifi), false));
switchTrustAp.setText(getString(R.string.txt_connected_ap_name, apName));
switchTrustAp.setOnClickListener(v -> {
v.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
showDozeModeWarning();

switchTrustAp.setText(getString(R.string.txt_connected_ap_name, apName));
Expand All @@ -380,6 +387,7 @@ public void initSensitiveControls() {


btnApList.setOnClickListener(v -> {
v.performHapticFeedback(VibrationEffect.EFFECT_CLICK);
Set<String> apsCopy = new HashSet<>(getSharedPrefs().getStringSet(getContext().getString(R.string.settings_name_trust_wifi_ap_set), Collections.emptySet()));
if (apsCopy.isEmpty()) {
showWarning(getString(R.string.txt_empty_ap_list));
Expand Down
14 changes: 14 additions & 0 deletions app/src/main/java/com/rudyii/pdnss/common/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,20 @@ public static PdnsModeType getPDNSState() {
}
}

public static float getPDNSStateInFloat() {
String pDNSState = getSettingsValue(SETTINGS_PRIVATE_DNS_MODE);
switch (pDNSState) {
case VALUE_PRIVATE_DNS_MODE_OFF_STRING:
return 1.0f;
case VALUE_PRIVATE_DNS_MODE_GOOGLE_STRING:
return 2.0f;
case VALUE_PRIVATE_DNS_MODE_ON_STRING:
return 3.0f;
default:
return 0.0f;
}
}

public static void showWarning(String warningMessage) {
Toast.makeText(getContext(), warningMessage,
Toast.LENGTH_LONG).show();
Expand Down
Loading

0 comments on commit d67fa59

Please sign in to comment.