<imgsrc="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png"alt="Get it on Google Play"height="80"/></a>
<imgsrc="http://2312.nl/images/screenshot_transdroid_main.png"alt="Screen shot of the main torrents listing screen"width="280"/>
Manage your torrents from your Android device with Transdroid. All popular clients are supported: µTorrent, Transmission, rTorrent, Vuze, Deluge, BitTorrent 6, qBittorrent and many more. You can view and manage the running torrents and individual files. Adding is easy via the integrated search or RSS feeds (full version required). Monitor progress using the home screen widget or background alarm service.
<imgsrc="https://2312.nl/images/screenshot_transdroid_main.png"alt="Screen shot of the main torrents listing screen"width="280"/>
Manage your torrents from your Android device with Transdroid.
All popular clients are supported: µTorrent, Transmission, rTorrent, Vuze, Deluge, BitTorrent 6, qBittorrent, and many more.
You can view and manage running torrents and individual files.
Adding is easy via the integrated search or RSS feeds (full version required).
Monitor progress using the home screen widget or background alarm service.
Contributions
=============
Code and design contributions are very welcome. You might want to contact me via social networks (G+, Twitter) or e-mail first. Please note all code will be GNU GPL v3 licensed.
Code and design contributions are very welcome.
You might want to contact me via social networks (Twitter) or e-mail first.
Please note that all code will be licensed in GNU GPLv3.
Please respect the coding standards for easier merging. master contains the current release version of Transdroid while dev contains the active development version. However, larger, new features are developed in their own branch.
Please respect the coding standards for easier merging.
`master` contains the current release version of Transdroid while `dev` contains the active development version.
However, larger and new features will be developed in their own branch.
Code structure
==============
Starting with version 2.3.0, Transdroid is developed in Android Studio, fully integrating with the Gradle build system. It is (since version 2.5.0) compiled against Android 5.1 (API level 22) and (since version 2.2.0) supporting ICS (API level 15) and up only. To support lite (Transdrone, specially for the Play Store) and full (Transdroid) versions of the app, build flavours are defined in gradle, which contain version-specific resources. Dependencies are managed via JCentral et al. in the app's build.gradle file.
Starting with version 2.3.0, Transdroid is developed in Android Studio, fully integrating with the Gradle build system.
It is (since version 2.5.18) compiled against Android 10 (API level 29) and (since version 2.2.0) supporting Android ICS (API level 15) and up only.
To support lite (Transdrone, specially for the Play Store) and full (Transdroid) versions of the app, build flavours are defined in gradle, which contain version-specific resources.
Dependencies are managed via JCentral et al. in the app's build.gradle file.
Developed By
============
Designed and developed by [Eric Kok](eric@2312.nl) of [2312 development](http://2312.nl). Contributions by various others (see commit log).
Designed and developed by [Eric Kok](eric@2312.nl) of [2312 development](https://2312.nl/).
Contributions by various others (see commit log).
License
=======
Copyright 2010-2018 Eric Kok et al.
Copyright 2010-2020 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
@ -95,8 +96,6 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -95,8 +96,6 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
protectedbooleanisLoadingTorrent=false;
@InstanceState
protectedbooleanhasCriticalError=false;
privateServerSettingcurrentServerSettings=null;
// Views
@ViewById
protectedViewdetailsContainer;
@ -112,6 +111,170 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -112,6 +111,170 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -133,12 +296,9 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -133,12 +296,9 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
swipeRefreshLayout.setRefreshing(false);// Use our custom indicator
}
});
}
@ -161,6 +321,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -161,6 +321,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -186,6 +347,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -186,6 +347,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -205,6 +367,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -205,6 +367,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -220,6 +383,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -220,6 +383,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -239,6 +403,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -239,6 +403,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -261,6 +426,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -261,6 +426,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -280,9 +446,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -280,9 +446,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -328,7 +492,6 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -328,7 +492,6 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
returntrue;
}
returnfalse;
}
});
}
@ -509,177 +672,9 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@@ -509,177 +672,9 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen
@ -110,6 +112,128 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -110,6 +112,128 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -127,12 +251,9 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -127,12 +251,9 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
}
// Allow pulls on the list view to refresh the torrents
@ -141,6 +262,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -141,6 +262,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -155,6 +277,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -155,6 +277,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -182,6 +305,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -182,6 +305,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
/**
*Clearsthecurrentlyvisiblelistoftorrents.
*
*@paramclearErrorAlsoclearanyerrormessage
*@paramclearFilterAlsoclearanyselectedfilter
*/
@ -200,6 +324,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -200,6 +324,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -222,6 +347,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -222,6 +347,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -265,134 +391,6 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -265,134 +391,6 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
// Refresh the activity (that contains this fragment) when the empty view gear is clicked
@ -425,6 +423,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -425,6 +423,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -446,6 +445,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -446,6 +445,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -460,6 +460,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -460,6 +460,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -489,6 +490,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@@ -489,6 +490,7 @@ public class TorrentsFragment extends Fragment implements OnLabelPickedListener
@ -78,18 +79,26 @@ public class SimpleListItemAdapter extends BaseAdapter {
@@ -78,18 +79,26 @@ public class SimpleListItemAdapter extends BaseAdapter {
@ -98,12 +107,6 @@ public class SimpleListItemAdapter extends BaseAdapter {
@@ -98,12 +107,6 @@ public class SimpleListItemAdapter extends BaseAdapter {
@ -34,6 +35,7 @@ public class SimpleListItemSpinnerAdapter<T extends SimpleListItem> extends Arra
@@ -34,6 +35,7 @@ public class SimpleListItemSpinnerAdapter<T extends SimpleListItem> extends Arra
@ -72,9 +72,7 @@ public class TorrentFilePriorityLayout extends RelativeLayout {
@@ -72,9 +72,7 @@ public class TorrentFilePriorityLayout extends RelativeLayout {
@ -57,7 +59,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
@@ -57,7 +59,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
@ -44,6 +45,7 @@ public class SelectionManagerMode implements MultiChoiceModeListener, OnModifica
@@ -44,6 +45,7 @@ public class SelectionManagerMode implements MultiChoiceModeListener, OnModifica
@ -58,6 +60,7 @@ public class SelectionManagerMode implements MultiChoiceModeListener, OnModifica
@@ -58,6 +60,7 @@ public class SelectionManagerMode implements MultiChoiceModeListener, OnModifica
@ -47,6 +50,7 @@ public class SelectionModificationSpinner extends Spinner {
@@ -47,6 +50,7 @@ public class SelectionModificationSpinner extends Spinner {
@ -56,6 +60,7 @@ public class SelectionModificationSpinner extends Spinner {
@@ -56,6 +60,7 @@ public class SelectionModificationSpinner extends Spinner {
@ -75,19 +80,30 @@ public class SelectionModificationSpinner extends Spinner {
@@ -75,19 +80,30 @@ public class SelectionModificationSpinner extends Spinner {
@ -105,13 +121,4 @@ public class SelectionModificationSpinner extends Spinner {
@@ -105,13 +121,4 @@ public class SelectionModificationSpinner extends Spinner {
@ -111,62 +109,6 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -111,62 +109,6 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -196,7 +138,8 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -196,7 +138,8 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -234,6 +177,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -234,6 +177,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -253,6 +197,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -253,6 +197,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -267,6 +212,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -267,6 +212,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -332,7 +278,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -332,7 +278,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -354,12 +300,8 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -354,12 +300,8 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -367,28 +309,25 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -367,28 +309,25 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -424,7 +363,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -424,7 +363,7 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -439,4 +378,58 @@ public class RssFeedsActivity extends AppCompatActivity {
@@ -439,4 +378,58 @@ public class RssFeedsActivity extends AppCompatActivity {
@ -208,6 +224,7 @@ public class SearchActivity extends AppCompatActivity {
@@ -208,6 +224,7 @@ public class SearchActivity extends AppCompatActivity {
@Override
protectedvoidonNewIntent(Intentintent){
super.onNewIntent(intent);
handleIntent(intent);
refreshSearch();
}
@ -236,28 +253,9 @@ public class SearchActivity extends AppCompatActivity {
@@ -236,28 +253,9 @@ public class SearchActivity extends AppCompatActivity {
@ -42,7 +43,7 @@ public class SearchSettingsDropDownAdapter extends FilterListItemAdapter {
@@ -42,7 +43,7 @@ public class SearchSettingsDropDownAdapter extends FilterListItemAdapter {
@ -51,6 +51,25 @@ public class HelpSettingsActivity extends PreferenceCompatActivity {
@@ -51,6 +51,25 @@ public class HelpSettingsActivity extends PreferenceCompatActivity {
@ -75,40 +94,6 @@ public class HelpSettingsActivity extends PreferenceCompatActivity {
@@ -75,40 +94,6 @@ public class HelpSettingsActivity extends PreferenceCompatActivity {
@ -50,10 +51,15 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -50,10 +51,15 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -86,14 +92,6 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -86,14 +92,6 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -103,6 +101,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -103,6 +101,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -113,6 +112,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -113,6 +112,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -125,6 +125,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -125,6 +125,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -146,6 +147,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -146,6 +147,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -156,6 +158,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -156,6 +158,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -167,6 +170,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -167,6 +170,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -185,6 +189,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -185,6 +189,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -195,6 +200,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@@ -195,6 +200,7 @@ public abstract class KeyBoundPreferencesActivity extends PreferenceCompatActivi
@ -78,83 +79,44 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@@ -78,83 +79,44 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@ -228,8 +190,8 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@@ -228,8 +190,8 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@ -274,8 +236,8 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@@ -274,8 +236,8 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@ -287,8 +249,7 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@@ -287,8 +249,7 @@ public class MainSettingsActivity extends PreferenceCompatActivity {
@Override
protectedDialogonCreateDialog(intid){
switch(id){
caseDIALOG_ADDSEEDBOX:
if(id==DIALOG_ADDSEEDBOX){
// Open dialog to pick one of the supported seedbox providers (or a normal server)