Convert ErrorInfo to Kotlin and use the Parcelize annotation.

This commit is contained in:
Isira Seneviratne 2020-10-04 07:20:28 +05:30
parent 6e68ab19f9
commit 340b92e32b
24 changed files with 87 additions and 102 deletions

View file

@ -8,7 +8,6 @@ import androidx.test.filters.LargeTest;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.report.ErrorActivity.ErrorInfo;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@ -29,10 +28,10 @@ public class ErrorInfoTest {
parcel.setDataPosition(0); parcel.setDataPosition(0);
final ErrorInfo infoFromParcel = ErrorInfo.CREATOR.createFromParcel(parcel); final ErrorInfo infoFromParcel = ErrorInfo.CREATOR.createFromParcel(parcel);
assertEquals(UserAction.USER_REPORT, infoFromParcel.userAction); assertEquals(UserAction.USER_REPORT, infoFromParcel.getUserAction());
assertEquals("youtube", infoFromParcel.serviceName); assertEquals("youtube", infoFromParcel.getServiceName());
assertEquals("request", infoFromParcel.request); assertEquals("request", infoFromParcel.getRequest());
assertEquals(R.string.general_error, infoFromParcel.message); assertEquals(R.string.general_error, infoFromParcel.getMessage());
parcel.recycle(); parcel.recycle();
} }

View file

@ -22,6 +22,7 @@ import org.acra.config.CoreConfigurationBuilder;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.downloader.Downloader; import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.settings.SettingsActivity; import org.schabi.newpipe.settings.SettingsActivity;
import org.schabi.newpipe.util.ExceptionUtils; import org.schabi.newpipe.util.ExceptionUtils;
@ -226,7 +227,7 @@ public class App extends MultiDexApplication {
ace, ace,
null, null,
null, null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
"Could not initialize ACRA crash report", R.string.app_ui_crash)); "Could not initialize ACRA crash report", R.string.app_ui_crash));
} }
} }

View file

@ -23,6 +23,7 @@ import com.grack.nanojson.JsonParserException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -67,7 +68,7 @@ public final class CheckForNewAppVersion {
packageInfo = pm.getPackageInfo(packageName, flags); packageInfo = pm.getPackageInfo(packageName, flags);
} catch (final PackageManager.NameNotFoundException e) { } catch (final PackageManager.NameNotFoundException e) {
ErrorActivity.reportError(application, e, null, null, ErrorActivity.reportError(application, e, null, null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
"Could not find package info", R.string.app_ui_crash)); "Could not find package info", R.string.app_ui_crash));
} }
@ -82,7 +83,7 @@ public final class CheckForNewAppVersion {
c = (X509Certificate) cf.generateCertificate(input); c = (X509Certificate) cf.generateCertificate(input);
} catch (final CertificateException e) { } catch (final CertificateException e) {
ErrorActivity.reportError(application, e, null, null, ErrorActivity.reportError(application, e, null, null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
"Certificate error", R.string.app_ui_crash)); "Certificate error", R.string.app_ui_crash));
} }
@ -94,7 +95,7 @@ public final class CheckForNewAppVersion {
hexString = byte2HexFormatted(publicKey); hexString = byte2HexFormatted(publicKey);
} catch (NoSuchAlgorithmException | CertificateEncodingException e) { } catch (NoSuchAlgorithmException | CertificateEncodingException e) {
ErrorActivity.reportError(application, e, null, null, ErrorActivity.reportError(application, e, null, null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
"Could not retrieve SHA1 key", R.string.app_ui_crash)); "Could not retrieve SHA1 key", R.string.app_ui_crash));
} }

View file

@ -49,6 +49,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.SubtitlesStream; import org.schabi.newpipe.extractor.stream.SubtitlesStream;
import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.settings.NewPipeSettings; import org.schabi.newpipe.settings.NewPipeSettings;
import org.schabi.newpipe.util.FilePickerActivityHelper; import org.schabi.newpipe.util.FilePickerActivityHelper;
@ -602,7 +603,7 @@ public class DownloadDialog extends DialogFragment
Collections.singletonList(e), Collections.singletonList(e),
null, null,
null, null,
ErrorActivity.ErrorInfo ErrorInfo
.make(UserAction.SOMETHING_ELSE, "-", "-", R.string.general_error) .make(UserAction.SOMETHING_ELSE, "-", "-", R.string.general_error)
); );
} }

