Merge branch 'develop' into refactor

# Conflicts:
#	app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java
#	core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
This commit is contained in:
Martin Fietz 2018-01-21 11:10:20 +01:00
commit d3491d1858
22 changed files with 504 additions and 18 deletions

View File

@ -7,6 +7,7 @@ source_lang = en
trans.ast_ES = core/src/main/res/values-b+ast/strings.xml
trans.ar = core/src/main/res/values-ar/strings.xml
trans.az = core/src/main/res/values-az/strings.xml
trans.bg = core/src/main/res/values-bg/strings.xml
trans.ca = core/src/main/res/values-ca/strings.xml
trans.ca_ES = core/src/main/res/values-ca-rES/strings.xml
trans.cs_CZ = core/src/main/res/values-cs-rCZ/strings.xml

View File

@ -167,6 +167,13 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
</activity>
<activity
android:name=".activity.ImportExportActivity"
android:label="@string/import_export">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
</activity>
<activity
android:name=".activity.OpmlImportFromPathActivity"
android:configChanges="keyboardHidden|orientation|screenSize"

View File

@ -379,7 +379,7 @@ public class FeedInfoActivity extends AppCompatActivity {
}
}
private class ApplyToEpisodesDialog extends ConfirmationDialog {
private static class ApplyToEpisodesDialog extends ConfirmationDialog {
private final Feed feed;
private final boolean autoDownload;

View File

@ -0,0 +1,185 @@
package de.danoeh.antennapod.activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.support.design.widget.Snackbar;
import android.support.v4.content.IntentCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.FileChannel;
/**
* Displays the 'import/export' screen
*/
public class ImportExportActivity extends AppCompatActivity {
private static final int REQUEST_CODE_RESTORE = 43;
private static final int REQUEST_CODE_BACKUP_DOCUMENT = 44;
private static final String EXPORT_FILENAME = "AntennaPodBackup.db";
private static final String TAG = ImportExportActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayShowHomeEnabled(true);
setContentView(R.layout.import_export_activity);
findViewById(R.id.button_export).setOnClickListener(view -> backup());
findViewById(R.id.button_import).setOnClickListener(view -> restore());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
private void backup() {
if (Build.VERSION.SDK_INT >= 19) {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT)
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("application/x-sqlite3")
.putExtra(Intent.EXTRA_TITLE, EXPORT_FILENAME);
startActivityForResult(intent, REQUEST_CODE_BACKUP_DOCUMENT);
} else {
try {
File sd = Environment.getExternalStorageDirectory();
File backupDB = new File(sd, EXPORT_FILENAME);
writeBackupTo(new FileOutputStream(backupDB));
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
Snackbar.make(findViewById(R.id.import_export_layout), e.getLocalizedMessage(), Snackbar.LENGTH_SHORT).show();
}
}
}
private void restore() {
if (Build.VERSION.SDK_INT >= 19) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_CODE_RESTORE);
} else {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(Intent.createChooser(intent,
getString(R.string.import_select_file)), REQUEST_CODE_RESTORE);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode != RESULT_OK || resultData == null) {
return;
}
Uri uri = resultData.getData();
if (requestCode == REQUEST_CODE_RESTORE) {
restoreFrom(uri);
} else if (requestCode == REQUEST_CODE_BACKUP_DOCUMENT) {
backupToDocument(uri);
}
}
private void restoreFrom(Uri inputUri) {
File currentDB = getDatabasePath(PodDBAdapter.DATABASE_NAME);
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(inputUri);
FileUtils.copyInputStreamToFile(inputStream, currentDB);
displayImportSuccessDialog();
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
Snackbar.make(findViewById(R.id.import_export_layout), e.getLocalizedMessage(), Snackbar.LENGTH_SHORT).show();
} finally {
IOUtils.closeQuietly(inputStream);
}
}
private void displayImportSuccessDialog() {
AlertDialog.Builder d = new AlertDialog.Builder(ImportExportActivity.this);
d.setMessage(R.string.import_ok);
d.setCancelable(false);
d.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
Intent intent = new Intent(getApplicationContext(), SplashActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
});
d.show();
}
private void backupToDocument(Uri uri) {
ParcelFileDescriptor pfd = null;
FileOutputStream fileOutputStream = null;
try {
pfd = getContentResolver().openFileDescriptor(uri, "w");
fileOutputStream = new FileOutputStream(pfd.getFileDescriptor());
writeBackupTo(fileOutputStream);
Snackbar.make(findViewById(R.id.import_export_layout),
R.string.export_ok, Snackbar.LENGTH_SHORT).show();
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
Snackbar.make(findViewById(R.id.import_export_layout), e.getLocalizedMessage(), Snackbar.LENGTH_SHORT).show();
} finally {
IOUtils.closeQuietly(fileOutputStream);
if (pfd != null) {
try {
pfd.close();
} catch (IOException e) {
Log.d(TAG, "Unable to close ParcelFileDescriptor");
}
}
}
}
private void writeBackupTo(FileOutputStream outFileStream) {
FileChannel src = null;
FileChannel dst = null;
try {
File currentDB = getDatabasePath(PodDBAdapter.DATABASE_NAME);
if (currentDB.exists()) {
src = new FileInputStream(currentDB).getChannel();
dst = outFileStream.getChannel();
dst.transferFrom(src, 0, src.size());
Snackbar.make(findViewById(R.id.import_export_layout),
R.string.export_ok, Snackbar.LENGTH_SHORT).show();
} else {
Snackbar.make(findViewById(R.id.import_export_layout),
"Can not access current database", Snackbar.LENGTH_SHORT).show();
}
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
Snackbar.make(findViewById(R.id.import_export_layout), e.getLocalizedMessage(), Snackbar.LENGTH_SHORT).show();
} finally {
IOUtils.closeQuietly(src);
IOUtils.closeQuietly(dst);
}
}
}

