Remove context dependency

This commit is contained in:
Thomas 2023-01-26 16:47:28 +01:00
parent 3d1d9534be
commit 7119c12467
10 changed files with 137 additions and 50 deletions

View file

@ -171,8 +171,8 @@ dependencies {
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0'
implementation 'com.google.android.exoplayer:extension-mediasession:2.18.1' implementation 'com.google.android.exoplayer:extension-mediasession:2.18.1'
implementation "com.github.mabbas007:TagsEditText:1.0.5" implementation "com.github.mabbas007:TagsEditText:1.0.5"
implementation "net.gotev:uploadservice:4.5.1" implementation "net.gotev:uploadservice:4.7.0"
implementation "net.gotev:uploadservice-okhttp:4.5.1" implementation "net.gotev:uploadservice-okhttp:4.7.0"
implementation 'androidx.media:media:1.6.0' implementation 'androidx.media:media:1.6.0'
implementation 'com.github.mancj:MaterialSearchBar:0.8.5' implementation 'com.github.mancj:MaterialSearchBar:0.8.5'

View file

@ -15,8 +15,11 @@ package app.fedilab.android;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Build;
import android.os.StrictMode; import android.os.StrictMode;
import android.webkit.WebView; import android.webkit.WebView;
@ -26,6 +29,9 @@ import androidx.preference.PreferenceManager;
import com.google.android.material.color.DynamicColors; import com.google.android.material.color.DynamicColors;
import net.gotev.uploadservice.UploadServiceConfig;
import net.gotev.uploadservice.observer.request.GlobalRequestObserver;
import org.acra.ACRA; import org.acra.ACRA;
import org.acra.ReportField; import org.acra.ReportField;
import org.acra.config.CoreConfigurationBuilder; import org.acra.config.CoreConfigurationBuilder;
@ -33,24 +39,21 @@ import org.acra.config.DialogConfigurationBuilder;
import org.acra.config.MailSenderConfigurationBuilder; import org.acra.config.MailSenderConfigurationBuilder;
import org.acra.data.StringFormat; import org.acra.data.StringFormat;
import java.util.Objects;
import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ThemeHelper;
import app.fedilab.android.peertube.services.GlobalUploadObserver;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;
public class MainApplication extends MultiDexApplication { public class MainApplication extends MultiDexApplication {
public static String UPLOAD_CHANNEL_ID = "upload_info_peertube"; public static String UPLOAD_CHANNEL_ID = "upload_info_peertube";
private static MainApplication app;
private WebView webView; private WebView webView;
public static MainApplication getApp() {
return app;
}
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
app = this;
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MainApplication.this); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MainApplication.this);
try { try {
webView = new WebView(this); webView = new WebView(this);
@ -69,6 +72,11 @@ public class MainApplication extends MultiDexApplication {
} catch (Exception ignored) { } catch (Exception ignored) {
} }
} }
createNotificationChannel();
UploadServiceConfig.initialize(MainApplication.this, UPLOAD_CHANNEL_ID, true);
new GlobalRequestObserver(this, new GlobalUploadObserver());
} }
@ -111,4 +119,15 @@ public class MainApplication extends MultiDexApplication {
); );
} }
} }
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(UPLOAD_CHANNEL_ID,
getString(R.string.notification_channel_name),
NotificationManager.IMPORTANCE_LOW);
channel.setSound(null, null);
((NotificationManager) Objects.requireNonNull(getSystemService(Context.NOTIFICATION_SERVICE))).createNotificationChannel(channel);
}
}
} }

View file

