() {{
- add(DnsServer.getDnsServerAddressByStringDescription(context, spinnerServerChoice.getSelectedItem().toString()));
+ add(DnsServer.getDnsServerAddressByStringDescription(Daedalus.getInstance(), spinnerServerChoice.getSelectedItem().toString()));
String servers = Daedalus.getPrefs().getString("dns_test_servers", "");
if (!servers.equals("")) {
for (String server : servers.split(",")) {
@@ -127,7 +126,7 @@ public class ServerTestActivity extends AppCompatActivity {
}
};
- final Button startTestBut = (Button) findViewById(R.id.button_start_test);
+ final Button startTestBut = (Button) view.findViewById(R.id.button_start_test);
startTestBut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -135,7 +134,7 @@ public class ServerTestActivity extends AppCompatActivity {
.setAction("Action", null).show();
startTestBut.setVisibility(View.INVISIBLE);
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ InputMethodManager imm = (InputMethodManager) Daedalus.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
textViewTestInfo.setText("");
@@ -150,10 +149,12 @@ public class ServerTestActivity extends AppCompatActivity {
mHandler = new ServerTestHandler();
mHandler.setViews(startTestBut, textViewTestInfo);
+
+ return view;
}
@Override
- protected void onDestroy() {
+ public void onDestroy() {
super.onDestroy();
stopThread();
diff --git a/app/src/main/java/org/itxtech/daedalus/fragment/MainFragment.java b/app/src/main/java/org/itxtech/daedalus/fragment/MainFragment.java
new file mode 100644
index 0000000..26b6e16
--- /dev/null
+++ b/app/src/main/java/org/itxtech/daedalus/fragment/MainFragment.java
@@ -0,0 +1,105 @@
+package org.itxtech.daedalus.fragment;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Intent;
+import android.net.VpnService;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import org.itxtech.daedalus.Daedalus;
+import org.itxtech.daedalus.R;
+import org.itxtech.daedalus.service.DaedalusVpnService;
+import org.itxtech.daedalus.util.DnsServer;
+
+/**
+ * Daedalus Project
+ *
+ * @author iTXTech
+ * @link https://itxtech.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ */
+public class MainFragment extends Fragment {
+
+ private View view = null;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ view = inflater.inflate(R.layout.fragment_main, container, false);
+
+ final Button but = (Button) view.findViewById(R.id.button_activate);
+ if (Daedalus.getInstance().isServiceActivated()) {
+ but.setText(R.string.button_text_deactivate);
+ } else {
+ but.setText(R.string.button_text_activate);
+ }
+ but.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (Daedalus.getInstance().isServiceActivated()) {
+ Daedalus.getInstance().deactivateService();
+ } else {
+ activateService();
+ }
+ }
+ });
+
+ updateUserInterface();
+
+ return view;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ view = null;
+ }
+
+ public void activateService() {
+ Intent intent = VpnService.prepare(Daedalus.getInstance());
+ if (intent != null) {
+ startActivityForResult(intent, 0);
+ } else {
+ onActivityResult(0, Activity.RESULT_OK, null);
+ }
+ }
+
+ public void onActivityResult(int request, int result, Intent data) {
+ if (result == Activity.RESULT_OK) {
+ DaedalusVpnService.primaryServer = DnsServer.getDnsServerAddressById(Daedalus.getPrefs().getString("primary_server", "0"));
+ DaedalusVpnService.secondaryServer = DnsServer.getDnsServerAddressById(Daedalus.getPrefs().getString("secondary_server", "1"));
+
+ Daedalus.getInstance().startService(Daedalus.getInstance().getServiceIntent().setAction(DaedalusVpnService.ACTION_ACTIVATE));
+
+
+ ((Button) view.findViewById(R.id.button_activate)).setText(R.string.button_text_deactivate);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ updateUserInterface();
+ }
+
+ private void updateUserInterface() {
+ Button but = (Button) view.findViewById(R.id.button_activate);
+ if (Daedalus.getInstance().isServiceActivated()) {
+ but.setText(R.string.button_text_deactivate);
+ } else {
+ but.setText(R.string.button_text_activate);
+ }
+
+ }
+}
diff --git a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java
index e7da598..ea19a33 100644
--- a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java
+++ b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java
@@ -168,7 +168,7 @@ public class DaedalusVpnService extends VpnService implements Runnable {
}
stopSelf();
- if (shouldRefresh && MainActivity.getInstance() != null && MainActivity.getInstance().isAppOnForeground()) {
+ if (shouldRefresh && MainActivity.getInstance() != null && Daedalus.getInstance().isAppOnForeground()) {
MainActivity.getInstance().startActivity(new Intent(getApplicationContext(), MainActivity.class).putExtra(MainActivity.LAUNCH_ACTION, MainActivity.LAUNCH_ACTION_NONE));
} else if (shouldRefresh) {
Daedalus.updateShortcut(getApplicationContext());
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0db995e..48de343 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -14,6 +14,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent"/>
+
+
-
diff --git a/app/src/main/res/layout/activity_server_test.xml b/app/src/main/res/layout/activity_server_test.xml
deleted file mode 100644
index 1597061..0000000
--- a/app/src/main/res/layout/activity_server_test.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
index d31fb1e..b1264fa 100644
--- a/app/src/main/res/layout/app_bar_main.xml
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -22,13 +22,4 @@
-
-
-
diff --git a/app/src/main/res/layout/fragment_dns_test.xml b/app/src/main/res/layout/fragment_dns_test.xml
new file mode 100644
index 0000000..9185389
--- /dev/null
+++ b/app/src/main/res/layout/fragment_dns_test.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/fragment_main.xml
similarity index 94%
rename from app/src/main/res/layout/content_main.xml
rename to app/src/main/res/layout/fragment_main.xml
index 37e0084..34d289c 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/content_main"
+ android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
@@ -11,8 +11,7 @@
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
- tools:showIn="@layout/activity_main"
- tools:context="org.itxtech.daedalus.activity.MainActivity">
+ tools:context="org.itxtech.daedalus.fragment.MainFragment">
-
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
index eeee409..ac68194 100644
--- a/app/src/main/res/menu/activity_main_drawer.xml
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -7,22 +7,26 @@
android:title="@string/action_home"
android:checked="true"
android:icon="@mipmap/ic_home_grey600_36dp"/>
+
-
-
-
-
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
deleted file mode 100644
index 4985a07..0000000
--- a/app/src/main/res/menu/menu_main.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 2f4f0d2..884608f 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -16,7 +16,7 @@
CuteDNS! 华北
备用 DNS 服务器
正在测试指定的 DNS 服务器……
- DNS 测试
+ DNS 测试
开始测试
测试域名:
耗时:
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 314656c..8cea580 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -2,6 +2,7 @@
16dp
16dp
+ 48dp
16dp
16dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index af8c09c..964edb4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,7 +15,7 @@
CuteDNS! North China
Secondary DNS
Testing specified DNS …
- DNS test
+ DNS test
Start test
Test domain:
Time used: