Merge pull request #357 from theScrabi/ref_crashreport
Refactore crashreport
This commit is contained in:
commit
39ff1cd898
|
@ -32,10 +32,10 @@ android {
|
|||
|
||||
dependencies {
|
||||
testCompile 'junit:junit:4.12'
|
||||
compile 'com.android.support:appcompat-v7:24.2.0'
|
||||
compile 'com.android.support:support-v4:24.2.0'
|
||||
compile 'com.android.support:design:24.2.0'
|
||||
compile 'com.android.support:recyclerview-v7:24.2.0'
|
||||
compile 'com.android.support:appcompat-v7:24.2.1'
|
||||
compile 'com.android.support:support-v4:24.2.1'
|
||||
compile 'com.android.support:design:24.2.1'
|
||||
compile 'com.android.support:recyclerview-v7:24.2.1'
|
||||
compile 'org.jsoup:jsoup:1.8.3'
|
||||
compile 'org.mozilla:rhino:1.7.7'
|
||||
compile 'info.guardianproject.netcipher:netcipher:1.2'
|
||||
|
@ -46,4 +46,5 @@ dependencies {
|
|||
compile 'com.google.code.gson:gson:2.4'
|
||||
compile 'com.nononsenseapps:filepicker:3.0.0'
|
||||
testCompile 'junit:junit:4.12'
|
||||
compile 'ch.acra:acra:4.9.0'
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@
|
|||
android:name=".ExitActivity"
|
||||
android:label="@string/general_error"
|
||||
android:theme="@android:style/Theme.NoDisplay" />
|
||||
<activity android:name=".ErrorActivity" />
|
||||
<activity android:name=".report.ErrorActivity" />
|
||||
|
||||
<!-- giga get related -->
|
||||
<activity
|
||||
|
|
|
@ -42,8 +42,5 @@ public class ActivityCommunicator {
|
|||
// Thumbnail send from VideoItemDetailFragment to BackgroundPlayer
|
||||
public volatile Bitmap backgroundPlayerThumbnail;
|
||||
|
||||
// Sent from any activity to ErrorActivity.
|
||||
public volatile List<Throwable> errorList;
|
||||
public volatile Class returnActivity;
|
||||
public volatile ErrorActivity.ErrorInfo errorInfo;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,13 @@ import android.content.Context;
|
|||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
|
||||
|
||||
import org.acra.ACRA;
|
||||
import org.acra.config.ACRAConfiguration;
|
||||
import org.acra.config.ACRAConfigurationException;
|
||||
import org.acra.config.ConfigurationBuilder;
|
||||
import org.acra.sender.ReportSenderFactory;
|
||||
import org.schabi.newpipe.report.AcraReportSenderFactory;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.settings.SettingsActivity;
|
||||
|
||||
import info.guardianproject.netcipher.NetCipher;
|
||||
|
@ -30,12 +37,28 @@ import info.guardianproject.netcipher.proxy.OrbotHelper;
|
|||
*/
|
||||
|
||||
public class App extends Application {
|
||||
private static final String TAG = App.class.toString();
|
||||
|
||||
private static boolean useTor;
|
||||
|
||||
final Class<? extends ReportSenderFactory>[] reportSenderFactoryClasses
|
||||
= new Class[]{AcraReportSenderFactory.class};
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
// init crashreport
|
||||
try {
|
||||
final ACRAConfiguration acraConfig = new ConfigurationBuilder(this)
|
||||
.setReportSenderFactoryClasses(reportSenderFactoryClasses)
|
||||
.build();
|
||||
ACRA.init(this, acraConfig);
|
||||
} catch(ACRAConfigurationException ace) {
|
||||
ace.printStackTrace();
|
||||
ErrorActivity.reportError(this, ace, null, null,
|
||||
ErrorActivity.ErrorInfo.make(ErrorActivity.SEARCHED,"none",
|
||||
"Could not initialize ACRA crash report", R.string.app_ui_crash));
|
||||
}
|
||||
|
||||
// Initialize image loader
|
||||
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build();
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.schabi.newpipe.extractor.ParsingException;
|
|||
import org.schabi.newpipe.extractor.ServiceList;
|
||||
import org.schabi.newpipe.extractor.StreamingService;
|
||||
import org.schabi.newpipe.info_list.InfoListAdapter;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
|
|
@ -7,8 +7,7 @@ import android.view.View;
|
|||
import com.nostra13.universalimageloader.core.assist.FailReason;
|
||||
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
|
||||
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.extractor.ServiceList;
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,7 +6,7 @@ import android.util.Log;
|
|||
import android.view.View;
|
||||
|
||||
import org.schabi.newpipe.Downloader;
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.ParsingException;
|
||||
import org.schabi.newpipe.extractor.ServiceList;
|
||||
|
|
|
@ -43,7 +43,7 @@ import java.util.Vector;
|
|||
|
||||
import org.schabi.newpipe.ActivityCommunicator;
|
||||
import org.schabi.newpipe.ChannelActivity;
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.ImageErrorLoadingListener;
|
||||
import org.schabi.newpipe.Localization;
|
||||
import org.schabi.newpipe.R;
|
||||
|
|
|
@ -26,7 +26,7 @@ import android.widget.SeekBar;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.settings.SettingsActivity;
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package org.schabi.newpipe.report;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.acra.collector.CrashReportData;
|
||||
import org.acra.sender.ReportSender;
|
||||
import org.acra.sender.ReportSenderException;
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
/**
|
||||
* Created by Christian Schabesberger on 13.09.16.
|
||||
*
|
||||
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||
* AcraReportSender.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* NewPipe is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
public class AcraReportSender implements ReportSender {
|
||||
|
||||
@Override
|
||||
public void send(Context context, CrashReportData report) throws ReportSenderException {
|
||||
ErrorActivity.reportError(context, report,
|
||||
ErrorActivity.ErrorInfo.make(ErrorActivity.UI_ERROR,"none",
|
||||
"App crash, UI failure", R.string.app_ui_crash));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package org.schabi.newpipe.report;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.acra.config.ACRAConfiguration;
|
||||
import org.acra.sender.ReportSender;
|
||||
import org.acra.sender.ReportSenderFactory;
|
||||
import org.schabi.newpipe.report.AcraReportSender;
|
||||
|
||||
/**
|
||||
* Created by Christian Schabesberger on 13.09.16.
|
||||
*
|
||||
* Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org>
|
||||
* AcraReportSenderFactory.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* NewPipe is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
public class AcraReportSenderFactory implements ReportSenderFactory {
|
||||
public ReportSender create(Context context, ACRAConfiguration config) {
|
||||
return new AcraReportSender();
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
package org.schabi.newpipe;
|
||||
package org.schabi.newpipe.report;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
@ -8,6 +8,8 @@ import android.content.Intent;
|
|||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.app.NavUtils;
|
||||
|
@ -24,8 +26,15 @@ import android.widget.Button;
|
|||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.acra.ReportField;
|
||||
import org.acra.collector.CrashReportData;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.schabi.newpipe.ActivityCommunicator;
|
||||
import org.schabi.newpipe.BuildConfig;
|
||||
import org.schabi.newpipe.Downloader;
|
||||
import org.schabi.newpipe.MainActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.Parser;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
|
@ -57,7 +66,7 @@ import java.util.Vector;
|
|||
*/
|
||||
|
||||
public class ErrorActivity extends AppCompatActivity {
|
||||
public static class ErrorInfo {
|
||||
public static class ErrorInfo implements Parcelable {
|
||||
public int userAction;
|
||||
public String request;
|
||||
public String serviceName;
|
||||
|
@ -71,27 +80,73 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
info.message = message;
|
||||
return info;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(this.userAction);
|
||||
dest.writeString(this.request);
|
||||
dest.writeString(this.serviceName);
|
||||
dest.writeInt(this.message);
|
||||
}
|
||||
|
||||
public ErrorInfo() {
|
||||
}
|
||||
|
||||
protected ErrorInfo(Parcel in) {
|
||||
this.userAction = in.readInt();
|
||||
this.request = in.readString();
|
||||
this.serviceName = in.readString();
|
||||
this.message = in.readInt();
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<ErrorInfo> CREATOR = new Parcelable.Creator<ErrorInfo>() {
|
||||
@Override
|
||||
public ErrorInfo createFromParcel(Parcel source) {
|
||||
return new ErrorInfo(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ErrorInfo[] newArray(int size) {
|
||||
return new ErrorInfo[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// LOG TAGS
|
||||
public static final String TAG = ErrorActivity.class.toString();
|
||||
|
||||
// BUNDLE TAGS
|
||||
public static final String ERROR_INFO = "error_info";
|
||||
public static final String ERROR_LIST = "error_list";
|
||||
|
||||
// MESSAGE ID
|
||||
public static final int SEARCHED = 0;
|
||||
public static final int REQUESTED_STREAM = 1;
|
||||
public static final int GET_SUGGESTIONS = 2;
|
||||
public static final int SOMETHING_ELSE = 3;
|
||||
public static final int USER_REPORT = 4;
|
||||
public static final int LOAD_IMAGE = 5;
|
||||
public static final int UI_ERROR = 6;
|
||||
|
||||
// MESSAGE STRING
|
||||
public static final String SEARCHED_STRING = "searched";
|
||||
public static final String REQUESTED_STREAM_STRING = "requested stream";
|
||||
public static final String GET_SUGGESTIONS_STRING = "get suggestions";
|
||||
public static final String SOMETHING_ELSE_STRING = "something";
|
||||
public static final String USER_REPORT_STRING = "user report";
|
||||
public static final String LOAD_IMAGE_STRING = "load image";
|
||||
public static final String UI_ERROR_STRING = "ui error";
|
||||
|
||||
|
||||
public static final String ERROR_EMAIL_ADDRESS = "crashreport@newpipe.schabi.org";
|
||||
public static final String ERROR_EMAIL_SUBJECT = "Exception in NewPipe " + BuildConfig.VERSION_NAME;
|
||||
|
||||
private List<Throwable> errorList;
|
||||
private String[] errorList;
|
||||
private ErrorInfo errorInfo;
|
||||
private Class returnActivity;
|
||||
private String currentTimeStamp;
|
||||
|
@ -115,19 +170,19 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
ActivityCommunicator ac = ActivityCommunicator.getCommunicator();
|
||||
ac.errorList = el;
|
||||
ac.returnActivity = returnAcitivty;
|
||||
ac.errorInfo = errorInfo;
|
||||
Intent intent = new Intent(context, ErrorActivity.class);
|
||||
intent.putExtra(ERROR_INFO, errorInfo);
|
||||
intent.putExtra(ERROR_LIST, elToSl(el));
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}).show();
|
||||
} else {
|
||||
ActivityCommunicator ac = ActivityCommunicator.getCommunicator();
|
||||
ac.errorList = el;
|
||||
ac.returnActivity = returnAcitivty;
|
||||
ac.errorInfo = errorInfo;
|
||||
Intent intent = new Intent(context, ErrorActivity.class);
|
||||
intent.putExtra(ERROR_INFO, errorInfo);
|
||||
intent.putExtra(ERROR_LIST, elToSl(el));
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
@ -165,10 +220,29 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
});
|
||||
}
|
||||
|
||||
public static void reportError(final Context context, final CrashReportData report, final ErrorInfo errorInfo) {
|
||||
// get key first (don't ask about this solution)
|
||||
ReportField key = null;
|
||||
for(ReportField k : report.keySet()) {
|
||||
if(k.toString().equals("STACK_TRACE")) {
|
||||
key = k;
|
||||
}
|
||||
}
|
||||
String[] el = new String[] { report.get(key) };
|
||||
|
||||
Intent intent = new Intent(context, ErrorActivity.class);
|
||||
intent.putExtra(ERROR_INFO, errorInfo);
|
||||
intent.putExtra(ERROR_LIST, el);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_error);
|
||||
|
||||
Intent intent = getIntent();
|
||||
|
||||
try {
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
|
@ -179,23 +253,20 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
e.printStackTrace();
|
||||
}
|
||||
|
||||
ActivityCommunicator ac = ActivityCommunicator.getCommunicator();
|
||||
errorList = ac.errorList;
|
||||
returnActivity = ac.returnActivity;
|
||||
errorInfo = ac.errorInfo;
|
||||
|
||||
reportButton = (Button) findViewById(R.id.errorReportButton);
|
||||
userCommentBox = (EditText) findViewById(R.id.errorCommentBox);
|
||||
errorView = (TextView) findViewById(R.id.errorView);
|
||||
infoView = (TextView) findViewById(R.id.errorInfosView);
|
||||
errorMessageView = (TextView) findViewById(R.id.errorMessageView);
|
||||
|
||||
errorView.setText(formErrorText(errorList));
|
||||
ActivityCommunicator ac = ActivityCommunicator.getCommunicator();
|
||||
returnActivity = ac.returnActivity;
|
||||
errorInfo = intent.getParcelableExtra(ERROR_INFO);
|
||||
errorList = intent.getStringArrayExtra(ERROR_LIST);
|
||||
|
||||
//importand add gurumeditaion
|
||||
//importand add gurumeditaion
|
||||
addGuruMeditaion();
|
||||
currentTimeStamp = getCurrentTimeStamp();
|
||||
buildInfo(errorInfo);
|
||||
|
||||
reportButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
|
@ -214,12 +285,16 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
globIpRangeThread = new Thread(new IpRagneRequester());
|
||||
globIpRangeThread.start();
|
||||
|
||||
// normal bugreport
|
||||
buildInfo(errorInfo);
|
||||
if(errorInfo.message != 0) {
|
||||
errorMessageView.setText(errorInfo.message);
|
||||
} else {
|
||||
errorMessageView.setVisibility(View.GONE);
|
||||
findViewById(R.id.messageWhatHappenedView).setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
errorView.setText(formErrorText(errorList));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -255,12 +330,12 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
return sw.getBuffer().toString();
|
||||
}
|
||||
|
||||
private String formErrorText(List<Throwable> el) {
|
||||
private String formErrorText(String[] el) {
|
||||
String text = "";
|
||||
if(el != null) {
|
||||
for (Throwable e : el) {
|
||||
for (String e : el) {
|
||||
text += "-------------------------------------\n"
|
||||
+ getStackTrace(e);
|
||||
+ e;
|
||||
}
|
||||
}
|
||||
text += "-------------------------------------";
|
||||
|
@ -295,6 +370,7 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
+ "\n" + getContentLangString()
|
||||
+ "\n" + info.serviceName
|
||||
+ "\n" + currentTimeStamp
|
||||
+ "\n" + getPackageName()
|
||||
+ "\n" + BuildConfig.VERSION_NAME
|
||||
+ "\n" + getOsString();
|
||||
|
||||
|
@ -309,6 +385,7 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
.put("request", errorInfo.request)
|
||||
.put("content_language", getContentLangString())
|
||||
.put("service", errorInfo.serviceName)
|
||||
.put("package", getPackageName())
|
||||
.put("version", BuildConfig.VERSION_NAME)
|
||||
.put("os", getOsString())
|
||||
.put("time", currentTimeStamp)
|
||||
|
@ -316,8 +393,8 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
|
||||
JSONArray exceptionArray = new JSONArray();
|
||||
if(errorList != null) {
|
||||
for (Throwable e : errorList) {
|
||||
exceptionArray.put(getStackTrace(e));
|
||||
for (String e : errorList) {
|
||||
exceptionArray.put(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -347,6 +424,8 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
return USER_REPORT_STRING;
|
||||
case LOAD_IMAGE:
|
||||
return LOAD_IMAGE_STRING;
|
||||
case UI_ERROR:
|
||||
return UI_ERROR_STRING;
|
||||
default:
|
||||
return "Your description is in another castle.";
|
||||
}
|
||||
|
@ -421,4 +500,13 @@ public class ErrorActivity extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// errorList to StringList
|
||||
private static String[] elToSl(List<Throwable> stackTraces) {
|
||||
String[] out = new String[stackTraces.size()];
|
||||
for(int i = 0; i < stackTraces.size(); i++) {
|
||||
out[i] = getStackTrace(stackTraces.get(i));
|
||||
}
|
||||
return out;
|
||||
}
|
||||
}
|
|
@ -18,7 +18,7 @@ import android.view.inputmethod.InputMethodManager;
|
|||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.detail.VideoItemDetailActivity;
|
||||
import org.schabi.newpipe.detail.VideoItemDetailFragment;
|
||||
|
|
|
@ -6,10 +6,9 @@ import android.os.Handler;
|
|||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.Downloader;
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.SearchEngine;
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
package org.schabi.newpipe.search_fragment;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.Downloader;
|
||||
import org.schabi.newpipe.ErrorActivity;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.SearchEngine;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ErrorActivity">
|
||||
tools:context=".report.ErrorActivity">
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/scrollView"
|
||||
|
|
|
@ -135,7 +135,6 @@
|
|||
|
||||
<string name="autoplay_by_calling_app_summary">Auto-reproduz un videu al llamar a NewPipe dende otra aplicación.</string>
|
||||
<string name="autoplay_by_calling_app_title">Auto-reproducir al llamar dende otra aplicación</string>
|
||||
<string name="info_labels">Qué:\\nSolicitú:\\nLlingua conteníu:\\nServiciu:\\nHora GMT:\\nVersión:\\nVersión SO:\\nRangu global d\'IP:</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniatura del xubidor</string>
|
||||
<string name="detail_dislikes_img_view_description">Despréstames</string>
|
||||
<string name="error_querying_decoders">Nun puen consultase los descodificadores del preséu</string>
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
<string name="error_snackbar_action">MELDEN</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">Dies ist passiert:</string>
|
||||
<string name="info_labels">Was:\\nAnfrage:\\nSprache des Inhalts:\\nDienst:\\nZeit (GMT):\\nVersion:\\nOS-Version:\\nGlob. IP-Bereich:</string>
|
||||
<string name="info_labels">Was:\\nAnfrage:\\nSprache des Inhalts:\\nDienst:\\nZeit (GMT):\\nPacket:\\nVersion:\\nOS-Version:\\nGlob. IP-Bereich:</string>
|
||||
<string name="error_details_headline">Details:</string>
|
||||
|
||||
|
||||
|
|
|
@ -99,7 +99,6 @@
|
|||
<string name="error_snackbar_action">REPORTAR</string>
|
||||
<string name="what_device_headline">Información:</string>
|
||||
<string name="what_happened_headline">Qué ha ocurrido:</string>
|
||||
<string name="info_labels">Que:\\nSolicitud:\\nIdioma del contenido:\\nServicio:\\nHora GMT:\\nVersión:\\nVersión del SO:\\nRango global de IP:</string>
|
||||
<string name="info_searched_lbl">Buscado:</string>
|
||||
<string name="info_requested_stream_lbl">Stream solicitado:</string>
|
||||
<string name="your_comment">Su comentario (en Inglés):</string>
|
||||
|
|
|
@ -81,7 +81,6 @@
|
|||
<string name="error_snackbar_action">گزارش</string>
|
||||
<string name="what_device_headline">اطّلاعات:</string>
|
||||
<string name="what_happened_headline">چه روی داد:</string>
|
||||
<string name="info_labels">چه:\\nدرخواست:\\nزبان درخواست:\\nخدمت:\\nزمان GMT:\\nنگارش:\\nنگارش س.ع:\\nبازه آیپی:</string>
|
||||
<string name="info_searched_lbl">جستوجو شده برای:</string>
|
||||
<string name="info_requested_stream_lbl">جریان درخواستی:</string>
|
||||
<string name="your_comment">توضیح شما (به انگلیسی):</string>
|
||||
|
|
|
@ -121,7 +121,6 @@
|
|||
<string name="logging_verbose">Verbeux</string>
|
||||
<string name="off">[désactivé]</string>
|
||||
<string name="error_querying_decoders">Impossible d\'accéder aux décodeurs de l\'appareil</string>
|
||||
<string name="info_labels">Action :\\nRequête :\\nLangue du contenu :\\nService :\\nHeure GMT :\\nVersion :\\nVersion d\'OS :\\nIntervalle global d\'IP :</string>
|
||||
<string name="downloads">Téléchargements</string>
|
||||
<string name="downloads_title">Téléchargements</string>
|
||||
<string name="settings_title">Paramètres</string>
|
||||
|
|
|
@ -117,7 +117,6 @@
|
|||
<string name="could_not_load_thumbnails">Nem sikerült az összes előnézeti kép betöltése</string>
|
||||
<string name="parsing_error">Nem sikerült a weblap betöltése.</string>
|
||||
<string name="light_parsing_error">Nem sikerült a weblap teljes betöltése.</string>
|
||||
<string name="info_labels">Mi:\\nKérés:\\nTartalom nyelve:\\nSzolgáltatás:\\nGMT Idő:\\nVerzió:\\nOS verzió:\\nGlob. IP tartomány:</string>
|
||||
<string name="error_drm_not_supported">Védett tartalom nincs támogatva 18-as API alatt (Android 4.3)</string>
|
||||
<string name="error_drm_unsupported_scheme">Ez az eszköz nem támogatja a szükséges DRM sémát</string>
|
||||
<string name="logging">Naplózás</string>
|
||||
|
|
|
@ -100,7 +100,6 @@
|
|||
<string name="error_snackbar_action">SEGNALA</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">Cosa è successo:</string>
|
||||
<string name="info_labels">Cosa:\\nRichiesta:\\nLingua Contenuto:\\nServizio:\\nOrario GMT:\\nVersione:\\nVersione SO:\\nRange glob. dell\'IP:</string>
|
||||
<string name="info_searched_lbl">È stato cercato:</string>
|
||||
<string name="info_requested_stream_lbl">Stream richiesto:</string>
|
||||
<string name="your_comment">Il tuo commento (in inglese):</string>
|
||||
|
|
|
@ -93,7 +93,6 @@
|
|||
<string name="error_snackbar_action">報告</string>
|
||||
<string name="what_device_headline">情報:</string>
|
||||
<string name="what_happened_headline">何が起こりましたか:</string>
|
||||
<string name="info_labels">何:\\nリクエスト:\\nコンテンツの言語:\\nサービス:\\nGMT 時間:\\nバージョン:\\nOS バージョン:\\nグローバル IP の範囲:</string>
|
||||
<string name="info_searched_lbl">検索結果:</string>
|
||||
<string name="info_requested_stream_lbl">要求したストリーム:</string>
|
||||
<string name="your_comment">あなたのコメント (英語で):</string>
|
||||
|
|
|
@ -95,7 +95,6 @@
|
|||
<string name="error_snackbar_action">보고</string>
|
||||
<string name="what_device_headline">정보:</string>
|
||||
<string name="what_happened_headline">다음이 발생함:</string>
|
||||
<string name="info_labels">사유:\\n요청t:\\n컨텐츠 언어:\\n서비스:\\nGMT 시간:\\n버전:\\nOS 버전:\\nGlob. IP 범위:</string>
|
||||
<string name="info_searched_lbl">다음을 검색:</string>
|
||||
<string name="info_requested_stream_lbl">요청된 스트림:</string>
|
||||
<string name="your_comment">내용 (영어로 작성):</string>
|
||||
|
|
|
@ -117,6 +117,5 @@
|
|||
<string name="use_exoplayer_summary">Eksperimentelt</string>
|
||||
<string name="duration_live">direkteoverført</string>
|
||||
|
||||
<string name="info_labels">Hva:\\nRequest:\\nContent Språk:\\nService:\\nGMT Tid:\\nVersion:\\nOS version:\\nGlob. IP-blokk:</string>
|
||||
<string name="error_instantiating_decoder">Kunne ikke igangsette dekoder <xliff:g id="decoder_name">%1$s</xliff:g></string>
|
||||
</resources>
|
||||
|
|
|
@ -89,7 +89,6 @@
|
|||
<string name="error_snackbar_action">Relatório</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">O que ocorreu:</string>
|
||||
<string name="info_labels">O quê:\\nPedido:\\nIdioma do conteúdo:\\nServiço:\\nHora GMT:\\nVersão:\\nVersão do So:\\nGlob. IP:</string>
|
||||
<string name="info_searched_lbl">Pesquisou por:</string>
|
||||
<string name="info_requested_stream_lbl">Emissão solicitada:</string>
|
||||
<string name="your_comment">Comentários (em Inglês):</string>
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
<string name="error_snackbar_action">RAPORTAȚI</string>
|
||||
<string name="what_device_headline">Informații:</string>
|
||||
<string name="what_happened_headline">Ce s-a întâmplat:</string>
|
||||
<string name="info_labels">Ce:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nVersion:\\nOS version:\\nGlob. Raza IP-ului:</string>
|
||||
<string name="info_searched_lbl">S-a căutat pentru:</string>
|
||||
<string name="info_requested_stream_lbl">Fluxul cerut:</string>
|
||||
<string name="your_comment">Comentariul tău (în engleză):</string>
|
||||
|
|
|
@ -91,7 +91,6 @@
|
|||
<string name="error_snackbar_action">SPRÁVA</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">Čo sa stalo:</string>
|
||||
<string name="info_labels">Čo:\\nPožiadavka:\\nJazyk obsahu:\\nSlužba:\\nČas v GMT:\\nVerzia:\\nVerzia OS:\\nGlob. rozsah IP:</string>
|
||||
<string name="info_searched_lbl">Hľadané:</string>
|
||||
<string name="info_requested_stream_lbl">Požadované vysielanie:</string>
|
||||
<string name="your_comment">Váš komentár (v Angličtine):</string>
|
||||
|
|
|
@ -107,7 +107,6 @@
|
|||
<string name="off">[izklopljeno]</string>
|
||||
<string name="use_exoplayer_title">Uporabi ExoPlayer</string>
|
||||
<string name="use_exoplayer_summary">Preizkusne zmožnosti</string>
|
||||
<string name="info_labels">Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas po GMT:\\nRazličica:\\nRazličica OS:\\nObseg IP:</string>
|
||||
<string name="info_searched_lbl">Iskano:</string>
|
||||
<string name="info_requested_stream_lbl">Zahtevan pretok:</string>
|
||||
<string name="your_comment">Opomba (v angleščini):</string>
|
||||
|
|
|
@ -95,7 +95,6 @@
|
|||
<string name="error_snackbar_action">ПРИЈАВИ</string>
|
||||
<string name="what_device_headline">Подаци:</string>
|
||||
<string name="what_happened_headline">Шта се десило:</string>
|
||||
<string name="info_labels">Шта:\\nЗахтев:\\nЈезик садржаја:\\nУслуга:\\nГМТ време:\\nИздање:\\nИздање система:\\nГлоб. ИП опсег:</string>
|
||||
<string name="your_comment">Ваш коментар (на енглеском):</string>
|
||||
<string name="error_details_headline">Детаљи:</string>
|
||||
|
||||
|
|
|
@ -79,5 +79,4 @@
|
|||
<string name="error_snackbar_action">ЗВІТУВАТИ</string>
|
||||
<string name="what_device_headline">Інформація:</string>
|
||||
<string name="what_happened_headline">Що сталося:</string>
|
||||
<string name="info_labels">Що:\\nЗапит:\\nМова контенту:\\nСервіс:\\nЧас GMT:\\nВерсія:\\nВерсія ОС:\\nДіапазон IP:</string>
|
||||
</resources>
|
||||
|
|
|
@ -89,7 +89,6 @@
|
|||
<string name="error_details_headline">详细信息:</string>
|
||||
|
||||
|
||||
<string name="info_labels">什么:\\n请求:\\n内容语言:\\n服务:\\nGMT 时间:\\n版本:\\nOS 版本:\\nGlob. IP 范围:</string>
|
||||
<string name="report_error">报告错误</string>
|
||||
<string name="user_report">用户报告</string>
|
||||
|
||||
|
|
|
@ -97,6 +97,7 @@
|
|||
<string name="live_streams_not_supported">This is a LIVE STREAM. These are not yet supported.</string>
|
||||
<string name="could_not_get_stream">Could not get any stream.</string>
|
||||
<string name="could_not_load_image">Could not load Image</string>
|
||||
<string name="app_ui_crash">App/UI crashed</string>
|
||||
<!-- error activity -->
|
||||
<string name="sorry_string">Sorry that should not happen.</string>
|
||||
<string name="guru_meditation" translatable="false">Guru Meditation.</string>
|
||||
|
@ -105,7 +106,7 @@
|
|||
<string name="error_snackbar_action">REPORT</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">What happened:</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
|
||||
<string name="info_searched_lbl">Searched for:</string>
|
||||
<string name="info_requested_stream_lbl">Requested stream:</string>
|
||||
<string name="your_comment">Your comment (in English):</string>
|
||||
|
|
Loading…
Reference in New Issue