@ -33,6 +33,10 @@ import androidx.preference.PreferenceManager;
import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.one.EmojiOneProvider; import com.vanniktech.emoji.one.EmojiOneProvider;
import org.conscrypt.Conscrypt;
import java.security.Security;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ThemeHelper;
@ -44,14 +48,24 @@ public class BaseActivity extends AppCompatActivity {
public static int currentThemeId; public static int currentThemeId;
static { static {
Helper.installProvider();
EmojiManager.install(new EmojiOneProvider()); EmojiManager.install(new EmojiOneProvider());
} }
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
boolean patch_provider = true;
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
try {
patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
} catch (Exception ignored) {
}
if (patch_provider) {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (Exception ignored) {
}
}
String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME)); String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME));
//Default automatic switch //Default automatic switch
if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) { if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) {

View file

@ -33,6 +33,10 @@ import androidx.preference.PreferenceManager;
import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.one.EmojiOneProvider; import com.vanniktech.emoji.one.EmojiOneProvider;
import org.conscrypt.Conscrypt;
import java.security.Security;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ThemeHelper;
@ -42,14 +46,24 @@ import app.fedilab.android.mastodon.helper.ThemeHelper;
public class BaseAlertDialogActivity extends AppCompatActivity { public class BaseAlertDialogActivity extends AppCompatActivity {
static { static {
Helper.installProvider();
EmojiManager.install(new EmojiOneProvider()); EmojiManager.install(new EmojiOneProvider());
} }
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean patch_provider = true;
try {
patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
} catch (Exception ignored) {
}
if (patch_provider) {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (Exception ignored) {
}
}
String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME)); String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME));
//Default automatic switch //Default automatic switch
if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) { if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) {

View file

@ -33,6 +33,10 @@ import androidx.preference.PreferenceManager;
import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.one.EmojiOneProvider; import com.vanniktech.emoji.one.EmojiOneProvider;
import org.conscrypt.Conscrypt;
import java.security.Security;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ThemeHelper;
@ -42,13 +46,23 @@ import app.fedilab.android.mastodon.helper.ThemeHelper;
public class BaseBarActivity extends AppCompatActivity { public class BaseBarActivity extends AppCompatActivity {
static { static {
Helper.installProvider();
EmojiManager.install(new EmojiOneProvider()); EmojiManager.install(new EmojiOneProvider());
} }
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean patch_provider = true;
try {
patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
} catch (Exception ignored) {
}
if (patch_provider) {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (Exception ignored) {
}
}
String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME)); String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME));
//Default automatic switch //Default automatic switch
if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) { if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) {

View file

@ -15,12 +15,20 @@ package app.fedilab.android.mastodon.activities;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceManager;
import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.one.EmojiOneProvider; import com.vanniktech.emoji.one.EmojiOneProvider;
import org.conscrypt.Conscrypt;
import java.security.Security;
import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.Helper;
@ -29,9 +37,23 @@ public class BaseFragmentActivity extends FragmentActivity {
static { static {
Helper.installProvider();
EmojiManager.install(new EmojiOneProvider()); EmojiManager.install(new EmojiOneProvider());
} }
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
boolean patch_provider = true;
try {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
} catch (Exception ignored) {
}
if (patch_provider) {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (Exception ignored) {
}
}
super.onCreate(savedInstanceState);
}
} }

View file

