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