From d695dfc69229a03fcc740c8671882b6b68d77cff Mon Sep 17 00:00:00 2001 From: stom79 Date: Sat, 20 Jan 2018 09:46:28 +0100 Subject: [PATCH] Allows to define the proxy --- app/src/main/AndroidManifest.xml | 3 + .../mastodon/activities/BaseMainActivity.java | 4 + .../mastodon/activities/LoginActivity.java | 3 + .../mastodon/activities/ProxyActivity.java | 83 ++++++++++++++++++- .../mastodon/client/HttpsConnection.java | 6 +- .../gouv/etalab/mastodon/helper/Helper.java | 1 + app/src/main/res/layout/activity_proxy.xml | 31 +++++-- app/src/main/res/menu/main.xml | 4 + app/src/main/res/menu/main_login.xml | 4 + app/src/main/res/values/strings.xml | 17 ++-- 10 files changed, 143 insertions(+), 13 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d60a87bd1..3df00a36d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -178,6 +178,9 @@ + = 23 ){ if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java index 45b317cba..3da6d105c 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java @@ -390,6 +390,9 @@ public class LoginActivity extends BaseActivity { }else if(id == R.id.action_privacy){ Intent intent = new Intent(getApplicationContext(), PrivacyActivity.class); startActivity(intent); + }else if(id == R.id.action_proxy){ + Intent intent = new Intent(getApplicationContext(), ProxyActivity.class); + startActivity(intent); } return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ProxyActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ProxyActivity.java index 1773019d1..b5e46f7a9 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ProxyActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ProxyActivity.java @@ -16,11 +16,28 @@ package fr.gouv.etalab.mastodon.activities; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.MenuItem; +import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.Spinner; + +import java.lang.reflect.Proxy; + import fr.gouv.etalab.mastodon.R; +import fr.gouv.etalab.mastodon.helper.Helper; + +import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT; +import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION; /** @@ -30,7 +47,7 @@ import fr.gouv.etalab.mastodon.R; public class ProxyActivity extends BaseActivity { - + private int count2; @Override protected void onCreate(Bundle savedInstanceState) { @@ -43,6 +60,70 @@ public class ProxyActivity extends BaseActivity { if( getSupportActionBar() != null) getSupportActionBar().hide(); + final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + + //Enable proxy + boolean enable_proxy = sharedpreferences.getBoolean(Helper.SET_PROXY_ENABLED, false); + final CheckBox set_enable_proxy = findViewById(R.id.enable_proxy); + set_enable_proxy.setChecked(enable_proxy); + set_enable_proxy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_PROXY_ENABLED, set_enable_proxy.isChecked()); + editor.apply(); + } + }); + + Button save = findViewById(R.id.set_proxy_save); + + final EditText host = findViewById(R.id.host); + final EditText port = findViewById(R.id.port); + final EditText proxy_login = findViewById(R.id.proxy_login); + final EditText proxy_password = findViewById(R.id.proxy_password); + + count2 = 0; + final Spinner proxy_type = findViewById(R.id.type); + ArrayAdapter adapterTrans = ArrayAdapter.createFromResource(ProxyActivity.this, + R.array.proxy_type, android.R.layout.simple_spinner_item); + proxy_type.setAdapter(adapterTrans); + + proxy_type.setSelection(sharedpreferences.getInt(Helper.SET_PROXY_TYPE, 0)); + proxy_type.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + if( count2 > 0){ + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putInt(Helper.SET_PROXY_TYPE, position); + editor.apply(); + }else { + count2++; + } + } + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + + + save.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + String hostVal = host.getText().toString().trim(); + String portVal = port.getText().toString().trim(); + String proxy_loginVal = proxy_login.getText().toString().trim(); + String proxy_passwordVal = proxy_password.getText().toString().trim(); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(Helper.SET_PROXY_HOST, hostVal); + editor.putInt(Helper.SET_PROXY_PORT, Integer.parseInt(portVal)); + editor.putString(Helper.SET_PROXY_LOGIN, proxy_loginVal); + editor.putString(Helper.SET_PROXY_PASSWORD, proxy_passwordVal); + editor.apply(); + finish(); + } + }); } @Override diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java index e3a377f93..44d88f837 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java @@ -78,11 +78,15 @@ public class HttpsConnection { this.context = context; sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); boolean proxyEnabled = sharedpreferences.getBoolean(Helper.SET_PROXY_ENABLED, false); + int type = sharedpreferences.getInt(Helper.SET_PROXY_TYPE, 0); proxy = null; if( proxyEnabled ){ String host = sharedpreferences.getString(Helper.SET_PROXY_HOST, "127.0.0.1"); int port = sharedpreferences.getInt(Helper.SET_PROXY_PORT, 8118); - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); + if( type == 0 ) + proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); + else + proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(host, port)); final String login = sharedpreferences.getString(Helper.SET_PROXY_LOGIN, null); final String pwd = sharedpreferences.getString(Helper.SET_PROXY_PASSWORD, null); if( login != null) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index f5fa46ee2..f81d48ae3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -271,6 +271,7 @@ public class Helper { //Proxy public static final String SET_PROXY_ENABLED = "set_proxy_enabled"; + public static final String SET_PROXY_TYPE = "set_proxy_type"; public static final String SET_PROXY_HOST = "set_proxy_host"; public static final String SET_PROXY_PORT = "set_proxy_port"; public static final String SET_PROXY_LOGIN = "set_proxy_login"; diff --git a/app/src/main/res/layout/activity_proxy.xml b/app/src/main/res/layout/activity_proxy.xml index a98c15b43..22f7ac4c9 100644 --- a/app/src/main/res/layout/activity_proxy.xml +++ b/app/src/main/res/layout/activity_proxy.xml @@ -10,12 +10,23 @@ android:layout_width="match_parent" android:layout_height="300dp"> - + android:layout_height="wrap_content" + android:orientation="horizontal"> + + + +