View file

@ -23,6 +23,7 @@ import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException; import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.ExceptionUtils; import org.schabi.newpipe.util.ExceptionUtils;
import org.schabi.newpipe.util.InfoCache; import org.schabi.newpipe.util.InfoCache;
@ -252,7 +253,7 @@ public abstract class BaseStateFragment<I> extends BaseFragment implements ViewC
} }
ErrorActivity.reportError(getContext(), exception, MainActivity.class, null, ErrorActivity.reportError(getContext(), exception, MainActivity.class, null,
ErrorActivity.ErrorInfo.make(userAction, serviceName == null ? "none" : serviceName, ErrorInfo.make(userAction, serviceName == null ? "none" : serviceName,
request == null ? "none" : request, errorId)); request == null ? "none" : request, errorId));
} }
@ -265,7 +266,7 @@ public abstract class BaseStateFragment<I> extends BaseFragment implements ViewC
/** /**
* Show a SnackBar and only call * Show a SnackBar and only call
* {@link ErrorActivity#reportError(Context, List, Class, View, ErrorActivity.ErrorInfo)} * {@link ErrorActivity#reportError(Context, List, Class, View, ErrorInfo)}
* IF we a find a valid view (otherwise the error screen appears). * IF we a find a valid view (otherwise the error screen appears).
* *
* @param exception List of the exceptions to show * @param exception List of the exceptions to show
@ -291,6 +292,6 @@ public abstract class BaseStateFragment<I> extends BaseFragment implements ViewC
} }
ErrorActivity.reportError(getContext(), exception, MainActivity.class, rootView, ErrorActivity.reportError(getContext(), exception, MainActivity.class, rootView,
ErrorActivity.ErrorInfo.make(userAction, serviceName, request, errorId)); ErrorInfo.make(userAction, serviceName, request, errorId));
} }
} }

View file

@ -27,6 +27,7 @@ import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.settings.tabs.Tab; import org.schabi.newpipe.settings.tabs.Tab;
import org.schabi.newpipe.settings.tabs.TabsManager; import org.schabi.newpipe.settings.tabs.TabsManager;
@ -242,7 +243,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
} }
if (throwable != null) { if (throwable != null) {
ErrorActivity.reportError(context, throwable, null, null, ErrorActivity.ErrorInfo ErrorActivity.reportError(context, throwable, null, null, ErrorInfo
.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash)); .make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
return new BlankFragment(); return new BlankFragment();
} }

View file

@ -92,6 +92,7 @@ import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.PlayQueueItem; import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue; import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.DeviceUtils;
@ -1630,7 +1631,7 @@ public final class VideoDetailFragment
downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog"); downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog");
} catch (final Exception e) { } catch (final Exception e) {
final ErrorActivity.ErrorInfo info = ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, final ErrorInfo info = ErrorInfo.make(UserAction.UI_ERROR,
ServiceList.all() ServiceList.all()
.get(currentInfo .get(currentInfo
.getServiceId()) .getServiceId())

View file

@ -49,6 +49,7 @@ import org.schabi.newpipe.fragments.BackPressable;
import org.schabi.newpipe.fragments.list.BaseListFragment; import org.schabi.newpipe.fragments.list.BaseListFragment;
import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.AnimationUtils; import org.schabi.newpipe.util.AnimationUtils;
import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.Constants;
@ -248,7 +249,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
} catch (final Exception e) { } catch (final Exception e) {
ErrorActivity.reportError(getActivity(), e, requireActivity().getClass(), ErrorActivity.reportError(getActivity(), e, requireActivity().getClass(),
requireActivity().findViewById(android.R.id.content), requireActivity().findViewById(android.R.id.content),
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, ErrorInfo.make(UserAction.UI_ERROR,
"", "",
"", R.string.general_error)); "", R.string.general_error));
} }

View file

@ -34,6 +34,7 @@ import org.schabi.newpipe.player.helper.PlayerHolder;
import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue; import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.settings.SettingsActivity; import org.schabi.newpipe.settings.SettingsActivity;
import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.NavigationHelper;
@ -183,7 +184,7 @@ public class StatisticsPlaylistFragment
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete view history", "Delete view history",
@ -197,7 +198,7 @@ public class StatisticsPlaylistFragment
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete search history", "Delete search history",

View file

@ -27,6 +27,7 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor;
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService; import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.FilePickerActivityHelper; import org.schabi.newpipe.util.FilePickerActivityHelper;
@ -84,7 +85,7 @@ public class SubscriptionsImportFragment extends BaseFragment {
setupServiceVariables(); setupServiceVariables();
if (supportedSources.isEmpty() && currentServiceId != Constants.NO_SERVICE_ID) { if (supportedSources.isEmpty() && currentServiceId != Constants.NO_SERVICE_ID) {
ErrorActivity.reportError(activity, Collections.emptyList(), null, null, ErrorActivity.reportError(activity, Collections.emptyList(), null, null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, ErrorInfo.make(UserAction.SOMETHING_ELSE,
NewPipe.getNameOfService(currentServiceId), NewPipe.getNameOfService(currentServiceId),
"Service don't support importing", R.string.general_error)); "Service don't support importing", R.string.general_error));
activity.finish(); activity.finish();

View file

@ -37,6 +37,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor;
import org.schabi.newpipe.local.subscription.SubscriptionManager; import org.schabi.newpipe.local.subscription.SubscriptionManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.ExceptionUtils; import org.schabi.newpipe.util.ExceptionUtils;
@ -153,7 +154,7 @@ public abstract class BaseImportExportService extends Service {
protected void stopAndReportError(@Nullable final Throwable error, final String request) { protected void stopAndReportError(@Nullable final Throwable error, final String request) {
stopService(); stopService();
final ErrorActivity.ErrorInfo errorInfo = ErrorActivity.ErrorInfo final ErrorInfo errorInfo = ErrorInfo
.make(UserAction.SUBSCRIPTION, "unknown", request, R.string.general_error); .make(UserAction.SUBSCRIPTION, "unknown", request, R.string.general_error);
ErrorActivity.reportError(this, error != null ? Collections.singletonList(error) ErrorActivity.reportError(this, error != null ? Collections.singletonList(error)
: Collections.emptyList(), null, null, errorInfo); : Collections.emptyList(), null, null, errorInfo);

View file

@ -33,7 +33,7 @@ public class AcraReportSender implements ReportSender {
@Override @Override
public void send(@NonNull final Context context, @NonNull final CrashReportData report) { public void send(@NonNull final Context context, @NonNull final CrashReportData report) {
ErrorActivity.reportError(context, report, ErrorActivity.reportError(context, report,
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, "none", ErrorInfo.make(UserAction.UI_ERROR, "none",
"App crash, UI failure", R.string.app_ui_crash)); "App crash, UI failure", R.string.app_ui_crash));
} }
} }

View file

@ -9,8 +9,6 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -22,7 +20,6 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
@ -230,8 +227,8 @@ public class ErrorActivity extends AppCompatActivity {
// normal bugreport // normal bugreport
buildInfo(errorInfo); buildInfo(errorInfo);
if (errorInfo.message != 0) { if (errorInfo.getMessage() != 0) {
errorMessageView.setText(errorInfo.message); errorMessageView.setText(errorInfo.getMessage());
} else { } else {
errorMessageView.setVisibility(View.GONE); errorMessageView.setVisibility(View.GONE);
findViewById(R.id.messageWhatHappenedView).setVisibility(View.GONE); findViewById(R.id.messageWhatHappenedView).setVisibility(View.GONE);
@ -348,12 +345,12 @@ public class ErrorActivity extends AppCompatActivity {
infoLabelView.setText(getString(R.string.info_labels).replace("\\n", "\n")); infoLabelView.setText(getString(R.string.info_labels).replace("\\n", "\n"));
text += getUserActionString(info.userAction) + "\n" text += getUserActionString(info.getUserAction()) + "\n"
+ info.request + "\n" + info.getRequest() + "\n"
+ getContentLanguageString() + "\n" + getContentLanguageString() + "\n"
+ getContentCountryString() + "\n" + getContentCountryString() + "\n"
+ getAppLanguage() + "\n" + getAppLanguage() + "\n"
+ info.serviceName + "\n" + info.getServiceName() + "\n"
+ currentTimeStamp + "\n" + currentTimeStamp + "\n"
+ getPackageName() + "\n" + getPackageName() + "\n"
+ BuildConfig.VERSION_NAME + "\n" + BuildConfig.VERSION_NAME + "\n"
@ -366,12 +363,12 @@ public class ErrorActivity extends AppCompatActivity {
try { try {
return JsonWriter.string() return JsonWriter.string()
.object() .object()
.value("user_action", getUserActionString(errorInfo.userAction)) .value("user_action", getUserActionString(errorInfo.getUserAction()))
.value("request", errorInfo.request) .value("request", errorInfo.getRequest())
.value("content_language", getContentLanguageString()) .value("content_language", getContentLanguageString())
.value("content_country", getContentCountryString()) .value("content_country", getContentCountryString())
.value("app_language", getAppLanguage()) .value("app_language", getAppLanguage())
.value("service", errorInfo.serviceName) .value("service", errorInfo.getServiceName())
.value("package", getPackageName()) .value("package", getPackageName())
.value("version", BuildConfig.VERSION_NAME) .value("version", BuildConfig.VERSION_NAME)
.value("os", getOsString()) .value("os", getOsString())
@ -401,12 +398,12 @@ public class ErrorActivity extends AppCompatActivity {
htmlErrorReport htmlErrorReport
.append("## Exception") .append("## Exception")
.append("\n* __User Action:__ ") .append("\n* __User Action:__ ")
.append(getUserActionString(errorInfo.userAction)) .append(getUserActionString(errorInfo.getUserAction()))
.append("\n* __Request:__ ").append(errorInfo.request) .append("\n* __Request:__ ").append(errorInfo.getRequest())
.append("\n* __Content Country:__ ").append(getContentCountryString()) .append("\n* __Content Country:__ ").append(getContentCountryString())
.append("\n* __Content Language:__ ").append(getContentLanguageString()) .append("\n* __Content Language:__ ").append(getContentLanguageString())
.append("\n* __App Language:__ ").append(getAppLanguage()) .append("\n* __App Language:__ ").append(getAppLanguage())
.append("\n* __Service:__ ").append(errorInfo.serviceName) .append("\n* __Service:__ ").append(errorInfo.getServiceName())
.append("\n* __Version:__ ").append(BuildConfig.VERSION_NAME) .append("\n* __Version:__ ").append(BuildConfig.VERSION_NAME)
.append("\n* __OS:__ ").append(getOsString()).append("\n"); .append("\n* __OS:__ ").append(getOsString()).append("\n");
@ -494,57 +491,4 @@ public class ErrorActivity extends AppCompatActivity {
return df.format(new Date()); return df.format(new Date());
} }
public static class ErrorInfo implements Parcelable {
public static final Parcelable.Creator<ErrorInfo> CREATOR
= new Parcelable.Creator<ErrorInfo>() {
@Override
public ErrorInfo createFromParcel(final Parcel source) {
return new ErrorInfo(source);
}
@Override
public ErrorInfo[] newArray(final int size) {
return new ErrorInfo[size];
}
};
final UserAction userAction;
public final String request;
final String serviceName;
@StringRes
public final int message;
private ErrorInfo(final UserAction userAction, final String serviceName,
final String request, @StringRes final int message) {
this.userAction = userAction;
this.serviceName = serviceName;
this.request = request;
this.message = message;
}
protected ErrorInfo(final Parcel in) {
this.userAction = UserAction.valueOf(in.readString());
this.request = in.readString();
this.serviceName = in.readString();
this.message = in.readInt();
}
public static ErrorInfo make(final UserAction userAction, final String serviceName,
final String request, @StringRes final int message) {
return new ErrorInfo(userAction, serviceName, request, message);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel dest, final int flags) {
dest.writeString(this.userAction.name());
dest.writeString(this.request);
dest.writeString(this.serviceName);
dest.writeInt(this.message);
}
}
} }

View file

@ -0,0 +1,23 @@
package org.schabi.newpipe.report
import android.os.Parcelable
import androidx.annotation.StringRes
import kotlinx.android.parcel.Parcelize
@Parcelize
class ErrorInfo private constructor(
val userAction: UserAction?,
val serviceName: String,
val request: String,
@field:StringRes @param:StringRes val message: Int
) : Parcelable {
companion object {
@JvmStatic
fun make(
userAction: UserAction?,
serviceName: String,
request: String,
@StringRes message: Int
) = ErrorInfo(userAction, serviceName, request, message)
}
}

View file

@ -25,6 +25,7 @@ import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.localization.ContentCountry; import org.schabi.newpipe.extractor.localization.ContentCountry;
import org.schabi.newpipe.extractor.localization.Localization; import org.schabi.newpipe.extractor.localization.Localization;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.FilePickerActivityHelper; import org.schabi.newpipe.util.FilePickerActivityHelper;
import org.schabi.newpipe.util.ZipHelper; import org.schabi.newpipe.util.ZipHelper;
@ -357,7 +358,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
ErrorActivity.reportError(activity, e, ErrorActivity.reportError(activity, e,
activity.getClass(), activity.getClass(),
null, null,
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, ErrorInfo.make(UserAction.UI_ERROR,
"none", "", R.string.app_ui_crash)); "none", "", R.string.app_ui_crash));
} }
} }

View file

@ -10,6 +10,7 @@ import androidx.preference.Preference;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.InfoCache; import org.schabi.newpipe.util.InfoCache;
@ -64,7 +65,7 @@ public class HistorySettingsFragment extends BasePreferenceFragment {
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete playback states", "Delete playback states",
@ -79,7 +80,7 @@ public class HistorySettingsFragment extends BasePreferenceFragment {
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete view history", "Delete view history",
@ -93,7 +94,7 @@ public class HistorySettingsFragment extends BasePreferenceFragment {
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete search history", "Delete search history",
@ -122,7 +123,7 @@ public class HistorySettingsFragment extends BasePreferenceFragment {
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete playback states", "Delete playback states",
@ -148,7 +149,7 @@ public class HistorySettingsFragment extends BasePreferenceFragment {
throwable -> ErrorActivity.reportError(getContext(), throwable -> ErrorActivity.reportError(getContext(),
throwable, throwable,
SettingsActivity.class, null, SettingsActivity.class, null,
ErrorActivity.ErrorInfo.make( ErrorInfo.make(
UserAction.DELETE_FROM_HISTORY, UserAction.DELETE_FROM_HISTORY,
"none", "none",
"Delete search history", "Delete search history",

View file

@ -22,6 +22,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.database.subscription.SubscriptionEntity; import org.schabi.newpipe.database.subscription.SubscriptionEntity;
import org.schabi.newpipe.local.subscription.SubscriptionManager; import org.schabi.newpipe.local.subscription.SubscriptionManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
@ -178,7 +179,7 @@ public class SelectChannelFragment extends DialogFragment {
protected void onError(final Throwable e) { protected void onError(final Throwable e) {
final Activity activity = getActivity(); final Activity activity = getActivity();
ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorActivity.ErrorInfo ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorInfo
.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash)); .make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
} }

View file

@ -19,6 +19,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.ServiceHelper;
@ -114,7 +115,7 @@ public class SelectKioskFragment extends DialogFragment {
protected void onError(final Throwable e) { protected void onError(final Throwable e) {
final Activity activity = getActivity(); final Activity activity = getActivity();
ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorActivity.ErrorInfo ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorInfo
.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash)); .make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
} }

View file

@ -27,6 +27,7 @@ import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager; import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
import org.schabi.newpipe.local.playlist.RemotePlaylistManager; import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import java.util.List; import java.util.List;
@ -114,7 +115,7 @@ public class SelectPlaylistFragment extends DialogFragment {
protected void onError(final Throwable e) { protected void onError(final Throwable e) {
final Activity activity = requireActivity(); final Activity activity = requireActivity();
ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorActivity.ErrorInfo ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorInfo
.make(UserAction.UI_ERROR, "none", "load_playlists", R.string.app_ui_crash)); .make(UserAction.UI_ERROR, "none", "load_playlists", R.string.app_ui_crash));
} }

View file

@ -8,7 +8,7 @@ import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorActivity.ErrorInfo; import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import static org.schabi.newpipe.MainActivity.DEBUG; import static org.schabi.newpipe.MainActivity.DEBUG;

View file

@ -29,6 +29,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.settings.SelectChannelFragment; import org.schabi.newpipe.settings.SelectChannelFragment;
import org.schabi.newpipe.settings.SelectKioskFragment; import org.schabi.newpipe.settings.SelectKioskFragment;
@ -184,7 +185,7 @@ public class ChooseTabsFragment extends Fragment {
if (type == null) { if (type == null) {
ErrorActivity.reportError(requireContext(), ErrorActivity.reportError(requireContext(),
new IllegalStateException("Tab id not found: " + tabId), null, null, new IllegalStateException("Tab id not found: " + tabId), null, null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
"Choosing tabs on settings", 0)); "Choosing tabs on settings", 0));
return; return;
} }

View file

@ -26,6 +26,7 @@ import org.schabi.newpipe.local.history.StatisticsPlaylistFragment;
import org.schabi.newpipe.local.playlist.LocalPlaylistFragment; import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
import org.schabi.newpipe.local.subscription.SubscriptionFragment; import org.schabi.newpipe.local.subscription.SubscriptionFragment;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.ServiceHelper;
@ -483,7 +484,7 @@ public abstract class Tab {
kioskId = service.getKioskList().getDefaultKioskId(); kioskId = service.getKioskList().getDefaultKioskId();
} catch (final ExtractionException e) { } catch (final ExtractionException e) {
ErrorActivity.reportError(context, e, null, null, ErrorActivity.reportError(context, e, null, null,
ErrorActivity.ErrorInfo.make(UserAction.REQUESTED_KIOSK, "none", ErrorInfo.make(UserAction.REQUESTED_KIOSK, "none",
"Loading default kiosk from selected service", 0)); "Loading default kiosk from selected service", 0));
} }
return kioskId; return kioskId;

View file

@ -51,6 +51,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor; import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import java.util.Collections; import java.util.Collections;
@ -298,7 +299,7 @@ public final class ExtractorHelper {
: exception instanceof ParsingException : exception instanceof ParsingException
? R.string.parsing_error : R.string.general_error; ? R.string.parsing_error : R.string.general_error;
ErrorActivity.reportError(handler, context, exception, MainActivity.class, null, ErrorActivity.reportError(handler, context, exception, MainActivity.class, null,
ErrorActivity.ErrorInfo.make(userAction, serviceId == -1 ? "none" ErrorInfo.make(userAction, serviceId == -1 ? "none"
: NewPipe.getNameOfService(serviceId), : NewPipe.getNameOfService(serviceId),
url + (optionalErrorMessage == null ? "" url + (optionalErrorMessage == null ? ""
: optionalErrorMessage), errorId)); : optionalErrorMessage), errorId));

View file

@ -39,6 +39,7 @@ import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.ErrorInfo;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.NavigationHelper;
@ -575,7 +576,7 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
mission.errObject, mission.errObject,
null, null,
null, null,
ErrorActivity.ErrorInfo.make(action, service, request.toString(), reason) ErrorInfo.make(action, service, request.toString(), reason)
); );
} }