@ -33,6 +33,10 @@ import androidx.preference.PreferenceManager;
import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.one.EmojiOneProvider; import com.vanniktech.emoji.one.EmojiOneProvider;
import org.conscrypt.Conscrypt;
import java.security.Security;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ThemeHelper;
@ -42,13 +46,23 @@ import app.fedilab.android.mastodon.helper.ThemeHelper;
public class BaseTransparentActivity extends AppCompatActivity { public class BaseTransparentActivity extends AppCompatActivity {
static { static {
Helper.installProvider();
EmojiManager.install(new EmojiOneProvider()); EmojiManager.install(new EmojiOneProvider());
} }
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean patch_provider = true;
try {
patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
} catch (Exception ignored) {
}
if (patch_provider) {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (Exception ignored) {
}
}
String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME)); String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME));
//Default automatic switch //Default automatic switch
if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) { if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) {

View file

@ -104,8 +104,6 @@ import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import org.conscrypt.Conscrypt;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -120,7 +118,6 @@ import java.net.PasswordAuthentication;
import java.net.Proxy; import java.net.Proxy;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.Security;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -143,7 +140,6 @@ import java.util.regex.Pattern;
import app.fedilab.android.BaseMainActivity; import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.BuildConfig; import app.fedilab.android.BuildConfig;
import app.fedilab.android.MainApplication;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.activities.LoginActivity; import app.fedilab.android.activities.LoginActivity;
import app.fedilab.android.activities.MainActivity; import app.fedilab.android.activities.MainActivity;
@ -453,22 +449,7 @@ public class Helper {
} }
} }
public static void installProvider() {
boolean patch_provider = true;
try {
Context ctx = MainApplication.getApp();
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ctx);
patch_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
} catch (Exception ignored) {
}
if (patch_provider) {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (Exception ignored) {
}
}
}
/*** /***
* Check if the user is connected to Internet * Check if the user is connected to Internet

View file

@ -19,6 +19,7 @@ import static app.fedilab.android.peertube.activities.PeertubeMainActivity.userM
import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.DataType.MY_CHANNELS; import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.DataType.MY_CHANNELS;
import static app.fedilab.android.peertube.helper.Helper.peertubeInformation; import static app.fedilab.android.peertube.helper.Helper.peertubeInformation;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Intent; import android.content.Intent;
@ -333,9 +334,17 @@ public class PeertubeUploadActivity extends BaseBarActivity {
}); });
} }
@SuppressLint("UnspecifiedImmutableFlag")
UploadNotificationConfig getNotificationConfig(String uploadId) { UploadNotificationConfig getNotificationConfig(String uploadId) {
PendingIntent clickIntent = PendingIntent.getActivity( PendingIntent clickIntent;
PeertubeUploadActivity.this, 1, new Intent(this, PeertubeEditUploadActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
clickIntent = PendingIntent.getActivity(
PeertubeUploadActivity.this, 1, new Intent(this, PeertubeEditUploadActivity.class), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
} else {
clickIntent = PendingIntent.getActivity(
PeertubeUploadActivity.this, 1, new Intent(this, PeertubeEditUploadActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
}
final boolean autoClear = false; final boolean autoClear = false;
final boolean clearOnAction = true; final boolean clearOnAction = true;

View file

@ -132,13 +132,13 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sepia_element_nsfw_label"> app:layout_constraintTop_toBottomOf="@+id/sepia_element_nsfw_label">
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_nsfw_yes" android:id="@+id/sepia_element_nsfw_yes"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/yes" /> android:text="@string/yes" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_nsfw_no" android:id="@+id/sepia_element_nsfw_no"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -169,31 +169,31 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal">
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_published_date_any" android:id="@+id/sepia_element_published_date_any"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/any" /> android:text="@string/any" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_published_date_today" android:id="@+id/sepia_element_published_date_today"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/today" /> android:text="@string/today" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_published_date_last_7_days" android:id="@+id/sepia_element_published_date_last_7_days"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/last_7_days" /> android:text="@string/last_7_days" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_published_date_last_30_days" android:id="@+id/sepia_element_published_date_last_30_days"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/last_30_days" /> android:text="@string/last_30_days" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_published_date_last_365_days" android:id="@+id/sepia_element_published_date_last_365_days"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -225,25 +225,25 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal">
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_duration_any" android:id="@+id/sepia_element_duration_any"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/any" /> android:text="@string/any" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_duration_short" android:id="@+id/sepia_element_duration_short"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/duration_short" /> android:text="@string/duration_short" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_duration_medium" android:id="@+id/sepia_element_duration_medium"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/duration_medium" /> android:text="@string/duration_medium" />
<RadioButton <com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/sepia_element_duration_long" android:id="@+id/sepia_element_duration_long"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -354,9 +354,9 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sepia_element_one_of_tags_label" /> app:layout_constraintTop_toBottomOf="@+id/sepia_element_one_of_tags_label" />
<Button <com.google.android.material.button.MaterialButton
android:id="@+id/apply_filter" android:id="@+id/apply_filter"
style="@style/Base.Widget.AppCompat.Button.Colored" style="@style/Widget.Material3.Button.ElevatedButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/apply_filter" android:text="@string/apply_filter"