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"/>