Updated to IntelliJ IDEA 2018.1 RC (AS3.0)
This commit is contained in:
parent
f79d6086f5
commit
0c253ddc0b
@ -1,4 +1,5 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
apply plugin: 'io.fabric'
|
||||||
|
|
||||||
def gitCommit = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
|
def gitCommit = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
|
||||||
|
|
||||||
@ -14,8 +15,6 @@ android {
|
|||||||
|
|
||||||
buildConfigField "String", "BUILD_TIME", "\"${System.currentTimeMillis()}\""
|
buildConfigField "String", "BUILD_TIME", "\"${System.currentTimeMillis()}\""
|
||||||
buildConfigField "String", "GIT_COMMIT", "\"${gitCommit}\""
|
buildConfigField "String", "GIT_COMMIT", "\"${gitCommit}\""
|
||||||
|
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
@ -27,32 +26,39 @@ android {
|
|||||||
checkReleaseBuilds false
|
checkReleaseBuilds false
|
||||||
abortOnError false
|
abortOnError false
|
||||||
}
|
}
|
||||||
|
applicationVariants.all { variant ->
|
||||||
android.applicationVariants.all { variant ->
|
variant.outputs.all {
|
||||||
variant.outputs.each { output ->
|
outputFileName = outputFileName.replace("app", "${defaultConfig.applicationId}_${defaultConfig.versionName}_${gitCommit}")
|
||||||
def outputFile = output.outputFile
|
|
||||||
if (outputFile != null && outputFile.name.endsWith('.apk')) {
|
|
||||||
def fileName = outputFile.name.replace("app", "${defaultConfig.applicationId}_${defaultConfig.versionName}_${gitCommit}")
|
|
||||||
output.outputFile = new File(outputFile.parent, fileName)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
//Support
|
||||||
compile 'com.android.support:appcompat-v7:27.0.2'
|
implementation 'com.android.support:appcompat-v7:27.1.0'
|
||||||
compile 'com.android.support:design:27.0.2'
|
implementation 'com.android.support:design:27.1.0'
|
||||||
compile 'com.android.support:support-v4:27.0.2'
|
implementation 'com.android.support:support-v4:27.1.0'
|
||||||
compile 'com.android.support:percent:27.0.2'
|
implementation 'com.android.support:percent:27.1.0'
|
||||||
compile 'com.android.support:cardview-v7:27.0.2'
|
implementation 'com.android.support:cardview-v7:27.1.0'
|
||||||
|
//DNS
|
||||||
compile 'org.pcap4j:pcap4j-core:1.7.3'
|
implementation 'org.pcap4j:pcap4j-core:1.7.3'
|
||||||
compile 'org.pcap4j:pcap4j-packetfactory-static:1.7.3'
|
implementation 'org.pcap4j:pcap4j-packetfactory-static:1.7.3'
|
||||||
compile 'de.measite.minidns:minidns-core:0.2.4'
|
implementation 'de.measite.minidns:minidns-core:0.2.4'
|
||||||
compile 'com.google.code.gson:gson:2.8.2'
|
implementation 'com.google.code.gson:gson:2.8.2'
|
||||||
|
//Analytics
|
||||||
compile 'com.google.firebase:firebase-crash:11.0.4'
|
android.applicationVariants.all { v ->
|
||||||
|
if (v.buildType.name == "release") {
|
||||||
|
implementation 'com.google.firebase:firebase-core:12.0.0'
|
||||||
|
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
android.applicationVariants.all { v ->
|
||||||
|
if (v.buildType.name == "release"){
|
||||||
|
apply plugin: 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.google.gms.google-services'
|
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
"project_info": {
|
|
||||||
"project_number": "",
|
|
||||||
"project_id": ""
|
|
||||||
},
|
|
||||||
"client": [
|
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "org.itxtech.daedalus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "",
|
|
||||||
"client_type": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_id": "",
|
|
||||||
"client_type": 1,
|
|
||||||
"android_info": {
|
|
||||||
"package_name": "org.itxtech.daedalus",
|
|
||||||
"certificate_hash": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"analytics_service": {
|
|
||||||
"status": 2,
|
|
||||||
"analytics_property": {
|
|
||||||
"tracking_id": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"appinvite_service": {
|
|
||||||
"status": 1,
|
|
||||||
"other_platform_oauth_client": []
|
|
||||||
},
|
|
||||||
"ads_service": {
|
|
||||||
"status": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"configuration_version": "1"
|
|
||||||
}
|
|
@ -12,7 +12,6 @@ import android.net.VpnService;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import com.google.firebase.crash.FirebaseCrash;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonParseException;
|
import com.google.gson.JsonParseException;
|
||||||
@ -43,14 +42,6 @@ import java.util.List;
|
|||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*/
|
*/
|
||||||
public class Daedalus extends Application {
|
public class Daedalus extends Application {
|
||||||
static {
|
|
||||||
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
|
||||||
@Override
|
|
||||||
public void uncaughtException(Thread t, Throwable e) {
|
|
||||||
FirebaseCrash.report(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String SHORTCUT_ID_ACTIVATE = "shortcut_activate";
|
private static final String SHORTCUT_ID_ACTIVATE = "shortcut_activate";
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import android.support.v4.content.ContextCompat;
|
|||||||
import android.support.v4.graphics.drawable.DrawableCompat;
|
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.View;
|
|
||||||
import org.itxtech.daedalus.Daedalus;
|
import org.itxtech.daedalus.Daedalus;
|
||||||
import org.itxtech.daedalus.R;
|
import org.itxtech.daedalus.R;
|
||||||
import org.itxtech.daedalus.fragment.ConfigFragment;
|
import org.itxtech.daedalus.fragment.ConfigFragment;
|
||||||
@ -61,12 +60,7 @@ public class ConfigActivity extends AppCompatActivity {
|
|||||||
Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
|
Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
|
||||||
DrawableCompat.setTint(wrappedDrawable, Color.WHITE);
|
DrawableCompat.setTint(wrappedDrawable, Color.WHITE);
|
||||||
toolbar.setNavigationIcon(drawable);
|
toolbar.setNavigationIcon(drawable);
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
toolbar.setNavigationOnClickListener(v -> onBackPressed());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
onBackPressed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
toolbar.setOnMenuItemClickListener(fragment);
|
toolbar.setOnMenuItemClickListener(fragment);
|
||||||
toolbar.inflateMenu(R.menu.custom_config);
|
toolbar.inflateMenu(R.menu.custom_config);
|
||||||
|
|
||||||
@ -81,7 +75,7 @@ public class ConfigActivity extends AppCompatActivity {
|
|||||||
public void onPostCreate(Bundle savedInstanceState) {
|
public void onPostCreate(Bundle savedInstanceState) {
|
||||||
super.onPostCreate(savedInstanceState);
|
super.onPostCreate(savedInstanceState);
|
||||||
|
|
||||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_config);
|
Toolbar toolbar = findViewById(R.id.toolbar_config);
|
||||||
switch (getIntent().getIntExtra(LAUNCH_ACTION_FRAGMENT, LAUNCH_FRAGMENT_DNS_SERVER)) {
|
switch (getIntent().getIntExtra(LAUNCH_ACTION_FRAGMENT, LAUNCH_FRAGMENT_DNS_SERVER)) {
|
||||||
case LAUNCH_FRAGMENT_DNS_SERVER:
|
case LAUNCH_FRAGMENT_DNS_SERVER:
|
||||||
toolbar.setTitle(R.string.config_dns_server);
|
toolbar.setTitle(R.string.config_dns_server);
|
||||||
|
@ -42,12 +42,7 @@ public class AboutFragment extends ToolbarFragment {
|
|||||||
mWebView.setBackgroundColor(0);
|
mWebView.setBackgroundColor(0);
|
||||||
mWebView.addJavascriptInterface(this, "JavascriptInterface");
|
mWebView.addJavascriptInterface(this, "JavascriptInterface");
|
||||||
|
|
||||||
mWebView.setOnLongClickListener(new View.OnLongClickListener() {
|
mWebView.setOnLongClickListener(v -> true);
|
||||||
@Override
|
|
||||||
public boolean onLongClick(View view) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (Locale.getDefault().getLanguage().equals("zh")) {
|
if (Locale.getDefault().getLanguage().equals("zh")) {
|
||||||
mWebView.loadUrl("file:///android_asset/about_html/index_zh.html");
|
mWebView.loadUrl("file:///android_asset/about_html/index_zh.html");
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package org.itxtech.daedalus.fragment;
|
package org.itxtech.daedalus.fragment;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.EditTextPreference;
|
import android.preference.EditTextPreference;
|
||||||
import android.preference.Preference;
|
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -41,30 +39,21 @@ public class DNSServerConfigFragment extends ConfigFragment {
|
|||||||
View view = super.onCreateView(inflater, container, savedInstanceState);
|
View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
|
||||||
EditTextPreference serverName = (EditTextPreference) findPreference("serverName");
|
EditTextPreference serverName = (EditTextPreference) findPreference("serverName");
|
||||||
serverName.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
serverName.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
EditTextPreference serverAddress = (EditTextPreference) findPreference("serverAddress");
|
EditTextPreference serverAddress = (EditTextPreference) findPreference("serverAddress");
|
||||||
serverAddress.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
serverAddress.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
EditTextPreference serverPort = (EditTextPreference) findPreference("serverPort");
|
EditTextPreference serverPort = (EditTextPreference) findPreference("serverPort");
|
||||||
serverPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
serverPort.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -118,12 +107,9 @@ public class DNSServerConfigFragment extends ConfigFragment {
|
|||||||
if (index != ConfigActivity.ID_NONE) {
|
if (index != ConfigActivity.ID_NONE) {
|
||||||
new AlertDialog.Builder(getActivity())
|
new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.notice_delete_confirm_prompt)
|
.setTitle(R.string.notice_delete_confirm_prompt)
|
||||||
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
|
||||||
@Override
|
Daedalus.configurations.getCustomDNSServers().remove(index);
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
getActivity().finish();
|
||||||
Daedalus.configurations.getCustomDNSServers().remove(index);
|
|
||||||
getActivity().finish();
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.setNegativeButton(android.R.string.no, null)
|
.setNegativeButton(android.R.string.no, null)
|
||||||
.create()
|
.create()
|
||||||
|
@ -2,6 +2,7 @@ package org.itxtech.daedalus.fragment;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
@ -70,16 +71,11 @@ public class DNSServersFragment extends ToolbarFragment {
|
|||||||
});
|
});
|
||||||
itemTouchHelper.attachToRecyclerView(recyclerView);
|
itemTouchHelper.attachToRecyclerView(recyclerView);
|
||||||
|
|
||||||
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab_add_server);
|
FloatingActionButton fab = view.findViewById(R.id.fab_add_server);
|
||||||
fab.setOnClickListener(new View.OnClickListener() {
|
fab.setOnClickListener(v -> startActivity(new Intent(getActivity(), ConfigActivity.class)
|
||||||
@Override
|
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE)
|
||||||
public void onClick(View v) {
|
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_DNS_SERVER)
|
||||||
startActivity(new Intent(getActivity(), ConfigActivity.class)
|
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)));
|
||||||
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE)
|
|
||||||
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_DNS_SERVER)
|
|
||||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +117,7 @@ public class DNSServersFragment extends ToolbarFragment {
|
|||||||
|
|
||||||
private class DNSServerAdapter extends RecyclerView.Adapter<ViewHolder> {
|
private class DNSServerAdapter extends RecyclerView.Adapter<ViewHolder> {
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||||
CustomDNSServer server = Daedalus.configurations.getCustomDNSServers().get(position);
|
CustomDNSServer server = Daedalus.configurations.getCustomDNSServers().get(position);
|
||||||
holder.setIndex(position);
|
holder.setIndex(position);
|
||||||
holder.textViewName.setText(server.getName());
|
holder.textViewName.setText(server.getName());
|
||||||
@ -134,7 +130,8 @@ public class DNSServersFragment extends ToolbarFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
@NonNull
|
||||||
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_server, parent, false);
|
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_server, parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
@ -147,8 +144,8 @@ public class DNSServersFragment extends ToolbarFragment {
|
|||||||
|
|
||||||
ViewHolder(View view) {
|
ViewHolder(View view) {
|
||||||
super(view);
|
super(view);
|
||||||
textViewName = (TextView) view.findViewById(R.id.textView_custom_dns_name);
|
textViewName = view.findViewById(R.id.textView_custom_dns_name);
|
||||||
textViewAddress = (TextView) view.findViewById(R.id.textView_custom_dns_address);
|
textViewAddress = view.findViewById(R.id.textView_custom_dns_address);
|
||||||
view.setOnClickListener(this);
|
view.setOnClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,9 +64,9 @@ public class DNSTestFragment extends ToolbarFragment {
|
|||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.fragment_dns_test, container, false);
|
View view = inflater.inflate(R.layout.fragment_dns_test, container, false);
|
||||||
|
|
||||||
final TextView textViewTestInfo = (TextView) view.findViewById(R.id.textView_test_info);
|
final TextView textViewTestInfo = view.findViewById(R.id.textView_test_info);
|
||||||
|
|
||||||
final Spinner spinnerServerChoice = (Spinner) view.findViewById(R.id.spinner_server_choice);
|
final Spinner spinnerServerChoice = view.findViewById(R.id.spinner_server_choice);
|
||||||
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, DNSServerHelper.getAllServers());
|
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, DNSServerHelper.getAllServers());
|
||||||
spinnerServerChoice.setAdapter(spinnerArrayAdapter);
|
spinnerServerChoice.setAdapter(spinnerArrayAdapter);
|
||||||
spinnerServerChoice.setSelection(DNSServerHelper.getPosition(DNSServerHelper.getPrimary()));
|
spinnerServerChoice.setSelection(DNSServerHelper.getPosition(DNSServerHelper.getPrimary()));
|
||||||
@ -93,11 +93,11 @@ public class DNSTestFragment extends ToolbarFragment {
|
|||||||
add(new Type("DLV", Record.TYPE.DLV));
|
add(new Type("DLV", Record.TYPE.DLV));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
final Spinner spinnerType = (Spinner) view.findViewById(R.id.spinner_type);
|
final Spinner spinnerType = view.findViewById(R.id.spinner_type);
|
||||||
ArrayAdapter<Type> typeAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, types);
|
ArrayAdapter<Type> typeAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, types);
|
||||||
spinnerType.setAdapter(typeAdapter);
|
spinnerType.setAdapter(typeAdapter);
|
||||||
|
|
||||||
final AutoCompleteTextView textViewTestDomain = (AutoCompleteTextView) view.findViewById(R.id.autoCompleteTextView_test_url);
|
final AutoCompleteTextView textViewTestDomain = view.findViewById(R.id.autoCompleteTextView_test_url);
|
||||||
ArrayAdapter autoCompleteArrayAdapter = new ArrayAdapter<>(Daedalus.getInstance(), android.R.layout.simple_list_item_1, Daedalus.DEFAULT_TEST_DOMAINS);
|
ArrayAdapter autoCompleteArrayAdapter = new ArrayAdapter<>(Daedalus.getInstance(), android.R.layout.simple_list_item_1, Daedalus.DEFAULT_TEST_DOMAINS);
|
||||||
textViewTestDomain.setAdapter(autoCompleteArrayAdapter);
|
textViewTestDomain.setAdapter(autoCompleteArrayAdapter);
|
||||||
|
|
||||||
@ -197,23 +197,16 @@ public class DNSTestFragment extends ToolbarFragment {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
final Button startTestBut = (Button) view.findViewById(R.id.button_start_test);
|
final Button startTestBut = view.findViewById(R.id.button_start_test);
|
||||||
startTestBut.setOnClickListener(new View.OnClickListener() {
|
startTestBut.setOnClickListener(v -> {
|
||||||
@Override
|
startTestBut.setEnabled(false);
|
||||||
public void onClick(View v) {
|
InputMethodManager imm = (InputMethodManager) Daedalus.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
/*Snackbar.make(v, R.string.notice_start_test, Snackbar.LENGTH_SHORT)
|
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
||||||
.setAction("Action", null).show();*/
|
textViewTestInfo.setText("");
|
||||||
startTestBut.setEnabled(false);
|
|
||||||
|
|
||||||
InputMethodManager imm = (InputMethodManager) Daedalus.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);
|
if (mThread == null) {
|
||||||
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
mThread = new Thread(mRunnable);
|
||||||
|
mThread.start();
|
||||||
textViewTestInfo.setText("");
|
|
||||||
|
|
||||||
if (mThread == null) {
|
|
||||||
mThread = new Thread(mRunnable);
|
|
||||||
mThread.start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -39,59 +39,40 @@ public class GlobalConfigFragment extends PreferenceFragment {
|
|||||||
primaryServer.setEntries(DNSServerHelper.getNames(Daedalus.getInstance()));
|
primaryServer.setEntries(DNSServerHelper.getNames(Daedalus.getInstance()));
|
||||||
primaryServer.setEntryValues(DNSServerHelper.getIds());
|
primaryServer.setEntryValues(DNSServerHelper.getIds());
|
||||||
primaryServer.setSummary(DNSServerHelper.getDescription(primaryServer.getValue(), Daedalus.getInstance()));
|
primaryServer.setSummary(DNSServerHelper.getDescription(primaryServer.getValue(), Daedalus.getInstance()));
|
||||||
primaryServer.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
primaryServer.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary(DNSServerHelper.getDescription((String) newValue, Daedalus.getInstance()));
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary(DNSServerHelper.getDescription((String) newValue, Daedalus.getInstance()));
|
|
||||||
/*Snackbar.make(getView(), R.string.notice_need_restart, Snackbar.LENGTH_LONG)
|
|
||||||
.setAction("Action", null).show();*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ListPreference secondaryServer = (ListPreference) findPreference("secondary_server");
|
ListPreference secondaryServer = (ListPreference) findPreference("secondary_server");
|
||||||
secondaryServer.setEntries(DNSServerHelper.getNames(Daedalus.getInstance()));
|
secondaryServer.setEntries(DNSServerHelper.getNames(Daedalus.getInstance()));
|
||||||
secondaryServer.setEntryValues(DNSServerHelper.getIds());
|
secondaryServer.setEntryValues(DNSServerHelper.getIds());
|
||||||
secondaryServer.setSummary(DNSServerHelper.getDescription(secondaryServer.getValue(), Daedalus.getInstance()));
|
secondaryServer.setSummary(DNSServerHelper.getDescription(secondaryServer.getValue(), Daedalus.getInstance()));
|
||||||
secondaryServer.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
secondaryServer.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary(DNSServerHelper.getDescription((String) newValue, Daedalus.getInstance()));
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary(DNSServerHelper.getDescription((String) newValue, Daedalus.getInstance()));
|
|
||||||
/*Snackbar.make(getView(), R.string.notice_need_restart, Snackbar.LENGTH_LONG)
|
|
||||||
.setAction("Action", null).show();*/
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
EditTextPreference testDNSServers = (EditTextPreference) findPreference("dns_test_servers");
|
EditTextPreference testDNSServers = (EditTextPreference) findPreference("dns_test_servers");
|
||||||
testDNSServers.setSummary(testDNSServers.getText());
|
testDNSServers.setSummary(testDNSServers.getText());
|
||||||
testDNSServers.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
testDNSServers.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
EditTextPreference logSize = (EditTextPreference) findPreference("settings_log_size");
|
EditTextPreference logSize = (EditTextPreference) findPreference("settings_log_size");
|
||||||
logSize.setSummary(logSize.getText());
|
logSize.setSummary(logSize.getText());
|
||||||
logSize.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
logSize.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
SwitchPreference darkTheme = (SwitchPreference) findPreference("settings_dark_theme");
|
SwitchPreference darkTheme = (SwitchPreference) findPreference("settings_dark_theme");
|
||||||
darkTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
darkTheme.setOnPreferenceChangeListener((preference, o) -> {
|
||||||
@Override
|
getActivity().startActivity(new Intent(Daedalus.getInstance(), MainActivity.class)
|
||||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
.putExtra(MainActivity.LAUNCH_FRAGMENT, MainActivity.FRAGMENT_SETTINGS)
|
||||||
getActivity().startActivity(new Intent(Daedalus.getInstance(), MainActivity.class)
|
.putExtra(MainActivity.LAUNCH_NEED_RECREATE, true));
|
||||||
.putExtra(MainActivity.LAUNCH_FRAGMENT, MainActivity.FRAGMENT_SETTINGS)
|
return true;
|
||||||
.putExtra(MainActivity.LAUNCH_NEED_RECREATE, true));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||||
@ -104,36 +85,24 @@ public class GlobalConfigFragment extends PreferenceFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SwitchPreference advanced = (SwitchPreference) findPreference("settings_advanced_switch");
|
SwitchPreference advanced = (SwitchPreference) findPreference("settings_advanced_switch");
|
||||||
advanced.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
advanced.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
updateAdvancedOptions((boolean) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
updateAdvancedOptions((boolean) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
findPreference("settings_check_update").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
findPreference("settings_check_update").setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
Daedalus.openUri("https://github.com/iTXTech/Daedalus/releases");
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
return false;
|
||||||
Daedalus.openUri("https://github.com/iTXTech/Daedalus/releases");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
findPreference("settings_issue_tracker").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
findPreference("settings_issue_tracker").setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
Daedalus.openUri("https://github.com/iTXTech/Daedalus/issues");
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
return false;
|
||||||
Daedalus.openUri("https://github.com/iTXTech/Daedalus/issues");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
findPreference("settings_manual").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
findPreference("settings_manual").setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
Daedalus.openUri("https://github.com/iTXTech/Daedalus/wiki");
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
return false;
|
||||||
Daedalus.openUri("https://github.com/iTXTech/Daedalus/wiki");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
updateAdvancedOptions(advanced.isChecked());
|
updateAdvancedOptions(advanced.isChecked());
|
||||||
|
@ -30,15 +30,12 @@ public class HomeFragment extends ToolbarFragment {
|
|||||||
View view = inflater.inflate(R.layout.fragment_main, container, false);
|
View view = inflater.inflate(R.layout.fragment_main, container, false);
|
||||||
|
|
||||||
Button but = view.findViewById(R.id.button_activate);
|
Button but = view.findViewById(R.id.button_activate);
|
||||||
but.setOnClickListener(new View.OnClickListener() {
|
but.setOnClickListener(v -> {
|
||||||
@Override
|
if (DaedalusVpnService.isActivated()) {
|
||||||
public void onClick(View v) {
|
Daedalus.deactivateService(getActivity().getApplicationContext());
|
||||||
if (DaedalusVpnService.isActivated()) {
|
} else {
|
||||||
Daedalus.deactivateService(getActivity().getApplicationContext());
|
startActivity(new Intent(getActivity(), MainActivity.class)
|
||||||
} else {
|
.putExtra(MainActivity.LAUNCH_ACTION, MainActivity.LAUNCH_ACTION_ACTIVATE));
|
||||||
startActivity(new Intent(getActivity(), MainActivity.class)
|
|
||||||
.putExtra(MainActivity.LAUNCH_ACTION, MainActivity.LAUNCH_ACTION_ACTIVATE));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package org.itxtech.daedalus.fragment;
|
|||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@ -12,7 +11,6 @@ import android.os.Handler;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.preference.EditTextPreference;
|
import android.preference.EditTextPreference;
|
||||||
import android.preference.ListPreference;
|
import android.preference.ListPreference;
|
||||||
import android.preference.Preference;
|
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -83,12 +81,9 @@ public class RuleConfigFragment extends ConfigFragment {
|
|||||||
mHandler = new RuleConfigHandler().setView(view);
|
mHandler = new RuleConfigHandler().setView(view);
|
||||||
|
|
||||||
final EditTextPreference ruleName = (EditTextPreference) findPreference("ruleName");
|
final EditTextPreference ruleName = (EditTextPreference) findPreference("ruleName");
|
||||||
ruleName.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
ruleName.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final ListPreference ruleType = (ListPreference) findPreference("ruleType");
|
final ListPreference ruleType = (ListPreference) findPreference("ruleType");
|
||||||
@ -96,127 +91,103 @@ public class RuleConfigFragment extends ConfigFragment {
|
|||||||
String[] values = {"0", "1"};
|
String[] values = {"0", "1"};
|
||||||
ruleType.setEntries(entries);
|
ruleType.setEntries(entries);
|
||||||
ruleType.setEntryValues(values);
|
ruleType.setEntryValues(values);
|
||||||
ruleType.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
ruleType.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary(entries[Integer.parseInt((String) newValue)]);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary(entries[Integer.parseInt((String) newValue)]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final EditTextPreference ruleDownloadUrl = (EditTextPreference) findPreference("ruleDownloadUrl");
|
final EditTextPreference ruleDownloadUrl = (EditTextPreference) findPreference("ruleDownloadUrl");
|
||||||
ruleDownloadUrl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
ruleDownloadUrl.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final EditTextPreference ruleFilename = (EditTextPreference) findPreference("ruleFilename");
|
final EditTextPreference ruleFilename = (EditTextPreference) findPreference("ruleFilename");
|
||||||
ruleFilename.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
ruleFilename.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
preference.setSummary((String) newValue);
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
return true;
|
||||||
preference.setSummary((String) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ClickPreference ruleSync = (ClickPreference) findPreference("ruleSync");
|
ClickPreference ruleSync = (ClickPreference) findPreference("ruleSync");
|
||||||
ruleSync.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
ruleSync.setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
save();
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
if (mThread == null) {
|
||||||
save();
|
Snackbar.make(getView(), R.string.notice_start_download, Snackbar.LENGTH_SHORT).show();
|
||||||
if (mThread == null) {
|
if (ruleDownloadUrl.getText().startsWith("content:/")) {
|
||||||
Snackbar.make(getView(), R.string.notice_start_download, Snackbar.LENGTH_SHORT).show();
|
mThread = new Thread(() -> {
|
||||||
if (ruleDownloadUrl.getText().startsWith("content:/")) {
|
try {
|
||||||
mThread = new Thread(new Runnable() {
|
InputStream inputStream = getActivity().getContentResolver().openInputStream(Uri.parse(ruleDownloadUrl.getText()));
|
||||||
@Override
|
int readLen;
|
||||||
public void run() {
|
byte[] data = new byte[1024];
|
||||||
try {
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||||
InputStream inputStream = getActivity().getContentResolver().openInputStream(Uri.parse(ruleDownloadUrl.getText()));
|
while ((readLen = inputStream.read(data)) != -1) {
|
||||||
int readLen;
|
buffer.write(data, 0, readLen);
|
||||||
byte[] data = new byte[1024];
|
|
||||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
|
||||||
while ((readLen = inputStream.read(data)) != -1) {
|
|
||||||
buffer.write(data, 0, readLen);
|
|
||||||
}
|
|
||||||
inputStream.close();
|
|
||||||
buffer.flush();
|
|
||||||
mHandler.obtainMessage(RuleConfigHandler.MSG_RULE_DOWNLOADED,
|
|
||||||
new RuleData(ruleFilename.getText(), buffer.toByteArray())).sendToTarget();
|
|
||||||
stopThread();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.logException(e);
|
|
||||||
} finally {
|
|
||||||
stopThread();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
inputStream.close();
|
||||||
} else {
|
buffer.flush();
|
||||||
mThread = new Thread(new Runnable() {
|
mHandler.obtainMessage(RuleConfigHandler.MSG_RULE_DOWNLOADED,
|
||||||
@Override
|
new RuleData(ruleFilename.getText(), buffer.toByteArray())).sendToTarget();
|
||||||
public void run() {
|
stopThread();
|
||||||
try {
|
} catch (Exception e) {
|
||||||
URLConnection connection = new URL(ruleDownloadUrl.getText()).openConnection();
|
Logger.logException(e);
|
||||||
InputStream inputStream = connection.getInputStream();
|
} finally {
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
|
stopThread();
|
||||||
StringBuilder builder = new StringBuilder();
|
}
|
||||||
String result;
|
});
|
||||||
while ((result = reader.readLine()) != null) {
|
|
||||||
builder.append("\n").append(result);
|
|
||||||
}
|
|
||||||
reader.close();
|
|
||||||
|
|
||||||
mHandler.obtainMessage(RuleConfigHandler.MSG_RULE_DOWNLOADED,
|
|
||||||
new RuleData(ruleFilename.getText(), builder.toString().getBytes())).sendToTarget();
|
|
||||||
stopThread();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.logException(e);
|
|
||||||
} finally {
|
|
||||||
stopThread();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
mThread.start();
|
|
||||||
} else {
|
} else {
|
||||||
Snackbar.make(getView(), R.string.notice_now_downloading, Snackbar.LENGTH_LONG).show();
|
mThread = new Thread(() -> {
|
||||||
|
try {
|
||||||
|
URLConnection connection = new URL(ruleDownloadUrl.getText()).openConnection();
|
||||||
|
InputStream inputStream = connection.getInputStream();
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
String result;
|
||||||
|
while ((result = reader.readLine()) != null) {
|
||||||
|
builder.append("\n").append(result);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
mHandler.obtainMessage(RuleConfigHandler.MSG_RULE_DOWNLOADED,
|
||||||
|
new RuleData(ruleFilename.getText(), builder.toString().getBytes())).sendToTarget();
|
||||||
|
stopThread();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.logException(e);
|
||||||
|
} finally {
|
||||||
|
stopThread();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return false;
|
mThread.start();
|
||||||
|
} else {
|
||||||
|
Snackbar.make(getView(), R.string.notice_now_downloading, Snackbar.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
ListPreference ruleImportBuildIn = (ListPreference) findPreference("ruleImportBuildIn");
|
ListPreference ruleImportBuildIn = (ListPreference) findPreference("ruleImportBuildIn");
|
||||||
ruleImportBuildIn.setEntries(Rule.getBuildInRuleNames());
|
ruleImportBuildIn.setEntries(Rule.getBuildInRuleNames());
|
||||||
ruleImportBuildIn.setEntryValues(Rule.getBuildInRuleEntries());
|
ruleImportBuildIn.setEntryValues(Rule.getBuildInRuleEntries());
|
||||||
ruleImportBuildIn.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
ruleImportBuildIn.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
Rule rule = Daedalus.RULES.get(Integer.parseInt((String) newValue));
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
ruleName.setText(rule.getName());
|
||||||
Rule rule = Daedalus.RULES.get(Integer.parseInt((String) newValue));
|
ruleName.setSummary(rule.getName());
|
||||||
ruleName.setText(rule.getName());
|
ruleType.setValue(String.valueOf(rule.getType()));
|
||||||
ruleName.setSummary(rule.getName());
|
ruleType.setSummary(Rule.getTypeById(rule.getType()));
|
||||||
ruleType.setValue(String.valueOf(rule.getType()));
|
ruleFilename.setText(rule.getFileName());
|
||||||
ruleType.setSummary(Rule.getTypeById(rule.getType()));
|
ruleFilename.setSummary(rule.getFileName());
|
||||||
ruleFilename.setText(rule.getFileName());
|
ruleDownloadUrl.setText(rule.getDownloadUrl());
|
||||||
ruleFilename.setSummary(rule.getFileName());
|
ruleDownloadUrl.setSummary(rule.getDownloadUrl());
|
||||||
ruleDownloadUrl.setText(rule.getDownloadUrl());
|
return true;
|
||||||
ruleDownloadUrl.setSummary(rule.getDownloadUrl());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ClickPreference ruleImportExternal = (ClickPreference) findPreference("ruleImportExternal");
|
ClickPreference ruleImportExternal = (ClickPreference) findPreference("ruleImportExternal");
|
||||||
ruleImportExternal.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
ruleImportExternal.setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
performFileSearch();
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
} else {
|
||||||
performFileSearch();
|
Snackbar.make(getView(), R.string.notice_legacy_api, Snackbar.LENGTH_LONG).show();
|
||||||
} else {
|
|
||||||
Snackbar.make(getView(), R.string.notice_legacy_api, Snackbar.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -338,15 +309,12 @@ public class RuleConfigFragment extends ConfigFragment {
|
|||||||
if (this.id != ConfigActivity.ID_NONE) {
|
if (this.id != ConfigActivity.ID_NONE) {
|
||||||
new AlertDialog.Builder(getActivity())
|
new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.notice_delete_confirm_prompt)
|
.setTitle(R.string.notice_delete_confirm_prompt)
|
||||||
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
|
||||||
@Override
|
Rule rule = Rule.getRuleById(String.valueOf(RuleConfigFragment.this.id));
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
if (rule != null) {
|
||||||
Rule rule = Rule.getRuleById(String.valueOf(RuleConfigFragment.this.id));
|
rule.removeFromConfig();
|
||||||
if (rule != null) {
|
|
||||||
rule.removeFromConfig();
|
|
||||||
}
|
|
||||||
getActivity().finish();
|
|
||||||
}
|
}
|
||||||
|
getActivity().finish();
|
||||||
})
|
})
|
||||||
.setNegativeButton(android.R.string.no, null)
|
.setNegativeButton(android.R.string.no, null)
|
||||||
.create()
|
.create()
|
||||||
|
@ -2,6 +2,7 @@ package org.itxtech.daedalus.fragment;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
@ -89,15 +90,10 @@ public class RulesFragment extends ToolbarFragment implements Toolbar.OnMenuItem
|
|||||||
itemTouchHelper.attachToRecyclerView(recyclerView);
|
itemTouchHelper.attachToRecyclerView(recyclerView);
|
||||||
|
|
||||||
FloatingActionButton fab = view.findViewById(R.id.fab_add_rule);
|
FloatingActionButton fab = view.findViewById(R.id.fab_add_rule);
|
||||||
fab.setOnClickListener(new View.OnClickListener() {
|
fab.setOnClickListener(v -> startActivity(new Intent(getActivity(), ConfigActivity.class)
|
||||||
@Override
|
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE)
|
||||||
public void onClick(View v) {
|
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_RULE)
|
||||||
startActivity(new Intent(getActivity(), ConfigActivity.class)
|
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)));
|
||||||
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE)
|
|
||||||
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_RULE)
|
|
||||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +168,7 @@ public class RulesFragment extends ToolbarFragment implements Toolbar.OnMenuItem
|
|||||||
|
|
||||||
private class RuleAdapter extends RecyclerView.Adapter<ViewHolder> {
|
private class RuleAdapter extends RecyclerView.Adapter<ViewHolder> {
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||||
Rule rule = getRules().get(position);
|
Rule rule = getRules().get(position);
|
||||||
holder.setId(rule.getId());
|
holder.setId(rule.getId());
|
||||||
holder.textViewName.setText(rule.getName());
|
holder.textViewName.setText(rule.getName());
|
||||||
@ -194,7 +190,8 @@ public class RulesFragment extends ToolbarFragment implements Toolbar.OnMenuItem
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
@NonNull
|
||||||
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_rule, parent, false);
|
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_rule, parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package org.itxtech.daedalus.provider;
|
|||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.system.ErrnoException;
|
import android.system.ErrnoException;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.system.OsConstants;
|
import android.system.OsConstants;
|
||||||
@ -215,6 +216,7 @@ public class TcpProvider extends UdpProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
public Iterator<TcpProvider.WaitingOnSocketPacket> iterator() {
|
public Iterator<TcpProvider.WaitingOnSocketPacket> iterator() {
|
||||||
return list.iterator();
|
return list.iterator();
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package org.itxtech.daedalus.provider;
|
|||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.system.OsConstants;
|
import android.system.OsConstants;
|
||||||
import android.system.StructPollfd;
|
import android.system.StructPollfd;
|
||||||
@ -156,7 +157,7 @@ public class UdpProvider extends Provider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void readPacketFromDevice(FileInputStream inputStream, byte[] packet) throws DaedalusVpnService.VpnNetworkException, SocketException {
|
void readPacketFromDevice(FileInputStream inputStream, byte[] packet) throws DaedalusVpnService.VpnNetworkException {
|
||||||
// Read the outgoing packet from the input stream.
|
// Read the outgoing packet from the input stream.
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
@ -389,6 +390,7 @@ public class UdpProvider extends Provider {
|
|||||||
list.add(wosp);
|
list.add(wosp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
public Iterator<WaitingOnSocketPacket> iterator() {
|
public Iterator<WaitingOnSocketPacket> iterator() {
|
||||||
return list.iterator();
|
return list.iterator();
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,12 @@ import android.content.Context;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v4.graphics.drawable.DrawableCompat;
|
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||||
|
import android.support.v7.widget.AppCompatAutoCompleteTextView;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.AutoCompleteTextView;
|
|
||||||
import org.itxtech.daedalus.R;
|
import org.itxtech.daedalus.R;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -23,7 +23,8 @@ import org.itxtech.daedalus.R;
|
|||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*/
|
*/
|
||||||
public class ClearAutoCompleteTextView extends AutoCompleteTextView implements View.OnTouchListener, View.OnFocusChangeListener, TextWatcher {
|
public class ClearAutoCompleteTextView extends AppCompatAutoCompleteTextView
|
||||||
|
implements View.OnTouchListener, View.OnFocusChangeListener, TextWatcher {
|
||||||
|
|
||||||
private Drawable mClearTextIcon;
|
private Drawable mClearTextIcon;
|
||||||
private OnFocusChangeListener mOnFocusChangeListener;
|
private OnFocusChangeListener mOnFocusChangeListener;
|
||||||
|
13
build.gradle
13
build.gradle
@ -3,10 +3,15 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
|
google()
|
||||||
|
maven {
|
||||||
|
url 'https://maven.fabric.io/public'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||||
classpath 'com.google.gms:google-services:3.0.0'
|
classpath 'com.google.gms:google-services:3.1.1'
|
||||||
|
classpath 'io.fabric.tools:gradle:1.25.1'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
@ -16,9 +21,7 @@ buildscript {
|
|||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
maven {
|
google()
|
||||||
url 'https://maven.google.com'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user