disable jetifier after upgrading ACRA and delegate adapters

This commit is contained in:
Torsten Grote 2022-04-11 14:52:35 -03:00 committed by Hans-Christoph Steiner
parent c463b3c9ed
commit eca567d7a1
13 changed files with 163 additions and 59 deletions

View File

@ -152,6 +152,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.palette:palette:1.0.0'
implementation 'androidx.work:work-runtime:2.4.0'
implementation 'com.google.guava:guava:31.0-android' // somehow needed for work-runtime to function
implementation 'com.google.android.material:material:1.3.0'
@ -160,8 +161,9 @@ dependencies {
implementation 'info.guardianproject.panic:panic:1.0'
implementation 'commons-io:commons-io:2.6'
implementation 'commons-net:commons-net:3.6'
implementation 'ch.acra:acra:4.9.1'
implementation 'com.hannesdorfmann:adapterdelegates3:3.0.1'
implementation 'ch.acra:acra-mail:5.9.0'
implementation 'ch.acra:acra-dialog:5.9.0'
implementation 'com.hannesdorfmann:adapterdelegates4:4.3.2'
implementation "org.slf4j:slf4j-android:1.7.36"
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'

View File

@ -44,4 +44,8 @@ public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
# This is necessary so that RemoteWorkManager can be initialized (also marked with @Keep)
-keep class androidx.work.multiprocess.RemoteWorkManagerClient {
public <init>(...);
}
-keep class org.acra.config.MailSenderConfiguration {
public <init>(...);
}

View File

@ -47,8 +47,9 @@ import com.bumptech.glide.Glide;
import org.acra.ACRA;
import org.acra.ReportField;
import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;
import org.acra.config.CoreConfigurationBuilder;
import org.acra.config.DialogConfigurationBuilder;
import org.acra.config.MailSenderConfigurationBuilder;
import org.apache.commons.net.util.SubnetUtils;
import org.fdroid.fdroid.Preferences.ChangeListener;
import org.fdroid.fdroid.Preferences.Theme;
@ -81,26 +82,6 @@ import androidx.core.content.ContextCompat;
import info.guardianproject.netcipher.NetCipher;
import info.guardianproject.netcipher.proxy.OrbotHelper;
@ReportsCrashes(mailTo = BuildConfig.ACRA_REPORT_EMAIL,
mode = ReportingInteractionMode.DIALOG,
reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class,
reportSenderFactoryClasses = org.fdroid.fdroid.acra.CrashReportSenderFactory.class,
customReportContent = {
ReportField.USER_COMMENT,
ReportField.PACKAGE_NAME,
ReportField.APP_VERSION_NAME,
ReportField.ANDROID_VERSION,
ReportField.PRODUCT,
ReportField.BRAND,
ReportField.PHONE_MODEL,
ReportField.DISPLAY,
ReportField.TOTAL_MEM_SIZE,
ReportField.AVAILABLE_MEM_SIZE,
ReportField.CUSTOM_DATA,
ReportField.STACK_TRACE_HASH,
ReportField.STACK_TRACE,
}
)
public class FDroidApp extends Application implements androidx.work.Configuration.Provider {
private static final String TAG = "FDroidApp";
@ -302,7 +283,34 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
Preferences preferences = Preferences.get();
if (preferences.promptToSendCrashReports()) {
ACRA.init(this);
ACRA.init(this, new CoreConfigurationBuilder()
.withReportContent(
ReportField.USER_COMMENT,
ReportField.PACKAGE_NAME,
ReportField.APP_VERSION_NAME,
ReportField.ANDROID_VERSION,
ReportField.PRODUCT,
ReportField.BRAND,
ReportField.PHONE_MODEL,
ReportField.DISPLAY,
ReportField.TOTAL_MEM_SIZE,
ReportField.AVAILABLE_MEM_SIZE,
ReportField.CUSTOM_DATA,
ReportField.STACK_TRACE_HASH,
ReportField.STACK_TRACE
)
.withPluginConfigurations(
new MailSenderConfigurationBuilder()
.withMailTo(BuildConfig.ACRA_REPORT_EMAIL)
.build(),
new DialogConfigurationBuilder()
.withResTheme(R.style.Theme_App)
.withTitle(getString(R.string.crash_dialog_title))
.withText(getString(R.string.crash_dialog_text))
.withCommentPrompt(getString(R.string.crash_dialog_comment_prompt))
.build()
)
);
if (isAcraProcess() || HidingManager.isHidden(this)) {
return;
}

View File

@ -1,26 +1,43 @@
package org.fdroid.fdroid.acra;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.EditText;
import org.acra.dialog.BaseCrashReportDialog;
import org.acra.dialog.CrashReportDialog;
import org.acra.dialog.CrashReportDialogHelper;
import org.fdroid.fdroid.R;
import androidx.appcompat.app.AlertDialog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.textfield.TextInputLayout;
public class CrashReportActivity extends BaseCrashReportDialog
public class CrashReportActivity extends CrashReportDialog
implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
private static final String STATE_COMMENT = "comment";
private CrashReportDialogHelper helper;
private EditText comment;
@Override
protected void init(Bundle savedInstanceState) {
super.init(savedInstanceState);
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
helper = new CrashReportDialogHelper(this, getIntent());
if (savedInstanceState != null) {
comment.setText(savedInstanceState.getString(STATE_COMMENT));
}
}
@Override
protected void setDialog(@NonNull android.app.AlertDialog alertDialog) {
super.setDialog(alertDialog);
}
@NonNull
@Override
protected android.app.AlertDialog getDialog() {
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(R.string.crash_dialog_title)
.setView(R.layout.crash_report_dialog)
@ -30,13 +47,11 @@ public class CrashReportActivity extends BaseCrashReportDialog
dialog.setCanceledOnTouchOutside(false);
dialog.setOnDismissListener(this);
dialog.show();
TextInputLayout commentLayout = dialog.findViewById(android.R.id.input);
comment = commentLayout.getEditText();
if (savedInstanceState != null) {
comment.setText(savedInstanceState.getString(STATE_COMMENT));
}
dialog.setOnShowListener(d -> {
TextInputLayout commentLayout = dialog.findViewById(android.R.id.input);
comment = commentLayout.getEditText();
});
return dialog;
}
@Override
@ -45,11 +60,11 @@ public class CrashReportActivity extends BaseCrashReportDialog
}
@Override
public void onClick(DialogInterface dialog, int which) {
public void onClick(@NonNull DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
sendCrash(comment.getText().toString(), "");
helper.sendCrash(comment.getText().toString(), "");
} else {
cancelReports();
helper.cancelReports();
}
finish();
}

View File

@ -5,25 +5,30 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import androidx.annotation.NonNull;
import org.acra.ReportField;
import org.acra.collections.ImmutableSet;
import org.acra.collector.CrashReportData;
import org.acra.config.ACRAConfiguration;
import org.acra.config.ConfigUtils;
import org.acra.config.CoreConfiguration;
import org.acra.config.MailSenderConfiguration;
import org.acra.data.CrashReportData;
import org.acra.sender.ReportSender;
import androidx.annotation.NonNull;
import java.util.List;
public class CrashReportSender implements ReportSender {
private final ACRAConfiguration config;
private final CoreConfiguration config;
private final MailSenderConfiguration mailConfig;
public CrashReportSender(ACRAConfiguration config) {
public CrashReportSender(CoreConfiguration config) {
this.config = config;
this.mailConfig = ConfigUtils.getPluginConfiguration(config, MailSenderConfiguration.class);
}
public void send(@NonNull Context context, @NonNull CrashReportData errorContent) {
Intent emailIntent = new Intent("android.intent.action.SENDTO");
emailIntent.setData(Uri.fromParts("mailto", this.config.mailTo(), null));
emailIntent.setData(Uri.fromParts("mailto", mailConfig.getMailTo(), null));
emailIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String[] subjectBody = this.buildSubjectBody(context, errorContent);
emailIntent.putExtra("android.intent.extra.SUBJECT", subjectBody[0]);
@ -32,7 +37,7 @@ public class CrashReportSender implements ReportSender {
}
private String[] buildSubjectBody(Context context, CrashReportData errorContent) {
ImmutableSet<ReportField> fields = this.config.getReportFields();
List<ReportField> fields = this.config.getReportContent();
if (fields.isEmpty()) {
return new String[]{"No ACRA Report Fields found."};
}
@ -41,10 +46,10 @@ public class CrashReportSender implements ReportSender {
StringBuilder builder = new StringBuilder();
for (ReportField field : fields) {
builder.append(field.toString()).append('=');
builder.append(errorContent.get(field));
builder.append(errorContent.getString(field));
builder.append('\n');
if ("STACK_TRACE".equals(field.toString())) {
String stackTrace = errorContent.get(field);
String stackTrace = errorContent.getString(field);
if (stackTrace != null) {
subject = context.getPackageName() + ": "
+ stackTrace.substring(0, stackTrace.indexOf('\n'));

View File

@ -2,7 +2,7 @@ package org.fdroid.fdroid.acra;
import android.content.Context;
import org.acra.config.ACRAConfiguration;
import org.acra.config.CoreConfiguration;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderFactory;
@ -11,7 +11,7 @@ import androidx.annotation.NonNull;
public class CrashReportSenderFactory implements ReportSenderFactory {
@NonNull
@Override
public ReportSender create(@NonNull Context context, @NonNull ACRAConfiguration acraConfiguration) {
return new CrashReportSender(acraConfiguration);
public ReportSender create(@NonNull Context context, @NonNull CoreConfiguration coreConfiguration) {
return new CrashReportSender(coreConfiguration);
}
}

View File

@ -9,7 +9,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.view.ViewGroup;
import com.hannesdorfmann.adapterdelegates3.AdapterDelegatesManager;
import com.hannesdorfmann.adapterdelegates4.AdapterDelegatesManager;
import org.fdroid.fdroid.AppUpdateStatusManager;
import org.fdroid.fdroid.data.App;

View File

@ -2,7 +2,7 @@ package org.fdroid.fdroid.views.updates.items;
import android.view.ViewGroup;
import com.hannesdorfmann.adapterdelegates3.AdapterDelegate;
import com.hannesdorfmann.adapterdelegates4.AdapterDelegate;
import org.fdroid.fdroid.AppUpdateStatusManager;
import org.fdroid.fdroid.R;

View File

@ -2,7 +2,7 @@ package org.fdroid.fdroid.views.updates.items;
import android.view.ViewGroup;
import com.hannesdorfmann.adapterdelegates3.AdapterDelegate;
import com.hannesdorfmann.adapterdelegates4.AdapterDelegate;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App;

View File

@ -2,7 +2,7 @@ package org.fdroid.fdroid.views.updates.items;
import android.view.ViewGroup;
import com.hannesdorfmann.adapterdelegates3.AdapterDelegate;
import com.hannesdorfmann.adapterdelegates4.AdapterDelegate;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App;

View File

@ -7,7 +7,7 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.hannesdorfmann.adapterdelegates3.AdapterDelegate;
import com.hannesdorfmann.adapterdelegates4.AdapterDelegate;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.UpdateService;

View File

@ -1,5 +1,5 @@
org.gradle.jvmargs=-Xms1g -Xmx2g -XX:MaxPermSize=2g
android.enableJetifier=true
android.enableJetifier=false
android.useAndroidX=true
kotlin.code.style=official

View File

@ -219,6 +219,11 @@
<sha256 value="9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36" origin="Generated by Gradle because artifact wasn't signed"/>
</artifact>
</component>
<component group="androidx.annotation" name="annotation" version="1.3.0">
<artifact name="annotation-1.3.0.jar">
<sha256 value="97dc45afefe3a1e421da42b8b6e9f90491477c45fc6178203e3a5e8a05ee8553" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.annotation" name="annotation-experimental" version="1.0.0">
<artifact name="annotation-experimental-1.0.0.aar">
<sha256 value="b219d2b568e7e4ba534e09f8c2fd242343df6ccbdfbbe938846f5d740e6b0b11" origin="Generated by Gradle because artifact wasn't signed"/>
@ -655,6 +660,11 @@
<sha256 value="fe321062a6e4e168b9c2b39a1137564c8784a2e5849402729768d5d7c4d972ef" origin="Generated by Gradle because artifact wasn't signed"/>
</artifact>
</component>
<component group="androidx.recyclerview" name="recyclerview" version="1.2.1">
<artifact name="recyclerview-1.2.1.aar">
<sha256 value="a1ea0329ee6d938305dfd0f8ce5c48dea2aac14e5606d23e7fb60afcfb655d6e" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.room" name="room-common" version="2.2.5">
<artifact name="room-common-2.2.5.jar">
<sha256 value="2b130dd4a1d3d91b6701ed33096d389f01c4fc1197a7acd6b91724ddc5acfc06" origin="Generated by Gradle because artifact wasn't signed"/>
@ -926,6 +936,21 @@
<sha256 value="68b010ca532615ccfe212310e38cfd32f6ef93804d5a389be797dd67bef8afa4" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="ch.acra" name="acra-core" version="5.9.0">
<artifact name="acra-core-5.9.0.aar">
<sha256 value="929c19db277d9066f887be95e424f4b8c803bc4d25145dca354c32557ec12281" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="ch.acra" name="acra-dialog" version="5.9.0">
<artifact name="acra-dialog-5.9.0.aar">
<sha256 value="d505d708b99d10362b311d44e1bcbc1c93f8cdc37ceef665731eee5345248e20" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="ch.acra" name="acra-mail" version="5.9.0">
<artifact name="acra-mail-5.9.0.aar">
<sha256 value="63879364ebbd5482776af749dff79624fb367ec61dd595f6f2169adecc0b9f91" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="ch.qos.logback" name="logback-classic" version="1.2.10">
<artifact name="logback-classic-1.2.10.jar">
<sha256 value="3160ae988af82c8bf3024ddbe034a82da98bb186fd09e76c50543c5b9da5cc5e" origin="Generated by Gradle"/>
@ -1944,6 +1969,11 @@
<sha256 value="2e0b3ecd698026429c74851eaece6cc7db11898904fb1f0bd801b43a6c71c0e4" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.auto" name="auto-common" version="1.2">
<artifact name="auto-common-1.2.jar">
<sha256 value="326d674b411ea67505273f9ade5311c15bca50644b5211a6c309c9aee590a20a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.auto" name="auto-parent" version="3">
<artifact name="auto-parent-3.pom">
<pgp value="e376140124bed4e3c06d227581c27de945332233"/>
@ -1969,6 +1999,16 @@
<sha256 value="51752efb14151ec2d39c8581dadce8ef8b7c58b90f5eaca3f596998acb1ea87c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.auto.service" name="auto-service" version="1.0.1">
<artifact name="auto-service-1.0.1.jar">
<sha256 value="88d469a5392dc2a292dfa20432591a584c29fae417cfd88b72620f35ec795acf" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.auto.service" name="auto-service-annotations" version="1.0.1">
<artifact name="auto-service-annotations-1.0.1.jar">
<sha256 value="c7bec54b7b5588b5967e870341091c5691181d954cf2039f1bf0a6eeb837473b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.auto.value" name="auto-value-annotations" version="1.6.2">
<artifact name="auto-value-annotations-1.6.2.jar">
<pgp value="c7be5bcc9fec15518cfda882b0f3710fa64900e7"/>
@ -2090,6 +2130,11 @@
<sha256 value="baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.errorprone" name="error_prone_annotations" version="2.7.1">
<artifact name="error_prone_annotations-2.7.1.jar">
<sha256 value="cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.errorprone" name="error_prone_check_api" version="2.2.0">
<artifact name="error_prone_check_api-2.2.0.jar">
<sha256 value="51b04b313b3ba1d48c4e23536ba4125d11c75d0013d43ad8eca6c0aa42d616ed" origin="Generated by Gradle"/>
@ -2185,6 +2230,16 @@
<sha256 value="e6dd072f9d3fe02a4600688380bd422bdac184caf6fe2418cfdd0934f09432aa" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.guava" name="guava" version="31.0-android">
<artifact name="guava-31.0-android.jar">
<sha256 value="51058fa8a57eb3d2f906b7bef13fdca5da3c59947c224cb9eea67a235499718d" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.guava" name="guava" version="31.0.1-jre">
<artifact name="guava-31.0.1-jre.jar">
<sha256 value="d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.guava" name="guava-parent" version="19.0">
<artifact name="guava-parent-19.0.pom">
<sha256 value="3b76ff43ecdf10f74da36e4aae2b470c9d063e053c5ca026f5512ae94f1c3e10" origin="Generated by Gradle"/>
@ -2380,6 +2435,11 @@
<sha256 value="86fa3be4d2ddde5f902952be4c9c5210edf22db329437cf88728bf5031a3caae" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.hannesdorfmann" name="adapterdelegates4" version="4.3.2">
<artifact name="adapterdelegates4-4.3.2.aar">
<sha256 value="ff2e9c16489e76a14c963021bcbae3d9b845f5b46016e49f6f9e78cbe1625c39" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.ibm.icu" name="icu4j" version="53.1">
<artifact name="icu4j-53.1.jar">
<pgp value="cb3190ca7842439e57f3712e44ce7bf2825ea2cd"/>
@ -4229,6 +4289,11 @@
<sha256 value="9e231b66e9d714bcda291e6a7a725de4ef64fa51f0de47b1154c1f7998120e26" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.checkerframework" name="checker-compat-qual" version="2.5.5">
<artifact name="checker-compat-qual-2.5.5.jar">
<sha256 value="11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.checkerframework" name="checker-qual" version="2.0.0">
<artifact name="checker-qual-2.0.0.jar">
<sha256 value="fc8441632f5fa5537492c9f026d1c8b1adb6a7796f46031b04b4cc0622427995" origin="Generated by Gradle"/>
@ -4252,6 +4317,11 @@
<sha256 value="dc4cd438a36462d013c2338c8e206d102a322a00f33729e8955ee219859c9ede" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.checkerframework" name="checker-qual" version="3.12.0">
<artifact name="checker-qual-3.12.0.jar">
<sha256 value="ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.checkerframework" name="checker-qual" version="3.5.0">
<artifact name="checker-qual-3.5.0.jar">
<sha256 value="729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4" origin="Generated by Gradle"/>