Browse Source

Merge remote-tracking branch 'origin/master' into combine_rss_feed_views

# Conflicts:
#	app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java
#	app/src/main/java/org/transdroid/core/gui/rss/RssfeedsActivity.java
#	app/src/main/res/values/strings.xml
pull/526/head
Twig N 5 years ago
parent
commit
5dc916396d
  1. 2
      app/build.gradle
  2. 4
      app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java
  3. 38
      app/src/main/java/org/transdroid/core/app/settings/SettingsUtils.java
  4. 9
      app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java
  5. 7
      app/src/main/java/org/transdroid/core/gui/DetailsActivity.java
  6. 6
      app/src/main/java/org/transdroid/core/gui/DetailsFragment.java
  7. 8
      app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java
  8. 6
      app/src/main/java/org/transdroid/core/gui/navigation/Label.java
  9. 39
      app/src/main/java/org/transdroid/core/gui/navigation/SetLabelDialog.java
  10. 25
      app/src/main/java/org/transdroid/core/gui/navigation/SetStorageLocationDialog.java
  11. 22
      app/src/main/java/org/transdroid/core/gui/navigation/SetTrackersDialog.java
  12. 49
      app/src/main/java/org/transdroid/core/gui/navigation/SetTransferRatesDialog.java
  13. 253
      app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java
  14. 7
      app/src/main/java/org/transdroid/core/gui/rss/RssFeedsActivity.java
  15. 7
      app/src/main/java/org/transdroid/core/gui/rss/RssItemsActivity.java
  16. 424
      app/src/main/java/org/transdroid/core/gui/rss/RssfeedsActivity.java
  17. 7
      app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java
  18. 6
      app/src/main/java/org/transdroid/core/gui/search/SearchResultsFragment.java
  19. 8
      app/src/main/java/org/transdroid/core/widget/ListWidgetConfig.java
  20. 5
      app/src/main/java/org/transdroid/core/widget/ListWidgetConfigActivity.java
  21. 4
      app/src/main/java/org/transdroid/core/widget/ListWidgetPreviewAdapter.java
  22. 3
      app/src/main/java/org/transdroid/core/widget/ListWidgetProvider.java
  23. 5
      app/src/main/java/org/transdroid/core/widget/ListWidgetViewsService.java
  24. 4
      app/src/main/res/drawable-night/details_list_background.xml
  25. 0
      app/src/main/res/drawable-night/loading_progress.xml
  26. 4
      app/src/main/res/drawable/details_list_background.xml
  27. 0
      app/src/main/res/drawable/loading_progress.xml
  28. 12
      app/src/main/res/layout/activity_widgetconfig.xml
  29. 4
      app/src/main/res/layout/list_item_widget.xml
  30. 70
      app/src/main/res/layout/list_item_widget_light.xml
  31. 17
      app/src/main/res/layout/widget_torrents.xml
  32. 222
      app/src/main/res/layout/widget_torrents_dark.xml
  33. 1
      app/src/main/res/values-bg/strings.xml
  34. 1
      app/src/main/res/values-cs/strings.xml
  35. 1
      app/src/main/res/values-da/strings.xml
  36. 1
      app/src/main/res/values-de/strings.xml
  37. 1
      app/src/main/res/values-es/strings.xml
  38. 1
      app/src/main/res/values-fa/strings.xml
  39. 1
      app/src/main/res/values-fr/strings.xml
  40. 1
      app/src/main/res/values-he/strings.xml
  41. 1
      app/src/main/res/values-hu/strings.xml
  42. 1
      app/src/main/res/values-it/strings.xml
  43. 1
      app/src/main/res/values-ja/strings.xml
  44. 1
      app/src/main/res/values-ko/strings.xml
  45. 9
      app/src/main/res/values-night/colors_transdroid.xml
  46. 15
      app/src/main/res/values-night/styles_transdroid.xml
  47. 1
      app/src/main/res/values-nl/strings.xml
  48. 1
      app/src/main/res/values-pl/strings.xml
  49. 1
      app/src/main/res/values-pt-rBR/strings.xml
  50. 1
      app/src/main/res/values-pt/strings.xml
  51. 1
      app/src/main/res/values-ru/strings.xml
  52. 1
      app/src/main/res/values-sl/strings.xml
  53. 1
      app/src/main/res/values-sv/strings.xml
  54. 1
      app/src/main/res/values-tr/strings.xml
  55. 10
      app/src/main/res/values-v21/styles.xml
  56. 1
      app/src/main/res/values-zh-rCN/strings.xml
  57. 10
      app/src/main/res/values/colors_transdroid.xml
  58. 583
      app/src/main/res/values/strings.xml
  59. 8
      app/src/main/res/values/styles.xml
  60. 15
      app/src/main/res/values/styles_transdroid.xml
  61. 4
      app/src/main/res/xml/listwidget_info.xml
  62. 8
      app/src/main/res/xml/pref_system.xml
  63. 3
      build.gradle
  64. 6
      gradle.properties
  65. 4
      gradle/wrapper/gradle-wrapper.properties

2
app/build.gradle

@ -15,7 +15,7 @@ android {
annotationProcessorOptions { annotationProcessorOptions {
arguments = [ arguments = [
"resourcePackageName": "org.transdroid", "resourcePackageName": "org.transdroid",
"androidManifestFile": "app/src/main/AndroidManifest.xml" "androidManifestFile": file("src/main/AndroidManifest.xml").absolutePath
] ]
} }
} }

4
app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java

@ -712,8 +712,7 @@ public class ApplicationSettings {
StatusType.valueOf(prefs.getString("widget_status_" + appWidgetId, StatusType.ShowAll.name())), StatusType.valueOf(prefs.getString("widget_status_" + appWidgetId, StatusType.ShowAll.name())),
TorrentsSortBy.valueOf(prefs.getString("widget_sortby_" + appWidgetId, TorrentsSortBy.Alphanumeric.name())), TorrentsSortBy.valueOf(prefs.getString("widget_sortby_" + appWidgetId, TorrentsSortBy.Alphanumeric.name())),
prefs.getBoolean("widget_reverse_" + appWidgetId, false), prefs.getBoolean("widget_reverse_" + appWidgetId, false),
prefs.getBoolean("widget_showstatus_" + appWidgetId, false), prefs.getBoolean("widget_showstatus_" + appWidgetId, false));
prefs.getBoolean("widget_darktheme_" + appWidgetId, false));
// @formatter:on // @formatter:on
} }
@ -733,7 +732,6 @@ public class ApplicationSettings {
edit.putString("widget_sortby_" + appWidgetId, settings.getSortBy().name()); edit.putString("widget_sortby_" + appWidgetId, settings.getSortBy().name());
edit.putBoolean("widget_reverse_" + appWidgetId, settings.shouldReserveSort()); edit.putBoolean("widget_reverse_" + appWidgetId, settings.shouldReserveSort());
edit.putBoolean("widget_showstatus_" + appWidgetId, settings.shouldShowStatusView()); edit.putBoolean("widget_showstatus_" + appWidgetId, settings.shouldShowStatusView());
edit.putBoolean("widget_darktheme_" + appWidgetId, settings.shouldUseDarkTheme());
edit.apply(); edit.apply();
} }

38
app/src/main/java/org/transdroid/core/app/settings/SettingsUtils.java

@ -0,0 +1,38 @@
package org.transdroid.core.app.settings;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatDelegate;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme;
public class SettingsUtils {
/**
* Set the theme according to the user preference.
*/
public static void applyDayNightTheme(AppCompatActivity activity) {
SystemSettings settings = SystemSettings_.getInstance_(activity);
if (settings.autoDarkTheme()) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
} else {
AppCompatDelegate.setDefaultNightMode(settings.useDarkTheme() ?
AppCompatDelegate.MODE_NIGHT_YES :
AppCompatDelegate.MODE_NIGHT_NO
);
}
}
public static MaterialDialog.Builder applyDialogTheme(MaterialDialog.Builder builder) {
SystemSettings settings = SystemSettings_.getInstance_(builder.getContext());
if (settings.autoDarkTheme()) {
return builder;
}
return builder.theme(settings.useDarkTheme() ? Theme.DARK: Theme.LIGHT);
}
}

9
app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java

