diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b9fd25..29f4b77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
+### Version 1.0.49 Tag: v1.0.49 (2020-09-26)
+ - add support of hypertext redirection in description (@freeboub)
+ - various crash fixes (@freeboub)
+ - avoid going to pip when leaving the app due to share button (@freeboub)
+ - Add ability to filter server list (@freeboub)
+ - Refactor Toast error management to split network error (@freeboub)
+ - keep video aspect ratio for pip (@freeboub)
+ - navigation bar was not restored when leaving landscape mode (@freeboub)
+
+### Version 1.0.48 Tag: v1.0.48 (2020-09-26)
+ - f-droid release to fix auto deployment
+
### Version 1.0.47 Tag: v1.0.47 (2020-07-10)
* Authentication refresh
diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
new file mode 100644
index 0000000..3876b58
--- /dev/null
+++ b/DEPLOYMENT.md
@@ -0,0 +1,15 @@
+## Internal deployment notes
+
+ 1. merge pull-requests on github into develop
+ 2. Locally switch to develop
+ 3. Pull github develop
+ 4. Pull weblate develop
+ 5. Add change logs (fastlane/metadata/android/en-US/changelogs/XXX.txt)
+ 6. Push to gitlab and github
+ 7. Merge request into master and merge
+ 8. Add Release Tag on master branch
+ 9. Release to play store
+ 10. Wait for gitlab -> github sync
+ 11. Run publishGithub
+
+
diff --git a/Gemfile.lock b/Gemfile.lock
index 6f4436d..6e7ebae 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -6,8 +6,8 @@ GEM
public_suffix (>= 2.0.2, < 5.0)
atomos (0.1.3)
aws-eventstream (1.1.0)
- aws-partitions (1.341.0)
- aws-sdk-core (3.103.0)
+ aws-partitions (1.353.0)
+ aws-sdk-core (3.104.3)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
@@ -15,8 +15,8 @@ GEM
aws-sdk-kms (1.36.0)
aws-sdk-core (~> 3, >= 3.99.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.74.0)
- aws-sdk-core (~> 3, >= 3.102.1)
+ aws-sdk-s3 (1.76.0)
+ aws-sdk-core (~> 3, >= 3.104.1)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.1)
@@ -33,9 +33,9 @@ GEM
rake (~> 13.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
- dotenv (2.7.5)
+ dotenv (2.7.6)
emoji_regex (3.0.0)
- excon (0.75.0)
+ excon (0.76.0)
faraday (1.0.1)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
@@ -43,8 +43,8 @@ GEM
http-cookie (~> 1.0.0)
faraday_middleware (1.0.0)
faraday (~> 1.0)
- fastimage (2.1.7)
- fastlane (2.151.2)
+ fastimage (2.2.0)
+ fastlane (2.155.3)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
aws-sdk-s3 (~> 1.0)
@@ -55,9 +55,9 @@ GEM
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
- faraday (>= 0.17, < 2.0)
+ faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
- faraday_middleware (>= 0.13.1, < 2.0)
+ faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-api-client (>= 0.37.0, < 0.39.0)
@@ -92,17 +92,17 @@ GEM
google-cloud-core (1.5.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
- google-cloud-env (1.3.2)
+ google-cloud-env (1.3.3)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.0.1)
- google-cloud-storage (1.26.2)
+ google-cloud-storage (1.27.0)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-api-client (~> 0.33)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
mini_mime (~> 1.0)
- googleauth (0.13.0)
+ googleauth (0.13.1)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@@ -119,13 +119,13 @@ GEM
memoist (0.16.2)
mini_magick (4.10.1)
mini_mime (1.0.2)
- multi_json (1.14.1)
+ multi_json (1.15.0)
multipart-post (2.0.0)
- nanaimo (0.2.6)
+ nanaimo (0.3.0)
naturally (2.2.0)
- os (1.1.0)
+ os (1.1.1)
plist (3.5.0)
- public_suffix (4.0.1)
+ public_suffix (4.0.5)
rake (13.0.1)
representable (3.0.4)
declarative (< 0.1.0)
@@ -147,22 +147,22 @@ GEM
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
- tty-cursor (0.7.0)
- tty-screen (0.7.0)
+ tty-cursor (0.7.1)
+ tty-screen (0.8.1)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
- unicode-display_width (1.6.0)
+ unicode-display_width (1.7.0)
word_wrap (1.0.0)
- xcodeproj (1.17.0)
+ xcodeproj (1.17.1)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
- nanaimo (~> 0.2.6)
+ nanaimo (~> 0.3.0)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.0)
diff --git a/README.md b/README.md
index df66918..4b2d85b 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,13 @@ Please note this is app is in beta and is still missing a lot of features.
* Beta Test on Google Play: https://play.google.com/store/apps/details?id=net.schueller.peertube
* F-Droid: https://f-droid.org/packages/net.schueller.peertube/
+## Releases
+Release Tags are automatically built and deployed to the play store but not released to production right away.
+To use the latest tagged release download it from github or fdroid (~1 day delay).
+
+## Reproducible Builds
+Reproducible builds currently does not work.
+
## Help Translate
* https://hosted.weblate.org/projects/peertube/
@@ -48,11 +55,11 @@ Please note this is app is in beta and is still missing a lot of features.
* Video speed selection
* Video quality selection
* Server selection
+* Video overlay play and draggable video window
## Coming soon
* Video Playback via WebRTC
-* Video overlay play and draggable video window
* Comment videos
* Report Videos
* User / Channel Overview Page
@@ -66,4 +73,4 @@ Whether you have ideas, translations, design changes, code cleaning, or real hea
-Bitcoin: 1LoTXo728HzYTtyfbkaf5ewSRvu8ABTDPm
+Bitcoin: 1LoTXo728HzYTtyfbkaf5ewSRvu8ABTDPm
diff --git a/app/src/main/java/net/schueller/peertube/activity/AccountActivity.java b/app/src/main/java/net/schueller/peertube/activity/AccountActivity.java
index d80b58c..7daf17b 100644
--- a/app/src/main/java/net/schueller/peertube/activity/AccountActivity.java
+++ b/app/src/main/java/net/schueller/peertube/activity/AccountActivity.java
@@ -37,6 +37,7 @@ import net.schueller.peertube.R;
import net.schueller.peertube.adapter.ChannelAdapter;
import net.schueller.peertube.adapter.VideoAdapter;
import net.schueller.peertube.helper.APIUrlHelper;
+import net.schueller.peertube.helper.ErrorHelper;
import net.schueller.peertube.helper.MetaDataHelper;
import net.schueller.peertube.model.Account;
import net.schueller.peertube.model.Avatar;
@@ -206,7 +207,7 @@ public class AccountActivity extends CommonActivity {
}
} else {
- Toast.makeText(AccountActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
+ ErrorHelper.showToastFromCommunicationError( AccountActivity.this, null );
}
@@ -215,7 +216,7 @@ public class AccountActivity extends CommonActivity {
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
Log.wtf(TAG, t.fillInStackTrace());
- Toast.makeText(AccountActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
+ ErrorHelper.showToastFromCommunicationError( AccountActivity.this, t );
}
});
@@ -247,8 +248,7 @@ public class AccountActivity extends CommonActivity {
}
} else{
- Toast.makeText(AccountActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
-
+ ErrorHelper.showToastFromCommunicationError( AccountActivity.this, null );
}
isLoadingVideos = false;
@@ -258,7 +258,7 @@ public class AccountActivity extends CommonActivity {
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
Log.wtf("err", t.fillInStackTrace());
- Toast.makeText(AccountActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
+ ErrorHelper.showToastFromCommunicationError( AccountActivity.this, t );
isLoadingVideos = false;
swipeRefreshLayoutVideos.setRefreshing(false);
}
@@ -281,7 +281,7 @@ public class AccountActivity extends CommonActivity {
} else {
- Toast.makeText(AccountActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
+ ErrorHelper.showToastFromCommunicationError( AccountActivity.this, null );
}
@@ -290,7 +290,7 @@ public class AccountActivity extends CommonActivity {
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
Log.wtf(TAG, t.fillInStackTrace());
- Toast.makeText(AccountActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
+ ErrorHelper.showToastFromCommunicationError( AccountActivity.this, t );
}
});
}
diff --git a/app/src/main/java/net/schueller/peertube/activity/MeActivity.java b/app/src/main/java/net/schueller/peertube/activity/MeActivity.java
index 9e0c6da..7a62427 100644
--- a/app/src/main/java/net/schueller/peertube/activity/MeActivity.java
+++ b/app/src/main/java/net/schueller/peertube/activity/MeActivity.java
@@ -31,6 +31,7 @@ import android.widget.TextView;
import net.schueller.peertube.R;
import net.schueller.peertube.helper.APIUrlHelper;
+import net.schueller.peertube.helper.ErrorHelper;
import net.schueller.peertube.model.Avatar;
import net.schueller.peertube.model.Me;
import net.schueller.peertube.network.GetUserService;
@@ -162,6 +163,7 @@ public class MeActivity extends CommonActivity {
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+ ErrorHelper.showToastFromCommunicationError( MeActivity.this, t );
account.setVisibility(View.GONE);
}
});
diff --git a/app/src/main/java/net/schueller/peertube/activity/SearchServerActivity.java b/app/src/main/java/net/schueller/peertube/activity/SearchServerActivity.java
index 6c57cf7..b263f39 100644
--- a/app/src/main/java/net/schueller/peertube/activity/SearchServerActivity.java
+++ b/app/src/main/java/net/schueller/peertube/activity/SearchServerActivity.java
@@ -28,13 +28,17 @@ import retrofit2.Response;
import android.os.Bundle;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import net.schueller.peertube.R;
import net.schueller.peertube.adapter.ServerSearchAdapter;
import net.schueller.peertube.helper.APIUrlHelper;
+import net.schueller.peertube.helper.ErrorHelper;
import net.schueller.peertube.model.ServerList;
import net.schueller.peertube.network.GetServerListDataService;
import net.schueller.peertube.network.RetrofitInstance;
@@ -46,9 +50,13 @@ public class SearchServerActivity extends CommonActivity {
private ServerSearchAdapter serverAdapter;
private SwipeRefreshLayout swipeRefreshLayout;
+ private EditText searchTextView;
+
+ private final static String TAG = "SearchServerActivity";
private int currentStart = 0;
- private int count = 12;
+ private final int count = 12;
+ private String lastSearchtext = "";
private TextView emptyView;
private RecyclerView recyclerView;
@@ -77,11 +85,20 @@ public class SearchServerActivity extends CommonActivity {
}
+ TextView.OnEditorActionListener onSearchTextValidated = ( textView, i, keyEvent ) -> {
+ if ( keyEvent != null && keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER
+ || i == EditorInfo.IME_ACTION_GO ) {
+ loadServers(currentStart, count, textView.getText().toString());
+ }
+ return false;
+ };
private void loadList() {
recyclerView = findViewById(R.id.serverRecyclerView);
swipeRefreshLayout = findViewById(R.id.serversSwipeRefreshLayout);
+ searchTextView = findViewById(R.id.search_server_input_field );
+ searchTextView.setOnEditorActionListener( onSearchTextValidated );
emptyView = findViewById(R.id.empty_server_selection_view);
@@ -91,7 +108,7 @@ public class SearchServerActivity extends CommonActivity {
serverAdapter = new ServerSearchAdapter(new ArrayList<>(), this);
recyclerView.setAdapter(serverAdapter);
- loadServers(currentStart, count);
+ loadServers(currentStart, count, searchTextView.getText().toString() );
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
@@ -107,7 +124,7 @@ public class SearchServerActivity extends CommonActivity {
if (!recyclerView.canScrollVertically(RecyclerView.FOCUS_DOWN)) {
if (!isLoading) {
currentStart = currentStart + count;
- loadServers(currentStart, count);
+ loadServers(currentStart, count, searchTextView.getText().toString());
}
}
}
@@ -119,26 +136,29 @@ public class SearchServerActivity extends CommonActivity {
// Refresh items
if (!isLoading) {
currentStart = 0;
- loadServers(currentStart, count);
+ loadServers(currentStart, count, searchTextView.getText().toString());
}
});
}
-
-
- private void loadServers(int start, int count) {
+ private void loadServers(int start, int count, String searchtext) {
isLoading = true;
GetServerListDataService service = RetrofitInstance.getRetrofitInstance(
APIUrlHelper.getServerIndexUrl(SearchServerActivity.this)
).create(GetServerListDataService.class);
+ if ( !searchtext.equals( lastSearchtext ) )
+ {
+ currentStart = 0;
+ lastSearchtext = searchtext;
+ }
Call call;
- call = service.getInstancesData(start, count);
+ call = service.getInstancesData(start, count, searchtext);
Log.d("URL Called", call.request().url() + "");
@@ -171,7 +191,7 @@ public class SearchServerActivity extends CommonActivity {
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
Log.wtf("err", t.fillInStackTrace());
- Toast.makeText(SearchServerActivity.this, getString(R.string.api_error), Toast.LENGTH_SHORT).show();
+ ErrorHelper.showToastFromCommunicationError( SearchServerActivity.this, t );
isLoading = false;
swipeRefreshLayout.setRefreshing(false);
}
diff --git a/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java b/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java
index b00bfa5..ae7b650 100644
--- a/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java
+++ b/app/src/main/java/net/schueller/peertube/activity/VideoListActivity.java
@@ -59,6 +59,8 @@ import com.mikepenz.iconics.IconicsDrawable;
import net.schueller.peertube.R;
import net.schueller.peertube.adapter.VideoAdapter;
import net.schueller.peertube.helper.APIUrlHelper;
+import net.schueller.peertube.helper.ErrorHelper;
+import net.schueller.peertube.model.Video;
import net.schueller.peertube.model.VideoList;
import net.schueller.peertube.network.GetUserService;
import net.schueller.peertube.network.GetVideoDataService;
@@ -348,7 +350,10 @@ public class VideoListActivity extends CommonActivity {
}
if (response.body() != null) {
- videoAdapter.setData(response.body().getVideoArrayList());
+ ArrayList