diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 481bb434..f1b42451 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -18,4 +18,4 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 43e5eb32..2c34144d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,86 +1,86 @@
+ xmlns:tools="http://schemas.android.com/tools">
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/app/src/main/java/org/bepass/oblivion/BugActivity.java b/app/src/main/java/org/bepass/oblivion/BugActivity.java
index 4322902b..cb9cf637 100644
--- a/app/src/main/java/org/bepass/oblivion/BugActivity.java
+++ b/app/src/main/java/org/bepass/oblivion/BugActivity.java
@@ -1,7 +1,5 @@
package org.bepass.oblivion;
-import androidx.appcompat.app.AppCompatActivity;
-
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -9,6 +7,8 @@
import android.widget.ScrollView;
import android.widget.TextView;
+import androidx.appcompat.app.AppCompatActivity;
+
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
@@ -16,11 +16,11 @@
public class BugActivity extends AppCompatActivity {
+ private final Handler handler = new Handler(Looper.getMainLooper());
private ImageView back;
private TextView logs;
private ScrollView logScrollView;
private boolean isUserScrollingUp = false;
- private Handler handler = new Handler(Looper.getMainLooper());
private Runnable logUpdater;
@Override
@@ -86,4 +86,4 @@ private void readLogsFromFile() {
}
}).start();
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/bepass/oblivion/ConnectionState.java b/app/src/main/java/org/bepass/oblivion/ConnectionState.java
index a3861845..db46e661 100644
--- a/app/src/main/java/org/bepass/oblivion/ConnectionState.java
+++ b/app/src/main/java/org/bepass/oblivion/ConnectionState.java
@@ -1,7 +1,5 @@
package org.bepass.oblivion;
public enum ConnectionState {
- CONNECTING,
- CONNECTED,
- DISCONNECTED
+ CONNECTING, CONNECTED, DISCONNECTED
}
diff --git a/app/src/main/java/org/bepass/oblivion/EditSheet.java b/app/src/main/java/org/bepass/oblivion/EditSheet.java
index ba4d9107..3029eaca 100644
--- a/app/src/main/java/org/bepass/oblivion/EditSheet.java
+++ b/app/src/main/java/org/bepass/oblivion/EditSheet.java
@@ -6,7 +6,6 @@
import android.widget.TextView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
-import org.bepass.oblivion.R;
public class EditSheet {
diff --git a/app/src/main/java/org/bepass/oblivion/FileManager.java b/app/src/main/java/org/bepass/oblivion/FileManager.java
index 31a3fc10..938d1717 100644
--- a/app/src/main/java/org/bepass/oblivion/FileManager.java
+++ b/app/src/main/java/org/bepass/oblivion/FileManager.java
@@ -2,13 +2,11 @@
import android.content.Context;
import android.content.SharedPreferences;
-import android.util.Log;
public class FileManager {
- private static FileManager instance;
- private SharedPreferences sharedPreferences;
-
public static String currentLog;
+ private static FileManager instance;
+ private final SharedPreferences sharedPreferences;
// Private constructor for singleton pattern
private FileManager(Context context) {
@@ -60,6 +58,7 @@ public String getString(String name, String defaultValue) {
public boolean getBoolean(String name) {
return sharedPreferences.getBoolean(name, false);
}
+
public boolean getBoolean(String name, boolean defaultValue) {
return sharedPreferences.getBoolean(name, defaultValue);
}
diff --git a/app/src/main/java/org/bepass/oblivion/InfoActivity.java b/app/src/main/java/org/bepass/oblivion/InfoActivity.java
index a625d6e3..c0daaaed 100644
--- a/app/src/main/java/org/bepass/oblivion/InfoActivity.java
+++ b/app/src/main/java/org/bepass/oblivion/InfoActivity.java
@@ -1,14 +1,12 @@
package org.bepass.oblivion;
-import androidx.appcompat.app.AppCompatActivity;
-
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.RelativeLayout;
-import org.bepass.oblivion.R;
+import androidx.appcompat.app.AppCompatActivity;
public class InfoActivity extends AppCompatActivity {
@@ -37,4 +35,4 @@ protected void openURL(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/bepass/oblivion/MainActivity.java b/app/src/main/java/org/bepass/oblivion/MainActivity.java
index d73d6795..736d2c61 100644
--- a/app/src/main/java/org/bepass/oblivion/MainActivity.java
+++ b/app/src/main/java/org/bepass/oblivion/MainActivity.java
@@ -23,25 +23,19 @@
public class MainActivity extends AppCompatActivity {
private static final String ConnectionStateObserverKey = "mainActivity";
- private ActivityResultLauncher pushNotificationPermissionLauncher;
- private ActivityResultLauncher vpnPermissionLauncher;
-
- private Messenger serviceMessenger;
- private boolean isBound;
-
-
// Views
ImageView infoIcon, bugIcon, settingsIcon;
TouchAwareSwitch switchButton;
TextView stateText;
-
FileManager fileManager;
-
Boolean canShowNotification = false;
-
+ private ActivityResultLauncher pushNotificationPermissionLauncher;
+ private ActivityResultLauncher vpnPermissionLauncher;
+ private Messenger serviceMessenger;
+ private boolean isBound;
private ConnectionState lastKnownConnectionState = ConnectionState.DISCONNECTED;
- private ServiceConnection connection = new ServiceConnection() {
+ private final ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
serviceMessenger = new Messenger(service);
@@ -59,7 +53,7 @@ public void onServiceDisconnected(ComponentName arg0) {
private SwitchButton.OnCheckedChangeListener createSwitchCheckedChangeListener() {
return (view, isChecked) -> {
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !canShowNotification) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !canShowNotification) {
pushNotificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
return;
}
@@ -72,7 +66,7 @@ private SwitchButton.OnCheckedChangeListener createSwitchCheckedChangeListener()
} else {
startVpnService();
}
- } else if(lastKnownConnectionState == ConnectionState.CONNECTED || lastKnownConnectionState == ConnectionState.CONNECTING) {
+ } else if (lastKnownConnectionState == ConnectionState.CONNECTED || lastKnownConnectionState == ConnectionState.CONNECTING) {
stopVpnService();
}
};
@@ -88,7 +82,6 @@ protected void onCreate(Bundle savedInstanceState) {
}
-
private void observeConnectionStatus() {
if (!isBound) return;
OblivionVpnService.registerConnectionStateObserver(ConnectionStateObserverKey, serviceMessenger, new ConnectionStateChangeListener() {
@@ -104,8 +97,9 @@ private void unsubscribeConnectionStatus() {
if (!isBound) return;
OblivionVpnService.unregisterConnectionStateObserver(ConnectionStateObserverKey, serviceMessenger);
}
+
private void updateUi() {
- switch(lastKnownConnectionState) {
+ switch (lastKnownConnectionState) {
case DISCONNECTED:
disconnected();
break;
@@ -164,28 +158,22 @@ private void firstValueInit() {
}
private void initPermissionLauncher() {
- pushNotificationPermissionLauncher = registerForActivityResult(
- new ActivityResultContracts.RequestPermission(),
- isGranted -> {
- if (isGranted) {
- canShowNotification = true;
- } else {
- disconnected();
- Toast.makeText(this, "Permission denied", Toast.LENGTH_LONG).show();
- }
- }
- );
- vpnPermissionLauncher = registerForActivityResult(
- new ActivityResultContracts.StartActivityForResult(),
- result -> {
- if (result.getResultCode() == RESULT_OK) {
- startVpnService();
- } else {
- stopVpnService();
- Toast.makeText(this, "Really!?", Toast.LENGTH_LONG).show();
- }
- }
- );
+ pushNotificationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
+ if (isGranted) {
+ canShowNotification = true;
+ } else {
+ disconnected();
+ Toast.makeText(this, "Permission denied", Toast.LENGTH_LONG).show();
+ }
+ });
+ vpnPermissionLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ if (result.getResultCode() == RESULT_OK) {
+ startVpnService();
+ } else {
+ stopVpnService();
+ Toast.makeText(this, "Really!?", Toast.LENGTH_LONG).show();
+ }
+ });
}
@@ -220,4 +208,4 @@ private void init() {
bugIcon.setOnClickListener(v -> startActivity(new Intent(MainActivity.this, BugActivity.class)));
settingsIcon.setOnClickListener(v -> startActivity(new Intent(MainActivity.this, SettingsActivity.class)));
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/bepass/oblivion/OblivionVpnService.java b/app/src/main/java/org/bepass/oblivion/OblivionVpnService.java
index 737d64f8..d1ed1cdd 100644
--- a/app/src/main/java/org/bepass/oblivion/OblivionVpnService.java
+++ b/app/src/main/java/org/bepass/oblivion/OblivionVpnService.java
@@ -23,9 +23,6 @@
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
-import tun2socks.Tun2socks;
-import tun2socks.StartOptions;
-
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
@@ -33,32 +30,43 @@
import java.util.HashMap;
import java.util.Map;
+import tun2socks.StartOptions;
+import tun2socks.Tun2socks;
+
public class OblivionVpnService extends VpnService {
- private static final String TAG = "oblivionVPN";
public static final String FLAG_VPN_START = "org.bepass.oblivion.START";
public static final String FLAG_VPN_STOP = "org.bepass.oblivion.STOP";
+ static final int MSG_PERFORM_CONNECTION_TEST = 1;
+ static final int MSG_CONNECTION_STATE_SUBSCRIBE = 2;
+ static final int MSG_CONNECTION_STATE_UNSUBSCRIBE = 3;
+ static final int MSG_TILE_STATE_SUBSCRIPTION_RESULT = 4;
+ private static final String TAG = "oblivionVPN";
private static final String PRIVATE_VLAN4_CLIENT = "172.19.0.1";
private static final String PRIVATE_VLAN6_CLIENT = "fdfe:dcba:9876::1";
+ private final Handler handler = new Handler();
+ private final Messenger serviceMessenger = new Messenger(new IncomingHandler(this));
+ private final Map connectionStateObservers = new HashMap<>();
+ private final Runnable logRunnable = new Runnable() {
+ @Override
+ public void run() {
+ String logMessages = Tun2socks.getLogMessages();
+ if (!logMessages.isEmpty()) {
+ try (FileOutputStream fos = getApplicationContext().openFileOutput("logs.txt", Context.MODE_APPEND)) {
+ fos.write((logMessages).getBytes());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ handler.postDelayed(this, 2000); // Poll every 2 seconds
+ }
+ };
private Notification notification;
private ParcelFileDescriptor mInterface;
private Thread vpnThread;
private String bindAddress;
- private final Handler handler = new Handler();
-
private FileManager fileManager;
-
private ConnectionState lastKnownState = ConnectionState.DISCONNECTED;
- static final int MSG_PERFORM_CONNECTION_TEST= 1;
- static final int MSG_CONNECTION_STATE_SUBSCRIBE = 2;
- static final int MSG_CONNECTION_STATE_UNSUBSCRIBE = 3;
- static final int MSG_TILE_STATE_SUBSCRIPTION_RESULT = 4;
-
- private final Messenger serviceMessenger = new Messenger(new IncomingHandler(this));
-
- private final Map connectionStateObservers = new HashMap<>();
-
-
public static void registerConnectionStateObserver(String key, Messenger serviceMessenger, ConnectionStateChangeListener observer) {
// Create a message for the service
Message subscriptionMessage = Message.obtain(null, OblivionVpnService.MSG_CONNECTION_STATE_SUBSCRIBE);
@@ -152,20 +160,6 @@ private static int findFreePort() {
throw new IllegalStateException("Could not find a free TCP/IP port to start embedded Jetty HTTP Server on");
}
- private String getBindAddress() {
- String port = fileManager.getString("USERSETTING_port");
- boolean enableLan = fileManager.getBoolean("USERSETTING_lan");
- if (OblivionVpnService.isLocalPortInUse("127.0.0.1:" + port).equals("true")) {
- port = findFreePort() + "";
- }
- String Bind = "";
- Bind += "127.0.0.1:" + port;
- if (enableLan) {
- Bind = "0.0.0.0:" + port;
- }
- return Bind;
- }
-
public static String isLocalPortInUse(String bindAddress) {
Map result = splitHostAndPort(bindAddress);
if (result == null) {
@@ -210,76 +204,18 @@ private static void performConnectionTest(String bindAddress, ConnectionStateCha
}).start();
}
-
- private static class IncomingHandler extends Handler {
- private final WeakReference serviceRef;
-
- IncomingHandler(OblivionVpnService service) {
- serviceRef = new WeakReference<>(service);
+ private String getBindAddress() {
+ String port = fileManager.getString("USERSETTING_port");
+ boolean enableLan = fileManager.getBoolean("USERSETTING_lan");
+ if (OblivionVpnService.isLocalPortInUse("127.0.0.1:" + port).equals("true")) {
+ port = String.valueOf(findFreePort());
}
-
- @Override
- public void handleMessage(Message msg) {
- final Message message = new Message();
- message.copyFrom(msg);
- OblivionVpnService service = serviceRef.get();
- if (service == null) return;
- switch (msg.what) {
- case MSG_PERFORM_CONNECTION_TEST: {
- performConnectionTest(service.bindAddress, new ConnectionStateChangeListener() {
- @Override
- public void onChange(ConnectionState state) {
- service.setLastKnownState(state);
- Bundle data = new Bundle();
- if (state == ConnectionState.DISCONNECTED) {
- data.putBoolean("success", false);
- Message replyMsg = Message.obtain(null, MSG_PERFORM_CONNECTION_TEST);
- replyMsg.setData(data);
- try {
- message.replyTo.send(replyMsg);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- } else {
- data.putBoolean("success", true);
- Message replyMsg = Message.obtain(null, MSG_PERFORM_CONNECTION_TEST);
- replyMsg.setData(data);
- try {
- message.replyTo.send(replyMsg);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
-
- }
- });
- break;
- }
- case MSG_CONNECTION_STATE_SUBSCRIBE: {
- String key = message.getData().getString("key");
- if (key == null)
- throw new RuntimeException("No key was provided for the connection state observer");
- if (service.connectionStateObservers.containsKey(key)) {
- //Already subscribed. Just push the latest known state to it.
- service.publishConnectionStateTo(key, service.lastKnownState);
- break;
- }
- service.addConnectionStateObserver(key, message.replyTo);
- service.publishConnectionState(service.lastKnownState);
- break;
- }
- case MSG_CONNECTION_STATE_UNSUBSCRIBE: {
- String key = message.getData().getString("key");
- if (key == null)
- throw new RuntimeException("No observer was specified to unregister");
- service.removeConnectionStateObserver(key, null);
- break;
- }
- default: {
- super.handleMessage(msg);
- }
- }
+ String Bind = "";
+ Bind += "127.0.0.1:" + port;
+ if (enableLan) {
+ Bind = "0.0.0.0:" + port;
}
+ return Bind;
}
@Override
@@ -295,21 +231,6 @@ public IBinder onBind(Intent intent) {
return serviceMessenger.getBinder();
}
- private final Runnable logRunnable = new Runnable() {
- @Override
- public void run() {
- String logMessages = Tun2socks.getLogMessages();
- if (!logMessages.isEmpty()) {
- try (FileOutputStream fos = getApplicationContext().openFileOutput("logs.txt", Context.MODE_APPEND)) {
- fos.write((logMessages).getBytes());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- handler.postDelayed(this, 2000); // Poll every 2 seconds
- }
- };
-
private void clearLogFile() {
try (FileOutputStream fos = getApplicationContext().openFileOutput("logs.txt", Context.MODE_PRIVATE)) {
fos.write("".getBytes()); // Overwrite with empty content
@@ -406,7 +327,8 @@ private void stopVpn() {
private void publishConnectionState(ConnectionState state) {
if (!connectionStateObservers.isEmpty()) {
- for (String observerKey : connectionStateObservers.keySet()) publishConnectionStateTo(observerKey, state);
+ for (String observerKey : connectionStateObservers.keySet())
+ publishConnectionStateTo(observerKey, state);
}
}
@@ -532,4 +454,75 @@ private void configure() {
vpnThread = new Thread(() -> Tun2socks.runWarp(so));
vpnThread.start();
}
-}
\ No newline at end of file
+
+ private static class IncomingHandler extends Handler {
+ private final WeakReference serviceRef;
+
+ IncomingHandler(OblivionVpnService service) {
+ serviceRef = new WeakReference<>(service);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ final Message message = new Message();
+ message.copyFrom(msg);
+ OblivionVpnService service = serviceRef.get();
+ if (service == null) return;
+ switch (msg.what) {
+ case MSG_PERFORM_CONNECTION_TEST: {
+ performConnectionTest(service.bindAddress, new ConnectionStateChangeListener() {
+ @Override
+ public void onChange(ConnectionState state) {
+ service.setLastKnownState(state);
+ Bundle data = new Bundle();
+ if (state == ConnectionState.DISCONNECTED) {
+ data.putBoolean("success", false);
+ Message replyMsg = Message.obtain(null, MSG_PERFORM_CONNECTION_TEST);
+ replyMsg.setData(data);
+ try {
+ message.replyTo.send(replyMsg);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ } else {
+ data.putBoolean("success", true);
+ Message replyMsg = Message.obtain(null, MSG_PERFORM_CONNECTION_TEST);
+ replyMsg.setData(data);
+ try {
+ message.replyTo.send(replyMsg);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+ });
+ break;
+ }
+ case MSG_CONNECTION_STATE_SUBSCRIBE: {
+ String key = message.getData().getString("key");
+ if (key == null)
+ throw new RuntimeException("No key was provided for the connection state observer");
+ if (service.connectionStateObservers.containsKey(key)) {
+ //Already subscribed. Just push the latest known state to it.
+ service.publishConnectionStateTo(key, service.lastKnownState);
+ break;
+ }
+ service.addConnectionStateObserver(key, message.replyTo);
+ service.publishConnectionState(service.lastKnownState);
+ break;
+ }
+ case MSG_CONNECTION_STATE_UNSUBSCRIBE: {
+ String key = message.getData().getString("key");
+ if (key == null)
+ throw new RuntimeException("No observer was specified to unregister");
+ service.removeConnectionStateObserver(key, null);
+ break;
+ }
+ default: {
+ super.handleMessage(msg);
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/bepass/oblivion/QuickStartService.java b/app/src/main/java/org/bepass/oblivion/QuickStartService.java
index ad819995..9d81cee2 100644
--- a/app/src/main/java/org/bepass/oblivion/QuickStartService.java
+++ b/app/src/main/java/org/bepass/oblivion/QuickStartService.java
@@ -16,13 +16,11 @@
import androidx.core.content.ContextCompat;
@RequiresApi(api = Build.VERSION_CODES.N)
-public class QuickStartService extends TileService {
+public class QuickStartService extends TileService {
+ private final static String CONNECTION_OBSERVER_KEY = "quickstartToggleButton";
private boolean isBound;
private Messenger serviceMessenger;
-
- private final static String CONNECTION_OBSERVER_KEY = "quickstartToggleButton";
-
- private ServiceConnection connection = new ServiceConnection() {
+ private final ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
serviceMessenger = new Messenger(service);
@@ -38,7 +36,6 @@ public void onServiceDisconnected(ComponentName arg0) {
};
-
// Called when your app can update your tile.
@Override
public void onStartListening() {
diff --git a/app/src/main/java/org/bepass/oblivion/SettingsActivity.java b/app/src/main/java/org/bepass/oblivion/SettingsActivity.java
index 5c69da64..5adf96b3 100644
--- a/app/src/main/java/org/bepass/oblivion/SettingsActivity.java
+++ b/app/src/main/java/org/bepass/oblivion/SettingsActivity.java
@@ -1,9 +1,6 @@
package org.bepass.oblivion;
-import androidx.appcompat.app.AppCompatActivity;
-
import android.os.Bundle;
-import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@@ -13,7 +10,7 @@
import android.widget.Spinner;
import android.widget.TextView;
-import org.bepass.oblivion.R;
+import androidx.appcompat.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
@@ -119,7 +116,7 @@ private void settingBasicValuesFromSPF() {
String countryCode = fileManager.getString("USERSETTING_country");
int index;
- if("".equals(countryCode)) {
+ if ("".equals(countryCode)) {
index = 0;
} else {
String countryName = CountryUtils.getCountryName(countryCode);
@@ -165,4 +162,4 @@ private void init() {
back.setOnClickListener(v -> onBackPressed());
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java b/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java
index bfb33237..2e32fe85 100644
--- a/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java
+++ b/app/src/main/java/org/bepass/oblivion/SheetsCallBack.java
@@ -3,4 +3,3 @@
public interface SheetsCallBack {
void onSheetClosed();
}
-
diff --git a/app/src/main/java/org/bepass/oblivion/TouchAwareSwitch.java b/app/src/main/java/org/bepass/oblivion/TouchAwareSwitch.java
index 5751c1bf..cf407d08 100644
--- a/app/src/main/java/org/bepass/oblivion/TouchAwareSwitch.java
+++ b/app/src/main/java/org/bepass/oblivion/TouchAwareSwitch.java
@@ -3,8 +3,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
import com.suke.widget.SwitchButton;
@@ -21,6 +19,7 @@ public TouchAwareSwitch(Context context, AttributeSet attrs) {
public TouchAwareSwitch(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
+
@SuppressLint("ClickableViewAccessibility")
@Override
public void setOnCheckedChangeListener(final OnCheckedChangeListener listener) {
@@ -44,8 +43,4 @@ public void setChecked(boolean checked, boolean notify) {
}
-
-
-
-
}
diff --git a/app/src/main/res/drawable-anydpi/about_item.xml b/app/src/main/res/drawable-anydpi/about_item.xml
index 093bde88..0889317c 100644
--- a/app/src/main/res/drawable-anydpi/about_item.xml
+++ b/app/src/main/res/drawable-anydpi/about_item.xml
@@ -1,7 +1,7 @@
+ android:shape="rectangle">
-
-
+
+
diff --git a/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml b/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml
index 3b8242fe..448713ee 100644
--- a/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml
+++ b/app/src/main/res/drawable-anydpi/bottom_sheet_closer.xml
@@ -1,7 +1,7 @@
+ android:shape="rectangle">
-
-
+
+
diff --git a/app/src/main/res/drawable-anydpi/edittext_back.xml b/app/src/main/res/drawable-anydpi/edittext_back.xml
index 007a4e9e..e16f4e4e 100644
--- a/app/src/main/res/drawable-anydpi/edittext_back.xml
+++ b/app/src/main/res/drawable-anydpi/edittext_back.xml
@@ -1,7 +1,7 @@
+ android:shape="rectangle">
-
-
+
+
diff --git a/app/src/main/res/drawable-anydpi/ic_back.xml b/app/src/main/res/drawable-anydpi/ic_back.xml
index e4e11807..af0695f3 100644
--- a/app/src/main/res/drawable-anydpi/ic_back.xml
+++ b/app/src/main/res/drawable-anydpi/ic_back.xml
@@ -1,12 +1,12 @@
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="#5E5E5E"
+ android:alpha="0.6"
+ android:autoMirrored="true">
+ android:fillColor="@android:color/white"
+ android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
diff --git a/app/src/main/res/drawable-anydpi/ic_bug.xml b/app/src/main/res/drawable-anydpi/ic_bug.xml
index b45538d2..ecabc241 100644
--- a/app/src/main/res/drawable-anydpi/ic_bug.xml
+++ b/app/src/main/res/drawable-anydpi/ic_bug.xml
@@ -1,11 +1,11 @@
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="#5E5E5E"
+ android:alpha="0.6">
+ android:fillColor="@android:color/white"
+ android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z" />
diff --git a/app/src/main/res/drawable-anydpi/ic_info.xml b/app/src/main/res/drawable-anydpi/ic_info.xml
index 58389a33..8b074f59 100644
--- a/app/src/main/res/drawable-anydpi/ic_info.xml
+++ b/app/src/main/res/drawable-anydpi/ic_info.xml
@@ -1,11 +1,11 @@
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="#5E5E5E"
+ android:alpha="0.6">
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z" />
diff --git a/app/src/main/res/drawable-anydpi/ic_power.xml b/app/src/main/res/drawable-anydpi/ic_power.xml
index 9847dd37..e9780d2b 100644
--- a/app/src/main/res/drawable-anydpi/ic_power.xml
+++ b/app/src/main/res/drawable-anydpi/ic_power.xml
@@ -1,11 +1,11 @@
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="#5E5E5E"
+ android:alpha="0.6">
+ android:fillColor="@android:color/white"
+ android:pathData="M13,3h-2v10h2L13,3zM17.83,5.17l-1.42,1.42C17.99,7.86 19,9.81 19,12c0,3.87 -3.13,7 -7,7s-7,-3.13 -7,-7c0,-2.19 1.01,-4.14 2.58,-5.42L6.17,5.17C4.23,6.82 3,9.26 3,12c0,4.97 4.03,9 9,9s9,-4.03 9,-9c0,-2.74 -1.23,-5.18 -3.17,-6.83z" />
diff --git a/app/src/main/res/drawable-anydpi/ic_settings.xml b/app/src/main/res/drawable-anydpi/ic_settings.xml
index d1763c9a..3cefc4cd 100644
--- a/app/src/main/res/drawable-anydpi/ic_settings.xml
+++ b/app/src/main/res/drawable-anydpi/ic_settings.xml
@@ -1,11 +1,11 @@
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="#5E5E5E"
+ android:alpha="0.6">
+ android:fillColor="@android:color/white"
+ android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z" />
diff --git a/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml b/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml
index 84eec740..94506a97 100644
--- a/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml
+++ b/app/src/main/res/drawable-hdpi/rounded_bottom_sheet.xml
@@ -1,8 +1,8 @@
-
-
+ android:shape="rectangle">
+
+
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
index 05c351ca..01fee93e 100644
--- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -1,30 +1,31 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/background_gradient.xml b/app/src/main/res/drawable/background_gradient.xml
index 792a1efa..275da24a 100644
--- a/app/src/main/res/drawable/background_gradient.xml
+++ b/app/src/main/res/drawable/background_gradient.xml
@@ -1,9 +1,9 @@
-
-
\ No newline at end of file
+ android:shape="rectangle">
+
+
diff --git a/app/src/main/res/drawable/bottom_sheet_cancel.xml b/app/src/main/res/drawable/bottom_sheet_cancel.xml
index f945455c..a94adfc7 100644
--- a/app/src/main/res/drawable/bottom_sheet_cancel.xml
+++ b/app/src/main/res/drawable/bottom_sheet_cancel.xml
@@ -1,7 +1,7 @@
+ android:shape="rectangle">
-
-
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
index 2d80bfa7..fc9655e7 100644
--- a/app/src/main/res/drawable/ic_launcher_background.xml
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -1,170 +1,170 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/layout_border_bottom.xml b/app/src/main/res/drawable/layout_border_bottom.xml
index e4aea104..82feed3f 100644
--- a/app/src/main/res/drawable/layout_border_bottom.xml
+++ b/app/src/main/res/drawable/layout_border_bottom.xml
@@ -1,19 +1,19 @@
-
- -
-
-
-
-
-
- -
-
-
-
-
-
\ No newline at end of file
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
diff --git a/app/src/main/res/drawable/vpn_off.xml b/app/src/main/res/drawable/vpn_off.xml
index d33949b7..9ae84aa3 100644
--- a/app/src/main/res/drawable/vpn_off.xml
+++ b/app/src/main/res/drawable/vpn_off.xml
@@ -1,5 +1,6 @@
-
+ android:viewportHeight="24" android:viewportWidth="24"
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+
diff --git a/app/src/main/res/drawable/vpn_on.xml b/app/src/main/res/drawable/vpn_on.xml
index 1339fb3b..280ecbdc 100644
--- a/app/src/main/res/drawable/vpn_on.xml
+++ b/app/src/main/res/drawable/vpn_on.xml
@@ -1,5 +1,6 @@
-
+ android:viewportHeight="24" android:viewportWidth="24"
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+
diff --git a/app/src/main/res/layout/activity_bug.xml b/app/src/main/res/layout/activity_bug.xml
index 397a0b97..a86271a4 100644
--- a/app/src/main/res/layout/activity_bug.xml
+++ b/app/src/main/res/layout/activity_bug.xml
@@ -1,62 +1,63 @@
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+ android:layout_height="48dp"
+ android:layout_marginTop="8dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_info.xml b/app/src/main/res/layout/activity_info.xml
index f3743bfd..08c1ef81 100644
--- a/app/src/main/res/layout/activity_info.xml
+++ b/app/src/main/res/layout/activity_info.xml
@@ -1,102 +1,102 @@
-
-
-
-
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/background_gradient"
+ android:orientation="vertical"
+ tools:context="org.bepass.oblivion.InfoActivity">
-
+
-
+
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:layout_marginEnd="16dp"
+ android:fontFamily="@font/shabnamlight"
+ android:text="درباره برنامه"
+ android:textColor="@color/black"
+ android:textSize="32sp" />
-
+
-
+
-
+
-
+
-
+
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true"
+ android:layout_marginEnd="16dp"
+ android:fontFamily="@font/shabnambold"
+ android:text="BePass/Oblivion"
+ android:textColor="@color/black" />
+
+
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index cd5f90e8..74c0412d 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,125 +1,126 @@
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+ android:layout_height="48dp"
+ android:layout_marginTop="16dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 3c2922b8..3e7d5dc6 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -1,457 +1,458 @@
-
+
+
+ android:layout_height="48dp"
+ android:layout_marginTop="8dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
-
+ android:layout_height="10dp"
+ android:gravity="center"
+ android:orientation="vertical"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:textSize="20sp" />
+
+
+
-
+
-
+ android:layout_height="10dp"
+ android:gravity="center"
+ android:orientation="vertical"
+ >
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_weight="2"
+ >
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/country_item_layout.xml b/app/src/main/res/layout/country_item_layout.xml
index bccdd4e3..f5e2f2a8 100644
--- a/app/src/main/res/layout/country_item_layout.xml
+++ b/app/src/main/res/layout/country_item_layout.xml
@@ -1,7 +1,7 @@
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="5dp"
+ android:textSize="18sp"
+ android:fontFamily="@font/shabnammedium" />
diff --git a/app/src/main/res/layout/edit_sheet.xml b/app/src/main/res/layout/edit_sheet.xml
index 03115aa9..4be01c80 100644
--- a/app/src/main/res/layout/edit_sheet.xml
+++ b/app/src/main/res/layout/edit_sheet.xml
@@ -1,75 +1,75 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/rounded_bottom_sheet"
+ android:gravity="center"
+ android:orientation="vertical">
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index 036d09bc..501c6926 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -1,5 +1,5 @@
-
-
-
\ No newline at end of file
+
+
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index 036d09bc..501c6926 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,5 +1,5 @@
-
-
-
\ No newline at end of file
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 1b447a79..834b448a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,10 +1,10 @@
- #FFBB86FC
- #FF6200EE
- #FF3700B3
- #FF03DAC5
- #FF018786
- #5E5E5E
- #FFFFFFFF
-
\ No newline at end of file
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #5E5E5E
+ #FFFFFFFF
+
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
index 35d7ecaf..ea966ab5 100644
--- a/app/src/main/res/values/ic_launcher_background.xml
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -1,4 +1,4 @@
- #963E3E
-
\ No newline at end of file
+ #963E3E
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ea3754ba..87230944 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,35 +1,35 @@
- Oblivion
-
- - Automatic
- - Austria
- - Belgium
- - Brazil
- - Bulgaria
- - Canada
- - Denmark
- - Estonia
- - Finland
- - France
- - Germany
- - Hungary
- - India
- - Ireland
- - Italy
- - Japan
- - Latvia
- - Netherlands
- - Norway
- - Poland
- - Romania
- - Serbia
- - Singapore
- - Slovakia
- - Spain
- - Sweden
- - Switzerland
- - Ukraine
- - United Kingdom
- - United States
-
-
\ No newline at end of file
+ Oblivion
+
+ - Automatic
+ - Austria
+ - Belgium
+ - Brazil
+ - Bulgaria
+ - Canada
+ - Denmark
+ - Estonia
+ - Finland
+ - France
+ - Germany
+ - Hungary
+ - India
+ - Ireland
+ - Italy
+ - Japan
+ - Latvia
+ - Netherlands
+ - Norway
+ - Poland
+ - Romania
+ - Serbia
+ - Singapore
+ - Slovakia
+ - Spain
+ - Sweden
+ - Switzerland
+ - Ukraine
+ - United Kingdom
+ - United States
+
+
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index de62c5f4..1a4a886e 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,19 +1,19 @@
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml
index fa0f996d..d0ef1359 100644
--- a/app/src/main/res/xml/backup_rules.xml
+++ b/app/src/main/res/xml/backup_rules.xml
@@ -6,8 +6,8 @@
See https://developer.android.com/about/versions/12/backup-restore
-->
-
-
\ No newline at end of file
+
diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml
index 9ee9997b..d868289e 100644
--- a/app/src/main/res/xml/data_extraction_rules.xml
+++ b/app/src/main/res/xml/data_extraction_rules.xml
@@ -4,16 +4,16 @@
for details.
-->
-
-
-
-
-
\ No newline at end of file
+
diff --git a/build.gradle b/build.gradle
index de4390ff..383a3bd4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,4 +2,4 @@
plugins {
id 'com.android.application' version '8.1.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
-}
\ No newline at end of file
+}
diff --git a/gradle.properties b/gradle.properties
index c22da573..aa5fda35 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -21,4 +21,4 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
-android.enableJetifier=true
\ No newline at end of file
+android.enableJetifier=true