@ -26,7 +26,6 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import com.afollestad.materialdialogs.Theme;
/** /**
* Allows instantiation of the settings specified in R.xml.pref_system. * Allows instantiation of the settings specified in R.xml.pref_system.
@ -59,12 +58,12 @@ public class SystemSettings {
return prefs.getBoolean("system_checkupdates", true); return prefs.getBoolean("system_checkupdates", true);
} }
public boolean useDarkTheme() { public boolean autoDarkTheme() {
return prefs.getBoolean("system_usedarktheme", false); return prefs.getBoolean("system_autodarktheme", true);
} }
public Theme getMaterialDialogtheme() { public boolean useDarkTheme() {
return useDarkTheme() ? Theme.DARK: Theme.LIGHT; return prefs.getBoolean("system_usedarktheme", false);
} }
/** /**

7
app/src/main/java/org/transdroid/core/gui/DetailsActivity.java

@ -40,7 +40,7 @@ import org.androidannotations.annotations.ViewById;
import org.transdroid.R; import org.transdroid.R;
import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ApplicationSettings;
import org.transdroid.core.app.settings.ServerSetting; import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.log.Log; import org.transdroid.core.gui.log.Log;
import org.transdroid.core.gui.navigation.Label; import org.transdroid.core.gui.navigation.Label;
@ -114,10 +114,7 @@ public class DetailsActivity extends AppCompatActivity implements TorrentTasksEx
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
// Set the theme according to the user preference SettingsUtils.applyDayNightTheme(this);
if (SystemSettings_.getInstance_(this).useDarkTheme()) {
setTheme(R.style.TransdroidTheme_Dark);
}
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }

6
app/src/main/java/org/transdroid/core/gui/DetailsFragment.java

@ -122,11 +122,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
// On large screens where this fragment is shown next to the torrents list, we show a continues grey vertical // On large screens where this fragment is shown next to the torrents list, we show a continues grey vertical
// line to separate the lists visually // line to separate the lists visually
if (!NavigationHelper_.getInstance_(getActivity()).isSmallScreen()) { if (!NavigationHelper_.getInstance_(getActivity()).isSmallScreen()) {
if (SystemSettings_.getInstance_(getActivity()).useDarkTheme()) { detailsContainer.setBackgroundResource(R.drawable.details_list_background);
detailsContainer.setBackgroundResource(R.drawable.details_list_background_dark);
} else {
detailsContainer.setBackgroundResource(R.drawable.details_list_background_light);
}
} }
createMenuOptions(); createMenuOptions();

8
app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java

@ -68,8 +68,8 @@ import org.transdroid.R;
import org.transdroid.core.app.search.SearchHelper_; import org.transdroid.core.app.search.SearchHelper_;
import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ApplicationSettings;
import org.transdroid.core.app.settings.ServerSetting; import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.app.settings.SystemSettings; import org.transdroid.core.app.settings.SystemSettings;
import org.transdroid.core.app.settings.SystemSettings_;
import org.transdroid.core.app.settings.WebsearchSetting; import org.transdroid.core.app.settings.WebsearchSetting;
import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.lists.SimpleListItem; import org.transdroid.core.gui.lists.SimpleListItem;
@ -220,10 +220,8 @@ public class TorrentsActivity extends AppCompatActivity implements TorrentTasksE
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
// Set the theme according to the user preference SettingsUtils.applyDayNightTheme(this);
if (SystemSettings_.getInstance_(this).useDarkTheme()) {
setTheme(R.style.TransdroidTheme_Dark);
}
// Catch any uncaught exception to log it // Catch any uncaught exception to log it
Thread.setDefaultUncaughtExceptionHandler(new LogUncaughtExceptionHandler(this, Thread.getDefaultUncaughtExceptionHandler())); Thread.setDefaultUncaughtExceptionHandler(new LogUncaughtExceptionHandler(this, Thread.getDefaultUncaughtExceptionHandler()));
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

6
app/src/main/java/org/transdroid/core/gui/navigation/Label.java

@ -101,13 +101,17 @@ public class Label implements SimpleListItem, NavigationFilter, Comparable<Label
} }
ArrayList<Label> localLabels = new ArrayList<>(); ArrayList<Label> localLabels = new ArrayList<>();
unnamedLabelText = unnamedLabel; unnamedLabelText = unnamedLabel;
localLabels.add(new Label(unnamedLabel, -1, true));
for (org.transdroid.daemon.Label label : daemonLabels) { for (org.transdroid.daemon.Label label : daemonLabels) {
if (label != null && !TextUtils.isEmpty(label.getName())) { if (label != null && !TextUtils.isEmpty(label.getName())) {
localLabels.add(new Label(label)); localLabels.add(new Label(label));
} }
} }
Collections.sort(localLabels); Collections.sort(localLabels);
// force unlabelled to be at the top
localLabels.add(0, new Label(unnamedLabel, -1, true));
return localLabels; return localLabels;
} }

39
app/src/main/java/org/transdroid/core/gui/navigation/SetLabelDialog.java

@ -30,7 +30,7 @@ import com.nispok.snackbar.Snackbar;
import com.nispok.snackbar.SnackbarManager; import com.nispok.snackbar.SnackbarManager;
import org.transdroid.R; import org.transdroid.R;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -56,23 +56,30 @@ public class SetLabelDialog {
final ListView labelsList = (ListView) setLabelLayout.findViewById(R.id.labels_list); final ListView labelsList = (ListView) setLabelLayout.findViewById(R.id.labels_list);
final EditText newLabelEdit = (EditText) setLabelLayout.findViewById(R.id.newlabel_edit); final EditText newLabelEdit = (EditText) setLabelLayout.findViewById(R.id.newlabel_edit);
final MaterialDialog dialog = new MaterialDialog.Builder(context).customView(setLabelLayout, false).positiveText(R.string.status_update) MaterialDialog.Builder builder = new MaterialDialog.Builder(context)
.neutralText(R.string.status_label_remove).negativeText(android.R.string.cancel).callback(new MaterialDialog.ButtonCallback() { .customView(setLabelLayout, false)
@Override .positiveText(R.string.status_update)
public void onPositive(MaterialDialog dialog) { .neutralText(R.string.status_label_remove)
// User should have provided a new label .negativeText(android.R.string.cancel)
if (TextUtils.isEmpty(newLabelEdit.getText())) { .callback(new MaterialDialog.ButtonCallback() {
SnackbarManager.show(Snackbar.with(context).text(R.string.error_notalabel).colorResource(R.color.red)); @Override
return; public void onPositive(MaterialDialog dialog) {
} // User should have provided a new label
onLabelPickedListener.onLabelPicked(newLabelEdit.getText().toString()); if (TextUtils.isEmpty(newLabelEdit.getText())) {
SnackbarManager.show(Snackbar.with(context).text(R.string.error_notalabel).colorResource(R.color.red));
return;
} }
onLabelPickedListener.onLabelPicked(newLabelEdit.getText().toString());
}
@Override @Override
public void onNeutral(MaterialDialog dialog) { public void onNeutral(MaterialDialog dialog) {
onLabelPickedListener.onLabelPicked(null); onLabelPickedListener.onLabelPicked(null);
} }
}).theme(SystemSettings_.getInstance_(context).getMaterialDialogtheme()).build(); });
final MaterialDialog dialog = SettingsUtils
.applyDialogTheme(builder)
.build();
if (currentLabels.size() == 0) { if (currentLabels.size() == 0) {
// Hide the list (and its label) if there are no labels yet // Hide the list (and its label) if there are no labels yet

25
app/src/main/java/org/transdroid/core/gui/navigation/SetStorageLocationDialog.java

@ -24,7 +24,7 @@ import android.widget.EditText;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import org.transdroid.R; import org.transdroid.R;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
public class SetStorageLocationDialog { public class SetStorageLocationDialog {
@ -38,14 +38,21 @@ public class SetStorageLocationDialog {
View locationLayout = LayoutInflater.from(context).inflate(R.layout.dialog_storagelocation, null); View locationLayout = LayoutInflater.from(context).inflate(R.layout.dialog_storagelocation, null);
final EditText locationText = (EditText) locationLayout.findViewById(R.id.location_edit); final EditText locationText = (EditText) locationLayout.findViewById(R.id.location_edit);
locationText.setText(currentLocation); locationText.setText(currentLocation);
new MaterialDialog.Builder(context).customView(locationLayout, false).positiveText(R.string.status_update) MaterialDialog.Builder builder = new MaterialDialog.Builder(context)
.negativeText(android.R.string.cancel).callback(new MaterialDialog.ButtonCallback() { .customView(locationLayout, false)
@Override .positiveText(R.string.status_update)
public void onPositive(MaterialDialog dialog) { .negativeText(android.R.string.cancel)
// User is done editing and requested to update given the text input .callback(new MaterialDialog.ButtonCallback() {
onStorageLocationUpdatedListener.onStorageLocationUpdated(locationText.getText().toString()); @Override
} public void onPositive(MaterialDialog dialog) {
}).theme(SystemSettings_.getInstance_(context).getMaterialDialogtheme()).show(); // User is done editing and requested to update given the text input
onStorageLocationUpdatedListener.onStorageLocationUpdated(locationText.getText().toString());
}
});
SettingsUtils
.applyDialogTheme(builder)
.show();
} }
public interface OnStorageLocationUpdatedListener { public interface OnStorageLocationUpdatedListener {

22
app/src/main/java/org/transdroid/core/gui/navigation/SetTrackersDialog.java

@ -25,7 +25,7 @@ import android.widget.EditText;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import org.transdroid.R; import org.transdroid.R;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -42,14 +42,18 @@ public class SetTrackersDialog extends DialogFragment {
View trackersLayout = LayoutInflater.from(context).inflate(R.layout.dialog_trackers, null); View trackersLayout = LayoutInflater.from(context).inflate(R.layout.dialog_trackers, null);
final EditText trackersText = (EditText) trackersLayout.findViewById(R.id.trackers_edit); final EditText trackersText = (EditText) trackersLayout.findViewById(R.id.trackers_edit);
trackersText.setText(currentTrackers); trackersText.setText(currentTrackers);
new MaterialDialog.Builder(context).customView(trackersLayout, false).positiveText(R.string.status_update) MaterialDialog.Builder builder = new MaterialDialog.Builder(context)
.negativeText(android.R.string.cancel).callback(new MaterialDialog.ButtonCallback() { .customView(trackersLayout, false)
@Override .positiveText(R.string.status_update)
public void onPositive(MaterialDialog dialog) { .negativeText(android.R.string.cancel)
// User is done editing and requested to update given the text input .callback(new MaterialDialog.ButtonCallback() {
onTrackersUpdatedListener.onTrackersUpdated(Arrays.asList(trackersText.getText().toString().split("\n"))); @Override
} public void onPositive(MaterialDialog dialog) {
}).theme(SystemSettings_.getInstance_(context).getMaterialDialogtheme()).show(); // User is done editing and requested to update given the text input
onTrackersUpdatedListener.onTrackersUpdated(Arrays.asList(trackersText.getText().toString().split("\n")));
}
});
SettingsUtils.applyDialogTheme(builder).show();
} }
public interface OnTrackersUpdatedListener { public interface OnTrackersUpdatedListener {

49
app/src/main/java/org/transdroid/core/gui/navigation/SetTransferRatesDialog.java

@ -26,7 +26,7 @@ import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
import org.transdroid.R; import org.transdroid.R;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
public class SetTransferRatesDialog { public class SetTransferRatesDialog {
@ -41,29 +41,34 @@ public class SetTransferRatesDialog {
final TextView maxSpeedDown = (TextView) transferRatesLayout.findViewById(R.id.maxspeeddown_text); final TextView maxSpeedDown = (TextView) transferRatesLayout.findViewById(R.id.maxspeeddown_text);
final TextView maxSpeedUp = (TextView) transferRatesLayout.findViewById(R.id.maxspeedup_text); final TextView maxSpeedUp = (TextView) transferRatesLayout.findViewById(R.id.maxspeedup_text);
MaterialDialog dialog = new MaterialDialog.Builder(context).customView(transferRatesLayout, false).positiveText(R.string.status_update) MaterialDialog.Builder builder = new MaterialDialog.Builder(context)
.neutralText(R.string.status_maxspeed_reset).negativeText(android.R.string.cancel).callback(new MaterialDialog.ButtonCallback() { .customView(transferRatesLayout, false)
@Override .positiveText(R.string.status_update)
public void onPositive(MaterialDialog dialog) { .neutralText(R.string.status_maxspeed_reset)
int maxDown = -1, maxUp = -1; .negativeText(android.R.string.cancel)
try { .callback(new MaterialDialog.ButtonCallback() {
maxDown = Integer.parseInt(maxSpeedDown.getText().toString()); @Override
maxUp = Integer.parseInt(maxSpeedUp.getText().toString()); public void onPositive(MaterialDialog dialog) {
} catch (NumberFormatException e) { int maxDown = -1, maxUp = -1;
// Impossible as we only input via the number buttons try {
} maxDown = Integer.parseInt(maxSpeedDown.getText().toString());
if (maxDown <= 0 || maxUp <= 0) { maxUp = Integer.parseInt(maxSpeedUp.getText().toString());
onRatesPickedListener.onInvalidNumber(); } catch (NumberFormatException e) {
return; // Impossible as we only input via the number buttons
}
onRatesPickedListener.onRatesPicked(maxDown, maxUp);
} }
if (maxDown <= 0 || maxUp <= 0) {
@Override onRatesPickedListener.onInvalidNumber();
public void onNeutral(MaterialDialog dialog) { return;
onRatesPickedListener.resetRates();
} }
}).theme(SystemSettings_.getInstance_(context).getMaterialDialogtheme()).build(); onRatesPickedListener.onRatesPicked(maxDown, maxUp);
}
@Override
public void onNeutral(MaterialDialog dialog) {
onRatesPickedListener.resetRates();
}
});
MaterialDialog dialog = SettingsUtils.applyDialogTheme(builder).build();
bindButtons(dialog.getCustomView(), maxSpeedDown, R.id.down1Button, R.id.down2Button, R.id.down3Button, R.id.down4Button, R.id.down5Button, bindButtons(dialog.getCustomView(), maxSpeedDown, R.id.down1Button, R.id.down2Button, R.id.down3Button, R.id.down4Button, R.id.down5Button,
R.id.down6Button, R.id.down7Button, R.id.down8Button, R.id.down9Button, R.id.down0Button); R.id.down6Button, R.id.down7Button, R.id.down8Button, R.id.down9Button, R.id.down0Button);

253
app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java

@ -0,0 +1,253 @@
/*
* Copyright 2010-2018 Eric Kok et al.
*
* Transdroid 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.
*
* Transdroid 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 Transdroid. If not, see <http://www.gnu.org/licenses/>.
*/
package org.transdroid.core.gui.remoterss;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.widget.LinearLayout;
import android.widget.ListView;
import com.nispok.snackbar.Snackbar;
import com.nispok.snackbar.SnackbarManager;
import com.nispok.snackbar.enums.SnackbarType;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.InstanceState;
import org.androidannotations.annotations.ItemClick;
import org.androidannotations.annotations.NonConfigurationInstance;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import org.transdroid.R;
import org.transdroid.core.app.settings.ApplicationSettings;
import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.lists.SimpleListItemAdapter;
import org.transdroid.core.gui.log.Log;
import org.transdroid.core.gui.navigation.RefreshableActivity;
import org.transdroid.core.gui.remoterss.data.RemoteRssChannel;
import org.transdroid.core.gui.remoterss.data.RemoteRssItem;
import org.transdroid.core.gui.remoterss.data.RemoteRssSupplier;
import org.transdroid.core.service.ConnectivityHelper;
import org.transdroid.daemon.DaemonException;
import org.transdroid.daemon.IDaemonAdapter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/**
* An activity that displays a list of {@link RemoteRssItem}s via an instance of {@link RemoteRssFragment}.
* The activity manages the drawer to filter items by the feed they came through.
*
* By default it displays the latest items within the last month.
*
* @author Twig Nguyen
*/
@EActivity(R.layout.activity_remoterss)
public class RemoteRssActivity extends AppCompatActivity implements RefreshableActivity {
@NonConfigurationInstance
protected ArrayList<RemoteRssChannel> feeds;
@InstanceState
protected int selectedFilter;
@NonConfigurationInstance
protected ArrayList<RemoteRssItem> recentItems;
// Server connection
@Bean
protected ApplicationSettings applicationSettings;
@Bean
protected Log log;
@Bean
protected ConnectivityHelper connectivityHelper;
private IDaemonAdapter currentConnection;
// Details view components
@ViewById
protected DrawerLayout drawerLayout;
@ViewById
protected LinearLayout drawerContainer;
@ViewById
protected Toolbar torrentsToolbar;
@ViewById
protected ListView drawerList;
@FragmentById(R.id.remoterss_fragment)
protected RemoteRssFragment fragmentRemoteRss;
@Override
public void onCreate(Bundle savedInstanceState) {
SettingsUtils.applyDayNightTheme(this);
super.onCreate(savedInstanceState);
}
@AfterViews
protected void init() {
// Simple action bar with up, torrent name as title and refresh button
torrentsToolbar.setNavigationIcon(R.drawable.ic_action_drawer);
setSupportActionBar(torrentsToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Connect to the last used server
ServerSetting lastUsed = applicationSettings.getLastUsedServer();
currentConnection = lastUsed.createServerAdapter(connectivityHelper.getConnectedNetworkName(), this);
if (feeds != null) {
// Called from a configuration change. No need to load anything from server
showChannelFilters();
fragmentRemoteRss.updateRemoteItems(
selectedFilter == 0 ? recentItems : feeds.get(selectedFilter - 1).getItems(),
false /* allow android to restore scroll position */ );
} else {
loadFeeds();
}
}
@Background
protected void loadFeeds() {
try {
fragmentRemoteRss.setRefreshing(true);
feeds = ((RemoteRssSupplier) (currentConnection)).getRemoteRssChannels(log);
fragmentRemoteRss.setRefreshing(false);
} catch (DaemonException e) {
onCommunicationError(e);
}
recentItems = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
Date oneMonthAgo = calendar.getTime();
for (RemoteRssChannel feed : feeds) {
for (RemoteRssItem item : feed.getItems()) {
if (item.getTimestamp().after(oneMonthAgo)) {
recentItems.add(item);
}
}
}
// Sort by -newest
Collections.sort(recentItems, new Comparator<RemoteRssItem>() {
@Override
public int compare(RemoteRssItem lhs, RemoteRssItem rhs) {
return rhs.getTimestamp().compareTo(lhs.getTimestamp());
}
});
afterLoadFeeds();
}
@UiThread
protected void afterLoadFeeds() {
// We need to wrap these calls in a @UiThread rather than make them each a @UiThread themselves
// because they need to run sequentially in a configuration change scenario in order for Android
// to maintain scroll position on the fragment adapter.
showChannelFilters();
onFeedSelected(selectedFilter);
}
@UiThread
protected void onCommunicationError(DaemonException daemonException) {
//noinspection ThrowableResultOfMethodCallIgnored
log.i(this, daemonException.toString());
String error = getString(LocalTorrent.getResourceForDaemonException(daemonException));
SnackbarManager.show(Snackbar.with(this).text(error).colorResource(R.color.red).type(SnackbarType.MULTI_LINE));
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@OptionsItem(android.R.id.home)
protected void navigateUp() {
if (drawerLayout.isDrawerOpen(drawerContainer)) {
drawerLayout.closeDrawers();
} else {
drawerLayout.openDrawer(drawerContainer);
}
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(drawerContainer)) {
drawerLayout.closeDrawers();
} else {
finish();
}
}
private void showChannelFilters() {
List<RemoteRssChannel> feedLabels = new ArrayList<>(feeds.size() +1);
feedLabels.add(new RemoteRssChannel() {
@Override
public String getName() {
return getString(R.string.remoterss_filter_allrecent);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
});
feedLabels.addAll(feeds);
drawerList.setAdapter(new SimpleListItemAdapter(this, feedLabels));
}
@ItemClick(R.id.drawer_list)
protected void onFeedSelected(int position) {
selectedFilter = position;
fragmentRemoteRss.updateRemoteItems(position == 0 ? recentItems : feeds.get(position - 1).getItems(), true);
RemoteRssChannel channel = (RemoteRssChannel) drawerList.getAdapter().getItem(position);
getSupportActionBar().setSubtitle(channel.getName());
drawerLayout.closeDrawers();
}
public IDaemonAdapter getCurrentConnection() {
return currentConnection;
}
public RemoteRssChannel getChannel(String name) {
for (RemoteRssChannel feed : feeds) {
if (feed.getName().equals(name)) {
return feed;
}
}
return null;
}
@Override
public void refreshScreen() {
loadFeeds();
}
}

7
app/src/main/java/org/transdroid/core/gui/rss/RssFeedsActivity.java

@ -51,7 +51,7 @@ import org.transdroid.R;
import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ApplicationSettings;
import org.transdroid.core.app.settings.RssfeedSetting; import org.transdroid.core.app.settings.RssfeedSetting;
import org.transdroid.core.app.settings.ServerSetting; import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.gui.TorrentsActivity_; import org.transdroid.core.gui.TorrentsActivity_;
import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.log.Log; import org.transdroid.core.gui.log.Log;
@ -169,10 +169,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
// Set the theme according to the user preference SettingsUtils.applyDayNightTheme(this);
if (SystemSettings_.getInstance_(this).useDarkTheme()) {
setTheme(R.style.TransdroidTheme_Dark);
}
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }

7
app/src/main/java/org/transdroid/core/gui/rss/RssItemsActivity.java

@ -30,7 +30,7 @@ import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.ViewById;
import org.transdroid.R; import org.transdroid.R;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.gui.TorrentsActivity_; import org.transdroid.core.gui.TorrentsActivity_;
import org.transdroid.core.gui.navigation.NavigationHelper; import org.transdroid.core.gui.navigation.NavigationHelper;
import org.transdroid.core.rssparser.Channel; import org.transdroid.core.rssparser.Channel;
@ -52,10 +52,7 @@ public class RssItemsActivity extends AppCompatActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
// Set the theme according to the user preference SettingsUtils.applyDayNightTheme(this);
if (SystemSettings_.getInstance_(this).useDarkTheme()) {
setTheme(R.style.TransdroidTheme_Dark);
}
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }

424
app/src/main/java/org/transdroid/core/gui/rss/RssfeedsActivity.java