View File

@ -72,12 +72,13 @@ import rx.schedulers.Schedulers;
*/
public abstract class MediaplayerInfoActivity extends MediaplayerActivity implements NavDrawerActivity {
private static final String TAG = "MediaplayerInfoActivity";
private static final int POS_COVER = 0;
private static final int POS_DESCR = 1;
private static final int POS_CHAPTERS = 2;
private static final int NUM_CONTENT_FRAGMENTS = 3;
private final String TAG = "MediaplayerInfoActivity";
private static final String PREFS = "AudioPlayerActivityPreferences";
private static final String PREF_KEY_SELECTED_FRAGMENT_POSITION = "selectedFragmentPosition";

View File

@ -29,7 +29,7 @@ import de.danoeh.antennapod.core.storage.DownloadRequestException;
/** Displays a list of DownloadStatus entries. */
public class DownloadLogAdapter extends BaseAdapter {
private final String TAG = "DownloadLogAdapter";
private static final String TAG = "DownloadLogAdapter";
private final Context context;

View File

@ -162,7 +162,7 @@ public class ItunesAdapter extends ArrayAdapter<ItunesAdapter.Podcast> {
/**
* View holder object for the GridView
*/
class PodcastViewHolder {
static class PodcastViewHolder {
/**
* ImageView holding the Podcast image

View File

@ -32,7 +32,7 @@ import de.danoeh.antennapod.core.util.LongList;
public class EpisodesApplyActionFragment extends Fragment {
public String TAG = "EpisodeActionFragment";
public static final String TAG = "EpisodeActionFragment";
private static final int ACTION_QUEUE = 1;
private static final int ACTION_MARK_PLAYED = 2;

View File

@ -78,7 +78,7 @@ public class DownloadsFragment extends Fragment {
viewPager.setCurrentItem(lastPosition);
}
public class DownloadsPagerAdapter extends FragmentPagerAdapter {
public static class DownloadsPagerAdapter extends FragmentPagerAdapter {
final Resources resources;

View File

@ -38,6 +38,7 @@ import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import de.danoeh.antennapod.activity.ImportExportActivity;
import org.apache.commons.lang3.ArrayUtils;
import java.io.File;
@ -90,6 +91,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
private static final String PREF_OPML_EXPORT = "prefOpmlExport";
private static final String PREF_HTML_EXPORT = "prefHtmlExport";
private static final String STATISTICS = "statistics";
private static final String IMPORT_EXPORT = "importExport";
private static final String PREF_ABOUT = "prefAbout";
private static final String PREF_CHOOSE_DATA_DIR = "prefChooseDataDir";
private static final String AUTO_DL_PREF_SCREEN = "prefAutoDownloadSettings";
@ -173,6 +175,12 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
return true;
}
);
ui.findPreference(PreferenceController.IMPORT_EXPORT).setOnPreferenceClickListener(
preference -> {
activity.startActivity(new Intent(activity, ImportExportActivity.class));
return true;
}
);
ui.findPreference(PreferenceController.PREF_OPML_EXPORT).setOnPreferenceClickListener(
preference -> export(new OpmlWriter()));
ui.findPreference(PreferenceController.PREF_HTML_EXPORT).setOnPreferenceClickListener(

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/import_export_layout"
android:padding="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/import_export_warning"
android:gravity="center_horizontal"/>
<Button
android:text="@string/label_export"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button_export"
android:layout_marginTop="24dp"/>
<Button
android:text="@string/label_import"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button_import"/>
</LinearLayout>

View File

@ -315,6 +315,9 @@
<Preference
android:key="prefHtmlExport"
android:title="@string/html_export_label"/>
<Preference
android:key="importExport"
android:title="@string/import_export"/>
<Preference
android:key="statistics"
android:title="@string/statistics_label"/>

View File

@ -69,7 +69,7 @@ project.ext {
}
task wrapper(type: Wrapper) {
gradleVersion = "4.2"
gradleVersion = "4.4.1"
}
// free build hack: common functions

View File

@ -127,8 +127,8 @@ public class DownloadService extends Service {
private NotificationCompat.Builder notificationCompatBuilder;
private final int NOTIFICATION_ID = 2;
private final int REPORT_ID = 3;
private static final int NOTIFICATION_ID = 2;
private static final int REPORT_ID = 3;
/**
* Currently running downloads.
@ -611,7 +611,7 @@ public class DownloadService extends Service {
private volatile boolean isActive = true;
private volatile boolean isCollectingRequests = false;
private final long WAIT_TIMEOUT = 3000;
private static final long WAIT_TIMEOUT = 3000;
/**
@ -950,7 +950,7 @@ public class DownloadService extends Service {
* <p/>
* Currently, this handler only handles FeedMedia objects, because Feeds and FeedImages are deleted if the download fails.
*/
private class FailedDownloadHandler implements Runnable {
private static class FailedDownloadHandler implements Runnable {
private final DownloadRequest request;
private final DownloadStatus status;

View File

@ -314,7 +314,7 @@ public class HttpDownloader extends Downloader {
}
}
private class BasicAuthorizationInterceptor implements Interceptor {
private static class BasicAuthorizationInterceptor implements Interceptor {
private final DownloadRequest downloadRequest;

View File

@ -44,7 +44,7 @@ import de.greenrobot.event.EventBus;
public class PodDBAdapter {
private static final String TAG = "PodDBAdapter";
private static final String DATABASE_NAME = "Antennapod.db";
public static final String DATABASE_NAME = "Antennapod.db";
/**
* Maximum number of arguments for IN-operator.

View File

@ -40,7 +40,7 @@ public class HtmlToPlainText {
}
// the formatting rules, implemented in a breadth-first DOM traverse
private class FormattingVisitor implements NodeVisitor {
private static class FormattingVisitor implements NodeVisitor {
private final StringBuilder accum = new StringBuilder(); // holds the accumulated text

View File

@ -0,0 +1,239 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources xmlns:tools="http://schemas.android.com/tools">
<!--Activitiy and fragment titles-->
<string name="feeds_label">Емисии</string>
<string name="statistics_label">Статистика</string>
<string name="add_feed_label">Добавяне на подкаст</string>
<string name="episodes_label">Епизоди</string>
<string name="all_episodes_short_label">Всички</string>
<string name="favorite_episodes_label">Любими</string>
<string name="new_label">Нови</string>
<string name="settings_label">Настройки</string>
<string name="downloads_label">Изтеглени</string>
<string name="downloads_running_label">Текущи</string>
<string name="downloads_completed_label">Завършени</string>
<string name="downloads_log_label">Дневник</string>
<string name="subscriptions_label">Абонаменти</string>
<string name="subscriptions_list_label">Списък с абонаменти</string>
<string name="cancel_download_label">Отказ\nИзтегляне</string>
<string name="playback_history_label">История</string>
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">gpodder.net Вход</string>
<string name="free_space_label">%1$s свободни</string>
<string name="episode_cache_full_title">Пълен кеш на епизодите</string>
<string name="episode_cache_full_message">Ограничението на кеша на епизодите е достигнато. Можете да увеличите размера на кеша в настройките.</string>
<!--Statistics fragment-->
<!--Main activity-->
<string name="drawer_feed_counter_new_unplayed">Брой нови и непускани епизоди</string>
<string name="drawer_feed_counter_new">Брой нови епизоди</string>
<string name="drawer_feed_counter_unplayed">Брой непускани епизоди</string>
<string name="drawer_feed_counter_downloaded">Брой изтеглени епизоди</string>
<string name="drawer_feed_counter_none">Никакви</string>
<!--Webview actions-->
<string name="copy_url_label">Копирай URL адрес</string>
<string name="share_url_label">Сподели URL адрес</string>
<string name="copied_url_msg">Адресът е копиран</string>
<!--Playback history-->
<string name="clear_history_label">Изтриване на историята</string>
<!--Other-->
<string name="confirm_label">Потвърди</string>
<string name="cancel_label">Отказ</string>
<string name="yes">Да</string>
<string name="no">Не</string>
<string name="author_label">Автор</string>
<string name="language_label">Език</string>
<string name="url_label">URL</string>
<string name="podcast_settings_label">Настройки</string>
<string name="cover_label">Снимка</string>
<string name="error_label">Грешка</string>
<string name="error_msg_prefix">Възникна грешка:</string>
<string name="external_storage_error_msg">Няма налична външна памет. Уверете се, че външната памет е монтирана, за да може приложението да работи правилно.</string>
<string name="description_label">Описание</string>
<string name="most_recent_prefix">Най-нов епизод:\u0020</string>
<string name="size_prefix">Размер:\u0020</string>
<string name="loading_label">Зареждане…</string>
<string name="feed_auto_download_always">Винаги</string>
<string name="feed_auto_download_never">Никога</string>
<string name="episode_cleanup_never">Никога</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL адрес на емисията</string>
<string name="etxtFeedurlHint">www.primer.com/emisiq</string>
<string name="txtvfeedurl_label">Добавяне на подкаст по URL адрес</string>
<string name="podcastdirectories_label">Намиране на подкаст в директория</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">Маркирай всички като слушани</string>
<string name="mark_all_read_msg">Всички епизоди са маркирани като слушани</string>
<string name="mark_all_read_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди като слушани.</string>
<string name="mark_all_read_feed_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди в тази емисия като слушани.</string>
<string name="mark_all_seen_label">Маркирай всички като прегледани</string>
<string name="mark_all_seen_msg">Всички епизоди са маркирани като прегледани</string>
<string name="mark_all_seen_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди като прегледани.</string>
<string name="show_info_label">Покажи информация</string>
<string name="rename_feed_label">Преименуване на подкаст</string>
<string name="remove_feed_label">Премахване на подкаст</string>
<string name="share_label">Споделяне...</string>
<string name="share_link_label">Сподели връзка</string>
<string name="share_file_label">Сподели файл</string>
<string name="share_link_with_position_label">Сподели връзка с позиция</string>
<string name="share_feed_url_label">Сподели URL адрес на емисията</string>
<string name="share_item_url_label">Сподели URL адрес на епизода</string>
<string name="share_item_url_with_position_label">Сподели URL адрес на епизода с позиция</string>
<string name="feed_remover_msg">Премахване на емисията</string>
<!--actions on feeditems-->
<string name="stream_label">Стрийм</string>
<string name="marked_as_seen_label">Маркиран като прегледан</string>
<string name="mark_read_label">Маркирай като слушан</string>
<string name="marked_as_read_label">Маркиран като слушан</string>
<string name="mark_unread_label">Маркирай като неслушан</string>
<string name="add_to_queue_label">Добави в опашката</string>
<string name="added_to_queue_label">Добавен в опашката</string>
<string name="remove_from_queue_label">Премахни от опашката</string>
<!--Download messages and labels-->
<string name="download_type_feed">Емисия</string>
<string name="authentication_notification_title">Необходимо удостоверяване</string>
<string name="confirm_mobile_download_dialog_enable_temporarily">Разреши временно</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Грешка!</string>
<!--Queue operations-->
<string name="lock_queue">Заключване на опашката</string>
<string name="unlock_queue">Отключване на опашката</string>
<string name="queue_locked">Опашката е заключена</string>
<string name="queue_unlocked">Опашката е отключена</string>
<string name="clear_queue_label">Изчистване на опашката</string>
<string name="clear_queue_confirmation_msg">Моля, потвърдете, че искате да изчистите ВСИЧКИ епизоди в опашката</string>
<!--Flattr-->
<!--Flattr-->
<!--Variable Speed-->
<!--Empty list labels-->
<!--Preferences-->
<string name="storage_pref">Съхранение</string>
<string name="project_pref">Проект</string>
<string name="other_pref">Други</string>
<string name="about_pref">Относно</string>
<string name="queue_label">Опашка</string>
<string name="services_label">Услуги</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Почистване на епизодите</string>
<string name="pref_episode_cleanup_summary">Епизодите, които не са в опашката и не са в любими, отговарят на условията за премахване, ако автоматичното изтегляне се нуждае от място за нови епизоди</string>
<string name="pref_pauseOnDisconnect_sum">Пауза на възпроизвеждането, когато слушалките или Bluetooth прекъснат връзка</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Възстановане на възпроизвеждането, когато слушалките се свържат отново</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Възстановане на възпроизвеждането, когато Bluetooth се свърже отново</string>
<string name="pref_followQueue_sum">Преминаване към следващия епизод в опашката след завършване на възпроизвеждането</string>
<string name="pref_auto_delete_sum">Изтриване на епизода, когато възпроизвеждането завърши</string>
<string name="pref_auto_delete_title">Автоматично изтриване</string>
<string name="pref_smart_mark_as_played_sum">Маркиране на епизодите като слушани, дори когато остават определени секунди от времето за възпроизвеждане</string>
<string name="playback_pref">Възпроизвеждане</string>
<string name="network_pref">Мрежа</string>
<string name="pref_autoUpdateIntervallOrTime_title">Актуализиране през интервал или час на деня</string>
<string name="pref_autoUpdateIntervallOrTime_sum">Задайте интервал или конкретно време от деня, за да опресните автоматично емисиите</string>
<string name="pref_autoUpdateIntervallOrTime_message">Можете да зададете <i>интервал</i> като \"на всеки 2 часа\", да зададете конкретно <i>време от деня</i> като \"7:00 ч.\", или да изберете <i>деактивиране</i> на всички автоматични актуализации.\n\n<small>Моля, обърнете внимание: Времето за актуализиране е неточно. Може да срещнете кратко забавяне.</small></string>
<string name="pref_autoUpdateIntervallOrTime_Disable">Деактивиране</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Задай интервал</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Задай време от деня</string>
<string name="pref_autoUpdateIntervallOrTime_every">на всеки %1$s</string>
<string name="pref_autoUpdateIntervallOrTime_at">в %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Изтегляне на медийни файлове само през WiFi</string>
<string name="pref_followQueue_title">Непрекъснато възпроизвеждане</string>
<string name="pref_downloadMediaOnWifiOnly_title">Изтегляне през WiFi</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Прекъсване на слушалки</string>
<string name="pref_unpauseOnHeadsetReconnect_title">Повторно свързване на слушалки</string>
<string name="pref_unpauseOnBluetoothReconnect_title">Повторно свързване на Bluetooth</string>
<string name="pref_mobileUpdate_title">Мобилни актуализации</string>
<string name="pref_mobileUpdate_sum">Разрешаване на актуализации чрез мобилната връзка за данни</string>
<string name="flattr_settings_label">Flattr настройки</string>
<string name="pref_flattr_auth_title">Flattr вход</string>
<string name="user_interface_label">Потребителски интерфейс</string>
<string name="pref_set_theme_title">Избор на тема</string>
<string name="pref_nav_drawer_feed_order_title">Задайте ред на абонаментите</string>
<string name="pref_nav_drawer_feed_order_sum">Променете реда на абонаментите си</string>
<string name="pref_nav_drawer_feed_counter_title">Задайте брояча на абонаментите</string>
<string name="pref_nav_drawer_feed_counter_sum">Променете информацията, показвана от брояча на абонаментите</string>
<string name="pref_set_theme_sum">Променете външния вид на AntennaPod.</string>
<string name="pref_automatic_download_title">Автоматично изтегляне</string>
<string name="pref_automatic_download_sum">Конфигуриране на автоматично изтегляне на епизоди.</string>
<string name="pref_autodl_wifi_filter_title">Активиране на Wi-Fi филтър</string>
<string name="pref_autodl_wifi_filter_sum">Позволява автоматично изтегляне само за избрани Wi-Fi мрежи.</string>
<string name="pref_autodl_allow_on_mobile_title">Изтегляне чрез мобилна връзка</string>
<string name="pref_autodl_allow_on_mobile_sum">Позволява автоматично изтегляне чрез мобилната връзка за данни.</string>
<string name="pref_automatic_download_on_battery_title">Изтегляне, когато не се зарежда</string>
<string name="pref_automatic_download_on_battery_sum">Позволява автоматично изтегляне, когато батерията не се зарежда</string>
<string name="pref_parallel_downloads_title">Паралелни файлове за изтегляне</string>
<string name="pref_episode_cache_title">Кеш на епизодите</string>
<string name="pref_theme_title_light">Светла</string>
<string name="pref_theme_title_dark">Тъмна</string>
<string name="pref_episode_cache_unlimited">Неограничен</string>
<string name="pref_update_interval_hours_plural">часа</string>
<string name="pref_update_interval_hours_singular">час</string>
<string name="pref_update_interval_hours_manual">Ръчно</string>
<string name="pref_gpodnet_authenticate_title">Вход</string>
<string name="pref_gpodnet_authenticate_sum">Влезте с профила си в gpodder.net, за да синхронизирате абонаментите си.</string>
<string name="pref_gpodnet_logout_title">Изход</string>
<string name="pref_gpodnet_logout_toast">Успешен изход</string>
<string name="pref_image_cache_size_title">Кеш на изображенията</string>
<string name="pref_image_cache_size_sum">Размер на кеша за изображения.</string>
<string name="crash_report_title">Доклад за срив</string>
<string name="crash_report_sum">Изпратете най-новия доклад за срив чрез имейл</string>
<string name="send_email">Изпращане на имейл</string>
<string name="experimental_pref">Експериментални</string>
<string name="pref_proxy_title">Прокси</string>
<string name="pref_faq">Често задавани въпроси</string>
<string name="pref_known_issues">Известни проблеми</string>
<!--Auto-Flattr dialog-->
<!--Search-->
<string name="search_status_no_results">Няма намерени резултати</string>
<string name="search_label">Търсене</string>
<string name="no_results_for_query">Няма намерени резултати за \"%1$s\"</string>
<!--OPML import and export-->
<string name="opml_import_option">Опция %1$d</string>
<string name="opml_import_label">OPML импортиране</string>
<string name="opml_directory_error">ГРЕШКА!</string>
<string name="opml_import_error_no_file">Не е избран файл!</string>
<string name="select_all_label">Избери всички</string>
<string name="opml_export_label">OPML експортиране</string>
<string name="html_export_label">HTML експортиране</string>
<string name="exporting_label">Експортиране...</string>
<string name="export_error_label">Грешка при експортиране</string>
<string name="opml_export_success_title">Успешно OPML експортиране.</string>
<string name="opml_export_success_sum">.opml файлът беше записан в:\u0020</string>
<string name="opml_import_ask_read_permission">Необходим е достъп до външната памет за прочитане на OPML файла</string>
<!--Sleep timer-->
<string name="time_seconds">секунди</string>
<string name="time_minutes">минути</string>
<string name="time_hours">часа</string>
<plurals name="time_seconds_quantified">
<item quantity="one">1 секунда</item>
<item quantity="other">%d секунди</item>
</plurals>
<plurals name="time_minutes_quantified">
<item quantity="one">1 минута</item>
<item quantity="other">%d минути</item>
</plurals>
<plurals name="time_hours_quantified">
<item quantity="one">1 час</item>
<item quantity="other">%d часа</item>
</plurals>
<!--gpodder.net-->
<string name="gpodnet_taglist_header">КАТЕГОРИИ</string>
<string name="gpodnet_toplist_header">ТОП ПОДКАСТИ</string>
<string name="gpodnet_suggestions_header">ПРЕДЛОЖЕНИЯ</string>
<string name="gpodnetauth_login_title">Вход</string>
<string name="gpodnetauth_login_butLabel">Вход</string>
<string name="username_label">Потребителско име</string>
<string name="password_label">Парола</string>
<!--Directory chooser-->
<string name="choose_data_directory">Изберете папка с данни</string>
<string name="choose_data_directory_permission_rationale">Необходим е достъп до външната памет за промяна на папката с данни</string>
<!--Online feed view-->
<!--Content descriptions for image buttons-->
<!--Feed information screen-->
<!--Progress information-->
<!--AntennaPodSP-->
<string name="filter">Филтър</string>
<!--Episodes apply actions-->
<!--Sort-->
<!--Rating dialog-->
<!--Audio controls-->
<!--proxy settings-->
<!--Casting-->
<!--<string name="cast_failed_to_connect">Could not connect to the device</string>-->
</resources>

View File

@ -9,7 +9,6 @@
<string name="favorite_episodes_label">Favoritos</string>
<string name="new_label">Novos</string>
<string name="settings_label">Definições</string>
<string name="add_new_feed_label">Adicionar podcast</string>
<string name="downloads_label">Descargas</string>
<string name="downloads_running_label">Em curso</string>
<string name="downloads_completed_label">Terminada</string>
@ -115,6 +114,7 @@
<string name="remove_feed_label">Remover podcast</string>
<string name="share_label">Partilhar...</string>
<string name="share_link_label">Partilhar ligação</string>
<string name="share_file_label">Partilhar ficheiro</string>
<string name="share_link_with_position_label">Partilhar ligação com posição</string>
<string name="share_feed_url_label">Partilhar URL da fonte</string>
<string name="share_item_url_label">Partilhar URL do episódio</string>
@ -143,6 +143,7 @@
<string name="stream_label">Emitir</string>
<string name="remove_label">Remover</string>
<string name="delete_label">Apagar</string>
<string name="delete_failed">Episódio não apagado. Experimente reiniciar o dispositivo.</string>
<string name="remove_episode_lable">Remover episódio</string>
<string name="marked_as_seen_label">Marcar como visto</string>
<string name="mark_read_label">Marcar como reproduzido</string>
@ -266,7 +267,7 @@
<!--Variable Speed-->
<string name="download_plugin_label">Descarregar extra</string>
<string name="no_playback_plugin_title">Extra não instalado</string>
<string name="no_playback_plugin_or_sonic_msg">Para que a velocidade variável de reprodução funcione, recomendamos que ative o Sonic Media Player incorporado [Android 4.1+].\n\nEm alternativa, pode transferir o extra <i>Prestissimo</i>, disponível na Google Play.\nQuaisquer problemas que ocorram com o Prestissimo não são da responsabilidade dos programadores do AntennaPod e devem ser reportados ao dono do extra.</string>
<string name="no_playback_plugin_or_sonic_msg">Para que a velocidade variável de reprodução funcione, recomendamos que ative o Sonic Media Player incorporado [Android 4.1+].\n\nEm alternativa, pode descarregar o extra <i>Prestissimo</i>, disponível na Google Play.\nQuaisquer problemas que ocorram com o Prestissimo não são da responsabilidade dos programadores do AntennaPod e devem ser reportados ao dono do extra.</string>
<string name="set_playback_speed_label">Velocidades de reprodução</string>
<string name="enable_sonic">Ativar Sonic</string>
<!--Empty list labels-->
@ -298,6 +299,8 @@
<string name="pref_smart_mark_as_played_title">Marcar como reproduzido (inteligente)</string>
<string name="pref_skip_keeps_episodes_sum">Manter episódios mesmo que tenham sido ignorados</string>
<string name="pref_skip_keeps_episodes_title">Manter episódios ignorados</string>
<string name="pref_favorite_keeps_episodes_sum">Manter episódios se forem assinalados como favoritos</string>
<string name="pref_favorite_keeps_episodes_title">Manter episódios favoritos</string>
<string name="playback_pref">Reprodução</string>
<string name="network_pref">Rede</string>
<string name="pref_autoUpdateIntervallOrTime_title">Intervalo de atualização ou hora do dia</string>
@ -341,6 +344,8 @@
<string name="pref_automatic_download_sum">Configurar a descarga automática dos episódios</string>
<string name="pref_autodl_wifi_filter_title">Ativar filtro Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Apenas permitir descargas automáticas através de redes sem fios</string>
<string name="pref_autodl_allow_on_mobile_title">Descarregar através de dados móveis</string>
<string name="pref_autodl_allow_on_mobile_sum">Permitir descargas automáticas através de ligações de dados móveis.</string>
<string name="pref_automatic_download_on_battery_title">Descarregar se não estiver a carregar</string>
<string name="pref_automatic_download_on_battery_sum">Permitir descarga automática se a bateria não estiver a ser carregada</string>
<string name="pref_parallel_downloads_title">Descargas simultâneas</string>
@ -408,7 +413,7 @@
<string name="pref_cast_title">Suporte Chromecast</string>
<string name="pref_cast_message_play_flavor">Ativar suporte a reprodução multimédia em dispositivos Cast (tais como Chromecast, Android TV...)</string>
<string name="pref_cast_message_free_flavor">O Chromecast necessita de bibliotecas proprietárias de terceiros que estão desativadas nesta versão do AntennaPod</string>
<string name="pref_enqueue_downloaded_title">Colocar descarregados na fila</string>
<string name="pref_enqueue_downloaded_title">Colocar descargas na fila</string>
<string name="pref_enqueue_downloaded_summary">Adicionar à fila os episódios descarregados</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Ativar flattr automático</string>

View File

@ -661,6 +661,15 @@
<string name="proxy_host_invalid_error">Host is not a valid IP address or domain</string>
<string name="proxy_port_invalid_error">Port not valid</string>
<!-- Database import/export -->
<string name="import_export">Database import/export</string>
<string name="import_export_warning">This experimental function can be used to transfer your subscriptions and played episodes to another device.\n\nExported databases can only be imported when using the same version of AntennaPod. Otherwise, this function will lead to unexpected behavior.\n\nAfter importing, episodes might be displayed as downloaded even though they are not. Just press the play button of the episodes to make AntennaPod detect this.</string>
<string name="label_import">Import</string>
<string name="label_export">Export</string>
<string name="import_select_file">Select file to import</string>
<string name="export_ok">Export successful. The database was written to the SD card.</string>
<string name="import_ok">Import successful.\n\nPlease press OK to restart AntennaPod</string>
<!-- Casting -->
<string name="cast_media_route_menu_title">Play on&#8230;</string>
<string name="cast_disconnect_label">Disconnect the cast session</string>

Binary file not shown.

View File

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-bin.zip