diff --git a/core/res/drawable-hdpi/ic_action_overflow.png b/core/res/drawable-hdpi/ic_action_overflow.png
new file mode 100755
index 00000000..a074c10d
Binary files /dev/null and b/core/res/drawable-hdpi/ic_action_overflow.png differ
diff --git a/core/res/drawable-mdpi/ic_action_overflow.png b/core/res/drawable-mdpi/ic_action_overflow.png
new file mode 100755
index 00000000..b6d614fc
Binary files /dev/null and b/core/res/drawable-mdpi/ic_action_overflow.png differ
diff --git a/core/res/drawable-xhdpi/ic_action_overflow.png b/core/res/drawable-xhdpi/ic_action_overflow.png
new file mode 100755
index 00000000..7be3c2a4
Binary files /dev/null and b/core/res/drawable-xhdpi/ic_action_overflow.png differ
diff --git a/core/res/drawable-xxhdpi/ic_action_overflow.png b/core/res/drawable-xxhdpi/ic_action_overflow.png
new file mode 100755
index 00000000..a0cb8a41
Binary files /dev/null and b/core/res/drawable-xxhdpi/ic_action_overflow.png differ
diff --git a/core/res/layout/pref_withoverflow.xml b/core/res/layout/pref_withoverflow.xml
new file mode 100644
index 00000000..867c44c8
--- /dev/null
+++ b/core/res/layout/pref_withoverflow.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/res/values-sw500dp/bools.xml b/core/res/values-sw500dp/bools.xml
index 3a2b3761..22e6baef 100644
--- a/core/res/values-sw500dp/bools.xml
+++ b/core/res/values-sw500dp/bools.xml
@@ -16,6 +16,8 @@
along with Transdroid. If not, see .
-->
+
false
-
+
+
\ No newline at end of file
diff --git a/core/res/values-v11/bools.xml b/core/res/values-v11/bools.xml
index 2ea1c4b9..5ba39a6b 100644
--- a/core/res/values-v11/bools.xml
+++ b/core/res/values-v11/bools.xml
@@ -16,6 +16,8 @@
along with Transdroid. If not, see .
-->
+
true
-
+
+
\ No newline at end of file
diff --git a/core/res/values/bools.xml b/core/res/values/bools.xml
index a79e6d70..9629ade3 100644
--- a/core/res/values/bools.xml
+++ b/core/res/values/bools.xml
@@ -16,8 +16,16 @@
along with Transdroid. If not, see .
-->
+
true
false
-
+
+ true
+
+ true
+
+ true
+
+
\ No newline at end of file
diff --git a/core/res/values/strings.xml b/core/res/values/strings.xml
index 71eb29ef..a718d164 100644
--- a/core/res/values/strings.xml
+++ b/core/res/values/strings.xml
@@ -210,6 +210,7 @@
Servers
Add new server
+ Add seedbox
Search sites
Set default site
Add web search site
@@ -298,6 +299,26 @@
Available at transdroid.org/download
Recent changes
About %1$s
+
+ Add %1$s seedbox
+ Torrent client
+ Client to connect to
+ Server address
+ Like dedi001.xirvik.com
+ Like semixl001a.xirvik.com
+ Like desharedgbit001.xirvik.com
+ Like 001.seedstuff.ca
+
+ - rTorrent
+ - uTorrent
+ - Deluge
+
+
+ - daemon_rtorrent
+ - daemon_utorrent
+ - daemon_deluge
+
+
- BitComet
- Bitflu 1.2+
diff --git a/core/res/xml/pref_main.xml b/core/res/xml/pref_main.xml
index f8a5df82..b28de47a 100644
--- a/core/res/xml/pref_main.xml
+++ b/core/res/xml/pref_main.xml
@@ -21,7 +21,7 @@
android:key="header_servers"
android:title="@string/pref_servers"
android:order="0">
-
diff --git a/core/res/xml/pref_seedbox_seedstuff.xml b/core/res/xml/pref_seedbox_seedstuff.xml
new file mode 100644
index 00000000..84c0e150
--- /dev/null
+++ b/core/res/xml/pref_seedbox_seedstuff.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/core/res/xml/pref_seedbox_xirvikdedi.xml b/core/res/xml/pref_seedbox_xirvikdedi.xml
new file mode 100644
index 00000000..eb70295d
--- /dev/null
+++ b/core/res/xml/pref_seedbox_xirvikdedi.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/res/xml/pref_seedbox_xirviksemi.xml b/core/res/xml/pref_seedbox_xirviksemi.xml
new file mode 100644
index 00000000..ec59651b
--- /dev/null
+++ b/core/res/xml/pref_seedbox_xirviksemi.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/core/res/xml/pref_seedbox_xirvikshared.xml b/core/res/xml/pref_seedbox_xirvikshared.xml
new file mode 100644
index 00000000..ec59651b
--- /dev/null
+++ b/core/res/xml/pref_seedbox_xirvikshared.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/org/transdroid/core/app/settings/ApplicationSettings.java b/core/src/org/transdroid/core/app/settings/ApplicationSettings.java
index 2a1239c2..0ce6eaa8 100644
--- a/core/src/org/transdroid/core/app/settings/ApplicationSettings.java
+++ b/core/src/org/transdroid/core/app/settings/ApplicationSettings.java
@@ -32,6 +32,7 @@ import org.transdroid.core.app.search.SearchHelper;
import org.transdroid.core.app.search.SearchSite;
import org.transdroid.core.gui.navigation.StatusType;
import org.transdroid.core.gui.search.SearchSetting;
+import org.transdroid.core.seedbox.SeedboxProvider;
import org.transdroid.core.widget.ListWidgetConfig;
import org.transdroid.daemon.Daemon;
import org.transdroid.daemon.OS;
@@ -60,22 +61,69 @@ public class ApplicationSettings {
}
/**
- * Returns all available user-configured servers
+ * Returns all available user-configured normal and seed servers
* @return A list of all stored server settings objects
*/
- public List getServerSettings() {
+ public List getAllServerSettings() {
+ List all = new ArrayList();
+ all.addAll(getNormalServerSettings());
+ for (SeedboxProvider provider : SeedboxProvider.values()) {
+ all.addAll(provider.getSettings().getAllServerSettings(prefs, all.size()));
+ }
+ return all;
+ }
+
+ /**
+ * Returns the order number/identifying key of the last server, normal or seedbox configured
+ * @return The zero-based order number (index) of the last stored server settings
+ */
+ public int getMaxOfAllServers() {
+ int max = getMaxNormalServer();
+ for (SeedboxProvider provider : SeedboxProvider.values()) {
+ max += provider.getSettings().getMaxSeedboxOrder(prefs) + 1;
+ }
+ return max;
+ }
+
+ /**
+ * Returns the server settings for either a normal or a seedbox server as the user configured. WARNING: This method
+ * does not check if the settings actually exist and may reply on empty default if called for a non-existing server.
+ * @param order The order number/identifying key of the server's settings to retrieve, where the normal servers are
+ * first and the seedboxes are numbers thereafter onwards
+ * @return The server settings object, loaded from shared preferences
+ */
+ public ServerSetting getServerSetting(int order) {
+ int max = getMaxNormalServer();
+ if (order <= max) {
+ return getNormalServerSetting(order);
+ }
+ for (SeedboxProvider provider : SeedboxProvider.values()) {
+ int offset = max;
+ max += provider.getSettings().getMaxSeedboxOrder(prefs) + 1;
+ if (order <= max) {
+ return provider.getSettings().getServerSetting(prefs, offset, order - offset - 1);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns all available normal, user-configured servers (so no seedbox settings)
+ * @return A list of all stored server settings objects
+ */
+ public List getNormalServerSettings() {
List servers = new ArrayList();
- for (int i = 0; i <= getMaxServer(); i++) {
- servers.add(getServerSetting(i));
+ for (int i = 0; i <= getMaxNormalServer(); i++) {
+ servers.add(getNormalServerSetting(i));
}
return Collections.unmodifiableList(servers);
}
/**
- * Returns the order number/identifying key of the last server
- * @return The zero-based order number (index) of the last stored server settings
+ * Returns the order number/identifying key of the last normal server
+ * @return The zero-based order number (index) of the last stored normal server settings
*/
- public int getMaxServer() {
+ public int getMaxNormalServer() {
for (int i = 0; true; i++) {
if (prefs.getString("server_type_" + i, null) == null)
return i - 1;
@@ -83,12 +131,12 @@ public class ApplicationSettings {
}
/**
- * Returns the user-specified server settings for a specific server. WARNING: This method does not check if the
- * settings actually exist and may rely on empty defaults if called not a non-existing server.
- * @param order The order number/identifying key of the settings to retrieve
+ * Returns the user-specified server settings for a normal (non-seedbox) server. WARNING: This method does not check
+ * if the settings actually exist and may rely on empty defaults if called for a non-existing server.
+ * @param order The order number/identifying key of the normal server's settings to retrieve
* @return The server settings object, loaded from shared preferences
*/
- public ServerSetting getServerSetting(int order) {
+ public ServerSetting getNormalServerSetting(int order) {
// @formatter:off
Daemon type = Daemon.fromCode(prefs.getString("server_type_" + order, null));
boolean ssl = prefs.getBoolean("server_sslenabled_" + order, false);
@@ -132,13 +180,13 @@ public class ApplicationSettings {
* servers will be updated accordingly.
* @param order The identifying order number/key of the settings to remove
*/
- public void removeServerSettings(int order) {
+ public void removeNormalServerSettings(int order) {
if (prefs.getString("server_type_" + order, null) == null)
return; // The settings that were requested to be removed do not exist
// Copy all settings higher than the supplied order number to the previous spot
Editor edit = prefs.edit();
- int max = getMaxServer();
+ int max = getMaxNormalServer();
for (int i = order; i < max; i++) {
edit.putString("server_name_" + i, prefs.getString("server_name_" + (i + 1), null));
edit.putString("server_type_" + i, prefs.getString("server_type_" + (i + 1), null));
@@ -197,7 +245,7 @@ public class ApplicationSettings {
* servers exist
*/
public ServerSetting getLastUsedServer() {
- int max = getMaxServer(); // Zero-based index, so with max == 0 there is 1 server
+ int max = getMaxOfAllServers(); // Zero-based index, so with max == 0 there is 1 server
if (max < 0) {
// No servers configured
return null;
diff --git a/core/src/org/transdroid/core/app/settings/SettingsPersistence.java b/core/src/org/transdroid/core/app/settings/SettingsPersistence.java
index 1c875293..a57b1f72 100644
--- a/core/src/org/transdroid/core/app/settings/SettingsPersistence.java
+++ b/core/src/org/transdroid/core/app/settings/SettingsPersistence.java
@@ -73,7 +73,7 @@ public class SettingsPersistence {
JSONArray servers = json.getJSONArray("servers");
for (int i = 0; i < servers.length(); i++) {
JSONObject server = servers.getJSONObject(i);
- String postfix = Integer.toString(applicationSettings.getMaxServer() + 1 + i);
+ String postfix = Integer.toString(applicationSettings.getMaxOfAllServers() + 1 + i);
if (server.has("name"))
editor.putString("server_name_" + postfix, server.getString("name"));
diff --git a/core/src/org/transdroid/core/gui/TorrentsActivity.java b/core/src/org/transdroid/core/gui/TorrentsActivity.java
index 77ccdb8b..ff9ad8d3 100644
--- a/core/src/org/transdroid/core/gui/TorrentsActivity.java
+++ b/core/src/org/transdroid/core/gui/TorrentsActivity.java
@@ -194,7 +194,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi
getSupportActionBar().setCustomView(serverStatusView);
navigationSpinnerAdapter = FilterListDropDownAdapter_.getInstance_(this);
// Servers are always added to the action bar spinner
- navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings());
+ navigationSpinnerAdapter.updateServers(applicationSettings.getAllServerSettings());
// Check if there was room for a dedicated filter list (i.e. on tablets)
if (filtersList != null) {
@@ -231,7 +231,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi
&& getIntent().getExtras() == null && getIntent().hasExtra(ListWidgetProvider.EXTRA_SERVER)) {
// A server settings order ID was provided in this org.transdroid.START_SERVER action intent
int serverId = getIntent().getExtras().getInt(ListWidgetProvider.EXTRA_SERVER);
- if (serverId < 0 || serverId > applicationSettings.getMaxServer()) {
+ if (serverId < 0 || serverId > applicationSettings.getMaxOfAllServers()) {
Log.e(this, "Tried to start with " + ListWidgetProvider.EXTRA_SERVER + " intent but " + serverId
+ " is not an existing server order id");
} else {
@@ -275,7 +275,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi
super.onResume();
// Refresh server settings
- navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings());
+ navigationSpinnerAdapter.updateServers(applicationSettings.getAllServerSettings());
ServerSetting lastUsed = applicationSettings.getLastUsedServer();
if (lastUsed == null) {
// Still no settings
diff --git a/core/src/org/transdroid/core/gui/navigation/NavigationHelper.java b/core/src/org/transdroid/core/gui/navigation/NavigationHelper.java
index a36221bf..ec82c317 100644
--- a/core/src/org/transdroid/core/gui/navigation/NavigationHelper.java
+++ b/core/src/org/transdroid/core/gui/navigation/NavigationHelper.java
@@ -141,7 +141,7 @@ public class NavigationHelper {
* @return True if search is enabled, false otherwise
*/
public boolean enableSearchUi() {
- return !context.getPackageName().equals("org.transdroid.lite");
+ return context.getResources().getBoolean(R.bool.search_available);
}
/**
@@ -150,7 +150,16 @@ public class NavigationHelper {
* @return True if search is enabled, false otherwise
*/
public boolean enableRssUi() {
- return !context.getPackageName().equals("org.transdroid.lite");
+ return context.getResources().getBoolean(R.bool.rss_available);
+ }
+
+ /**
+ * Returns whether any seedbox-related components should be shown in the interface; specifically the option to add
+ * server settings via easy seedbox-specific screens.
+ * @return True if seedbox settings should be shown, false otherwise
+ */
+ public boolean enableSeedboxes() {
+ return context.getResources().getBoolean(R.bool.seedboxes_available);
}
/**
diff --git a/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java b/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java
index 7e4ad600..f5a4dfc5 100644
--- a/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java
+++ b/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java
@@ -31,17 +31,27 @@ import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.app.settings.WebsearchSetting;
import org.transdroid.core.gui.*;
import org.transdroid.core.gui.navigation.NavigationHelper;
+import org.transdroid.core.gui.settings.OverflowPreference.OnOverflowClicked;
import org.transdroid.core.gui.settings.RssfeedPreference.OnRssfeedClickedListener;
import org.transdroid.core.gui.settings.ServerPreference.OnServerClickedListener;
import org.transdroid.core.gui.settings.WebsearchPreference.OnWebsearchClickedListener;
+import org.transdroid.core.seedbox.SeedboxPreference;
+import org.transdroid.core.seedbox.SeedboxPreference.OnSeedboxClickedListener;
+import org.transdroid.core.seedbox.SeedboxProvider;
import android.annotation.TargetApi;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
+import android.view.View;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
@@ -53,12 +63,15 @@ import com.actionbarsherlock.app.SherlockPreferenceActivity;
@EActivity
public class MainSettingsActivity extends SherlockPreferenceActivity {
+ protected static final int DIALOG_ADDSEEDBOX = 0;
+
@Bean
protected NavigationHelper navigationHelper;
@Bean
protected ApplicationSettings applicationSettings;
@Bean
protected SearchHelper searchHelper;
+ protected SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -73,6 +86,7 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ prefs = getPreferenceManager().getSharedPreferences();
if (getPreferenceScreen() != null)
getPreferenceScreen().removeAll();
@@ -81,7 +95,12 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
// Load the preference menu and attach actions
addPreferencesFromResource(R.xml.pref_main);
- findPreference("header_addserver").setOnPreferenceClickListener(onAddServer);
+ OverflowPreference addServerPrefernce = (OverflowPreference) findPreference("header_addserver");
+ addServerPrefernce.setOnPreferenceClickListener(onAddServer);
+ if (navigationHelper.enableSeedboxes())
+ addServerPrefernce.setOnOverflowClickedListener(onOverflowClicked);
+ else
+ addServerPrefernce.hideOverflowButton();
if (enableSearchUi)
findPreference("header_addwebsearch").setOnPreferenceClickListener(onAddWebsearch);
if (enableRssUi)
@@ -90,12 +109,25 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
findPreference("header_system").setOnPreferenceClickListener(onSystemSettings);
// Add existing servers
- List servers = applicationSettings.getServerSettings();
+ List servers = applicationSettings.getNormalServerSettings();
for (ServerSetting serverSetting : servers) {
getPreferenceScreen().addPreference(
new ServerPreference(this).setServerSetting(serverSetting).setOnServerClickedListener(
onServerClicked));
}
+ // Add seedboxes; serversOffset keeps an int to have all ServerSettings with unique ids, seedboxOffset is unique
+ // only per seedbox type
+ int orderOffset = servers.size();
+ for (SeedboxProvider provider : SeedboxProvider.values()) {
+ int seedboxOffset = 0;
+ for (ServerSetting seedbox : provider.getSettings().getAllServerSettings(prefs, orderOffset)) {
+ getPreferenceScreen().addPreference(
+ new SeedboxPreference(this).setProvider(provider).setServerSetting(seedbox)
+ .setOnSeedboxClickedListener(onSeedboxClicked, seedboxOffset));
+ orderOffset++;
+ seedboxOffset++;
+ }
+ }
// Add existing RSS feeds
if (!enableRssUi) {
@@ -166,6 +198,14 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
}
};
+ private OnOverflowClicked onOverflowClicked = new OnOverflowClicked() {
+ @SuppressWarnings("deprecation")
+ @Override
+ public void onOverflowClicked(View overflowButton) {
+ showDialog(DIALOG_ADDSEEDBOX);
+ }
+ };
+
private OnPreferenceClickListener onAddWebsearch = new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
@@ -205,6 +245,16 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
}
};
+ private OnSeedboxClickedListener onSeedboxClicked = new OnSeedboxClickedListener() {
+ @Override
+ public void onSeedboxClicked(ServerSetting serverSetting, SeedboxProvider provider, int seedboxOffset) {
+ // NOTE: The seedboxOffset is the seedbox type-unique order that we need to supply uin the Extras bundle to
+ // edit this specific seedbox
+ startActivity(provider.getSettings().getSettingsActivityIntent(MainSettingsActivity.this)
+ .putExtra("key", seedboxOffset));
+ }
+ };
+
private OnWebsearchClickedListener onWebsearchClicked = new OnWebsearchClickedListener() {
@Override
public void onWebsearchClicked(WebsearchSetting websearchSetting) {
@@ -219,4 +269,27 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
}
};
+ protected Dialog onCreateDialog(int id) {
+ switch (id) {
+ case DIALOG_ADDSEEDBOX:
+ // Open dialog to pick one of the supported seedbox providers
+ String[] seedboxes = new String[SeedboxProvider.values().length];
+ for (int i = 0; i < seedboxes.length; i++) {
+ seedboxes[i] = getString(R.string.pref_seedbox_addseedbox, SeedboxProvider.values()[i].getSettings()
+ .getName());
+ }
+ return new AlertDialog.Builder(this).setItems(seedboxes, onAddSeedbox).create();
+ }
+ return null;
+ }
+
+ private OnClickListener onAddSeedbox = new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // Start the configuration activity for this specific chosen seedbox
+ startActivity(SeedboxProvider.values()[which].getSettings().getSettingsActivityIntent(
+ MainSettingsActivity.this));
+ }
+ };
+
}
diff --git a/core/src/org/transdroid/core/gui/settings/OverflowPreference.java b/core/src/org/transdroid/core/gui/settings/OverflowPreference.java
new file mode 100644
index 00000000..6e996672
--- /dev/null
+++ b/core/src/org/transdroid/core/gui/settings/OverflowPreference.java
@@ -0,0 +1,117 @@
+package org.transdroid.core.gui.settings;
+
+import org.transdroid.core.R;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageButton;
+
+/**
+ * A {@link Preference} item that shows an extra overflow button at the right side of the screen. The action attached to
+ * this button is set using {@link #setOnOverflowClickedListener(OnOverflowClicked)}. Normal clicks on this preference
+ * are handled in the standard way.
+ * @author Eric Kok
+ */
+public class OverflowPreference extends Preference {
+
+ private OnPreferenceClickListener onPreferenceClickListener = null;
+ private OnOverflowClicked onOverflowClickedListener = null;
+ private ImageButton overflowButton = null;
+
+ public OverflowPreference(Context context) {
+ super(context);
+ init();
+ }
+
+ public OverflowPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public OverflowPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init();
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ View layout = super.onCreateView(parent);
+ // Since the Preference layout is now created, we can attach the proper click listeners
+ layout.setClickable(true);
+ layout.setFocusable(true);
+ // When setting the background drawable the padding on this Preference layout disappears, so add it again
+ int bottom = layout.getPaddingBottom();
+ int top = layout.getPaddingTop();
+ int right = layout.getPaddingRight();
+ int left = layout.getPaddingLeft();
+ layout.setBackgroundResource(R.drawable.abs__item_background_holo_light);
+ layout.setPadding(left, top, right, bottom);
+ layout.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (onPreferenceClickListener != null)
+ onPreferenceClickListener.onPreferenceClick(OverflowPreference.this);
+ }
+ });
+ overflowButton = (ImageButton) layout.findViewById(R.id.overflow_button);
+ overflowButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (onOverflowClickedListener != null)
+ onOverflowClickedListener.onOverflowClicked(v);
+ }
+ });
+ return layout;
+ }
+
+ public void init() {
+ // Load an overflow-style image button as custom widget in the right of this Preference layout
+ setWidgetLayoutResource(R.layout.pref_withoverflow);
+ }
+
+ /**
+ * Hides the overflow button (on the right side of the Preference) from the UI.
+ */
+ public void hideOverflowButton() {
+ if (overflowButton != null) {
+ overflowButton.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * Shows (after hiding it) the overflow button (on the right side of the Preference) in the UI.
+ */
+ public void showOverflowButton() {
+ if (overflowButton != null) {
+ overflowButton.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void setOnPreferenceClickListener(OnPreferenceClickListener onPreferenceClickListener) {
+ // Instead of the build-in list item click behaviour, we have to manually assign the click listener to this
+ // Preference item, as we stole the focus behaviour when we added a Button to the Preference layout
+ this.onPreferenceClickListener = onPreferenceClickListener;
+ }
+
+ /**
+ * Registers the listener for clicks on the overflow button contained in this preference.
+ * @param onOverflowClickedListener The overflow button click listener
+ */
+ public void setOnOverflowClickedListener(OnOverflowClicked onOverflowClickedListener) {
+ this.onOverflowClickedListener = onOverflowClickedListener;
+ }
+
+ /**
+ * An interface to be implemented by any activity (or otherwise) that wants to handle events when the contained
+ * overflow button is clicked.
+ */
+ public interface OnOverflowClicked {
+ public void onOverflowClicked(View overflowButton);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/gui/settings/ServerPreference.java b/core/src/org/transdroid/core/gui/settings/ServerPreference.java
index fa109915..9f57dc78 100644
--- a/core/src/org/transdroid/core/gui/settings/ServerPreference.java
+++ b/core/src/org/transdroid/core/gui/settings/ServerPreference.java
@@ -29,7 +29,7 @@ public class ServerPreference extends Preference {
private static final int ORDER_START = 1;
- private ServerSetting serverSetting;
+ protected ServerSetting serverSetting;
private OnServerClickedListener onServerClickedListener = null;
public ServerPreference(Context context) {
diff --git a/core/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java b/core/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java
index 4641464e..304c90fd 100644
--- a/core/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java
+++ b/core/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java
@@ -49,7 +49,7 @@ public class ServerSettingsActivity extends KeyBoundPreferencesActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Load the raw preferences to show in this screen
- init(R.xml.pref_server, ApplicationSettings_.getInstance_(this).getMaxServer());
+ init(R.xml.pref_server, ApplicationSettings_.getInstance_(this).getMaxOfAllServers());
initTextPreference("server_name");
initListPreference("server_type");
initTextPreference("server_address");
@@ -84,7 +84,7 @@ public class ServerSettingsActivity extends KeyBoundPreferencesActivity {
@OptionsItem(resName = "action_removesettings")
protected void removeSettings() {
- ApplicationSettings_.getInstance_(this).removeServerSettings(key);
+ ApplicationSettings_.getInstance_(this).removeNormalServerSettings(key);
finish();
}
diff --git a/core/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java b/core/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java
index cae772ef..d77bcca9 100644
--- a/core/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java
+++ b/core/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java
@@ -183,7 +183,10 @@ public class SystemSettingsActivity extends SherlockPreferenceActivity {
// @formatter:off
return new AlertDialog.Builder(this)
.setMessage(
- getString(R.string.pref_import_dialog, getString(R.string.app_name), SettingsPersistence.DEFAULT_SETTINGS_FILE.toString()))
+ getString(
+ R.string.pref_import_dialog,
+ getString(R.string.app_name),
+ SettingsPersistence.DEFAULT_SETTINGS_FILE.toString()))
.setPositiveButton(android.R.string.ok, importSettings)
.setNegativeButton(android.R.string.cancel, null).create();
// @formatter:on
@@ -191,7 +194,10 @@ public class SystemSettingsActivity extends SherlockPreferenceActivity {
// @formatter:off
return new AlertDialog.Builder(this)
.setMessage(
- getString(R.string.pref_export_dialog, getString(R.string.app_name), SettingsPersistence.DEFAULT_SETTINGS_FILE.toString()))
+ getString(
+ R.string.pref_export_dialog,
+ getString(R.string.app_name),
+ SettingsPersistence.DEFAULT_SETTINGS_FILE.toString()))
.setPositiveButton(android.R.string.ok, exportSettings)
.setNegativeButton(android.R.string.cancel, null).create();
// @formatter:on
diff --git a/core/src/org/transdroid/core/seedbox/SeedboxPreference.java b/core/src/org/transdroid/core/seedbox/SeedboxPreference.java
new file mode 100644
index 00000000..038ec509
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/SeedboxPreference.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.transdroid.core.app.settings.ServerSetting;
+import org.transdroid.core.gui.settings.ServerPreference;
+
+import android.content.Context;
+import android.preference.Preference;
+
+/**
+ * Represents a {@link ServerSetting} in a preferences screen, as constructed for a specific {@link SeedboxProvider}.
+ * @author Eric Kok
+ */
+public class SeedboxPreference extends ServerPreference {
+
+ private SeedboxProvider provider = null;
+ private OnSeedboxClickedListener onSeedboxClickedListener = null;
+ private int onSeedboxClickedListenerOffset = 0;
+
+ public SeedboxPreference(Context context) {
+ super(context);
+ setOnPreferenceClickListener(onSeedboxPreferenceClicked);
+ }
+
+ /**
+ * Set the seedbox provider that this server settings object is constructed for.
+ * @param provider The seedbox provider type
+ * @return Itself, for method chaining
+ */
+ public SeedboxPreference setProvider(SeedboxProvider provider) {
+ this.provider = provider;
+ setSummary(provider.getSettings().getName());
+ return this;
+ }
+
+ /**
+ * Set the server settings object that is bound to this preference item. This seedbox=specific implementation does
+ * not show the human readable server connection string, but the seedbox provider name.
+ * @param serverSetting The server settings
+ * @return Itself, for method chaining
+ */
+ public SeedboxPreference setServerSetting(ServerSetting serverSetting) {
+ super.setServerSetting(serverSetting);
+ if (this.provider != null)
+ setSummary(provider.getSettings().getName());
+ return this;
+ }
+
+ /**
+ * Returns the seedbox provider for which this server is constructed.
+ * @return The seedbox provider type of this server
+ */
+ public SeedboxProvider getSeedboxProvider() {
+ return provider;
+ }
+
+ private OnPreferenceClickListener onSeedboxPreferenceClicked = new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (onSeedboxClickedListener != null)
+ onSeedboxClickedListener.onSeedboxClicked(serverSetting, provider, onSeedboxClickedListenerOffset);
+ return true;
+ }
+ };
+
+ /**
+ * Set a listener that will be notified of click events on this preference
+ * @param onSeedboxClickedListener The click listener to register
+ * @return Itself, for method chaining
+ */
+ public ServerPreference setOnSeedboxClickedListener(OnSeedboxClickedListener onSeedboxClickedListener,
+ int seedboxOffset) {
+ this.onSeedboxClickedListener = onSeedboxClickedListener;
+ this.onSeedboxClickedListenerOffset = seedboxOffset;
+ return this;
+ }
+
+ public interface OnSeedboxClickedListener {
+ public void onSeedboxClicked(ServerSetting serverSetting, SeedboxProvider provider,
+ int onSeedboxClickedListenerOffset);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/SeedboxProvider.java b/core/src/org/transdroid/core/seedbox/SeedboxProvider.java
new file mode 100644
index 00000000..cd3fb83e
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/SeedboxProvider.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.transdroid.core.gui.settings.KeyBoundPreferencesActivity;
+
+/**
+ * Enumeration of all available seedbox types. Every type needs a {@link SeedboxSettings} implementation to access and
+ * modify settings, which includes a {@link KeyBoundPreferencesActivity} to allow a user to configure the settings.
+ * @author Eric Kok
+ */
+public enum SeedboxProvider {
+
+ Seedstuff {
+ @Override
+ public SeedboxSettings getSettings() {
+ return new SeedstuffSettings();
+ }
+ },
+ XirvikShared {
+ @Override
+ public SeedboxSettings getSettings() {
+ return new XirvikSharedSettings();
+ }
+ },
+ XirvikSemi {
+ @Override
+ public SeedboxSettings getSettings() {
+ return new XirvikSemiSettings();
+ }
+ },
+ XirvikDedi {
+ @Override
+ public SeedboxSettings getSettings() {
+ return new XirvikDediSettings();
+ }
+ };
+
+ public abstract SeedboxSettings getSettings();
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/SeedboxSettings.java b/core/src/org/transdroid/core/seedbox/SeedboxSettings.java
new file mode 100644
index 00000000..e943e03f
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/SeedboxSettings.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import java.util.List;
+
+import org.transdroid.core.app.settings.ServerSetting;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+
+/**
+ * Interface to implement by any seedbox type (as appears in the {@link SeedboxProvider} enum) to access and modify
+ * seedbox settings for a certain seedbox provider.
+ * @author Eric Kok
+ */
+public interface SeedboxSettings {
+
+ /**
+ * Should return the name of the seedbox (and perhaps the seedbox type)
+ * @return A human-readable name of this seedbox provider
+ */
+ public String getName();
+
+ /**
+ * Should return the order number of the last specified seedbox of this type (regardless of other seedbox types).
+ * @param prefs The shared preferences to load the settings from
+ * @return The order number (id) of the last configured seedbox, or -1 if none are configured.
+ */
+ public int getMaxSeedboxOrder(SharedPreferences prefs);
+
+ /**
+ * Should return a {@link ServerSetting} object that can connect to the seedbox as identified by the given seedbox
+ * provider-unique order.
+ * @param prefs The shared preferences to load the settings from
+ * @param orderOffset An offset integer to add to the normal order number to assign a app-unique server id to this
+ * seedbox
+ * @param order The seedbox provider-specific order id referring to the specific seedbox to load settings for
+ * @return A server settings object corresponding to the user's seedbox settings for the specified order id
+ */
+ public ServerSetting getServerSetting(SharedPreferences prefs, int orderOffset, int order);
+
+ /**
+ * Should return a list of all the {@link ServerSetting}s available for this seedbox type.
+ * @param prefs The shared preferences to load the settings from
+ * @param orderOffset An offset integer to add to the normal order number to assign a app-unique server id to this
+ * seedbox
+ * @return A list of all server settings objects that are stored for this seedbox type
+ */
+ public List getAllServerSettings(SharedPreferences prefs, int orderOffset);
+
+ /**
+ * Should remove the settings of a specific seedbox specification as identified by its seedbox provider-unique order
+ * number.
+ * @param prefs The shared preferences to remove the settings from
+ * @param order The id referring to a specific seedbox order number within this type of seedbox
+ */
+ public void removeServerSetting(SharedPreferences prefs, int order);
+
+ /**
+ * The settings activity in which the user can supply and edit its settings for this specific seedbox type.
+ * @param context The activity context from where the settings activity will be started
+ * @return An already prepared intent that points to the settings activity for this specific type of seedbox
+ */
+ public Intent getSettingsActivityIntent(Context context);
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/SeedboxSettingsImpl.java b/core/src/org/transdroid/core/seedbox/SeedboxSettingsImpl.java
new file mode 100644
index 00000000..3ddf8764
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/SeedboxSettingsImpl.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.transdroid.core.app.settings.ServerSetting;
+
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+
+/**
+ * Abstract class that acts as a helper for actual {@link SeedboxSettings} implementations by implementing some
+ * functions (partially) to do away with boileplate code.
+ * @author Eric Kok
+ */
+public abstract class SeedboxSettingsImpl implements SeedboxSettings {
+
+ /**
+ * Helper method to look up the seedbox type-unique order number of the last configured seedbox.
+ * @param prefs The shared preferences object to remove settings from
+ * @param uniqueKeyBase The base of the key that is used as identifying (unique) key, for example
+ * 'seedbox_myseedbox_name_'
+ * @return The order number of the configured seedbox, or 01 if no seedbox is configured of this type
+ */
+ public int getMaxSeedboxOrder(SharedPreferences prefs, String uniqueKeyBase) {
+ for (int i = 0; true; i++) {
+ if (prefs.getString(uniqueKeyBase + i, null) == null) {
+ return i - 1;
+ }
+ }
+ }
+
+ /**
+ * Helper method to remove some seedbox setting as identified by the order number.
+ * @param prefs The shared preferences object to remove settings from
+ * @param uniqueKeyBase The base of the key that is used as identifying (unique) key, for example
+ * 'seedbox_myseedbox_name_'
+ * @param removeKeyBases The keys of the stored preferences to remove, for example new String[] {
+ * 'seedbox_myseedbox_name_', 'seedbox_myseedbox_address_' }
+ * @param order The seedbox-unique order number (id) of the seedbox settings to remove
+ */
+ public void removeServerSetting(SharedPreferences prefs, String uniqueKeyBase, String[] removeKeyBases, int order) {
+ if (prefs.getString(uniqueKeyBase + order, null) == null)
+ return;
+ Editor edit = prefs.edit();
+ int max = getMaxSeedboxOrder(prefs, uniqueKeyBase);
+ // Move all settings 'higher' than the one to be removed 'down' one place
+ for (int i = order; i < max; i++) {
+ for (String keyBase : removeKeyBases) {
+ edit.putString(keyBase + i, prefs.getString(keyBase + (i + 1), null));
+ }
+ }
+ // Remove the last seedbox settings, of which we are now sure are no longer required
+ for (String keyBase : removeKeyBases) {
+ edit.remove(keyBase + max);
+ }
+ edit.commit();
+ }
+
+ /**
+ * Helper method to provide server settings for every configured seedbox of this type.
+ * @param prefs The shared preferences object to remove settings from
+ * @param orderOffset The offset to use when assigning unique ids to the server settings object (added to the
+ * seedbox-unique internal order number)
+ */
+ public List getAllServerSettings(SharedPreferences prefs, int orderOffset) {
+ List servers = new ArrayList();
+ for (int i = 0; true; i++) {
+ ServerSetting settings = getServerSetting(prefs, orderOffset, i);
+ if (settings != null)
+ servers.add(settings);
+ else
+ break;
+ }
+ return Collections.unmodifiableList(servers);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/SeedstuffSettings.java b/core/src/org/transdroid/core/seedbox/SeedstuffSettings.java
new file mode 100644
index 00000000..319b63a3
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/SeedstuffSettings.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.transdroid.core.app.settings.ServerSetting;
+import org.transdroid.daemon.Daemon;
+import org.transdroid.daemon.OS;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+
+/**
+ * Implementation of {@link SeedboxSettings} for Seedstuff seedboxes.
+ * @author Eric Kok
+ */
+public class SeedstuffSettings extends SeedboxSettingsImpl implements SeedboxSettings {
+
+ @Override
+ public String getName() {
+ return "Seedstuff";
+ }
+
+ @Override
+ public ServerSetting getServerSetting(SharedPreferences prefs, int orderOffset, int order) {
+ // @formatter:off
+ String server = prefs.getString("seedbox_seedstuff_server_" + order, null);
+ if (server == null) {
+ return null;
+ }
+ String user = prefs.getString("seedbox_seedstuff_user_" + order, null);
+ String pass = prefs.getString("seedbox_seedstuff_pass_" + order, null);
+ return new ServerSetting(
+ orderOffset + order,
+ prefs.getString("seedbox_seedstuff_name_" + order, null),
+ Daemon.rTorrent,
+ server,
+ null,
+ 443,
+ null,
+ 443,
+ true,
+ true,
+ null,
+ "/user/" + user,
+ true,
+ user,
+ pass,
+ null,
+ OS.Linux,
+ "/rtorrent/downloads",
+ "ftp://" + user + "@" + server + ":32001/rtorrent/downloads",
+ pass,
+ 6,
+ true,
+ true,
+ true);
+ // @formatter:on
+ }
+
+ @Override
+ public Intent getSettingsActivityIntent(Context context) {
+ return SeedstuffSettingsActivity_.intent(context).get();
+ }
+
+ @Override
+ public int getMaxSeedboxOrder(SharedPreferences prefs) {
+ return getMaxSeedboxOrder(prefs, "seedbox_seedstuff_server_");
+ }
+
+ @Override
+ public void removeServerSetting(SharedPreferences prefs, int order) {
+ removeServerSetting(prefs, "seedbox_seedstuff_server_", new String[] { "seedbox_seedstuff_name_",
+ "seedbox_seedstuff_server_", "seedbox_seedstuff_user_", "seedbox_seedstuff_pass_" }, order);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/SeedstuffSettingsActivity.java b/core/src/org/transdroid/core/seedbox/SeedstuffSettingsActivity.java
new file mode 100644
index 00000000..ba580bc0
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/SeedstuffSettingsActivity.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.OptionsItem;
+import org.androidannotations.annotations.OptionsMenu;
+import org.transdroid.core.R;
+import org.transdroid.core.gui.settings.*;
+
+import android.annotation.TargetApi;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+
+/**
+ * Activity that allows for the configuration of a Seedstuff seedbox. The key can be supplied to update an
+ * existing server setting instead of creating a new one.
+ * @author Eric Kok
+ */
+@EActivity
+@OptionsMenu(resName = "activity_deleteableprefs")
+public class SeedstuffSettingsActivity extends KeyBoundPreferencesActivity {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ // Load the raw preferences to show in this screen
+ init(R.xml.pref_seedbox_seedstuff,
+ SeedboxProvider.Seedstuff.getSettings().getMaxSeedboxOrder(
+ PreferenceManager.getDefaultSharedPreferences(this)));
+ initTextPreference("seedbox_seedstuff_name");
+ initTextPreference("seedbox_seedstuff_server");
+ initTextPreference("seedbox_seedstuff_user");
+ initTextPreference("seedbox_seedstuff_pass");
+
+ }
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ @OptionsItem(android.R.id.home)
+ protected void navigateUp() {
+ MainSettingsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
+ }
+
+ @OptionsItem(resName = "action_removesettings")
+ protected void removeSettings() {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SeedboxProvider.Seedstuff.getSettings().removeServerSetting(prefs, key);
+ finish();
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/XirvikDediSettings.java b/core/src/org/transdroid/core/seedbox/XirvikDediSettings.java
new file mode 100644
index 00000000..0f9787ee
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/XirvikDediSettings.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.transdroid.core.app.settings.ServerSetting;
+import org.transdroid.daemon.Daemon;
+import org.transdroid.daemon.OS;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+
+/**
+ * Implementation of {@link SeedboxSettings} for the Xirvik dedicated seedbox.
+ * @author Eric Kok
+ */
+public class XirvikDediSettings extends SeedboxSettingsImpl implements SeedboxSettings {
+
+ @Override
+ public String getName() {
+ return "Xirvik dedicated";
+ }
+
+ @Override
+ public ServerSetting getServerSetting(SharedPreferences prefs, int orderOffset, int order) {
+ // @formatter:off
+ String server = prefs.getString("seedbox_xirvikdedi_server_" + order, null);
+ if (server == null) {
+ return null;
+ }
+ Daemon type = Daemon.fromCode(prefs.getString("seedbox_xirvikdedi_client_" + order, null));
+ String user = prefs.getString("seedbox_xirvikdedi_user_" + order, null);
+ String pass = prefs.getString("seedbox_xirvikdedi_pass_" + order, null);
+ return new ServerSetting(
+ orderOffset + order,
+ prefs.getString("seedbox_xirvikdedi_name_" + order, null),
+ type,
+ server,
+ null,
+ 0,
+ null,
+ type == Daemon.uTorrent? 5010: 443,
+ type == Daemon.uTorrent? false: true,
+ type == Daemon.uTorrent? false: true,
+ null,
+ type == Daemon.Deluge? "/deluge": null,
+ true,
+ user,
+ pass,
+ type == Daemon.Deluge? "deluge": null,
+ OS.Linux,
+ type == Daemon.uTorrent? "/downloads": null,
+ "ftp://" + user + "@" + server + "/downloads",
+ pass,
+ 6,
+ true,
+ true,
+ true);
+ // @formatter:on
+ }
+
+ @Override
+ public Intent getSettingsActivityIntent(Context context) {
+ return XirvikDediSettingsActivity_.intent(context).get();
+ }
+
+ @Override
+ public int getMaxSeedboxOrder(SharedPreferences prefs) {
+ return getMaxSeedboxOrder(prefs, "seedbox_xirvikdedi_server_");
+ }
+
+ @Override
+ public void removeServerSetting(SharedPreferences prefs, int order) {
+ removeServerSetting(prefs, "seedbox_xirvikdedi_server_", new String[] { "seedbox_xirvikdedi_name_",
+ "seedbox_xirvikdedi_server_", "seedbox_xirvikdedi_client_", "seedbox_xirvikdedi_user_",
+ "seedbox_xirvikdedi_pass_" }, order);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/XirvikDediSettingsActivity.java b/core/src/org/transdroid/core/seedbox/XirvikDediSettingsActivity.java
new file mode 100644
index 00000000..f8336ec0
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/XirvikDediSettingsActivity.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.OptionsItem;
+import org.androidannotations.annotations.OptionsMenu;
+import org.transdroid.core.R;
+import org.transdroid.core.gui.settings.*;
+
+import android.annotation.TargetApi;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+
+/**
+ * Activity that allows for the configuration of a Xirvik dedicated seedbox. The key can be supplied to update an
+ * existing server setting instead of creating a new one.
+ * @author Eric Kok
+ */
+@EActivity
+@OptionsMenu(resName = "activity_deleteableprefs")
+public class XirvikDediSettingsActivity extends KeyBoundPreferencesActivity {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ // Load the raw preferences to show in this screen
+ init(R.xml.pref_seedbox_xirvikdedi,
+ SeedboxProvider.XirvikDedi.getSettings().getMaxSeedboxOrder(
+ PreferenceManager.getDefaultSharedPreferences(this)));
+ initTextPreference("seedbox_xirvikdedi_name");
+ initListPreference("seedbox_xirvikdedi_client");
+ initTextPreference("seedbox_xirvikdedi_server");
+ initTextPreference("seedbox_xirvikdedi_user");
+ initTextPreference("seedbox_xirvikdedi_pass");
+
+ }
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ @OptionsItem(android.R.id.home)
+ protected void navigateUp() {
+ MainSettingsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
+ }
+
+ @OptionsItem(resName = "action_removesettings")
+ protected void removeSettings() {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SeedboxProvider.XirvikDedi.getSettings().removeServerSetting(prefs, key);
+ finish();
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/XirvikSemiSettings.java b/core/src/org/transdroid/core/seedbox/XirvikSemiSettings.java
new file mode 100644
index 00000000..7de3d8e2
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/XirvikSemiSettings.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.transdroid.core.app.settings.ServerSetting;
+import org.transdroid.daemon.Daemon;
+import org.transdroid.daemon.OS;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+
+/**
+ * Implementation of {@link SeedboxSettings} for a Xirvik semi-dedicated seedbox.
+ * @author Eric Kok
+ */
+public class XirvikSemiSettings extends SeedboxSettingsImpl implements SeedboxSettings {
+
+ @Override
+ public String getName() {
+ return "Xirvik semi-dedi";
+ }
+
+ @Override
+ public ServerSetting getServerSetting(SharedPreferences prefs, int orderOffset, int order) {
+ // @formatter:off
+ String server = prefs.getString("seedbox_xirviksemi_server_" + order, null);
+ if (server == null) {
+ return null;
+ }
+ String user = prefs.getString("seedbox_xirviksemi_user_" + order, null);
+ String pass = prefs.getString("seedbox_xirviksemi_pass_" + order, null);
+ return new ServerSetting(
+ orderOffset + order,
+ prefs.getString("seedbox_xirviksemi_name_" + order, null),
+ Daemon.rTorrent,
+ server,
+ null,
+ 0,
+ null,
+ 443,
+ true,
+ true,
+ null,
+ "/RPC2",
+ true,
+ user,
+ pass,
+ null,
+ OS.Linux,
+ null,
+ "ftp://" + user + "@" + server + "/downloads",
+ pass,
+ 6,
+ true,
+ true,
+ true);
+ // @formatter:on
+ }
+
+ @Override
+ public Intent getSettingsActivityIntent(Context context) {
+ return XirvikSemiSettingsActivity_.intent(context).get();
+ }
+
+ @Override
+ public int getMaxSeedboxOrder(SharedPreferences prefs) {
+ return getMaxSeedboxOrder(prefs, "seedbox_xirviksemi_server_");
+ }
+
+ @Override
+ public void removeServerSetting(SharedPreferences prefs, int order) {
+ removeServerSetting(prefs, "seedbox_xirviksemi_server_", new String[] { "seedbox_xirviksemi_name_",
+ "seedbox_xirviksemi_server_", "seedbox_xirviksemi_user_", "seedbox_xirviksemi_pass_" }, order);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/XirvikSemiSettingsActivity.java b/core/src/org/transdroid/core/seedbox/XirvikSemiSettingsActivity.java
new file mode 100644
index 00000000..e8badbb9
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/XirvikSemiSettingsActivity.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.OptionsItem;
+import org.androidannotations.annotations.OptionsMenu;
+import org.transdroid.core.R;
+import org.transdroid.core.gui.settings.*;
+
+import android.annotation.TargetApi;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+
+/**
+ * Activity that allows for the configuration of a Xirvik semi-dedicated seedbox. The key can be supplied to update an
+ * existing server setting instead of creating a new one.
+ * @author Eric Kok
+ */
+@EActivity
+@OptionsMenu(resName = "activity_deleteableprefs")
+public class XirvikSemiSettingsActivity extends KeyBoundPreferencesActivity {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ // Load the raw preferences to show in this screen
+ init(R.xml.pref_seedbox_xirviksemi,
+ SeedboxProvider.XirvikSemi.getSettings().getMaxSeedboxOrder(
+ PreferenceManager.getDefaultSharedPreferences(this)));
+ initTextPreference("seedbox_xirviksemi_name");
+ initTextPreference("seedbox_xirviksemi_server");
+ initTextPreference("seedbox_xirviksemi_user");
+ initTextPreference("seedbox_xirviksemi_pass");
+
+ }
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ @OptionsItem(android.R.id.home)
+ protected void navigateUp() {
+ MainSettingsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
+ }
+
+ @OptionsItem(resName = "action_removesettings")
+ protected void removeSettings() {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SeedboxProvider.XirvikSemi.getSettings().removeServerSetting(prefs, key);
+ finish();
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/XirvikSharedSettings.java b/core/src/org/transdroid/core/seedbox/XirvikSharedSettings.java
new file mode 100644
index 00000000..d172ee16
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/XirvikSharedSettings.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.transdroid.core.app.settings.ServerSetting;
+import org.transdroid.daemon.Daemon;
+import org.transdroid.daemon.OS;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+
+/**
+ * Implementation of {@link SeedboxSettings} for a Xirvik shared seedbox.
+ * @author Eric Kok
+ */
+public class XirvikSharedSettings extends SeedboxSettingsImpl implements SeedboxSettings {
+
+ @Override
+ public String getName() {
+ return "Xirvik shared";
+ }
+
+ @Override
+ public ServerSetting getServerSetting(SharedPreferences prefs, int orderOffset, int order) {
+ // @formatter:off
+ String server = prefs.getString("seedbox_xirvikshared_server_" + order, null);
+ if (server == null) {
+ return null;
+ }
+ String user = prefs.getString("seedbox_xirvikshared_user_" + order, null);
+ String pass = prefs.getString("seedbox_xirvikshared_pass_" + order, null);
+ return new ServerSetting(
+ orderOffset + order,
+ prefs.getString("seedbox_xirvikshared_name_" + order, null),
+ Daemon.rTorrent,
+ server,
+ null,
+ 0,
+ null,
+ 443,
+ true,
+ true,
+ null,
+ "/RPC2",
+ true,
+ user,
+ pass,
+ null,
+ OS.Linux,
+ null,
+ "ftp://" + user + "@" + server + "/downloads",
+ pass,
+ 6,
+ true,
+ true,
+ true);
+ // @formatter:on
+ }
+
+ @Override
+ public Intent getSettingsActivityIntent(Context context) {
+ return XirvikSharedSettingsActivity_.intent(context).get();
+ }
+
+ @Override
+ public int getMaxSeedboxOrder(SharedPreferences prefs) {
+ return getMaxSeedboxOrder(prefs, "seedbox_xirvikshared_server_");
+ }
+
+ @Override
+ public void removeServerSetting(SharedPreferences prefs, int order) {
+ removeServerSetting(prefs, "seedbox_xirvikshared_server_", new String[] { "seedbox_xirvikshared_name_",
+ "seedbox_xirvikshared_server_", "seedbox_xirvikshared_user_", "seedbox_xirvikshared_pass_" }, order);
+ }
+
+}
diff --git a/core/src/org/transdroid/core/seedbox/XirvikSharedSettingsActivity.java b/core/src/org/transdroid/core/seedbox/XirvikSharedSettingsActivity.java
new file mode 100644
index 00000000..90affa9f
--- /dev/null
+++ b/core/src/org/transdroid/core/seedbox/XirvikSharedSettingsActivity.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010-2013 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 .
+ */
+package org.transdroid.core.seedbox;
+
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.OptionsItem;
+import org.androidannotations.annotations.OptionsMenu;
+import org.transdroid.core.R;
+import org.transdroid.core.gui.settings.*;
+
+import android.annotation.TargetApi;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+
+/**
+ * Activity that allows for the configuration of a Xirvik shared seedbox. The key can be supplied to update an
+ * existing server setting instead of creating a new one.
+ * @author Eric Kok
+ */
+@EActivity
+@OptionsMenu(resName = "activity_deleteableprefs")
+public class XirvikSharedSettingsActivity extends KeyBoundPreferencesActivity {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ // Load the raw preferences to show in this screen
+ init(R.xml.pref_seedbox_xirvikshared,
+ SeedboxProvider.XirvikShared.getSettings().getMaxSeedboxOrder(
+ PreferenceManager.getDefaultSharedPreferences(this)));
+ initTextPreference("seedbox_xirvikshared_name");
+ initTextPreference("seedbox_xirvikshared_server");
+ initTextPreference("seedbox_xirvikshared_user");
+ initTextPreference("seedbox_xirvikshared_pass");
+
+ }
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ @OptionsItem(android.R.id.home)
+ protected void navigateUp() {
+ MainSettingsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
+ }
+
+ @OptionsItem(resName = "action_removesettings")
+ protected void removeSettings() {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SeedboxProvider.XirvikShared.getSettings().removeServerSetting(prefs, key);
+ finish();
+ }
+
+}
diff --git a/core/src/org/transdroid/core/service/ControlService.java b/core/src/org/transdroid/core/service/ControlService.java
index 57c5376e..4a038dae 100644
--- a/core/src/org/transdroid/core/service/ControlService.java
+++ b/core/src/org/transdroid/core/service/ControlService.java
@@ -57,7 +57,7 @@ public class ControlService extends IntentService {
// See if the supplied server id is pointing to a valid server
int serverId = intent.getIntExtra(EXTRA_DAEMON, -1);
- if (serverId < 0 || serverId > applicationSettings.getMaxServer()) {
+ if (serverId < 0 || serverId > applicationSettings.getMaxOfAllServers()) {
// This server does not exist (any more) or no valid EXTRA_DAEMON value was supplied
Log.e(this, "The control service can be started with a DAEMON extra zero-based server id, but the"
+ "supplied id was invalid or no longer points to an existing server.");
@@ -77,7 +77,7 @@ public class ControlService extends IntentService {
return;
}
int serverId = config.getServerId();
- if (serverId < 0 || serverId > applicationSettings.getMaxServer()) {
+ if (serverId < 0 || serverId > applicationSettings.getMaxOfAllServers()) {
Log.e(this, "The home screen widget points to a server that no longer exists.");
return;
}
diff --git a/core/src/org/transdroid/core/service/ServerCheckerService.java b/core/src/org/transdroid/core/service/ServerCheckerService.java
index 0a35b48e..8e9b5746 100644
--- a/core/src/org/transdroid/core/service/ServerCheckerService.java
+++ b/core/src/org/transdroid/core/service/ServerCheckerService.java
@@ -75,7 +75,7 @@ public class ServerCheckerService extends IntentService {
}
int notifyBase = 10000;
- for (ServerSetting server : applicationSettings.getServerSettings()) {
+ for (ServerSetting server : applicationSettings.getAllServerSettings()) {
// No need to check if the server is not properly configured or none of the two types of notifications are
// enabled by the user for this specific server
diff --git a/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java b/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java
index 9015d1a1..bfd0f8a7 100644
--- a/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java
+++ b/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java
@@ -121,7 +121,7 @@ public class ListWidgetConfigActivity extends SherlockActivity {
sortOrders.add(new SortByListItem(this, order));
}
serverSpinner.setAdapter(new SimpleListItemSpinnerAdapter(this, 0, applicationSettings
- .getServerSettings()));
+ .getAllServerSettings()));
filterSpinner.setAdapter(new SimpleListItemSpinnerAdapter(this, 0, StatusType
.getAllStatusTypes(this)));
sortSpinner.setAdapter(new SimpleListItemSpinnerAdapter(this, 0, sortOrders));
diff --git a/core/src/org/transdroid/core/widget/ListWidgetProvider.java b/core/src/org/transdroid/core/widget/ListWidgetProvider.java
index e3cd0242..89fd7d56 100644
--- a/core/src/org/transdroid/core/widget/ListWidgetProvider.java
+++ b/core/src/org/transdroid/core/widget/ListWidgetProvider.java
@@ -110,7 +110,7 @@ public class ListWidgetProvider extends AppWidgetProvider {
if (context == null || config == null)
return null;
ApplicationSettings appSettings = ApplicationSettings_.getInstance_(context);
- if (config.getServerId() < 0 || config.getServerId() > appSettings.getMaxServer()) {
+ if (config.getServerId() < 0 || config.getServerId() > appSettings.getMaxOfAllServers()) {
Log.e(context, "Tried to set up widget " + appWidgetId + " but the bound server ID " + config.getServerId()
+ " no longer exists.");
return null;
diff --git a/full/AndroidManifest.xml b/full/AndroidManifest.xml
index 26b62da5..63183c3c 100644
--- a/full/AndroidManifest.xml
+++ b/full/AndroidManifest.xml
@@ -192,6 +192,12 @@
+
+
+
+
+
+
+
+
+
+
+ true
+
+ true
+
+ true
+
+
\ No newline at end of file
diff --git a/lite/AndroidManifest.xml b/lite/AndroidManifest.xml
index a64f4e43..940e300c 100644
--- a/lite/AndroidManifest.xml
+++ b/lite/AndroidManifest.xml
@@ -183,6 +183,12 @@
+
+
+
+
+
+
diff --git a/lite/res/values/bools.xml b/lite/res/values/bools.xml
new file mode 100644
index 00000000..df85c6ba
--- /dev/null
+++ b/lite/res/values/bools.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+ false
+
+ false
+
+ true
+
+
\ No newline at end of file