@ -0,0 +1,424 @@
/*
* Copyright 2010-2018 Eric Kok et al.
*
* Transdroid 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.
*
* Transdroid 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 Transdroid. If not, see <http://www.gnu.org/licenses/>.
*/
package org.transdroid.core.gui.rss;
import android.annotation.TargetApi;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import com.nispok.snackbar.Snackbar;
import com.nispok.snackbar.SnackbarManager;
import com.nispok.snackbar.enums.SnackbarType;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.InstanceState;
import org.androidannotations.annotations.NonConfigurationInstance;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import org.transdroid.R;
import org.transdroid.core.app.settings.ApplicationSettings;
import org.transdroid.core.app.settings.RssfeedSetting;
import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.gui.TorrentsActivity_;
import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.log.Log;
import org.transdroid.core.gui.navigation.NavigationHelper;
import org.transdroid.core.gui.remoterss.RemoteRssFragment;
import org.transdroid.core.gui.remoterss.data.RemoteRssChannel;
import org.transdroid.core.gui.remoterss.data.RemoteRssItem;
import org.transdroid.core.gui.remoterss.data.RemoteRssSupplier;
import org.transdroid.core.rssparser.Channel;
import org.transdroid.core.rssparser.RssParser;
import org.transdroid.core.service.ConnectivityHelper;
import org.transdroid.daemon.Daemon;
import org.transdroid.daemon.DaemonException;
import org.transdroid.daemon.IDaemonAdapter;
import org.transdroid.daemon.task.DaemonTaskSuccessResult;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
@EActivity(R.layout.activity_rssfeeds)
public class RssFeedsActivity extends AppCompatActivity {
// Settings and local data
@Bean
protected Log log;
@Bean
protected ApplicationSettings applicationSettings;
protected static final int RSS_FEEDS_LOCAL = 0;
protected static final int RSS_FEEDS_REMOTE = 1;
@FragmentById(R.id.rssfeeds_fragment)
protected RssFeedsFragment fragmentLocalFeeds;
@FragmentById(R.id.rssitems_fragment)
protected RssItemsFragment fragmentItems;
@FragmentById(R.id.remoterss_fragment)
protected RemoteRssFragment fragmentRemoteFeeds;
@ViewById(R.id.rssfeeds_toolbar)
protected Toolbar rssFeedsToolbar;
@ViewById(R.id.rssfeeds_tabs)
protected TabLayout tabLayout;
@ViewById(R.id.rssfeeds_pager)
protected ViewPager viewPager;
// remote RSS stuff
@NonConfigurationInstance
protected ArrayList<RemoteRssChannel> feeds;
@InstanceState
protected int selectedFilter;
@NonConfigurationInstance
protected ArrayList<RemoteRssItem> recentItems;
@Bean
protected ConnectivityHelper connectivityHelper;
protected class LayoutPagerAdapter extends PagerAdapter {
boolean hasRemoteRss;
String serverName;
public LayoutPagerAdapter(boolean hasRemoteRss, String name) {
super();
this.hasRemoteRss = hasRemoteRss;
this.serverName = (name.length() > 0 ? name : getString(R.string.navigation_rss_tabs_remote));
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
int resId = 0;
if (position == RSS_FEEDS_LOCAL) {
resId = R.id.layout_rssfeeds_local;
}
else if (position == RSS_FEEDS_REMOTE) {
resId = R.id.layout_rss_feeds_remote;
}
return findViewById(resId);
}
@Override
public int getCount() {
return (this.hasRemoteRss ? 2 : 1);
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return (view == o);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case RSS_FEEDS_LOCAL:
return getString(R.string.navigation_rss_tabs_local);
case RSS_FEEDS_REMOTE:
return this.serverName;
}
return super.getPageTitle(position);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
SettingsUtils.applyDayNightTheme(this);
super.onCreate(savedInstanceState);
}
@AfterViews
protected void init() {
setSupportActionBar(rssFeedsToolbar);
getSupportActionBar().setTitle(NavigationHelper.buildCondensedFontString(getString(R.string.rss_feeds)));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
IDaemonAdapter currentConnection = this.getCurrentConnection();
boolean hasRemoteRss = Daemon.supportsRemoteRssManagement(currentConnection.getType());
PagerAdapter pagerAdapter = new LayoutPagerAdapter(hasRemoteRss, currentConnection.getSettings().getName());
viewPager.setAdapter(pagerAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.setCurrentItem(0);
if (!hasRemoteRss) {
tabLayout.setVisibility(View.GONE);
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@OptionsItem(android.R.id.home)
protected void navigateUp() {
TorrentsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
}
/**
* Reload the RSS feed settings and start loading all the feeds. To be called from contained fragments.
*/
public void refreshFeeds() {
List<RssfeedLoader> loaders = new ArrayList<>();
// For each RSS feed setting the user created, start a loader that retrieved the RSS feed (via a background
// thread) and, on success, determines the new items in the feed
for (RssfeedSetting setting : applicationSettings.getRssfeedSettings()) {
RssfeedLoader loader = new RssfeedLoader(setting);
loaders.add(loader);
loadRssfeed(loader);
}
fragmentLocalFeeds.update(loaders);
}
/**
* Performs the loading of the RSS feed content and parsing of items, in a background thread.
* @param loader The RSS feed loader for which to retrieve the contents
*/
@Background
protected void loadRssfeed(RssfeedLoader loader) {
try {
// Load and parse the feed
RssParser parser =
new RssParser(loader.getSetting().getUrl(), loader.getSetting().getExcludeFilter(), loader.getSetting().getIncludeFilter());
parser.parse();
handleRssfeedResult(loader, parser.getChannel(), false);
} catch (Exception e) {
// Catch any error that may occurred and register this failure
handleRssfeedResult(loader, null, true);
log.i(this, "RSS feed " + loader.getSetting().getUrl() + " error: " + e.toString());
}
}
/**
* Stores the retrieved RSS feed content channel into the loader and updates the RSS feed in the feeds list fragment.
* @param loader The RSS feed loader that was executed
* @param channel The data that was retrieved, or null if it could not be parsed
* @param hasError True if a connection error occurred in the loading of the feed; false otherwise
*/
@UiThread
protected void handleRssfeedResult(RssfeedLoader loader, Channel channel, boolean hasError) {
loader.update(channel, hasError);
fragmentLocalFeeds.notifyDataSetChanged();
}
/**
* Opens an RSS feed in the dedicated fragment (if there was space in the UI) or a new {@link RssItemsActivity}. Optionally this also registers in
* the user preferences that the feed was now viewed, so that in the future the new items can be properly marked.
* @param loader The RSS feed loader (with settings and the loaded content channel) to show
* @param markAsViewedNow True if the user settings should be updated to reflect this feed's last viewed date; false otherwise
*/
public void openRssfeed(RssfeedLoader loader, boolean markAsViewedNow) {
// The RSS feed content was loaded and can now be shown in the dedicated fragment or a new activity
if (fragmentItems != null && fragmentItems.isAdded()) {
// If desired, update the lastViewedDate and lastViewedItemUrl of this feed in the user setting; this won't
// be loaded until the RSS feeds screen in opened again.
if (!loader.hasError() && loader.getChannel() != null && markAsViewedNow) {
String lastViewedItemUrl = null;
if (loader.getChannel().getItems() != null && loader.getChannel().getItems().size() > 0) {
lastViewedItemUrl = loader.getChannel().getItems().get(0).getTheLink();
}
applicationSettings.setRssfeedLastViewer(loader.getSetting().getOrder(), new Date(), lastViewedItemUrl);
}
fragmentItems.update(loader.getChannel(), loader.hasError(), loader.getSetting().requiresExternalAuthentication());
} else {
// Error message or not yet loaded? Show a toast message instead of opening the items activity
if (loader.hasError()) {
SnackbarManager.show(Snackbar.with(this).text(R.string.rss_error).colorResource(R.color.red));
return;
}
if (loader.getChannel() == null || loader.getChannel().getItems().size() == 0) {
SnackbarManager.show(Snackbar.with(this).text(R.string.rss_notloaded).colorResource(R.color.red));
return;
}
// If desired, update the lastViewedDate and lastViewedItemUrl of this feed in the user setting; this won't
// be loaded until the RSS feeds screen in opened again
if (markAsViewedNow) {
String lastViewedItemUrl = null;
if (loader.getChannel().getItems() != null && loader.getChannel().getItems().size() > 0) {
lastViewedItemUrl = loader.getChannel().getItems().get(0).getTheLink();
}
applicationSettings.setRssfeedLastViewer(loader.getSetting().getOrder(), new Date(), lastViewedItemUrl);
}
String name = loader.getChannel().getTitle();
if (TextUtils.isEmpty(name)) {
name = loader.getSetting().getName();
}
if (TextUtils.isEmpty(name) && !TextUtils.isEmpty(loader.getSetting().getUrl())) {
name = Uri.parse(loader.getSetting().getUrl()).getHost();
}
RssItemsActivity_.intent(this).rssfeed(loader.getChannel()).rssfeedName(name)
.requiresExternalAuthentication(loader.getSetting().requiresExternalAuthentication()).start();
}
}
protected IDaemonAdapter getCurrentConnection() {
ServerSetting lastUsed = applicationSettings.getLastUsedServer();
return lastUsed.createServerAdapter(connectivityHelper.getConnectedNetworkName(), this);
}
// @Background
public void refreshRemoteFeeds() {
// Connect to the last used server
IDaemonAdapter currentConnection = this.getCurrentConnection();
// remote rss not supported for this connection type
if (currentConnection instanceof RemoteRssSupplier == false) {
return;
}
try {
feeds = ((RemoteRssSupplier) (currentConnection)).getRemoteRssChannels(log);
// By default it displays the latest items within the last month.
recentItems = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
Date oneMonthAgo = calendar.getTime();
for (RemoteRssChannel feed : feeds) {
for (RemoteRssItem item : feed.getItems()) {
if (item.getTimestamp().after(oneMonthAgo)) {
recentItems.add(item);
}
}
}
// Sort by -newest
Collections.sort(recentItems, new Comparator<RemoteRssItem>() {
@Override
public int compare(RemoteRssItem lhs, RemoteRssItem rhs) {
return rhs.getTimestamp().compareTo(lhs.getTimestamp());
}
});
} catch (DaemonException e) {
onCommunicationError(e);
return;
}
// @UIThread
fragmentRemoteFeeds.updateRemoteItems(
selectedFilter == 0 ? recentItems : feeds.get(selectedFilter -1).getItems(),
false /* allow android to restore scroll position */ );
showRemoteChannelFilters();
}
@UiThread
protected void onCommunicationError(DaemonException daemonException) {
//noinspection ThrowableResultOfMethodCallIgnored
log.i(this, daemonException.toString());
String error = getString(LocalTorrent.getResourceForDaemonException(daemonException));
SnackbarManager.show(Snackbar.with(this).text(error).colorResource(R.color.red).type(SnackbarType.MULTI_LINE));
}
public void onFeedSelected(int position) {
selectedFilter = position;
if (position == 0) {
fragmentRemoteFeeds.updateRemoteItems(recentItems, true);
}
else {
RemoteRssChannel channel = feeds.get(selectedFilter -1);
fragmentRemoteFeeds.updateRemoteItems(channel.getItems(), true);
}
}
/**
* Download the item in a background thread and display success/fail accordingly.
*/
@Background
public void downloadRemoteRssItem(RemoteRssItem item) {
final RemoteRssSupplier supplier = (RemoteRssSupplier) this.getCurrentConnection();
try {
RemoteRssChannel channel = feeds.get(selectedFilter);
supplier.downloadRemoteRssItem(log, item, channel);
onTaskSucceeded(null, getString(R.string.result_added, item.getTitle()));
} catch (DaemonException e) {
onTaskFailed(getString(LocalTorrent.getResourceForDaemonException(e)));
}
}
@UiThread
protected void onTaskSucceeded(DaemonTaskSuccessResult result, String successMessage) {
SnackbarManager.show(Snackbar.with(this).text(successMessage));
}
@UiThread
protected void onTaskFailed(String message) {
SnackbarManager.show(Snackbar.with(this)
.text(message)
.colorResource(R.color.red)
.type(SnackbarType.MULTI_LINE)
);
}
private void showRemoteChannelFilters() {
List<RemoteRssChannel> feedLabels = new ArrayList<>(feeds.size() +1);
feedLabels.add(new RemoteRssChannel() {
@Override
public String getName() {
return getString(R.string.remoterss_filter_allrecent);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
});
feedLabels.addAll(feeds);
fragmentRemoteFeeds.updateChannelFilters(feedLabels);
}
}

7
app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java

@ -48,7 +48,7 @@ import org.transdroid.core.app.search.SearchHelper;
import org.transdroid.core.app.search.SearchHelper.SearchSortOrder; import org.transdroid.core.app.search.SearchHelper.SearchSortOrder;
import org.transdroid.core.app.search.SearchSite; import org.transdroid.core.app.search.SearchSite;
import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ApplicationSettings;
import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.SettingsUtils;
import org.transdroid.core.app.settings.WebsearchSetting; import org.transdroid.core.app.settings.WebsearchSetting;
import org.transdroid.core.gui.TorrentsActivity_; import org.transdroid.core.gui.TorrentsActivity_;
import org.transdroid.core.gui.navigation.NavigationHelper; import org.transdroid.core.gui.navigation.NavigationHelper;
@ -88,10 +88,7 @@ public class SearchActivity extends AppCompatActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
// Set the theme according to the user preference SettingsUtils.applyDayNightTheme(this);
if (SystemSettings_.getInstance_(this).useDarkTheme()) {
setTheme(R.style.TransdroidTheme_Dark);
}
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }

6
app/src/main/java/org/transdroid/core/gui/search/SearchResultsFragment.java

@ -86,11 +86,7 @@ public class SearchResultsFragment extends Fragment {
// On large screens where this fragment is shown next to the sites list; we show a continues grey vertical line // On large screens where this fragment is shown next to the sites list; we show a continues grey vertical line
// to separate the lists visually // to separate the lists visually
if (!NavigationHelper_.getInstance_(getActivity()).isSmallScreen()) { if (!NavigationHelper_.getInstance_(getActivity()).isSmallScreen()) {
if (SystemSettings_.getInstance_(getActivity()).useDarkTheme()) { resultsList.setBackgroundResource(R.drawable.details_list_background);
resultsList.setBackgroundResource(R.drawable.details_list_background_dark);
} else {
resultsList.setBackgroundResource(R.drawable.details_list_background_light);
}
} }
// Set up the list adapter, which allows multi-select // Set up the list adapter, which allows multi-select

8
app/src/main/java/org/transdroid/core/widget/ListWidgetConfig.java

@ -30,16 +30,14 @@ public class ListWidgetConfig {
private final TorrentsSortBy sortBy; private final TorrentsSortBy sortBy;
private final boolean reserveSort; private final boolean reserveSort;
private final boolean showStatusView; private final boolean showStatusView;
private final boolean useDarkTheme;
public ListWidgetConfig(int serverId, StatusType statusType, TorrentsSortBy sortBy, boolean reverseSort, public ListWidgetConfig(int serverId, StatusType statusType, TorrentsSortBy sortBy, boolean reverseSort,
boolean showStatusView, boolean useDarkTheme) { boolean showStatusView) {
this.serverId = serverId; this.serverId = serverId;
this.statusType = statusType; this.statusType = statusType;
this.sortBy = sortBy; this.sortBy = sortBy;
this.reserveSort = reverseSort; this.reserveSort = reverseSort;
this.showStatusView = showStatusView; this.showStatusView = showStatusView;
this.useDarkTheme = useDarkTheme;
} }
public int getServerId() { public int getServerId() {
@ -62,8 +60,4 @@ public class ListWidgetConfig {
return showStatusView; return showStatusView;
} }
public boolean shouldUseDarkTheme() {
return useDarkTheme;
}
} }

5
app/src/main/java/org/transdroid/core/widget/ListWidgetConfigActivity.java

@ -73,7 +73,7 @@ public class ListWidgetConfigActivity extends AppCompatActivity {
@ViewById @ViewById
protected Spinner serverSpinner, filterSpinner, sortSpinner; protected Spinner serverSpinner, filterSpinner, sortSpinner;
@ViewById @ViewById
protected CheckBox reverseorderCheckBox, showstatusCheckBox, darkthemeCheckBox; protected CheckBox reverseorderCheckBox, showstatusCheckBox;
@ViewById @ViewById
protected TextView filterText, serverText, errorText; protected TextView filterText, serverText, errorText;
@ViewById @ViewById
@ -127,8 +127,7 @@ public class ListWidgetConfigActivity extends AppCompatActivity {
TorrentsSortBy sortBy = ((SortByListItem) sortSpinner.getSelectedItem()).getSortBy(); TorrentsSortBy sortBy = ((SortByListItem) sortSpinner.getSelectedItem()).getSortBy();
boolean reverseSort = reverseorderCheckBox.isChecked(); boolean reverseSort = reverseorderCheckBox.isChecked();
boolean showstatus = showstatusCheckBox.isChecked(); boolean showstatus = showstatusCheckBox.isChecked();
boolean useDarkTheme = darkthemeCheckBox.isChecked(); ListWidgetConfig config = new ListWidgetConfig(server, statusType, sortBy, reverseSort, showstatus);
ListWidgetConfig config = new ListWidgetConfig(server, statusType, sortBy, reverseSort, showstatus, useDarkTheme);
applicationSettings.setWidgetConfig(appWidgetId, config); applicationSettings.setWidgetConfig(appWidgetId, config);
// Return the widget configuration result // Return the widget configuration result

4
app/src/main/java/org/transdroid/core/widget/ListWidgetPreviewAdapter.java

@ -42,7 +42,7 @@ public class ListWidgetPreviewAdapter extends ArrayAdapter<Torrent> {
* @param torrents The already-retrieved, non-null list of torrents to show * @param torrents The already-retrieved, non-null list of torrents to show
*/ */
public ListWidgetPreviewAdapter(Context context, int foo, List<Torrent> torrents) { public ListWidgetPreviewAdapter(Context context, int foo, List<Torrent> torrents) {
super(context, R.layout.list_item_widget_light, torrents); super(context, R.layout.list_item_widget, torrents);
} }
@Override @Override
@ -51,7 +51,7 @@ public class ListWidgetPreviewAdapter extends ArrayAdapter<Torrent> {
// Get the views // Get the views
ViewHolder holder; ViewHolder holder;
if (convertView == null) { if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_widget_light, parent, false); convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_widget, parent, false);
holder = new ViewHolder(); holder = new ViewHolder();
holder.nameText = (TextView) convertView.findViewById(R.id.name_text); holder.nameText = (TextView) convertView.findViewById(R.id.name_text);
holder.progressText = (TextView) convertView.findViewById(R.id.progress_text); holder.progressText = (TextView) convertView.findViewById(R.id.progress_text);

3
app/src/main/java/org/transdroid/core/widget/ListWidgetProvider.java

@ -79,8 +79,7 @@ public class ListWidgetProvider extends AppWidgetProvider {
} }
// Load the dark or light widget layout xml // Load the dark or light widget layout xml
RemoteViews rv = new RemoteViews(context.getPackageName(), RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_torrents);
config.shouldUseDarkTheme() ? R.layout.widget_torrents_dark : R.layout.widget_torrents_light);
// Set up the widget's list view loading service which refers to the WidgetViewsFactory // Set up the widget's list view loading service which refers to the WidgetViewsFactory
Intent data = new Intent(context, ListWidgetViewsService_.class); Intent data = new Intent(context, ListWidgetViewsService_.class);

5
app/src/main/java/org/transdroid/core/widget/ListWidgetViewsService.java

@ -30,7 +30,7 @@ import org.transdroid.R;
import org.transdroid.core.app.settings.*; import org.transdroid.core.app.settings.*;
import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.log.*; import org.transdroid.core.gui.log.*;
import org.transdroid.core.service.*; import org.transdroid.core.service.ConnectivityHelper_;
import org.transdroid.daemon.Daemon; import org.transdroid.daemon.Daemon;
import org.transdroid.daemon.IDaemonAdapter; import org.transdroid.daemon.IDaemonAdapter;
import org.transdroid.daemon.Torrent; import org.transdroid.daemon.Torrent;
@ -166,8 +166,7 @@ class WidgetViewsFactory implements RemoteViewsService.RemoteViewsFactory {
public RemoteViews getViewAt(int position) { public RemoteViews getViewAt(int position) {
// Load the dark or light widget list item layout xml // Load the dark or light widget list item layout xml
RemoteViews rv = new RemoteViews(context.getPackageName(), RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.list_item_widget);
config.shouldUseDarkTheme() ? R.layout.list_item_widget_dark : R.layout.list_item_widget_light);
// Bind the torrent details texts and status colour // Bind the torrent details texts and status colour
Torrent torrent = torrents.get(position); Torrent torrent = torrents.get(position);

4
app/src/main/res/drawable/details_list_background_dark.xml → app/src/main/res/drawable-night/details_list_background.xml

@ -16,6 +16,6 @@
along with Transdroid. If not, see <http://www.gnu.org/licenses/>. along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
--> -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:left="2dp" android:drawable="@color/divider_dark" /> <item android:left="2dp" android:drawable="@color/transdroid_divider" />
<item android:left="4dp" android:drawable="@color/background_dark" /> <item android:left="4dp" android:drawable="@color/transdroid_background" />
</layer-list> </layer-list>

0
app/src/main/res/drawable/loading_progress_dark.xml → app/src/main/res/drawable-night/loading_progress.xml

4
app/src/main/res/drawable/details_list_background_light.xml → app/src/main/res/drawable/details_list_background.xml

@ -16,6 +16,6 @@
along with Transdroid. If not, see <http://www.gnu.org/licenses/>. along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
--> -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:left="2dp" android:drawable="@color/divider_light" /> <item android:left="2dp" android:drawable="@color/transdroid_divider" />
<item android:left="4dp" android:drawable="@color/background_light" /> <item android:left="4dp" android:drawable="@color/transdroid_background" />
</layer-list> </layer-list>

0
app/src/main/res/drawable/loading_progress_light.xml → app/src/main/res/drawable/loading_progress.xml

12
app/src/main/res/layout/activity_widgetconfig.xml

@ -28,13 +28,13 @@
android:background="@null" android:background="@null"
android:padding="@dimen/widget_preview_padding" > android:padding="@dimen/widget_preview_padding" >
<include layout="@layout/widget_torrents_light" /> <include layout="@layout/widget_torrents" />
</FrameLayout> </FrameLayout>
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/background_light" android:background="@color/transdroid_background"
android:fillViewport="true" android:fillViewport="true"
android:paddingLeft="@dimen/margin_default" android:paddingLeft="@dimen/margin_default"
android:paddingRight="@dimen/margin_default" > android:paddingRight="@dimen/margin_default" >
@ -99,14 +99,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half" android:layout_marginTop="@dimen/margin_half"
android:text="@string/widget_showstatusview" /> android:text="@string/widget_showstatusview" />
<CheckBox
android:id="@+id/darktheme_check_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/margin_half"
android:layout_marginTop="@dimen/margin_half"
android:text="@string/widget_usedarktheme" />
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

4
app/src/main/res/layout/list_item_widget_dark.xml → app/src/main/res/layout/list_item_widget.xml

@ -36,7 +36,7 @@
android:fontFamily="sans-serif-condensed" android:fontFamily="sans-serif-condensed"
android:maxLines="1" android:maxLines="1"
android:paddingTop="@dimen/widget_list_item_padding" android:paddingTop="@dimen/widget_list_item_padding"
android:textColor="@color/text_bright_dark" android:textColor="@color/transdroid_text_bright"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textSize="@dimen/text_enlarged" /> android:textSize="@dimen/text_enlarged" />
@ -49,6 +49,7 @@
android:layout_marginLeft="@dimen/widget_list_item_padding" android:layout_marginLeft="@dimen/widget_list_item_padding"
android:layout_marginTop="4dip" android:layout_marginTop="4dip"
android:maxLines="1" android:maxLines="1"
android:textColor="@color/transdroid_text_bright"
android:paddingBottom="@dimen/widget_list_item_padding" android:paddingBottom="@dimen/widget_list_item_padding"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textSize="@dimen/text_small" /> android:textSize="@dimen/text_small" />
@ -62,6 +63,7 @@
android:layout_marginLeft="@dimen/widget_list_item_padding_left" android:layout_marginLeft="@dimen/widget_list_item_padding_left"
android:layout_toLeftOf="@id/ratio_text" android:layout_toLeftOf="@id/ratio_text"
android:maxLines="1" android:maxLines="1"
android:textColor="@color/transdroid_text_bright"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textSize="@dimen/text_small" /> android:textSize="@dimen/text_small" />

70
app/src/main/res/layout/list_item_widget_light.xml

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010-2018 Eric Kok et al.
Transdroid 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.
Transdroid 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 Transdroid. If not, see <http://www.gnu.org/licenses/>.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_line_layout"
android:layout_width="fill_parent"
android:layout_height="@dimen/widget_list_item_height"
android:background="?android:attr/selectableItemBackground"
android:paddingRight="@dimen/widget_list_item_padding" >
<TextView
android:id="@+id/status_view"
android:layout_width="6dp"
android:layout_height="@dimen/widget_list_item_height" />
<TextView
android:id="@+id/name_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/widget_list_item_padding_left"
android:ellipsize="end"
android:fontFamily="sans-serif-condensed"
android:maxLines="1"
android:paddingTop="@dimen/widget_list_item_padding"
android:textColor="@color/text_bright_light"
android:textIsSelectable="false"
android:textSize="@dimen/text_enlarged" />
<TextView
android:id="@+id/ratio_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/name_text"
android:layout_marginLeft="@dimen/widget_list_item_padding"
android:layout_marginTop="4dip"
android:maxLines="1"
android:textColor="@color/text_bright_light"
android:paddingBottom="@dimen/widget_list_item_padding"
android:textIsSelectable="false"
android:textSize="@dimen/text_small" />
<TextView
android:id="@+id/progress_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/ratio_text"
android:layout_alignParentLeft="true"
android:layout_marginLeft="@dimen/widget_list_item_padding_left"
android:layout_toLeftOf="@id/ratio_text"
android:maxLines="1"
android:textColor="@color/text_bright_light"
android:textIsSelectable="false"
android:textSize="@dimen/text_small" />
</RelativeLayout>

17
app/src/main/res/layout/widget_torrents_light.xml → app/src/main/res/layout/widget_torrents.xml

@ -19,7 +19,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/background_light"> android:background="@color/transdroid_background">
<LinearLayout <LinearLayout
android:id="@+id/header_wrapper" android:id="@+id/header_wrapper"
@ -56,10 +56,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="marquee" android:ellipsize="marquee"
android:fontFamily="sans-serif-condensed" android:fontFamily="sans-serif-condensed"
android:maxLines="1" android:singleLine="true"
android:textColor="@color/text_actionbar_dark"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textSize="@dimen/ui_navigation_filter" android:textSize="@dimen/ui_navigation_filter"
android:textColor="@color/transdroid_text_actionbar"
tools:text="Filter" /> tools:text="Filter" />
<TextView <TextView
@ -69,10 +69,10 @@
android:layout_marginTop="-4dip" android:layout_marginTop="-4dip"
android:ellipsize="marquee" android:ellipsize="marquee"
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:maxLines="1" android:singleLine="true"
android:textColor="@color/text_actionbar_dark"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textSize="@dimen/ui_navigation_server" android:textSize="@dimen/ui_navigation_server"
android:textColor="@color/transdroid_text_actionbar"
tools:text="Server"/> tools:text="Server"/>
</LinearLayout> </LinearLayout>
@ -94,7 +94,6 @@
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:paddingTop="@dimen/ui_serverstatus_signmargin" android:paddingTop="@dimen/ui_serverstatus_signmargin"
android:text="↑" android:text="↑"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_sign" android:textSize="@dimen/ui_serverstatus_sign"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
@ -105,7 +104,6 @@
android:layout_toLeftOf="@id/upcount_sign" android:layout_toLeftOf="@id/upcount_sign"
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:gravity="end" android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_bignumber" /> android:textSize="@dimen/ui_serverstatus_bignumber" />
<TextView <TextView
@ -116,7 +114,6 @@
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:paddingTop="@dimen/ui_serverstatus_signmargin" android:paddingTop="@dimen/ui_serverstatus_signmargin"
android:text="↓" android:text="↓"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_sign" android:textSize="@dimen/ui_serverstatus_sign"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
@ -127,7 +124,6 @@
android:layout_toLeftOf="@id/downcount_sign" android:layout_toLeftOf="@id/downcount_sign"
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:gravity="end" android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_bignumber" /> android:textSize="@dimen/ui_serverstatus_bignumber" />
<TextView <TextView
@ -140,7 +136,6 @@
android:layout_marginTop="-4dip" android:layout_marginTop="-4dip"
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:gravity="end" android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_smallnumber" /> android:textSize="@dimen/ui_serverstatus_smallnumber" />
<TextView <TextView
@ -153,7 +148,6 @@
android:layout_marginTop="-4dip" android:layout_marginTop="-4dip"
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:gravity="end" android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_smallnumber" /> android:textSize="@dimen/ui_serverstatus_smallnumber" />
</RelativeLayout> </RelativeLayout>
@ -209,7 +203,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@id/bottomline_view" android:layout_above="@id/bottomline_view"
android:layout_below="@id/topline_view"
android:layout_gravity="center" android:layout_gravity="center"
android:gravity="center" android:gravity="center"
android:maxWidth="400dip" android:maxWidth="400dip"

222
app/src/main/res/layout/widget_torrents_dark.xml

@ -1,222 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010-2018 Eric Kok et al.
Transdroid 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.
Transdroid 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 Transdroid. If not, see <http://www.gnu.org/licenses/>.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_dark">
<ImageButton
android:id="@+id/icon_image"
android:layout_width="@dimen/widget_header_height"
android:layout_height="@dimen/widget_header_height"
android:background="?android:attr/selectableItemBackground"
android:contentDescription="@string/widget_opentransdroid"
android:padding="@dimen/widget_header_padding"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
<ImageButton
android:id="@+id/refresh_button"
android:layout_width="@dimen/widget_header_height"
android:layout_height="@dimen/widget_header_height"
android:layout_alignParentRight="true"
android:background="?android:attr/selectableItemBackground"
android:contentDescription="@string/action_refresh"
android:padding="@dimen/widget_header_padding"
android:scaleType="fitXY"
android:src="@drawable/ic_action_refresh" />
<ImageButton
android:id="@+id/pauseall_button"
android:layout_width="@dimen/widget_header_height"
android:layout_height="@dimen/widget_header_height"
android:layout_toLeftOf="@id/refresh_button"
android:background="?android:attr/selectableItemBackground"
android:contentDescription="@string/action_pauseall"
android:padding="@dimen/widget_header_padding"
android:scaleType="fitXY"
android:src="@drawable/ic_action_pause" />
<ImageButton
android:id="@+id/resumeall_button"
android:layout_width="@dimen/widget_header_height"
android:layout_height="@dimen/widget_header_height"
android:layout_toLeftOf="@id/pauseall_button"
android:background="?android:attr/selectableItemBackground"
android:contentDescription="@string/action_resumeall"
android:padding="@dimen/widget_header_padding"
android:scaleType="fitXY"
android:src="@drawable/ic_action_resume" />
<LinearLayout
android:id="@+id/navigation_view"
android:layout_width="match_parent"
android:layout_height="@dimen/widget_header_height"
android:layout_toLeftOf="@id/resumeall_button"
android:layout_toRightOf="@id/icon_image"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:orientation="vertical"
android:paddingRight="@dimen/margin_half"
android:paddingTop="3dp">
<TextView
android:id="@+id/filter_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fontFamily="sans-serif-condensed"
android:maxLines="1"
android:textColor="@color/text_actionbar_dark"
android:textIsSelectable="false"
android:textSize="@dimen/ui_navigation_filter"
tools:text="Filter" />
<TextView
android:id="@+id/server_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-4dip"
android:ellipsize="marquee"
android:fontFamily="sans-serif-light"
android:maxLines="1"
android:textColor="@color/text_actionbar_dark"
android:textIsSelectable="false"
android:textSize="@dimen/ui_navigation_server"
tools:text="Server" />
</LinearLayout>
<RelativeLayout
android:id="@+id/serverstatus_view"
android:layout_width="match_parent"
android:layout_height="@dimen/widget_header_height"
android:layout_toLeftOf="@id/resumeall_button"
android:layout_toRightOf="@id/icon_image"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:paddingTop="@dimen/ui_serverstatus_margin"
android:visibility="gone">
<TextView
android:id="@+id/upcount_sign"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:fontFamily="sans-serif-light"
android:paddingTop="@dimen/ui_serverstatus_signmargin"
android:text="↑"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_sign"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/upcount_text"
android:layout_width="@dimen/ui_serverstatus_width"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/upcount_sign"
android:fontFamily="sans-serif-light"
android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_bignumber" />
<TextView
android:id="@+id/downcount_sign"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/upcount_text"
android:fontFamily="sans-serif-light"
android:paddingTop="@dimen/ui_serverstatus_signmargin"
android:text="↓"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_sign"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/downcount_text"
android:layout_width="@dimen/ui_serverstatus_width"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/downcount_sign"
android:fontFamily="sans-serif-light"
android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_bignumber" />
<TextView
android:id="@+id/upspeed_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/upcount_text"
android:layout_alignParentRight="true"
android:layout_below="@id/upcount_text"
android:layout_marginTop="-4dip"
android:fontFamily="sans-serif-light"
android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_smallnumber" />
<TextView
android:id="@+id/downspeed_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/downcount_text"
android:layout_alignRight="@id/downcount_sign"
android:layout_below="@id/downcount_text"
android:layout_marginTop="-4dip"
android:fontFamily="sans-serif-light"
android:gravity="end"
android:textColor="@color/text_bright_dark"
android:textSize="@dimen/ui_serverstatus_smallnumber" />
</RelativeLayout>
<TextView
android:id="@+id/topline_view"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_below="@id/icon_image"
android:background="@color/green" />
<TextView
android:id="@+id/bottomline_view"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_alignParentBottom="true"
android:background="@color/green" />
<ListView
android:id="@+id/torrents_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/bottomline_view"
android:layout_below="@id/topline_view"
android:visibility="gone" />
<TextView
android:id="@+id/error_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/bottomline_view"
android:layout_below="@id/topline_view"
android:layout_gravity="center"
android:gravity="center"
android:maxWidth="400dip"
android:padding="@dimen/margin_default"
android:textIsSelectable="false"
android:visibility="gone" />
</RelativeLayout>

1
app/src/main/res/values-bg/strings.xml

@ -126,7 +126,6 @@
<string name="rss_service_newfor">Нови торенти за %1$s</string> <string name="rss_service_newfor">Нови торенти за %1$s</string>
<string name="widget_loading">Зареждане&#8230;</string> <string name="widget_loading">Зареждане&#8230;</string>
<string name="widget_opentransdroid">Отвори Transdroid</string> <string name="widget_opentransdroid">Отвори Transdroid</string>
<string name="widget_usedarktheme">Тъмна тема за интерфейса (няма преглед)</string>
<string name="pref_servers">Сървъри</string> <string name="pref_servers">Сървъри</string>
<string name="pref_addserver">Добавяне на нов сървър</string> <string name="pref_addserver">Добавяне на нов сървър</string>
<string name="pref_defaultserver">Стандартен сървър</string> <string name="pref_defaultserver">Стандартен сървър</string>

1
app/src/main/res/values-cs/strings.xml

@ -171,7 +171,6 @@
<string name="widget_sortby">SEŘADIT VÝSLEDKY</string> <string name="widget_sortby">SEŘADIT VÝSLEDKY</string>
<string name="widget_reversesortorder">Obrátit seřazení</string> <string name="widget_reversesortorder">Obrátit seřazení</string>
<string name="widget_showstatusview">Stav serveru místo jeho názvu</string> <string name="widget_showstatusview">Stav serveru místo jeho názvu</string>
<string name="widget_usedarktheme">Použít tmavé téma (není náhled)</string>
<string name="widget_done">HOTOVO</string> <string name="widget_done">HOTOVO</string>
<string name="pref_servers">Servery</string> <string name="pref_servers">Servery</string>
<string name="pref_addserver">Přidat nový server</string> <string name="pref_addserver">Přidat nový server</string>

1
app/src/main/res/values-da/strings.xml

@ -187,7 +187,6 @@
<string name="widget_sortby">SORTERINGS RÆKKEFØLGE</string> <string name="widget_sortby">SORTERINGS RÆKKEFØLGE</string>
<string name="widget_reversesortorder">Omvendt sorterings rækkefølge</string> <string name="widget_reversesortorder">Omvendt sorterings rækkefølge</string>
<string name="widget_showstatusview">Server status i stedet for titel</string> <string name="widget_showstatusview">Server status i stedet for titel</string>
<string name="widget_usedarktheme">Brug mørkt tema (ingen preview)</string>
<string name="widget_done">FÆRDIG</string> <string name="widget_done">FÆRDIG</string>
<string name="pref_servers">Servere</string> <string name="pref_servers">Servere</string>
<string name="pref_addserver">Tilføj ny server</string> <string name="pref_addserver">Tilføj ny server</string>

1
app/src/main/res/values-de/strings.xml

@ -203,7 +203,6 @@
<string name="widget_sortby">SORTIERREIHENFOLGE</string> <string name="widget_sortby">SORTIERREIHENFOLGE</string>
<string name="widget_reversesortorder">Umgekehrte Sortierreihenfolge</string> <string name="widget_reversesortorder">Umgekehrte Sortierreihenfolge</string>
<string name="widget_showstatusview">Serverstatus anstelle des Titels</string> <string name="widget_showstatusview">Serverstatus anstelle des Titels</string>
<string name="widget_usedarktheme">Dunkles Thema benutzen (keine Vorschau)</string>
<string name="widget_done">FERTIG</string> <string name="widget_done">FERTIG</string>
<string name="pref_servers">Server</string> <string name="pref_servers">Server</string>
<string name="pref_addserver">Neuen Server hinzufügen</string> <string name="pref_addserver">Neuen Server hinzufügen</string>

1
app/src/main/res/values-es/strings.xml

@ -156,7 +156,6 @@
<string name="widget_sortby">CRITERIO DE ORDENACIÓN</string> <string name="widget_sortby">CRITERIO DE ORDENACIÓN</string>
<string name="widget_reversesortorder">Invertir criterio de ordenación</string> <string name="widget_reversesortorder">Invertir criterio de ordenación</string>
<string name="widget_showstatusview">Estado del servidor en lugar del título</string> <string name="widget_showstatusview">Estado del servidor en lugar del título</string>
<string name="widget_usedarktheme">Usar tema oscuro (sin vista previa)</string>
<string name="widget_done">HECHO</string> <string name="widget_done">HECHO</string>
<string name="pref_servers">Servidores</string> <string name="pref_servers">Servidores</string>
<string name="pref_addserver">Añadir nuevo servidor</string> <string name="pref_addserver">Añadir nuevo servidor</string>

1
app/src/main/res/values-fa/strings.xml

@ -195,7 +195,6 @@
<string name="widget_sortby">مرتب کردن بر اساس سفارش </string> <string name="widget_sortby">مرتب کردن بر اساس سفارش </string>
<string name="widget_reversesortorder">معکوس مرتب کردن بر اساس سفارش </string> <string name="widget_reversesortorder">معکوس مرتب کردن بر اساس سفارش </string>
<string name="widget_showstatusview">وضعیت کارگزار بهجای عنوان</string> <string name="widget_showstatusview">وضعیت کارگزار بهجای عنوان</string>
<string name="widget_usedarktheme">استفاده از تم تیره (بدون پیش نمایش) </string>
<string name="widget_done">تمام</string> <string name="widget_done">تمام</string>
<string name="pref_servers">سرورها</string> <string name="pref_servers">سرورها</string>
<string name="pref_addserver">اضافه کردن سرور جدید </string> <string name="pref_addserver">اضافه کردن سرور جدید </string>

1
app/src/main/res/values-fr/strings.xml

@ -187,7 +187,6 @@
<string name="widget_sortby">ORDRE DE TRI</string> <string name="widget_sortby">ORDRE DE TRI</string>
<string name="widget_reversesortorder">Ordre de tri inversé</string> <string name="widget_reversesortorder">Ordre de tri inversé</string>
<string name="widget_showstatusview">Statut du serveur plutôt que le titre</string> <string name="widget_showstatusview">Statut du serveur plutôt que le titre</string>
<string name="widget_usedarktheme">Utilisez thème sombre (pas d\'aperçu)</string>
<string name="widget_done">FINI</string> <string name="widget_done">FINI</string>
<string name="pref_servers">Serveurs</string> <string name="pref_servers">Serveurs</string>
<string name="pref_addserver">Ajouter un nouveau serveur</string> <string name="pref_addserver">Ajouter un nouveau serveur</string>

1
app/src/main/res/values-he/strings.xml

@ -160,7 +160,6 @@
<string name="widget_loading">טוען...</string> <string name="widget_loading">טוען...</string>
<string name="widget_sortby">ממוין לפי</string> <string name="widget_sortby">ממוין לפי</string>
<string name="widget_reversesortorder">הפוך את הרשימה</string> <string name="widget_reversesortorder">הפוך את הרשימה</string>
<string name="widget_usedarktheme">השתמש בעיצוב כהה</string>
<string name="widget_done">סיים</string> <string name="widget_done">סיים</string>
<string name="pref_servers">שרתים</string> <string name="pref_servers">שרתים</string>
<string name="pref_addserver">הוסף שרת חדש</string> <string name="pref_addserver">הוסף שרת חדש</string>

1
app/src/main/res/values-hu/strings.xml

@ -203,7 +203,6 @@
<string name="widget_sortby">RENDEZÉSI SORREND</string> <string name="widget_sortby">RENDEZÉSI SORREND</string>
<string name="widget_reversesortorder">Fordított sorrend</string> <string name="widget_reversesortorder">Fordított sorrend</string>
<string name="widget_showstatusview">Kiszolgáló állapota a címe helyett</string> <string name="widget_showstatusview">Kiszolgáló állapota a címe helyett</string>
<string name="widget_usedarktheme">Sötét téma használata (nincs előnézet)</string>
<string name="widget_done">KÉSZ</string> <string name="widget_done">KÉSZ</string>
<string name="pref_servers">Szerverek</string> <string name="pref_servers">Szerverek</string>
<string name="pref_addserver">Új szerver hozzáadása</string> <string name="pref_addserver">Új szerver hozzáadása</string>

1
app/src/main/res/values-it/strings.xml

@ -203,7 +203,6 @@
<string name="widget_sortby">TIPO ORDINAMENTO</string> <string name="widget_sortby">TIPO ORDINAMENTO</string>
<string name="widget_reversesortorder">Inverti ordinamento</string> <string name="widget_reversesortorder">Inverti ordinamento</string>
<string name="widget_showstatusview">Stato del server anzichè il titolo</string> <string name="widget_showstatusview">Stato del server anzichè il titolo</string>
<string name="widget_usedarktheme">Utilizza tema scuro (nessuna anteprima)</string>
<string name="widget_done">FINE</string> <string name="widget_done">FINE</string>
<string name="pref_servers">Server</string> <string name="pref_servers">Server</string>
<string name="pref_addserver">Aggiungi nuovo server</string> <string name="pref_addserver">Aggiungi nuovo server</string>

1
app/src/main/res/values-ja/strings.xml

@ -195,7 +195,6 @@
<string name="widget_sortby">ソート順</string> <string name="widget_sortby">ソート順</string>
<string name="widget_reversesortorder">ソート順を逆にする</string> <string name="widget_reversesortorder">ソート順を逆にする</string>
<string name="widget_showstatusview">タイトルにサーバーステータスを表示</string> <string name="widget_showstatusview">タイトルにサーバーステータスを表示</string>
<string name="widget_usedarktheme">ダーク・テーマを使用 (プレビューなし)</string>
<string name="widget_done">完了</string> <string name="widget_done">完了</string>
<string name="pref_servers">サーバー</string> <string name="pref_servers">サーバー</string>
<string name="pref_addserver">新しいサーバーを追加</string> <string name="pref_addserver">新しいサーバーを追加</string>

1
app/src/main/res/values-ko/strings.xml

@ -195,7 +195,6 @@
<string name="widget_sortby">정렬 순서</string> <string name="widget_sortby">정렬 순서</string>
<string name="widget_reversesortorder">역순 정렬</string> <string name="widget_reversesortorder">역순 정렬</string>
<string name="widget_showstatusview">제목 대신 서버 상태 표시</string> <string name="widget_showstatusview">제목 대신 서버 상태 표시</string>
<string name="widget_usedarktheme">어두운 테마 사용 (미리보기 없음)</string>
<string name="widget_done">완료</string> <string name="widget_done">완료</string>
<string name="pref_servers">서버</string> <string name="pref_servers">서버</string>
<string name="pref_addserver">새 서버 추가</string> <string name="pref_addserver">새 서버 추가</string>

9
app/src/main/res/values/colors_transdroid_dark.xml → app/src/main/res/values-night/colors_transdroid.xml

@ -18,9 +18,8 @@
--> -->
<resources> <resources>
<color name="pressed_transdroid_dark">#CCaada62</color> <color name="transdroid_pressed">#CCaada62</color>
<color name="divider_dark">#303030</color> <color name="transdroid_divider">#303030</color>
<color name="background_dark">#000</color> <color name="transdroid_background">#2e2e2e</color>
<color name="text_bright_dark">#fff</color> <color name="transdroid_text_bright">#fff</color>
<color name="text_actionbar_dark">#fff</color>
</resources> </resources>

15
app/src/main/res/values/styles_transdroid_dark.xml → app/src/main/res/values-night/styles_transdroid.xml

@ -18,17 +18,20 @@
<resources> <resources>
<style name="Theme.Transdroid.Dark" parent="Theme.AppCompat.NoActionBar"> <style name="Theme.Transdroid.Auto" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="drawer_background">@color/transdroid_background</item>
<item name="activatable_background">@drawable/activatable_background</item>
<item name="colorPrimary">@color/green</item> <item name="colorPrimary">@color/green</item>
<item name="colorPrimaryDark">@color/green_dark</item> <item name="colorPrimaryDark">@color/green_dark</item>
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/grey</item> <item name="actionModeBackground">@color/grey</item>
<item name="android:textViewStyle">@style/DefaultTextView</item> <item name="android:textViewStyle">@style/DefaultTextView</item>
<item name="android:windowBackground">@color/background_dark</item> <item name="android:windowBackground">@color/transdroid_background</item>
<item name="loading_progress">@drawable/loading_progress_dark</item> <item name="loading_progress">@drawable/loading_progress</item>
<item name="text_bright">@color/text_bright_dark</item> <item name="text_bright">@color/transdroid_text_bright</item>
<item name="text_actionbar">@color/text_actionbar_dark</item> <item name="text_actionbar">@color/transdroid_text_actionbar</item>
<item name="text_actionbar_secondary">@color/text_actionbar_light</item> <item name="text_actionbar_secondary">@color/transdroid_text_actionbar</item>
</style> </style>
</resources> </resources>

1
app/src/main/res/values-nl/strings.xml

@ -199,7 +199,6 @@
<string name="widget_sortby">SORTEERVOLGORDE</string> <string name="widget_sortby">SORTEERVOLGORDE</string>
<string name="widget_reversesortorder">Omgekeerde sorteervolgorde</string> <string name="widget_reversesortorder">Omgekeerde sorteervolgorde</string>
<string name="widget_showstatusview">Serverstatus i.p.v. titel</string> <string name="widget_showstatusview">Serverstatus i.p.v. titel</string>
<string name="widget_usedarktheme">Gebruik donker kleurenschema (geen preview)</string>
<string name="widget_done">KLAAR</string> <string name="widget_done">KLAAR</string>
<string name="pref_servers">Servers</string> <string name="pref_servers">Servers</string>
<string name="pref_addserver">Nieuwe server toevoegen</string> <string name="pref_addserver">Nieuwe server toevoegen</string>

1
app/src/main/res/values-pl/strings.xml

@ -171,7 +171,6 @@
<string name="widget_sortby">SORTOWANIE</string> <string name="widget_sortby">SORTOWANIE</string>
<string name="widget_reversesortorder">Odwrócony porządek sortowania</string> <string name="widget_reversesortorder">Odwrócony porządek sortowania</string>
<string name="widget_showstatusview">Status serwera zamiast tytułu</string> <string name="widget_showstatusview">Status serwera zamiast tytułu</string>
<string name="widget_usedarktheme">Użyj ciemnego motywu (brak podglądu)</string>
<string name="widget_done">GOTOWE</string> <string name="widget_done">GOTOWE</string>
<string name="pref_servers">Serwery</string> <string name="pref_servers">Serwery</string>
<string name="pref_addserver">Dodaj nowy serwer</string> <string name="pref_addserver">Dodaj nowy serwer</string>

1
app/src/main/res/values-pt-rBR/strings.xml

@ -203,7 +203,6 @@
<string name="widget_sortby">Ordem de classificação</string> <string name="widget_sortby">Ordem de classificação</string>
<string name="widget_reversesortorder">Ordem Invertida</string> <string name="widget_reversesortorder">Ordem Invertida</string>
<string name="widget_showstatusview">Estado do servidor ao invés do título</string> <string name="widget_showstatusview">Estado do servidor ao invés do título</string>
<string name="widget_usedarktheme">Usar tema escuro (sem visualização)</string>
<string name="widget_done">Concluído</string> <string name="widget_done">Concluído</string>
<string name="pref_servers">Servidores</string> <string name="pref_servers">Servidores</string>
<string name="pref_addserver">Adicionar novo servidor</string> <string name="pref_addserver">Adicionar novo servidor</string>

1
app/src/main/res/values-pt/strings.xml

@ -203,7 +203,6 @@
<string name="widget_sortby">CRITÉRIO DE ORDENAÇÃO</string> <string name="widget_sortby">CRITÉRIO DE ORDENAÇÃO</string>
<string name="widget_reversesortorder">Inverter critério de ordenação</string> <string name="widget_reversesortorder">Inverter critério de ordenação</string>
<string name="widget_showstatusview">Estado do servidor em vez de título</string> <string name="widget_showstatusview">Estado do servidor em vez de título</string>
<string name="widget_usedarktheme">Usar o tema escuro (sem antevisão)</string>
<string name="widget_done">FEITO</string> <string name="widget_done">FEITO</string>
<string name="pref_servers">Servidores</string> <string name="pref_servers">Servidores</string>
<string name="pref_addserver">Adicionar novo servidor</string> <string name="pref_addserver">Adicionar novo servidor</string>

1
app/src/main/res/values-ru/strings.xml

@ -220,7 +220,6 @@
<string name="widget_sortby">ПОРЯДОК СОРТИРОВКИ</string> <string name="widget_sortby">ПОРЯДОК СОРТИРОВКИ</string>
<string name="widget_reversesortorder">Обратный порядок сортировки</string> <string name="widget_reversesortorder">Обратный порядок сортировки</string>
<string name="widget_showstatusview">Статистика сервера вместо названия</string> <string name="widget_showstatusview">Статистика сервера вместо названия</string>
<string name="widget_usedarktheme">Использовать темную тему (без предпросмотра)</string>
<string name="widget_done">ГОТОВО</string> <string name="widget_done">ГОТОВО</string>
<string name="pref_servers">Серверы</string> <string name="pref_servers">Серверы</string>
<string name="pref_addserver">Добавить новый сервер</string> <string name="pref_addserver">Добавить новый сервер</string>

1
app/src/main/res/values-sl/strings.xml

@ -219,7 +219,6 @@
<string name="widget_sortby">VRSTNI RED</string> <string name="widget_sortby">VRSTNI RED</string>
<string name="widget_reversesortorder">Obratni vrstni red</string> <string name="widget_reversesortorder">Obratni vrstni red</string>
<string name="widget_showstatusview">Status strežnika namesto naziva</string> <string name="widget_showstatusview">Status strežnika namesto naziva</string>
<string name="widget_usedarktheme">Uporabi temno temo (ni predogleda)</string>
<string name="widget_done">OPRAVLJENO</string> <string name="widget_done">OPRAVLJENO</string>
<string name="pref_servers">Strežniki</string> <string name="pref_servers">Strežniki</string>
<string name="pref_addserver">Dodaj nov strežnik</string> <string name="pref_addserver">Dodaj nov strežnik</string>

1
app/src/main/res/values-sv/strings.xml

@ -203,7 +203,6 @@
<string name="widget_sortby">SÖKORDNING</string> <string name="widget_sortby">SÖKORDNING</string>
<string name="widget_reversesortorder">Omvänd sökordning</string> <string name="widget_reversesortorder">Omvänd sökordning</string>
<string name="widget_showstatusview">Serverstatus iställer för titel</string> <string name="widget_showstatusview">Serverstatus iställer för titel</string>
<string name="widget_usedarktheme">Använd mörkt tema (ingen förhandsvisning)</string>
<string name="widget_done">FÄRDIG</string> <string name="widget_done">FÄRDIG</string>
<string name="pref_servers">Servrar</string> <string name="pref_servers">Servrar</string>
<string name="pref_addserver">Lägg til ny server</string> <string name="pref_addserver">Lägg til ny server</string>

1
app/src/main/res/values-tr/strings.xml

@ -202,7 +202,6 @@
<string name="widget_sortby">SIRALAMA DÜZENİ</string> <string name="widget_sortby">SIRALAMA DÜZENİ</string>
<string name="widget_reversesortorder">Ters sıralama düzeni</string> <string name="widget_reversesortorder">Ters sıralama düzeni</string>
<string name="widget_showstatusview">Başlık yerine sunucu durumu</string> <string name="widget_showstatusview">Başlık yerine sunucu durumu</string>
<string name="widget_usedarktheme">Karanlık temayı kullanın (önizleme yok)</string>
<string name="widget_done">BİTTİ</string> <string name="widget_done">BİTTİ</string>
<string name="pref_servers">Sunucular</string> <string name="pref_servers">Sunucular</string>
<string name="pref_addserver">Yeni sunucu ekle</string> <string name="pref_addserver">Yeni sunucu ekle</string>

10
app/src/main/res/values-v21/styles.xml

@ -16,16 +16,6 @@
--> -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="TransdroidTheme" parent="Theme.Transdroid.Light">
<item name="drawer_background">@color/background_light</item>
<item name="activatable_background">@drawable/activatable_background</item>
</style>
<style name="TransdroidTheme.Dark" parent="Theme.Transdroid.Dark">
<item name="drawer_background">@color/background_dark</item>
<item name="activatable_background">@drawable/activatable_background</item>
</style>
<style name="DefaultToolbar"> <style name="DefaultToolbar">
<item name="android:background">?attr/colorPrimary</item> <item name="android:background">?attr/colorPrimary</item>
<item name="android:elevation">3dp</item> <item name="android:elevation">3dp</item>

1
app/src/main/res/values-zh-rCN/strings.xml

@ -179,7 +179,6 @@
<string name="widget_sortby">排序顺序</string> <string name="widget_sortby">排序顺序</string>
<string name="widget_reversesortorder">反向排序</string> <string name="widget_reversesortorder">反向排序</string>
<string name="widget_showstatusview">服务器状态而不是标题</string> <string name="widget_showstatusview">服务器状态而不是标题</string>
<string name="widget_usedarktheme">使用暗色主题(无预览)</string>
<string name="widget_done">完成</string> <string name="widget_done">完成</string>
<string name="pref_servers">服务器</string> <string name="pref_servers">服务器</string>
<string name="pref_addserver">添加服务器</string> <string name="pref_addserver">添加服务器</string>

10
app/src/main/res/values/colors_transdroid_light.xml → app/src/main/res/values/colors_transdroid.xml

@ -18,9 +18,9 @@
--> -->
<resources> <resources>
<color name="pressed_transdroid_light">#CC8ACC12</color> <color name="transdroid_pressed">#CC8ACC12</color>
<color name="divider_light">#bdbdbd</color> <color name="transdroid_divider">#bdbdbd</color>
<color name="background_light">#fff</color> <color name="transdroid_background">#fff</color>
<color name="text_bright_light">#000</color> <color name="transdroid_text_bright">#000</color>
<color name="text_actionbar_light">#000</color> <color name="transdroid_text_actionbar">#fff</color>
</resources> </resources>

583
app/src/main/res/values/strings.xml

@ -17,64 +17,64 @@
--> -->
<resources> <resources>
<string name="action_add">Add</string> <string name="action_add">Add</string>
<string name="action_addall">Add all</string> <string name="action_addall">Add all</string>
<string name="action_addfromfile">From file</string> <string name="action_addfromfile">From file</string>
<string name="action_addfromurl">From URL</string> <string name="action_addfromurl">From URL</string>
<string name="action_scanbarcode">Scan barcode</string> <string name="action_scanbarcode">Scan barcode</string>
<string name="action_search">Search</string> <string name="action_search">Search</string>
<string name="action_refresh">Refresh</string> <string name="action_refresh">Refresh</string>
<string name="action_rss">RSS</string> <string name="action_rss">RSS</string>
<string name="action_remoterss">Remote RSS</string> <string name="action_remoterss">Remote RSS</string>
<string name="action_enableturtle">Enable turtle mode</string> <string name="action_enableturtle">Enable turtle mode</string>
<string name="action_disableturtle">Disable turtle mode</string> <string name="action_disableturtle">Disable turtle mode</string>
<string name="action_sort">Sort list</string> <string name="action_sort">Sort list</string>
<string name="action_sort_alpha">Name</string> <string name="action_sort_alpha">Name</string>
<string name="action_sort_status">Status</string> <string name="action_sort_status">Status</string>
<string name="action_sort_done">Date done</string> <string name="action_sort_done">Date done</string>
<string name="action_sort_added">Date added</string> <string name="action_sort_added">Date added</string>
<string name="action_sort_seeders">Seeders</string> <string name="action_sort_seeders">Seeders</string>
<string name="action_sort_percent">Percent downloaded</string> <string name="action_sort_percent">Percent downloaded</string>
<string name="action_sort_downspeed">Download speed</string> <string name="action_sort_downspeed">Download speed</string>
<string name="action_sort_upspeed">Upload speed</string> <string name="action_sort_upspeed">Upload speed</string>
<string name="action_sort_ratio">Ratio</string> <string name="action_sort_ratio">Ratio</string>
<string name="action_sort_size">Size</string> <string name="action_sort_size">Size</string>
<string name="action_filter">Filter list</string> <string name="action_filter">Filter list</string>
<string name="action_settings">Settings</string> <string name="action_settings">Settings</string>
<string name="action_help">Help</string> <string name="action_help">Help</string>
<string name="action_start">Start</string> <string name="action_start">Start</string>
<string name="action_start_default">Normal start</string> <string name="action_start_default">Normal start</string>
<string name="action_start_forced">Force start</string> <string name="action_start_forced">Force start</string>
<string name="action_startall">Start all</string> <string name="action_startall">Start all</string>
<string name="action_stop">Stop</string> <string name="action_stop">Stop</string>
<string name="action_stopall">Stop all</string> <string name="action_stopall">Stop all</string>
<string name="action_resume">Resume</string> <string name="action_resume">Resume</string>
<string name="action_resumeall">Resume all</string> <string name="action_resumeall">Resume all</string>
<string name="action_pause">Pause</string> <string name="action_pause">Pause</string>
<string name="action_pauseall">Pause all</string> <string name="action_pauseall">Pause all</string>
<string name="action_remove">Remove</string> <string name="action_remove">Remove</string>
<string name="action_remove_default">Remove torrent</string> <string name="action_remove_default">Remove torrent</string>
<string name="action_remove_withdata">Remove and delete data</string> <string name="action_remove_withdata">Remove and delete data</string>
<string name="action_setlabel">Set label</string> <string name="action_setlabel">Set label</string>
<string name="action_download_mode">Download mode</string> <string name="action_download_mode">Download mode</string>
<string name="action_toggle_sequential">Download sequentially</string> <string name="action_toggle_sequential">Download sequentially</string>
<string name="action_toggle_firstlastpiece">Prioritize first and last piece</string> <string name="action_toggle_firstlastpiece">Prioritize first and last piece</string>
<string name="action_updatetrackers">Update trackers</string> <string name="action_updatetrackers">Update trackers</string>
<string name="action_changelocation">Change storage location</string> <string name="action_changelocation">Change storage location</string>
<string name="action_forcerecheck">Force data recheck</string> <string name="action_forcerecheck">Force data recheck</string>
<string name="action_priority_off">Off</string> <string name="action_priority_off">Off</string>
<string name="action_priority_low">Low</string> <string name="action_priority_low">Low</string>
<string name="action_priority_normal">Normal</string> <string name="action_priority_normal">Normal</string>
<string name="action_priority_high">High</string> <string name="action_priority_high">High</string>
<string name="action_remoteplay">Remote play in VLC</string> <string name="action_remoteplay">Remote play in VLC</string>
<string name="action_download">Download using FTP(S)</string> <string name="action_download">Download using FTP(S)</string>
<string name="action_copytoclipboard">Copy to clipboard</string> <string name="action_copytoclipboard">Copy to clipboard</string>
<string name="action_showdetails">Show details</string> <string name="action_showdetails">Show details</string>
<string name="action_openwebsite">Open website</string> <string name="action_openwebsite">Open website</string>
<string name="action_useassearch">Use as new search</string> <string name="action_useassearch">Use as new search</string>
<string name="action_removesettings">Remove settings</string> <string name="action_removesettings">Remove settings</string>
<string name="action_visitwebsite">Visit transdroid.org</string> <string name="action_visitwebsite">Visit transdroid.org</string>
<string name="action_close">Close</string> <string name="action_close">Close</string>
<string name="navigation_opendrawer">Select server and filter</string> <string name="navigation_opendrawer">Select server and filter</string>
<string name="navigation_closedrawer">Close filters list</string> <string name="navigation_closedrawer">Close filters list</string>
@ -224,174 +224,175 @@
</plurals> </plurals>
<string name="rss_service_newfor">New torrents for %1$s</string> <string name="rss_service_newfor">New torrents for %1$s</string>
<string name="remoterss_filter_allrecent">(All recent)</string> <string name="remoterss_filter_allrecent">(All recent)</string>
<string name="remoterss_no_files">No torrent files found.\n\nAre your RSS feeds configured correctly?</string> <string name="remoterss_no_files">No torrent files found.\n\nAre your RSS feeds configured correctly?</string>
<string name="remoterss_loading">Loading RSS feeds…</string> <string name="remoterss_loading">Loading RSS feeds…</string>
<string name="widget_loading">Loading&#8230;</string> <string name="widget_loading">Loading&#8230;</string>
<string name="widget_opentransdroid">Open Transdroid</string> <string name="widget_opentransdroid">Open Transdroid</string>
<string name="widget_filter">SERVER VIEW</string> <string name="widget_filter">SERVER VIEW</string>
<string name="widget_lookfeel">LOOK &amp; FEEL</string> <string name="widget_lookfeel">LOOK &amp; FEEL</string>
<string name="widget_sortby">SORT ORDER</string> <string name="widget_sortby">SORT ORDER</string>
<string name="widget_reversesortorder">Reversed sort order</string> <string name="widget_reversesortorder">Reversed sort order</string>
<string name="widget_showstatusview">Server status instead of title</string> <string name="widget_showstatusview">Server status instead of title</string>
<string name="widget_usedarktheme">Use dark theme (no preview)</string> <string name="widget_done">DONE</string>
<string name="widget_done">DONE</string>
<string name="pref_servers">Servers</string> <string name="pref_servers">Servers</string>
<string name="pref_addserver">Add new server</string> <string name="pref_addserver">Add new server</string>
<string name="pref_addserver_normal">Add normal, custom server</string> <string name="pref_addserver_normal">Add normal, custom server</string>
<string name="pref_addseedbox">Add seedbox</string> <string name="pref_addseedbox">Add seedbox</string>
<string name="pref_defaultserver">Default server</string> <string name="pref_defaultserver">Default server</string>
<string name="pref_defaultserver_lastused">Last used</string> <string name="pref_defaultserver_lastused">Last used</string>
<string name="pref_defaultserver_askonadd">Ask when adding torrent</string> <string name="pref_defaultserver_askonadd">Ask when adding torrent</string>
<string name="pref_searchsites">Search sites</string> <string name="pref_searchsites">Search sites</string>
<string name="pref_setsearchsite">Set default site</string> <string name="pref_setsearchsite">Set default site</string>
<string name="pref_addwebsearch">Add web search site</string> <string name="pref_addwebsearch">Add web search site</string>
<string name="pref_rssfeeds">RSS feeds</string> <string name="pref_rssfeeds">RSS feeds</string>
<string name="pref_addrssfeed">Add RSS feed</string> <string name="pref_addrssfeed">Add RSS feed</string>
<string name="pref_others">Other settings</string> <string name="pref_others">Other settings</string>
<string name="pref_confirmremove">Are you sure you want to remove these settings?</string> <string name="pref_confirmremove">Are you sure you want to remove these settings?</string>
<string name="pref_name">Name</string> <string name="pref_name">Name</string>
<string name="pref_name_optional">Optional personal name</string> <string name="pref_name_optional">Optional personal name</string>
<string name="pref_searchurl">Direct search URL</string> <string name="pref_searchurl">Direct search URL</string>
<string name="pref_searchurl_info">%s will be replaced by the search query</string> <string name="pref_searchurl_info">%s will be replaced by the search query</string>
<string name="pref_cookies">Cookies</string> <string name="pref_cookies">Cookies</string>
<string name="pref_cookies_info">Optional; use the key1=value1;key2=value2 format</string> <string name="pref_cookies_info">Optional; use the key1=value1;key2=value2 format</string>
<string name="pref_feedurl">Feed URL</string> <string name="pref_feedurl">Feed URL</string>
<string name="pref_reqauth">Requires authentication</string> <string name="pref_reqauth">Requires authentication</string>
<string name="pref_reqauth_info">Opens links in the webbrowser for user login</string> <string name="pref_reqauth_info">Opens links in the webbrowser for user login</string>
<string name="pref_alarmrssnew">New item notification</string> <string name="pref_alarmrssnew">New item notification</string>
<string name="pref_alarmrssnew_info">Notify when new torrents are released</string> <string name="pref_alarmrssnew_info">Notify when new torrents are released</string>
<string name="pref_alarmrssexclude">Exclude filter</string> <string name="pref_alarmrssexclude">Exclude filter</string>
<string name="pref_alarmrssexclude_info">Don\'t show torrents whose name matches these |-separated words</string> <string name="pref_alarmrssexclude_info">Don\'t show torrents whose name matches these |-separated words</string>
<string name="pref_alarmrssinclude">Include filter</string> <string name="pref_alarmrssinclude">Include filter</string>
<string name="pref_alarmrssinclude_info">Only show torrents whose name matches these |-separated words</string> <string name="pref_alarmrssinclude_info">Only show torrents whose name matches these |-separated words</string>
<string name="pref_servertype">Server type</string> <string name="pref_servertype">Server type</string>
<string name="pref_address">IP or host name</string> <string name="pref_address">IP or host name</string>
<string name="pref_port">Port number</string> <string name="pref_port">Port number</string>
<string name="pref_user">User name</string> <string name="pref_user">User name</string>
<string name="pref_pass">Password</string> <string name="pref_pass">Password</string>
<string name="pref_extrapassword">Deluge web password</string> <string name="pref_extrapassword">Deluge web password</string>
<string name="pref_secret">Secret token</string> <string name="pref_secret">Secret token</string>
<string name="pref_advanced">Advanced settings</string> <string name="pref_advanced">Advanced settings</string>
<string name="pref_localaddress">Local IP or host</string> <string name="pref_localaddress">Local IP or host</string>
<string name="pref_localaddress_info">When connected to the specified local network</string> <string name="pref_localaddress_info">When connected to the specified local network</string>
<string name="pref_localport">Local port number</string> <string name="pref_localport">Local port number</string>
<string name="pref_localnetwork">Local network</string> <string name="pref_localnetwork">Local network</string>
<string name="pref_localnetwork_info">The server\'s local network SSID</string> <string name="pref_localnetwork_info">The server\'s local network SSID</string>
<string name="pref_local_permission_title">Location permission</string> <string name="pref_local_permission_title">Location permission</string>
<string name="pref_local_permission_rationale">To known the connected Wifi network SSID name, %1$s requires the location permission</string> <string name="pref_local_permission_rationale">To known the connected Wifi network SSID name, %1$s requires the location permission</string>
<string name="pref_folder">Folder</string> <string name="pref_folder">Folder</string>
<string name="pref_folder_info">Usually empty</string> <string name="pref_folder_info">Usually empty</string>
<string name="pref_scgifolder">SCGI mount point</string> <string name="pref_scgifolder">SCGI mount point</string>
<string name="pref_optional">Optional settings</string> <string name="pref_optional">Optional settings</string>
<string name="pref_alarmdone">Finished notification</string> <string name="pref_alarmdone">Finished notification</string>
<string name="pref_alarmdone_info">Notify when a torrent finishes</string> <string name="pref_alarmdone_info">Notify when a torrent finishes</string>
<string name="pref_alarmnew">New torrent notification</string> <string name="pref_alarmnew">New torrent notification</string>
<string name="pref_alarmnew_info">Notify when a torrent was added</string> <string name="pref_alarmnew_info">Notify when a torrent was added</string>
<string name="pref_alarmexclude">Exclude filter</string> <string name="pref_alarmexclude">Exclude filter</string>
<string name="pref_alarmexclude_info">Notify only if torrent name matches these |-separated words</string> <string name="pref_alarmexclude_info">Notify only if torrent name matches these |-separated words</string>
<string name="pref_alarminclude">Include filter</string> <string name="pref_alarminclude">Include filter</string>
<string name="pref_alarminclude_info">Notify never if torrent name matches these |-separated words</string> <string name="pref_alarminclude_info">Notify never if torrent name matches these |-separated words</string>
<string name="pref_os">Server OS</string> <string name="pref_os">Server OS</string>
<string name="pref_downdir">Download directory</string> <string name="pref_downdir">Download directory</string>
<string name="pref_downdir_info">Manually set absolute path for remote connections</string> <string name="pref_downdir_info">Manually set absolute path for remote connections</string>
<string name="pref_timeout">Connection timeout</string> <string name="pref_timeout">Connection timeout</string>
<string name="pref_timeout_info">Number of seconds before a connection attempt is aborted</string> <string name="pref_timeout_info">Number of seconds before a connection attempt is aborted</string>
<string name="pref_ftpurl">Base FTP(S) url</string> <string name="pref_ftpurl">Base FTP(S) url</string>
<string name="pref_ftpurl_info">For example ftp://me@server/downloads/</string> <string name="pref_ftpurl_info">For example ftp://me@server/downloads/</string>
<string name="pref_ftppass">FTP(S) password</string> <string name="pref_ftppass">FTP(S) password</string>
<string name="pref_disableauth">Disable authentication</string> <string name="pref_disableauth">Disable authentication</string>
<string name="pref_disableauth_info">Don\'t send username and password</string> <string name="pref_disableauth_info">Don\'t send username and password</string>
<string name="pref_sslenable">Use SSL</string> <string name="pref_sslenable">Use SSL</string>
<string name="pref_sslenable_info">Connect using https</string> <string name="pref_sslenable_info">Connect using https</string>
<string name="pref_local_sslenable">Use SSL on local network</string> <string name="pref_local_sslenable">Use SSL on local network</string>
<string name="pref_local_sslenable_info">Connect using https</string> <string name="pref_local_sslenable_info">Connect using https</string>
<string name="pref_sslkey">Custom SSL thumbprint (SHA-1)</string> <string name="pref_sslkey">Custom SSL thumbprint (SHA-1)</string>
<string name="pref_sslkey_info">Permit only connections to this specific certificate</string> <string name="pref_sslkey_info">Permit only connections to this specific certificate</string>
<string name="pref_sslacceptall">Accept all SSL certificates</string> <string name="pref_sslacceptall">Accept all SSL certificates</string>
<string name="pref_sslacceptall_info">Allow all connections from any thumbprint</string> <string name="pref_sslacceptall_info">Allow all connections from any thumbprint</string>
<string name="pref_background">Background notifications</string> <string name="pref_background">Background notifications</string>
<string name="pref_notifications_rss">Enable RSS notifications</string> <string name="pref_notifications_rss">Enable RSS notifications</string>
<string name="pref_notifications_torrent">Enable torrent notifications</string> <string name="pref_notifications_torrent">Enable torrent notifications</string>
<string name="pref_notifications_info">Enables the background service</string> <string name="pref_notifications_info">Enables the background service</string>
<string name="pref_notifyinterval">Interval</string> <string name="pref_notifyinterval">Interval</string>
<string name="pref_notifyinterval_info">How often to check RSS or torrents</string> <string name="pref_notifyinterval_info">How often to check RSS or torrents</string>
<string name="pref_notifysound">Sound</string> <string name="pref_notifysound">Sound</string>
<string name="pref_notifyvibrate">Vibrate</string> <string name="pref_notifyvibrate">Vibrate</string>
<string name="pref_notifyled">LED colour</string> <string name="pref_notifyled">LED colour</string>
<string name="pref_notifyled_info">If supported by your device</string> <string name="pref_notifyled_info">If supported by your device</string>
<string name="pref_adw">Support ADW notifications</string> <string name="pref_adw">Support ADW notifications</string>
<string name="pref_adw_info">Show torrent counter in ADW Launcher</string> <string name="pref_adw_info">Show torrent counter in ADW Launcher</string>
<string name="pref_system">System</string> <string name="pref_system">System</string>
<string name="pref_autorefresh">Automatic refreshing</string> <string name="pref_autorefresh">Automatic refreshing</string>
<string name="pref_autorefresh_info">Interval-based refresh of the main screen</string> <string name="pref_autorefresh_info">Interval-based refresh of the main screen</string>
<string-array name="pref_autorefresh_intervals"> <string-array name="pref_autorefresh_intervals">
<item>Disabled</item> <item>Disabled</item>
<item>2 seconds</item> <item>2 seconds</item>
<item>5 seconds</item> <item>5 seconds</item>
<item>10 seconds</item> <item>10 seconds</item>
<item>30 seconds</item> <item>30 seconds</item>
</string-array> </string-array>
<string-array name="pref_autorefresh_intervalvalues" translatable="false"> <string-array name="pref_autorefresh_intervalvalues" translatable="false">
<item>0</item> <item>0</item>
<item>2</item> <item>2</item>
<item>5</item> <item>5</item>
<item>10</item> <item>10</item>
<item>30</item> <item>30</item>
</string-array> </string-array>
<string name="pref_dormantasinactive">Treat dormant torrents as inactive</string> <string name="pref_dormantasinactive">Treat dormant torrents as inactive</string>
<string name="pref_dormantasinactive_info">Torrents at 0KB/s (no data transfer) will be filtered as being inactive</string> <string name="pref_dormantasinactive_info">Torrents at 0KB/s (no data transfer) will be filtered as being inactive</string>
<string name="pref_checkupdates">Check for updates</string> <string name="pref_checkupdates">Check for updates</string>
<string name="pref_checkupdates_info">Check transdroid.org for latest app version</string> <string name="pref_checkupdates_info">Check transdroid.org for latest app version</string>
<string name="pref_usedarktheme">Use dark UI theme</string> <string name="pref_autodarktheme">Auto night mode</string>
<string name="pref_usedarktheme_info">Requires a restart to take effect</string> <string name="pref_autodarktheme_info">Automatically choose between light or dark theme</string>
<string name="pref_clearsearch">Clear search history</string> <string name="pref_usedarktheme">Use dark UI theme</string>
<string name="pref_clearsearch_success">Search history is cleared</string> <string name="pref_usedarktheme_info">Requires a restart to take effect</string>
<string name="pref_import">Import settings</string> <string name="pref_clearsearch">Clear search history</string>
<string name="pref_import_dialog">%1$s will try to import server, web search, RSS and system settings from: %2$s</string> <string name="pref_clearsearch_success">Search history is cleared</string>
<string name="pref_import_fromfile">Use file</string> <string name="pref_import">Import settings</string>
<string name="pref_import_fromqr">Use QR code</string> <string name="pref_import_dialog">%1$s will try to import server, web search, RSS and system settings from: %2$s</string>
<string name="pref_import_success">Settings successfully imported</string> <string name="pref_import_fromfile">Use file</string>
<string name="pref_export">Export settings</string> <string name="pref_import_fromqr">Use QR code</string>
<string name="pref_export_dialog">%1$s will export server (including passwords), web search, RSS and system settings to the following plain text JSON file: %2$s</string> <string name="pref_import_success">Settings successfully imported</string>
<string name="pref_export_tofile">To file</string> <string name="pref_export">Export settings</string>
<string name="pref_export_toqr">To QR code</string> <string name="pref_export_dialog">%1$s will export server (including passwords), web search, RSS and system settings to the following plain text JSON file: %2$s</string>
<string name="pref_export_success">Settings successfully exported</string> <string name="pref_export_tofile">To file</string>
<string name="pref_export_toqr">To QR code</string>
<string name="pref_export_success">Settings successfully exported</string>
<string name="pref_help">Transdroid help</string> <string name="pref_help">Transdroid help</string>
<string name="pref_sendlog">Send error log</string> <string name="pref_sendlog">Send error log</string>
<string name="pref_sendlog_info">Get support or report a bug</string> <string name="pref_sendlog_info">Get support or report a bug</string>
<string name="pref_installhelp">View install guides</string> <string name="pref_installhelp">View install guides</string>
<string name="pref_installhelp_info">Available at transdroid.org/download</string> <string name="pref_installhelp_info">Available at transdroid.org/download</string>
<string name="pref_changelog">Recent changes</string> <string name="pref_changelog">Recent changes</string>
<string name="pref_about">About %1$s</string> <string name="pref_about">About %1$s</string>
<string name="pref_seedbox_addseedbox">Add %1$s seedbox</string> <string name="pref_seedbox_addseedbox">Add %1$s seedbox</string>
<string name="pref_seedbox_client">Torrent client</string> <string name="pref_seedbox_client">Torrent client</string>
<string name="pref_seedbox_client_info">Client to connect to</string> <string name="pref_seedbox_client_info">Client to connect to</string>
<string name="pref_seedbox_server">Server address</string> <string name="pref_seedbox_server">Server address</string>
<string name="pref_seedbox_xirvikhint">Like eplus001.xirvik.com</string> <string name="pref_seedbox_xirvikhint">Like eplus001.xirvik.com</string>
<string name="pref_seedbox_xirvikhint2">Like semixl001a.xirvik.com</string> <string name="pref_seedbox_xirvikhint2">Like semixl001a.xirvik.com</string>
<string name="pref_seedbox_xirvikhint3">Like desharedgbit001.xirvik.com</string> <string name="pref_seedbox_xirvikhint3">Like desharedgbit001.xirvik.com</string>
<string name="pref_seedbox_xirviknofolder">Cannot retrieve the Xirvik SCGI folder setting; please try again later or correct your server address setting</string> <string name="pref_seedbox_xirviknofolder">Cannot retrieve the Xirvik SCGI folder setting; please try again later or correct your server address setting</string>
<string name="pref_seedbox_seedstuffhint">Like 001.seedstuff.ca</string> <string name="pref_seedbox_seedstuffhint">Like 001.seedstuff.ca</string>
<string name="pref_seedbox_dediseedboxhint">Like abcd123.dediseedbox.com</string> <string name="pref_seedbox_dediseedboxhint">Like abcd123.dediseedbox.com</string>
<string-array name="pref_seedbox_xirvikclients" translatable="false"> <string-array name="pref_seedbox_xirvikclients" translatable="false">
<item>rTorrent</item> <item>rTorrent</item>
<item>uTorrent</item> <item>uTorrent</item>
<item>Deluge</item> <item>Deluge</item>
</string-array> </string-array>
<string-array name="pref_seedbox_xirviktypes" translatable="false"> <string-array name="pref_seedbox_xirviktypes" translatable="false">
<item>daemon_rtorrent</item> <item>daemon_rtorrent</item>
<item>daemon_utorrent</item> <item>daemon_utorrent</item>
<item>daemon_deluge</item> <item>daemon_deluge</item>
</string-array> </string-array>
<string-array name="pref_daemon_types" translatable="false"> <string-array name="pref_daemon_types" translatable="false">
<item>Aria2</item> <item>Aria2</item>
@ -401,14 +402,14 @@
<item>Buffalo NAS -1.31</item> <item>Buffalo NAS -1.31</item>
<item>Deluge 1.2+</item> <item>Deluge 1.2+</item>
<item>Deluge RPC</item> <item>Deluge RPC</item>
<item>Deluge 2 RPC</item> <item>Deluge 2 RPC</item>
<item>DLink Router BT</item> <item>DLink Router BT</item>
<item>Ktorrent</item> <item>Ktorrent</item>
<item>qBittorrent</item> <item>qBittorrent</item>
<item>rTorrent</item> <item>rTorrent</item>
<item>Synology</item> <item>Synology</item>
<item>Torrentflux-b4rt</item> <item>Torrentflux-b4rt</item>
<item>tTorrent</item> <item>tTorrent</item>
<item>Transmission</item> <item>Transmission</item>
<item>µTorrent</item> <item>µTorrent</item>
<item>Vuze</item> <item>Vuze</item>
@ -421,86 +422,86 @@
<item>daemon_buffalonas</item> <item>daemon_buffalonas</item>
<item>daemon_deluge</item> <item>daemon_deluge</item>
<item>daemon_deluge_rpc</item> <item>daemon_deluge_rpc</item>
<item>daemon_deluge2_rpc</item> <item>daemon_deluge2_rpc</item>
<item>daemon_dlinkrouterbt</item> <item>daemon_dlinkrouterbt</item>
<item>daemon_ktorrent</item> <item>daemon_ktorrent</item>
<item>daemon_qbittorrent</item> <item>daemon_qbittorrent</item>
<item>daemon_rtorrent</item> <item>daemon_rtorrent</item>
<item>daemon_synology</item> <item>daemon_synology</item>
<item>daemon_tfb4rt</item> <item>daemon_tfb4rt</item>
<item>daemon_ttorrent</item> <item>daemon_ttorrent</item>
<item>daemon_transmission</item> <item>daemon_transmission</item>
<item>daemon_utorrent</item> <item>daemon_utorrent</item>
<item>daemon_vuze</item> <item>daemon_vuze</item>
</string-array> </string-array>
<string-array name="pref_os_types" translatable="false"> <string-array name="pref_os_types" translatable="false">
<item>Windows</item> <item>Windows</item>
<item>Mac</item> <item>Mac</item>
<item>Linux</item> <item>Linux</item>
</string-array> </string-array>
<string-array name="pref_os_values" translatable="false"> <string-array name="pref_os_values" translatable="false">
<item>type_windows</item> <item>type_windows</item>
<item>type_mac</item> <item>type_mac</item>
<item>type_linux</item> <item>type_linux</item>
</string-array> </string-array>
<string-array name="pref_notifyinterval_types"> <string-array name="pref_notifyinterval_types">
<item>15 minutes</item> <item>15 minutes</item>
<item>30 minutes</item> <item>30 minutes</item>
<item>1 hour</item> <item>1 hour</item>
<item>3 hours</item> <item>3 hours</item>
<item>12 hours</item> <item>12 hours</item>
<item>1 day</item> <item>1 day</item>
</string-array> </string-array>
<string-array name="pref_notifyinterval_values" translatable="false"> <string-array name="pref_notifyinterval_values" translatable="false">
<item>900</item> <item>900</item>
<item>1800</item> <item>1800</item>
<item>3600</item> <item>3600</item>
<item>10800</item> <item>10800</item>
<item>43200</item> <item>43200</item>
<item>86400</item> <item>86400</item>
</string-array> </string-array>
<string name="permission_readtorrent">Transdroid requires read access to your file storage in order to read local .torrent files</string> <string name="permission_readtorrent">Transdroid requires read access to your file storage in order to read local .torrent files</string>
<string name="permission_readsettings">Transdroid requires read access to your file storage if you want to read from a local settings file</string> <string name="permission_readsettings">Transdroid requires read access to your file storage if you want to read from a local settings file</string>
<string name="permission_writesettings">Transdroid requires write access to your file storage to write the local settings file</string> <string name="permission_writesettings">Transdroid requires write access to your file storage to write the local settings file</string>
<string name="error_httperror">Error during communication; check your connection</string> <string name="error_httperror">Error during communication; check your connection</string>
<string name="error_unsupported">Your torrent client does not support this operation</string> <string name="error_unsupported">Your torrent client does not support this operation</string>
<string name="error_magnet_links_unsupported">Your torrent client does not support magnet links</string> <string name="error_magnet_links_unsupported">Your torrent client does not support magnet links</string>
<string name="error_jsonrequesterror">Internal error building request</string> <string name="error_jsonrequesterror">Internal error building request</string>
<string name="error_jsonresponseerror">Error parsing server response (please check your settings)</string> <string name="error_jsonresponseerror">Error parsing server response (please check your settings)</string>
<string name="error_daemonnotconnected">Web interface not connected to a running daemon</string> <string name="error_daemonnotconnected">Web interface not connected to a running daemon</string>
<string name="error_401">Access denied (please check your settings)</string> <string name="error_401">Access denied (please check your settings)</string>
<string name="error_torrentfile">Can\'t read .torrent file</string> <string name="error_torrentfile">Can\'t read .torrent file</string>
<string name="error_parsingrss">Error while parsing the RSS feed</string> <string name="error_parsingrss">Error while parsing the RSS feed</string>
<string name="error_invalid_url_form">This URL is not well-formed</string> <string name="error_invalid_url_form">This URL is not well-formed</string>
<string name="error_invalid_search_url">Your web search URL is invalid:</string> <string name="error_invalid_search_url">Your web search URL is invalid:</string>
<string name="error_invalid_ip_or_hostname">Input is not a valid IP address or host name</string> <string name="error_invalid_ip_or_hostname">Input is not a valid IP address or host name</string>
<string name="error_invalid_port_number">Port number is always numeric</string> <string name="error_invalid_port_number">Port number is always numeric</string>
<string name="error_invalid_directory">Directory paths end with a / or \</string> <string name="error_invalid_directory">Directory paths end with a / or \</string>
<string name="error_invalid_timeout">Timeout can not be empty and is a positive number</string> <string name="error_invalid_timeout">Timeout can not be empty and is a positive number</string>
<string name="error_notorrentfile">The search result does not link to a .torrent file</string> <string name="error_notorrentfile">The search result does not link to a .torrent file</string>
<string name="error_noproductforcode">Can\'t find torrent link or product information for this barcode</string> <string name="error_noproductforcode">Can\'t find torrent link or product information for this barcode</string>
<string name="error_no_url_enclosure">The RSS feed item didn\'t provide an URL enclosure or link tag pointing to the .torrent file</string> <string name="error_no_url_enclosure">The RSS feed item didn\'t provide an URL enclosure or link tag pointing to the .torrent file</string>
<string name="error_no_link">The RSS feed item does not provide a link to browse to</string> <string name="error_no_link">The RSS feed item does not provide a link to browse to</string>
<string name="error_norssfeed">URL is not a (valid) RSS feed</string> <string name="error_norssfeed">URL is not a (valid) RSS feed</string>
<string name="error_media_not_available">SD card not available to read/write</string> <string name="error_media_not_available">SD card not available to read/write</string>
<string name="error_no_valid_settings_file">File does not seem to contain %1$s settings</string> <string name="error_no_valid_settings_file">File does not seem to contain %1$s settings</string>
<string name="error_file_not_found">The settings file could not be found</string> <string name="error_file_not_found">The settings file could not be found</string>
<string name="error_cant_write_settings_file">Can\'t write to the settings file</string> <string name="error_cant_write_settings_file">Can\'t write to the settings file</string>
<string name="error_notanumber">Please enter a positive number for both speeds</string> <string name="error_notanumber">Please enter a positive number for both speeds</string>
<string name="error_notalabel">Please enter a valid label or pick from the list</string> <string name="error_notalabel">Please enter a valid label or pick from the list</string>
<string name="error_stillloadingdetails">Please wait until the torrent details have been loaded</string> <string name="error_stillloadingdetails">Please wait until the torrent details have been loaded</string>
<string name="error_noftpapp">No app found that can download %1$s</string> <string name="error_noftpapp">No app found that can download %1$s</string>
<string name="update_app_newversion">New Transdroid version available</string> <string name="update_app_newversion">New Transdroid version available</string>
<string name="update_search_newversion">New Transdroid search module available</string> <string name="update_search_newversion">New Transdroid search module available</string>
<string name="update_updateto">You can now update to %1$s</string> <string name="update_updateto">You can now update to %1$s</string>
<string name="system_developer" translatable="false">\u00A9 Eric Kok, 2312 development</string> <string name="system_developer" translatable="false">\u00A9 Eric Kok, 2312 development</string>
<string name="system_license" translatable="false">Published under GNU General Public License v3</string> <string name="system_license" translatable="false">Published under GNU General Public License v3</string>
<string name="system_librarieslabel">Some code/libraries are used in the project:</string> <string name="system_librarieslabel">Some code/libraries are used in the project:</string>
<string name="system_libraries" translatable="false">AndroidAnnotations\n \u00A0 http://androidannotations.org/\n \u00A0 Pierre-Yves Ricau (eBusinessInformations) et al. \n \u00A0 Apache License, Version 2.0\nMaterial Dialogs\n \u00A0 https://github.com/afollestad/material-dialogs\n \u00A0 Aidan Follestad et al. \n \u00A0 MIT License\nSnackbar\n \u00A0 https://github.com/nispok/snackbar\n \u00A0 William Mora et al. \n \u00A0 MIT License\nFloatingActionButton\n \u00A0 https://github.com/futuresimple/android-floating-action-button\n \u00A0 Jerzy Chałupski et al. \n \u00A0 Apache License, Version 2.0\nBase16Encoder\n \u00A0 http://openjpa.apache.org/\n \u00A0 Marc Prud\'hommeaux \n \u00A0 Apache OpenJPA\n MultipartEntity \n \u00A0 Apache Software Foundation \n \u00A0 Apache License, Version 2.0\nRssParser (learning-android)\n \u00A0 http://github.com/digitalspaghetti/learning-android\n \u00A0 Tane Piper \n \u00A0 Public Domain\nBase64\n \u00A0 http://iharder.net/base64\n \u00A0 Robert Harder \n \u00A0 Public Domain\naXMLRPC\n \u00A0 https://github.com/timroes/aXMLRPC\n \u00A0 Tim Roes \n \u00A0 MIT License\nandroid-ColorPickerPreference\n \u00A0 https://github.com/attenzione/android-ColorPickerPreference\n \u00A0 Daniel Nilsson and Sergey Margaritov \n \u00A0 Apache License, Version 2.0\nFunnel icon\n \u00A0 http://thenounproject.com/noun/funnel/#icon-No5608\n \u00A0 Naomi Atkinson from The Noun Project\n \u00A0 Creative Commons Attribution 3.0</string> <string name="system_libraries" translatable="false">AndroidAnnotations\n \u00A0 http://androidannotations.org/\n \u00A0 Pierre-Yves Ricau (eBusinessInformations) et al. \n \u00A0 Apache License, Version 2.0\nMaterial Dialogs\n \u00A0 https://github.com/afollestad/material-dialogs\n \u00A0 Aidan Follestad et al. \n \u00A0 MIT License\nSnackbar\n \u00A0 https://github.com/nispok/snackbar\n \u00A0 William Mora et al. \n \u00A0 MIT License\nFloatingActionButton\n \u00A0 https://github.com/futuresimple/android-floating-action-button\n \u00A0 Jerzy Chałupski et al. \n \u00A0 Apache License, Version 2.0\nBase16Encoder\n \u00A0 http://openjpa.apache.org/\n \u00A0 Marc Prud\'hommeaux \n \u00A0 Apache OpenJPA\n MultipartEntity \n \u00A0 Apache Software Foundation \n \u00A0 Apache License, Version 2.0\nRssParser (learning-android)\n \u00A0 http://github.com/digitalspaghetti/learning-android\n \u00A0 Tane Piper \n \u00A0 Public Domain\nBase64\n \u00A0 http://iharder.net/base64\n \u00A0 Robert Harder \n \u00A0 Public Domain\naXMLRPC\n \u00A0 https://github.com/timroes/aXMLRPC\n \u00A0 Tim Roes \n \u00A0 MIT License\nandroid-ColorPickerPreference\n \u00A0 https://github.com/attenzione/android-ColorPickerPreference\n \u00A0 Daniel Nilsson and Sergey Margaritov \n \u00A0 Apache License, Version 2.0\nFunnel icon\n \u00A0 http://thenounproject.com/noun/funnel/#icon-No5608\n \u00A0 Naomi Atkinson from The Noun Project\n \u00A0 Creative Commons Attribution 3.0</string>
<string name="system_description">Manage your torrents from your Android device</string> <string name="system_description">Manage your torrents from your Android device</string>
</resources> </resources>

8
app/src/main/res/values/styles.xml

@ -16,14 +16,10 @@
--> -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="TransdroidTheme" parent="Theme.Transdroid.Light"> <style name="TransdroidTheme" parent="Theme.Transdroid.Auto">
<item name="drawer_background">@color/background_light</item>
<item name="activatable_background">@drawable/activatable_background</item>
</style> </style>
<style name="TransdroidTheme.Dark" parent="Theme.Transdroid.Dark"> <style name="TransdroidTheme.Dark" parent="Theme.Transdroid.Auto">
<item name="drawer_background">@color/background_dark</item>
<item name="activatable_background">@drawable/activatable_background</item>
</style> </style>
<!-- No theme background to let the user's wall paper shine through --> <!-- No theme background to let the user's wall paper shine through -->

15
app/src/main/res/values/styles_transdroid_light.xml → app/src/main/res/values/styles_transdroid.xml

@ -19,18 +19,21 @@
<resources> <resources>
<style name="Theme.Transdroid.Light" parent="Theme.AppCompat.Light.NoActionBar"> <style name="Theme.Transdroid.Auto" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="drawer_background">@color/transdroid_background</item>
<item name="activatable_background">@drawable/activatable_background</item>
<item name="colorPrimary">@color/green</item> <item name="colorPrimary">@color/green</item>
<item name="colorPrimaryDark">@color/green_dark</item> <item name="colorPrimaryDark">@color/green_dark</item>
<item name="colorControlHighlight">@color/green_light</item> <item name="colorControlHighlight">@color/green_light</item>
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/grey</item> <item name="actionModeBackground">@color/grey</item>
<item name="android:textViewStyle">@style/DefaultTextView</item> <item name="android:textViewStyle">@style/DefaultTextView</item>
<item name="android:windowBackground">@color/background_light</item> <item name="android:windowBackground">@color/transdroid_background</item>
<item name="loading_progress">@drawable/loading_progress_light</item> <item name="loading_progress">@drawable/loading_progress</item>
<item name="text_bright">@color/text_bright_light</item> <item name="text_bright">@color/transdroid_text_bright</item>
<item name="text_actionbar">@color/text_actionbar_dark</item> <item name="text_actionbar">@color/transdroid_text_actionbar</item>
<item name="text_actionbar_secondary">@color/text_actionbar_light</item> <item name="text_actionbar_secondary">@color/transdroid_text_actionbar</item>
</style> </style>
</resources> </resources>

4
app/src/main/res/xml/listwidget_info.xml

@ -17,8 +17,8 @@
--> -->
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="org.transdroid.core.widget.ListWidgetConfigActivity_" android:configure="org.transdroid.core.widget.ListWidgetConfigActivity_"
android:initialKeyguardLayout="@layout/widget_torrents_light" android:initialKeyguardLayout="@layout/widget_torrents"
android:initialLayout="@layout/widget_torrents_light" android:initialLayout="@layout/widget_torrents"
android:minHeight="110dip" android:minHeight="110dip"
android:minResizeHeight="40dip" android:minResizeHeight="40dip"
android:minResizeWidth="110dp" android:minResizeWidth="110dp"

8
app/src/main/res/xml/pref_system.xml

@ -31,8 +31,16 @@
android:entryValues="@array/pref_autorefresh_intervalvalues" android:entryValues="@array/pref_autorefresh_intervalvalues"
android:defaultValue="0" /> android:defaultValue="0" />
<CheckBoxPreference
android:key="system_autodarktheme"
android:title="@string/pref_autodarktheme"
android:summary="@string/pref_autodarktheme_info"
android:disableDependentsState="true"
android:defaultValue="true" />
<CheckBoxPreference <CheckBoxPreference
android:key="system_usedarktheme" android:key="system_usedarktheme"
android:dependency="system_autodarktheme"
android:title="@string/pref_usedarktheme" android:title="@string/pref_usedarktheme"
android:summary="@string/pref_usedarktheme_info" android:summary="@string/pref_usedarktheme_info"
android:defaultValue="false" /> android:defaultValue="false" />

3
build.gradle

@ -1,10 +1,11 @@
buildscript { buildscript {
repositories { repositories {
google() google()
jcenter()
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.3.2' classpath 'com.android.tools.build:gradle:3.5.3'
} }
} }

6
gradle.properties

@ -11,9 +11,3 @@
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m # Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.enableR8=true

4
gradle/wrapper/gradle-wrapper.properties vendored

@ -1,6 +1,6 @@
#Wed Mar 15 09:19:02 CET 2017 #Sun Feb 09 15:35:10 AEDT 2020
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

Loading…
Cancel
Save