diff --git a/app/build.gradle b/app/build.gradle
index c560d4c..d831a06 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,7 +7,7 @@ android {
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "org.itxtech.daedalus"
- minSdkVersion 21
+ minSdkVersion 15
targetSdkVersion 25
versionCode 2
versionName "1.0.1"
diff --git a/app/src/main/java/org/itxtech/daedalus/fragment/SettingsFragment.java b/app/src/main/java/org/itxtech/daedalus/fragment/SettingsFragment.java
index 3b99cd6..d91a5a8 100644
--- a/app/src/main/java/org/itxtech/daedalus/fragment/SettingsFragment.java
+++ b/app/src/main/java/org/itxtech/daedalus/fragment/SettingsFragment.java
@@ -2,10 +2,12 @@ package org.itxtech.daedalus.fragment;
import android.content.Intent;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
+import android.preference.SwitchPreference;
import android.support.design.widget.Snackbar;
import android.view.LayoutInflater;
import android.view.View;
@@ -25,6 +27,7 @@ import org.itxtech.daedalus.util.DnsServer;
* the Free Software Foundation, version 3.
*/
public class SettingsFragment extends PreferenceFragment {
+ private View view = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -37,11 +40,17 @@ public class SettingsFragment extends PreferenceFragment {
ListPreference secondaryServer = (ListPreference) findPreference("secondary_server");
secondaryServer.setEntries(DnsServer.getDnsServerNames(Daedalus.getInstance()));
secondaryServer.setEntryValues(DnsServer.getDnsServerIds());
+
+ if (Build.VERSION.SDK_INT < 21) {
+ SwitchPreference countQueryTimes = (SwitchPreference) findPreference("settings_count_query_times");
+ countQueryTimes.setChecked(false);
+ countQueryTimes.setEnabled(false);
+ }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- final View view = super.onCreateView(inflater, container, savedInstanceState);
+ view = super.onCreateView(inflater, container, savedInstanceState);
ListPreference checkUpdate = (ListPreference) findPreference("settings_check_update");
checkUpdate.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@@ -56,4 +65,20 @@ public class SettingsFragment extends PreferenceFragment {
return view;
}
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ if (view != null && Build.VERSION.SDK_INT < 21) {
+ Snackbar.make(view, R.string.notice_legacy_api, Snackbar.LENGTH_LONG)
+ .setAction("Action", null).show();
+ }
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+
+ view = null;
+ }
}
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 03be78e..a27e3af 100644
--- a/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java
+++ b/app/src/main/java/org/itxtech/daedalus/service/DaedalusVpnService.java
@@ -143,8 +143,12 @@ public class DaedalusVpnService extends VpnService implements Runnable {
if (this.mThread != null) {
this.running = false;
this.mThread.interrupt();
- Os.close(mInterruptFd);
- Os.close(mBlockFd);
+ if (mInterruptFd != null) {
+ Os.close(mInterruptFd);
+ }
+ if (mBlockFd != null) {
+ Os.close(mBlockFd);
+ }
this.mThread = null;
}
if (notification != null) {
@@ -166,10 +170,6 @@ public class DaedalusVpnService extends VpnService implements Runnable {
@Override
public void run() {
try {
- FileDescriptor[] pipes = Os.pipe();
- mInterruptFd = pipes[0];
- mBlockFd = pipes[1];
-
Builder builder = new Builder();
String format = null;
for (String prefix : new String[]{"192.0.2", "198.51.100", "203.0.113", "10.0.0.", "192.168.50"}) {
@@ -185,7 +185,7 @@ public class DaedalusVpnService extends VpnService implements Runnable {
this.descriptor.close();
}
- boolean statisticQuery = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("settings_query", false);
+ boolean statisticQuery = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("settings_count_query_times", false);
Log.d(TAG, "tun0 add " + format + " pServ " + primaryServer + " sServ " + secondaryServer);
Inet4Address primaryDNSServer = InetAddressUtil.ipv4From(primaryServer);
Inet4Address secondaryDNSServer = InetAddressUtil.ipv4From(secondaryServer);
@@ -194,13 +194,17 @@ public class DaedalusVpnService extends VpnService implements Runnable {
if (statisticQuery) {
builder.addRoute(primaryDNSServer, primaryDNSServer.getAddress().length * 8)
- .addRoute(secondaryDNSServer, secondaryDNSServer.getAddress().length * 8);
+ .addRoute(secondaryDNSServer, secondaryDNSServer.getAddress().length * 8)
+ .setBlocking(true);
}
- this.descriptor = builder.setSession("Daedalus").setConfigureIntent(PendingIntent.getActivity(this, 0, new Intent(this, SettingsActivity.class), PendingIntent.FLAG_ONE_SHOT)).setBlocking(true).establish();
+ this.descriptor = builder.setSession("Daedalus").setConfigureIntent(PendingIntent.getActivity(this, 0, new Intent(this, SettingsActivity.class), PendingIntent.FLAG_ONE_SHOT)).establish();
if (statisticQuery) {
Log.d(TAG, "Starting count queries");
+ FileDescriptor[] pipes = Os.pipe();
+ mInterruptFd = pipes[0];
+ mBlockFd = pipes[1];
FileInputStream inputStream = new FileInputStream(descriptor.getFileDescriptor());
FileOutputStream outputStream = new FileOutputStream(descriptor.getFileDescriptor());
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 7f32eba..fcdc8bf 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -21,7 +21,7 @@
测试域名:
耗时:
DNS 服务器:
- 解析结果:
+ 解析地址:
查询失败。超时或未知的主机。
google.com
访问 CuteDNS!
@@ -35,4 +35,5 @@
正在前往 GitHub Releases 页面……
统计 DNS 查询次数
DNS 查询次数:
+ 当前 Android API 无法支持所有功能。
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1a8e3cf..78d8d6c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -20,7 +20,7 @@
Test domain:
Time used:
DNS server:
- Resolved address:
+ Address:
Query failed. Timeout or unknown hostname.
google.com
Visit iTXTech
@@ -33,6 +33,7 @@
Check update
Check update via GitHub
Going to the GitHub Releases page …
- Count number of DNS queries
+ Count DNS query times
DNS Query times:
+ The current Android API can not support all the features.
diff --git a/app/src/main/res/xml/perf_settings.xml b/app/src/main/res/xml/perf_settings.xml
index f4386be..4982d36 100644
--- a/app/src/main/res/xml/perf_settings.xml
+++ b/app/src/main/res/xml/perf_settings.xml
@@ -26,7 +26,7 @@
android:title="@string/settings_boot"
android:defaultValue="false"/>