diff --git a/app/build.gradle b/app/build.gradle
index d33049c3e..4138b7ab8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "fr.gouv.etalab.mastodon"
minSdkVersion 16
targetSdkVersion 28
- versionCode 241
- versionName "1.73.0"
+ versionCode 242
+ versionName "1.74.0-beta-1"
multiDexEnabled true
}
dexOptions {
@@ -51,7 +51,7 @@ allprojects {
}
ext.supportLibraryVersion = '28.0.0'
ext.glideLibraryVersion = '4.8.0'
-ext.conscryptLibraryVersion = '1.3.0'
+ext.conscryptLibraryVersion = '2.0.0'
ext.evernoteLibraryVersion = '1.2.6'
ext.gsonLibraryVersion = '2.8.2'
ext.guavaLibraryVersion = '24.1-android'
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 61df87715..ccff500b2 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
@@ -44,7 +44,6 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
-import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -736,11 +735,12 @@ public class LoginActivity extends BaseActivity {
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_login, menu);
- CheckBox checkBox= (CheckBox) menu.findItem(R.id.action_custom_tabs).getActionView();
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
boolean embedded_browser = sharedpreferences.getBoolean(Helper.SET_EMBEDDED_BROWSER, true);
- checkBox.setChecked(!embedded_browser);
- return true;
+ menu.findItem(R.id.action_custom_tabs).setChecked(!embedded_browser);
+ boolean security_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
+ menu.findItem(R.id.action_provider).setChecked(security_provider);
+ return super.onCreateOptionsMenu(menu);
}
@Override
@@ -767,6 +767,13 @@ public class LoginActivity extends BaseActivity {
editor.putBoolean(Helper.SET_EMBEDDED_BROWSER, !item.isChecked());
editor.apply();
return false;
+ }else if(id == R.id.action_provider){
+ item.setChecked(!item.isChecked());
+ SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ editor.putBoolean(Helper.SET_SECURITY_PROVIDER, item.isChecked());
+ editor.apply();
+ return false;
}
return super.onOptionsItemSelected(item);
}
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/MainApplication.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/MainApplication.java
index f330c5159..a361a3002 100644
--- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/MainApplication.java
+++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/MainApplication.java
@@ -46,9 +46,12 @@ import fr.gouv.etalab.mastodon.jobs.NotificationsSyncJob;
public class MainApplication extends MultiDexApplication {
+ private static MainApplication app;
+
@Override
public void onCreate() {
super.onCreate();
+ app = this;
//System.setProperty("java.net.preferIPv4Stack" , "true");
JobManager.create(this).addJobCreator(new ApplicationJob());
NotificationsSyncJob.schedule(false);
@@ -71,7 +74,7 @@ public class MainApplication extends MultiDexApplication {
SUPPORTED_LOCALES.add(Locale.getDefault());
}
LocaleChanger.initialize(getApplicationContext(), SUPPORTED_LOCALES);
- }catch (Exception ignored){ignored.printStackTrace();}
+ }catch (Exception ignored){}
//Initialize upload service
UploadService.NAMESPACE = BuildConfig.APPLICATION_ID;
Toasty.Config.getInstance()
@@ -85,10 +88,15 @@ public class MainApplication extends MultiDexApplication {
}
+
@Override
protected void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(MainApplication.this);
}
+
+ public static MainApplication getApp(){
+ return app;
+ }
}
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/TLSSocketFactory.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/TLSSocketFactory.java
index 2930adabd..543d3130f 100644
--- a/app/src/main/java/fr/gouv/etalab/mastodon/client/TLSSocketFactory.java
+++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/TLSSocketFactory.java
@@ -1,6 +1,8 @@
package fr.gouv.etalab.mastodon.client;
+import android.content.SharedPreferences;
+
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
@@ -12,6 +14,9 @@ import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
+import fr.gouv.etalab.mastodon.activities.MainApplication;
+import fr.gouv.etalab.mastodon.helper.Helper;
+
/**
* Created by Thomas on 29/08/2017.
*
@@ -78,8 +83,16 @@ public class TLSSocketFactory extends SSLSocketFactory {
}
private Socket enableTLSOnSocket(Socket socket) {
- if(socket != null && (socket instanceof SSLSocket)) {
- ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
+ if((socket instanceof SSLSocket)) {
+ boolean security_provider = false;
+ try {
+ SharedPreferences sharedpreferences = MainApplication.getApp().getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
+ security_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
+ }catch (Exception ignored){}
+ if( security_provider)
+ ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2", "TLSv1.3"});
+ else
+ ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
}
return socket;
}
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java
index 460d27e55..13a9c336b 100644
--- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java
+++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java
@@ -223,6 +223,19 @@ public class SettingsFragment extends Fragment {
}
});
+ boolean patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
+ final CheckBox set_security_provider = rootView.findViewById(R.id.set_security_provider);
+ set_security_provider.setChecked(patch_provider);
+
+ set_security_provider.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ editor.putBoolean(Helper.SET_SECURITY_PROVIDER, set_security_provider.isChecked());
+ editor.apply();
+ }
+ });
+
boolean display_card = sharedpreferences.getBoolean(Helper.SET_DISPLAY_CARD, false);
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 8f8acc335..055436a70 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
@@ -158,6 +158,7 @@ import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.HashTagActivity;
import fr.gouv.etalab.mastodon.activities.LoginActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity;
+import fr.gouv.etalab.mastodon.activities.MainApplication;
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.activities.WebviewActivity;
import fr.gouv.etalab.mastodon.asynctasks.RemoveAccountAsyncTask;
@@ -368,6 +369,7 @@ public class Helper {
public static final String SET_TRUNCATE_TOOTS_SIZE = "set_truncate_toots_size";
public static final String SET_ART_WITH_NSFW = "set_art_with_nsfw";
public static final String SET_OPTIMIZE_LOADING = "set_optimize_loading";
+ public static final String SET_SECURITY_PROVIDER = "set_security_provider";
//End points
public static final String EP_AUTHORIZE = "/oauth/authorize";
@@ -2947,9 +2949,17 @@ public class Helper {
public static void installProvider(){
+
+ boolean patch_provider = true;
try {
- Security.insertProviderAt(Conscrypt.newProvider(),1);
+ Context ctx = MainApplication.getApp();
+ SharedPreferences sharedpreferences = ctx.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
+ patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
}catch (Exception ignored){}
+ if( patch_provider)
+ try {
+ Security.insertProviderAt(Conscrypt.newProvider(),1);
+ }catch (Exception ignored){}
}
diff --git a/app/src/main/res/layout-sw600dp/fragment_settings.xml b/app/src/main/res/layout-sw600dp/fragment_settings.xml
index a0d026003..d83155000 100644
--- a/app/src/main/res/layout-sw600dp/fragment_settings.xml
+++ b/app/src/main/res/layout-sw600dp/fragment_settings.xml
@@ -479,7 +479,13 @@
android:text="@string/set_optimize_loading"
android:layout_height="wrap_content" />
-
+
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 465eae5c0..25aebe4ea 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -484,6 +484,13 @@
android:layout_height="wrap_content" />
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9ffa7336b..7c1c60fc6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -878,6 +878,7 @@
Compact
Console
Set display mode
+ Patch the Security Provider